From 05437a3e707e9d74b44148782c6ff48cb50c119d Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Tue, 16 Jul 2019 20:44:56 +0200 Subject: [PATCH 01/10] Fix 1.14 client lag on join --- .../packets/WorldPackets.java | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java index 43b1e9156..d297412d6 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java @@ -22,11 +22,18 @@ import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.storage.EntityTracker; import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.types.Chunk1_14Type; import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; +import java.util.Arrays; + public class WorldPackets { private static final int AIR = MappingData.blockStateMappings.getNewBlock(0); private static final int VOID_AIR = MappingData.blockStateMappings.getNewBlock(8591); private static final int CAVE_AIR = MappingData.blockStateMappings.getNewBlock(8592); public static final int SERVERSIDE_VIEW_DISTANCE = 64; + private static final byte[] FULL_LIGHT = new byte[2048]; + + static { + Arrays.fill(FULL_LIGHT, (byte) 0xff); + } public static void register(final Protocol protocol) { @@ -172,24 +179,39 @@ public class WorldPackets { PacketWrapper lightPacket = wrapper.create(0x24); lightPacket.write(Type.VAR_INT, chunk.getX()); lightPacket.write(Type.VAR_INT, chunk.getZ()); - int skyLightMask = 0; + + int skyLightMask = chunk.isGroundUp() ? 0x3ffff : 0; // all 18 bits set if ground up int blockLightMask = 0; for (int i = 0; i < chunk.getSections().length; i++) { ChunkSection sec = chunk.getSections()[i]; if (sec == null) continue; - if (sec.hasSkyLight()) { + if (!chunk.isGroundUp() && sec.hasSkyLight()) { skyLightMask |= (1 << (i + 1)); } blockLightMask |= (1 << (i + 1)); } + lightPacket.write(Type.VAR_INT, skyLightMask); lightPacket.write(Type.VAR_INT, blockLightMask); lightPacket.write(Type.VAR_INT, 0); // empty sky light mask lightPacket.write(Type.VAR_INT, 0); // empty block light mask + + // not sending skylight/setting empty skylight causes client lag due to some weird calculations + // only do this on the initial chunk send (not when chunk.isGroundUp() is false) + if (chunk.isGroundUp()) + lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(FULL_LIGHT).toArray(new Byte[0])); // chunk below 0 for (ChunkSection section : chunk.getSections()) { - if (section == null || !section.hasSkyLight()) continue; + if (section == null || !section.hasSkyLight()) { + if (chunk.isGroundUp()) { + lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(FULL_LIGHT).toArray(new Byte[0])); + } + continue; + } lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(section.getSkyLight()).toArray(new Byte[0])); } + if (chunk.isGroundUp()) + lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(FULL_LIGHT).toArray(new Byte[0])); // chunk above 255 + for (ChunkSection section : chunk.getSections()) { if (section == null) continue; lightPacket.write(Type.BYTE_ARRAY, Bytes.asList(section.getBlockLight()).toArray(new Byte[0])); From 7191dcaa15d3f4d7a4c53019e7dd0899d488f954 Mon Sep 17 00:00:00 2001 From: Myles Date: Fri, 19 Jul 2019 11:21:19 +0100 Subject: [PATCH 02/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc4b9c37b..8440ced50 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ViaVersion 2.1.1 - Spigot, Sponge, BungeeCord, Velocity +# ViaVersion 2.1.3 - Spigot, Sponge, BungeeCord, Velocity [![Build Status](https://travis-ci.com/ViaVersion/ViaVersion.svg?branch=master)](https://travis-ci.com/ViaVersion/ViaVersion) [![Discord](https://img.shields.io/badge/chat-on%20discord-blue.svg)](https://viaversion.com/discord) From aaba566b1e3383e65b7f8f1dfdd23b3d9fd7e265 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Sat, 20 Jul 2019 09:08:13 -0300 Subject: [PATCH 03/10] change version to 2.1.4-SNAPSHOT --- bukkit/pom.xml | 2 +- bungee/pom.xml | 2 +- common/pom.xml | 2 +- jar/pom.xml | 2 +- pom.xml | 2 +- sponge-legacy/pom.xml | 2 +- sponge/pom.xml | 2 +- velocity/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bukkit/pom.xml b/bukkit/pom.xml index c541908c9..e643bc718 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 diff --git a/bungee/pom.xml b/bungee/pom.xml index 8465220fd..d4b019bed 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 4d451c684..997820086 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 diff --git a/jar/pom.xml b/jar/pom.xml index 7db489180..66207d352 100644 --- a/jar/pom.xml +++ b/jar/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 viaversion-jar diff --git a/pom.xml b/pom.xml index f6ac27a13..f5a8af88b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ us.myles viaversion-parent - 2.1.3 + 2.1.4-SNAPSHOT pom viaversion-parent diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml index 92b3c37b9..b7af992a9 100644 --- a/sponge-legacy/pom.xml +++ b/sponge-legacy/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 diff --git a/sponge/pom.xml b/sponge/pom.xml index 34fe22ba8..8dbf2f470 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 diff --git a/velocity/pom.xml b/velocity/pom.xml index 07e4929dd..20bcab967 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 From 196ff539270c012a7aa89a80abf4962776e80cfd Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Sat, 20 Jul 2019 09:14:05 -0300 Subject: [PATCH 04/10] oraclejdk8 doesn't work anymore --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b57cd3069..ce6c32a37 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ sudo: false language: java jdk: - - oraclejdk8 - openjdk11 cache: From 99ac42c168ff7f825e9df5b1fe5482f8a8b0dee3 Mon Sep 17 00:00:00 2001 From: Thom Date: Mon, 29 Jul 2019 12:19:30 +0200 Subject: [PATCH 05/10] Issue with the CanDestroy taglist (#1411) * Fix for an issue with the CanDestroy tag The CanDestroy taglist didn't go to lowercase when a 1.13+ user plays on a server equal to 1.12.2 or lower causing the taglist to not work any longer for items written in caps, this while a 1.12.2 client can use the item with the in caps written CanDestroy taglist on the server * Added Locale.ROOT to the toLowerCase() * Added the same functionality to CanPlaceOn --- .../protocol1_13to1_12_2/packets/InventoryPackets.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java index b4c5f8198..c9aed32b9 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java @@ -27,6 +27,7 @@ import us.myles.ViaVersion.protocols.protocol1_13to1_12_2.data.SpawnEggRewriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Locale; public class InventoryPackets { private static String NBT_TAG_NAME; @@ -404,13 +405,13 @@ public class InventoryPackets { if (numberConverted != null) { oldId = numberConverted; } - String[] newValues = BlockIdData.blockIdMapping.get(oldId); + String[] newValues = BlockIdData.blockIdMapping.get(oldId.toLowerCase(Locale.ROOT)); if (newValues != null) { for (String newValue : newValues) { newCanPlaceOn.add(new StringTag("", newValue)); } } else { - newCanPlaceOn.add(new StringTag("", oldId)); + newCanPlaceOn.add(new StringTag("", oldId.toLowerCase(Locale.ROOT))); } } tag.put(newCanPlaceOn); @@ -426,13 +427,13 @@ public class InventoryPackets { if (numberConverted != null) { oldId = numberConverted; } - String[] newValues = BlockIdData.blockIdMapping.get(oldId); + String[] newValues = BlockIdData.blockIdMapping.get(oldId.toLowerCase(Locale.ROOT)); if (newValues != null) { for (String newValue : newValues) { newCanDestroy.add(new StringTag("", newValue)); } } else { - newCanDestroy.add(new StringTag("", oldId)); + newCanDestroy.add(new StringTag("", oldId.toLowerCase(Locale.ROOT))); } } tag.put(newCanDestroy); From 28e8339a32970d6d36fafcb079f01ea343cd7699 Mon Sep 17 00:00:00 2001 From: creeper123123321 <7974274+creeper123123321@users.noreply.github.com> Date: Mon, 29 Jul 2019 07:21:31 -0300 Subject: [PATCH 06/10] Warn about outdated BungeeCord versions (#1405) --- .../main/java/us/myles/ViaVersion/BungeePlugin.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java index 6f3cc1b81..f3c0a677a 100644 --- a/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java +++ b/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.protocol.ProtocolConstants; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.ViaAPI; import us.myles.ViaVersion.api.command.ViaCommandSender; @@ -35,6 +36,17 @@ public class BungeePlugin extends Plugin implements ViaPlatform, Listener { @Override public void onLoad() { + try { + ProtocolConstants.class.getField("MINECRAFT_1_14_4"); + } catch (NoSuchFieldException e) { + getLogger().warning(" / \\"); + getLogger().warning(" / \\"); + getLogger().warning(" / | \\"); + getLogger().warning(" / | \\ BUNGEECORD IS OUTDATED"); + getLogger().warning(" / \\ VIAVERSION MAY NOT WORK AS INTENDED"); + getLogger().warning(" / o \\"); + getLogger().warning("/_____________\\"); + } api = new BungeeViaAPI(); config = new BungeeViaConfig(getDataFolder()); commandHandler = new BungeeCommandHandler(); From 7cb4e1d00e29b2ee73a8d7aab90b6e457ac149e3 Mon Sep 17 00:00:00 2001 From: Gerrygames Date: Wed, 14 Aug 2019 10:37:54 +0200 Subject: [PATCH 07/10] Fix explosion block desync, fixes #1365 (#1419) * fix explosion block desync, fixes #1365 * Remove unused import --- .../Protocol1_14To1_13_2.java | 1 - .../packets/WorldPackets.java | 24 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java index d572f45ea..9a48579bc 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java @@ -37,7 +37,6 @@ public class Protocol1_14To1_13_2 extends Protocol { registerOutgoing(State.PLAY, 0x1B, 0x1A); registerOutgoing(State.PLAY, 0x1C, 0x1B); registerOutgoing(State.PLAY, 0x1D, 0x54); - registerOutgoing(State.PLAY, 0x1E, 0x1C); registerOutgoing(State.PLAY, 0x1F, 0x1D); registerOutgoing(State.PLAY, 0x20, 0x1E); registerOutgoing(State.PLAY, 0x21, 0x20); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java index d297412d6..c1d212082 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java @@ -123,6 +123,30 @@ public class WorldPackets { } }); + // Explosion + protocol.registerOutgoing(State.PLAY, 0x1E, 0x1C, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.FLOAT); // X + map(Type.FLOAT); // Y + map(Type.FLOAT); // Z + map(Type.FLOAT); // Radius + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + for (int i = 0; i < 3; i++) { + float coord = wrapper.get(Type.FLOAT, i); + + if (coord < 0f) { + coord = (int) coord; + wrapper.set(Type.FLOAT, i, coord); + } + } + } + }); + } + }); + // Chunk protocol.registerOutgoing(State.PLAY, 0x22, 0x21, new PacketRemapper() { @Override From 6f19d2d6d177f168414a1f88a7b727a103170694 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Fri, 23 Aug 2019 21:15:38 +0200 Subject: [PATCH 08/10] Start working on 19w34a --- bukkit/pom.xml | 2 +- bungee/pom.xml | 2 +- common/pom.xml | 2 +- .../api/entities/Entity1_15Types.java | 248 ++++++ .../api/protocol/ProtocolRegistry.java | 3 + .../api/protocol/ProtocolVersion.java | 2 + .../MetadataRewriter.java | 39 + .../Protocol1_15To1_14_4.java | 146 ++++ .../data/MappingData.java | 82 ++ .../packets/EntityPackets.java | 116 +++ .../packets/InventoryPackets.java | 29 + .../storage/EntityTracker.java | 39 + .../assets/viaversion/data/mapping-1.15.json | 811 ++++++++++++++++++ jar/pom.xml | 2 +- pom.xml | 2 +- sponge-legacy/pom.xml | 2 +- sponge/pom.xml | 2 +- velocity/pom.xml | 2 +- 18 files changed, 1523 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/storage/EntityTracker.java create mode 100644 common/src/main/resources/assets/viaversion/data/mapping-1.15.json diff --git a/bukkit/pom.xml b/bukkit/pom.xml index e643bc718..09df25ff6 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 diff --git a/bungee/pom.xml b/bungee/pom.xml index d4b019bed..af57475c9 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 997820086..6b05f9c3f 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 diff --git a/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java new file mode 100644 index 000000000..2a5eb08b9 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/api/entities/Entity1_15Types.java @@ -0,0 +1,248 @@ +package us.myles.ViaVersion.api.entities; + +import com.google.common.base.Optional; +import lombok.AllArgsConstructor; +import lombok.Getter; +import us.myles.ViaVersion.api.Via; + +import java.util.HashMap; +import java.util.Map; + + +public class Entity1_15Types { + public static EntityType getTypeFromId(int typeID) { + Optional type = EntityType.findById(typeID); + + if (!type.isPresent()) { + Via.getPlatform().getLogger().severe("Could not find type id " + typeID); + return EntityType.ENTITY; // Fall back to the basic ENTITY + } + + return type.get(); + } + + @AllArgsConstructor + @Getter + public enum EntityType { + ENTITY(-1), + + AREA_EFFECT_CLOUD(0, ENTITY), + ENDER_CRYSTAL(18, ENTITY), + EVOCATION_FANGS(22, ENTITY), + XP_ORB(24, ENTITY), + EYE_OF_ENDER_SIGNAL(25, ENTITY), + FALLING_BLOCK(26, ENTITY), + FIREWORKS_ROCKET(27, ENTITY), + ITEM(35, ENTITY), + LLAMA_SPIT(40, ENTITY), + TNT(59, ENTITY), + SHULKER_BULLET(64, ENTITY), + FISHING_BOBBER(111, ENTITY), + + LIVINGENTITY(-1, ENTITY), + ARMOR_STAND(1, LIVINGENTITY), + PLAYER(110, LIVINGENTITY), + + ABSTRACT_INSENTIENT(-1, LIVINGENTITY), + ENDER_DRAGON(19, ABSTRACT_INSENTIENT), + + BEE(4, ABSTRACT_INSENTIENT), + + ABSTRACT_CREATURE(-1, ABSTRACT_INSENTIENT), + + ABSTRACT_AGEABLE(-1, ABSTRACT_CREATURE), + VILLAGER(85, ABSTRACT_AGEABLE), + WANDERING_TRADER(89, ABSTRACT_AGEABLE), + + // Animals + ABSTRACT_ANIMAL(-1, ABSTRACT_AGEABLE), + DOLPHIN(14, ABSTRACT_INSENTIENT), + CHICKEN(9, ABSTRACT_ANIMAL), + COW(11, ABSTRACT_ANIMAL), + MOOSHROOM(50, COW), + PANDA(53, ABSTRACT_INSENTIENT), + PIG(55, ABSTRACT_ANIMAL), + POLAR_BEAR(58, ABSTRACT_ANIMAL), + RABBIT(60, ABSTRACT_ANIMAL), + SHEEP(62, ABSTRACT_ANIMAL), + TURTLE(78, ABSTRACT_ANIMAL), + FOX(28, ABSTRACT_ANIMAL), + + ABSTRACT_TAMEABLE_ANIMAL(-1, ABSTRACT_ANIMAL), + CAT(7, ABSTRACT_TAMEABLE_ANIMAL), + OCELOT(51, ABSTRACT_TAMEABLE_ANIMAL), + WOLF(94, ABSTRACT_TAMEABLE_ANIMAL), + + ABSTRACT_PARROT(-1, ABSTRACT_TAMEABLE_ANIMAL), + PARROT(54, ABSTRACT_PARROT), + + // Horses + ABSTRACT_HORSE(-1, ABSTRACT_ANIMAL), + CHESTED_HORSE(-1, ABSTRACT_HORSE), + DONKEY(13, CHESTED_HORSE), + MULE(49, CHESTED_HORSE), + LLAMA(39, CHESTED_HORSE), + TRADER_LLAMA(76, CHESTED_HORSE), + HORSE(32, ABSTRACT_HORSE), + SKELETON_HORSE(67, ABSTRACT_HORSE), + ZOMBIE_HORSE(96, ABSTRACT_HORSE), + + // Golem + ABSTRACT_GOLEM(-1, ABSTRACT_CREATURE), + SNOWMAN(70, ABSTRACT_GOLEM), + VILLAGER_GOLEM(86, ABSTRACT_GOLEM), + SHULKER(63, ABSTRACT_GOLEM), + + // Fish + ABSTRACT_FISHES(-1, ABSTRACT_CREATURE), + COD(10, ABSTRACT_FISHES), + PUFFER_FISH(56, ABSTRACT_FISHES), + SALMON_MOB(61, ABSTRACT_FISHES), + TROPICAL_FISH(77, ABSTRACT_FISHES), + + // Monsters + ABSTRACT_MONSTER(-1, ABSTRACT_CREATURE), + BLAZE(4, ABSTRACT_MONSTER), + CREEPER(12, ABSTRACT_MONSTER), + ENDERMITE(21, ABSTRACT_MONSTER), + ENDERMAN(20, ABSTRACT_MONSTER), + GIANT(30, ABSTRACT_MONSTER), + SILVERFISH(65, ABSTRACT_MONSTER), + VEX(84, ABSTRACT_MONSTER), + WITCH(90, ABSTRACT_MONSTER), + WITHER(91, ABSTRACT_MONSTER), + RAVAGER(99, ABSTRACT_MONSTER), + + // Illagers + ABSTRACT_ILLAGER_BASE(-1, ABSTRACT_MONSTER), + ABSTRACT_EVO_ILLU_ILLAGER(-1, ABSTRACT_ILLAGER_BASE), + EVOCATION_ILLAGER(23, ABSTRACT_EVO_ILLU_ILLAGER), + ILLUSION_ILLAGER(34, ABSTRACT_EVO_ILLU_ILLAGER), + VINDICATION_ILLAGER(87, ABSTRACT_ILLAGER_BASE), + PILLAGER(88, ABSTRACT_ILLAGER_BASE), + + // Skeletons + ABSTRACT_SKELETON(-1, ABSTRACT_MONSTER), + SKELETON(66, ABSTRACT_SKELETON), + STRAY(75, ABSTRACT_SKELETON), + WITHER_SKELETON(92, ABSTRACT_SKELETON), + + // Guardians + GUARDIAN(31, ABSTRACT_MONSTER), + ELDER_GUARDIAN(17, GUARDIAN), + + // Spiders + SPIDER(73, ABSTRACT_MONSTER), + CAVE_SPIDER(8, SPIDER), + + // Zombies + ZOMBIE(95, ABSTRACT_MONSTER), + DROWNED(16, ZOMBIE), + HUSK(33, ZOMBIE), + ZOMBIE_PIGMAN(57, ZOMBIE), + ZOMBIE_VILLAGER(97, ZOMBIE), + + // Flying entities + ABSTRACT_FLYING(-1, ABSTRACT_INSENTIENT), + GHAST(29, ABSTRACT_FLYING), + PHANTOM(98, ABSTRACT_FLYING), + + ABSTRACT_AMBIENT(-1, ABSTRACT_INSENTIENT), + BAT(3, ABSTRACT_AMBIENT), + + ABSTRACT_WATERMOB(-1, ABSTRACT_INSENTIENT), + SQUID(74, ABSTRACT_WATERMOB), + + // Slimes + SLIME(68, ABSTRACT_INSENTIENT), + MAGMA_CUBE(41, SLIME), + + // Hangable objects + ABSTRACT_HANGING(-1, ENTITY), + LEASH_KNOT(38, ABSTRACT_HANGING), + ITEM_FRAME(36, ABSTRACT_HANGING), + PAINTING(52, ABSTRACT_HANGING), + + ABSTRACT_LIGHTNING(-1, ENTITY), + LIGHTNING_BOLT(100, ABSTRACT_LIGHTNING), + + // Arrows + ABSTRACT_ARROW(-1, ENTITY), + ARROW(2, ABSTRACT_ARROW), + SPECTRAL_ARROW(72, ABSTRACT_ARROW), + TRIDENT(83, ABSTRACT_ARROW), + + // Fireballs + ABSTRACT_FIREBALL(-1, ENTITY), + DRAGON_FIREBALL(15, ABSTRACT_FIREBALL), + FIREBALL(37, ABSTRACT_FIREBALL), + SMALL_FIREBALL(69, ABSTRACT_FIREBALL), + WITHER_SKULL(93, ABSTRACT_FIREBALL), + + // Projectiles + PROJECTILE_ABSTRACT(-1, ENTITY), + SNOWBALL(71, PROJECTILE_ABSTRACT), + ENDER_PEARL(80, PROJECTILE_ABSTRACT), + EGG(79, PROJECTILE_ABSTRACT), + POTION(82, PROJECTILE_ABSTRACT), + XP_BOTTLE(81, PROJECTILE_ABSTRACT), + + // Vehicles + MINECART_ABSTRACT(-1, ENTITY), + CHESTED_MINECART_ABSTRACT(-1, MINECART_ABSTRACT), + CHEST_MINECART(43, CHESTED_MINECART_ABSTRACT), + HOPPER_MINECART(46, CHESTED_MINECART_ABSTRACT), + MINECART(42, MINECART_ABSTRACT), + FURNACE_MINECART(45, MINECART_ABSTRACT), + COMMANDBLOCK_MINECART(44, MINECART_ABSTRACT), + TNT_MINECART(48, MINECART_ABSTRACT), + SPAWNER_MINECART(47, MINECART_ABSTRACT), + BOAT(6, ENTITY); + + private static final Map TYPES = new HashMap<>(); + + private final int id; + private final EntityType parent; + + EntityType(int id) { + this.id = id; + this.parent = null; + } + + static { + for (EntityType type : EntityType.values()) { + TYPES.put(type.id, type); + } + } + + public static Optional findById(int id) { + if (id == -1) + return Optional.absent(); + return Optional.fromNullable(TYPES.get(id)); + } + + public boolean is(EntityType... types) { + for (EntityType type : types) + if (is(type)) + return true; + return false; + } + + public boolean is(EntityType type) { + return this == type; + } + + public boolean isOrHasParent(EntityType type) { + EntityType parent = this; + + do { + if (parent == type) + return true; + + parent = parent.getParent(); + } while (parent != null); + + return false; + } + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java index bcc669765..1f87fdd56 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java +++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolRegistry.java @@ -21,6 +21,7 @@ import us.myles.ViaVersion.protocols.protocol1_14_2to1_14_1.Protocol1_14_2To1_14 import us.myles.ViaVersion.protocols.protocol1_14_3to1_14_2.Protocol1_14_3To1_14_2; import us.myles.ViaVersion.protocols.protocol1_14_4to1_14_3.Protocol1_14_4To1_14_3; import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.Protocol1_14To1_13_2; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4; import us.myles.ViaVersion.protocols.protocol1_9_1_2to1_9_3_4.Protocol1_9_1_2To1_9_3_4; import us.myles.ViaVersion.protocols.protocol1_9_1to1_9.Protocol1_9_1To1_9; import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.Protocol1_9_3To1_9_1_2; @@ -70,6 +71,8 @@ public class ProtocolRegistry { registerProtocol(new Protocol1_14_2To1_14_1(), Collections.singletonList(ProtocolVersion.v1_14_2.getId()), ProtocolVersion.v1_14_1.getId()); registerProtocol(new Protocol1_14_3To1_14_2(), Collections.singletonList(ProtocolVersion.v1_14_3.getId()), ProtocolVersion.v1_14_2.getId()); registerProtocol(new Protocol1_14_4To1_14_3(), Collections.singletonList(ProtocolVersion.v1_14_4.getId()), ProtocolVersion.v1_14_3.getId()); + + registerProtocol(new Protocol1_15To1_14_4(), Collections.singletonList(ProtocolVersion.v1_15.getId()), ProtocolVersion.v1_14_4.getId()); } /** diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java index 8ac5bf385..6f1bba4a2 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java +++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java @@ -40,6 +40,7 @@ public class ProtocolVersion { public static final ProtocolVersion v1_14_2; public static final ProtocolVersion v1_14_3; public static final ProtocolVersion v1_14_4; + public static final ProtocolVersion v1_15; public static final ProtocolVersion unknown; private final int id; @@ -76,6 +77,7 @@ public class ProtocolVersion { register(v1_14_2 = new ProtocolVersion(485, "1.14.2")); register(v1_14_3 = new ProtocolVersion(490, "1.14.3")); register(v1_14_4 = new ProtocolVersion(498, "1.14.4")); + register(v1_15 = new ProtocolVersion(550, "1.15")); register(unknown = new ProtocolVersion(-1, "UNKNOWN")); } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java new file mode 100644 index 000000000..ed8f7bbf8 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java @@ -0,0 +1,39 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4; + +import us.myles.ViaVersion.api.Via; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.entities.Entity1_15Types; +import us.myles.ViaVersion.api.minecraft.item.Item; +import us.myles.ViaVersion.api.minecraft.metadata.Metadata; +import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_14; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.InventoryPackets; + +import java.util.ArrayList; +import java.util.List; + +public class MetadataRewriter { + + public static void handleMetadata(int entityId, Entity1_15Types.EntityType type, List metadatas, UserConnection connection) { + for (Metadata metadata : new ArrayList<>(metadatas)) { + try { + if (metadata.getMetaType() == MetaType1_14.Slot) { + InventoryPackets.toClient((Item) metadata.getValue()); + } + + if (type == null) continue; + + // Metadata 12 added to abstract_living + if (metadata.getId() > 11 && type.isOrHasParent(Entity1_15Types.EntityType.LIVINGENTITY)) { + metadata.setId(metadata.getId() + 1); //TODO is it 11 or 12? what is it for? + } + } catch (Exception e) { + metadatas.remove(metadata); + if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) { + Via.getPlatform().getLogger().warning("An error occurred with entity metadata handler"); + Via.getPlatform().getLogger().warning("Metadata: " + metadata); + e.printStackTrace(); + } + } + } + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java new file mode 100644 index 000000000..59f190dc9 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java @@ -0,0 +1,146 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4; + +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.entities.Entity1_15Types; +import us.myles.ViaVersion.api.protocol.Protocol; +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; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data.MappingData; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.EntityPackets; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage.EntityTracker; + +public class Protocol1_15To1_14_4 extends Protocol { + + @Override + protected void registerPackets() { + //TODO do the new tags have to be sent? + //TODO sound, item, possibly block remaps (and blockstates should be the same with the new ones just being appended?) + + MappingData.init(); + EntityPackets.register(this); + + // Join Game + registerOutgoing(State.PLAY, 0x25, 0x26, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); // 0 - Entity ID + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + Entity1_15Types.EntityType entType = Entity1_15Types.EntityType.PLAYER; + EntityTracker tracker = wrapper.user().get(EntityTracker.class); + tracker.addEntity(wrapper.get(Type.INT, 0), entType); + } + }); + } + }); + + // Sound Effect + registerOutgoing(State.PLAY, 0x51, 0x52, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // Sound Id + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.set(Type.VAR_INT, 0, MappingData.soundMappings.getNewSound(wrapper.get(Type.VAR_INT, 0))); + } + }); + } + }); + + registerOutgoing(State.PLAY, 0x08, 0x09); + registerOutgoing(State.PLAY, 0x09, 0x0A); + registerOutgoing(State.PLAY, 0x0A, 0x0B); + registerOutgoing(State.PLAY, 0x0B, 0x0C); + registerOutgoing(State.PLAY, 0x0C, 0x0D); + registerOutgoing(State.PLAY, 0x0D, 0x0E); + registerOutgoing(State.PLAY, 0x0E, 0x0F); + registerOutgoing(State.PLAY, 0x0F, 0x10); + registerOutgoing(State.PLAY, 0x10, 0x11); + registerOutgoing(State.PLAY, 0x11, 0x12); + registerOutgoing(State.PLAY, 0x12, 0x13); + registerOutgoing(State.PLAY, 0x13, 0x14); + registerOutgoing(State.PLAY, 0x14, 0x15); + registerOutgoing(State.PLAY, 0x15, 0x16); + registerOutgoing(State.PLAY, 0x16, 0x17); + registerOutgoing(State.PLAY, 0x17, 0x18); + registerOutgoing(State.PLAY, 0x18, 0x19); + registerOutgoing(State.PLAY, 0x19, 0x1A); + registerOutgoing(State.PLAY, 0x1A, 0x1B); + registerOutgoing(State.PLAY, 0x1B, 0x1C); + registerOutgoing(State.PLAY, 0x1C, 0x1D); + registerOutgoing(State.PLAY, 0x1D, 0x1E); + registerOutgoing(State.PLAY, 0x1E, 0x1F); + registerOutgoing(State.PLAY, 0x1F, 0x20); + registerOutgoing(State.PLAY, 0x20, 0x21); + registerOutgoing(State.PLAY, 0x21, 0x22); + registerOutgoing(State.PLAY, 0x22, 0x23); + registerOutgoing(State.PLAY, 0x23, 0x24); + registerOutgoing(State.PLAY, 0x24, 0x25); + + registerOutgoing(State.PLAY, 0x26, 0x27); + registerOutgoing(State.PLAY, 0x27, 0x28); + registerOutgoing(State.PLAY, 0x28, 0x29); + registerOutgoing(State.PLAY, 0x29, 0x2A); + registerOutgoing(State.PLAY, 0x2A, 0x2B); + registerOutgoing(State.PLAY, 0x2B, 0x2C); + registerOutgoing(State.PLAY, 0x2C, 0x2D); + registerOutgoing(State.PLAY, 0x2D, 0x2E); + registerOutgoing(State.PLAY, 0x2E, 0x2F); + registerOutgoing(State.PLAY, 0x2F, 0x30); + registerOutgoing(State.PLAY, 0x30, 0x31); + registerOutgoing(State.PLAY, 0x31, 0x32); + registerOutgoing(State.PLAY, 0x32, 0x33); + registerOutgoing(State.PLAY, 0x33, 0x34); + registerOutgoing(State.PLAY, 0x34, 0x35); + registerOutgoing(State.PLAY, 0x35, 0x36); + registerOutgoing(State.PLAY, 0x36, 0x37); + registerOutgoing(State.PLAY, 0x37, 0x38); + registerOutgoing(State.PLAY, 0x38, 0x39); + registerOutgoing(State.PLAY, 0x39, 0x3A); + registerOutgoing(State.PLAY, 0x3A, 0x3B); + registerOutgoing(State.PLAY, 0x3B, 0x3C); + registerOutgoing(State.PLAY, 0x3C, 0x3D); + registerOutgoing(State.PLAY, 0x3D, 0x3E); + registerOutgoing(State.PLAY, 0x3E, 0x3F); + registerOutgoing(State.PLAY, 0x3F, 0x40); + registerOutgoing(State.PLAY, 0x40, 0x41); + registerOutgoing(State.PLAY, 0x41, 0x42); + registerOutgoing(State.PLAY, 0x42, 0x43); + + registerOutgoing(State.PLAY, 0x44, 0x45); + registerOutgoing(State.PLAY, 0x45, 0x46); + registerOutgoing(State.PLAY, 0x46, 0x47); + registerOutgoing(State.PLAY, 0x47, 0x48); + registerOutgoing(State.PLAY, 0x48, 0x49); + registerOutgoing(State.PLAY, 0x49, 0x4A); + registerOutgoing(State.PLAY, 0x4A, 0x4B); + registerOutgoing(State.PLAY, 0x4B, 0x4C); + registerOutgoing(State.PLAY, 0x4C, 0x4D); + registerOutgoing(State.PLAY, 0x4D, 0x4E); + registerOutgoing(State.PLAY, 0x4E, 0x4F); + registerOutgoing(State.PLAY, 0x4F, 0x50); + registerOutgoing(State.PLAY, 0x50, 0x51); + + registerOutgoing(State.PLAY, 0x52, 0x53); + registerOutgoing(State.PLAY, 0x53, 0x54); + registerOutgoing(State.PLAY, 0x54, 0x55); + registerOutgoing(State.PLAY, 0x55, 0x56); + registerOutgoing(State.PLAY, 0x56, 0x57); + registerOutgoing(State.PLAY, 0x57, 0x58); + registerOutgoing(State.PLAY, 0x58, 0x59); + registerOutgoing(State.PLAY, 0x59, 0x5A); + registerOutgoing(State.PLAY, 0x5A, 0x5B); + registerOutgoing(State.PLAY, 0x5B, 0x5C); + registerOutgoing(State.PLAY, 0x5C, 0x08); + } + + @Override + public void init(UserConnection userConnection) { + userConnection.put(new EntityTracker(userConnection)); + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java new file mode 100644 index 000000000..061ce3a0b --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java @@ -0,0 +1,82 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import us.myles.ViaVersion.api.Via; +import us.myles.ViaVersion.util.GsonUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class MappingData { + + public static SoundMappings soundMappings; + + public static void init() { + JsonObject mapping1_14 = loadData("mapping-1.14.json"); + JsonObject mapping1_15 = loadData("mapping-1.15.json"); + + Via.getPlatform().getLogger().info("Loading 1.14 -> 1.15 sound mapping..."); + soundMappings = new SoundMappingShortArray(mapping1_14.getAsJsonArray("sounds"), mapping1_15.getAsJsonArray("sounds")); + } + + private static JsonObject loadData(String name) { + InputStream stream = MappingData.class.getClassLoader().getResourceAsStream("assets/viaversion/data/" + name); + InputStreamReader reader = new InputStreamReader(stream); + try { + return GsonUtil.getGson().fromJson(reader, JsonObject.class); + } finally { + try { + reader.close(); + } catch (IOException ignored) { + // Ignored + } + } + } + + private static void mapIdentifiers(short[] output, JsonArray oldIdentifiers, JsonArray newIdentifiers) { + for (int i = 0; i < oldIdentifiers.size(); i++) { + JsonElement v = oldIdentifiers.get(i); + Integer index = findIndex(newIdentifiers, v.getAsString()); + if (index == null) { + if (Via.getManager().isDebug()) { + Via.getPlatform().getLogger().warning("No key for " + v + " :( "); + } + continue; + } + output[i] = index.shortValue(); + } + } + + private static Integer findIndex(JsonArray array, String value) { + for (int i = 0; i < array.size(); i++) { + JsonElement v = array.get(i); + if (v.getAsString().equals(value)) { + return i; + } + } + return null; + } + + public interface SoundMappings { + int getNewSound(int old); + } + + private static class SoundMappingShortArray implements SoundMappings { + private short[] oldToNew; + + private SoundMappingShortArray(JsonArray mapping1_14, JsonArray mapping1_15) { + oldToNew = new short[mapping1_14.size()]; + Arrays.fill(oldToNew, (short) -1); + mapIdentifiers(oldToNew, mapping1_14, mapping1_15); + } + + @Override + public int getNewSound(int old) { + return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; + } + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java new file mode 100644 index 000000000..3884914d4 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java @@ -0,0 +1,116 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets; + +import com.google.common.base.Optional; +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.entities.Entity1_15Types; +import us.myles.ViaVersion.api.protocol.Protocol; +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.api.type.types.version.Types1_14; +import us.myles.ViaVersion.packets.State; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.MetadataRewriter; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage.EntityTracker; + +public class EntityPackets { + + public static void register(Protocol protocol) { + // Spawn entity + protocol.registerOutgoing(State.PLAY, 0x00, 0x00, new PacketRemapper() { + @Override + public void registerMap() { + // Track Entity + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int entityId = wrapper.passthrough(Type.VAR_INT); + wrapper.passthrough(Type.UUID); + + int typeId = wrapper.read(Type.VAR_INT); + Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId)); + wrapper.user().get(EntityTracker.class).addEntity(entityId, entityType); + wrapper.write(Type.VAR_INT, entityType.getId()); + } + }); + } + }); + + + // Spawn mob packet + protocol.registerOutgoing(State.PLAY, 0x03, 0x03, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int entityId = wrapper.passthrough(Type.VAR_INT); + wrapper.passthrough(Type.UUID); + + int typeId = wrapper.read(Type.VAR_INT); + Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId)); + wrapper.user().get(EntityTracker.class).addEntity(entityId, entityType); + wrapper.write(Type.VAR_INT, entityType.getId()); + + wrapper.passthrough(Type.DOUBLE); + wrapper.passthrough(Type.DOUBLE); + wrapper.passthrough(Type.DOUBLE); + wrapper.passthrough(Type.BYTE); + wrapper.passthrough(Type.BYTE); + wrapper.passthrough(Type.BYTE); + wrapper.passthrough(Type.SHORT); + wrapper.passthrough(Type.SHORT); + wrapper.passthrough(Type.SHORT); + wrapper.read(Types1_14.METADATA_LIST); // removed - probably sent in an update packet? + } + }); + } + }); + + // Spawn player packet + protocol.registerOutgoing(State.PLAY, 0x05, 0x05, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int entityId = wrapper.passthrough(Type.VAR_INT); + wrapper.passthrough(Type.UUID); + + int typeId = wrapper.read(Type.VAR_INT); + Entity1_15Types.EntityType entityType = Entity1_15Types.getTypeFromId(getNewEntityId(typeId)); + wrapper.user().get(EntityTracker.class).addEntity(entityId, entityType); + wrapper.write(Type.VAR_INT, entityType.getId()); + + wrapper.passthrough(Type.DOUBLE); + wrapper.passthrough(Type.DOUBLE); + wrapper.passthrough(Type.DOUBLE); + wrapper.passthrough(Type.BYTE); + wrapper.passthrough(Type.BYTE); + wrapper.read(Types1_14.METADATA); // removed - probably sent in an update packet? + } + }); + } + }); + + // Metadata packet + protocol.registerOutgoing(State.PLAY, 0x43, 0x44, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Entity ID + map(Types1_14.METADATA_LIST); // 1 - Metadata list + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int entityId = wrapper.get(Type.VAR_INT, 0); + Optional type = wrapper.user().get(EntityTracker.class).get(entityId); + MetadataRewriter.handleMetadata(entityId, type.orNull(), wrapper.get(Types1_14.METADATA_LIST, 0), wrapper.user()); + } + }); + } + }); + } + + public static int getNewEntityId(int oldId) { + return oldId >= 4 ? oldId + 1 : oldId; // 4 = bee + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java new file mode 100644 index 000000000..d93c5415b --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java @@ -0,0 +1,29 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets; + +import us.myles.ViaVersion.api.minecraft.item.Item; +import us.myles.ViaVersion.api.protocol.Protocol; + +public class InventoryPackets { + + public static void register(Protocol protocol) { + //TODO eeeeverything + } + + public static void toClient(Item item) { + if (item == null) return; + item.setIdentifier(getNewItemId(item.getIdentifier())); + } + + public static void toServer(Item item) { + if (item == null) return; + item.setIdentifier(getOldItemId(item.getIdentifier())); + } + + public static int getNewItemId(int id) { + return id; + } + + public static int getOldItemId(int id) { + return id; + } +} diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/storage/EntityTracker.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/storage/EntityTracker.java new file mode 100644 index 000000000..614a1e429 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/storage/EntityTracker.java @@ -0,0 +1,39 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage; + +import com.google.common.base.Optional; +import us.myles.ViaVersion.api.data.ExternalJoinGameListener; +import us.myles.ViaVersion.api.data.StoredObject; +import us.myles.ViaVersion.api.data.UserConnection; +import us.myles.ViaVersion.api.entities.Entity1_15Types; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class EntityTracker extends StoredObject implements ExternalJoinGameListener { + private final Map clientEntityTypes = new ConcurrentHashMap<>(); + + public EntityTracker(UserConnection user) { + super(user); + } + + public void removeEntity(int entityId) { + clientEntityTypes.remove(entityId); + } + + public void addEntity(int entityId, Entity1_15Types.EntityType type) { + clientEntityTypes.put(entityId, type); + } + + public boolean has(int entityId) { + return clientEntityTypes.containsKey(entityId); + } + + public Optional get(int id) { + return Optional.fromNullable(clientEntityTypes.get(id)); + } + + @Override + public void onExternalJoinGame(int playerEntityId) { + clientEntityTypes.put(playerEntityId, Entity1_15Types.EntityType.PLAYER); + } +} diff --git a/common/src/main/resources/assets/viaversion/data/mapping-1.15.json b/common/src/main/resources/assets/viaversion/data/mapping-1.15.json new file mode 100644 index 000000000..79871f2f2 --- /dev/null +++ b/common/src/main/resources/assets/viaversion/data/mapping-1.15.json @@ -0,0 +1,811 @@ +{ + "sounds": [ + "ambient.cave", + "ambient.underwater.enter", + "ambient.underwater.exit", + "ambient.underwater.loop", + "ambient.underwater.loop.additions", + "ambient.underwater.loop.additions.rare", + "ambient.underwater.loop.additions.ultra_rare", + "block.anvil.break", + "block.anvil.destroy", + "block.anvil.fall", + "block.anvil.hit", + "block.anvil.land", + "block.anvil.place", + "block.anvil.step", + "block.anvil.use", + "block.bamboo.break", + "block.bamboo.fall", + "block.bamboo.hit", + "block.bamboo.place", + "block.bamboo.step", + "block.bamboo_sapling.break", + "block.bamboo_sapling.hit", + "block.bamboo_sapling.place", + "block.barrel.close", + "block.barrel.open", + "block.beacon.activate", + "block.beacon.ambient", + "block.beacon.deactivate", + "block.beacon.power_select", + "block.beehive.drip", + "block.beehive.enter", + "block.beehive.exit", + "block.beehive.shear", + "block.beehive.work", + "block.bell.resonate", + "block.bell.use", + "block.blastfurnace.fire_crackle", + "block.brewing_stand.brew", + "block.bubble_column.bubble_pop", + "block.bubble_column.upwards_ambient", + "block.bubble_column.upwards_inside", + "block.bubble_column.whirlpool_ambient", + "block.bubble_column.whirlpool_inside", + "block.campfire.crackle", + "block.chest.close", + "block.chest.locked", + "block.chest.open", + "block.chorus_flower.death", + "block.chorus_flower.grow", + "block.comparator.click", + "block.composter.empty", + "block.composter.fill", + "block.composter.fill_success", + "block.composter.ready", + "block.conduit.activate", + "block.conduit.ambient", + "block.conduit.ambient.short", + "block.conduit.attack.target", + "block.conduit.deactivate", + "block.coral_block.break", + "block.coral_block.fall", + "block.coral_block.hit", + "block.coral_block.place", + "block.coral_block.step", + "block.crop.break", + "block.dispenser.dispense", + "block.dispenser.fail", + "block.dispenser.launch", + "block.enchantment_table.use", + "block.end_gateway.spawn", + "block.end_portal.spawn", + "block.end_portal_frame.fill", + "block.ender_chest.close", + "block.ender_chest.open", + "block.fence_gate.close", + "block.fence_gate.open", + "block.fire.ambient", + "block.fire.extinguish", + "block.furnace.fire_crackle", + "block.glass.break", + "block.glass.fall", + "block.glass.hit", + "block.glass.place", + "block.glass.step", + "block.grass.break", + "block.grass.fall", + "block.grass.hit", + "block.grass.place", + "block.grass.step", + "block.gravel.break", + "block.gravel.fall", + "block.gravel.hit", + "block.gravel.place", + "block.gravel.step", + "block.grindstone.use", + "block.iron_door.close", + "block.iron_door.open", + "block.iron_trapdoor.close", + "block.iron_trapdoor.open", + "block.ladder.break", + "block.ladder.fall", + "block.ladder.hit", + "block.ladder.place", + "block.ladder.step", + "block.lantern.break", + "block.lantern.fall", + "block.lantern.hit", + "block.lantern.place", + "block.lantern.step", + "block.lava.ambient", + "block.lava.extinguish", + "block.lava.pop", + "block.lever.click", + "block.lily_pad.place", + "block.metal.break", + "block.metal.fall", + "block.metal.hit", + "block.metal.place", + "block.metal.step", + "block.metal_pressure_plate.click_off", + "block.metal_pressure_plate.click_on", + "block.nether_wart.break", + "block.note_block.banjo", + "block.note_block.basedrum", + "block.note_block.bass", + "block.note_block.bell", + "block.note_block.bit", + "block.note_block.chime", + "block.note_block.cow_bell", + "block.note_block.didgeridoo", + "block.note_block.flute", + "block.note_block.guitar", + "block.note_block.harp", + "block.note_block.hat", + "block.note_block.iron_xylophone", + "block.note_block.pling", + "block.note_block.snare", + "block.note_block.xylophone", + "block.piston.contract", + "block.piston.extend", + "block.portal.ambient", + "block.portal.travel", + "block.portal.trigger", + "block.pumpkin.carve", + "block.redstone_torch.burnout", + "block.sand.break", + "block.sand.fall", + "block.sand.hit", + "block.sand.place", + "block.sand.step", + "block.scaffolding.break", + "block.scaffolding.fall", + "block.scaffolding.hit", + "block.scaffolding.place", + "block.scaffolding.step", + "block.shulker_box.close", + "block.shulker_box.open", + "block.slime_block.break", + "block.slime_block.fall", + "block.slime_block.hit", + "block.slime_block.place", + "block.slime_block.step", + "block.smoker.smoke", + "block.snow.break", + "block.snow.fall", + "block.snow.hit", + "block.snow.place", + "block.snow.step", + "block.stone.break", + "block.stone.fall", + "block.stone.hit", + "block.stone.place", + "block.stone.step", + "block.stone_button.click_off", + "block.stone_button.click_on", + "block.stone_pressure_plate.click_off", + "block.stone_pressure_plate.click_on", + "block.sweet_berry_bush.break", + "block.sweet_berry_bush.place", + "block.tripwire.attach", + "block.tripwire.click_off", + "block.tripwire.click_on", + "block.tripwire.detach", + "block.water.ambient", + "block.wet_grass.break", + "block.wet_grass.fall", + "block.wet_grass.hit", + "block.wet_grass.place", + "block.wet_grass.step", + "block.wood.break", + "block.wood.fall", + "block.wood.hit", + "block.wood.place", + "block.wood.step", + "block.wooden_button.click_off", + "block.wooden_button.click_on", + "block.wooden_door.close", + "block.wooden_door.open", + "block.wooden_pressure_plate.click_off", + "block.wooden_pressure_plate.click_on", + "block.wooden_trapdoor.close", + "block.wooden_trapdoor.open", + "block.wool.break", + "block.wool.fall", + "block.wool.hit", + "block.wool.place", + "block.wool.step", + "enchant.thorns.hit", + "entity.armor_stand.break", + "entity.armor_stand.fall", + "entity.armor_stand.hit", + "entity.armor_stand.place", + "entity.arrow.hit", + "entity.arrow.hit_player", + "entity.arrow.shoot", + "entity.bat.ambient", + "entity.bat.death", + "entity.bat.hurt", + "entity.bat.loop", + "entity.bat.takeoff", + "entity.bee.death", + "entity.bee.hurt", + "entity.bee.loop", + "entity.bee.loop_aggressive", + "entity.bee.pollinate", + "entity.bee.sting", + "entity.blaze.ambient", + "entity.blaze.burn", + "entity.blaze.death", + "entity.blaze.hurt", + "entity.blaze.shoot", + "entity.boat.paddle_land", + "entity.boat.paddle_water", + "entity.cat.ambient", + "entity.cat.beg_for_food", + "entity.cat.death", + "entity.cat.eat", + "entity.cat.hiss", + "entity.cat.hurt", + "entity.cat.purr", + "entity.cat.purreow", + "entity.cat.stray_ambient", + "entity.chicken.ambient", + "entity.chicken.death", + "entity.chicken.egg", + "entity.chicken.hurt", + "entity.chicken.step", + "entity.cod.ambient", + "entity.cod.death", + "entity.cod.flop", + "entity.cod.hurt", + "entity.cow.ambient", + "entity.cow.death", + "entity.cow.hurt", + "entity.cow.milk", + "entity.cow.step", + "entity.creeper.death", + "entity.creeper.hurt", + "entity.creeper.primed", + "entity.dolphin.ambient", + "entity.dolphin.ambient_water", + "entity.dolphin.attack", + "entity.dolphin.death", + "entity.dolphin.eat", + "entity.dolphin.hurt", + "entity.dolphin.jump", + "entity.dolphin.play", + "entity.dolphin.splash", + "entity.dolphin.swim", + "entity.donkey.ambient", + "entity.donkey.angry", + "entity.donkey.chest", + "entity.donkey.death", + "entity.donkey.hurt", + "entity.dragon_fireball.explode", + "entity.drowned.ambient", + "entity.drowned.ambient_water", + "entity.drowned.death", + "entity.drowned.death_water", + "entity.drowned.hurt", + "entity.drowned.hurt_water", + "entity.drowned.shoot", + "entity.drowned.step", + "entity.drowned.swim", + "entity.egg.throw", + "entity.elder_guardian.ambient", + "entity.elder_guardian.ambient_land", + "entity.elder_guardian.curse", + "entity.elder_guardian.death", + "entity.elder_guardian.death_land", + "entity.elder_guardian.flop", + "entity.elder_guardian.hurt", + "entity.elder_guardian.hurt_land", + "entity.ender_dragon.ambient", + "entity.ender_dragon.death", + "entity.ender_dragon.flap", + "entity.ender_dragon.growl", + "entity.ender_dragon.hurt", + "entity.ender_dragon.shoot", + "entity.ender_eye.death", + "entity.ender_eye.launch", + "entity.ender_pearl.throw", + "entity.enderman.ambient", + "entity.enderman.death", + "entity.enderman.hurt", + "entity.enderman.scream", + "entity.enderman.stare", + "entity.enderman.teleport", + "entity.endermite.ambient", + "entity.endermite.death", + "entity.endermite.hurt", + "entity.endermite.step", + "entity.evoker.ambient", + "entity.evoker.cast_spell", + "entity.evoker.celebrate", + "entity.evoker.death", + "entity.evoker.hurt", + "entity.evoker.prepare_attack", + "entity.evoker.prepare_summon", + "entity.evoker.prepare_wololo", + "entity.evoker_fangs.attack", + "entity.experience_bottle.throw", + "entity.experience_orb.pickup", + "entity.firework_rocket.blast", + "entity.firework_rocket.blast_far", + "entity.firework_rocket.large_blast", + "entity.firework_rocket.large_blast_far", + "entity.firework_rocket.launch", + "entity.firework_rocket.shoot", + "entity.firework_rocket.twinkle", + "entity.firework_rocket.twinkle_far", + "entity.fish.swim", + "entity.fishing_bobber.retrieve", + "entity.fishing_bobber.splash", + "entity.fishing_bobber.throw", + "entity.fox.aggro", + "entity.fox.ambient", + "entity.fox.bite", + "entity.fox.death", + "entity.fox.eat", + "entity.fox.hurt", + "entity.fox.screech", + "entity.fox.sleep", + "entity.fox.sniff", + "entity.fox.spit", + "entity.generic.big_fall", + "entity.generic.burn", + "entity.generic.death", + "entity.generic.drink", + "entity.generic.eat", + "entity.generic.explode", + "entity.generic.extinguish_fire", + "entity.generic.hurt", + "entity.generic.small_fall", + "entity.generic.splash", + "entity.generic.swim", + "entity.ghast.ambient", + "entity.ghast.death", + "entity.ghast.hurt", + "entity.ghast.scream", + "entity.ghast.shoot", + "entity.ghast.warn", + "entity.guardian.ambient", + "entity.guardian.ambient_land", + "entity.guardian.attack", + "entity.guardian.death", + "entity.guardian.death_land", + "entity.guardian.flop", + "entity.guardian.hurt", + "entity.guardian.hurt_land", + "entity.horse.ambient", + "entity.horse.angry", + "entity.horse.armor", + "entity.horse.breathe", + "entity.horse.death", + "entity.horse.eat", + "entity.horse.gallop", + "entity.horse.hurt", + "entity.horse.jump", + "entity.horse.land", + "entity.horse.saddle", + "entity.horse.step", + "entity.horse.step_wood", + "entity.hostile.big_fall", + "entity.hostile.death", + "entity.hostile.hurt", + "entity.hostile.small_fall", + "entity.hostile.splash", + "entity.hostile.swim", + "entity.husk.ambient", + "entity.husk.converted_to_zombie", + "entity.husk.death", + "entity.husk.hurt", + "entity.husk.step", + "entity.illusioner.ambient", + "entity.illusioner.cast_spell", + "entity.illusioner.death", + "entity.illusioner.hurt", + "entity.illusioner.mirror_move", + "entity.illusioner.prepare_blindness", + "entity.illusioner.prepare_mirror", + "entity.iron_golem.attack", + "entity.iron_golem.death", + "entity.iron_golem.hurt", + "entity.iron_golem.step", + "entity.item.break", + "entity.item.pickup", + "entity.item_frame.add_item", + "entity.item_frame.break", + "entity.item_frame.place", + "entity.item_frame.remove_item", + "entity.item_frame.rotate_item", + "entity.leash_knot.break", + "entity.leash_knot.place", + "entity.lightning_bolt.impact", + "entity.lightning_bolt.thunder", + "entity.lingering_potion.throw", + "entity.llama.ambient", + "entity.llama.angry", + "entity.llama.chest", + "entity.llama.death", + "entity.llama.eat", + "entity.llama.hurt", + "entity.llama.spit", + "entity.llama.step", + "entity.llama.swag", + "entity.magma_cube.death", + "entity.magma_cube.death_small", + "entity.magma_cube.hurt", + "entity.magma_cube.hurt_small", + "entity.magma_cube.jump", + "entity.magma_cube.squish", + "entity.magma_cube.squish_small", + "entity.minecart.inside", + "entity.minecart.riding", + "entity.mooshroom.convert", + "entity.mooshroom.eat", + "entity.mooshroom.milk", + "entity.mooshroom.shear", + "entity.mooshroom.suspicious_milk", + "entity.mule.ambient", + "entity.mule.chest", + "entity.mule.death", + "entity.mule.hurt", + "entity.ocelot.ambient", + "entity.ocelot.death", + "entity.ocelot.hurt", + "entity.painting.break", + "entity.painting.place", + "entity.panda.aggressive_ambient", + "entity.panda.ambient", + "entity.panda.bite", + "entity.panda.cant_breed", + "entity.panda.death", + "entity.panda.eat", + "entity.panda.hurt", + "entity.panda.pre_sneeze", + "entity.panda.sneeze", + "entity.panda.step", + "entity.panda.worried_ambient", + "entity.parrot.ambient", + "entity.parrot.death", + "entity.parrot.eat", + "entity.parrot.fly", + "entity.parrot.hurt", + "entity.parrot.imitate.blaze", + "entity.parrot.imitate.creeper", + "entity.parrot.imitate.drowned", + "entity.parrot.imitate.elder_guardian", + "entity.parrot.imitate.ender_dragon", + "entity.parrot.imitate.enderman", + "entity.parrot.imitate.endermite", + "entity.parrot.imitate.evoker", + "entity.parrot.imitate.ghast", + "entity.parrot.imitate.guardian", + "entity.parrot.imitate.husk", + "entity.parrot.imitate.illusioner", + "entity.parrot.imitate.magma_cube", + "entity.parrot.imitate.panda", + "entity.parrot.imitate.phantom", + "entity.parrot.imitate.pillager", + "entity.parrot.imitate.polar_bear", + "entity.parrot.imitate.ravager", + "entity.parrot.imitate.shulker", + "entity.parrot.imitate.silverfish", + "entity.parrot.imitate.skeleton", + "entity.parrot.imitate.slime", + "entity.parrot.imitate.spider", + "entity.parrot.imitate.stray", + "entity.parrot.imitate.vex", + "entity.parrot.imitate.vindicator", + "entity.parrot.imitate.witch", + "entity.parrot.imitate.wither", + "entity.parrot.imitate.wither_skeleton", + "entity.parrot.imitate.wolf", + "entity.parrot.imitate.zombie", + "entity.parrot.imitate.zombie_pigman", + "entity.parrot.imitate.zombie_villager", + "entity.parrot.step", + "entity.phantom.ambient", + "entity.phantom.bite", + "entity.phantom.death", + "entity.phantom.flap", + "entity.phantom.hurt", + "entity.phantom.swoop", + "entity.pig.ambient", + "entity.pig.death", + "entity.pig.hurt", + "entity.pig.saddle", + "entity.pig.step", + "entity.pillager.ambient", + "entity.pillager.celebrate", + "entity.pillager.death", + "entity.pillager.hurt", + "entity.player.attack.crit", + "entity.player.attack.knockback", + "entity.player.attack.nodamage", + "entity.player.attack.strong", + "entity.player.attack.sweep", + "entity.player.attack.weak", + "entity.player.big_fall", + "entity.player.breath", + "entity.player.burp", + "entity.player.death", + "entity.player.hurt", + "entity.player.hurt_drown", + "entity.player.hurt_on_fire", + "entity.player.hurt_sweet_berry_bush", + "entity.player.levelup", + "entity.player.small_fall", + "entity.player.splash", + "entity.player.splash.high_speed", + "entity.player.swim", + "entity.polar_bear.ambient", + "entity.polar_bear.ambient_baby", + "entity.polar_bear.death", + "entity.polar_bear.hurt", + "entity.polar_bear.step", + "entity.polar_bear.warning", + "entity.puffer_fish.ambient", + "entity.puffer_fish.blow_out", + "entity.puffer_fish.blow_up", + "entity.puffer_fish.death", + "entity.puffer_fish.flop", + "entity.puffer_fish.hurt", + "entity.puffer_fish.sting", + "entity.rabbit.ambient", + "entity.rabbit.attack", + "entity.rabbit.death", + "entity.rabbit.hurt", + "entity.rabbit.jump", + "entity.ravager.ambient", + "entity.ravager.attack", + "entity.ravager.celebrate", + "entity.ravager.death", + "entity.ravager.hurt", + "entity.ravager.roar", + "entity.ravager.step", + "entity.ravager.stunned", + "entity.salmon.ambient", + "entity.salmon.death", + "entity.salmon.flop", + "entity.salmon.hurt", + "entity.sheep.ambient", + "entity.sheep.death", + "entity.sheep.hurt", + "entity.sheep.shear", + "entity.sheep.step", + "entity.shulker.ambient", + "entity.shulker.close", + "entity.shulker.death", + "entity.shulker.hurt", + "entity.shulker.hurt_closed", + "entity.shulker.open", + "entity.shulker.shoot", + "entity.shulker.teleport", + "entity.shulker_bullet.hit", + "entity.shulker_bullet.hurt", + "entity.silverfish.ambient", + "entity.silverfish.death", + "entity.silverfish.hurt", + "entity.silverfish.step", + "entity.skeleton.ambient", + "entity.skeleton.death", + "entity.skeleton.hurt", + "entity.skeleton.shoot", + "entity.skeleton.step", + "entity.skeleton_horse.ambient", + "entity.skeleton_horse.ambient_water", + "entity.skeleton_horse.death", + "entity.skeleton_horse.gallop_water", + "entity.skeleton_horse.hurt", + "entity.skeleton_horse.jump_water", + "entity.skeleton_horse.step_water", + "entity.skeleton_horse.swim", + "entity.slime.attack", + "entity.slime.death", + "entity.slime.death_small", + "entity.slime.hurt", + "entity.slime.hurt_small", + "entity.slime.jump", + "entity.slime.jump_small", + "entity.slime.squish", + "entity.slime.squish_small", + "entity.snow_golem.ambient", + "entity.snow_golem.death", + "entity.snow_golem.hurt", + "entity.snow_golem.shoot", + "entity.snowball.throw", + "entity.spider.ambient", + "entity.spider.death", + "entity.spider.hurt", + "entity.spider.step", + "entity.splash_potion.break", + "entity.splash_potion.throw", + "entity.squid.ambient", + "entity.squid.death", + "entity.squid.hurt", + "entity.squid.squirt", + "entity.stray.ambient", + "entity.stray.death", + "entity.stray.hurt", + "entity.stray.step", + "entity.tnt.primed", + "entity.tropical_fish.ambient", + "entity.tropical_fish.death", + "entity.tropical_fish.flop", + "entity.tropical_fish.hurt", + "entity.turtle.ambient_land", + "entity.turtle.death", + "entity.turtle.death_baby", + "entity.turtle.egg_break", + "entity.turtle.egg_crack", + "entity.turtle.egg_hatch", + "entity.turtle.hurt", + "entity.turtle.hurt_baby", + "entity.turtle.lay_egg", + "entity.turtle.shamble", + "entity.turtle.shamble_baby", + "entity.turtle.swim", + "entity.vex.ambient", + "entity.vex.charge", + "entity.vex.death", + "entity.vex.hurt", + "entity.villager.ambient", + "entity.villager.celebrate", + "entity.villager.death", + "entity.villager.hurt", + "entity.villager.no", + "entity.villager.trade", + "entity.villager.work_armorer", + "entity.villager.work_butcher", + "entity.villager.work_cartographer", + "entity.villager.work_cleric", + "entity.villager.work_farmer", + "entity.villager.work_fisherman", + "entity.villager.work_fletcher", + "entity.villager.work_leatherworker", + "entity.villager.work_librarian", + "entity.villager.work_mason", + "entity.villager.work_shepherd", + "entity.villager.work_toolsmith", + "entity.villager.work_weaponsmith", + "entity.villager.yes", + "entity.vindicator.ambient", + "entity.vindicator.celebrate", + "entity.vindicator.death", + "entity.vindicator.hurt", + "entity.wandering_trader.ambient", + "entity.wandering_trader.death", + "entity.wandering_trader.disappeared", + "entity.wandering_trader.drink_milk", + "entity.wandering_trader.drink_potion", + "entity.wandering_trader.hurt", + "entity.wandering_trader.no", + "entity.wandering_trader.reappeared", + "entity.wandering_trader.trade", + "entity.wandering_trader.yes", + "entity.witch.ambient", + "entity.witch.celebrate", + "entity.witch.death", + "entity.witch.drink", + "entity.witch.hurt", + "entity.witch.throw", + "entity.wither.ambient", + "entity.wither.break_block", + "entity.wither.death", + "entity.wither.hurt", + "entity.wither.shoot", + "entity.wither.spawn", + "entity.wither_skeleton.ambient", + "entity.wither_skeleton.death", + "entity.wither_skeleton.hurt", + "entity.wither_skeleton.step", + "entity.wolf.ambient", + "entity.wolf.death", + "entity.wolf.growl", + "entity.wolf.howl", + "entity.wolf.hurt", + "entity.wolf.pant", + "entity.wolf.shake", + "entity.wolf.step", + "entity.wolf.whine", + "entity.zombie.ambient", + "entity.zombie.attack_iron_door", + "entity.zombie.attack_wooden_door", + "entity.zombie.break_wooden_door", + "entity.zombie.converted_to_drowned", + "entity.zombie.death", + "entity.zombie.destroy_egg", + "entity.zombie.hurt", + "entity.zombie.infect", + "entity.zombie.step", + "entity.zombie_horse.ambient", + "entity.zombie_horse.death", + "entity.zombie_horse.hurt", + "entity.zombie_pigman.ambient", + "entity.zombie_pigman.angry", + "entity.zombie_pigman.death", + "entity.zombie_pigman.hurt", + "entity.zombie_villager.ambient", + "entity.zombie_villager.converted", + "entity.zombie_villager.cure", + "entity.zombie_villager.death", + "entity.zombie_villager.hurt", + "entity.zombie_villager.step", + "event.raid.horn", + "item.armor.equip_chain", + "item.armor.equip_diamond", + "item.armor.equip_elytra", + "item.armor.equip_generic", + "item.armor.equip_gold", + "item.armor.equip_iron", + "item.armor.equip_leather", + "item.armor.equip_turtle", + "item.axe.strip", + "item.book.page_turn", + "item.book.put", + "item.bottle.empty", + "item.bottle.fill", + "item.bottle.fill_dragonbreath", + "item.bucket.empty", + "item.bucket.empty_fish", + "item.bucket.empty_lava", + "item.bucket.fill", + "item.bucket.fill_fish", + "item.bucket.fill_lava", + "item.chorus_fruit.teleport", + "item.crop.plant", + "item.crossbow.hit", + "item.crossbow.loading_end", + "item.crossbow.loading_middle", + "item.crossbow.loading_start", + "item.crossbow.quick_charge_1", + "item.crossbow.quick_charge_2", + "item.crossbow.quick_charge_3", + "item.crossbow.shoot", + "item.elytra.flying", + "item.firecharge.use", + "item.flintandsteel.use", + "item.hoe.till", + "item.honey_bottle.drink", + "item.nether_wart.plant", + "item.shield.block", + "item.shield.break", + "item.shovel.flatten", + "item.sweet_berries.pick_from_bush", + "item.totem.use", + "item.trident.hit", + "item.trident.hit_ground", + "item.trident.return", + "item.trident.riptide_1", + "item.trident.riptide_2", + "item.trident.riptide_3", + "item.trident.throw", + "item.trident.thunder", + "music.creative", + "music.credits", + "music.dragon", + "music.end", + "music.game", + "music.menu", + "music.nether", + "music.under_water", + "music_disc.11", + "music_disc.13", + "music_disc.blocks", + "music_disc.cat", + "music_disc.chirp", + "music_disc.far", + "music_disc.mall", + "music_disc.mellohi", + "music_disc.stal", + "music_disc.strad", + "music_disc.wait", + "music_disc.ward", + "ui.button.click", + "ui.cartography_table.take_result", + "ui.loom.select_pattern", + "ui.loom.take_result", + "ui.stonecutter.select_recipe", + "ui.stonecutter.take_result", + "ui.toast.challenge_complete", + "ui.toast.in", + "ui.toast.out", + "weather.rain", + "weather.rain.above" + ] +} \ No newline at end of file diff --git a/jar/pom.xml b/jar/pom.xml index 66207d352..1f0ecede7 100644 --- a/jar/pom.xml +++ b/jar/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 viaversion-jar diff --git a/pom.xml b/pom.xml index f5a8af88b..0ed48fa2a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ us.myles viaversion-parent - 2.1.4-SNAPSHOT + 2.1.4-19w34a pom viaversion-parent diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml index b7af992a9..16393fec6 100644 --- a/sponge-legacy/pom.xml +++ b/sponge-legacy/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 diff --git a/sponge/pom.xml b/sponge/pom.xml index 8dbf2f470..ff55c8804 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 diff --git a/velocity/pom.xml b/velocity/pom.xml index 20bcab967..03bcc6f32 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-SNAPSHOT + 2.1.4-19w34a 4.0.0 From ea25b559ed44b74be674098da79c0092c330e281 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Wed, 28 Aug 2019 19:28:23 +0200 Subject: [PATCH 09/10] 19w35a (mappings for 34a still missing) --- bukkit/pom.xml | 2 +- bungee/pom.xml | 2 +- common/pom.xml | 2 +- .../java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java | 2 +- .../protocols/protocol1_15to1_14_4/MetadataRewriter.java | 2 ++ jar/pom.xml | 2 +- pom.xml | 2 +- sponge-legacy/pom.xml | 2 +- sponge/pom.xml | 2 +- velocity/pom.xml | 2 +- 10 files changed, 11 insertions(+), 9 deletions(-) diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 09df25ff6..c7b916aa9 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 diff --git a/bungee/pom.xml b/bungee/pom.xml index af57475c9..14bf5a621 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index 6b05f9c3f..9401ba496 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 diff --git a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java index 6f1bba4a2..747489274 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java +++ b/common/src/main/java/us/myles/ViaVersion/api/protocol/ProtocolVersion.java @@ -77,7 +77,7 @@ public class ProtocolVersion { register(v1_14_2 = new ProtocolVersion(485, "1.14.2")); register(v1_14_3 = new ProtocolVersion(490, "1.14.3")); register(v1_14_4 = new ProtocolVersion(498, "1.14.4")); - register(v1_15 = new ProtocolVersion(550, "1.15")); + register(v1_15 = new ProtocolVersion(551, "1.15")); register(unknown = new ProtocolVersion(-1, "UNKNOWN")); } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java index ed8f7bbf8..51d5c2885 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java @@ -26,6 +26,8 @@ public class MetadataRewriter { if (metadata.getId() > 11 && type.isOrHasParent(Entity1_15Types.EntityType.LIVINGENTITY)) { metadata.setId(metadata.getId() + 1); //TODO is it 11 or 12? what is it for? } + + //TODO new boolean with id 17 for enderman? } catch (Exception e) { metadatas.remove(metadata); if (!Via.getConfig().isSuppressMetadataErrors() || Via.getManager().isDebug()) { diff --git a/jar/pom.xml b/jar/pom.xml index 1f0ecede7..d1fc2d3c9 100644 --- a/jar/pom.xml +++ b/jar/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 viaversion-jar diff --git a/pom.xml b/pom.xml index 0ed48fa2a..2711ee33a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ us.myles viaversion-parent - 2.1.4-19w34a + 2.1.4-19w35a pom viaversion-parent diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml index 16393fec6..0417f5619 100644 --- a/sponge-legacy/pom.xml +++ b/sponge-legacy/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 diff --git a/sponge/pom.xml b/sponge/pom.xml index ff55c8804..91f00fb02 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 diff --git a/velocity/pom.xml b/velocity/pom.xml index 03bcc6f32..2564bcbb5 100644 --- a/velocity/pom.xml +++ b/velocity/pom.xml @@ -5,7 +5,7 @@ viaversion-parent us.myles - 2.1.4-19w34a + 2.1.4-19w35a 4.0.0 From f35eb3054c86e3aef5d7097d1ecf3fbfab482d71 Mon Sep 17 00:00:00 2001 From: KennyTV <28825609+KennyTV@users.noreply.github.com> Date: Thu, 29 Aug 2019 19:56:30 +0200 Subject: [PATCH 10/10] Finish 19w35a --- .../data/MappingData.java | 10 +- .../packets/EntityPackets.java | 1 - .../Protocol1_15To1_14_4.java | 155 +- .../data/MappingData.java | 84 +- .../packets/InventoryPackets.java | 210 +- .../packets/WorldPackets.java | 78 + .../assets/viaversion/data/mapping-1.15.json | 2210 ++++++++++++++--- 7 files changed, 2331 insertions(+), 417 deletions(-) create mode 100644 common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java index f85760213..dd72d6e68 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/data/MappingData.java @@ -73,7 +73,7 @@ public class MappingData { } } - private static void mapIdentifiers(Map output, JsonObject oldIdentifiers, JsonObject newIdentifiers) { + public static void mapIdentifiers(Map output, JsonObject oldIdentifiers, JsonObject newIdentifiers) { for (Map.Entry entry : oldIdentifiers.entrySet()) { Map.Entry value = findValue(newIdentifiers, entry.getValue().getAsString()); if (value == null) { @@ -137,10 +137,10 @@ public class MappingData { int getNewSound(int old); } - private static class SoundMappingShortArray implements SoundMappings { + public static class SoundMappingShortArray implements SoundMappings { private short[] oldToNew; - private SoundMappingShortArray(JsonArray mapping1_13_2, JsonArray mapping1_14) { + public SoundMappingShortArray(JsonArray mapping1_13_2, JsonArray mapping1_14) { oldToNew = new short[mapping1_13_2.size()]; Arrays.fill(oldToNew, (short) -1); mapIdentifiers(oldToNew, mapping1_13_2, mapping1_14); @@ -156,10 +156,10 @@ public class MappingData { int getNewBlock(int old); } - private static class BlockMappingsShortArray implements BlockMappings { + public static class BlockMappingsShortArray implements BlockMappings { private short[] oldToNew; - private BlockMappingsShortArray(JsonObject mapping1_13_2, JsonObject mapping1_14) { + public BlockMappingsShortArray(JsonObject mapping1_13_2, JsonObject mapping1_14) { oldToNew = new short[mapping1_13_2.entrySet().size()]; Arrays.fill(oldToNew, (short) -1); mapIdentifiers(oldToNew, mapping1_13_2, mapping1_14); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java index 537455bdb..0ceafd31c 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/EntityPackets.java @@ -26,7 +26,6 @@ import java.util.UUID; public class EntityPackets { public static void register(Protocol protocol) { - // Spawn entity protocol.registerOutgoing(State.PLAY, 0x00, 0x00, new PacketRemapper() { @Override diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java index 59f190dc9..cba1740f4 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java @@ -1,6 +1,7 @@ package us.myles.ViaVersion.protocols.protocol1_15to1_14_4; import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.entities.Entity1_15Types; import us.myles.ViaVersion.api.protocol.Protocol; @@ -10,17 +11,18 @@ import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.packets.State; import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data.MappingData; import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.EntityPackets; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.InventoryPackets; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets.WorldPackets; import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.storage.EntityTracker; public class Protocol1_15To1_14_4 extends Protocol { @Override protected void registerPackets() { - //TODO do the new tags have to be sent? - //TODO sound, item, possibly block remaps (and blockstates should be the same with the new ones just being appended?) - MappingData.init(); EntityPackets.register(this); + WorldPackets.register(this); + InventoryPackets.register(this); // Join Game registerOutgoing(State.PLAY, 0x25, 0x26, new PacketRemapper() { @@ -38,6 +40,20 @@ public class Protocol1_15To1_14_4 extends Protocol { } }); + // Entity Sound Effect (added somewhere in 1.14) + registerOutgoing(State.PLAY, 0x50, 0x51, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // Sound Id + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.set(Type.VAR_INT, 0, MappingData.soundMappings.getNewSound(wrapper.get(Type.VAR_INT, 0))); + } + }); + } + }); + // Sound Effect registerOutgoing(State.PLAY, 0x51, 0x52, new PacketRemapper() { @Override @@ -52,11 +68,111 @@ public class Protocol1_15To1_14_4 extends Protocol { } }); + // Edit Book + registerIncoming(State.PLAY, 0x0C, 0x0D, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + InventoryPackets.toServer(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + } + }); + } + }); + + // Advancements + registerOutgoing(State.PLAY, 0x57, 0x58, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.passthrough(Type.BOOLEAN); // Reset/clear + int size = wrapper.passthrough(Type.VAR_INT); // Mapping size + + for (int i = 0; i < size; i++) { + wrapper.passthrough(Type.STRING); // Identifier + + // Parent + if (wrapper.passthrough(Type.BOOLEAN)) + wrapper.passthrough(Type.STRING); + + // Display data + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.STRING); // Title + wrapper.passthrough(Type.STRING); // Description + InventoryPackets.toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Icon + wrapper.passthrough(Type.VAR_INT); // Frame type + int flags = wrapper.passthrough(Type.INT); // Flags + if ((flags & 1) != 0) + wrapper.passthrough(Type.STRING); // Background texture + wrapper.passthrough(Type.FLOAT); // X + wrapper.passthrough(Type.FLOAT); // Y + } + + wrapper.passthrough(Type.STRING_ARRAY); // Criteria + + int arrayLength = wrapper.passthrough(Type.VAR_INT); + for (int array = 0; array < arrayLength; array++) { + wrapper.passthrough(Type.STRING_ARRAY); // String array + } + } + } + }); + } + }); + + // Tags + registerOutgoing(State.PLAY, 0x5B, 0x5C, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + //TODO do the new (flower) tags have to be sent? + int blockTagsSize = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < blockTagsSize; i++) { + wrapper.passthrough(Type.STRING); + Integer[] blockIds = wrapper.passthrough(Type.VAR_INT_ARRAY); + for (int j = 0; j < blockIds.length; j++) { + blockIds[j] = getNewBlockId(blockIds[j]); + } + } + + int itemTagsSize = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < itemTagsSize; i++) { + wrapper.passthrough(Type.STRING); + Integer[] itemIds = wrapper.passthrough(Type.VAR_INT_ARRAY); + for (int j = 0; j < itemIds.length; j++) { + itemIds[j] = InventoryPackets.getNewItemId(itemIds[j]); + } + } + + int fluidTagsSize = wrapper.passthrough(Type.VAR_INT); // fluid tags + for (int i = 0; i < fluidTagsSize; i++) { + wrapper.passthrough(Type.STRING); + wrapper.passthrough(Type.VAR_INT_ARRAY); + } + + int entityTagsSize = wrapper.passthrough(Type.VAR_INT); // entity tags + for (int i = 0; i < entityTagsSize; i++) { + wrapper.passthrough(Type.STRING); + Integer[] entitIds = wrapper.passthrough(Type.VAR_INT_ARRAY); + for (int j = 0; j < entitIds.length; j++) { + entitIds[j] = EntityPackets.getNewEntityId(entitIds[j]); + } + } + } + }); + } + }); + + registerOutgoing(State.PLAY, 0x08, 0x09); registerOutgoing(State.PLAY, 0x09, 0x0A); - registerOutgoing(State.PLAY, 0x0A, 0x0B); registerOutgoing(State.PLAY, 0x0B, 0x0C); - registerOutgoing(State.PLAY, 0x0C, 0x0D); + registerOutgoing(State.PLAY, 0x0D, 0x0E); registerOutgoing(State.PLAY, 0x0E, 0x0F); registerOutgoing(State.PLAY, 0x0F, 0x10); @@ -64,9 +180,9 @@ public class Protocol1_15To1_14_4 extends Protocol { registerOutgoing(State.PLAY, 0x11, 0x12); registerOutgoing(State.PLAY, 0x12, 0x13); registerOutgoing(State.PLAY, 0x13, 0x14); - registerOutgoing(State.PLAY, 0x14, 0x15); + registerOutgoing(State.PLAY, 0x15, 0x16); - registerOutgoing(State.PLAY, 0x16, 0x17); + registerOutgoing(State.PLAY, 0x17, 0x18); registerOutgoing(State.PLAY, 0x18, 0x19); registerOutgoing(State.PLAY, 0x19, 0x1A); @@ -78,12 +194,12 @@ public class Protocol1_15To1_14_4 extends Protocol { registerOutgoing(State.PLAY, 0x1F, 0x20); registerOutgoing(State.PLAY, 0x20, 0x21); registerOutgoing(State.PLAY, 0x21, 0x22); - registerOutgoing(State.PLAY, 0x22, 0x23); - registerOutgoing(State.PLAY, 0x23, 0x24); + + registerOutgoing(State.PLAY, 0x24, 0x25); registerOutgoing(State.PLAY, 0x26, 0x27); - registerOutgoing(State.PLAY, 0x27, 0x28); + registerOutgoing(State.PLAY, 0x28, 0x29); registerOutgoing(State.PLAY, 0x29, 0x2A); registerOutgoing(State.PLAY, 0x2A, 0x2B); @@ -114,7 +230,7 @@ public class Protocol1_15To1_14_4 extends Protocol { registerOutgoing(State.PLAY, 0x44, 0x45); registerOutgoing(State.PLAY, 0x45, 0x46); - registerOutgoing(State.PLAY, 0x46, 0x47); + registerOutgoing(State.PLAY, 0x47, 0x48); registerOutgoing(State.PLAY, 0x48, 0x49); registerOutgoing(State.PLAY, 0x49, 0x4A); @@ -124,21 +240,30 @@ public class Protocol1_15To1_14_4 extends Protocol { registerOutgoing(State.PLAY, 0x4D, 0x4E); registerOutgoing(State.PLAY, 0x4E, 0x4F); registerOutgoing(State.PLAY, 0x4F, 0x50); - registerOutgoing(State.PLAY, 0x50, 0x51); + registerOutgoing(State.PLAY, 0x52, 0x53); registerOutgoing(State.PLAY, 0x53, 0x54); registerOutgoing(State.PLAY, 0x54, 0x55); registerOutgoing(State.PLAY, 0x55, 0x56); registerOutgoing(State.PLAY, 0x56, 0x57); - registerOutgoing(State.PLAY, 0x57, 0x58); + registerOutgoing(State.PLAY, 0x58, 0x59); registerOutgoing(State.PLAY, 0x59, 0x5A); - registerOutgoing(State.PLAY, 0x5A, 0x5B); - registerOutgoing(State.PLAY, 0x5B, 0x5C); + + registerOutgoing(State.PLAY, 0x5C, 0x08); } + public static int getNewBlockId(int id) { + int newId = MappingData.blockMappings.getNewBlock(id); + if (newId == -1) { + Via.getPlatform().getLogger().warning("Missing 1.15 block for 1.14 block " + id); + return 0; + } + return newId; + } + @Override public void init(UserConnection userConnection) { userConnection.put(new EntityTracker(userConnection)); diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java index 061ce3a0b..25dbe1e5f 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java @@ -1,82 +1,26 @@ package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.google.gson.JsonObject; import us.myles.ViaVersion.api.Via; -import us.myles.ViaVersion.util.GsonUtil; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Arrays; public class MappingData { - - public static SoundMappings soundMappings; + public static BiMap oldToNewItems = HashBiMap.create(); + public static us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.BlockMappings blockMappings; + public static us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.SoundMappings soundMappings; public static void init() { - JsonObject mapping1_14 = loadData("mapping-1.14.json"); - JsonObject mapping1_15 = loadData("mapping-1.15.json"); + JsonObject mapping1_14 = us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.loadData("mapping-1.14.json"); + JsonObject mapping1_15 = us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.loadData("mapping-1.15.json"); + // New blockstates have just been appended to the old, so mappings are not (yet) necessary. + + Via.getPlatform().getLogger().info("Loading 1.14 -> 1.15 block mapping..."); + blockMappings = new us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.BlockMappingsShortArray(mapping1_14.getAsJsonObject("blocks"), mapping1_15.getAsJsonObject("blocks")); + Via.getPlatform().getLogger().info("Loading 1.14 -> 1.15 item mapping..."); + us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.mapIdentifiers(oldToNewItems, mapping1_14.getAsJsonObject("items"), mapping1_15.getAsJsonObject("items")); Via.getPlatform().getLogger().info("Loading 1.14 -> 1.15 sound mapping..."); - soundMappings = new SoundMappingShortArray(mapping1_14.getAsJsonArray("sounds"), mapping1_15.getAsJsonArray("sounds")); - } - - private static JsonObject loadData(String name) { - InputStream stream = MappingData.class.getClassLoader().getResourceAsStream("assets/viaversion/data/" + name); - InputStreamReader reader = new InputStreamReader(stream); - try { - return GsonUtil.getGson().fromJson(reader, JsonObject.class); - } finally { - try { - reader.close(); - } catch (IOException ignored) { - // Ignored - } - } - } - - private static void mapIdentifiers(short[] output, JsonArray oldIdentifiers, JsonArray newIdentifiers) { - for (int i = 0; i < oldIdentifiers.size(); i++) { - JsonElement v = oldIdentifiers.get(i); - Integer index = findIndex(newIdentifiers, v.getAsString()); - if (index == null) { - if (Via.getManager().isDebug()) { - Via.getPlatform().getLogger().warning("No key for " + v + " :( "); - } - continue; - } - output[i] = index.shortValue(); - } - } - - private static Integer findIndex(JsonArray array, String value) { - for (int i = 0; i < array.size(); i++) { - JsonElement v = array.get(i); - if (v.getAsString().equals(value)) { - return i; - } - } - return null; - } - - public interface SoundMappings { - int getNewSound(int old); - } - - private static class SoundMappingShortArray implements SoundMappings { - private short[] oldToNew; - - private SoundMappingShortArray(JsonArray mapping1_14, JsonArray mapping1_15) { - oldToNew = new short[mapping1_14.size()]; - Arrays.fill(oldToNew, (short) -1); - mapIdentifiers(oldToNew, mapping1_14, mapping1_15); - } - - @Override - public int getNewSound(int old) { - return old >= 0 && old < oldToNew.length ? oldToNew[old] : -1; - } + soundMappings = new us.myles.ViaVersion.protocols.protocol1_14to1_13_2.data.MappingData.SoundMappingShortArray(mapping1_14.getAsJsonArray("sounds"), mapping1_15.getAsJsonArray("sounds")); } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java index d93c5415b..efa714838 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java @@ -1,12 +1,210 @@ package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets; +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.minecraft.item.Item; import us.myles.ViaVersion.api.protocol.Protocol; +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; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data.MappingData; public class InventoryPackets { public static void register(Protocol protocol) { - //TODO eeeeverything + // Window items packet + protocol.registerOutgoing(State.PLAY, 0x14, 0x15, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.UNSIGNED_BYTE); // 0 - Window ID + map(Type.FLAT_VAR_INT_ITEM_ARRAY); // 1 - Window Values + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + Item[] stacks = wrapper.get(Type.FLAT_VAR_INT_ITEM_ARRAY, 0); + for (Item stack : stacks) toClient(stack); + } + }); + } + }); + + // Trade list packet + protocol.registerOutgoing(State.PLAY, 0x27, 0x28, 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++) { + Item input = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + toClient(input); + + Item output = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + toClient(output); + + if (wrapper.passthrough(Type.BOOLEAN)) { // Has second item + // Second Item + Item second = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM); + toClient(second); + } + + wrapper.passthrough(Type.BOOLEAN); // Trade disabled + wrapper.passthrough(Type.INT); // Number of tools uses + wrapper.passthrough(Type.INT); // Maximum number of trade uses + + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.INT); + wrapper.passthrough(Type.FLOAT); + } + + wrapper.passthrough(Type.VAR_INT); + wrapper.passthrough(Type.VAR_INT); + wrapper.passthrough(Type.BOOLEAN); + } + }); + } + }); + + // Set slot packet + protocol.registerOutgoing(State.PLAY, 0x16, 0x17, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.BYTE); // 0 - Window ID + map(Type.SHORT); // 1 - Slot ID + map(Type.FLAT_VAR_INT_ITEM); // 2 - Slot Value + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + toClient(wrapper.get(Type.FLAT_VAR_INT_ITEM, 0)); + } + }); + } + }); + + // Entity Equipment Packet + protocol.registerOutgoing(State.PLAY, 0x46, 0x47, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Entity ID + map(Type.VAR_INT); // 1 - Slot ID + map(Type.FLAT_VAR_INT_ITEM); // 2 - Item + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + toClient(wrapper.get(Type.FLAT_VAR_INT_ITEM, 0)); + } + }); + } + }); + + // Declare Recipes + protocol.registerOutgoing(State.PLAY, 0x5A, 0x5B, new PacketRemapper() { + @Override + public void registerMap() { + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int size = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < size; i++) { + String type = wrapper.passthrough(Type.STRING).replace("minecraft:", ""); + String id = wrapper.passthrough(Type.STRING); + + switch (type) { + case "crafting_shapeless": { + wrapper.passthrough(Type.STRING); // Group + + int ingredientsNo = wrapper.passthrough(Type.VAR_INT); + for (int j = 0; j < ingredientsNo; j++) { + Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients + for (Item item : items) toClient(item); + } + toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result + + break; + } + case "crafting_shaped": { + int ingredientsNo = wrapper.passthrough(Type.VAR_INT) * wrapper.passthrough(Type.VAR_INT); + wrapper.passthrough(Type.STRING); // Group + + for (int j = 0; j < ingredientsNo; j++) { + Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients + for (Item item : items) toClient(item); + } + toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); // Result + + break; + } + case "blasting": + case "smoking": + case "campfire_cooking": + case "smelting": { + wrapper.passthrough(Type.STRING); // Group + + Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients + + for (Item item : items) toClient(item); + toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + wrapper.passthrough(Type.FLOAT); // EXP + + wrapper.passthrough(Type.VAR_INT); // Cooking time + + break; + } + case "stonecutting": { + wrapper.passthrough(Type.STRING); + Item[] items = wrapper.passthrough(Type.FLAT_VAR_INT_ITEM_ARRAY_VAR_INT); // Ingredients + for (Item item : items) toClient(item); + toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + break; + } + } + } + } + }); + } + }); + + // Click window packet + protocol.registerIncoming(State.PLAY, 0x09, 0x09, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.UNSIGNED_BYTE); // 0 - Window ID + map(Type.SHORT); // 1 - Slot + map(Type.BYTE); // 2 - Button + map(Type.SHORT); // 3 - Action number + map(Type.VAR_INT); // 4 - Mode + map(Type.FLAT_VAR_INT_ITEM); // 5 - Clicked Item + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + toServer(wrapper.get(Type.FLAT_VAR_INT_ITEM, 0)); + } + }); + } + }); + + // Creative Inventory Action + protocol.registerIncoming(State.PLAY, 0x26, 0x26, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.SHORT); // 0 - Slot + map(Type.FLAT_VAR_INT_ITEM); // 1 - Clicked Item + + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + toServer(wrapper.get(Type.FLAT_VAR_INT_ITEM, 0)); + } + }); + } + }); } public static void toClient(Item item) { @@ -20,10 +218,16 @@ public class InventoryPackets { } public static int getNewItemId(int id) { - return id; + Integer newId = MappingData.oldToNewItems.get(id); + if (newId == null) { + Via.getPlatform().getLogger().warning("Missing 1.15 item for 1.14 item " + id); + return 1; + } + return newId; } public static int getOldItemId(int id) { - return id; + Integer oldId = MappingData.oldToNewItems.inverse().get(id); + return oldId != null ? oldId : 1; } } diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java new file mode 100644 index 000000000..eb65b4d7e --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/WorldPackets.java @@ -0,0 +1,78 @@ +package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.packets; + +import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.protocol.Protocol; +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; +import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.packets.InventoryPackets; +import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4; + +public class WorldPackets { + + public static void register(Protocol protocol) { + // Block Action + protocol.registerOutgoing(State.PLAY, 0x0A, 0x0B, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.POSITION1_14); // Location + map(Type.UNSIGNED_BYTE); // Action id + map(Type.UNSIGNED_BYTE); // Action param + map(Type.VAR_INT); // Block id - /!\ NOT BLOCK STATE + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + wrapper.set(Type.VAR_INT, 0, Protocol1_15To1_14_4.getNewBlockId(wrapper.get(Type.VAR_INT, 0))); + } + }); + } + }); + + // Effect + protocol.registerOutgoing(State.PLAY, 0x22, 0x23, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); // Effect Id + map(Type.POSITION1_14); // Location + map(Type.INT); // Data + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int id = wrapper.get(Type.INT, 0); + if (id == 1010) { // Play record + int data = wrapper.get(Type.INT, 1); + wrapper.set(Type.INT, 1, InventoryPackets.getNewItemId(data)); + } + } + }); + } + }); + + // Spawn Particle + protocol.registerOutgoing(State.PLAY, 0x23, 0x24, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); // 0 - Particle ID + map(Type.BOOLEAN); // 1 - Long Distance + map(Type.FLOAT); // 2 - X + map(Type.FLOAT); // 3 - Y + map(Type.FLOAT); // 4 - Z + map(Type.FLOAT); // 5 - Offset X + map(Type.FLOAT); // 6 - Offset Y + map(Type.FLOAT); // 7 - Offset Z + map(Type.FLOAT); // 8 - Particle Data + map(Type.INT); // 9 - Particle Count + handler(new PacketHandler() { + @Override + public void handle(PacketWrapper wrapper) throws Exception { + int id = wrapper.get(Type.INT, 0); + if (id == 27) { + InventoryPackets.toClient(wrapper.passthrough(Type.FLAT_VAR_INT_ITEM)); + } + } + }); + } + }); + } +} diff --git a/common/src/main/resources/assets/viaversion/data/mapping-1.15.json b/common/src/main/resources/assets/viaversion/data/mapping-1.15.json index 79871f2f2..15a6448df 100644 --- a/common/src/main/resources/assets/viaversion/data/mapping-1.15.json +++ b/common/src/main/resources/assets/viaversion/data/mapping-1.15.json @@ -1,4 +1,1568 @@ { + "blocks": { + "0": "air", + "1": "stone", + "2": "granite", + "3": "polished_granite", + "4": "diorite", + "5": "polished_diorite", + "6": "andesite", + "7": "polished_andesite", + "8": "grass_block", + "9": "dirt", + "10": "coarse_dirt", + "11": "podzol", + "12": "cobblestone", + "13": "oak_planks", + "14": "spruce_planks", + "15": "birch_planks", + "16": "jungle_planks", + "17": "acacia_planks", + "18": "dark_oak_planks", + "19": "oak_sapling", + "20": "spruce_sapling", + "21": "birch_sapling", + "22": "jungle_sapling", + "23": "acacia_sapling", + "24": "dark_oak_sapling", + "25": "bedrock", + "26": "water", + "27": "lava", + "28": "sand", + "29": "red_sand", + "30": "gravel", + "31": "gold_ore", + "32": "iron_ore", + "33": "coal_ore", + "34": "oak_log", + "35": "spruce_log", + "36": "birch_log", + "37": "jungle_log", + "38": "acacia_log", + "39": "dark_oak_log", + "40": "stripped_spruce_log", + "41": "stripped_birch_log", + "42": "stripped_jungle_log", + "43": "stripped_acacia_log", + "44": "stripped_dark_oak_log", + "45": "stripped_oak_log", + "46": "oak_wood", + "47": "spruce_wood", + "48": "birch_wood", + "49": "jungle_wood", + "50": "acacia_wood", + "51": "dark_oak_wood", + "52": "stripped_oak_wood", + "53": "stripped_spruce_wood", + "54": "stripped_birch_wood", + "55": "stripped_jungle_wood", + "56": "stripped_acacia_wood", + "57": "stripped_dark_oak_wood", + "58": "oak_leaves", + "59": "spruce_leaves", + "60": "birch_leaves", + "61": "jungle_leaves", + "62": "acacia_leaves", + "63": "dark_oak_leaves", + "64": "sponge", + "65": "wet_sponge", + "66": "glass", + "67": "lapis_ore", + "68": "lapis_block", + "69": "dispenser", + "70": "sandstone", + "71": "chiseled_sandstone", + "72": "cut_sandstone", + "73": "note_block", + "74": "white_bed", + "75": "orange_bed", + "76": "magenta_bed", + "77": "light_blue_bed", + "78": "yellow_bed", + "79": "lime_bed", + "80": "pink_bed", + "81": "gray_bed", + "82": "light_gray_bed", + "83": "cyan_bed", + "84": "purple_bed", + "85": "blue_bed", + "86": "brown_bed", + "87": "green_bed", + "88": "red_bed", + "89": "black_bed", + "90": "powered_rail", + "91": "detector_rail", + "92": "sticky_piston", + "93": "cobweb", + "94": "grass", + "95": "fern", + "96": "dead_bush", + "97": "seagrass", + "98": "tall_seagrass", + "99": "piston", + "100": "piston_head", + "101": "white_wool", + "102": "orange_wool", + "103": "magenta_wool", + "104": "light_blue_wool", + "105": "yellow_wool", + "106": "lime_wool", + "107": "pink_wool", + "108": "gray_wool", + "109": "light_gray_wool", + "110": "cyan_wool", + "111": "purple_wool", + "112": "blue_wool", + "113": "brown_wool", + "114": "green_wool", + "115": "red_wool", + "116": "black_wool", + "117": "moving_piston", + "118": "dandelion", + "119": "poppy", + "120": "blue_orchid", + "121": "allium", + "122": "azure_bluet", + "123": "red_tulip", + "124": "orange_tulip", + "125": "white_tulip", + "126": "pink_tulip", + "127": "oxeye_daisy", + "128": "cornflower", + "129": "wither_rose", + "130": "lily_of_the_valley", + "131": "brown_mushroom", + "132": "red_mushroom", + "133": "gold_block", + "134": "iron_block", + "135": "bricks", + "136": "tnt", + "137": "bookshelf", + "138": "mossy_cobblestone", + "139": "obsidian", + "140": "torch", + "141": "wall_torch", + "142": "fire", + "143": "spawner", + "144": "oak_stairs", + "145": "chest", + "146": "redstone_wire", + "147": "diamond_ore", + "148": "diamond_block", + "149": "crafting_table", + "150": "wheat", + "151": "farmland", + "152": "furnace", + "153": "oak_sign", + "154": "spruce_sign", + "155": "birch_sign", + "156": "acacia_sign", + "157": "jungle_sign", + "158": "dark_oak_sign", + "159": "oak_door", + "160": "ladder", + "161": "rail", + "162": "cobblestone_stairs", + "163": "oak_wall_sign", + "164": "spruce_wall_sign", + "165": "birch_wall_sign", + "166": "acacia_wall_sign", + "167": "jungle_wall_sign", + "168": "dark_oak_wall_sign", + "169": "lever", + "170": "stone_pressure_plate", + "171": "iron_door", + "172": "oak_pressure_plate", + "173": "spruce_pressure_plate", + "174": "birch_pressure_plate", + "175": "jungle_pressure_plate", + "176": "acacia_pressure_plate", + "177": "dark_oak_pressure_plate", + "178": "redstone_ore", + "179": "redstone_torch", + "180": "redstone_wall_torch", + "181": "stone_button", + "182": "snow", + "183": "ice", + "184": "snow_block", + "185": "cactus", + "186": "clay", + "187": "sugar_cane", + "188": "jukebox", + "189": "oak_fence", + "190": "pumpkin", + "191": "netherrack", + "192": "soul_sand", + "193": "glowstone", + "194": "nether_portal", + "195": "carved_pumpkin", + "196": "jack_o_lantern", + "197": "cake", + "198": "repeater", + "199": "white_stained_glass", + "200": "orange_stained_glass", + "201": "magenta_stained_glass", + "202": "light_blue_stained_glass", + "203": "yellow_stained_glass", + "204": "lime_stained_glass", + "205": "pink_stained_glass", + "206": "gray_stained_glass", + "207": "light_gray_stained_glass", + "208": "cyan_stained_glass", + "209": "purple_stained_glass", + "210": "blue_stained_glass", + "211": "brown_stained_glass", + "212": "green_stained_glass", + "213": "red_stained_glass", + "214": "black_stained_glass", + "215": "oak_trapdoor", + "216": "spruce_trapdoor", + "217": "birch_trapdoor", + "218": "jungle_trapdoor", + "219": "acacia_trapdoor", + "220": "dark_oak_trapdoor", + "221": "stone_bricks", + "222": "mossy_stone_bricks", + "223": "cracked_stone_bricks", + "224": "chiseled_stone_bricks", + "225": "infested_stone", + "226": "infested_cobblestone", + "227": "infested_stone_bricks", + "228": "infested_mossy_stone_bricks", + "229": "infested_cracked_stone_bricks", + "230": "infested_chiseled_stone_bricks", + "231": "brown_mushroom_block", + "232": "red_mushroom_block", + "233": "mushroom_stem", + "234": "iron_bars", + "235": "glass_pane", + "236": "melon", + "237": "attached_pumpkin_stem", + "238": "attached_melon_stem", + "239": "pumpkin_stem", + "240": "melon_stem", + "241": "vine", + "242": "oak_fence_gate", + "243": "brick_stairs", + "244": "stone_brick_stairs", + "245": "mycelium", + "246": "lily_pad", + "247": "nether_bricks", + "248": "nether_brick_fence", + "249": "nether_brick_stairs", + "250": "nether_wart", + "251": "enchanting_table", + "252": "brewing_stand", + "253": "cauldron", + "254": "end_portal", + "255": "end_portal_frame", + "256": "end_stone", + "257": "dragon_egg", + "258": "redstone_lamp", + "259": "cocoa", + "260": "sandstone_stairs", + "261": "emerald_ore", + "262": "ender_chest", + "263": "tripwire_hook", + "264": "tripwire", + "265": "emerald_block", + "266": "spruce_stairs", + "267": "birch_stairs", + "268": "jungle_stairs", + "269": "command_block", + "270": "beacon", + "271": "cobblestone_wall", + "272": "mossy_cobblestone_wall", + "273": "flower_pot", + "274": "potted_oak_sapling", + "275": "potted_spruce_sapling", + "276": "potted_birch_sapling", + "277": "potted_jungle_sapling", + "278": "potted_acacia_sapling", + "279": "potted_dark_oak_sapling", + "280": "potted_fern", + "281": "potted_dandelion", + "282": "potted_poppy", + "283": "potted_blue_orchid", + "284": "potted_allium", + "285": "potted_azure_bluet", + "286": "potted_red_tulip", + "287": "potted_orange_tulip", + "288": "potted_white_tulip", + "289": "potted_pink_tulip", + "290": "potted_oxeye_daisy", + "291": "potted_cornflower", + "292": "potted_lily_of_the_valley", + "293": "potted_wither_rose", + "294": "potted_red_mushroom", + "295": "potted_brown_mushroom", + "296": "potted_dead_bush", + "297": "potted_cactus", + "298": "carrots", + "299": "potatoes", + "300": "oak_button", + "301": "spruce_button", + "302": "birch_button", + "303": "jungle_button", + "304": "acacia_button", + "305": "dark_oak_button", + "306": "skeleton_skull", + "307": "skeleton_wall_skull", + "308": "wither_skeleton_skull", + "309": "wither_skeleton_wall_skull", + "310": "zombie_head", + "311": "zombie_wall_head", + "312": "player_head", + "313": "player_wall_head", + "314": "creeper_head", + "315": "creeper_wall_head", + "316": "dragon_head", + "317": "dragon_wall_head", + "318": "anvil", + "319": "chipped_anvil", + "320": "damaged_anvil", + "321": "trapped_chest", + "322": "light_weighted_pressure_plate", + "323": "heavy_weighted_pressure_plate", + "324": "comparator", + "325": "daylight_detector", + "326": "redstone_block", + "327": "nether_quartz_ore", + "328": "hopper", + "329": "quartz_block", + "330": "chiseled_quartz_block", + "331": "quartz_pillar", + "332": "quartz_stairs", + "333": "activator_rail", + "334": "dropper", + "335": "white_terracotta", + "336": "orange_terracotta", + "337": "magenta_terracotta", + "338": "light_blue_terracotta", + "339": "yellow_terracotta", + "340": "lime_terracotta", + "341": "pink_terracotta", + "342": "gray_terracotta", + "343": "light_gray_terracotta", + "344": "cyan_terracotta", + "345": "purple_terracotta", + "346": "blue_terracotta", + "347": "brown_terracotta", + "348": "green_terracotta", + "349": "red_terracotta", + "350": "black_terracotta", + "351": "white_stained_glass_pane", + "352": "orange_stained_glass_pane", + "353": "magenta_stained_glass_pane", + "354": "light_blue_stained_glass_pane", + "355": "yellow_stained_glass_pane", + "356": "lime_stained_glass_pane", + "357": "pink_stained_glass_pane", + "358": "gray_stained_glass_pane", + "359": "light_gray_stained_glass_pane", + "360": "cyan_stained_glass_pane", + "361": "purple_stained_glass_pane", + "362": "blue_stained_glass_pane", + "363": "brown_stained_glass_pane", + "364": "green_stained_glass_pane", + "365": "red_stained_glass_pane", + "366": "black_stained_glass_pane", + "367": "acacia_stairs", + "368": "dark_oak_stairs", + "369": "slime_block", + "370": "barrier", + "371": "iron_trapdoor", + "372": "prismarine", + "373": "prismarine_bricks", + "374": "dark_prismarine", + "375": "prismarine_stairs", + "376": "prismarine_brick_stairs", + "377": "dark_prismarine_stairs", + "378": "prismarine_slab", + "379": "prismarine_brick_slab", + "380": "dark_prismarine_slab", + "381": "sea_lantern", + "382": "hay_block", + "383": "white_carpet", + "384": "orange_carpet", + "385": "magenta_carpet", + "386": "light_blue_carpet", + "387": "yellow_carpet", + "388": "lime_carpet", + "389": "pink_carpet", + "390": "gray_carpet", + "391": "light_gray_carpet", + "392": "cyan_carpet", + "393": "purple_carpet", + "394": "blue_carpet", + "395": "brown_carpet", + "396": "green_carpet", + "397": "red_carpet", + "398": "black_carpet", + "399": "terracotta", + "400": "coal_block", + "401": "packed_ice", + "402": "sunflower", + "403": "lilac", + "404": "rose_bush", + "405": "peony", + "406": "tall_grass", + "407": "large_fern", + "408": "white_banner", + "409": "orange_banner", + "410": "magenta_banner", + "411": "light_blue_banner", + "412": "yellow_banner", + "413": "lime_banner", + "414": "pink_banner", + "415": "gray_banner", + "416": "light_gray_banner", + "417": "cyan_banner", + "418": "purple_banner", + "419": "blue_banner", + "420": "brown_banner", + "421": "green_banner", + "422": "red_banner", + "423": "black_banner", + "424": "white_wall_banner", + "425": "orange_wall_banner", + "426": "magenta_wall_banner", + "427": "light_blue_wall_banner", + "428": "yellow_wall_banner", + "429": "lime_wall_banner", + "430": "pink_wall_banner", + "431": "gray_wall_banner", + "432": "light_gray_wall_banner", + "433": "cyan_wall_banner", + "434": "purple_wall_banner", + "435": "blue_wall_banner", + "436": "brown_wall_banner", + "437": "green_wall_banner", + "438": "red_wall_banner", + "439": "black_wall_banner", + "440": "red_sandstone", + "441": "chiseled_red_sandstone", + "442": "cut_red_sandstone", + "443": "red_sandstone_stairs", + "444": "oak_slab", + "445": "spruce_slab", + "446": "birch_slab", + "447": "jungle_slab", + "448": "acacia_slab", + "449": "dark_oak_slab", + "450": "stone_slab", + "451": "smooth_stone_slab", + "452": "sandstone_slab", + "453": "cut_sandstone_slab", + "454": "petrified_oak_slab", + "455": "cobblestone_slab", + "456": "brick_slab", + "457": "stone_brick_slab", + "458": "nether_brick_slab", + "459": "quartz_slab", + "460": "red_sandstone_slab", + "461": "cut_red_sandstone_slab", + "462": "purpur_slab", + "463": "smooth_stone", + "464": "smooth_sandstone", + "465": "smooth_quartz", + "466": "smooth_red_sandstone", + "467": "spruce_fence_gate", + "468": "birch_fence_gate", + "469": "jungle_fence_gate", + "470": "acacia_fence_gate", + "471": "dark_oak_fence_gate", + "472": "spruce_fence", + "473": "birch_fence", + "474": "jungle_fence", + "475": "acacia_fence", + "476": "dark_oak_fence", + "477": "spruce_door", + "478": "birch_door", + "479": "jungle_door", + "480": "acacia_door", + "481": "dark_oak_door", + "482": "end_rod", + "483": "chorus_plant", + "484": "chorus_flower", + "485": "purpur_block", + "486": "purpur_pillar", + "487": "purpur_stairs", + "488": "end_stone_bricks", + "489": "beetroots", + "490": "grass_path", + "491": "end_gateway", + "492": "repeating_command_block", + "493": "chain_command_block", + "494": "frosted_ice", + "495": "magma_block", + "496": "nether_wart_block", + "497": "red_nether_bricks", + "498": "bone_block", + "499": "structure_void", + "500": "observer", + "501": "shulker_box", + "502": "white_shulker_box", + "503": "orange_shulker_box", + "504": "magenta_shulker_box", + "505": "light_blue_shulker_box", + "506": "yellow_shulker_box", + "507": "lime_shulker_box", + "508": "pink_shulker_box", + "509": "gray_shulker_box", + "510": "light_gray_shulker_box", + "511": "cyan_shulker_box", + "512": "purple_shulker_box", + "513": "blue_shulker_box", + "514": "brown_shulker_box", + "515": "green_shulker_box", + "516": "red_shulker_box", + "517": "black_shulker_box", + "518": "white_glazed_terracotta", + "519": "orange_glazed_terracotta", + "520": "magenta_glazed_terracotta", + "521": "light_blue_glazed_terracotta", + "522": "yellow_glazed_terracotta", + "523": "lime_glazed_terracotta", + "524": "pink_glazed_terracotta", + "525": "gray_glazed_terracotta", + "526": "light_gray_glazed_terracotta", + "527": "cyan_glazed_terracotta", + "528": "purple_glazed_terracotta", + "529": "blue_glazed_terracotta", + "530": "brown_glazed_terracotta", + "531": "green_glazed_terracotta", + "532": "red_glazed_terracotta", + "533": "black_glazed_terracotta", + "534": "white_concrete", + "535": "orange_concrete", + "536": "magenta_concrete", + "537": "light_blue_concrete", + "538": "yellow_concrete", + "539": "lime_concrete", + "540": "pink_concrete", + "541": "gray_concrete", + "542": "light_gray_concrete", + "543": "cyan_concrete", + "544": "purple_concrete", + "545": "blue_concrete", + "546": "brown_concrete", + "547": "green_concrete", + "548": "red_concrete", + "549": "black_concrete", + "550": "white_concrete_powder", + "551": "orange_concrete_powder", + "552": "magenta_concrete_powder", + "553": "light_blue_concrete_powder", + "554": "yellow_concrete_powder", + "555": "lime_concrete_powder", + "556": "pink_concrete_powder", + "557": "gray_concrete_powder", + "558": "light_gray_concrete_powder", + "559": "cyan_concrete_powder", + "560": "purple_concrete_powder", + "561": "blue_concrete_powder", + "562": "brown_concrete_powder", + "563": "green_concrete_powder", + "564": "red_concrete_powder", + "565": "black_concrete_powder", + "566": "kelp", + "567": "kelp_plant", + "568": "dried_kelp_block", + "569": "turtle_egg", + "570": "dead_tube_coral_block", + "571": "dead_brain_coral_block", + "572": "dead_bubble_coral_block", + "573": "dead_fire_coral_block", + "574": "dead_horn_coral_block", + "575": "tube_coral_block", + "576": "brain_coral_block", + "577": "bubble_coral_block", + "578": "fire_coral_block", + "579": "horn_coral_block", + "580": "dead_tube_coral", + "581": "dead_brain_coral", + "582": "dead_bubble_coral", + "583": "dead_fire_coral", + "584": "dead_horn_coral", + "585": "tube_coral", + "586": "brain_coral", + "587": "bubble_coral", + "588": "fire_coral", + "589": "horn_coral", + "590": "dead_tube_coral_fan", + "591": "dead_brain_coral_fan", + "592": "dead_bubble_coral_fan", + "593": "dead_fire_coral_fan", + "594": "dead_horn_coral_fan", + "595": "tube_coral_fan", + "596": "brain_coral_fan", + "597": "bubble_coral_fan", + "598": "fire_coral_fan", + "599": "horn_coral_fan", + "600": "dead_tube_coral_wall_fan", + "601": "dead_brain_coral_wall_fan", + "602": "dead_bubble_coral_wall_fan", + "603": "dead_fire_coral_wall_fan", + "604": "dead_horn_coral_wall_fan", + "605": "tube_coral_wall_fan", + "606": "brain_coral_wall_fan", + "607": "bubble_coral_wall_fan", + "608": "fire_coral_wall_fan", + "609": "horn_coral_wall_fan", + "610": "sea_pickle", + "611": "blue_ice", + "612": "conduit", + "613": "bamboo_sapling", + "614": "bamboo", + "615": "potted_bamboo", + "616": "void_air", + "617": "cave_air", + "618": "bubble_column", + "619": "polished_granite_stairs", + "620": "smooth_red_sandstone_stairs", + "621": "mossy_stone_brick_stairs", + "622": "polished_diorite_stairs", + "623": "mossy_cobblestone_stairs", + "624": "end_stone_brick_stairs", + "625": "stone_stairs", + "626": "smooth_sandstone_stairs", + "627": "smooth_quartz_stairs", + "628": "granite_stairs", + "629": "andesite_stairs", + "630": "red_nether_brick_stairs", + "631": "polished_andesite_stairs", + "632": "diorite_stairs", + "633": "polished_granite_slab", + "634": "smooth_red_sandstone_slab", + "635": "mossy_stone_brick_slab", + "636": "polished_diorite_slab", + "637": "mossy_cobblestone_slab", + "638": "end_stone_brick_slab", + "639": "smooth_sandstone_slab", + "640": "smooth_quartz_slab", + "641": "granite_slab", + "642": "andesite_slab", + "643": "red_nether_brick_slab", + "644": "polished_andesite_slab", + "645": "diorite_slab", + "646": "brick_wall", + "647": "prismarine_wall", + "648": "red_sandstone_wall", + "649": "mossy_stone_brick_wall", + "650": "granite_wall", + "651": "stone_brick_wall", + "652": "nether_brick_wall", + "653": "andesite_wall", + "654": "red_nether_brick_wall", + "655": "sandstone_wall", + "656": "end_stone_brick_wall", + "657": "diorite_wall", + "658": "scaffolding", + "659": "loom", + "660": "barrel", + "661": "smoker", + "662": "blast_furnace", + "663": "cartography_table", + "664": "fletching_table", + "665": "grindstone", + "666": "lectern", + "667": "smithing_table", + "668": "stonecutter", + "669": "bell", + "670": "lantern", + "671": "campfire", + "672": "sweet_berry_bush", + "673": "structure_block", + "674": "jigsaw", + "675": "composter", + "676": "bee_nest", + "677": "bee_hive" + }, + "items": { + "0": "minecraft:air", + "1": "minecraft:stone", + "2": "minecraft:granite", + "3": "minecraft:polished_granite", + "4": "minecraft:diorite", + "5": "minecraft:polished_diorite", + "6": "minecraft:andesite", + "7": "minecraft:polished_andesite", + "8": "minecraft:grass_block", + "9": "minecraft:dirt", + "10": "minecraft:coarse_dirt", + "11": "minecraft:podzol", + "12": "minecraft:cobblestone", + "13": "minecraft:oak_planks", + "14": "minecraft:spruce_planks", + "15": "minecraft:birch_planks", + "16": "minecraft:jungle_planks", + "17": "minecraft:acacia_planks", + "18": "minecraft:dark_oak_planks", + "19": "minecraft:oak_sapling", + "20": "minecraft:spruce_sapling", + "21": "minecraft:birch_sapling", + "22": "minecraft:jungle_sapling", + "23": "minecraft:acacia_sapling", + "24": "minecraft:dark_oak_sapling", + "25": "minecraft:bedrock", + "26": "minecraft:sand", + "27": "minecraft:red_sand", + "28": "minecraft:gravel", + "29": "minecraft:gold_ore", + "30": "minecraft:iron_ore", + "31": "minecraft:coal_ore", + "32": "minecraft:oak_log", + "33": "minecraft:spruce_log", + "34": "minecraft:birch_log", + "35": "minecraft:jungle_log", + "36": "minecraft:acacia_log", + "37": "minecraft:dark_oak_log", + "38": "minecraft:stripped_oak_log", + "39": "minecraft:stripped_spruce_log", + "40": "minecraft:stripped_birch_log", + "41": "minecraft:stripped_jungle_log", + "42": "minecraft:stripped_acacia_log", + "43": "minecraft:stripped_dark_oak_log", + "44": "minecraft:stripped_oak_wood", + "45": "minecraft:stripped_spruce_wood", + "46": "minecraft:stripped_birch_wood", + "47": "minecraft:stripped_jungle_wood", + "48": "minecraft:stripped_acacia_wood", + "49": "minecraft:stripped_dark_oak_wood", + "50": "minecraft:oak_wood", + "51": "minecraft:spruce_wood", + "52": "minecraft:birch_wood", + "53": "minecraft:jungle_wood", + "54": "minecraft:acacia_wood", + "55": "minecraft:dark_oak_wood", + "56": "minecraft:oak_leaves", + "57": "minecraft:spruce_leaves", + "58": "minecraft:birch_leaves", + "59": "minecraft:jungle_leaves", + "60": "minecraft:acacia_leaves", + "61": "minecraft:dark_oak_leaves", + "62": "minecraft:sponge", + "63": "minecraft:wet_sponge", + "64": "minecraft:glass", + "65": "minecraft:lapis_ore", + "66": "minecraft:lapis_block", + "67": "minecraft:dispenser", + "68": "minecraft:sandstone", + "69": "minecraft:chiseled_sandstone", + "70": "minecraft:cut_sandstone", + "71": "minecraft:note_block", + "72": "minecraft:powered_rail", + "73": "minecraft:detector_rail", + "74": "minecraft:sticky_piston", + "75": "minecraft:cobweb", + "76": "minecraft:grass", + "77": "minecraft:fern", + "78": "minecraft:dead_bush", + "79": "minecraft:seagrass", + "80": "minecraft:sea_pickle", + "81": "minecraft:piston", + "82": "minecraft:white_wool", + "83": "minecraft:orange_wool", + "84": "minecraft:magenta_wool", + "85": "minecraft:light_blue_wool", + "86": "minecraft:yellow_wool", + "87": "minecraft:lime_wool", + "88": "minecraft:pink_wool", + "89": "minecraft:gray_wool", + "90": "minecraft:light_gray_wool", + "91": "minecraft:cyan_wool", + "92": "minecraft:purple_wool", + "93": "minecraft:blue_wool", + "94": "minecraft:brown_wool", + "95": "minecraft:green_wool", + "96": "minecraft:red_wool", + "97": "minecraft:black_wool", + "98": "minecraft:dandelion", + "99": "minecraft:poppy", + "100": "minecraft:blue_orchid", + "101": "minecraft:allium", + "102": "minecraft:azure_bluet", + "103": "minecraft:red_tulip", + "104": "minecraft:orange_tulip", + "105": "minecraft:white_tulip", + "106": "minecraft:pink_tulip", + "107": "minecraft:oxeye_daisy", + "108": "minecraft:cornflower", + "109": "minecraft:lily_of_the_valley", + "110": "minecraft:wither_rose", + "111": "minecraft:brown_mushroom", + "112": "minecraft:red_mushroom", + "113": "minecraft:gold_block", + "114": "minecraft:iron_block", + "115": "minecraft:oak_slab", + "116": "minecraft:spruce_slab", + "117": "minecraft:birch_slab", + "118": "minecraft:jungle_slab", + "119": "minecraft:acacia_slab", + "120": "minecraft:dark_oak_slab", + "121": "minecraft:stone_slab", + "122": "minecraft:smooth_stone_slab", + "123": "minecraft:sandstone_slab", + "124": "minecraft:cut_sandstone_slab", + "125": "minecraft:petrified_oak_slab", + "126": "minecraft:cobblestone_slab", + "127": "minecraft:brick_slab", + "128": "minecraft:stone_brick_slab", + "129": "minecraft:nether_brick_slab", + "130": "minecraft:quartz_slab", + "131": "minecraft:red_sandstone_slab", + "132": "minecraft:cut_red_sandstone_slab", + "133": "minecraft:purpur_slab", + "134": "minecraft:prismarine_slab", + "135": "minecraft:prismarine_brick_slab", + "136": "minecraft:dark_prismarine_slab", + "137": "minecraft:smooth_quartz", + "138": "minecraft:smooth_red_sandstone", + "139": "minecraft:smooth_sandstone", + "140": "minecraft:smooth_stone", + "141": "minecraft:bricks", + "142": "minecraft:tnt", + "143": "minecraft:bookshelf", + "144": "minecraft:mossy_cobblestone", + "145": "minecraft:obsidian", + "146": "minecraft:torch", + "147": "minecraft:end_rod", + "148": "minecraft:chorus_plant", + "149": "minecraft:chorus_flower", + "150": "minecraft:purpur_block", + "151": "minecraft:purpur_pillar", + "152": "minecraft:purpur_stairs", + "153": "minecraft:spawner", + "154": "minecraft:oak_stairs", + "155": "minecraft:chest", + "156": "minecraft:diamond_ore", + "157": "minecraft:diamond_block", + "158": "minecraft:crafting_table", + "159": "minecraft:farmland", + "160": "minecraft:furnace", + "161": "minecraft:ladder", + "162": "minecraft:rail", + "163": "minecraft:cobblestone_stairs", + "164": "minecraft:lever", + "165": "minecraft:stone_pressure_plate", + "166": "minecraft:oak_pressure_plate", + "167": "minecraft:spruce_pressure_plate", + "168": "minecraft:birch_pressure_plate", + "169": "minecraft:jungle_pressure_plate", + "170": "minecraft:acacia_pressure_plate", + "171": "minecraft:dark_oak_pressure_plate", + "172": "minecraft:redstone_ore", + "173": "minecraft:redstone_torch", + "174": "minecraft:stone_button", + "175": "minecraft:snow", + "176": "minecraft:ice", + "177": "minecraft:snow_block", + "178": "minecraft:cactus", + "179": "minecraft:clay", + "180": "minecraft:jukebox", + "181": "minecraft:oak_fence", + "182": "minecraft:spruce_fence", + "183": "minecraft:birch_fence", + "184": "minecraft:jungle_fence", + "185": "minecraft:acacia_fence", + "186": "minecraft:dark_oak_fence", + "187": "minecraft:pumpkin", + "188": "minecraft:carved_pumpkin", + "189": "minecraft:netherrack", + "190": "minecraft:soul_sand", + "191": "minecraft:glowstone", + "192": "minecraft:jack_o_lantern", + "193": "minecraft:oak_trapdoor", + "194": "minecraft:spruce_trapdoor", + "195": "minecraft:birch_trapdoor", + "196": "minecraft:jungle_trapdoor", + "197": "minecraft:acacia_trapdoor", + "198": "minecraft:dark_oak_trapdoor", + "199": "minecraft:infested_stone", + "200": "minecraft:infested_cobblestone", + "201": "minecraft:infested_stone_bricks", + "202": "minecraft:infested_mossy_stone_bricks", + "203": "minecraft:infested_cracked_stone_bricks", + "204": "minecraft:infested_chiseled_stone_bricks", + "205": "minecraft:stone_bricks", + "206": "minecraft:mossy_stone_bricks", + "207": "minecraft:cracked_stone_bricks", + "208": "minecraft:chiseled_stone_bricks", + "209": "minecraft:brown_mushroom_block", + "210": "minecraft:red_mushroom_block", + "211": "minecraft:mushroom_stem", + "212": "minecraft:iron_bars", + "213": "minecraft:glass_pane", + "214": "minecraft:melon", + "215": "minecraft:vine", + "216": "minecraft:oak_fence_gate", + "217": "minecraft:spruce_fence_gate", + "218": "minecraft:birch_fence_gate", + "219": "minecraft:jungle_fence_gate", + "220": "minecraft:acacia_fence_gate", + "221": "minecraft:dark_oak_fence_gate", + "222": "minecraft:brick_stairs", + "223": "minecraft:stone_brick_stairs", + "224": "minecraft:mycelium", + "225": "minecraft:lily_pad", + "226": "minecraft:nether_bricks", + "227": "minecraft:nether_brick_fence", + "228": "minecraft:nether_brick_stairs", + "229": "minecraft:enchanting_table", + "230": "minecraft:end_portal_frame", + "231": "minecraft:end_stone", + "232": "minecraft:end_stone_bricks", + "233": "minecraft:dragon_egg", + "234": "minecraft:redstone_lamp", + "235": "minecraft:sandstone_stairs", + "236": "minecraft:emerald_ore", + "237": "minecraft:ender_chest", + "238": "minecraft:tripwire_hook", + "239": "minecraft:emerald_block", + "240": "minecraft:spruce_stairs", + "241": "minecraft:birch_stairs", + "242": "minecraft:jungle_stairs", + "243": "minecraft:command_block", + "244": "minecraft:beacon", + "245": "minecraft:cobblestone_wall", + "246": "minecraft:mossy_cobblestone_wall", + "247": "minecraft:brick_wall", + "248": "minecraft:prismarine_wall", + "249": "minecraft:red_sandstone_wall", + "250": "minecraft:mossy_stone_brick_wall", + "251": "minecraft:granite_wall", + "252": "minecraft:stone_brick_wall", + "253": "minecraft:nether_brick_wall", + "254": "minecraft:andesite_wall", + "255": "minecraft:red_nether_brick_wall", + "256": "minecraft:sandstone_wall", + "257": "minecraft:end_stone_brick_wall", + "258": "minecraft:diorite_wall", + "259": "minecraft:oak_button", + "260": "minecraft:spruce_button", + "261": "minecraft:birch_button", + "262": "minecraft:jungle_button", + "263": "minecraft:acacia_button", + "264": "minecraft:dark_oak_button", + "265": "minecraft:anvil", + "266": "minecraft:chipped_anvil", + "267": "minecraft:damaged_anvil", + "268": "minecraft:trapped_chest", + "269": "minecraft:light_weighted_pressure_plate", + "270": "minecraft:heavy_weighted_pressure_plate", + "271": "minecraft:daylight_detector", + "272": "minecraft:redstone_block", + "273": "minecraft:nether_quartz_ore", + "274": "minecraft:hopper", + "275": "minecraft:chiseled_quartz_block", + "276": "minecraft:quartz_block", + "277": "minecraft:quartz_pillar", + "278": "minecraft:quartz_stairs", + "279": "minecraft:activator_rail", + "280": "minecraft:dropper", + "281": "minecraft:white_terracotta", + "282": "minecraft:orange_terracotta", + "283": "minecraft:magenta_terracotta", + "284": "minecraft:light_blue_terracotta", + "285": "minecraft:yellow_terracotta", + "286": "minecraft:lime_terracotta", + "287": "minecraft:pink_terracotta", + "288": "minecraft:gray_terracotta", + "289": "minecraft:light_gray_terracotta", + "290": "minecraft:cyan_terracotta", + "291": "minecraft:purple_terracotta", + "292": "minecraft:blue_terracotta", + "293": "minecraft:brown_terracotta", + "294": "minecraft:green_terracotta", + "295": "minecraft:red_terracotta", + "296": "minecraft:black_terracotta", + "297": "minecraft:barrier", + "298": "minecraft:iron_trapdoor", + "299": "minecraft:hay_block", + "300": "minecraft:white_carpet", + "301": "minecraft:orange_carpet", + "302": "minecraft:magenta_carpet", + "303": "minecraft:light_blue_carpet", + "304": "minecraft:yellow_carpet", + "305": "minecraft:lime_carpet", + "306": "minecraft:pink_carpet", + "307": "minecraft:gray_carpet", + "308": "minecraft:light_gray_carpet", + "309": "minecraft:cyan_carpet", + "310": "minecraft:purple_carpet", + "311": "minecraft:blue_carpet", + "312": "minecraft:brown_carpet", + "313": "minecraft:green_carpet", + "314": "minecraft:red_carpet", + "315": "minecraft:black_carpet", + "316": "minecraft:terracotta", + "317": "minecraft:coal_block", + "318": "minecraft:packed_ice", + "319": "minecraft:acacia_stairs", + "320": "minecraft:dark_oak_stairs", + "321": "minecraft:slime_block", + "322": "minecraft:grass_path", + "323": "minecraft:sunflower", + "324": "minecraft:lilac", + "325": "minecraft:rose_bush", + "326": "minecraft:peony", + "327": "minecraft:tall_grass", + "328": "minecraft:large_fern", + "329": "minecraft:white_stained_glass", + "330": "minecraft:orange_stained_glass", + "331": "minecraft:magenta_stained_glass", + "332": "minecraft:light_blue_stained_glass", + "333": "minecraft:yellow_stained_glass", + "334": "minecraft:lime_stained_glass", + "335": "minecraft:pink_stained_glass", + "336": "minecraft:gray_stained_glass", + "337": "minecraft:light_gray_stained_glass", + "338": "minecraft:cyan_stained_glass", + "339": "minecraft:purple_stained_glass", + "340": "minecraft:blue_stained_glass", + "341": "minecraft:brown_stained_glass", + "342": "minecraft:green_stained_glass", + "343": "minecraft:red_stained_glass", + "344": "minecraft:black_stained_glass", + "345": "minecraft:white_stained_glass_pane", + "346": "minecraft:orange_stained_glass_pane", + "347": "minecraft:magenta_stained_glass_pane", + "348": "minecraft:light_blue_stained_glass_pane", + "349": "minecraft:yellow_stained_glass_pane", + "350": "minecraft:lime_stained_glass_pane", + "351": "minecraft:pink_stained_glass_pane", + "352": "minecraft:gray_stained_glass_pane", + "353": "minecraft:light_gray_stained_glass_pane", + "354": "minecraft:cyan_stained_glass_pane", + "355": "minecraft:purple_stained_glass_pane", + "356": "minecraft:blue_stained_glass_pane", + "357": "minecraft:brown_stained_glass_pane", + "358": "minecraft:green_stained_glass_pane", + "359": "minecraft:red_stained_glass_pane", + "360": "minecraft:black_stained_glass_pane", + "361": "minecraft:prismarine", + "362": "minecraft:prismarine_bricks", + "363": "minecraft:dark_prismarine", + "364": "minecraft:prismarine_stairs", + "365": "minecraft:prismarine_brick_stairs", + "366": "minecraft:dark_prismarine_stairs", + "367": "minecraft:sea_lantern", + "368": "minecraft:red_sandstone", + "369": "minecraft:chiseled_red_sandstone", + "370": "minecraft:cut_red_sandstone", + "371": "minecraft:red_sandstone_stairs", + "372": "minecraft:repeating_command_block", + "373": "minecraft:chain_command_block", + "374": "minecraft:magma_block", + "375": "minecraft:nether_wart_block", + "376": "minecraft:red_nether_bricks", + "377": "minecraft:bone_block", + "378": "minecraft:structure_void", + "379": "minecraft:observer", + "380": "minecraft:shulker_box", + "381": "minecraft:white_shulker_box", + "382": "minecraft:orange_shulker_box", + "383": "minecraft:magenta_shulker_box", + "384": "minecraft:light_blue_shulker_box", + "385": "minecraft:yellow_shulker_box", + "386": "minecraft:lime_shulker_box", + "387": "minecraft:pink_shulker_box", + "388": "minecraft:gray_shulker_box", + "389": "minecraft:light_gray_shulker_box", + "390": "minecraft:cyan_shulker_box", + "391": "minecraft:purple_shulker_box", + "392": "minecraft:blue_shulker_box", + "393": "minecraft:brown_shulker_box", + "394": "minecraft:green_shulker_box", + "395": "minecraft:red_shulker_box", + "396": "minecraft:black_shulker_box", + "397": "minecraft:white_glazed_terracotta", + "398": "minecraft:orange_glazed_terracotta", + "399": "minecraft:magenta_glazed_terracotta", + "400": "minecraft:light_blue_glazed_terracotta", + "401": "minecraft:yellow_glazed_terracotta", + "402": "minecraft:lime_glazed_terracotta", + "403": "minecraft:pink_glazed_terracotta", + "404": "minecraft:gray_glazed_terracotta", + "405": "minecraft:light_gray_glazed_terracotta", + "406": "minecraft:cyan_glazed_terracotta", + "407": "minecraft:purple_glazed_terracotta", + "408": "minecraft:blue_glazed_terracotta", + "409": "minecraft:brown_glazed_terracotta", + "410": "minecraft:green_glazed_terracotta", + "411": "minecraft:red_glazed_terracotta", + "412": "minecraft:black_glazed_terracotta", + "413": "minecraft:white_concrete", + "414": "minecraft:orange_concrete", + "415": "minecraft:magenta_concrete", + "416": "minecraft:light_blue_concrete", + "417": "minecraft:yellow_concrete", + "418": "minecraft:lime_concrete", + "419": "minecraft:pink_concrete", + "420": "minecraft:gray_concrete", + "421": "minecraft:light_gray_concrete", + "422": "minecraft:cyan_concrete", + "423": "minecraft:purple_concrete", + "424": "minecraft:blue_concrete", + "425": "minecraft:brown_concrete", + "426": "minecraft:green_concrete", + "427": "minecraft:red_concrete", + "428": "minecraft:black_concrete", + "429": "minecraft:white_concrete_powder", + "430": "minecraft:orange_concrete_powder", + "431": "minecraft:magenta_concrete_powder", + "432": "minecraft:light_blue_concrete_powder", + "433": "minecraft:yellow_concrete_powder", + "434": "minecraft:lime_concrete_powder", + "435": "minecraft:pink_concrete_powder", + "436": "minecraft:gray_concrete_powder", + "437": "minecraft:light_gray_concrete_powder", + "438": "minecraft:cyan_concrete_powder", + "439": "minecraft:purple_concrete_powder", + "440": "minecraft:blue_concrete_powder", + "441": "minecraft:brown_concrete_powder", + "442": "minecraft:green_concrete_powder", + "443": "minecraft:red_concrete_powder", + "444": "minecraft:black_concrete_powder", + "445": "minecraft:turtle_egg", + "446": "minecraft:dead_tube_coral_block", + "447": "minecraft:dead_brain_coral_block", + "448": "minecraft:dead_bubble_coral_block", + "449": "minecraft:dead_fire_coral_block", + "450": "minecraft:dead_horn_coral_block", + "451": "minecraft:tube_coral_block", + "452": "minecraft:brain_coral_block", + "453": "minecraft:bubble_coral_block", + "454": "minecraft:fire_coral_block", + "455": "minecraft:horn_coral_block", + "456": "minecraft:tube_coral", + "457": "minecraft:brain_coral", + "458": "minecraft:bubble_coral", + "459": "minecraft:fire_coral", + "460": "minecraft:horn_coral", + "461": "minecraft:dead_brain_coral", + "462": "minecraft:dead_bubble_coral", + "463": "minecraft:dead_fire_coral", + "464": "minecraft:dead_horn_coral", + "465": "minecraft:dead_tube_coral", + "466": "minecraft:tube_coral_fan", + "467": "minecraft:brain_coral_fan", + "468": "minecraft:bubble_coral_fan", + "469": "minecraft:fire_coral_fan", + "470": "minecraft:horn_coral_fan", + "471": "minecraft:dead_tube_coral_fan", + "472": "minecraft:dead_brain_coral_fan", + "473": "minecraft:dead_bubble_coral_fan", + "474": "minecraft:dead_fire_coral_fan", + "475": "minecraft:dead_horn_coral_fan", + "476": "minecraft:blue_ice", + "477": "minecraft:conduit", + "478": "minecraft:polished_granite_stairs", + "479": "minecraft:smooth_red_sandstone_stairs", + "480": "minecraft:mossy_stone_brick_stairs", + "481": "minecraft:polished_diorite_stairs", + "482": "minecraft:mossy_cobblestone_stairs", + "483": "minecraft:end_stone_brick_stairs", + "484": "minecraft:stone_stairs", + "485": "minecraft:smooth_sandstone_stairs", + "486": "minecraft:smooth_quartz_stairs", + "487": "minecraft:granite_stairs", + "488": "minecraft:andesite_stairs", + "489": "minecraft:red_nether_brick_stairs", + "490": "minecraft:polished_andesite_stairs", + "491": "minecraft:diorite_stairs", + "492": "minecraft:polished_granite_slab", + "493": "minecraft:smooth_red_sandstone_slab", + "494": "minecraft:mossy_stone_brick_slab", + "495": "minecraft:polished_diorite_slab", + "496": "minecraft:mossy_cobblestone_slab", + "497": "minecraft:end_stone_brick_slab", + "498": "minecraft:smooth_sandstone_slab", + "499": "minecraft:smooth_quartz_slab", + "500": "minecraft:granite_slab", + "501": "minecraft:andesite_slab", + "502": "minecraft:red_nether_brick_slab", + "503": "minecraft:polished_andesite_slab", + "504": "minecraft:diorite_slab", + "505": "minecraft:scaffolding", + "506": "minecraft:iron_door", + "507": "minecraft:oak_door", + "508": "minecraft:spruce_door", + "509": "minecraft:birch_door", + "510": "minecraft:jungle_door", + "511": "minecraft:acacia_door", + "512": "minecraft:dark_oak_door", + "513": "minecraft:repeater", + "514": "minecraft:comparator", + "515": "minecraft:structure_block", + "516": "minecraft:jigsaw", + "517": "minecraft:composter", + "518": "minecraft:turtle_helmet", + "519": "minecraft:scute", + "520": "minecraft:iron_shovel", + "521": "minecraft:iron_pickaxe", + "522": "minecraft:iron_axe", + "523": "minecraft:flint_and_steel", + "524": "minecraft:apple", + "525": "minecraft:bow", + "526": "minecraft:arrow", + "527": "minecraft:coal", + "528": "minecraft:charcoal", + "529": "minecraft:diamond", + "530": "minecraft:iron_ingot", + "531": "minecraft:gold_ingot", + "532": "minecraft:iron_sword", + "533": "minecraft:wooden_sword", + "534": "minecraft:wooden_shovel", + "535": "minecraft:wooden_pickaxe", + "536": "minecraft:wooden_axe", + "537": "minecraft:stone_sword", + "538": "minecraft:stone_shovel", + "539": "minecraft:stone_pickaxe", + "540": "minecraft:stone_axe", + "541": "minecraft:diamond_sword", + "542": "minecraft:diamond_shovel", + "543": "minecraft:diamond_pickaxe", + "544": "minecraft:diamond_axe", + "545": "minecraft:stick", + "546": "minecraft:bowl", + "547": "minecraft:mushroom_stew", + "548": "minecraft:golden_sword", + "549": "minecraft:golden_shovel", + "550": "minecraft:golden_pickaxe", + "551": "minecraft:golden_axe", + "552": "minecraft:string", + "553": "minecraft:feather", + "554": "minecraft:gunpowder", + "555": "minecraft:wooden_hoe", + "556": "minecraft:stone_hoe", + "557": "minecraft:iron_hoe", + "558": "minecraft:diamond_hoe", + "559": "minecraft:golden_hoe", + "560": "minecraft:wheat_seeds", + "561": "minecraft:wheat", + "562": "minecraft:bread", + "563": "minecraft:leather_helmet", + "564": "minecraft:leather_chestplate", + "565": "minecraft:leather_leggings", + "566": "minecraft:leather_boots", + "567": "minecraft:chainmail_helmet", + "568": "minecraft:chainmail_chestplate", + "569": "minecraft:chainmail_leggings", + "570": "minecraft:chainmail_boots", + "571": "minecraft:iron_helmet", + "572": "minecraft:iron_chestplate", + "573": "minecraft:iron_leggings", + "574": "minecraft:iron_boots", + "575": "minecraft:diamond_helmet", + "576": "minecraft:diamond_chestplate", + "577": "minecraft:diamond_leggings", + "578": "minecraft:diamond_boots", + "579": "minecraft:golden_helmet", + "580": "minecraft:golden_chestplate", + "581": "minecraft:golden_leggings", + "582": "minecraft:golden_boots", + "583": "minecraft:flint", + "584": "minecraft:porkchop", + "585": "minecraft:cooked_porkchop", + "586": "minecraft:painting", + "587": "minecraft:golden_apple", + "588": "minecraft:enchanted_golden_apple", + "589": "minecraft:oak_sign", + "590": "minecraft:spruce_sign", + "591": "minecraft:birch_sign", + "592": "minecraft:jungle_sign", + "593": "minecraft:acacia_sign", + "594": "minecraft:dark_oak_sign", + "595": "minecraft:bucket", + "596": "minecraft:water_bucket", + "597": "minecraft:lava_bucket", + "598": "minecraft:minecart", + "599": "minecraft:saddle", + "600": "minecraft:redstone", + "601": "minecraft:snowball", + "602": "minecraft:oak_boat", + "603": "minecraft:leather", + "604": "minecraft:milk_bucket", + "605": "minecraft:pufferfish_bucket", + "606": "minecraft:salmon_bucket", + "607": "minecraft:cod_bucket", + "608": "minecraft:tropical_fish_bucket", + "609": "minecraft:brick", + "610": "minecraft:clay_ball", + "611": "minecraft:sugar_cane", + "612": "minecraft:kelp", + "613": "minecraft:dried_kelp_block", + "614": "minecraft:bamboo", + "615": "minecraft:paper", + "616": "minecraft:book", + "617": "minecraft:slime_ball", + "618": "minecraft:chest_minecart", + "619": "minecraft:furnace_minecart", + "620": "minecraft:egg", + "621": "minecraft:compass", + "622": "minecraft:fishing_rod", + "623": "minecraft:clock", + "624": "minecraft:glowstone_dust", + "625": "minecraft:cod", + "626": "minecraft:salmon", + "627": "minecraft:tropical_fish", + "628": "minecraft:pufferfish", + "629": "minecraft:cooked_cod", + "630": "minecraft:cooked_salmon", + "631": "minecraft:ink_sac", + "632": "minecraft:red_dye", + "633": "minecraft:green_dye", + "634": "minecraft:cocoa_beans", + "635": "minecraft:lapis_lazuli", + "636": "minecraft:purple_dye", + "637": "minecraft:cyan_dye", + "638": "minecraft:light_gray_dye", + "639": "minecraft:gray_dye", + "640": "minecraft:pink_dye", + "641": "minecraft:lime_dye", + "642": "minecraft:yellow_dye", + "643": "minecraft:light_blue_dye", + "644": "minecraft:magenta_dye", + "645": "minecraft:orange_dye", + "646": "minecraft:bone_meal", + "647": "minecraft:blue_dye", + "648": "minecraft:brown_dye", + "649": "minecraft:black_dye", + "650": "minecraft:white_dye", + "651": "minecraft:bone", + "652": "minecraft:sugar", + "653": "minecraft:cake", + "654": "minecraft:white_bed", + "655": "minecraft:orange_bed", + "656": "minecraft:magenta_bed", + "657": "minecraft:light_blue_bed", + "658": "minecraft:yellow_bed", + "659": "minecraft:lime_bed", + "660": "minecraft:pink_bed", + "661": "minecraft:gray_bed", + "662": "minecraft:light_gray_bed", + "663": "minecraft:cyan_bed", + "664": "minecraft:purple_bed", + "665": "minecraft:blue_bed", + "666": "minecraft:brown_bed", + "667": "minecraft:green_bed", + "668": "minecraft:red_bed", + "669": "minecraft:black_bed", + "670": "minecraft:cookie", + "671": "minecraft:filled_map", + "672": "minecraft:shears", + "673": "minecraft:melon_slice", + "674": "minecraft:dried_kelp", + "675": "minecraft:pumpkin_seeds", + "676": "minecraft:melon_seeds", + "677": "minecraft:beef", + "678": "minecraft:cooked_beef", + "679": "minecraft:chicken", + "680": "minecraft:cooked_chicken", + "681": "minecraft:rotten_flesh", + "682": "minecraft:ender_pearl", + "683": "minecraft:blaze_rod", + "684": "minecraft:ghast_tear", + "685": "minecraft:gold_nugget", + "686": "minecraft:nether_wart", + "687": "minecraft:potion", + "688": "minecraft:glass_bottle", + "689": "minecraft:spider_eye", + "690": "minecraft:fermented_spider_eye", + "691": "minecraft:blaze_powder", + "692": "minecraft:magma_cream", + "693": "minecraft:brewing_stand", + "694": "minecraft:cauldron", + "695": "minecraft:ender_eye", + "696": "minecraft:glistering_melon_slice", + "697": "minecraft:bat_spawn_egg", + "698": "minecraft:bee_spawn_egg", + "699": "minecraft:blaze_spawn_egg", + "700": "minecraft:cat_spawn_egg", + "701": "minecraft:cave_spider_spawn_egg", + "702": "minecraft:chicken_spawn_egg", + "703": "minecraft:cod_spawn_egg", + "704": "minecraft:cow_spawn_egg", + "705": "minecraft:creeper_spawn_egg", + "706": "minecraft:dolphin_spawn_egg", + "707": "minecraft:donkey_spawn_egg", + "708": "minecraft:drowned_spawn_egg", + "709": "minecraft:elder_guardian_spawn_egg", + "710": "minecraft:enderman_spawn_egg", + "711": "minecraft:endermite_spawn_egg", + "712": "minecraft:evoker_spawn_egg", + "713": "minecraft:fox_spawn_egg", + "714": "minecraft:ghast_spawn_egg", + "715": "minecraft:guardian_spawn_egg", + "716": "minecraft:horse_spawn_egg", + "717": "minecraft:husk_spawn_egg", + "718": "minecraft:llama_spawn_egg", + "719": "minecraft:magma_cube_spawn_egg", + "720": "minecraft:mooshroom_spawn_egg", + "721": "minecraft:mule_spawn_egg", + "722": "minecraft:ocelot_spawn_egg", + "723": "minecraft:panda_spawn_egg", + "724": "minecraft:parrot_spawn_egg", + "725": "minecraft:phantom_spawn_egg", + "726": "minecraft:pig_spawn_egg", + "727": "minecraft:pillager_spawn_egg", + "728": "minecraft:polar_bear_spawn_egg", + "729": "minecraft:pufferfish_spawn_egg", + "730": "minecraft:rabbit_spawn_egg", + "731": "minecraft:ravager_spawn_egg", + "732": "minecraft:salmon_spawn_egg", + "733": "minecraft:sheep_spawn_egg", + "734": "minecraft:shulker_spawn_egg", + "735": "minecraft:silverfish_spawn_egg", + "736": "minecraft:skeleton_spawn_egg", + "737": "minecraft:skeleton_horse_spawn_egg", + "738": "minecraft:slime_spawn_egg", + "739": "minecraft:spider_spawn_egg", + "740": "minecraft:squid_spawn_egg", + "741": "minecraft:stray_spawn_egg", + "742": "minecraft:trader_llama_spawn_egg", + "743": "minecraft:tropical_fish_spawn_egg", + "744": "minecraft:turtle_spawn_egg", + "745": "minecraft:vex_spawn_egg", + "746": "minecraft:villager_spawn_egg", + "747": "minecraft:vindicator_spawn_egg", + "748": "minecraft:wandering_trader_spawn_egg", + "749": "minecraft:witch_spawn_egg", + "750": "minecraft:wither_skeleton_spawn_egg", + "751": "minecraft:wolf_spawn_egg", + "752": "minecraft:zombie_spawn_egg", + "753": "minecraft:zombie_horse_spawn_egg", + "754": "minecraft:zombie_pigman_spawn_egg", + "755": "minecraft:zombie_villager_spawn_egg", + "756": "minecraft:experience_bottle", + "757": "minecraft:fire_charge", + "758": "minecraft:writable_book", + "759": "minecraft:written_book", + "760": "minecraft:emerald", + "761": "minecraft:item_frame", + "762": "minecraft:flower_pot", + "763": "minecraft:carrot", + "764": "minecraft:potato", + "765": "minecraft:baked_potato", + "766": "minecraft:poisonous_potato", + "767": "minecraft:map", + "768": "minecraft:golden_carrot", + "769": "minecraft:skeleton_skull", + "770": "minecraft:wither_skeleton_skull", + "771": "minecraft:player_head", + "772": "minecraft:zombie_head", + "773": "minecraft:creeper_head", + "774": "minecraft:dragon_head", + "775": "minecraft:carrot_on_a_stick", + "776": "minecraft:nether_star", + "777": "minecraft:pumpkin_pie", + "778": "minecraft:firework_rocket", + "779": "minecraft:firework_star", + "780": "minecraft:enchanted_book", + "781": "minecraft:nether_brick", + "782": "minecraft:quartz", + "783": "minecraft:tnt_minecart", + "784": "minecraft:hopper_minecart", + "785": "minecraft:prismarine_shard", + "786": "minecraft:prismarine_crystals", + "787": "minecraft:rabbit", + "788": "minecraft:cooked_rabbit", + "789": "minecraft:rabbit_stew", + "790": "minecraft:rabbit_foot", + "791": "minecraft:rabbit_hide", + "792": "minecraft:armor_stand", + "793": "minecraft:iron_horse_armor", + "794": "minecraft:golden_horse_armor", + "795": "minecraft:diamond_horse_armor", + "796": "minecraft:leather_horse_armor", + "797": "minecraft:lead", + "798": "minecraft:name_tag", + "799": "minecraft:command_block_minecart", + "800": "minecraft:mutton", + "801": "minecraft:cooked_mutton", + "802": "minecraft:white_banner", + "803": "minecraft:orange_banner", + "804": "minecraft:magenta_banner", + "805": "minecraft:light_blue_banner", + "806": "minecraft:yellow_banner", + "807": "minecraft:lime_banner", + "808": "minecraft:pink_banner", + "809": "minecraft:gray_banner", + "810": "minecraft:light_gray_banner", + "811": "minecraft:cyan_banner", + "812": "minecraft:purple_banner", + "813": "minecraft:blue_banner", + "814": "minecraft:brown_banner", + "815": "minecraft:green_banner", + "816": "minecraft:red_banner", + "817": "minecraft:black_banner", + "818": "minecraft:end_crystal", + "819": "minecraft:chorus_fruit", + "820": "minecraft:popped_chorus_fruit", + "821": "minecraft:beetroot", + "822": "minecraft:beetroot_seeds", + "823": "minecraft:beetroot_soup", + "824": "minecraft:dragon_breath", + "825": "minecraft:splash_potion", + "826": "minecraft:spectral_arrow", + "827": "minecraft:tipped_arrow", + "828": "minecraft:lingering_potion", + "829": "minecraft:shield", + "830": "minecraft:elytra", + "831": "minecraft:spruce_boat", + "832": "minecraft:birch_boat", + "833": "minecraft:jungle_boat", + "834": "minecraft:acacia_boat", + "835": "minecraft:dark_oak_boat", + "836": "minecraft:totem_of_undying", + "837": "minecraft:shulker_shell", + "838": "minecraft:iron_nugget", + "839": "minecraft:knowledge_book", + "840": "minecraft:debug_stick", + "841": "minecraft:music_disc_13", + "842": "minecraft:music_disc_cat", + "843": "minecraft:music_disc_blocks", + "844": "minecraft:music_disc_chirp", + "845": "minecraft:music_disc_far", + "846": "minecraft:music_disc_mall", + "847": "minecraft:music_disc_mellohi", + "848": "minecraft:music_disc_stal", + "849": "minecraft:music_disc_strad", + "850": "minecraft:music_disc_ward", + "851": "minecraft:music_disc_11", + "852": "minecraft:music_disc_wait", + "853": "minecraft:trident", + "854": "minecraft:phantom_membrane", + "855": "minecraft:nautilus_shell", + "856": "minecraft:heart_of_the_sea", + "857": "minecraft:crossbow", + "858": "minecraft:suspicious_stew", + "859": "minecraft:loom", + "860": "minecraft:flower_banner_pattern", + "861": "minecraft:creeper_banner_pattern", + "862": "minecraft:skull_banner_pattern", + "863": "minecraft:mojang_banner_pattern", + "864": "minecraft:globe_banner_pattern", + "865": "minecraft:barrel", + "866": "minecraft:smoker", + "867": "minecraft:blast_furnace", + "868": "minecraft:cartography_table", + "869": "minecraft:fletching_table", + "870": "minecraft:grindstone", + "871": "minecraft:lectern", + "872": "minecraft:smithing_table", + "873": "minecraft:stonecutter", + "874": "minecraft:bell", + "875": "minecraft:lantern", + "876": "minecraft:sweet_berries", + "877": "minecraft:campfire", + "878": "minecraft:honeycomb", + "879": "minecraft:bee_nest", + "880": "minecraft:bee_hive", + "881": "minecraft:honey_bottle" + }, "sounds": [ "ambient.cave", "ambient.underwater.enter", @@ -15,6 +1579,22 @@ "block.anvil.place", "block.anvil.step", "block.anvil.use", + "item.armor.equip_chain", + "item.armor.equip_diamond", + "item.armor.equip_elytra", + "item.armor.equip_generic", + "item.armor.equip_gold", + "item.armor.equip_iron", + "item.armor.equip_leather", + "item.armor.equip_turtle", + "entity.armor_stand.break", + "entity.armor_stand.fall", + "entity.armor_stand.hit", + "entity.armor_stand.place", + "entity.arrow.hit", + "entity.arrow.hit_player", + "entity.arrow.shoot", + "item.axe.strip", "block.bamboo.break", "block.bamboo.fall", "block.bamboo.hit", @@ -25,30 +1605,86 @@ "block.bamboo_sapling.place", "block.barrel.close", "block.barrel.open", + "entity.bat.ambient", + "entity.bat.death", + "entity.bat.hurt", + "entity.bat.loop", + "entity.bat.takeoff", "block.beacon.activate", "block.beacon.ambient", "block.beacon.deactivate", "block.beacon.power_select", + "entity.bee.death", + "entity.bee.hurt", + "entity.bee.loop_aggressive", + "entity.bee.loop", + "entity.bee.sting", + "entity.bee.pollinate", "block.beehive.drip", "block.beehive.enter", "block.beehive.exit", "block.beehive.shear", "block.beehive.work", - "block.bell.resonate", "block.bell.use", + "block.bell.resonate", + "entity.blaze.ambient", + "entity.blaze.burn", + "entity.blaze.death", + "entity.blaze.hurt", + "entity.blaze.shoot", + "entity.boat.paddle_land", + "entity.boat.paddle_water", + "item.book.page_turn", + "item.book.put", + "entity.fishing_bobber.retrieve", + "entity.fishing_bobber.splash", + "entity.fishing_bobber.throw", "block.blastfurnace.fire_crackle", + "item.bottle.empty", + "item.bottle.fill", + "item.bottle.fill_dragonbreath", "block.brewing_stand.brew", "block.bubble_column.bubble_pop", "block.bubble_column.upwards_ambient", "block.bubble_column.upwards_inside", "block.bubble_column.whirlpool_ambient", "block.bubble_column.whirlpool_inside", + "item.bucket.empty", + "item.bucket.empty_fish", + "item.bucket.empty_lava", + "item.bucket.fill", + "item.bucket.fill_fish", + "item.bucket.fill_lava", "block.campfire.crackle", + "entity.cat.ambient", + "entity.cat.stray_ambient", + "entity.cat.death", + "entity.cat.eat", + "entity.cat.hiss", + "entity.cat.beg_for_food", + "entity.cat.hurt", + "entity.cat.purr", + "entity.cat.purreow", "block.chest.close", "block.chest.locked", "block.chest.open", + "entity.chicken.ambient", + "entity.chicken.death", + "entity.chicken.egg", + "entity.chicken.hurt", + "entity.chicken.step", "block.chorus_flower.death", "block.chorus_flower.grow", + "item.chorus_fruit.teleport", + "block.wool.break", + "block.wool.fall", + "block.wool.hit", + "block.wool.place", + "block.wool.step", + "entity.cod.ambient", + "entity.cod.death", + "entity.cod.flop", + "entity.cod.hurt", "block.comparator.click", "block.composter.empty", "block.composter.fill", @@ -59,198 +1695,6 @@ "block.conduit.ambient.short", "block.conduit.attack.target", "block.conduit.deactivate", - "block.coral_block.break", - "block.coral_block.fall", - "block.coral_block.hit", - "block.coral_block.place", - "block.coral_block.step", - "block.crop.break", - "block.dispenser.dispense", - "block.dispenser.fail", - "block.dispenser.launch", - "block.enchantment_table.use", - "block.end_gateway.spawn", - "block.end_portal.spawn", - "block.end_portal_frame.fill", - "block.ender_chest.close", - "block.ender_chest.open", - "block.fence_gate.close", - "block.fence_gate.open", - "block.fire.ambient", - "block.fire.extinguish", - "block.furnace.fire_crackle", - "block.glass.break", - "block.glass.fall", - "block.glass.hit", - "block.glass.place", - "block.glass.step", - "block.grass.break", - "block.grass.fall", - "block.grass.hit", - "block.grass.place", - "block.grass.step", - "block.gravel.break", - "block.gravel.fall", - "block.gravel.hit", - "block.gravel.place", - "block.gravel.step", - "block.grindstone.use", - "block.iron_door.close", - "block.iron_door.open", - "block.iron_trapdoor.close", - "block.iron_trapdoor.open", - "block.ladder.break", - "block.ladder.fall", - "block.ladder.hit", - "block.ladder.place", - "block.ladder.step", - "block.lantern.break", - "block.lantern.fall", - "block.lantern.hit", - "block.lantern.place", - "block.lantern.step", - "block.lava.ambient", - "block.lava.extinguish", - "block.lava.pop", - "block.lever.click", - "block.lily_pad.place", - "block.metal.break", - "block.metal.fall", - "block.metal.hit", - "block.metal.place", - "block.metal.step", - "block.metal_pressure_plate.click_off", - "block.metal_pressure_plate.click_on", - "block.nether_wart.break", - "block.note_block.banjo", - "block.note_block.basedrum", - "block.note_block.bass", - "block.note_block.bell", - "block.note_block.bit", - "block.note_block.chime", - "block.note_block.cow_bell", - "block.note_block.didgeridoo", - "block.note_block.flute", - "block.note_block.guitar", - "block.note_block.harp", - "block.note_block.hat", - "block.note_block.iron_xylophone", - "block.note_block.pling", - "block.note_block.snare", - "block.note_block.xylophone", - "block.piston.contract", - "block.piston.extend", - "block.portal.ambient", - "block.portal.travel", - "block.portal.trigger", - "block.pumpkin.carve", - "block.redstone_torch.burnout", - "block.sand.break", - "block.sand.fall", - "block.sand.hit", - "block.sand.place", - "block.sand.step", - "block.scaffolding.break", - "block.scaffolding.fall", - "block.scaffolding.hit", - "block.scaffolding.place", - "block.scaffolding.step", - "block.shulker_box.close", - "block.shulker_box.open", - "block.slime_block.break", - "block.slime_block.fall", - "block.slime_block.hit", - "block.slime_block.place", - "block.slime_block.step", - "block.smoker.smoke", - "block.snow.break", - "block.snow.fall", - "block.snow.hit", - "block.snow.place", - "block.snow.step", - "block.stone.break", - "block.stone.fall", - "block.stone.hit", - "block.stone.place", - "block.stone.step", - "block.stone_button.click_off", - "block.stone_button.click_on", - "block.stone_pressure_plate.click_off", - "block.stone_pressure_plate.click_on", - "block.sweet_berry_bush.break", - "block.sweet_berry_bush.place", - "block.tripwire.attach", - "block.tripwire.click_off", - "block.tripwire.click_on", - "block.tripwire.detach", - "block.water.ambient", - "block.wet_grass.break", - "block.wet_grass.fall", - "block.wet_grass.hit", - "block.wet_grass.place", - "block.wet_grass.step", - "block.wood.break", - "block.wood.fall", - "block.wood.hit", - "block.wood.place", - "block.wood.step", - "block.wooden_button.click_off", - "block.wooden_button.click_on", - "block.wooden_door.close", - "block.wooden_door.open", - "block.wooden_pressure_plate.click_off", - "block.wooden_pressure_plate.click_on", - "block.wooden_trapdoor.close", - "block.wooden_trapdoor.open", - "block.wool.break", - "block.wool.fall", - "block.wool.hit", - "block.wool.place", - "block.wool.step", - "enchant.thorns.hit", - "entity.armor_stand.break", - "entity.armor_stand.fall", - "entity.armor_stand.hit", - "entity.armor_stand.place", - "entity.arrow.hit", - "entity.arrow.hit_player", - "entity.arrow.shoot", - "entity.bat.ambient", - "entity.bat.death", - "entity.bat.hurt", - "entity.bat.loop", - "entity.bat.takeoff", - "entity.bee.death", - "entity.bee.hurt", - "entity.bee.loop", - "entity.bee.loop_aggressive", - "entity.bee.pollinate", - "entity.bee.sting", - "entity.blaze.ambient", - "entity.blaze.burn", - "entity.blaze.death", - "entity.blaze.hurt", - "entity.blaze.shoot", - "entity.boat.paddle_land", - "entity.boat.paddle_water", - "entity.cat.ambient", - "entity.cat.beg_for_food", - "entity.cat.death", - "entity.cat.eat", - "entity.cat.hiss", - "entity.cat.hurt", - "entity.cat.purr", - "entity.cat.purreow", - "entity.cat.stray_ambient", - "entity.chicken.ambient", - "entity.chicken.death", - "entity.chicken.egg", - "entity.chicken.hurt", - "entity.chicken.step", - "entity.cod.ambient", - "entity.cod.death", - "entity.cod.flop", - "entity.cod.hurt", "entity.cow.ambient", "entity.cow.death", "entity.cow.hurt", @@ -259,6 +1703,19 @@ "entity.creeper.death", "entity.creeper.hurt", "entity.creeper.primed", + "block.crop.break", + "item.crop.plant", + "item.crossbow.hit", + "item.crossbow.loading_end", + "item.crossbow.loading_middle", + "item.crossbow.loading_start", + "item.crossbow.quick_charge_1", + "item.crossbow.quick_charge_2", + "item.crossbow.quick_charge_3", + "item.crossbow.shoot", + "block.dispenser.dispense", + "block.dispenser.fail", + "block.dispenser.launch", "entity.dolphin.ambient", "entity.dolphin.ambient_water", "entity.dolphin.attack", @@ -274,7 +1731,6 @@ "entity.donkey.chest", "entity.donkey.death", "entity.donkey.hurt", - "entity.dragon_fireball.explode", "entity.drowned.ambient", "entity.drowned.ambient_water", "entity.drowned.death", @@ -293,15 +1749,19 @@ "entity.elder_guardian.flop", "entity.elder_guardian.hurt", "entity.elder_guardian.hurt_land", + "item.elytra.flying", + "block.enchantment_table.use", + "block.ender_chest.close", + "block.ender_chest.open", "entity.ender_dragon.ambient", "entity.ender_dragon.death", + "entity.dragon_fireball.explode", "entity.ender_dragon.flap", "entity.ender_dragon.growl", "entity.ender_dragon.hurt", "entity.ender_dragon.shoot", "entity.ender_eye.death", "entity.ender_eye.launch", - "entity.ender_pearl.throw", "entity.enderman.ambient", "entity.enderman.death", "entity.enderman.hurt", @@ -312,17 +1772,24 @@ "entity.endermite.death", "entity.endermite.hurt", "entity.endermite.step", + "entity.ender_pearl.throw", + "block.end_gateway.spawn", + "block.end_portal_frame.fill", + "block.end_portal.spawn", "entity.evoker.ambient", "entity.evoker.cast_spell", "entity.evoker.celebrate", "entity.evoker.death", + "entity.evoker_fangs.attack", "entity.evoker.hurt", "entity.evoker.prepare_attack", "entity.evoker.prepare_summon", "entity.evoker.prepare_wololo", - "entity.evoker_fangs.attack", "entity.experience_bottle.throw", "entity.experience_orb.pickup", + "block.fence_gate.close", + "block.fence_gate.open", + "item.firecharge.use", "entity.firework_rocket.blast", "entity.firework_rocket.blast_far", "entity.firework_rocket.large_blast", @@ -331,10 +1798,10 @@ "entity.firework_rocket.shoot", "entity.firework_rocket.twinkle", "entity.firework_rocket.twinkle_far", + "block.fire.ambient", + "block.fire.extinguish", "entity.fish.swim", - "entity.fishing_bobber.retrieve", - "entity.fishing_bobber.splash", - "entity.fishing_bobber.throw", + "item.flintandsteel.use", "entity.fox.aggro", "entity.fox.ambient", "entity.fox.bite", @@ -345,6 +1812,7 @@ "entity.fox.sleep", "entity.fox.sniff", "entity.fox.spit", + "block.furnace.fire_crackle", "entity.generic.big_fall", "entity.generic.burn", "entity.generic.death", @@ -362,6 +1830,32 @@ "entity.ghast.scream", "entity.ghast.shoot", "entity.ghast.warn", + "block.glass.break", + "block.glass.fall", + "block.glass.hit", + "block.glass.place", + "block.glass.step", + "block.grass.break", + "block.grass.fall", + "block.grass.hit", + "block.grass.place", + "block.grass.step", + "block.wet_grass.break", + "block.wet_grass.fall", + "block.wet_grass.hit", + "block.wet_grass.place", + "block.wet_grass.step", + "block.coral_block.break", + "block.coral_block.fall", + "block.coral_block.hit", + "block.coral_block.place", + "block.coral_block.step", + "block.gravel.break", + "block.gravel.fall", + "block.gravel.hit", + "block.gravel.place", + "block.gravel.step", + "block.grindstone.use", "entity.guardian.ambient", "entity.guardian.ambient_land", "entity.guardian.attack", @@ -370,6 +1864,8 @@ "entity.guardian.flop", "entity.guardian.hurt", "entity.guardian.hurt_land", + "item.hoe.till", + "item.honey_bottle.drink", "entity.horse.ambient", "entity.horse.angry", "entity.horse.armor", @@ -394,6 +1890,14 @@ "entity.husk.death", "entity.husk.hurt", "entity.husk.step", + "entity.ravager.ambient", + "entity.ravager.attack", + "entity.ravager.celebrate", + "entity.ravager.death", + "entity.ravager.hurt", + "entity.ravager.step", + "entity.ravager.stunned", + "entity.ravager.roar", "entity.illusioner.ambient", "entity.illusioner.cast_spell", "entity.illusioner.death", @@ -401,19 +1905,37 @@ "entity.illusioner.mirror_move", "entity.illusioner.prepare_blindness", "entity.illusioner.prepare_mirror", + "block.iron_door.close", + "block.iron_door.open", "entity.iron_golem.attack", "entity.iron_golem.death", "entity.iron_golem.hurt", "entity.iron_golem.step", - "entity.item.break", - "entity.item.pickup", + "block.iron_trapdoor.close", + "block.iron_trapdoor.open", "entity.item_frame.add_item", "entity.item_frame.break", "entity.item_frame.place", "entity.item_frame.remove_item", "entity.item_frame.rotate_item", + "entity.item.break", + "entity.item.pickup", + "block.ladder.break", + "block.ladder.fall", + "block.ladder.hit", + "block.ladder.place", + "block.ladder.step", + "block.lantern.break", + "block.lantern.fall", + "block.lantern.hit", + "block.lantern.place", + "block.lantern.step", + "block.lava.ambient", + "block.lava.extinguish", + "block.lava.pop", "entity.leash_knot.break", "entity.leash_knot.place", + "block.lever.click", "entity.lightning_bolt.impact", "entity.lightning_bolt.thunder", "entity.lingering_potion.throw", @@ -427,39 +1949,69 @@ "entity.llama.step", "entity.llama.swag", "entity.magma_cube.death", - "entity.magma_cube.death_small", "entity.magma_cube.hurt", - "entity.magma_cube.hurt_small", "entity.magma_cube.jump", "entity.magma_cube.squish", - "entity.magma_cube.squish_small", + "block.metal.break", + "block.metal.fall", + "block.metal.hit", + "block.metal.place", + "block.metal_pressure_plate.click_off", + "block.metal_pressure_plate.click_on", + "block.metal.step", "entity.minecart.inside", "entity.minecart.riding", "entity.mooshroom.convert", "entity.mooshroom.eat", "entity.mooshroom.milk", - "entity.mooshroom.shear", "entity.mooshroom.suspicious_milk", + "entity.mooshroom.shear", "entity.mule.ambient", "entity.mule.chest", "entity.mule.death", "entity.mule.hurt", + "music.creative", + "music.credits", + "music.dragon", + "music.end", + "music.game", + "music.menu", + "music.nether", + "music.under_water", + "block.nether_wart.break", + "item.nether_wart.plant", + "block.note_block.basedrum", + "block.note_block.bass", + "block.note_block.bell", + "block.note_block.chime", + "block.note_block.flute", + "block.note_block.guitar", + "block.note_block.harp", + "block.note_block.hat", + "block.note_block.pling", + "block.note_block.snare", + "block.note_block.xylophone", + "block.note_block.iron_xylophone", + "block.note_block.cow_bell", + "block.note_block.didgeridoo", + "block.note_block.bit", + "block.note_block.banjo", + "entity.ocelot.hurt", "entity.ocelot.ambient", "entity.ocelot.death", - "entity.ocelot.hurt", "entity.painting.break", "entity.painting.place", - "entity.panda.aggressive_ambient", - "entity.panda.ambient", - "entity.panda.bite", - "entity.panda.cant_breed", - "entity.panda.death", - "entity.panda.eat", - "entity.panda.hurt", "entity.panda.pre_sneeze", "entity.panda.sneeze", + "entity.panda.ambient", + "entity.panda.death", + "entity.panda.eat", "entity.panda.step", + "entity.panda.cant_breed", + "entity.panda.aggressive_ambient", "entity.panda.worried_ambient", + "entity.panda.hurt", + "entity.panda.bite", "entity.parrot.ambient", "entity.parrot.death", "entity.parrot.eat", @@ -514,6 +2066,8 @@ "entity.pillager.celebrate", "entity.pillager.death", "entity.pillager.hurt", + "block.piston.contract", + "block.piston.extend", "entity.player.attack.crit", "entity.player.attack.knockback", "entity.player.attack.nodamage", @@ -539,6 +2093,9 @@ "entity.polar_bear.hurt", "entity.polar_bear.step", "entity.polar_bear.warning", + "block.portal.ambient", + "block.portal.travel", + "block.portal.trigger", "entity.puffer_fish.ambient", "entity.puffer_fish.blow_out", "entity.puffer_fish.blow_up", @@ -546,29 +2103,53 @@ "entity.puffer_fish.flop", "entity.puffer_fish.hurt", "entity.puffer_fish.sting", + "block.pumpkin.carve", "entity.rabbit.ambient", "entity.rabbit.attack", "entity.rabbit.death", "entity.rabbit.hurt", "entity.rabbit.jump", - "entity.ravager.ambient", - "entity.ravager.attack", - "entity.ravager.celebrate", - "entity.ravager.death", - "entity.ravager.hurt", - "entity.ravager.roar", - "entity.ravager.step", - "entity.ravager.stunned", + "event.raid.horn", + "music_disc.11", + "music_disc.13", + "music_disc.blocks", + "music_disc.cat", + "music_disc.chirp", + "music_disc.far", + "music_disc.mall", + "music_disc.mellohi", + "music_disc.stal", + "music_disc.strad", + "music_disc.wait", + "music_disc.ward", + "block.redstone_torch.burnout", "entity.salmon.ambient", "entity.salmon.death", "entity.salmon.flop", "entity.salmon.hurt", + "block.sand.break", + "block.sand.fall", + "block.sand.hit", + "block.sand.place", + "block.sand.step", + "block.scaffolding.break", + "block.scaffolding.fall", + "block.scaffolding.hit", + "block.scaffolding.place", + "block.scaffolding.step", "entity.sheep.ambient", "entity.sheep.death", "entity.sheep.hurt", "entity.sheep.shear", "entity.sheep.step", + "item.shield.block", + "item.shield.break", + "item.shovel.flatten", "entity.shulker.ambient", + "block.shulker_box.close", + "block.shulker_box.open", + "entity.shulker_bullet.hit", + "entity.shulker_bullet.hurt", "entity.shulker.close", "entity.shulker.death", "entity.shulker.hurt", @@ -576,39 +2157,51 @@ "entity.shulker.open", "entity.shulker.shoot", "entity.shulker.teleport", - "entity.shulker_bullet.hit", - "entity.shulker_bullet.hurt", "entity.silverfish.ambient", "entity.silverfish.death", "entity.silverfish.hurt", "entity.silverfish.step", "entity.skeleton.ambient", "entity.skeleton.death", + "entity.skeleton_horse.ambient", + "entity.skeleton_horse.death", + "entity.skeleton_horse.hurt", + "entity.skeleton_horse.swim", + "entity.skeleton_horse.ambient_water", + "entity.skeleton_horse.gallop_water", + "entity.skeleton_horse.jump_water", + "entity.skeleton_horse.step_water", "entity.skeleton.hurt", "entity.skeleton.shoot", "entity.skeleton.step", - "entity.skeleton_horse.ambient", - "entity.skeleton_horse.ambient_water", - "entity.skeleton_horse.death", - "entity.skeleton_horse.gallop_water", - "entity.skeleton_horse.hurt", - "entity.skeleton_horse.jump_water", - "entity.skeleton_horse.step_water", - "entity.skeleton_horse.swim", "entity.slime.attack", "entity.slime.death", - "entity.slime.death_small", "entity.slime.hurt", - "entity.slime.hurt_small", "entity.slime.jump", - "entity.slime.jump_small", "entity.slime.squish", + "block.slime_block.break", + "block.slime_block.fall", + "block.slime_block.hit", + "block.slime_block.place", + "block.slime_block.step", + "entity.magma_cube.death_small", + "entity.magma_cube.hurt_small", + "entity.magma_cube.squish_small", + "entity.slime.death_small", + "entity.slime.hurt_small", + "entity.slime.jump_small", "entity.slime.squish_small", + "block.smoker.smoke", + "entity.snowball.throw", + "block.snow.break", + "block.snow.fall", "entity.snow_golem.ambient", "entity.snow_golem.death", "entity.snow_golem.hurt", "entity.snow_golem.shoot", - "entity.snowball.throw", + "block.snow.hit", + "block.snow.place", + "block.snow.step", "entity.spider.ambient", "entity.spider.death", "entity.spider.hurt", @@ -619,11 +2212,37 @@ "entity.squid.death", "entity.squid.hurt", "entity.squid.squirt", + "block.stone.break", + "block.stone_button.click_off", + "block.stone_button.click_on", + "block.stone.fall", + "block.stone.hit", + "block.stone.place", + "block.stone_pressure_plate.click_off", + "block.stone_pressure_plate.click_on", + "block.stone.step", "entity.stray.ambient", "entity.stray.death", "entity.stray.hurt", "entity.stray.step", + "block.sweet_berry_bush.break", + "block.sweet_berry_bush.place", + "item.sweet_berries.pick_from_bush", + "enchant.thorns.hit", "entity.tnt.primed", + "item.totem.use", + "item.trident.hit", + "item.trident.hit_ground", + "item.trident.return", + "item.trident.riptide_1", + "item.trident.riptide_2", + "item.trident.riptide_3", + "item.trident.throw", + "item.trident.thunder", + "block.tripwire.attach", + "block.tripwire.click_off", + "block.tripwire.click_on", + "block.tripwire.detach", "entity.tropical_fish.ambient", "entity.tropical_fish.death", "entity.tropical_fish.flop", @@ -640,6 +2259,15 @@ "entity.turtle.shamble", "entity.turtle.shamble_baby", "entity.turtle.swim", + "ui.button.click", + "ui.loom.select_pattern", + "ui.loom.take_result", + "ui.cartography_table.take_result", + "ui.stonecutter.take_result", + "ui.stonecutter.select_recipe", + "ui.toast.challenge_complete", + "ui.toast.in", + "ui.toast.out", "entity.vex.ambient", "entity.vex.charge", "entity.vex.death", @@ -650,6 +2278,7 @@ "entity.villager.hurt", "entity.villager.no", "entity.villager.trade", + "entity.villager.yes", "entity.villager.work_armorer", "entity.villager.work_butcher", "entity.villager.work_cartographer", @@ -663,11 +2292,11 @@ "entity.villager.work_shepherd", "entity.villager.work_toolsmith", "entity.villager.work_weaponsmith", - "entity.villager.yes", "entity.vindicator.ambient", "entity.vindicator.celebrate", "entity.vindicator.death", "entity.vindicator.hurt", + "block.lily_pad.place", "entity.wandering_trader.ambient", "entity.wandering_trader.death", "entity.wandering_trader.disappeared", @@ -678,6 +2307,9 @@ "entity.wandering_trader.reappeared", "entity.wandering_trader.trade", "entity.wandering_trader.yes", + "block.water.ambient", + "weather.rain", + "weather.rain.above", "entity.witch.ambient", "entity.witch.celebrate", "entity.witch.death", @@ -689,11 +2321,11 @@ "entity.wither.death", "entity.wither.hurt", "entity.wither.shoot", - "entity.wither.spawn", "entity.wither_skeleton.ambient", "entity.wither_skeleton.death", "entity.wither_skeleton.hurt", "entity.wither_skeleton.step", + "entity.wither.spawn", "entity.wolf.ambient", "entity.wolf.death", "entity.wolf.growl", @@ -703,109 +2335,41 @@ "entity.wolf.shake", "entity.wolf.step", "entity.wolf.whine", + "block.wooden_door.close", + "block.wooden_door.open", + "block.wooden_trapdoor.close", + "block.wooden_trapdoor.open", + "block.wood.break", + "block.wooden_button.click_off", + "block.wooden_button.click_on", + "block.wood.fall", + "block.wood.hit", + "block.wood.place", + "block.wooden_pressure_plate.click_off", + "block.wooden_pressure_plate.click_on", + "block.wood.step", "entity.zombie.ambient", - "entity.zombie.attack_iron_door", "entity.zombie.attack_wooden_door", + "entity.zombie.attack_iron_door", "entity.zombie.break_wooden_door", "entity.zombie.converted_to_drowned", "entity.zombie.death", "entity.zombie.destroy_egg", - "entity.zombie.hurt", - "entity.zombie.infect", - "entity.zombie.step", "entity.zombie_horse.ambient", "entity.zombie_horse.death", "entity.zombie_horse.hurt", + "entity.zombie.hurt", + "entity.zombie.infect", "entity.zombie_pigman.ambient", "entity.zombie_pigman.angry", "entity.zombie_pigman.death", "entity.zombie_pigman.hurt", + "entity.zombie.step", "entity.zombie_villager.ambient", "entity.zombie_villager.converted", "entity.zombie_villager.cure", "entity.zombie_villager.death", "entity.zombie_villager.hurt", - "entity.zombie_villager.step", - "event.raid.horn", - "item.armor.equip_chain", - "item.armor.equip_diamond", - "item.armor.equip_elytra", - "item.armor.equip_generic", - "item.armor.equip_gold", - "item.armor.equip_iron", - "item.armor.equip_leather", - "item.armor.equip_turtle", - "item.axe.strip", - "item.book.page_turn", - "item.book.put", - "item.bottle.empty", - "item.bottle.fill", - "item.bottle.fill_dragonbreath", - "item.bucket.empty", - "item.bucket.empty_fish", - "item.bucket.empty_lava", - "item.bucket.fill", - "item.bucket.fill_fish", - "item.bucket.fill_lava", - "item.chorus_fruit.teleport", - "item.crop.plant", - "item.crossbow.hit", - "item.crossbow.loading_end", - "item.crossbow.loading_middle", - "item.crossbow.loading_start", - "item.crossbow.quick_charge_1", - "item.crossbow.quick_charge_2", - "item.crossbow.quick_charge_3", - "item.crossbow.shoot", - "item.elytra.flying", - "item.firecharge.use", - "item.flintandsteel.use", - "item.hoe.till", - "item.honey_bottle.drink", - "item.nether_wart.plant", - "item.shield.block", - "item.shield.break", - "item.shovel.flatten", - "item.sweet_berries.pick_from_bush", - "item.totem.use", - "item.trident.hit", - "item.trident.hit_ground", - "item.trident.return", - "item.trident.riptide_1", - "item.trident.riptide_2", - "item.trident.riptide_3", - "item.trident.throw", - "item.trident.thunder", - "music.creative", - "music.credits", - "music.dragon", - "music.end", - "music.game", - "music.menu", - "music.nether", - "music.under_water", - "music_disc.11", - "music_disc.13", - "music_disc.blocks", - "music_disc.cat", - "music_disc.chirp", - "music_disc.far", - "music_disc.mall", - "music_disc.mellohi", - "music_disc.stal", - "music_disc.strad", - "music_disc.wait", - "music_disc.ward", - "ui.button.click", - "ui.cartography_table.take_result", - "ui.loom.select_pattern", - "ui.loom.take_result", - "ui.stonecutter.select_recipe", - "ui.stonecutter.take_result", - "ui.toast.challenge_complete", - "ui.toast.in", - "ui.toast.out", - "weather.rain", - "weather.rain.above" + "entity.zombie_villager.step" ] } \ No newline at end of file