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:
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)
diff --git a/bukkit/pom.xml b/bukkit/pom.xml
index c541908c9..c7b916aa9 100644
--- a/bukkit/pom.xml
+++ b/bukkit/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.1.3
+ 2.1.4-19w35a
4.0.0
diff --git a/bungee/pom.xml b/bungee/pom.xml
index 8465220fd..14bf5a621 100644
--- a/bungee/pom.xml
+++ b/bungee/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.1.3
+ 2.1.4-19w35a
4.0.0
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();
diff --git a/common/pom.xml b/common/pom.xml
index 4d451c684..9401ba496 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.1.3
+ 2.1.4-19w35a
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..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
@@ -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(551, "1.15"));
register(unknown = new ProtocolVersion(-1, "UNKNOWN"));
}
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);
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/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_14to1_13_2/packets/WorldPackets.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_14to1_13_2/packets/WorldPackets.java
index 43b1e9156..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
@@ -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) {
@@ -116,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
@@ -172,24 +203,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]));
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..51d5c2885
--- /dev/null
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/MetadataRewriter.java
@@ -0,0 +1,41 @@
+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?
+ }
+
+ //TODO new boolean with id 17 for enderman?
+ } 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..cba1740f4
--- /dev/null
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java
@@ -0,0 +1,271 @@
+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;
+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.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() {
+ MappingData.init();
+ EntityPackets.register(this);
+ WorldPackets.register(this);
+ InventoryPackets.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);
+ }
+ });
+ }
+ });
+
+ // 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
+ 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)));
+ }
+ });
+ }
+ });
+
+ // 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, 0x0B, 0x0C);
+
+ 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, 0x15, 0x16);
+
+ 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, 0x24, 0x25);
+
+ registerOutgoing(State.PLAY, 0x26, 0x27);
+
+ 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, 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, 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, 0x58, 0x59);
+ registerOutgoing(State.PLAY, 0x59, 0x5A);
+
+
+ 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
new file mode 100644
index 000000000..25dbe1e5f
--- /dev/null
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/data/MappingData.java
@@ -0,0 +1,26 @@
+package us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+import com.google.gson.JsonObject;
+import us.myles.ViaVersion.api.Via;
+
+public class MappingData {
+ 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 = 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 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/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..efa714838
--- /dev/null
+++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_15to1_14_4/packets/InventoryPackets.java
@@ -0,0 +1,233 @@
+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) {
+ // 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) {
+ 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) {
+ 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) {
+ 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/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..15a6448df
--- /dev/null
+++ b/common/src/main/resources/assets/viaversion/data/mapping-1.15.json
@@ -0,0 +1,2375 @@
+{
+ "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",
+ "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",
+ "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",
+ "block.bamboo.place",
+ "block.bamboo.step",
+ "block.bamboo_sapling.break",
+ "block.bamboo_sapling.hit",
+ "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.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",
+ "block.composter.fill_success",
+ "block.composter.ready",
+ "block.conduit.activate",
+ "block.conduit.ambient",
+ "block.conduit.ambient.short",
+ "block.conduit.attack.target",
+ "block.conduit.deactivate",
+ "entity.cow.ambient",
+ "entity.cow.death",
+ "entity.cow.hurt",
+ "entity.cow.milk",
+ "entity.cow.step",
+ "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",
+ "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.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",
+ "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.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.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.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",
+ "entity.firework_rocket.large_blast_far",
+ "entity.firework_rocket.launch",
+ "entity.firework_rocket.shoot",
+ "entity.firework_rocket.twinkle",
+ "entity.firework_rocket.twinkle_far",
+ "block.fire.ambient",
+ "block.fire.extinguish",
+ "entity.fish.swim",
+ "item.flintandsteel.use",
+ "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",
+ "block.furnace.fire_crackle",
+ "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",
+ "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",
+ "entity.guardian.death",
+ "entity.guardian.death_land",
+ "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",
+ "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.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",
+ "entity.illusioner.hurt",
+ "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",
+ "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",
+ "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.hurt",
+ "entity.magma_cube.jump",
+ "entity.magma_cube.squish",
+ "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.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.painting.break",
+ "entity.painting.place",
+ "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",
+ "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",
+ "block.piston.contract",
+ "block.piston.extend",
+ "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",
+ "block.portal.ambient",
+ "block.portal.travel",
+ "block.portal.trigger",
+ "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",
+ "block.pumpkin.carve",
+ "entity.rabbit.ambient",
+ "entity.rabbit.attack",
+ "entity.rabbit.death",
+ "entity.rabbit.hurt",
+ "entity.rabbit.jump",
+ "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",
+ "entity.shulker.hurt_closed",
+ "entity.shulker.open",
+ "entity.shulker.shoot",
+ "entity.shulker.teleport",
+ "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.slime.attack",
+ "entity.slime.death",
+ "entity.slime.hurt",
+ "entity.slime.jump",
+ "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",
+ "block.snow.hit",
+ "block.snow.place",
+ "block.snow.step",
+ "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",
+ "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",
+ "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",
+ "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",
+ "entity.vex.hurt",
+ "entity.villager.ambient",
+ "entity.villager.celebrate",
+ "entity.villager.death",
+ "entity.villager.hurt",
+ "entity.villager.no",
+ "entity.villager.trade",
+ "entity.villager.yes",
+ "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.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",
+ "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",
+ "block.water.ambient",
+ "weather.rain",
+ "weather.rain.above",
+ "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_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",
+ "entity.wolf.howl",
+ "entity.wolf.hurt",
+ "entity.wolf.pant",
+ "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_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_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"
+ ]
+}
\ No newline at end of file
diff --git a/jar/pom.xml b/jar/pom.xml
index 7db489180..d1fc2d3c9 100644
--- a/jar/pom.xml
+++ b/jar/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.1.3
+ 2.1.4-19w35a
4.0.0
viaversion-jar
diff --git a/pom.xml b/pom.xml
index f6ac27a13..2711ee33a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
us.myles
viaversion-parent
- 2.1.3
+ 2.1.4-19w35a
pom
viaversion-parent
diff --git a/sponge-legacy/pom.xml b/sponge-legacy/pom.xml
index 92b3c37b9..0417f5619 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-19w35a
4.0.0
diff --git a/sponge/pom.xml b/sponge/pom.xml
index 34fe22ba8..91f00fb02 100644
--- a/sponge/pom.xml
+++ b/sponge/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.1.3
+ 2.1.4-19w35a
4.0.0
diff --git a/velocity/pom.xml b/velocity/pom.xml
index 07e4929dd..2564bcbb5 100644
--- a/velocity/pom.xml
+++ b/velocity/pom.xml
@@ -5,7 +5,7 @@
viaversion-parent
us.myles
- 2.1.3
+ 2.1.4-19w35a
4.0.0