diff --git a/src/main/java/de/diddiz/LogBlock/Updater.java b/src/main/java/de/diddiz/LogBlock/Updater.java index fe8fa3c..c2f9fe9 100644 --- a/src/main/java/de/diddiz/LogBlock/Updater.java +++ b/src/main/java/de/diddiz/LogBlock/Updater.java @@ -3,10 +3,14 @@ package de.diddiz.LogBlock; import de.diddiz.LogBlock.config.Config; import de.diddiz.LogBlock.config.WorldConfig; import de.diddiz.util.UUIDFetcher; +import de.diddiz.util.Utils; + import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.block.data.BlockData; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; import java.io.BufferedInputStream; import java.io.BufferedReader; @@ -23,6 +27,7 @@ import static de.diddiz.LogBlock.config.Config.isLogging; import static de.diddiz.util.BukkitUtils.friendlyWorldname; import de.diddiz.util.ComparableVersion; import java.util.regex.Pattern; + import static org.bukkit.Bukkit.getLogger; class Updater { @@ -413,13 +418,14 @@ class Updater { if (configVersion.compareTo(new ComparableVersion("1.13.0")) < 0) { getLogger().info("Updating tables to 1.13.0 ..."); try { - MaterialUpdater materialUpdater = null; - checkTables(); // we need to create the tables first + MaterialUpdater1_13 materialUpdater = new MaterialUpdater1_13(logblock); getLogger().info("Convertig BlockId to BlockData. This can take a while ..."); final Connection conn = logblock.getConnection(); conn.setAutoCommit(false); final Statement st = conn.createStatement(); for (final WorldConfig wcfg : getLoggedWorlds()) { + getLogger().info("Processing world " + wcfg.world + "..."); + getLogger().info("Processing block changes..."); boolean hadRow = true; int rowsToConvert = 0; int done = 0; @@ -429,75 +435,187 @@ class Updater { rowsToConvert = rs.getInt(1); getLogger().info("Converting " + rowsToConvert + " entries in " + wcfg.table); } + rs.close(); + + PreparedStatement deleteStatement = conn.prepareStatement("DELETE FROM `" + wcfg.table + "` WHERE id = ?"); + PreparedStatement insertStatement = conn.prepareStatement("INSERT INTO `" + wcfg.table + "-blocks` (id, date, playerid, replaced, replacedData, type, typeData, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); + + while (hadRow) { + hadRow = false; + ResultSet entries = st.executeQuery("SELECT id, date, playerid, replaced, type, data, x, y, z FROM `" + wcfg.table + "` ORDER BY id ASC LIMIT 10000"); + while (entries.next()) { + hadRow = true; + int id = entries.getInt("id"); + Timestamp date = entries.getTimestamp("date"); + int playerid = entries.getInt("playerid"); + int replaced = entries.getInt("replaced"); + int type = entries.getInt("type"); + int data = entries.getInt("data"); + int x = entries.getInt("x"); + int y = entries.getInt("y"); + int z = entries.getInt("z"); + if (data == 16) { + data = 0; + } + + try { + String replacedBlockData = materialUpdater.getBlockData(replaced, data).getAsString(); + String setBlockData = materialUpdater.getBlockData(type, data).getAsString(); + + int newReplacedId = MaterialConverter.getOrAddMaterialId(replacedBlockData); + int newReplacedData = MaterialConverter.getOrAddBlockStateId(replacedBlockData); + + int newSetId = MaterialConverter.getOrAddMaterialId(setBlockData); + int newSetData = MaterialConverter.getOrAddBlockStateId(setBlockData); + + insertStatement.setInt(1, id); + insertStatement.setTimestamp(2, date); + insertStatement.setInt(3, playerid); + insertStatement.setInt(4, newReplacedId); + insertStatement.setInt(5, newReplacedData); + insertStatement.setInt(6, newSetId); + insertStatement.setInt(7, newSetData); + insertStatement.setInt(8, x); + insertStatement.setInt(9, y); + insertStatement.setInt(10, z); + insertStatement.addBatch(); + } catch (Exception e) { + getLogger().info("Exception in entry " + id + " (" + replaced + ":" + data + "->" + type + ":" + data + "): " + e.getMessage()); + } + deleteStatement.setInt(1, id); + deleteStatement.addBatch(); + + done++; + } + entries.close(); + if (hadRow) { + insertStatement.executeBatch(); + deleteStatement.executeBatch(); + } + conn.commit(); + logblock.getConsumer().run(); // force a consumer run to save new material mappings + getLogger().info("Done: " + done + "/" + rowsToConvert + " (" + (rowsToConvert > 0 ? (done * 100 / rowsToConvert) : 100) + "%)"); + } + insertStatement.close(); + deleteStatement.close(); } catch (SQLException e) { getLogger().info("Could not convert " + wcfg.table + ": " + e.getMessage()); - continue; } - PreparedStatement deleteStatement = conn.prepareStatement("DELETE FROM `" + wcfg.table + "` WHERE id = ?"); - PreparedStatement insertStatement = conn.prepareStatement("INSERT INTO `" + wcfg.table + "-blocks` (id, date, playerid, replaced, replacedData, type, typeData, x, y, z) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS); - - while (hadRow) { - hadRow = false; - ResultSet entries = st.executeQuery("SELECT id, date, playerid, replaced, type, data, x, y, z FROM `" + wcfg.table + "` ORDER BY id ASC LIMIT 10000"); - while (entries.next()) { - hadRow = true; - int id = entries.getInt("id"); - Timestamp date = entries.getTimestamp("date"); - int playerid = entries.getInt("playerid"); - int replaced = entries.getInt("replaced"); - int type = entries.getInt("type"); - int data = entries.getInt("data"); - int x = entries.getInt("x"); - int y = entries.getInt("y"); - int z = entries.getInt("z"); - if (data == 16) { - data = 0; - } - - if (materialUpdater == null) { - materialUpdater = new MaterialUpdater(logblock); - } - try { - String replacedBlockData = materialUpdater.getBlockData(replaced, data).getAsString(); - String setBlockData = materialUpdater.getBlockData(type, data).getAsString(); - - int newReplacedId = MaterialConverter.getOrAddMaterialId(replacedBlockData); - int newReplacedData = MaterialConverter.getOrAddBlockStateId(replacedBlockData); - - int newSetId = MaterialConverter.getOrAddMaterialId(setBlockData); - int newSetData = MaterialConverter.getOrAddBlockStateId(setBlockData); - - insertStatement.setInt(1, id); - insertStatement.setTimestamp(2, date); - insertStatement.setInt(3, playerid); - insertStatement.setInt(4, newReplacedId); - insertStatement.setInt(5, newReplacedData); - insertStatement.setInt(6, newSetId); - insertStatement.setInt(7, newSetData); - insertStatement.setInt(8, x); - insertStatement.setInt(9, y); - insertStatement.setInt(10, z); - insertStatement.addBatch(); - } catch (Exception e) { - getLogger().info("Exception in entry " + id + " (" + replaced + ":" + data + "->" + type + ":" + data + "): " + e.getMessage()); - } - deleteStatement.setInt(1, id); - deleteStatement.addBatch(); - - done++; + getLogger().info("Processing chests..."); + rowsToConvert = 0; + done = 0; + try { + ResultSet rs = st.executeQuery("SELECT count(*) as rowcount FROM `" + wcfg.table + "-chest`"); + if (rs.next()) { + rowsToConvert = rs.getInt(1); + getLogger().info("Converting " + rowsToConvert + " entries in " + wcfg.table + "-chest"); } - if (hadRow) { - insertStatement.executeBatch(); - deleteStatement.executeBatch(); + rs.close(); + + PreparedStatement insertChestData = conn.prepareStatement("INSERT INTO `" + wcfg.table + "-chestdata` (id, item, itemremove) VALUES (?, ?, ?)"); + PreparedStatement deleteChest = conn.prepareStatement("DELETE FROM `" + wcfg.table + "-chest` WHERE id = ?"); + while (true) { + rs = st.executeQuery("SELECT id, itemtype, itemamount, itemdata FROM `" + wcfg.table + "-chest` ORDER BY id ASC LIMIT 10000"); + boolean anyRow = false; + while (rs.next()) { + anyRow = true; + int id = rs.getInt("id"); + int itemtype = rs.getInt("itemtype"); + int itemdata = rs.getInt("itemdata"); + int amount = rs.getInt("itemamount"); + Material weaponMaterial = materialUpdater.getMaterial(itemtype, itemdata); + if (weaponMaterial == null) { + weaponMaterial = Material.AIR; + } + ItemStack stack = weaponMaterial.getMaxDurability() > 0 ? new ItemStack(weaponMaterial, Math.abs(amount), (short)itemdata) : new ItemStack(weaponMaterial, Math.abs(amount)); + insertChestData.setInt(1, id); + insertChestData.setBytes(2, Utils.saveItemStack(stack)); + insertChestData.setInt(3, amount >= 0 ? 0 : 1); + insertChestData.addBatch(); + + deleteChest.setInt(1, id); + deleteChest.addBatch(); + done++; + } + rs.close(); + if (!anyRow) { + break; + } + insertChestData.executeBatch(); + deleteChest.executeBatch(); + conn.commit(); + getLogger().info("Done: " + done + "/" + rowsToConvert + " (" + (rowsToConvert > 0 ? (done * 100 / rowsToConvert) : 100) + "%)"); + } + insertChestData.close(); + deleteChest.close(); + } catch (SQLException e) { + getLogger().info("Could not convert " + wcfg.table + "-chest: " + e.getMessage()); + } + + if (wcfg.isLogging(Logging.KILL)) { + getLogger().info("Processing kills..."); + rowsToConvert = 0; + done = 0; + try { + ResultSet rs = st.executeQuery("SELECT count(*) as rowcount FROM `" + wcfg.table + "-kills`"); + if (rs.next()) { + rowsToConvert = rs.getInt(1); + getLogger().info("Converting " + rowsToConvert + " entries in " + wcfg.table + "-kills"); + } + rs.close(); + + PreparedStatement updateWeaponStatement = conn.prepareStatement("UPDATE `" + wcfg.table + "`-kills SET weapon = ? WHERE id = ?"); + for (int start = 0;; start += 10000) { + rs = st.executeQuery("SELECT id, weapon FROM `" + wcfg.table + "-kills` ORDER BY id ASC LIMIT " + start + ",10000"); + boolean anyUpdate = false; + boolean anyRow = false; + while (rs.next()) { + anyRow = true; + int id = rs.getInt("id"); + int weapon = rs.getInt("weapon"); + Material weaponMaterial = materialUpdater.getMaterial(weapon, 0); + if (weaponMaterial == null) { + weaponMaterial = Material.AIR; + } + int newWeapon = MaterialConverter.getOrAddMaterialId(weaponMaterial.getKey()); + if (newWeapon != weapon) { + anyUpdate = true; + updateWeaponStatement.setInt(1, newWeapon); + updateWeaponStatement.setInt(2, id); + updateWeaponStatement.addBatch(); + } + done++; + } + rs.close(); + if (anyUpdate) { + updateWeaponStatement.executeBatch(); + conn.commit(); + logblock.getConsumer().run(); // force a consumer run to save new material mappings + } + getLogger().info("Done: " + done + "/" + rowsToConvert + " (" + (rowsToConvert > 0 ? (done * 100 / rowsToConvert) : 100) + "%)"); + if (!anyRow) { + break; + } + } + updateWeaponStatement.close(); + } catch (SQLException e) { + getLogger().info("Could not convert " + wcfg.table + "-kills: " + e.getMessage()); } - conn.commit(); - logblock.getConsumer().run(); // force a consumer run - getLogger().info(done + "/" + rowsToConvert); } } st.close(); conn.close(); + + getLogger().info("Updating config to 1.13.0 ..."); + config.set("logging.hiddenBlocks", materialUpdater.convertMaterials(config.getStringList("logging.hiddenBlocks"))); + config.set("rollback.dontRollback", materialUpdater.convertMaterials(config.getStringList("rollback.dontRollback"))); + config.set("rollback.replaceAnyway", materialUpdater.convertMaterials(config.getStringList("rollback.replaceAnyway"))); + final ConfigurationSection toolsSec = config.getConfigurationSection("tools"); + for (final String toolName : toolsSec.getKeys(false)) { + final ConfigurationSection tSec = toolsSec.getConfigurationSection(toolName); + tSec.set("item", materialUpdater.convertMaterial(tSec.getString("item", "OAK_LOG"))); + } } catch (final SQLException | IOException ex) { Bukkit.getLogger().log(Level.SEVERE, "[Updater] Error: ", ex); return false; @@ -597,40 +715,141 @@ class Updater { } } - public static class MaterialUpdater { + public static class MaterialUpdater1_13 { BlockData[][] blockDataMapping; - public MaterialUpdater(LogBlock plugin) throws IOException { + Material[][] itemMapping = new Material[10][]; + public MaterialUpdater1_13(LogBlock plugin) throws IOException { blockDataMapping = new BlockData[256][16]; - JarFile file = new JarFile(plugin.getFile()); - BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(file.getInputStream(file.getJarEntry("blockdata.txt"))), "UTF-8")); - while (true) { - String line = reader.readLine(); - if (line == null) { - break; - } - int splitter1 = line.indexOf(":"); - int splitter2 = line.indexOf(","); - if (splitter1 >= 0 && splitter2 >= 0) { - int blockid = Integer.parseInt(line.substring(0, splitter1)); - int blockdata = Integer.parseInt(line.substring(splitter1 + 1, splitter2)); - BlockData newBlockData = Bukkit.createBlockData(line.substring(splitter2 + 1)); + try (JarFile file = new JarFile(plugin.getFile())) { + BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(file.getInputStream(file.getJarEntry("blockdata.txt"))), "UTF-8")); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + int splitter1 = line.indexOf(":"); + int splitter2 = line.indexOf(","); + if (splitter1 >= 0 && splitter2 >= 0) { + int blockid = Integer.parseInt(line.substring(0, splitter1)); + int blockdata = Integer.parseInt(line.substring(splitter1 + 1, splitter2)); + BlockData newBlockData = Bukkit.createBlockData(line.substring(splitter2 + 1)); - if (blockdata == 0) { - for (int i = 0; i < 16; i++) { - if (blockDataMapping[blockid][i] == null) { - blockDataMapping[blockid][i] = newBlockData; + if (blockdata == 0) { + for (int i = 0; i < 16; i++) { + if (blockDataMapping[blockid][i] == null) { + blockDataMapping[blockid][i] = newBlockData; + } } + } else { + blockDataMapping[blockid][blockdata] = newBlockData; } - } else { - blockDataMapping[blockid][blockdata] = newBlockData; } } + reader.close(); + + HashMap materialKeysToMaterial = new HashMap<>(); + for (Material material : Material.values()) { + materialKeysToMaterial.put(material.getKey().toString(), material); + } + + reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(file.getInputStream(file.getJarEntry("itemdata.txt"))), "UTF-8")); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + int splitter1 = line.indexOf(":"); + int splitter2 = line.indexOf(","); + if (splitter1 >= 0 && splitter2 >= 0) { + int itemid = Integer.parseInt(line.substring(0, splitter1)); + int itemdata = Integer.parseInt(line.substring(splitter1 + 1, splitter2)); + Material newMaterial = materialKeysToMaterial.get(line.substring(splitter2 + 1)); + if (newMaterial == null) { + throw new IOException("Unknown item: " + line.substring(splitter2 + 1)); + } + if (itemid >= itemMapping.length) { + itemMapping = Arrays.copyOf(itemMapping, Math.max(itemMapping.length * 3 / 2, itemid + 1)); + } + + Material[] itemValues = itemMapping[itemid]; + if (itemValues == null) { + itemValues = new Material[itemdata + 1]; + itemMapping[itemid] = itemValues; + } else if (itemValues.length <= itemdata) { + itemValues = Arrays.copyOf(itemValues, itemdata + 1); + itemMapping[itemid] = itemValues; + } + itemValues[itemdata] = newMaterial; + } + } + reader.close(); } - file.close(); } public BlockData getBlockData(int id, int data) { return id >= 0 && id < 256 && data >= 0 && data < 16 ? blockDataMapping[id][data] : null; } + + public Material getMaterial(int id, int data) { + Material[] materials = id >= 0 && id < itemMapping.length ? itemMapping[id] : null; + if (materials != null && materials.length > 0) { + if (materials[0] != null && materials[0].getMaxDurability() == 0 && data >= 0 && data < materials.length && materials[data] != null) { + return materials[data]; + } + return materials[0]; + } + return null; + } + + public Material getMaterial(String id) { + int item = 0; + int data = 0; + int seperator = id.indexOf(':'); + if (seperator < 0) { + item = Integer.parseInt(id); + } else { + item = Integer.parseInt(id.substring(0, seperator)); + data = Integer.parseInt(id.substring(seperator + 1)); + } + return getMaterial(item, data); + } + + public String convertMaterial(String oldEntry) { + if (oldEntry == null) { + return null; + } + try { + Material newMaterial = getMaterial(oldEntry); + if (newMaterial != null) { + return newMaterial.name(); + } + } catch (Exception e) { + Material newMaterial = Material.matchMaterial(oldEntry, true); + if (newMaterial != null) { + return newMaterial.name(); + } else { + newMaterial = Material.matchMaterial(oldEntry); + if (newMaterial != null) { + return newMaterial.name(); + } + } + } + return null; + } + + public List convertMaterials(Collection oldEntries) { + Set newEntries = new LinkedHashSet<>(); + for (String oldEntry : oldEntries) { + String newEntry = convertMaterial(oldEntry); + if (newEntry != null) { + newEntries.add(newEntry); + if (newEntry.equals(Material.AIR.name())) { + newEntries.add(Material.CAVE_AIR.name()); + newEntries.add(Material.VOID_AIR.name()); + } + } + } + return new ArrayList<>(newEntries); + } } } diff --git a/src/main/resources/itemdata.txt b/src/main/resources/itemdata.txt new file mode 100644 index 0000000..44f83af --- /dev/null +++ b/src/main/resources/itemdata.txt @@ -0,0 +1,839 @@ +0:0,minecraft:air +1:0,minecraft:stone +1:1,minecraft:granite +1:2,minecraft:polished_granite +1:3,minecraft:diorite +1:4,minecraft:polished_diorite +1:5,minecraft:andesite +1:6,minecraft:polished_andesite +2:0,minecraft:grass_block +3:0,minecraft:dirt +3:1,minecraft:coarse_dirt +3:2,minecraft:podzol +4:0,minecraft:cobblestone +5:0,minecraft:oak_planks +5:1,minecraft:spruce_planks +5:2,minecraft:birch_planks +5:3,minecraft:jungle_planks +5:4,minecraft:acacia_planks +5:5,minecraft:dark_oak_planks +6:0,minecraft:oak_sapling +6:1,minecraft:spruce_sapling +6:2,minecraft:birch_sapling +6:3,minecraft:jungle_sapling +6:4,minecraft:acacia_sapling +6:5,minecraft:dark_oak_sapling +6:9,minecraft:spruce_sapling +6:10,minecraft:birch_sapling +6:11,minecraft:jungle_sapling +6:12,minecraft:acacia_sapling +6:13,minecraft:dark_oak_sapling +7:0,minecraft:bedrock +8:0,minecraft:water +9:0,minecraft:water +10:0,minecraft:lava +11:0,minecraft:lava +12:0,minecraft:sand +12:1,minecraft:red_sand +13:0,minecraft:gravel +14:0,minecraft:gold_ore +15:0,minecraft:iron_ore +16:0,minecraft:coal_ore +17:0,minecraft:oak_log +17:1,minecraft:spruce_log +17:2,minecraft:birch_log +17:3,minecraft:jungle_log +17:5,minecraft:spruce_log +17:6,minecraft:birch_log +17:7,minecraft:jungle_log +17:9,minecraft:spruce_log +17:10,minecraft:birch_log +17:11,minecraft:jungle_log +18:0,minecraft:oak_leaves +18:1,minecraft:spruce_leaves +18:2,minecraft:birch_leaves +18:3,minecraft:jungle_leaves +18:5,minecraft:spruce_leaves +18:6,minecraft:birch_leaves +18:7,minecraft:jungle_leaves +18:9,minecraft:spruce_leaves +18:10,minecraft:birch_leaves +18:11,minecraft:jungle_leaves +18:13,minecraft:spruce_leaves +18:14,minecraft:birch_leaves +18:15,minecraft:jungle_leaves +19:0,minecraft:sponge +19:1,minecraft:wet_sponge +20:0,minecraft:glass +21:0,minecraft:lapis_ore +22:0,minecraft:lapis_block +23:0,minecraft:dispenser +24:0,minecraft:sandstone +24:1,minecraft:chiseled_sandstone +24:2,minecraft:cut_sandstone +25:0,minecraft:note_block +26:0,minecraft:red_bed +27:0,minecraft:powered_rail +28:0,minecraft:detector_rail +29:0,minecraft:sticky_piston +30:0,minecraft:cobweb +31:0,minecraft:dead_bush +31:1,minecraft:grass +31:2,minecraft:fern +32:0,minecraft:dead_bush +33:0,minecraft:piston +34:0,minecraft:piston_head +35:0,minecraft:white_wool +35:1,minecraft:orange_wool +35:2,minecraft:magenta_wool +35:3,minecraft:light_blue_wool +35:4,minecraft:yellow_wool +35:5,minecraft:lime_wool +35:6,minecraft:pink_wool +35:7,minecraft:gray_wool +35:8,minecraft:light_gray_wool +35:9,minecraft:cyan_wool +35:10,minecraft:purple_wool +35:11,minecraft:blue_wool +35:12,minecraft:brown_wool +35:13,minecraft:green_wool +35:14,minecraft:red_wool +35:15,minecraft:black_wool +36:0,minecraft:moving_piston +37:0,minecraft:dandelion +38:0,minecraft:poppy +38:1,minecraft:blue_orchid +38:2,minecraft:allium +38:3,minecraft:azure_bluet +38:4,minecraft:red_tulip +38:5,minecraft:orange_tulip +38:6,minecraft:white_tulip +38:7,minecraft:pink_tulip +38:8,minecraft:oxeye_daisy +39:0,minecraft:brown_mushroom +40:0,minecraft:red_mushroom +41:0,minecraft:gold_block +42:0,minecraft:iron_block +43:0,minecraft:stone_slab +43:1,minecraft:sandstone_slab +43:2,minecraft:petrified_oak_slab +43:3,minecraft:cobblestone_slab +43:4,minecraft:brick_slab +43:5,minecraft:stone_brick_slab +43:6,minecraft:nether_brick_slab +43:7,minecraft:quartz_slab +43:8,minecraft:smooth_stone +43:9,minecraft:smooth_sandstone +43:10,minecraft:petrified_oak_slab +43:11,minecraft:cobblestone_slab +43:12,minecraft:brick_slab +43:13,minecraft:stone_brick_slab +43:14,minecraft:nether_brick_slab +43:15,minecraft:smooth_quartz +44:0,minecraft:stone_slab +44:1,minecraft:sandstone_slab +44:2,minecraft:petrified_oak_slab +44:3,minecraft:cobblestone_slab +44:4,minecraft:brick_slab +44:5,minecraft:stone_brick_slab +44:6,minecraft:nether_brick_slab +44:7,minecraft:quartz_slab +44:9,minecraft:sandstone_slab +44:10,minecraft:petrified_oak_slab +44:11,minecraft:cobblestone_slab +44:12,minecraft:brick_slab +44:13,minecraft:stone_brick_slab +44:14,minecraft:nether_brick_slab +44:15,minecraft:quartz_slab +45:0,minecraft:bricks +46:0,minecraft:tnt +47:0,minecraft:bookshelf +48:0,minecraft:mossy_cobblestone +49:0,minecraft:obsidian +50:0,minecraft:torch +50:1,minecraft:wall_torch +50:2,minecraft:wall_torch +50:3,minecraft:wall_torch +50:4,minecraft:wall_torch +51:0,minecraft:fire +52:0,minecraft:spawner +53:0,minecraft:oak_stairs +54:0,minecraft:chest +55:0,minecraft:redstone_wire +56:0,minecraft:diamond_ore +57:0,minecraft:diamond_block +58:0,minecraft:crafting_table +59:0,minecraft:wheat +60:0,minecraft:farmland +61:0,minecraft:furnace +62:0,minecraft:air +62:2,minecraft:furnace +62:3,minecraft:furnace +62:4,minecraft:furnace +62:5,minecraft:furnace +63:0,minecraft:sign +64:0,minecraft:oak_door +65:0,minecraft:ladder +66:0,minecraft:rail +67:0,minecraft:cobblestone_stairs +68:0,minecraft:air +68:2,minecraft:wall_sign +68:3,minecraft:wall_sign +68:4,minecraft:wall_sign +68:5,minecraft:wall_sign +69:0,minecraft:lever +70:0,minecraft:stone_pressure_plate +71:0,minecraft:iron_door +72:0,minecraft:oak_pressure_plate +73:0,minecraft:redstone_ore +74:0,minecraft:redstone_ore +75:0,minecraft:air +75:1,minecraft:redstone_wall_torch +75:2,minecraft:redstone_wall_torch +75:3,minecraft:redstone_wall_torch +75:4,minecraft:redstone_wall_torch +75:5,minecraft:redstone_torch +76:0,minecraft:redstone_torch +76:1,minecraft:redstone_wall_torch +76:2,minecraft:redstone_wall_torch +76:3,minecraft:redstone_wall_torch +76:4,minecraft:redstone_wall_torch +77:0,minecraft:stone_button +78:0,minecraft:snow +79:0,minecraft:ice +80:0,minecraft:snow_block +81:0,minecraft:cactus +82:0,minecraft:clay +83:0,minecraft:sugar_cane +84:0,minecraft:jukebox +85:0,minecraft:oak_fence +86:0,minecraft:carved_pumpkin +87:0,minecraft:netherrack +88:0,minecraft:soul_sand +89:0,minecraft:glowstone +90:0,minecraft:nether_portal +91:0,minecraft:jack_o_lantern +92:0,minecraft:cake +93:0,minecraft:repeater +94:0,minecraft:repeater +95:0,minecraft:white_stained_glass +95:1,minecraft:orange_stained_glass +95:2,minecraft:magenta_stained_glass +95:3,minecraft:light_blue_stained_glass +95:4,minecraft:yellow_stained_glass +95:5,minecraft:lime_stained_glass +95:6,minecraft:pink_stained_glass +95:7,minecraft:gray_stained_glass +95:8,minecraft:light_gray_stained_glass +95:9,minecraft:cyan_stained_glass +95:10,minecraft:purple_stained_glass +95:11,minecraft:blue_stained_glass +95:12,minecraft:brown_stained_glass +95:13,minecraft:green_stained_glass +95:14,minecraft:red_stained_glass +95:15,minecraft:black_stained_glass +96:0,minecraft:oak_trapdoor +97:0,minecraft:infested_stone +97:1,minecraft:infested_cobblestone +97:2,minecraft:infested_stone_bricks +97:3,minecraft:infested_mossy_stone_bricks +97:4,minecraft:infested_cracked_stone_bricks +97:5,minecraft:infested_chiseled_stone_bricks +98:0,minecraft:stone_bricks +98:1,minecraft:mossy_stone_bricks +98:2,minecraft:cracked_stone_bricks +98:3,minecraft:chiseled_stone_bricks +99:0,minecraft:brown_mushroom_block +99:10,minecraft:mushroom_stem +99:15,minecraft:mushroom_stem +100:0,minecraft:red_mushroom_block +100:10,minecraft:mushroom_stem +100:15,minecraft:mushroom_stem +101:0,minecraft:iron_bars +102:0,minecraft:glass_pane +103:0,minecraft:melon +104:0,minecraft:pumpkin_stem +105:0,minecraft:melon_stem +106:0,minecraft:vine +107:0,minecraft:oak_fence_gate +108:0,minecraft:brick_stairs +109:0,minecraft:stone_brick_stairs +110:0,minecraft:mycelium +111:0,minecraft:lily_pad +112:0,minecraft:nether_bricks +113:0,minecraft:nether_brick_fence +114:0,minecraft:nether_brick_stairs +115:0,minecraft:nether_wart +116:0,minecraft:enchanting_table +117:0,minecraft:brewing_stand +118:0,minecraft:cauldron +119:0,minecraft:end_portal +120:0,minecraft:end_portal_frame +121:0,minecraft:end_stone +122:0,minecraft:dragon_egg +123:0,minecraft:redstone_lamp +124:0,minecraft:redstone_lamp +125:0,minecraft:oak_slab +125:1,minecraft:spruce_slab +125:2,minecraft:birch_slab +125:3,minecraft:jungle_slab +125:4,minecraft:acacia_slab +125:5,minecraft:dark_oak_slab +126:0,minecraft:oak_slab +126:1,minecraft:spruce_slab +126:2,minecraft:birch_slab +126:3,minecraft:jungle_slab +126:4,minecraft:acacia_slab +126:5,minecraft:dark_oak_slab +126:9,minecraft:spruce_slab +126:10,minecraft:birch_slab +126:11,minecraft:jungle_slab +126:12,minecraft:acacia_slab +126:13,minecraft:dark_oak_slab +127:0,minecraft:cocoa +128:0,minecraft:sandstone_stairs +129:0,minecraft:emerald_ore +130:0,minecraft:ender_chest +131:0,minecraft:tripwire_hook +132:0,minecraft:tripwire +133:0,minecraft:emerald_block +134:0,minecraft:spruce_stairs +135:0,minecraft:birch_stairs +136:0,minecraft:jungle_stairs +137:0,minecraft:command_block +138:0,minecraft:beacon +139:0,minecraft:cobblestone_wall +139:1,minecraft:mossy_cobblestone_wall +140:0,minecraft:potted_cactus +141:0,minecraft:carrots +142:0,minecraft:potatoes +143:0,minecraft:oak_button +144:0,minecraft:air +145:0,minecraft:anvil +145:4,minecraft:chipped_anvil +145:5,minecraft:chipped_anvil +145:6,minecraft:chipped_anvil +145:7,minecraft:chipped_anvil +145:8,minecraft:damaged_anvil +145:9,minecraft:damaged_anvil +145:10,minecraft:damaged_anvil +145:11,minecraft:damaged_anvil +146:0,minecraft:trapped_chest +147:0,minecraft:light_weighted_pressure_plate +148:0,minecraft:heavy_weighted_pressure_plate +149:0,minecraft:comparator +150:0,minecraft:comparator +151:0,minecraft:daylight_detector +152:0,minecraft:redstone_block +153:0,minecraft:nether_quartz_ore +154:0,minecraft:hopper +155:0,minecraft:quartz_block +155:1,minecraft:chiseled_quartz_block +155:2,minecraft:quartz_pillar +155:3,minecraft:quartz_pillar +155:4,minecraft:quartz_pillar +156:0,minecraft:quartz_stairs +157:0,minecraft:activator_rail +158:0,minecraft:dropper +159:0,minecraft:white_terracotta +159:1,minecraft:orange_terracotta +159:2,minecraft:magenta_terracotta +159:3,minecraft:light_blue_terracotta +159:4,minecraft:yellow_terracotta +159:5,minecraft:lime_terracotta +159:6,minecraft:pink_terracotta +159:7,minecraft:gray_terracotta +159:8,minecraft:light_gray_terracotta +159:9,minecraft:cyan_terracotta +159:10,minecraft:purple_terracotta +159:11,minecraft:blue_terracotta +159:12,minecraft:brown_terracotta +159:13,minecraft:green_terracotta +159:14,minecraft:red_terracotta +159:15,minecraft:black_terracotta +160:0,minecraft:white_stained_glass_pane +160:1,minecraft:orange_stained_glass_pane +160:2,minecraft:magenta_stained_glass_pane +160:3,minecraft:light_blue_stained_glass_pane +160:4,minecraft:yellow_stained_glass_pane +160:5,minecraft:lime_stained_glass_pane +160:6,minecraft:pink_stained_glass_pane +160:7,minecraft:gray_stained_glass_pane +160:8,minecraft:light_gray_stained_glass_pane +160:9,minecraft:cyan_stained_glass_pane +160:10,minecraft:purple_stained_glass_pane +160:11,minecraft:blue_stained_glass_pane +160:12,minecraft:brown_stained_glass_pane +160:13,minecraft:green_stained_glass_pane +160:14,minecraft:red_stained_glass_pane +160:15,minecraft:black_stained_glass_pane +161:0,minecraft:acacia_leaves +161:1,minecraft:dark_oak_leaves +161:5,minecraft:dark_oak_leaves +161:9,minecraft:dark_oak_leaves +161:13,minecraft:dark_oak_leaves +162:0,minecraft:acacia_log +162:1,minecraft:dark_oak_log +162:5,minecraft:dark_oak_log +162:9,minecraft:dark_oak_log +163:0,minecraft:acacia_stairs +164:0,minecraft:dark_oak_stairs +165:0,minecraft:slime_block +166:0,minecraft:barrier +167:0,minecraft:iron_trapdoor +168:0,minecraft:prismarine +168:1,minecraft:prismarine_bricks +168:2,minecraft:dark_prismarine +169:0,minecraft:sea_lantern +170:0,minecraft:hay_block +171:0,minecraft:white_carpet +171:1,minecraft:orange_carpet +171:2,minecraft:magenta_carpet +171:3,minecraft:light_blue_carpet +171:4,minecraft:yellow_carpet +171:5,minecraft:lime_carpet +171:6,minecraft:pink_carpet +171:7,minecraft:gray_carpet +171:8,minecraft:light_gray_carpet +171:9,minecraft:cyan_carpet +171:10,minecraft:purple_carpet +171:11,minecraft:blue_carpet +171:12,minecraft:brown_carpet +171:13,minecraft:green_carpet +171:14,minecraft:red_carpet +171:15,minecraft:black_carpet +172:0,minecraft:terracotta +173:0,minecraft:coal_block +174:0,minecraft:packed_ice +175:0,minecraft:sunflower +175:1,minecraft:lilac +175:2,minecraft:tall_grass +175:3,minecraft:large_fern +175:4,minecraft:rose_bush +175:5,minecraft:peony +175:8,minecraft:peony +175:9,minecraft:peony +175:10,minecraft:peony +175:11,minecraft:peony +176:0,minecraft:white_banner +177:0,minecraft:air +177:2,minecraft:white_wall_banner +177:3,minecraft:white_wall_banner +177:4,minecraft:white_wall_banner +177:5,minecraft:white_wall_banner +178:0,minecraft:daylight_detector +179:0,minecraft:red_sandstone +179:1,minecraft:chiseled_red_sandstone +179:2,minecraft:cut_red_sandstone +180:0,minecraft:red_sandstone_stairs +181:0,minecraft:red_sandstone_slab +181:8,minecraft:smooth_red_sandstone +182:0,minecraft:red_sandstone_slab +183:0,minecraft:spruce_fence_gate +184:0,minecraft:birch_fence_gate +185:0,minecraft:jungle_fence_gate +186:0,minecraft:dark_oak_fence_gate +187:0,minecraft:acacia_fence_gate +188:0,minecraft:spruce_fence +189:0,minecraft:birch_fence +190:0,minecraft:jungle_fence +191:0,minecraft:dark_oak_fence +192:0,minecraft:acacia_fence +193:0,minecraft:spruce_door +194:0,minecraft:birch_door +195:0,minecraft:jungle_door +196:0,minecraft:acacia_door +197:0,minecraft:dark_oak_door +198:0,minecraft:end_rod +199:0,minecraft:chorus_plant +200:0,minecraft:chorus_flower +201:0,minecraft:purpur_block +202:0,minecraft:purpur_pillar +203:0,minecraft:purpur_stairs +204:0,minecraft:purpur_slab +205:0,minecraft:purpur_slab +206:0,minecraft:end_stone_bricks +207:0,minecraft:beetroots +208:0,minecraft:grass_path +209:0,minecraft:end_gateway +210:0,minecraft:repeating_command_block +211:0,minecraft:chain_command_block +212:0,minecraft:frosted_ice +213:0,minecraft:magma_block +214:0,minecraft:nether_wart_block +215:0,minecraft:red_nether_bricks +216:0,minecraft:bone_block +217:0,minecraft:structure_void +218:0,minecraft:observer +219:0,minecraft:white_shulker_box +220:0,minecraft:orange_shulker_box +221:0,minecraft:magenta_shulker_box +222:0,minecraft:light_blue_shulker_box +223:0,minecraft:yellow_shulker_box +224:0,minecraft:lime_shulker_box +225:0,minecraft:pink_shulker_box +226:0,minecraft:gray_shulker_box +227:0,minecraft:light_gray_shulker_box +228:0,minecraft:cyan_shulker_box +229:0,minecraft:purple_shulker_box +230:0,minecraft:blue_shulker_box +231:0,minecraft:brown_shulker_box +232:0,minecraft:green_shulker_box +233:0,minecraft:red_shulker_box +234:0,minecraft:black_shulker_box +235:0,minecraft:white_glazed_terracotta +236:0,minecraft:orange_glazed_terracotta +237:0,minecraft:magenta_glazed_terracotta +238:0,minecraft:light_blue_glazed_terracotta +239:0,minecraft:yellow_glazed_terracotta +240:0,minecraft:lime_glazed_terracotta +241:0,minecraft:pink_glazed_terracotta +242:0,minecraft:gray_glazed_terracotta +243:0,minecraft:light_gray_glazed_terracotta +244:0,minecraft:cyan_glazed_terracotta +245:0,minecraft:purple_glazed_terracotta +246:0,minecraft:blue_glazed_terracotta +247:0,minecraft:brown_glazed_terracotta +248:0,minecraft:green_glazed_terracotta +249:0,minecraft:red_glazed_terracotta +250:0,minecraft:black_glazed_terracotta +251:0,minecraft:white_concrete +251:1,minecraft:orange_concrete +251:2,minecraft:magenta_concrete +251:3,minecraft:light_blue_concrete +251:4,minecraft:yellow_concrete +251:5,minecraft:lime_concrete +251:6,minecraft:pink_concrete +251:7,minecraft:gray_concrete +251:8,minecraft:light_gray_concrete +251:9,minecraft:cyan_concrete +251:10,minecraft:purple_concrete +251:11,minecraft:blue_concrete +251:12,minecraft:brown_concrete +251:13,minecraft:green_concrete +251:14,minecraft:red_concrete +251:15,minecraft:black_concrete +252:0,minecraft:white_concrete_powder +252:1,minecraft:orange_concrete_powder +252:2,minecraft:magenta_concrete_powder +252:3,minecraft:light_blue_concrete_powder +252:4,minecraft:yellow_concrete_powder +252:5,minecraft:lime_concrete_powder +252:6,minecraft:pink_concrete_powder +252:7,minecraft:gray_concrete_powder +252:8,minecraft:light_gray_concrete_powder +252:9,minecraft:cyan_concrete_powder +252:10,minecraft:purple_concrete_powder +252:11,minecraft:blue_concrete_powder +252:12,minecraft:brown_concrete_powder +252:13,minecraft:green_concrete_powder +252:14,minecraft:red_concrete_powder +252:15,minecraft:black_concrete_powder +255:0,minecraft:structure_block +256:0,minecraft:iron_shovel +257:0,minecraft:iron_pickaxe +258:0,minecraft:iron_axe +259:0,minecraft:flint_and_steel +260:0,minecraft:apple +261:0,minecraft:bow +262:0,minecraft:arrow +263:0,minecraft:coal +263:1,minecraft:charcoal +264:0,minecraft:diamond +265:0,minecraft:iron_ingot +266:0,minecraft:gold_ingot +267:0,minecraft:iron_sword +268:0,minecraft:wooden_sword +269:0,minecraft:wooden_shovel +270:0,minecraft:wooden_pickaxe +271:0,minecraft:wooden_axe +272:0,minecraft:stone_sword +273:0,minecraft:stone_shovel +274:0,minecraft:stone_pickaxe +275:0,minecraft:stone_axe +276:0,minecraft:diamond_sword +277:0,minecraft:diamond_shovel +278:0,minecraft:diamond_pickaxe +279:0,minecraft:diamond_axe +280:0,minecraft:stick +281:0,minecraft:bowl +282:0,minecraft:mushroom_stew +283:0,minecraft:golden_sword +284:0,minecraft:golden_shovel +285:0,minecraft:golden_pickaxe +286:0,minecraft:golden_axe +287:0,minecraft:string +288:0,minecraft:feather +289:0,minecraft:gunpowder +290:0,minecraft:wooden_hoe +291:0,minecraft:stone_hoe +292:0,minecraft:iron_hoe +293:0,minecraft:diamond_hoe +294:0,minecraft:golden_hoe +295:0,minecraft:wheat_seeds +296:0,minecraft:wheat +297:0,minecraft:bread +298:0,minecraft:leather_helmet +299:0,minecraft:leather_chestplate +300:0,minecraft:leather_leggings +301:0,minecraft:leather_boots +302:0,minecraft:chainmail_helmet +303:0,minecraft:chainmail_chestplate +304:0,minecraft:chainmail_leggings +305:0,minecraft:chainmail_boots +306:0,minecraft:iron_helmet +307:0,minecraft:iron_chestplate +308:0,minecraft:iron_leggings +309:0,minecraft:iron_boots +310:0,minecraft:diamond_helmet +311:0,minecraft:diamond_chestplate +312:0,minecraft:diamond_leggings +313:0,minecraft:diamond_boots +314:0,minecraft:golden_helmet +315:0,minecraft:golden_chestplate +316:0,minecraft:golden_leggings +317:0,minecraft:golden_boots +318:0,minecraft:flint +319:0,minecraft:porkchop +320:0,minecraft:cooked_porkchop +321:0,minecraft:painting +322:0,minecraft:golden_apple +322:1,minecraft:enchanted_golden_apple +323:0,minecraft:sign +324:0,minecraft:oak_door +325:0,minecraft:bucket +326:0,minecraft:water_bucket +327:0,minecraft:lava_bucket +328:0,minecraft:minecart +329:0,minecraft:saddle +330:0,minecraft:iron_door +331:0,minecraft:redstone +332:0,minecraft:snowball +333:0,minecraft:oak_boat +334:0,minecraft:leather +335:0,minecraft:milk_bucket +336:0,minecraft:brick +337:0,minecraft:clay_ball +338:0,minecraft:sugar_cane +339:0,minecraft:paper +340:0,minecraft:book +341:0,minecraft:slime_ball +342:0,minecraft:chest_minecart +343:0,minecraft:furnace_minecart +344:0,minecraft:egg +345:0,minecraft:compass +346:0,minecraft:fishing_rod +347:0,minecraft:clock +348:0,minecraft:glowstone_dust +349:0,minecraft:cod +349:1,minecraft:salmon +349:2,minecraft:tropical_fish +349:3,minecraft:pufferfish +350:0,minecraft:cooked_cod +350:1,minecraft:cooked_salmon +351:0,minecraft:ink_sac +351:1,minecraft:rose_red +351:2,minecraft:cactus_green +351:3,minecraft:cocoa_beans +351:4,minecraft:lapis_lazuli +351:5,minecraft:purple_dye +351:6,minecraft:cyan_dye +351:7,minecraft:light_gray_dye +351:8,minecraft:gray_dye +351:9,minecraft:pink_dye +351:10,minecraft:lime_dye +351:11,minecraft:dandelion_yellow +351:12,minecraft:light_blue_dye +351:13,minecraft:magenta_dye +351:14,minecraft:orange_dye +351:15,minecraft:bone_meal +352:0,minecraft:bone +353:0,minecraft:sugar +354:0,minecraft:cake +355:0,minecraft:red_bed +355:1,minecraft:orange_bed +355:2,minecraft:magenta_bed +355:3,minecraft:light_blue_bed +355:4,minecraft:yellow_bed +355:5,minecraft:lime_bed +355:6,minecraft:pink_bed +355:7,minecraft:gray_bed +355:8,minecraft:light_gray_bed +355:9,minecraft:cyan_bed +355:10,minecraft:purple_bed +355:11,minecraft:blue_bed +355:12,minecraft:brown_bed +355:13,minecraft:green_bed +355:15,minecraft:black_bed +356:0,minecraft:repeater +357:0,minecraft:cookie +358:0,minecraft:filled_map +359:0,minecraft:shears +360:0,minecraft:melon_slice +361:0,minecraft:pumpkin_seeds +362:0,minecraft:melon_seeds +363:0,minecraft:beef +364:0,minecraft:cooked_beef +365:0,minecraft:chicken +366:0,minecraft:cooked_chicken +367:0,minecraft:rotten_flesh +368:0,minecraft:ender_pearl +369:0,minecraft:blaze_rod +370:0,minecraft:ghast_tear +371:0,minecraft:gold_nugget +372:0,minecraft:nether_wart +373:0,minecraft:potion +374:0,minecraft:glass_bottle +375:0,minecraft:spider_eye +376:0,minecraft:fermented_spider_eye +377:0,minecraft:blaze_powder +378:0,minecraft:magma_cream +379:0,minecraft:brewing_stand +380:0,minecraft:cauldron +381:0,minecraft:ender_eye +382:0,minecraft:glistering_melon_slice +383:0,minecraft:pig_spawn_egg +383:4,minecraft:elder_guardian_spawn_egg +383:5,minecraft:wither_skeleton_spawn_egg +383:6,minecraft:stray_spawn_egg +383:23,minecraft:husk_spawn_egg +383:27,minecraft:zombie_villager_spawn_egg +383:28,minecraft:skeleton_horse_spawn_egg +383:29,minecraft:zombie_horse_spawn_egg +383:31,minecraft:donkey_spawn_egg +383:32,minecraft:mule_spawn_egg +383:34,minecraft:evoker_spawn_egg +383:35,minecraft:vex_spawn_egg +383:36,minecraft:vindicator_spawn_egg +383:50,minecraft:creeper_spawn_egg +383:51,minecraft:skeleton_spawn_egg +383:52,minecraft:spider_spawn_egg +383:54,minecraft:zombie_spawn_egg +383:55,minecraft:slime_spawn_egg +383:56,minecraft:ghast_spawn_egg +383:57,minecraft:zombie_pigman_spawn_egg +383:58,minecraft:enderman_spawn_egg +383:59,minecraft:cave_spider_spawn_egg +383:60,minecraft:silverfish_spawn_egg +383:61,minecraft:blaze_spawn_egg +383:62,minecraft:magma_cube_spawn_egg +383:65,minecraft:bat_spawn_egg +383:66,minecraft:witch_spawn_egg +383:67,minecraft:endermite_spawn_egg +383:68,minecraft:guardian_spawn_egg +383:69,minecraft:shulker_spawn_egg +383:91,minecraft:sheep_spawn_egg +383:92,minecraft:cow_spawn_egg +383:93,minecraft:chicken_spawn_egg +383:94,minecraft:squid_spawn_egg +383:95,minecraft:wolf_spawn_egg +383:96,minecraft:mooshroom_spawn_egg +383:98,minecraft:ocelot_spawn_egg +383:100,minecraft:horse_spawn_egg +383:101,minecraft:rabbit_spawn_egg +383:102,minecraft:polar_bear_spawn_egg +383:103,minecraft:llama_spawn_egg +383:105,minecraft:parrot_spawn_egg +383:120,minecraft:villager_spawn_egg +383:255,minecraft:turtle_spawn_egg +384:0,minecraft:experience_bottle +385:0,minecraft:fire_charge +386:0,minecraft:writable_book +387:0,minecraft:written_book +388:0,minecraft:emerald +389:0,minecraft:item_frame +390:0,minecraft:flower_pot +391:0,minecraft:carrot +392:0,minecraft:potato +393:0,minecraft:baked_potato +394:0,minecraft:poisonous_potato +395:0,minecraft:map +396:0,minecraft:golden_carrot +397:0,minecraft:skeleton_skull +397:1,minecraft:wither_skeleton_skull +397:2,minecraft:zombie_head +397:3,minecraft:player_head +397:4,minecraft:creeper_head +397:5,minecraft:dragon_head +398:0,minecraft:carrot_on_a_stick +399:0,minecraft:nether_star +400:0,minecraft:pumpkin_pie +401:0,minecraft:firework_rocket +402:0,minecraft:firework_star +403:0,minecraft:enchanted_book +404:0,minecraft:comparator +405:0,minecraft:nether_brick +406:0,minecraft:quartz +407:0,minecraft:tnt_minecart +408:0,minecraft:hopper_minecart +409:0,minecraft:prismarine_shard +410:0,minecraft:prismarine_crystals +411:0,minecraft:rabbit +412:0,minecraft:cooked_rabbit +413:0,minecraft:rabbit_stew +414:0,minecraft:rabbit_foot +415:0,minecraft:rabbit_hide +416:0,minecraft:armor_stand +417:0,minecraft:iron_horse_armor +418:0,minecraft:golden_horse_armor +419:0,minecraft:diamond_horse_armor +420:0,minecraft:lead +421:0,minecraft:name_tag +422:0,minecraft:command_block_minecart +423:0,minecraft:mutton +424:0,minecraft:cooked_mutton +425:0,minecraft:black_banner +425:1,minecraft:red_banner +425:2,minecraft:green_banner +425:3,minecraft:brown_banner +425:4,minecraft:blue_banner +425:5,minecraft:purple_banner +425:6,minecraft:cyan_banner +425:7,minecraft:light_gray_banner +425:8,minecraft:gray_banner +425:9,minecraft:pink_banner +425:10,minecraft:lime_banner +425:11,minecraft:yellow_banner +425:12,minecraft:light_blue_banner +425:13,minecraft:magenta_banner +425:14,minecraft:orange_banner +425:15,minecraft:white_banner +426:0,minecraft:end_crystal +427:0,minecraft:spruce_door +428:0,minecraft:birch_door +429:0,minecraft:jungle_door +430:0,minecraft:acacia_door +431:0,minecraft:dark_oak_door +432:0,minecraft:chorus_fruit +433:0,minecraft:popped_chorus_fruit +434:0,minecraft:beetroot +435:0,minecraft:beetroot_seeds +436:0,minecraft:beetroot_soup +437:0,minecraft:dragon_breath +438:0,minecraft:splash_potion +439:0,minecraft:spectral_arrow +440:0,minecraft:tipped_arrow +441:0,minecraft:lingering_potion +442:0,minecraft:shield +443:0,minecraft:elytra +444:0,minecraft:spruce_boat +445:0,minecraft:birch_boat +446:0,minecraft:jungle_boat +447:0,minecraft:acacia_boat +448:0,minecraft:dark_oak_boat +449:0,minecraft:totem_of_undying +450:0,minecraft:shulker_shell +452:0,minecraft:iron_nugget +453:0,minecraft:knowledge_book +2256:0,minecraft:music_disc_13 +2257:0,minecraft:music_disc_cat +2258:0,minecraft:music_disc_blocks +2259:0,minecraft:music_disc_chirp +2260:0,minecraft:music_disc_far +2261:0,minecraft:music_disc_mall +2262:0,minecraft:music_disc_mellohi +2263:0,minecraft:music_disc_stal +2264:0,minecraft:music_disc_strad +2265:0,minecraft:music_disc_ward +2266:0,minecraft:music_disc_11 +2267:0,minecraft:music_disc_wait