From 01018fe6004e66d35df3e07006147f5d26e55c73 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Fri, 5 Jul 2019 10:22:38 +0200 Subject: [PATCH 1/4] Remap 1.13 piston tile entity --- .../block_entity_handlers/PistonHandler.java | 92 +++++++++++++++++++ .../BackwardsBlockEntityProvider.java | 1 + .../storage/BackwardsBlockStorage.java | 18 +++- 3 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java new file mode 100644 index 00000000..f4ea822c --- /dev/null +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java @@ -0,0 +1,92 @@ +package nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.block_entity_handlers; + +import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.data.BackwardsMappings; +import nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.providers.BackwardsBlockEntityProvider; +import us.myles.ViaVersion.api.Via; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.blockconnections.ConnectionData; +import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.MappingData; +import us.myles.viaversion.libs.gson.JsonElement; +import us.myles.viaversion.libs.gson.JsonObject; +import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag; +import us.myles.viaversion.libs.opennbt.tag.builtin.IntTag; +import us.myles.viaversion.libs.opennbt.tag.builtin.StringTag; +import us.myles.viaversion.libs.opennbt.tag.builtin.Tag; + +import java.util.HashMap; +import java.util.Map; +import java.util.StringJoiner; + +public class PistonHandler implements BackwardsBlockEntityProvider.BackwardsBlockEntityHandler { + + private final Map pistonIds = new HashMap<>(); + + public PistonHandler() { + if (Via.getConfig().isServersideBlockConnections()) { + Map keyToId; + try { + keyToId = (Map) ConnectionData.class.getDeclaredField("keyToId").get(null); + } catch (IllegalAccessException | NoSuchFieldException e) { + e.printStackTrace(); + return; + } + + for (Map.Entry entry : keyToId.entrySet()) { + if (!entry.getKey().contains("piston")) continue; + + addEnries(entry.getKey(), entry.getValue()); + } + } else { + JsonObject mappings = MappingData.loadData("mapping-1.13.json").getAsJsonObject("blocks"); + for (Map.Entry blockState : mappings.entrySet()) { + String key = blockState.getValue().getAsString(); + if (!key.contains("piston")) continue; + + addEnries(key, Integer.parseInt(blockState.getKey())); + } + } + } + + // There doesn't seem to be a nicer way around it :( + private void addEnries(String data, int id) { + id = BackwardsMappings.blockMappings.getNewBlock(id); + pistonIds.put(data, id); + + String substring = data.substring(10); + if (!substring.startsWith("piston") && !substring.startsWith("sticky_piston")) return; + + // Swap properties and add them to the map + String[] split = data.substring(0, data.length() - 1).split("\\["); + String[] properties = split[1].split(","); + data = split[0] + "[" + properties[1] + "," + properties[0] + "]"; + pistonIds.put(data, id); + } + + @Override + public CompoundTag transform(UserConnection user, int blockId, CompoundTag tag) { + CompoundTag blockState = tag.get("blockState"); + String dataFromTag = getDataFromTag(blockState); + if (dataFromTag == null) return tag; + + int id = pistonIds.get(dataFromTag); + tag.put(new IntTag("blockId", id >> 4)); + tag.put(new IntTag("blockData", id & 15)); + return tag; + } + + // The type hasn't actually been updated in the blockstorage, so we need to construct it + private String getDataFromTag(CompoundTag tag) { + StringTag name = tag.get("Name"); + if (name == null) return null; + + CompoundTag properties = tag.get("Properties"); + if (properties == null) return name.getValue(); + + StringJoiner joiner = new StringJoiner(",", name.getValue() + "[", "]"); + for (Tag property : properties) { + if (!(property instanceof StringTag)) continue; + joiner.add(property.getName() + "=" + ((StringTag) property).getValue()); + } + return joiner.toString(); + } +} diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/providers/BackwardsBlockEntityProvider.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/providers/BackwardsBlockEntityProvider.java index bb02f256..f2024752 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/providers/BackwardsBlockEntityProvider.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/providers/BackwardsBlockEntityProvider.java @@ -33,6 +33,7 @@ public class BackwardsBlockEntityProvider implements Provider { handlers.put("minecraft:banner", new BannerHandler()); handlers.put("minecraft:skull", new SkullHandler()); handlers.put("minecraft:mob_spawner", new SpawnerHandler()); + handlers.put("minecraft:piston", new PistonHandler()); } /** diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/storage/BackwardsBlockStorage.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/storage/BackwardsBlockStorage.java index a1a63f7c..469ee450 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/storage/BackwardsBlockStorage.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/storage/BackwardsBlockStorage.java @@ -10,18 +10,18 @@ package nl.matsv.viabackwards.protocol.protocol1_12_2to1_13.storage; -import com.google.common.collect.Sets; import us.myles.ViaVersion.api.data.StoredObject; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.minecraft.Position; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class BackwardsBlockStorage extends StoredObject { // This BlockStorage is very exclusive (; - private static final Set whitelist = Sets.newConcurrentHashSet(); + private static final Set whitelist = new HashSet<>(); static { // Flower pots @@ -42,6 +42,17 @@ public class BackwardsBlockStorage extends StoredObject { // Skulls for (int i = 5447; i <= 5566; i++) whitelist.add(i); + + // pistons + for (int i = 1028; i <= 1039; i++) { + whitelist.add(i); + } + for (int i = 1047; i <= 1082; i++) { + whitelist.add(i); + } + for (int i = 1099; i <= 1110; i++) { + whitelist.add(i); + } } @@ -54,8 +65,7 @@ public class BackwardsBlockStorage extends StoredObject { public void checkAndStore(Position position, int block) { if (!whitelist.contains(block)) { // Remove if not whitelisted - if (blocks.containsKey(position)) - blocks.remove(position); + blocks.remove(position); return; } From c186d13ae58a0a7747673014f890fd0cca9a4ea4 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Sat, 6 Jul 2019 19:36:50 +0200 Subject: [PATCH 2/4] Fix trade item rewrites --- .../protocol1_13_2to1_14/packets/BlockItemPackets1_14.java | 1 - .../protocol1_13to1_13_1/packets/InventoryPackets1_13_1.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java index bfe8dcab..b0fb9ff7 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java @@ -185,7 +185,6 @@ public class BlockItemPackets1_14 extends BlockItemRewriter Date: Fri, 19 Jul 2019 12:53:37 +0200 Subject: [PATCH 3/4] 1.14.4 support --- .../api/ViaBackwardsPlatform.java | 2 + .../Protocol1_14_3To1_14_4.java | 60 +++++++++++++++++++ pom.xml | 2 +- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_3to1_14_4/Protocol1_14_3To1_14_4.java diff --git a/core/src/main/java/nl/matsv/viabackwards/api/ViaBackwardsPlatform.java b/core/src/main/java/nl/matsv/viabackwards/api/ViaBackwardsPlatform.java index 53b6e5c9..c9600993 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/ViaBackwardsPlatform.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/ViaBackwardsPlatform.java @@ -22,6 +22,7 @@ import nl.matsv.viabackwards.protocol.protocol1_13_2to1_14.Protocol1_13_2To1_14; import nl.matsv.viabackwards.protocol.protocol1_13to1_13_1.Protocol1_13To1_13_1; import nl.matsv.viabackwards.protocol.protocol1_14_1to1_14_2.Protocol1_14_1To1_14_2; import nl.matsv.viabackwards.protocol.protocol1_14_2to1_14_3.Protocol1_14_2To1_14_3; +import nl.matsv.viabackwards.protocol.protocol1_14_3to1_14_4.Protocol1_14_3To1_14_4; import nl.matsv.viabackwards.protocol.protocol1_14to1_14_1.Protocol1_14To1_14_1; import nl.matsv.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10; import us.myles.ViaVersion.api.protocol.ProtocolRegistry; @@ -52,6 +53,7 @@ public interface ViaBackwardsPlatform { ProtocolRegistry.registerProtocol(new Protocol1_14To1_14_1(), Collections.singletonList(ProtocolVersion.v1_14.getId()), ProtocolVersion.v1_14_1.getId()); ProtocolRegistry.registerProtocol(new Protocol1_14_1To1_14_2(), Collections.singletonList(ProtocolVersion.v1_14_1.getId()), ProtocolVersion.v1_14_2.getId()); ProtocolRegistry.registerProtocol(new Protocol1_14_2To1_14_3(), Collections.singletonList(ProtocolVersion.v1_14_2.getId()), ProtocolVersion.v1_14_3.getId()); + ProtocolRegistry.registerProtocol(new Protocol1_14_3To1_14_4(), Collections.singletonList(ProtocolVersion.v1_14_3.getId()), ProtocolVersion.v1_14_4.getId()); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_3to1_14_4/Protocol1_14_3To1_14_4.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_3to1_14_4/Protocol1_14_3To1_14_4.java new file mode 100644 index 00000000..bd685651 --- /dev/null +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_3to1_14_4/Protocol1_14_3To1_14_4.java @@ -0,0 +1,60 @@ +package nl.matsv.viabackwards.protocol.protocol1_14_3to1_14_4; + +import nl.matsv.viabackwards.api.BackwardsProtocol; +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.remapper.PacketHandler; +import us.myles.ViaVersion.api.remapper.PacketRemapper; +import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.packets.State; + +public class Protocol1_14_3To1_14_4 extends BackwardsProtocol { + + @Override + protected void registerPackets() { + // Acknowledge Player Digging - added in pre4 + registerOutgoing(State.PLAY, 0x5c, -1, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.cancel(); + } + }); + } + }); + + // Trade list + registerOutgoing(State.PLAY, 0x27, 0x27, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.passthrough(Type.VAR_INT); + int size = wrapper.passthrough(Type.UNSIGNED_BYTE); + for (int i = 0; i < size; i++) { + wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + } + wrapper.passthrough(Type.BOOLEAN); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.FLOAT); + wrapper.read(Type.INT); // demand value added in pre-5 + } + } + }); + } + }); + } + + @Override + public void init(UserConnection userConnection) { + } +} diff --git a/pom.xml b/pom.xml index 2bdb04c3..e367edc6 100644 --- a/pom.xml +++ b/pom.xml @@ -61,7 +61,7 @@ us.myles viaversion - 2.1.2 + 2.1.3 provided From 24d77278f64f16ba746e617e74c191403feecce4 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Fri, 19 Jul 2019 13:01:10 +0200 Subject: [PATCH 4/4] Fix typo --- .../block_entity_handlers/PistonHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java index f4ea822c..fe2f01ab 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/block_entity_handlers/PistonHandler.java @@ -34,7 +34,7 @@ public class PistonHandler implements BackwardsBlockEntityProvider.BackwardsBloc for (Map.Entry entry : keyToId.entrySet()) { if (!entry.getKey().contains("piston")) continue; - addEnries(entry.getKey(), entry.getValue()); + addEntries(entry.getKey(), entry.getValue()); } } else { JsonObject mappings = MappingData.loadData("mapping-1.13.json").getAsJsonObject("blocks"); @@ -42,13 +42,13 @@ public class PistonHandler implements BackwardsBlockEntityProvider.BackwardsBloc String key = blockState.getValue().getAsString(); if (!key.contains("piston")) continue; - addEnries(key, Integer.parseInt(blockState.getKey())); + addEntries(key, Integer.parseInt(blockState.getKey())); } } } // There doesn't seem to be a nicer way around it :( - private void addEnries(String data, int id) { + private void addEntries(String data, int id) { id = BackwardsMappings.blockMappings.getNewBlock(id); pistonIds.put(data, id);