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