diff --git a/all/pom.xml b/all/pom.xml index a3c0ada5..a2ea07e0 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-all diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 2e96670a..0e6bea3f 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-bukkit diff --git a/bungee/pom.xml b/bungee/pom.xml index 125a3424..1127aa7b 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-bungee diff --git a/core/pom.xml b/core/pom.xml index 8343d4f2..18e67e90 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-core diff --git a/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityTracker.java b/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityTracker.java index 4a967832..47cafe00 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityTracker.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/entities/storage/EntityTracker.java @@ -21,6 +21,7 @@ import java.util.concurrent.ConcurrentHashMap; public class EntityTracker extends StoredObject { private final Map trackers = new ConcurrentHashMap<>(); + private int currentWorldSectionHeight = 16; public EntityTracker(UserConnection user) { super(user); @@ -35,6 +36,18 @@ public class EntityTracker extends StoredObject { return trackers.get(protocol); } + public Map getTrackers() { + return trackers; + } + + public int getCurrentWorldSectionHeight() { + return currentWorldSectionHeight; + } + + public void setCurrentWorldSectionHeight(int currentWorldSectionHeight) { + this.currentWorldSectionHeight = currentWorldSectionHeight; + } + public static class ProtocolEntityTracker { private final Map entityMap = new ConcurrentHashMap<>(); diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java index 6b1c4857..bed20ccc 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java @@ -26,6 +26,9 @@ import us.myles.ViaVersion.exception.CancelException; import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import us.myles.viaversion.libs.fastutil.ints.Int2IntMap; import us.myles.viaversion.libs.fastutil.ints.Int2IntOpenHashMap; +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.Tag; import java.util.ArrayList; import java.util.Comparator; @@ -257,6 +260,20 @@ public abstract class EntityRewriterBase extends Re return wrapper -> addTrackedEntity(wrapper, (int) wrapper.get(intType, 0), entityType); } + protected PacketHandler getWorldDataTracker(int nbtIndex) { + return wrapper -> { + CompoundTag registryData = wrapper.get(Type.NBT, nbtIndex); + Tag height = registryData.get("height"); + if (!(height instanceof IntTag)) { + ViaBackwards.getPlatform().getLogger().warning("Height missing in dimension data: " + registryData); + return; + } + + int blockHeight = ((IntTag) height).getValue(); + wrapper.user().get(EntityTracker.class).setCurrentWorldSectionHeight(blockHeight >> 4); + }; + } + protected PacketHandler getDimensionHandler(int index) { return wrapper -> { ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13to1_13_1/Protocol1_13To1_13_1.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13to1_13_1/Protocol1_13To1_13_1.java index 6f2fee9f..ec5cc25e 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13to1_13_1/Protocol1_13To1_13_1.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13to1_13_1/Protocol1_13To1_13_1.java @@ -13,6 +13,7 @@ import us.myles.ViaVersion.api.minecraft.item.Item; import us.myles.ViaVersion.api.remapper.PacketHandler; import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.remapper.ValueTransformer; +import us.myles.ViaVersion.api.rewriters.RegistryType; import us.myles.ViaVersion.api.rewriters.StatisticsRewriter; import us.myles.ViaVersion.api.rewriters.TagRewriter; import us.myles.ViaVersion.api.type.Type; @@ -168,7 +169,7 @@ public class Protocol1_13To1_13_1 extends BackwardsProtocol { +public class Protocol1_16_4To1_17 extends BackwardsProtocol { public static final BackwardsMappings MAPPINGS = new BackwardsMappings("1.17", "1.16.2", Protocol1_17To1_16_4.class, true); private BlockItemPackets1_17 blockItemPackets; public Protocol1_16_4To1_17() { - super(ClientboundPackets1_16_2.class, ClientboundPackets1_16_2.class, ServerboundPackets1_16_2.class, ServerboundPackets1_16_2.class); + super(ClientboundPackets1_17.class, ClientboundPackets1_16_2.class, ServerboundPackets1_16_2.class, ServerboundPackets1_16_2.class); } @Override @@ -34,15 +36,30 @@ public class Protocol1_16_4To1_17 extends BackwardsProtocol { + // Goodbye Game Event tags + int length = wrapper.read(Type.VAR_INT); + for (int i = 0; i < length; i++) { + wrapper.read(Type.STRING); + wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE); + } + }); + } + }); - registerOutgoing(ClientboundPackets1_16_2.RESOURCE_PACK, new PacketRemapper() { + new StatisticsRewriter(this, null).register(ClientboundPackets1_17.STATISTICS); + + registerOutgoing(ClientboundPackets1_17.RESOURCE_PACK, new PacketRemapper() { @Override public void registerMap() { handler(wrapper -> { @@ -53,7 +70,7 @@ public class Protocol1_16_4To1_17 extends BackwardsProtocol { @@ -69,6 +86,8 @@ public class Protocol1_16_4To1_17 extends BackwardsProtocol { public BlockItemPackets1_17(Protocol1_16_4To1_17 protocol, TranslatableRewriter translatableRewriter) { @@ -25,47 +31,125 @@ public class BlockItemPackets1_17 extends nl.matsv.viabackwards.api.rewriters.It ItemRewriter itemRewriter = new ItemRewriter(protocol, this::handleItemToClient, this::handleItemToServer); BlockRewriter blockRewriter = new BlockRewriter(protocol, Type.POSITION1_14); - new RecipeRewriter1_16(protocol, this::handleItemToClient).registerDefaultHandler(ClientboundPackets1_16_2.DECLARE_RECIPES); + new RecipeRewriter1_16(protocol, this::handleItemToClient).registerDefaultHandler(ClientboundPackets1_17.DECLARE_RECIPES); - itemRewriter.registerSetCooldown(ClientboundPackets1_16_2.COOLDOWN); - itemRewriter.registerWindowItems(ClientboundPackets1_16_2.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); - itemRewriter.registerSetSlot(ClientboundPackets1_16_2.SET_SLOT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerEntityEquipmentArray(ClientboundPackets1_16_2.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerTradeList(ClientboundPackets1_16_2.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerAdvancements(ClientboundPackets1_16_2.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerSpawnParticle(ClientboundPackets1_16_2.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); + itemRewriter.registerSetCooldown(ClientboundPackets1_17.COOLDOWN); + itemRewriter.registerWindowItems(ClientboundPackets1_17.WINDOW_ITEMS, Type.FLAT_VAR_INT_ITEM_ARRAY); + itemRewriter.registerSetSlot(ClientboundPackets1_17.SET_SLOT, Type.FLAT_VAR_INT_ITEM); + itemRewriter.registerEntityEquipmentArray(ClientboundPackets1_17.ENTITY_EQUIPMENT, Type.FLAT_VAR_INT_ITEM); + itemRewriter.registerTradeList(ClientboundPackets1_17.TRADE_LIST, Type.FLAT_VAR_INT_ITEM); + itemRewriter.registerAdvancements(ClientboundPackets1_17.ADVANCEMENTS, Type.FLAT_VAR_INT_ITEM); - blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_16_2.ACKNOWLEDGE_PLAYER_DIGGING); - blockRewriter.registerBlockAction(ClientboundPackets1_16_2.BLOCK_ACTION); - blockRewriter.registerBlockChange(ClientboundPackets1_16_2.BLOCK_CHANGE); - blockRewriter.registerVarLongMultiBlockChange(ClientboundPackets1_16_2.MULTI_BLOCK_CHANGE); - blockRewriter.registerEffect(ClientboundPackets1_16_2.EFFECT, 1010, 2001); + blockRewriter.registerAcknowledgePlayerDigging(ClientboundPackets1_17.ACKNOWLEDGE_PLAYER_DIGGING); + blockRewriter.registerBlockAction(ClientboundPackets1_17.BLOCK_ACTION); + blockRewriter.registerEffect(ClientboundPackets1_17.EFFECT, 1010, 2001); - // Some chunk sections will be lost ¯\_(ツ)_/¯ - protocol.registerOutgoing(ClientboundPackets1_16_2.UPDATE_LIGHT, new PacketRemapper() { + itemRewriter.registerClickWindow(ServerboundPackets1_16_2.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); + itemRewriter.registerCreativeInvAction(ServerboundPackets1_16_2.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); + protocol.registerIncoming(ServerboundPackets1_16_2.EDIT_BOOK, new PacketRemapper() { @Override public void registerMap() { - handler(wrapper -> { - wrapper.passthrough(Type.VAR_INT); - wrapper.passthrough(Type.VAR_INT); - wrapper.passthrough(Type.BOOLEAN); + handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); + } + }); - wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_LONG).intValue()); // Sky mask - wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_LONG).intValue()); // Block mask - wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_LONG).intValue()); // Empty sky mask - wrapper.write(Type.VAR_INT, wrapper.read(Type.VAR_LONG).intValue()); // Empty block mask + //TODO vibration, dust_color_transition data + itemRewriter.registerSpawnParticle(ClientboundPackets1_17.SPAWN_PARTICLE, Type.FLAT_VAR_INT_ITEM, Type.DOUBLE); + + //TODO possibly have to check: player digging, block break animation, block entity data, block action, + + // The Great Shrunkening + // Some chunk sections will be lost ¯\_(ツ)_/¯ + protocol.registerOutgoing(ClientboundPackets1_17.UPDATE_LIGHT, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // X + map(Type.VAR_INT); // Z + map(Type.BOOLEAN); // Trust edges + handler(wrapper -> { + int skyLightMask = cutLongArrayMask(wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); + int blockLightMask = cutLongArrayMask(wrapper.read(Type.LONG_ARRAY_PRIMITIVE)); + wrapper.write(Type.VAR_INT, skyLightMask); // Sky light mask + wrapper.write(Type.VAR_INT, blockLightMask); // Block light mask + wrapper.write(Type.VAR_INT, cutLongArrayMask(wrapper.read(Type.LONG_ARRAY_PRIMITIVE)));// Empty sky light mask + wrapper.write(Type.VAR_INT, cutLongArrayMask(wrapper.read(Type.LONG_ARRAY_PRIMITIVE))); // Empty block light mask + + writeLightArrays(wrapper, skyLightMask); + writeLightArrays(wrapper, blockLightMask); + }); + } + + private int cutLongArrayMask(long[] mask) { + if (mask.length == 0) return 0; + + // Only keep the first 18 bits (16 sections + one above and below) + long l = mask[0]; + return (int) (l & 0x3ffff); + } + + private void writeLightArrays(PacketWrapper wrapper, int bitMask) throws Exception { + wrapper.read(Type.VAR_INT); // Length - throw it away + + List light = new ArrayList<>(); + for (int i = 0; i <= 17; i++) { + if (isSet(bitMask, i)) { + light.add(wrapper.read(Type.BYTE_ARRAY_PRIMITIVE)); + } + } + + for (byte[] bytes : light) { + wrapper.write(Type.BYTE_ARRAY_PRIMITIVE, bytes); + } + } + + private boolean isSet(int mask, int i) { + return (mask & (1 << i)) != 0; + } + }); + + protocol.registerOutgoing(ClientboundPackets1_17.MULTI_BLOCK_CHANGE, new PacketRemapper() { + public void registerMap() { + map(Type.LONG); // Chunk pos + map(Type.BOOLEAN); // Suppress light updates + this.handler((wrapper) -> { + // Cancel if above the 256 block limit + int chunkY = (int) (wrapper.get(Type.LONG, 0) << 44 >> 44); + if (chunkY > 15) { + wrapper.cancel(); + return; + } + + BlockChangeRecord[] records = wrapper.passthrough(Type.VAR_LONG_BLOCK_CHANGE_RECORD_ARRAY); + for (BlockChangeRecord record : records) { + record.setBlockId(protocol.getMappingData().getNewBlockStateId(record.getBlockId())); + } }); } }); - protocol.registerOutgoing(ClientboundPackets1_16_2.CHUNK_DATA, new PacketRemapper() { + protocol.registerOutgoing(ClientboundPackets1_17.BLOCK_CHANGE, new PacketRemapper() { + public void registerMap() { + map(Type.POSITION1_14); + map(Type.VAR_INT); + handler((wrapper) -> { + if (wrapper.get(Type.POSITION1_14, 0).getY() >= 256) { + wrapper.cancel(); + return; + } + + wrapper.set(Type.VAR_INT, 0, protocol.getMappingData().getNewBlockStateId(wrapper.get(Type.VAR_INT, 0))); + }); + } + }); + + protocol.registerOutgoing(ClientboundPackets1_17.CHUNK_DATA, new PacketRemapper() { @Override public void registerMap() { handler(wrapper -> { - Chunk chunk = wrapper.read(new Chunk1_17Type()); + int currentWorldSectionHeight = wrapper.user().get(EntityTracker.class).getCurrentWorldSectionHeight(); + Chunk chunk = wrapper.read(new Chunk1_17Type(currentWorldSectionHeight)); wrapper.write(new Chunk1_16_2Type(), chunk); - - for (int i = 0; i < chunk.getSections().length; i++) { + for (int i = 0; i < 16; i++) { // Only need to process the first 16 sections ChunkSection section = chunk.getSections()[i]; if (section == null) continue; for (int j = 0; j < section.getPaletteSize(); j++) { @@ -76,14 +160,5 @@ public class BlockItemPackets1_17 extends nl.matsv.viabackwards.api.rewriters.It }); } }); - - itemRewriter.registerClickWindow(ServerboundPackets1_16_2.CLICK_WINDOW, Type.FLAT_VAR_INT_ITEM); - itemRewriter.registerCreativeInvAction(ServerboundPackets1_16_2.CREATIVE_INVENTORY_ACTION, Type.FLAT_VAR_INT_ITEM); - protocol.registerIncoming(ServerboundPackets1_16_2.EDIT_BOOK, new PacketRemapper() { - @Override - public void registerMap() { - handler(wrapper -> handleItemToServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM))); - } - }); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java index b83d8ddb..55e92713 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java @@ -12,7 +12,7 @@ import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.Particle; import us.myles.ViaVersion.api.type.types.version.Types1_14; -import us.myles.ViaVersion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; +import us.myles.ViaVersion.protocols.protocol1_17to1_16_4.ClientboundPackets1_17; import us.myles.viaversion.libs.gson.JsonElement; public class EntityPackets1_17 extends EntityRewriter { @@ -23,18 +23,38 @@ public class EntityPackets1_17 extends EntityRewriter { @Override protected void registerPackets() { - registerSpawnTrackerWithData(ClientboundPackets1_16_2.SPAWN_ENTITY, Entity1_16_2Types.EntityType.FALLING_BLOCK); - registerSpawnTracker(ClientboundPackets1_16_2.SPAWN_MOB); - registerExtraTracker(ClientboundPackets1_16_2.SPAWN_EXPERIENCE_ORB, Entity1_16_2Types.EntityType.EXPERIENCE_ORB); - registerExtraTracker(ClientboundPackets1_16_2.SPAWN_PAINTING, Entity1_16_2Types.EntityType.PAINTING); - registerExtraTracker(ClientboundPackets1_16_2.SPAWN_PLAYER, Entity1_16_2Types.EntityType.PLAYER); - registerEntityDestroy(ClientboundPackets1_16_2.DESTROY_ENTITIES); - registerMetadataRewriter(ClientboundPackets1_16_2.ENTITY_METADATA, Types1_14.METADATA_LIST); - protocol.registerOutgoing(ClientboundPackets1_16_2.JOIN_GAME, new PacketRemapper() { + registerSpawnTrackerWithData(ClientboundPackets1_17.SPAWN_ENTITY, Entity1_16_2Types.EntityType.FALLING_BLOCK); + registerSpawnTracker(ClientboundPackets1_17.SPAWN_MOB); + registerExtraTracker(ClientboundPackets1_17.SPAWN_EXPERIENCE_ORB, Entity1_16_2Types.EntityType.EXPERIENCE_ORB); + registerExtraTracker(ClientboundPackets1_17.SPAWN_PAINTING, Entity1_16_2Types.EntityType.PAINTING); + registerExtraTracker(ClientboundPackets1_17.SPAWN_PLAYER, Entity1_16_2Types.EntityType.PLAYER); + registerEntityDestroy(ClientboundPackets1_17.DESTROY_ENTITIES); + registerMetadataRewriter(ClientboundPackets1_17.ENTITY_METADATA, Types1_14.METADATA_LIST); + protocol.registerOutgoing(ClientboundPackets1_17.JOIN_GAME, new PacketRemapper() { @Override public void registerMap() { map(Type.INT); // Entity ID + map(Type.BOOLEAN); // Hardcore + map(Type.UNSIGNED_BYTE); // Gamemode + map(Type.BYTE); // Previous Gamemode + map(Type.STRING_ARRAY); // Worlds + map(Type.NBT); // Dimension registry + map(Type.NBT); // Current dimension data + handler(wrapper -> { + byte previousGamemode = wrapper.get(Type.BYTE, 0); + if (previousGamemode == -1) { // "Unset" gamemode removed + wrapper.set(Type.BYTE, 0, (byte) 0); + } + }); handler(getTrackerHandler(Entity1_16_2Types.EntityType.PLAYER, Type.INT)); + handler(getWorldDataTracker(1)); + } + }); + protocol.registerOutgoing(ClientboundPackets1_17.RESPAWN, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.NBT); // Dimension data + handler(getWorldDataTracker(0)); } }); } diff --git a/core/src/main/resources/assets/viabackwards/data/mapping-1.16.2to1.17.json b/core/src/main/resources/assets/viabackwards/data/mapping-1.16.2to1.17.json index 5d7b0e90..be173996 100644 --- a/core/src/main/resources/assets/viabackwards/data/mapping-1.16.2to1.17.json +++ b/core/src/main/resources/assets/viabackwards/data/mapping-1.16.2to1.17.json @@ -570,7 +570,103 @@ "minecraft:pointed_dripstone[thickness=base,vertical_direction=up,waterlogged=false]": "minecraft:end_rod[facing=up]", "minecraft:pointed_dripstone[thickness=base,vertical_direction=down,waterlogged=true]": "minecraft:end_rod[facing=down]", "minecraft:pointed_dripstone[thickness=base,vertical_direction=down,waterlogged=false]": "minecraft:end_rod[facing=down]", - "minecraft:dripstone_block": "minecraft:granite" + "minecraft:dripstone_block": "minecraft:granite", + "minecraft:sculk_sensor[power=0,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=0,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=0,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=0,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=0,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=0,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=1,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=1,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=1,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=1,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=1,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=1,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=2,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=2,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=2,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=2,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=2,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=2,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=3,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=3,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=3,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=3,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=3,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=3,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=4,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=4,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=4,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=4,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=4,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=4,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=5,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=5,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=5,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=5,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=5,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=5,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=6,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=6,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=6,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=6,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=6,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=6,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=7,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=7,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=7,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=7,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=7,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=7,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=8,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=8,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=8,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=8,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=8,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=8,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=9,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=9,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=9,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=9,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=9,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=9,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=10,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=10,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=10,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=10,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=10,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=10,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=11,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=11,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=11,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=11,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=11,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=11,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=12,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=12,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=12,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=12,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=12,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=12,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=13,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=13,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=13,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=13,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=13,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=13,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=14,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=14,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=14,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=14,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=14,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=14,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=15,sculk_sensor_phase=inactive,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=15,sculk_sensor_phase=inactive,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=15,sculk_sensor_phase=active,waterlogged=true]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=15,sculk_sensor_phase=active,waterlogged=false]": "minecraft:prismarine_brick_slab[type=bottom,waterlogged=false]", + "minecraft:sculk_sensor[power=15,sculk_sensor_phase=cooldown,waterlogged=true]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=true]", + "minecraft:sculk_sensor[power=15,sculk_sensor_phase=cooldown,waterlogged=false]": "minecraft:dark_prismarine_slab[type=bottom,waterlogged=false]" }, "items": { "minecraft:dirt_path": { @@ -828,6 +924,10 @@ "minecraft:pointed_dripstone": { "id": "minecraft:dead_bush", "name": "1.17 Pointed Dripstone" + }, + "minecraft:sculk_sensor": { + "id": "minecraft:dark_prismarine_slab", + "name": "1.17 Sculk Sensor" } }, "sounds": { @@ -896,7 +996,14 @@ "block.pointed_dripstone.drip_lava": "", "block.pointed_dripstone.drip_water": "", "block.pointed_dripstone.drip_lava_into_cauldron": "", - "block.pointed_dripstone.drip_water_into_cauldron": "" + "block.pointed_dripstone.drip_water_into_cauldron": "", + "block.sculk_sensor.clicking": "", + "block.sculk_sensor.clicking_stop": "", + "block.sculk_sensor.break": "", + "block.sculk_sensor.fall": "", + "block.sculk_sensor.hit": "", + "block.sculk_sensor.place": "", + "block.sculk_sensor.step": "" }, "particles": { "small_flame": "flame", @@ -904,6 +1011,8 @@ "dripping_dripstone_lava": "dripping_lava", "falling_dripstone_lava": "falling_lava", "dripping_dripstone_water": "dripping_water", - "falling_dripstone_water": "falling_water" + "falling_dripstone_water": "falling_water", + "vibration": "", + "dust_color_transition": "" } } \ No newline at end of file diff --git a/fabric/pom.xml b/fabric/pom.xml index 0ccede87..72b69394 100644 --- a/fabric/pom.xml +++ b/fabric/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-fabric diff --git a/pom.xml b/pom.xml index b2f6bab7..f523b79b 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ nl.matsv viabackwards-parent - 3.3.0-20w46a + 3.3.0-20w49a pom Allow older clients to join newer server versions. @@ -65,7 +65,7 @@ us.myles viaversion - 3.3.0-20w45a + 3.3.0-20w49a provided diff --git a/sponge/pom.xml b/sponge/pom.xml index 79b7339a..dc4261dd 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-sponge diff --git a/velocity/pom.xml b/velocity/pom.xml index 612ef3fd..371ff718 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -16,7 +16,7 @@ viabackwards-parent nl.matsv - 3.3.0-20w46a + 3.3.0-20w49a viabackwards-velocity