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_10to1_11/packets/BlockItemPackets1_11.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java index 9945c7e1..5a626153 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java @@ -139,7 +139,7 @@ public class BlockItemPackets1_11 extends BlockItemRewriter if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) { wrapper.passthrough(Type.INT); // Passthrough Window ID - int size = wrapper.passthrough(Type.BYTE); + int size = wrapper.passthrough(Type.UNSIGNED_BYTE); for (int i = 0; i < size; i++) { wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/packets/BlockItemPackets1_12.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/packets/BlockItemPackets1_12.java index e297e819..b930597b 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/packets/BlockItemPackets1_12.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_11_1to1_12/packets/BlockItemPackets1_12.java @@ -140,7 +140,7 @@ public class BlockItemPackets1_12 extends BlockItemRewriter { if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) { wrapper.passthrough(Type.INT); // Passthrough Window ID - int size = wrapper.passthrough(Type.BYTE); + int size = wrapper.passthrough(Type.UNSIGNED_BYTE); for (int i = 0; i < size; i++) { wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/Protocol1_12_2To1_13.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/Protocol1_12_2To1_13.java index 169e521e..d552243a 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/Protocol1_12_2To1_13.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_12_2to1_13/Protocol1_12_2To1_13.java @@ -125,8 +125,8 @@ public class Protocol1_12_2To1_13 extends BackwardsProtocol { in(State.PLAY, 0x1B, 0x17, cancel()); // Recipe Book Data TODO MODIFIED in(State.PLAY, 0x1D, 0x18); // Resource Pack Status in(State.PLAY, 0x1E, 0x19); // Advancement Tab - in(State.PLAY, 0x1F, -1); // Select Trade - in(State.PLAY, 0x20, -1); // Set Beacon Effect + //in(State.PLAY, 0x1F, -1); // Select Trade (the client won't send this) + //in(State.PLAY, 0x20, -1); // Set Beacon Effect (the client won't send this) in(State.PLAY, 0x21, 0x1A); // Held Item Change (serverbound) in(State.PLAY, 0x26, 0x1C); // Update Sign in(State.PLAY, 0x27, 0x1D); // Animation (serverbound) 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..fe2f01ab --- /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; + + addEntries(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; + + addEntries(key, Integer.parseInt(blockState.getKey())); + } + } + } + + // There doesn't seem to be a nicer way around it :( + private void addEntries(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; } 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 if (wrapper.get(Type.STRING, 0).equalsIgnoreCase("MC|TrList")) { wrapper.passthrough(Type.INT); // Passthrough Window ID - int size = wrapper.passthrough(Type.BYTE); + int size = wrapper.passthrough(Type.UNSIGNED_BYTE); for (int i = 0; i < size; i++) { wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Input Item wrapper.write(Type.ITEM, handleItemToClient(wrapper.read(Type.ITEM))); // Output Item 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