Merchand materials + spawn management
This commit is contained in:
		| @ -13,6 +13,7 @@ import org.bukkit.command.TabCompleter; | |||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
|  |  | ||||||
| import net.kyori.adventure.text.Component; | import net.kyori.adventure.text.Component; | ||||||
|  | import ovh.herisson.thevoidroad.DatabaseManager; | ||||||
| import ovh.herisson.thevoidroad.TheVoidRoad; | import ovh.herisson.thevoidroad.TheVoidRoad; | ||||||
| import ovh.herisson.thevoidroad.Voids; | import ovh.herisson.thevoidroad.Voids; | ||||||
| import ovh.herisson.thevoidroad.Entity.Merchand; | import ovh.herisson.thevoidroad.Entity.Merchand; | ||||||
| @ -52,15 +53,19 @@ public class VoidCommands implements CommandExecutor, TabCompleter{ | |||||||
| 					case "init": | 					case "init": | ||||||
| 						m.regenerate(); | 						m.regenerate(); | ||||||
| 						Bukkit.getServer().sendMessage(Component.text(m.getLocation().toString())); | 						Bukkit.getServer().sendMessage(Component.text(m.getLocation().toString())); | ||||||
|  | 						DatabaseManager.getInstance().setConfig("init", "true"); | ||||||
| 						return true; | 						return true; | ||||||
| 					case "reset": | 					case "reset": | ||||||
|  | 						DatabaseManager.getInstance().setConfig("init", "false"); | ||||||
| 						break; | 						break; | ||||||
| 					case "skip": | 					case "skip": | ||||||
| 						//TODO(Merchand): Skip trade | 						//TODO(Merchand): Skip trade | ||||||
| 						break; | 						break; | ||||||
| 					case "goto": | 					case "goto": | ||||||
| 						if(sender instanceof Player ply){ | 						if(sender instanceof Player ply && m.getLocation() != null){ | ||||||
| 							ply.teleport(m.getLocation()); | 							ply.teleport(m.getLocation()); | ||||||
|  | 						}else{ | ||||||
|  | 							sender.sendMessage("You can't teleport!"); | ||||||
| 						} | 						} | ||||||
| 						break; | 						break; | ||||||
| 					case "balance": | 					case "balance": | ||||||
|  | |||||||
| @ -97,25 +97,34 @@ public class DatabaseManager { | |||||||
| 		st.close(); | 		st.close(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public String getConfig(String name) throws SQLException{ | 	public String getConfig(String name){ | ||||||
| 		Statement st = con.createStatement(); | 		try { | ||||||
| 		String query = "SELECT value FROM config WHERE name = ? LIMIT 1"; | 			Statement st = con.createStatement(); | ||||||
| 		PreparedStatement p = con.prepareStatement(query); | 			String query = "SELECT value FROM config WHERE name = ? LIMIT 1"; | ||||||
| 		p.setString(1, name); | 			PreparedStatement p = con.prepareStatement(query); | ||||||
| 		ResultSet rs = p.executeQuery(); | 			p.setString(1, name); | ||||||
| 		String value = rs.getString(1); | 			ResultSet rs = p.executeQuery(); | ||||||
| 		st.close(); | 			String value = rs.getString(1); | ||||||
| 		return value; | 			st.close(); | ||||||
|  | 			return value; | ||||||
|  | 		} catch(Exception e){ | ||||||
|  | 			e.printStackTrace(); | ||||||
|  | 		} | ||||||
|  | 		return null; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public void setConfig(String name, @Nullable String value) throws SQLException{ | 	public void setConfig(String name, @Nullable String value){ | ||||||
| 		Statement st = con.createStatement(); | 		try { | ||||||
| 		String query = "INSERT OR REPLACE INTO config (name, value) VALUES (?, ?)"; | 			Statement st = con.createStatement(); | ||||||
| 		PreparedStatement p = con.prepareStatement(query); | 			String query = "INSERT OR REPLACE INTO config (name, value) VALUES (?, ?)"; | ||||||
| 		p.setString(1, name); | 			PreparedStatement p = con.prepareStatement(query); | ||||||
| 		p.setString(2, value); | 			p.setString(1, name); | ||||||
| 		p.execute(); | 			p.setString(2, value); | ||||||
| 		st.close(); | 			p.execute(); | ||||||
|  | 			st.close(); | ||||||
|  | 		} catch(Exception e){ | ||||||
|  | 			e.printStackTrace(); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,10 +1,15 @@ | |||||||
| package ovh.herisson.thevoidroad.Entity; | package ovh.herisson.thevoidroad.Entity; | ||||||
|  |  | ||||||
|  | import java.io.File; | ||||||
|  | import java.nio.file.Files; | ||||||
|  | import java.util.ArrayList; | ||||||
| import java.util.Random; | import java.util.Random; | ||||||
|  |  | ||||||
| import org.bukkit.Bukkit; | import org.bukkit.Bukkit; | ||||||
| import org.bukkit.Location; | import org.bukkit.Location; | ||||||
| import org.bukkit.Material; | import org.bukkit.Material; | ||||||
|  | import org.bukkit.NamespacedKey; | ||||||
|  | import org.bukkit.entity.Entity; | ||||||
| import org.bukkit.entity.EntityType; | import org.bukkit.entity.EntityType; | ||||||
| import org.bukkit.entity.Player; | import org.bukkit.entity.Player; | ||||||
| import org.bukkit.entity.Villager; | import org.bukkit.entity.Villager; | ||||||
| @ -12,11 +17,14 @@ import org.bukkit.event.EventHandler; | |||||||
| import org.bukkit.event.Listener; | import org.bukkit.event.Listener; | ||||||
| import org.bukkit.event.player.PlayerInteractEntityEvent; | import org.bukkit.event.player.PlayerInteractEntityEvent; | ||||||
| import org.bukkit.event.player.PlayerInteractEvent; | import org.bukkit.event.player.PlayerInteractEvent; | ||||||
| import org.bukkit.event.world.EntitiesUnloadEvent; | import org.bukkit.event.world.EntitiesLoadEvent; | ||||||
| import org.bukkit.inventory.Inventory; | import org.bukkit.inventory.Inventory; | ||||||
| import org.bukkit.inventory.ItemStack; | import org.bukkit.inventory.ItemStack; | ||||||
|  | import org.bukkit.persistence.PersistentDataType; | ||||||
|  |  | ||||||
| import net.kyori.adventure.text.Component; | import net.kyori.adventure.text.Component; | ||||||
|  | import ovh.herisson.thevoidroad.DatabaseManager; | ||||||
|  | import ovh.herisson.thevoidroad.TheVoidRoad; | ||||||
| import ovh.herisson.thevoidroad.Event.HourEvent; | import ovh.herisson.thevoidroad.Event.HourEvent; | ||||||
| import ovh.herisson.thevoidroad.util.Tuple; | import ovh.herisson.thevoidroad.util.Tuple; | ||||||
|  |  | ||||||
| @ -24,10 +32,12 @@ import ovh.herisson.thevoidroad.util.Tuple; | |||||||
| public class Merchand implements Listener{ | public class Merchand implements Listener{ | ||||||
| 	public static Tuple<Material, Integer> current, next; | 	public static Tuple<Material, Integer> current, next; | ||||||
| 	private static Merchand instance; | 	private static Merchand instance; | ||||||
| 	private static final Material[] mat = Material.values(); | 	private static final ArrayList<Material> mat = new ArrayList<>(); | ||||||
| 	private final Inventory inv; | 	private final Inventory inv; | ||||||
| 	private Villager m ; | 	private Villager m ; | ||||||
|  |  | ||||||
|  | 	private static final NamespacedKey tagger = new NamespacedKey(TheVoidRoad.instance, "merchand") ; | ||||||
|  |  | ||||||
| 	public static Merchand getInstance(){ | 	public static Merchand getInstance(){ | ||||||
| 		if(instance == null) | 		if(instance == null) | ||||||
| 			instance = new Merchand(); | 			instance = new Merchand(); | ||||||
| @ -36,14 +46,27 @@ public class Merchand implements Listener{ | |||||||
|  |  | ||||||
| 	private Merchand() { | 	private Merchand() { | ||||||
| 		inv = Bukkit.createInventory(null, 9); | 		inv = Bukkit.createInventory(null, 9); | ||||||
|  | 		File f = new File(TheVoidRoad.instance.getDataFolder(), "materials.txt"); | ||||||
|  | 		try { | ||||||
|  | 			for (String s :	Files.readAllLines(f.toPath())) { | ||||||
|  | 				mat.add(Material.valueOf(s)); | ||||||
|  | 			} | ||||||
|  | 		} catch(Exception e){ | ||||||
|  | 			e.printStackTrace(); | ||||||
|  | 		} | ||||||
|  | 		if(DatabaseManager.getInstance().getConfig("init").equalsIgnoreCase("true")){ | ||||||
|  | 			regenerate(); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public void regenerate(){ | 	public void regenerate(){ | ||||||
| 		if(m != null){ m.remove(); } | 		if(m != null){ m.remove(); } | ||||||
| 		current = genTrade(System.currentTimeMillis() / (1000 * 60 * 60)); | 		current = genTrade(System.currentTimeMillis() / (1000 * 60 * 60)); | ||||||
| 		int x = new Random().nextInt(750) - 750/2, z = new Random().nextInt(750) - 750/2; |  | ||||||
| 		Location center = Bukkit.getWorld("world").getWorldBorder().getCenter(); | 		Location center = Bukkit.getWorld("world").getWorldBorder().getCenter(); | ||||||
|  | 		double brdSize = Bukkit.getWorld("world").getWorldBorder().getSize(); | ||||||
|  | 		double x = new Random().nextDouble(brdSize) - brdSize/2, z = new Random().nextDouble(brdSize) - brdSize/2; | ||||||
| 		m = (Villager) Bukkit.getWorld("world").spawnEntity(center.add(x, 100, z), EntityType.VILLAGER); | 		m = (Villager) Bukkit.getWorld("world").spawnEntity(center.add(x, 100, z), EntityType.VILLAGER); | ||||||
|  | 		m.getPersistentDataContainer().set(tagger, PersistentDataType.BOOLEAN, true); | ||||||
| 		m.setGlowing(true); | 		m.setGlowing(true); | ||||||
| 		m.setInvulnerable(true); | 		m.setInvulnerable(true); | ||||||
| 		Bukkit.getServer().forEachAudience((a) -> { | 		Bukkit.getServer().forEachAudience((a) -> { | ||||||
| @ -55,18 +78,22 @@ public class Merchand implements Listener{ | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public Location getLocation(){ | 	public Location getLocation(){ | ||||||
| 		return m.getLocation(); | 		return m != null ? m.getLocation(): null; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public static Tuple<Material, Integer> genTrade(long hour){ | 	public static Tuple<Material, Integer> genTrade(long hour){ | ||||||
| 		Random rnd = new Random(hour); | 		Random rnd = new Random(hour); | ||||||
| 		return new Tuple<>(mat[rnd.nextInt(mat.length)], rnd.nextInt(9)+1); | 		return new Tuple<>(mat.get(rnd.nextInt(mat.size())), rnd.nextInt(9)+1); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@EventHandler //TODO(Merchand): Check if can't do using ticket chunk | 	@EventHandler | ||||||
| 	public void onUnload(EntitiesUnloadEvent e){ | 	public void checkTagged(EntitiesLoadEvent e){ | ||||||
| 		if(e.getEntities().contains(m)){ | 		for (Entity m : e.getEntities()) { | ||||||
| 			m.getChunk().load(); | 			if(m.getPersistentDataContainer().has(tagger) && m.getPersistentDataContainer().get(tagger, PersistentDataType.BOOLEAN)){ | ||||||
|  | 				if(!m.equals(this.m)){ | ||||||
|  | 					m.remove(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -90,7 +117,7 @@ public class Merchand implements Listener{ | |||||||
|  |  | ||||||
| 	@EventHandler | 	@EventHandler | ||||||
| 	public void Compass(PlayerInteractEvent e){ | 	public void Compass(PlayerInteractEvent e){ | ||||||
| 		if(e.getItem() != null && e.getItem().getType() == Material.COMPASS){ | 		if(m.getLocation() != null && e.getItem() != null && e.getItem().getType() == Material.COMPASS){ | ||||||
| 			e.getPlayer().setCompassTarget(m.getLocation()); | 			e.getPlayer().setCompassTarget(m.getLocation()); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -1,20 +1,27 @@ | |||||||
| package ovh.herisson.thevoidroad; | package ovh.herisson.thevoidroad; | ||||||
|  |  | ||||||
| import org.bukkit.event.Listener; |  | ||||||
| import org.bukkit.plugin.java.JavaPlugin; | import org.bukkit.plugin.java.JavaPlugin; | ||||||
|  |  | ||||||
| import ovh.herisson.thevoidroad.Commands.VoidCommands; | import ovh.herisson.thevoidroad.Commands.VoidCommands; | ||||||
| import ovh.herisson.thevoidroad.Entity.Merchand; | import ovh.herisson.thevoidroad.Entity.Merchand; | ||||||
| import ovh.herisson.thevoidroad.Event.HourEvent; | import ovh.herisson.thevoidroad.Event.HourEvent; | ||||||
|  |  | ||||||
| public class TheVoidRoad extends JavaPlugin implements Listener{ | public class TheVoidRoad extends JavaPlugin{ | ||||||
|  |  | ||||||
| 	public static String CoinGlyph = "Ⓥ"; // Ɣ, √, ▼, Ṿ, ṿ | 	public static String CoinGlyph = "Ⓥ"; // Ɣ, √, ▼, Ṿ, ṿ | ||||||
| 	public static final DatabaseManager db = DatabaseManager.getInstance(); | 	public static final DatabaseManager db = DatabaseManager.getInstance(); | ||||||
|  | 	public static TheVoidRoad instance; | ||||||
|  |  | ||||||
|  | 	public TheVoidRoad(){ | ||||||
|  | 		super(); | ||||||
|  | 		instance = this; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public void onEnable(){ | 	public void onEnable(){ | ||||||
|  |  | ||||||
|  | 		saveResource("materials.txt", false); | ||||||
|  |  | ||||||
| 		//Commands | 		//Commands | ||||||
| 		getCommand("void").setExecutor(new VoidCommands()); | 		getCommand("void").setExecutor(new VoidCommands()); | ||||||
| 		getCommand("void").setTabCompleter(new VoidCommands()); | 		getCommand("void").setTabCompleter(new VoidCommands()); | ||||||
| @ -22,6 +29,7 @@ public class TheVoidRoad extends JavaPlugin implements Listener{ | |||||||
| 		//Events | 		//Events | ||||||
| 		getServer().getPluginManager().registerEvents(new HourEvent(), this); //For HourEvent | 		getServer().getPluginManager().registerEvents(new HourEvent(), this); //For HourEvent | ||||||
| 		getServer().getPluginManager().registerEvents(Merchand.getInstance(), this); | 		getServer().getPluginManager().registerEvents(Merchand.getInstance(), this); | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
|  | |||||||
							
								
								
									
										279
									
								
								TheVoidRoad/src/main/resources/materials.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										279
									
								
								TheVoidRoad/src/main/resources/materials.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,279 @@ | |||||||
|  | STONE | ||||||
|  | GRANITE | ||||||
|  | POLISHED_GRANITE | ||||||
|  | DIORITE | ||||||
|  | POLISHED_DIORITE | ||||||
|  | ANDESITE | ||||||
|  | POLISHED_ANDESITE | ||||||
|  | DEEPSLATE | ||||||
|  | COBBLED_DEEPSLATE | ||||||
|  | POLISHED_DEEPSLATE | ||||||
|  | CALCITE | ||||||
|  | TUFF | ||||||
|  | TUFF_WALL | ||||||
|  | CHISELED_TUFF | ||||||
|  | POLISHED_TUFF | ||||||
|  | POLISHED_TUFF_WALL | ||||||
|  | TUFF_BRICKS | ||||||
|  | TUFF_BRICK_WALL | ||||||
|  | CHISELED_TUFF_BRICKS | ||||||
|  | DRIPSTONE_BLOCK | ||||||
|  | GRASS_BLOCK | ||||||
|  | DIRT | ||||||
|  | COARSE_DIRT | ||||||
|  | PODZOL | ||||||
|  | ROOTED_DIRT | ||||||
|  | MUD | ||||||
|  | COBBLESTONE | ||||||
|  | OAK_PLANKS | ||||||
|  | SPRUCE_PLANKS | ||||||
|  | BIRCH_PLANKS | ||||||
|  | JUNGLE_PLANKS | ||||||
|  | ACACIA_PLANKS | ||||||
|  | CHERRY_PLANKS | ||||||
|  | DARK_OAK_PLANKS | ||||||
|  | MANGROVE_PLANKS | ||||||
|  | BAMBOO_PLANKS | ||||||
|  | BAMBOO_MOSAIC | ||||||
|  | OAK_SAPLING | ||||||
|  | SPRUCE_SAPLING | ||||||
|  | BIRCH_SAPLING | ||||||
|  | JUNGLE_SAPLING | ||||||
|  | ACACIA_SAPLING | ||||||
|  | CHERRY_SAPLING | ||||||
|  | DARK_OAK_SAPLING | ||||||
|  | MANGROVE_PROPAGULE | ||||||
|  | SAND | ||||||
|  | RED_SAND | ||||||
|  | GRAVEL | ||||||
|  | OAK_LOG | ||||||
|  | SPRUCE_LOG | ||||||
|  | BIRCH_LOG | ||||||
|  | JUNGLE_LOG | ||||||
|  | ACACIA_LOG | ||||||
|  | CHERRY_LOG | ||||||
|  | DARK_OAK_LOG | ||||||
|  | MANGROVE_LOG | ||||||
|  | MANGROVE_ROOTS | ||||||
|  | MUDDY_MANGROVE_ROOTS | ||||||
|  | BAMBOO_BLOCK | ||||||
|  | OAK_WOOD | ||||||
|  | SPRUCE_WOOD | ||||||
|  | BIRCH_WOOD | ||||||
|  | JUNGLE_WOOD | ||||||
|  | ACACIA_WOOD | ||||||
|  | CHERRY_WOOD | ||||||
|  | DARK_OAK_WOOD | ||||||
|  | MANGROVE_WOOD | ||||||
|  | OAK_LEAVES | ||||||
|  | SPRUCE_LEAVES | ||||||
|  | BIRCH_LEAVES | ||||||
|  | JUNGLE_LEAVES | ||||||
|  | ACACIA_LEAVES | ||||||
|  | CHERRY_LEAVES | ||||||
|  | DARK_OAK_LEAVES | ||||||
|  | MANGROVE_LEAVES | ||||||
|  | AZALEA_LEAVES | ||||||
|  | FLOWERING_AZALEA_LEAVES | ||||||
|  | GLASS | ||||||
|  | SANDSTONE | ||||||
|  | SHORT_GRASS | ||||||
|  | AZALEA | ||||||
|  | FLOWERING_AZALEA | ||||||
|  | SEA_PICKLE | ||||||
|  | WHITE_WOOL | ||||||
|  | BROWN_MUSHROOM | ||||||
|  | RED_MUSHROOM | ||||||
|  | SUGAR_CANE | ||||||
|  | KELP | ||||||
|  | BAMBOO | ||||||
|  | BRICKS | ||||||
|  | BOOKSHELF | ||||||
|  | MOSSY_COBBLESTONE | ||||||
|  | OBSIDIAN | ||||||
|  | TORCH | ||||||
|  | CHEST | ||||||
|  | CRAFTING_TABLE | ||||||
|  | FURNACE | ||||||
|  | LADDER | ||||||
|  | SNOW | ||||||
|  | ICE | ||||||
|  | SNOW_BLOCK | ||||||
|  | CACTUS | ||||||
|  | CLAY | ||||||
|  | JUKEBOX | ||||||
|  | PUMPKIN | ||||||
|  | STONE_BRICKS | ||||||
|  | PACKED_MUD | ||||||
|  | IRON_BARS | ||||||
|  | CHAIN | ||||||
|  | MELON | ||||||
|  | LILY_PAD | ||||||
|  | ENCHANTING_TABLE | ||||||
|  | COBBLESTONE_WALL | ||||||
|  | ANVIL | ||||||
|  | HAY_BLOCK | ||||||
|  | TERRACOTTA | ||||||
|  | PACKED_ICE | ||||||
|  | RED_SANDSTONE | ||||||
|  | MAGMA_BLOCK | ||||||
|  | BONE_BLOCK | ||||||
|  | WHITE_CONCRETE | ||||||
|  | ORANGE_CONCRETE | ||||||
|  | MAGENTA_CONCRETE | ||||||
|  | LIGHT_BLUE_CONCRETE | ||||||
|  | YELLOW_CONCRETE | ||||||
|  | LIME_CONCRETE | ||||||
|  | PINK_CONCRETE | ||||||
|  | GRAY_CONCRETE | ||||||
|  | LIGHT_GRAY_CONCRETE | ||||||
|  | CYAN_CONCRETE | ||||||
|  | PURPLE_CONCRETE | ||||||
|  | BLUE_CONCRETE | ||||||
|  | BROWN_CONCRETE | ||||||
|  | GREEN_CONCRETE | ||||||
|  | RED_CONCRETE | ||||||
|  | BLACK_CONCRETE | ||||||
|  | TURTLE_EGG | ||||||
|  | BLUE_ICE | ||||||
|  | SCAFFOLDING | ||||||
|  | REDSTONE | ||||||
|  | REDSTONE_TORCH | ||||||
|  | REDSTONE_BLOCK | ||||||
|  | REPEATER | ||||||
|  | COMPARATOR | ||||||
|  | PISTON | ||||||
|  | STICKY_PISTON | ||||||
|  | SLIME_BLOCK | ||||||
|  | HONEY_BLOCK | ||||||
|  | OBSERVER | ||||||
|  | HOPPER | ||||||
|  | DISPENSER | ||||||
|  | DROPPER | ||||||
|  | LECTERN | ||||||
|  | TARGET | ||||||
|  | LEVER | ||||||
|  | LIGHTNING_ROD | ||||||
|  | DAYLIGHT_DETECTOR | ||||||
|  | TRIPWIRE_HOOK | ||||||
|  | TRAPPED_CHEST | ||||||
|  | TNT | ||||||
|  | REDSTONE_LAMP | ||||||
|  | NOTE_BLOCK | ||||||
|  | STONE_BUTTON | ||||||
|  | STONE_PRESSURE_PLATE | ||||||
|  | LIGHT_WEIGHTED_PRESSURE_PLATE | ||||||
|  | HEAVY_WEIGHTED_PRESSURE_PLATE | ||||||
|  | OAK_PRESSURE_PLATE | ||||||
|  | SPRUCE_PRESSURE_PLATE | ||||||
|  | BIRCH_PRESSURE_PLATE | ||||||
|  | JUNGLE_PRESSURE_PLATE | ||||||
|  | ACACIA_PRESSURE_PLATE | ||||||
|  | CHERRY_PRESSURE_PLATE | ||||||
|  | DARK_OAK_PRESSURE_PLATE | ||||||
|  | MANGROVE_PRESSURE_PLATE | ||||||
|  | BAMBOO_PRESSURE_PLATE | ||||||
|  | RAIL | ||||||
|  | SADDLE | ||||||
|  | MINECART | ||||||
|  | SCUTE | ||||||
|  | FLINT_AND_STEEL | ||||||
|  | APPLE | ||||||
|  | ARROW | ||||||
|  | COAL | ||||||
|  | CHARCOAL | ||||||
|  | DIAMOND | ||||||
|  | EMERALD | ||||||
|  | LAPIS_LAZULI | ||||||
|  | AMETHYST_SHARD | ||||||
|  | RAW_IRON | ||||||
|  | IRON_INGOT | ||||||
|  | RAW_COPPER | ||||||
|  | COPPER_INGOT | ||||||
|  | RAW_GOLD | ||||||
|  | GOLD_INGOT | ||||||
|  | STICK | ||||||
|  | BOWL | ||||||
|  | MUSHROOM_STEW | ||||||
|  | STRING | ||||||
|  | FEATHER | ||||||
|  | GUNPOWDER | ||||||
|  | WHEAT_SEEDS | ||||||
|  | WHEAT | ||||||
|  | BREAD | ||||||
|  | FLINT | ||||||
|  | PORKCHOP | ||||||
|  | PAINTING | ||||||
|  | GOLDEN_APPLE | ||||||
|  | BUCKET | ||||||
|  | WATER_BUCKET | ||||||
|  | LAVA_BUCKET | ||||||
|  | POWDER_SNOW_BUCKET | ||||||
|  | SNOWBALL | ||||||
|  | LEATHER | ||||||
|  | MILK_BUCKET | ||||||
|  | BRICK | ||||||
|  | CLAY_BALL | ||||||
|  | DRIED_KELP_BLOCK | ||||||
|  | PAPER | ||||||
|  | BOOK | ||||||
|  | SLIME_BALL | ||||||
|  | EGG | ||||||
|  | COD | ||||||
|  | SALMON | ||||||
|  | TROPICAL_FISH | ||||||
|  | PUFFERFISH | ||||||
|  | INK_SAC | ||||||
|  | COCOA_BEANS | ||||||
|  | WHITE_DYE | ||||||
|  | ORANGE_DYE | ||||||
|  | MAGENTA_DYE | ||||||
|  | LIGHT_BLUE_DYE | ||||||
|  | YELLOW_DYE | ||||||
|  | LIME_DYE | ||||||
|  | PINK_DYE | ||||||
|  | GRAY_DYE | ||||||
|  | LIGHT_GRAY_DYE | ||||||
|  | CYAN_DYE | ||||||
|  | PURPLE_DYE | ||||||
|  | BLUE_DYE | ||||||
|  | BROWN_DYE | ||||||
|  | GREEN_DYE | ||||||
|  | RED_DYE | ||||||
|  | BLACK_DYE | ||||||
|  | BONE_MEAL | ||||||
|  | BONE | ||||||
|  | SUGAR | ||||||
|  | COOKIE | ||||||
|  | FILLED_MAP | ||||||
|  | MELON_SLICE | ||||||
|  | DRIED_KELP | ||||||
|  | PUMPKIN_SEEDS | ||||||
|  | MELON_SEEDS | ||||||
|  | BEEF | ||||||
|  | CHICKEN | ||||||
|  | ROTTEN_FLESH | ||||||
|  | GOLD_NUGGET | ||||||
|  | GLASS_BOTTLE | ||||||
|  | SPIDER_EYE | ||||||
|  | CARROT | ||||||
|  | POTATO | ||||||
|  | POISONOUS_POTATO | ||||||
|  | RABBIT | ||||||
|  | RABBIT_FOOT | ||||||
|  | RABBIT_HIDE | ||||||
|  | LEAD | ||||||
|  | MUTTON | ||||||
|  | BEETROOT | ||||||
|  | TOTEM_OF_UNDYING | ||||||
|  | IRON_NUGGET | ||||||
|  | PHANTOM_MEMBRANE | ||||||
|  | NAUTILUS_SHELL | ||||||
|  | GOAT_HORN | ||||||
|  | SWEET_BERRIES | ||||||
|  | GLOW_BERRIES | ||||||
|  | HONEYCOMB | ||||||
|  | BEE_NEST | ||||||
|  | HONEY_BOTTLE | ||||||
|  | HONEYCOMB_BLOCK | ||||||
|  | CANDLE | ||||||
		Reference in New Issue
	
	Block a user