diff --git a/src/main/java/world/bentobox/boxed/AdvancementsManager.java b/src/main/java/world/bentobox/boxed/AdvancementsManager.java new file mode 100644 index 0000000..63c770e --- /dev/null +++ b/src/main/java/world/bentobox/boxed/AdvancementsManager.java @@ -0,0 +1,168 @@ +package world.bentobox.boxed; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +import org.bukkit.advancement.Advancement; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; + +import world.bentobox.bentobox.database.Database; +import world.bentobox.bentobox.database.objects.Island; +import world.bentobox.bentobox.util.Util; +import world.bentobox.boxed.objects.IslandAdvancements; + +/** + * Manages Island advancements + * @author tastybento + * + */ +public class AdvancementsManager { + + private final Boxed addon; + // Database handler for level data + private final Database handler; + // A cache of island levels. + private final Map cache; + private final YamlConfiguration advConfig; + + /** + * @param addon + */ + public AdvancementsManager(Boxed addon) { + this.addon = addon; + // Get the BentoBox database + // Set up the database handler to store and retrieve data + // Note that these are saved by the BentoBox database + handler = new Database<>(addon, IslandAdvancements.class); + // Initialize the cache + cache = new HashMap<>(); + // Advancement score sheet + addon.saveResource("advancements.yml", false); + advConfig = new YamlConfiguration(); + File advFile = new File(addon.getDataFolder(), "advancements.yml"); + if (!advFile.exists()) { + addon.logError("advancements.yml cannot be found!"); + } else { + try { + advConfig.load(advFile); + } catch (IOException | InvalidConfigurationException e) { + addon.logError("advancements.yml cannot be found! " + e.getLocalizedMessage()); + } + } + + } + + /** + * Get advancements for the island, loading from database if required + * @param island + * @return the island's advancement list object + */ + @NonNull + protected IslandAdvancements getIsland(Island island) { + return cache.computeIfAbsent(island.getUniqueId(), k -> getFromDb(k)); + + } + + @NonNull + private IslandAdvancements getFromDb(String k) { + if (!handler.objectExists(k)) { + return new IslandAdvancements(k); + } + @Nullable + IslandAdvancements ia = handler.loadObject(k); + return ia == null ? new IslandAdvancements(k) : ia; + } + + /** + * Save the island + * @param island - island + * @return CompletableFuture true if saved successfully + */ + protected CompletableFuture saveIsland(Island island) { + return cache.containsKey(island.getUniqueId()) ? handler.saveObjectAsync(cache.get(island.getUniqueId())): CompletableFuture.completedFuture(true); + } + + /** + * Save all values in the cache + */ + protected void save() { + cache.values().forEach(handler::saveObjectAsync); + } + + /** + * Remove island from cache + * @param island - island + */ + protected void removeFromCache(Island island) { + cache.remove(island.getUniqueId()); + } + + /** + * Add advancement to island + * @param island - island + * @param advancement - advancement string + * @return true if added, false if already added + */ + public boolean addAdvancement(Island island, String advancement) { + if (hasAdvancement(island, advancement)) { + return false; + } + getIsland(island).getAdvancements().add(advancement); + this.saveIsland(island); + return true; + } + + /** + * Remove advancement from island + * @param island - island + * @param advancement - advancement string + */ + public void removeAdvancement(Island island, String advancement) { + getIsland(island).getAdvancements().remove(advancement); + this.saveIsland(island); + } + + /** + * Check if island has advancement + * @param island - island + * @param advancement - advancement + * @return true if island has advancement, false if not + */ + public boolean hasAdvancement(Island island, String advancement) { + return getIsland(island).getAdvancements().contains(advancement); + } + + /** + * Add advancement to island and adjusts the island's protection size accordingly + * @param p - player who just advanced + * @param advancement - advancement + * @return score for advancement. 0 if the advancement was not added. + */ + public int addAvancement(Player p, Advancement advancement) { + if (!addon.getOverWorld().equals(Util.getWorld(p.getWorld()))) { + // Wrong world + return 0; + } + // Check score of advancement + int score = advConfig.getInt("advancements." + advancement.getKey().toString()); + if (score == 0) { + return 0; + } + // Get island + Island island = addon.getIslands().getIsland(addon.getOverWorld(), p.getUniqueId()); + if (island != null && addAdvancement(island, advancement.getKey().toString())) { + int newSize = Math.max(1, island.getProtectionRange() + score); + island.setProtectionRange(newSize); + return score; + } + return 0; + + } +} diff --git a/src/main/java/world/bentobox/boxed/Boxed.java b/src/main/java/world/bentobox/boxed/Boxed.java index 1af9c0d..b43063f 100644 --- a/src/main/java/world/bentobox/boxed/Boxed.java +++ b/src/main/java/world/bentobox/boxed/Boxed.java @@ -4,7 +4,6 @@ import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.WorldCreator; import org.bukkit.WorldType; -import org.bukkit.event.Listener; import org.bukkit.generator.ChunkGenerator; import org.eclipse.jdt.annotation.Nullable; @@ -24,7 +23,7 @@ import world.bentobox.boxed.listeners.AdvancementListener; * @author tastybento * @author Poslovitch */ -public class Boxed extends GameModeAddon implements Listener { +public class Boxed extends GameModeAddon { private static final String NETHER = "_nether"; private static final String THE_END = "_the_end"; @@ -33,6 +32,7 @@ public class Boxed extends GameModeAddon implements Listener { private Settings settings; private ChunkGenerator chunkGenerator; private Config configObject = new Config<>(this, Settings.class); + private AdvancementsManager advManager; @Override public void onLoad() { @@ -73,7 +73,7 @@ public class Boxed extends GameModeAddon implements Listener { settings = configObject.loadConfigObject(); if (settings == null) { // Disable - logError("Brix settings could not load! Addon disabled."); + logError("Boxed settings could not load! Addon disabled."); setState(State.DISABLED); return false; } @@ -83,18 +83,21 @@ public class Boxed extends GameModeAddon implements Listener { @Override public void onEnable(){ // Register this - registerListener(this); + //registerListener(new JoinListener(this)); + // Advancements manager + advManager = new AdvancementsManager(this); } @Override public void onDisable() { - // Nothing to do here + // Save the advancements cache + getAdvManager().save(); } @Override public void onReload() { if (loadSettings()) { - log("Reloaded Brix settings"); + log("Reloaded Boxed settings"); } } @@ -109,7 +112,7 @@ public class Boxed extends GameModeAddon implements Listener { public void createWorlds() { String worldName = settings.getWorldName().toLowerCase(); if (getServer().getWorld(worldName) == null) { - log("Creating Brix world ..."); + log("Creating Boxed world ..."); } // Create the world if it does not exist @@ -117,14 +120,14 @@ public class Boxed extends GameModeAddon implements Listener { // Make the nether if it does not exist if (settings.isNetherGenerate()) { if (getServer().getWorld(worldName + NETHER) == null) { - log("Creating Brix's Nether..."); + log("Creating Boxed's Nether..."); } netherWorld = settings.isNetherIslands() ? getWorld(worldName, World.Environment.NETHER, chunkGenerator) : getWorld(worldName, World.Environment.NETHER, null); } // Make the end if it does not exist if (settings.isEndGenerate()) { if (getServer().getWorld(worldName + THE_END) == null) { - log("Creating Brix's End World..."); + log("Creating Boxed's End World..."); } endWorld = settings.isEndIslands() ? getWorld(worldName, World.Environment.THE_END, chunkGenerator) : getWorld(worldName, World.Environment.THE_END, null); } @@ -195,4 +198,11 @@ public class Boxed extends GameModeAddon implements Listener { this.saveWorldSettings(); } + /** + * @return the advManager + */ + public AdvancementsManager getAdvManager() { + return advManager; + } + } diff --git a/src/main/java/world/bentobox/boxed/Settings.java b/src/main/java/world/bentobox/boxed/Settings.java index 4a9b417..7565c9e 100644 --- a/src/main/java/world/bentobox/boxed/Settings.java +++ b/src/main/java/world/bentobox/boxed/Settings.java @@ -35,7 +35,7 @@ public class Settings implements WorldSettings { @ConfigComment("Player Command. What command users will run to access their area.") @ConfigComment("To define alias, just separate commands with white space.") @ConfigEntry(path = "boxed.command.player") - private String playerCommandAliases = "boxed br"; + private String playerCommandAliases = "box bx boxed"; @ConfigComment("The admin command.") @ConfigComment("To define alias, just separate commands with white space.") diff --git a/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java b/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java index 6e2a473..5c9c2d1 100644 --- a/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java +++ b/src/main/java/world/bentobox/boxed/listeners/AdvancementListener.java @@ -1,9 +1,13 @@ package world.bentobox.boxed.listeners; +import org.bukkit.Sound; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerAdvancementDoneEvent; +import world.bentobox.bentobox.api.localization.TextVariables; +import world.bentobox.bentobox.api.user.User; +import world.bentobox.bentobox.util.Util; import world.bentobox.boxed.Boxed; /** @@ -25,13 +29,15 @@ public class AdvancementListener implements Listener { @EventHandler public void onAdvancement(PlayerAdvancementDoneEvent e) { - if (e.getPlayer().getWorld().equals(addon.getOverWorld()) - && e.getAdvancement().getKey().getNamespace().equals("minecraft") - && !e.getAdvancement().getKey().getKey().startsWith("recipes")) { - addon.getIslands().getIslandAt(e.getPlayer().getLocation()).ifPresent(i -> { - i.setProtectionRange(i.getProtectionRange() + 1); - i.getPlayersOnIsland().forEach(p -> p.sendRawMessage("Area expanded! " + e.getAdvancement().getKey() + " " + e.getAdvancement().getCriteria())); - }); + if (e.getPlayer().getWorld().equals(addon.getOverWorld())) { + int score = addon.getAdvManager().addAvancement(e.getPlayer(), e.getAdvancement()); + if (score != 0) { + User user = User.getInstance(e.getPlayer()); + e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 2F); + String adv = Util.prettifyText(e.getAdvancement().getKey().getKey().substring(e.getAdvancement().getKey().getKey().lastIndexOf("/"), e.getAdvancement().getKey().getKey().length())); + user.sendMessage("boxed.completed", TextVariables.NAME, adv); + user.sendMessage("boxed.size-changed", TextVariables.NUMBER, String.valueOf(score)); + } } } diff --git a/src/main/java/world/bentobox/boxed/listeners/JoinListener.java b/src/main/java/world/bentobox/boxed/listeners/JoinListener.java index 4317a0f..87739b9 100644 --- a/src/main/java/world/bentobox/boxed/listeners/JoinListener.java +++ b/src/main/java/world/bentobox/boxed/listeners/JoinListener.java @@ -13,6 +13,7 @@ import world.bentobox.bentobox.BentoBox; import world.bentobox.boxed.Boxed; /** + * Just used for development right now * @author tastybento * */ @@ -29,15 +30,16 @@ public class JoinListener implements Listener { Iterator it = Bukkit.advancementIterator(); while (it.hasNext()) { Advancement a = it.next(); - if (!a.getKey().getKey().startsWith("recipe")) { - AdvancementProgress progress = e.getPlayer().getAdvancementProgress(a); - BentoBox.getInstance().logDebug(a.getKey() + " " + progress.isDone()); - BentoBox.getInstance().logDebug("Awarded criteria"); - progress.getAwardedCriteria().forEach(s -> BentoBox.getInstance().logDebug(s + " " + progress.getDateAwarded(s))); + //if (!a.getKey().getKey().startsWith("recipe")) { + AdvancementProgress progress = e.getPlayer().getAdvancementProgress(a); + BentoBox.getInstance().logDebug(a.getKey().toString()); + //BentoBox.getInstance().logDebug(a.getKey() + " " + progress.isDone()); + //BentoBox.getInstance().logDebug("Awarded criteria"); + //progress.getAwardedCriteria().forEach(s -> BentoBox.getInstance().logDebug(s + " " + progress.getDateAwarded(s))); - BentoBox.getInstance().logDebug("Remaining criteria " + progress.getRemainingCriteria()); - progress.getAwardedCriteria().forEach(progress::revokeCriteria); - } + //BentoBox.getInstance().logDebug("Remaining criteria " + progress.getRemainingCriteria()); + //progress.getAwardedCriteria().forEach(progress::revokeCriteria); + //} } } diff --git a/src/main/java/world/bentobox/boxed/objects/IslandAdvancements.java b/src/main/java/world/bentobox/boxed/objects/IslandAdvancements.java new file mode 100644 index 0000000..f9b0616 --- /dev/null +++ b/src/main/java/world/bentobox/boxed/objects/IslandAdvancements.java @@ -0,0 +1,55 @@ +package world.bentobox.boxed.objects; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.annotations.Expose; + +import world.bentobox.bentobox.database.objects.DataObject; +import world.bentobox.bentobox.database.objects.Table; + +/** + * Stores the advancements for the island + * @author tastybento + * + */ +@Table(name = "IslandAdvancements") +public class IslandAdvancements implements DataObject { + + @Expose + String uniqueId; + @Expose + List advancements = new ArrayList<>(); + + /** + * @param uniqueId + */ + public IslandAdvancements(String uniqueId) { + this.uniqueId = uniqueId; + } + + @Override + public String getUniqueId() { + return uniqueId; + } + + @Override + public void setUniqueId(String uniqueId) { + this.uniqueId = uniqueId; + } + + /** + * @return the advancements + */ + public List getAdvancements() { + return advancements; + } + + /** + * @param advancements the advancements to set + */ + public void setAdvancements(List advancements) { + this.advancements = advancements; + } + +} diff --git a/src/main/resources/advancements.yml b/src/main/resources/advancements.yml new file mode 100644 index 0000000..0a275be --- /dev/null +++ b/src/main/resources/advancements.yml @@ -0,0 +1,928 @@ +advancements: + 'minecraft:adventure/adventuring_time': 1 + 'minecraft:adventure/arbalistic': 1 + 'minecraft:adventure/bullseye': 1 + 'minecraft:adventure/hero_of_the_village': 1 + 'minecraft:adventure/honey_block_slide': 1 + 'minecraft:adventure/kill_a_mob': 1 + 'minecraft:adventure/kill_all_mobs': 1 + 'minecraft:adventure/ol_betsy': 1 + 'minecraft:adventure/root': 1 + 'minecraft:adventure/shoot_arrow': 1 + 'minecraft:adventure/sleep_in_bed': 1 + 'minecraft:adventure/sniper_duel': 1 + 'minecraft:adventure/summon_iron_golem': 1 + 'minecraft:adventure/throw_trident': 1 + 'minecraft:adventure/totem_of_undying': 1 + 'minecraft:adventure/trade': 1 + 'minecraft:adventure/two_birds_one_arrow': 1 + 'minecraft:adventure/very_very_frightening': 1 + 'minecraft:adventure/voluntary_exile': 1 + 'minecraft:adventure/whos_the_pillager_now': 1 + 'minecraft:end/dragon_breath': 1 + 'minecraft:end/dragon_egg': 1 + 'minecraft:end/elytra': 1 + 'minecraft:end/enter_end_gateway': 1 + 'minecraft:end/find_end_city': 1 + 'minecraft:end/kill_dragon': 1 + 'minecraft:end/levitate': 1 + 'minecraft:end/respawn_dragon': 1 + 'minecraft:end/root': 1 + 'minecraft:husbandry/balanced_diet': 1 + 'minecraft:husbandry/bred_all_animals': 1 + 'minecraft:husbandry/breed_an_animal': 1 + 'minecraft:husbandry/complete_catalogue': 1 + 'minecraft:husbandry/fishy_business': 1 + 'minecraft:husbandry/obtain_netherite_hoe': 1 + 'minecraft:husbandry/plant_seed': 1 + 'minecraft:husbandry/root': 1 + 'minecraft:husbandry/safely_harvest_honey': 1 + 'minecraft:husbandry/silk_touch_nest': 1 + 'minecraft:husbandry/tactical_fishing': 1 + 'minecraft:husbandry/tame_an_animal': 1 + 'minecraft:nether/all_effects': 1 + 'minecraft:nether/all_potions': 1 + 'minecraft:nether/brew_potion': 1 + 'minecraft:nether/charge_respawn_anchor': 1 + 'minecraft:nether/create_beacon': 1 + 'minecraft:nether/create_full_beacon': 1 + 'minecraft:nether/distract_piglin': 1 + 'minecraft:nether/explore_nether': 1 + 'minecraft:nether/fast_travel': 1 + 'minecraft:nether/find_bastion': 1 + 'minecraft:nether/find_fortress': 1 + 'minecraft:nether/get_wither_skull': 1 + 'minecraft:nether/loot_bastion': 1 + 'minecraft:nether/netherite_armor': 1 + 'minecraft:nether/obtain_ancient_debris': 1 + 'minecraft:nether/obtain_blaze_rod': 1 + 'minecraft:nether/obtain_crying_obsidian': 1 + 'minecraft:nether/return_to_sender': 1 + 'minecraft:nether/ride_strider': 1 + 'minecraft:nether/root': 1 + 'minecraft:nether/summon_wither': 1 + 'minecraft:nether/uneasy_alliance': 1 + 'minecraft:nether/use_lodestone': 1 + 'minecraft:recipes/brewing/blaze_powder': 0 + 'minecraft:recipes/brewing/brewing_stand': 0 + 'minecraft:recipes/brewing/cauldron': 0 + 'minecraft:recipes/brewing/fermented_spider_eye': 0 + 'minecraft:recipes/brewing/glass_bottle': 0 + 'minecraft:recipes/brewing/glistering_melon_slice': 0 + 'minecraft:recipes/brewing/golden_carrot': 0 + 'minecraft:recipes/brewing/magma_cream': 0 + 'minecraft:recipes/building_blocks/acacia_planks': 0 + 'minecraft:recipes/building_blocks/acacia_slab': 0 + 'minecraft:recipes/building_blocks/acacia_stairs': 0 + 'minecraft:recipes/building_blocks/acacia_wood': 0 + 'minecraft:recipes/building_blocks/andesite': 0 + 'minecraft:recipes/building_blocks/andesite_slab': 0 + 'minecraft:recipes/building_blocks/andesite_slab_from_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/andesite_stairs': 0 + 'minecraft:recipes/building_blocks/andesite_stairs_from_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/birch_planks': 0 + 'minecraft:recipes/building_blocks/birch_slab': 0 + 'minecraft:recipes/building_blocks/birch_stairs': 0 + 'minecraft:recipes/building_blocks/birch_wood': 0 + 'minecraft:recipes/building_blocks/black_concrete_powder': 0 + 'minecraft:recipes/building_blocks/black_stained_glass': 0 + 'minecraft:recipes/building_blocks/black_terracotta': 0 + 'minecraft:recipes/building_blocks/black_wool': 0 + 'minecraft:recipes/building_blocks/blackstone_slab': 0 + 'minecraft:recipes/building_blocks/blackstone_slab_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/blackstone_stairs': 0 + 'minecraft:recipes/building_blocks/blackstone_stairs_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/blue_concrete_powder': 0 + 'minecraft:recipes/building_blocks/blue_ice': 0 + 'minecraft:recipes/building_blocks/blue_stained_glass': 0 + 'minecraft:recipes/building_blocks/blue_terracotta': 0 + 'minecraft:recipes/building_blocks/blue_wool': 0 + 'minecraft:recipes/building_blocks/bone_block': 0 + 'minecraft:recipes/building_blocks/bookshelf': 0 + 'minecraft:recipes/building_blocks/brick_slab': 0 + 'minecraft:recipes/building_blocks/brick_slab_from_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/brick_stairs': 0 + 'minecraft:recipes/building_blocks/brick_stairs_from_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/bricks': 0 + 'minecraft:recipes/building_blocks/brown_concrete_powder': 0 + 'minecraft:recipes/building_blocks/brown_stained_glass': 0 + 'minecraft:recipes/building_blocks/brown_terracotta': 0 + 'minecraft:recipes/building_blocks/brown_wool': 0 + 'minecraft:recipes/building_blocks/chiseled_nether_bricks': 0 + 'minecraft:recipes/building_blocks/chiseled_nether_bricks_from_nether_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_polished_blackstone': 0 + 'minecraft:recipes/building_blocks/chiseled_polished_blackstone_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_polished_blackstone_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_quartz_block': 0 + 'minecraft:recipes/building_blocks/chiseled_quartz_block_from_quartz_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_red_sandstone': 0 + 'minecraft:recipes/building_blocks/chiseled_red_sandstone_from_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_sandstone': 0 + 'minecraft:recipes/building_blocks/chiseled_sandstone_from_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_stone_bricks': 0 + 'minecraft:recipes/building_blocks/chiseled_stone_bricks_from_stone_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/chiseled_stone_bricks_stone_from_stonecutting': 0 + 'minecraft:recipes/building_blocks/clay': 0 + 'minecraft:recipes/building_blocks/coal_block': 0 + 'minecraft:recipes/building_blocks/coarse_dirt': 0 + 'minecraft:recipes/building_blocks/cobblestone_slab': 0 + 'minecraft:recipes/building_blocks/cobblestone_slab_from_cobblestone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cobblestone_stairs': 0 + 'minecraft:recipes/building_blocks/cobblestone_stairs_from_cobblestone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cracked_nether_bricks': 0 + 'minecraft:recipes/building_blocks/cracked_polished_blackstone_bricks': 0 + 'minecraft:recipes/building_blocks/cracked_stone_bricks': 0 + 'minecraft:recipes/building_blocks/crimson_hyphae': 0 + 'minecraft:recipes/building_blocks/crimson_planks': 0 + 'minecraft:recipes/building_blocks/crimson_slab': 0 + 'minecraft:recipes/building_blocks/crimson_stairs': 0 + 'minecraft:recipes/building_blocks/cut_red_sandstone': 0 + 'minecraft:recipes/building_blocks/cut_red_sandstone_from_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cut_red_sandstone_slab': 0 + 'minecraft:recipes/building_blocks/cut_red_sandstone_slab_from_cut_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cut_red_sandstone_slab_from_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cut_sandstone': 0 + 'minecraft:recipes/building_blocks/cut_sandstone_from_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cut_sandstone_slab': 0 + 'minecraft:recipes/building_blocks/cut_sandstone_slab_from_cut_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cut_sandstone_slab_from_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/cyan_concrete_powder': 0 + 'minecraft:recipes/building_blocks/cyan_stained_glass': 0 + 'minecraft:recipes/building_blocks/cyan_terracotta': 0 + 'minecraft:recipes/building_blocks/cyan_wool': 0 + 'minecraft:recipes/building_blocks/dark_oak_planks': 0 + 'minecraft:recipes/building_blocks/dark_oak_slab': 0 + 'minecraft:recipes/building_blocks/dark_oak_stairs': 0 + 'minecraft:recipes/building_blocks/dark_oak_wood': 0 + 'minecraft:recipes/building_blocks/dark_prismarine': 0 + 'minecraft:recipes/building_blocks/dark_prismarine_slab': 0 + 'minecraft:recipes/building_blocks/dark_prismarine_slab_from_dark_prismarine_stonecutting': 0 + 'minecraft:recipes/building_blocks/dark_prismarine_stairs': 0 + 'minecraft:recipes/building_blocks/dark_prismarine_stairs_from_dark_prismarine_stonecutting': 0 + 'minecraft:recipes/building_blocks/diamond_block': 0 + 'minecraft:recipes/building_blocks/diorite': 0 + 'minecraft:recipes/building_blocks/diorite_slab': 0 + 'minecraft:recipes/building_blocks/diorite_slab_from_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/diorite_stairs': 0 + 'minecraft:recipes/building_blocks/diorite_stairs_from_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/dried_kelp_block': 0 + 'minecraft:recipes/building_blocks/emerald_block': 0 + 'minecraft:recipes/building_blocks/end_stone_brick_slab': 0 + 'minecraft:recipes/building_blocks/end_stone_brick_slab_from_end_stone_brick_stonecutting': 0 + 'minecraft:recipes/building_blocks/end_stone_brick_slab_from_end_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/end_stone_brick_stairs': 0 + 'minecraft:recipes/building_blocks/end_stone_brick_stairs_from_end_stone_brick_stonecutting': 0 + 'minecraft:recipes/building_blocks/end_stone_brick_stairs_from_end_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/end_stone_bricks': 0 + 'minecraft:recipes/building_blocks/end_stone_bricks_from_end_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/glass': 0 + 'minecraft:recipes/building_blocks/glowstone': 0 + 'minecraft:recipes/building_blocks/gold_block': 0 + 'minecraft:recipes/building_blocks/granite': 0 + 'minecraft:recipes/building_blocks/granite_slab': 0 + 'minecraft:recipes/building_blocks/granite_slab_from_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/granite_stairs': 0 + 'minecraft:recipes/building_blocks/granite_stairs_from_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/gray_concrete_powder': 0 + 'minecraft:recipes/building_blocks/gray_stained_glass': 0 + 'minecraft:recipes/building_blocks/gray_terracotta': 0 + 'minecraft:recipes/building_blocks/gray_wool': 0 + 'minecraft:recipes/building_blocks/green_concrete_powder': 0 + 'minecraft:recipes/building_blocks/green_stained_glass': 0 + 'minecraft:recipes/building_blocks/green_terracotta': 0 + 'minecraft:recipes/building_blocks/green_wool': 0 + 'minecraft:recipes/building_blocks/hay_block': 0 + 'minecraft:recipes/building_blocks/iron_block': 0 + 'minecraft:recipes/building_blocks/jack_o_lantern': 0 + 'minecraft:recipes/building_blocks/jungle_planks': 0 + 'minecraft:recipes/building_blocks/jungle_slab': 0 + 'minecraft:recipes/building_blocks/jungle_stairs': 0 + 'minecraft:recipes/building_blocks/jungle_wood': 0 + 'minecraft:recipes/building_blocks/lapis_block': 0 + 'minecraft:recipes/building_blocks/light_blue_concrete_powder': 0 + 'minecraft:recipes/building_blocks/light_blue_stained_glass': 0 + 'minecraft:recipes/building_blocks/light_blue_terracotta': 0 + 'minecraft:recipes/building_blocks/light_blue_wool': 0 + 'minecraft:recipes/building_blocks/light_gray_concrete_powder': 0 + 'minecraft:recipes/building_blocks/light_gray_stained_glass': 0 + 'minecraft:recipes/building_blocks/light_gray_terracotta': 0 + 'minecraft:recipes/building_blocks/light_gray_wool': 0 + 'minecraft:recipes/building_blocks/lime_concrete_powder': 0 + 'minecraft:recipes/building_blocks/lime_stained_glass': 0 + 'minecraft:recipes/building_blocks/lime_terracotta': 0 + 'minecraft:recipes/building_blocks/lime_wool': 0 + 'minecraft:recipes/building_blocks/magenta_concrete_powder': 0 + 'minecraft:recipes/building_blocks/magenta_stained_glass': 0 + 'minecraft:recipes/building_blocks/magenta_terracotta': 0 + 'minecraft:recipes/building_blocks/magenta_wool': 0 + 'minecraft:recipes/building_blocks/magma_block': 0 + 'minecraft:recipes/building_blocks/melon': 0 + 'minecraft:recipes/building_blocks/mossy_cobblestone': 0 + 'minecraft:recipes/building_blocks/mossy_cobblestone_slab': 0 + 'minecraft:recipes/building_blocks/mossy_cobblestone_slab_from_mossy_cobblestone_stonecutting': 0 + 'minecraft:recipes/building_blocks/mossy_cobblestone_stairs': 0 + 'minecraft:recipes/building_blocks/mossy_cobblestone_stairs_from_mossy_cobblestone_stonecutting': 0 + 'minecraft:recipes/building_blocks/mossy_stone_brick_slab': 0 + 'minecraft:recipes/building_blocks/mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting': 0 + 'minecraft:recipes/building_blocks/mossy_stone_brick_stairs': 0 + 'minecraft:recipes/building_blocks/mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting': 0 + 'minecraft:recipes/building_blocks/mossy_stone_bricks': 0 + 'minecraft:recipes/building_blocks/nether_brick_slab': 0 + 'minecraft:recipes/building_blocks/nether_brick_slab_from_nether_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/nether_brick_stairs': 0 + 'minecraft:recipes/building_blocks/nether_brick_stairs_from_nether_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/nether_bricks': 0 + 'minecraft:recipes/building_blocks/nether_wart_block': 0 + 'minecraft:recipes/building_blocks/netherite_block': 0 + 'minecraft:recipes/building_blocks/oak_planks': 0 + 'minecraft:recipes/building_blocks/oak_slab': 0 + 'minecraft:recipes/building_blocks/oak_stairs': 0 + 'minecraft:recipes/building_blocks/oak_wood': 0 + 'minecraft:recipes/building_blocks/orange_concrete_powder': 0 + 'minecraft:recipes/building_blocks/orange_stained_glass': 0 + 'minecraft:recipes/building_blocks/orange_terracotta': 0 + 'minecraft:recipes/building_blocks/orange_wool': 0 + 'minecraft:recipes/building_blocks/packed_ice': 0 + 'minecraft:recipes/building_blocks/pink_concrete_powder': 0 + 'minecraft:recipes/building_blocks/pink_stained_glass': 0 + 'minecraft:recipes/building_blocks/pink_terracotta': 0 + 'minecraft:recipes/building_blocks/pink_wool': 0 + 'minecraft:recipes/building_blocks/polished_andesite': 0 + 'minecraft:recipes/building_blocks/polished_andesite_from_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_andesite_slab': 0 + 'minecraft:recipes/building_blocks/polished_andesite_slab_from_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_andesite_slab_from_polished_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_andesite_stairs': 0 + 'minecraft:recipes/building_blocks/polished_andesite_stairs_from_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_andesite_stairs_from_polished_andesite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_basalt': 0 + 'minecraft:recipes/building_blocks/polished_basalt_from_basalt_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_slab': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_slab_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_slab_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_stairs': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_stairs_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_brick_stairs_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_bricks': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_bricks_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_bricks_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_slab': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_slab_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_slab_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_stairs': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_stairs_from_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_blackstone_stairs_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_diorite': 0 + 'minecraft:recipes/building_blocks/polished_diorite_from_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_diorite_slab': 0 + 'minecraft:recipes/building_blocks/polished_diorite_slab_from_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_diorite_slab_from_polished_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_diorite_stairs': 0 + 'minecraft:recipes/building_blocks/polished_diorite_stairs_from_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_diorite_stairs_from_polished_diorite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_granite': 0 + 'minecraft:recipes/building_blocks/polished_granite_from_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_granite_slab': 0 + 'minecraft:recipes/building_blocks/polished_granite_slab_from_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_granite_slab_from_polished_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_granite_stairs': 0 + 'minecraft:recipes/building_blocks/polished_granite_stairs_from_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/polished_granite_stairs_from_polished_granite_stonecutting': 0 + 'minecraft:recipes/building_blocks/prismarine': 0 + 'minecraft:recipes/building_blocks/prismarine_brick_slab': 0 + 'minecraft:recipes/building_blocks/prismarine_brick_slab_from_prismarine_stonecutting': 0 + 'minecraft:recipes/building_blocks/prismarine_brick_stairs': 0 + 'minecraft:recipes/building_blocks/prismarine_brick_stairs_from_prismarine_stonecutting': 0 + 'minecraft:recipes/building_blocks/prismarine_bricks': 0 + 'minecraft:recipes/building_blocks/prismarine_slab': 0 + 'minecraft:recipes/building_blocks/prismarine_slab_from_prismarine_stonecutting': 0 + 'minecraft:recipes/building_blocks/prismarine_stairs': 0 + 'minecraft:recipes/building_blocks/prismarine_stairs_from_prismarine_stonecutting': 0 + 'minecraft:recipes/building_blocks/purple_concrete_powder': 0 + 'minecraft:recipes/building_blocks/purple_stained_glass': 0 + 'minecraft:recipes/building_blocks/purple_terracotta': 0 + 'minecraft:recipes/building_blocks/purple_wool': 0 + 'minecraft:recipes/building_blocks/purpur_block': 0 + 'minecraft:recipes/building_blocks/purpur_pillar': 0 + 'minecraft:recipes/building_blocks/purpur_pillar_from_purpur_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/purpur_slab': 0 + 'minecraft:recipes/building_blocks/purpur_slab_from_purpur_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/purpur_stairs': 0 + 'minecraft:recipes/building_blocks/purpur_stairs_from_purpur_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/quartz_block': 0 + 'minecraft:recipes/building_blocks/quartz_bricks': 0 + 'minecraft:recipes/building_blocks/quartz_bricks_from_quartz_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/quartz_pillar': 0 + 'minecraft:recipes/building_blocks/quartz_pillar_from_quartz_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/quartz_slab': 0 + 'minecraft:recipes/building_blocks/quartz_slab_from_stonecutting': 0 + 'minecraft:recipes/building_blocks/quartz_stairs': 0 + 'minecraft:recipes/building_blocks/quartz_stairs_from_quartz_block_stonecutting': 0 + 'minecraft:recipes/building_blocks/red_concrete_powder': 0 + 'minecraft:recipes/building_blocks/red_nether_brick_slab': 0 + 'minecraft:recipes/building_blocks/red_nether_brick_slab_from_red_nether_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/red_nether_brick_stairs': 0 + 'minecraft:recipes/building_blocks/red_nether_brick_stairs_from_red_nether_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/red_nether_bricks': 0 + 'minecraft:recipes/building_blocks/red_sandstone': 0 + 'minecraft:recipes/building_blocks/red_sandstone_slab': 0 + 'minecraft:recipes/building_blocks/red_sandstone_slab_from_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/red_sandstone_stairs': 0 + 'minecraft:recipes/building_blocks/red_sandstone_stairs_from_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/red_stained_glass': 0 + 'minecraft:recipes/building_blocks/red_terracotta': 0 + 'minecraft:recipes/building_blocks/red_wool': 0 + 'minecraft:recipes/building_blocks/sandstone': 0 + 'minecraft:recipes/building_blocks/sandstone_slab': 0 + 'minecraft:recipes/building_blocks/sandstone_slab_from_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/sandstone_stairs': 0 + 'minecraft:recipes/building_blocks/sandstone_stairs_from_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/sea_lantern': 0 + 'minecraft:recipes/building_blocks/smooth_quartz': 0 + 'minecraft:recipes/building_blocks/smooth_quartz_slab': 0 + 'minecraft:recipes/building_blocks/smooth_quartz_slab_from_smooth_quartz_stonecutting': 0 + 'minecraft:recipes/building_blocks/smooth_quartz_stairs': 0 + 'minecraft:recipes/building_blocks/smooth_quartz_stairs_from_smooth_quartz_stonecutting': 0 + 'minecraft:recipes/building_blocks/smooth_red_sandstone': 0 + 'minecraft:recipes/building_blocks/smooth_red_sandstone_slab': 0 + 'minecraft:recipes/building_blocks/smooth_red_sandstone_slab_from_smooth_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/smooth_red_sandstone_stairs': 0 + 'minecraft:recipes/building_blocks/smooth_red_sandstone_stairs_from_smooth_red_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/smooth_sandstone': 0 + 'minecraft:recipes/building_blocks/smooth_sandstone_slab': 0 + 'minecraft:recipes/building_blocks/smooth_sandstone_slab_from_smooth_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/smooth_sandstone_stairs': 0 + 'minecraft:recipes/building_blocks/smooth_sandstone_stairs_from_smooth_sandstone_stonecutting': 0 + 'minecraft:recipes/building_blocks/smooth_stone': 0 + 'minecraft:recipes/building_blocks/smooth_stone_slab': 0 + 'minecraft:recipes/building_blocks/smooth_stone_slab_from_smooth_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/snow_block': 0 + 'minecraft:recipes/building_blocks/sponge': 0 + 'minecraft:recipes/building_blocks/spruce_planks': 0 + 'minecraft:recipes/building_blocks/spruce_slab': 0 + 'minecraft:recipes/building_blocks/spruce_stairs': 0 + 'minecraft:recipes/building_blocks/spruce_wood': 0 + 'minecraft:recipes/building_blocks/stone': 0 + 'minecraft:recipes/building_blocks/stone_brick_slab': 0 + 'minecraft:recipes/building_blocks/stone_brick_slab_from_stone_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/stone_brick_slab_from_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/stone_brick_stairs': 0 + 'minecraft:recipes/building_blocks/stone_brick_stairs_from_stone_bricks_stonecutting': 0 + 'minecraft:recipes/building_blocks/stone_brick_stairs_from_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/stone_bricks': 0 + 'minecraft:recipes/building_blocks/stone_bricks_from_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/stone_slab': 0 + 'minecraft:recipes/building_blocks/stone_slab_from_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/stone_stairs': 0 + 'minecraft:recipes/building_blocks/stone_stairs_from_stone_stonecutting': 0 + 'minecraft:recipes/building_blocks/stripped_acacia_wood': 0 + 'minecraft:recipes/building_blocks/stripped_birch_wood': 0 + 'minecraft:recipes/building_blocks/stripped_crimson_hyphae': 0 + 'minecraft:recipes/building_blocks/stripped_dark_oak_wood': 0 + 'minecraft:recipes/building_blocks/stripped_jungle_wood': 0 + 'minecraft:recipes/building_blocks/stripped_oak_wood': 0 + 'minecraft:recipes/building_blocks/stripped_spruce_wood': 0 + 'minecraft:recipes/building_blocks/stripped_warped_hyphae': 0 + 'minecraft:recipes/building_blocks/terracotta': 0 + 'minecraft:recipes/building_blocks/warped_hyphae': 0 + 'minecraft:recipes/building_blocks/warped_planks': 0 + 'minecraft:recipes/building_blocks/warped_slab': 0 + 'minecraft:recipes/building_blocks/warped_stairs': 0 + 'minecraft:recipes/building_blocks/white_concrete_powder': 0 + 'minecraft:recipes/building_blocks/white_stained_glass': 0 + 'minecraft:recipes/building_blocks/white_terracotta': 0 + 'minecraft:recipes/building_blocks/white_wool_from_string': 0 + 'minecraft:recipes/building_blocks/yellow_concrete_powder': 0 + 'minecraft:recipes/building_blocks/yellow_stained_glass': 0 + 'minecraft:recipes/building_blocks/yellow_terracotta': 0 + 'minecraft:recipes/building_blocks/yellow_wool': 0 + 'minecraft:recipes/combat/arrow': 0 + 'minecraft:recipes/combat/bow': 0 + 'minecraft:recipes/combat/crossbow': 0 + 'minecraft:recipes/combat/diamond_boots': 0 + 'minecraft:recipes/combat/diamond_chestplate': 0 + 'minecraft:recipes/combat/diamond_helmet': 0 + 'minecraft:recipes/combat/diamond_leggings': 0 + 'minecraft:recipes/combat/diamond_sword': 0 + 'minecraft:recipes/combat/golden_boots': 0 + 'minecraft:recipes/combat/golden_chestplate': 0 + 'minecraft:recipes/combat/golden_helmet': 0 + 'minecraft:recipes/combat/golden_leggings': 0 + 'minecraft:recipes/combat/golden_sword': 0 + 'minecraft:recipes/combat/iron_boots': 0 + 'minecraft:recipes/combat/iron_chestplate': 0 + 'minecraft:recipes/combat/iron_helmet': 0 + 'minecraft:recipes/combat/iron_leggings': 0 + 'minecraft:recipes/combat/iron_sword': 0 + 'minecraft:recipes/combat/leather_boots': 0 + 'minecraft:recipes/combat/leather_chestplate': 0 + 'minecraft:recipes/combat/leather_helmet': 0 + 'minecraft:recipes/combat/leather_leggings': 0 + 'minecraft:recipes/combat/netherite_boots_smithing': 0 + 'minecraft:recipes/combat/netherite_chestplate_smithing': 0 + 'minecraft:recipes/combat/netherite_helmet_smithing': 0 + 'minecraft:recipes/combat/netherite_leggings_smithing': 0 + 'minecraft:recipes/combat/netherite_sword_smithing': 0 + 'minecraft:recipes/combat/shield': 0 + 'minecraft:recipes/combat/spectral_arrow': 0 + 'minecraft:recipes/combat/stone_sword': 0 + 'minecraft:recipes/combat/turtle_helmet': 0 + 'minecraft:recipes/combat/wooden_sword': 0 + 'minecraft:recipes/decorations/acacia_fence': 0 + 'minecraft:recipes/decorations/acacia_sign': 0 + 'minecraft:recipes/decorations/andesite_wall': 0 + 'minecraft:recipes/decorations/andesite_wall_from_andesite_stonecutting': 0 + 'minecraft:recipes/decorations/anvil': 0 + 'minecraft:recipes/decorations/armor_stand': 0 + 'minecraft:recipes/decorations/barrel': 0 + 'minecraft:recipes/decorations/beehive': 0 + 'minecraft:recipes/decorations/birch_fence': 0 + 'minecraft:recipes/decorations/birch_sign': 0 + 'minecraft:recipes/decorations/black_banner': 0 + 'minecraft:recipes/decorations/black_bed': 0 + 'minecraft:recipes/decorations/black_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/black_carpet': 0 + 'minecraft:recipes/decorations/black_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/black_glazed_terracotta': 0 + 'minecraft:recipes/decorations/black_stained_glass_pane': 0 + 'minecraft:recipes/decorations/black_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/blackstone_wall': 0 + 'minecraft:recipes/decorations/blackstone_wall_from_blackstone_stonecutting': 0 + 'minecraft:recipes/decorations/blast_furnace': 0 + 'minecraft:recipes/decorations/blue_banner': 0 + 'minecraft:recipes/decorations/blue_bed': 0 + 'minecraft:recipes/decorations/blue_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/blue_carpet': 0 + 'minecraft:recipes/decorations/blue_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/blue_glazed_terracotta': 0 + 'minecraft:recipes/decorations/blue_stained_glass_pane': 0 + 'minecraft:recipes/decorations/blue_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/brick_wall': 0 + 'minecraft:recipes/decorations/brick_wall_from_bricks_stonecutting': 0 + 'minecraft:recipes/decorations/brown_banner': 0 + 'minecraft:recipes/decorations/brown_bed': 0 + 'minecraft:recipes/decorations/brown_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/brown_carpet': 0 + 'minecraft:recipes/decorations/brown_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/brown_glazed_terracotta': 0 + 'minecraft:recipes/decorations/brown_stained_glass_pane': 0 + 'minecraft:recipes/decorations/brown_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/campfire': 0 + 'minecraft:recipes/decorations/cartography_table': 0 + 'minecraft:recipes/decorations/chain': 0 + 'minecraft:recipes/decorations/chest': 0 + 'minecraft:recipes/decorations/cobblestone_wall': 0 + 'minecraft:recipes/decorations/cobblestone_wall_from_cobblestone_stonecutting': 0 + 'minecraft:recipes/decorations/composter': 0 + 'minecraft:recipes/decorations/crafting_table': 0 + 'minecraft:recipes/decorations/crimson_fence': 0 + 'minecraft:recipes/decorations/crimson_sign': 0 + 'minecraft:recipes/decorations/cyan_banner': 0 + 'minecraft:recipes/decorations/cyan_bed': 0 + 'minecraft:recipes/decorations/cyan_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/cyan_carpet': 0 + 'minecraft:recipes/decorations/cyan_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/cyan_glazed_terracotta': 0 + 'minecraft:recipes/decorations/cyan_stained_glass_pane': 0 + 'minecraft:recipes/decorations/cyan_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/dark_oak_fence': 0 + 'minecraft:recipes/decorations/dark_oak_sign': 0 + 'minecraft:recipes/decorations/diorite_wall': 0 + 'minecraft:recipes/decorations/diorite_wall_from_diorite_stonecutting': 0 + 'minecraft:recipes/decorations/enchanting_table': 0 + 'minecraft:recipes/decorations/end_crystal': 0 + 'minecraft:recipes/decorations/end_rod': 0 + 'minecraft:recipes/decorations/end_stone_brick_wall': 0 + 'minecraft:recipes/decorations/end_stone_brick_wall_from_end_stone_brick_stonecutting': 0 + 'minecraft:recipes/decorations/end_stone_brick_wall_from_end_stone_stonecutting': 0 + 'minecraft:recipes/decorations/ender_chest': 0 + 'minecraft:recipes/decorations/fletching_table': 0 + 'minecraft:recipes/decorations/flower_pot': 0 + 'minecraft:recipes/decorations/furnace': 0 + 'minecraft:recipes/decorations/glass_pane': 0 + 'minecraft:recipes/decorations/granite_wall': 0 + 'minecraft:recipes/decorations/granite_wall_from_granite_stonecutting': 0 + 'minecraft:recipes/decorations/gray_banner': 0 + 'minecraft:recipes/decorations/gray_bed': 0 + 'minecraft:recipes/decorations/gray_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/gray_carpet': 0 + 'minecraft:recipes/decorations/gray_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/gray_glazed_terracotta': 0 + 'minecraft:recipes/decorations/gray_stained_glass_pane': 0 + 'minecraft:recipes/decorations/gray_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/green_banner': 0 + 'minecraft:recipes/decorations/green_bed': 0 + 'minecraft:recipes/decorations/green_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/green_carpet': 0 + 'minecraft:recipes/decorations/green_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/green_glazed_terracotta': 0 + 'minecraft:recipes/decorations/green_stained_glass_pane': 0 + 'minecraft:recipes/decorations/green_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/grindstone': 0 + 'minecraft:recipes/decorations/honey_block': 0 + 'minecraft:recipes/decorations/honeycomb_block': 0 + 'minecraft:recipes/decorations/iron_bars': 0 + 'minecraft:recipes/decorations/item_frame': 0 + 'minecraft:recipes/decorations/jukebox': 0 + 'minecraft:recipes/decorations/jungle_fence': 0 + 'minecraft:recipes/decorations/jungle_sign': 0 + 'minecraft:recipes/decorations/ladder': 0 + 'minecraft:recipes/decorations/lantern': 0 + 'minecraft:recipes/decorations/light_blue_banner': 0 + 'minecraft:recipes/decorations/light_blue_bed': 0 + 'minecraft:recipes/decorations/light_blue_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/light_blue_carpet': 0 + 'minecraft:recipes/decorations/light_blue_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/light_blue_glazed_terracotta': 0 + 'minecraft:recipes/decorations/light_blue_stained_glass_pane': 0 + 'minecraft:recipes/decorations/light_blue_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/light_gray_banner': 0 + 'minecraft:recipes/decorations/light_gray_bed': 0 + 'minecraft:recipes/decorations/light_gray_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/light_gray_carpet': 0 + 'minecraft:recipes/decorations/light_gray_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/light_gray_glazed_terracotta': 0 + 'minecraft:recipes/decorations/light_gray_stained_glass_pane': 0 + 'minecraft:recipes/decorations/light_gray_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/lime_banner': 0 + 'minecraft:recipes/decorations/lime_bed': 0 + 'minecraft:recipes/decorations/lime_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/lime_carpet': 0 + 'minecraft:recipes/decorations/lime_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/lime_glazed_terracotta': 0 + 'minecraft:recipes/decorations/lime_stained_glass_pane': 0 + 'minecraft:recipes/decorations/lime_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/lodestone': 0 + 'minecraft:recipes/decorations/loom': 0 + 'minecraft:recipes/decorations/magenta_banner': 0 + 'minecraft:recipes/decorations/magenta_bed': 0 + 'minecraft:recipes/decorations/magenta_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/magenta_carpet': 0 + 'minecraft:recipes/decorations/magenta_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/magenta_glazed_terracotta': 0 + 'minecraft:recipes/decorations/magenta_stained_glass_pane': 0 + 'minecraft:recipes/decorations/magenta_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/mossy_cobblestone_wall': 0 + 'minecraft:recipes/decorations/mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting': 0 + 'minecraft:recipes/decorations/mossy_stone_brick_wall': 0 + 'minecraft:recipes/decorations/mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting': 0 + 'minecraft:recipes/decorations/nether_brick_fence': 0 + 'minecraft:recipes/decorations/nether_brick_wall': 0 + 'minecraft:recipes/decorations/nether_brick_wall_from_nether_bricks_stonecutting': 0 + 'minecraft:recipes/decorations/oak_fence': 0 + 'minecraft:recipes/decorations/oak_sign': 0 + 'minecraft:recipes/decorations/orange_banner': 0 + 'minecraft:recipes/decorations/orange_bed': 0 + 'minecraft:recipes/decorations/orange_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/orange_carpet': 0 + 'minecraft:recipes/decorations/orange_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/orange_glazed_terracotta': 0 + 'minecraft:recipes/decorations/orange_stained_glass_pane': 0 + 'minecraft:recipes/decorations/orange_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/painting': 0 + 'minecraft:recipes/decorations/pink_banner': 0 + 'minecraft:recipes/decorations/pink_bed': 0 + 'minecraft:recipes/decorations/pink_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/pink_carpet': 0 + 'minecraft:recipes/decorations/pink_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/pink_glazed_terracotta': 0 + 'minecraft:recipes/decorations/pink_stained_glass_pane': 0 + 'minecraft:recipes/decorations/pink_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/polished_blackstone_brick_wall': 0 + 'minecraft:recipes/decorations/polished_blackstone_brick_wall_from_blackstone_stonecutting': 0 + 'minecraft:recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_bricks_stonecutting': 0 + 'minecraft:recipes/decorations/polished_blackstone_brick_wall_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/decorations/polished_blackstone_wall': 0 + 'minecraft:recipes/decorations/polished_blackstone_wall_from_blackstone_stonecutting': 0 + 'minecraft:recipes/decorations/polished_blackstone_wall_from_polished_blackstone_stonecutting': 0 + 'minecraft:recipes/decorations/prismarine_wall': 0 + 'minecraft:recipes/decorations/prismarine_wall_from_prismarine_stonecutting': 0 + 'minecraft:recipes/decorations/purple_banner': 0 + 'minecraft:recipes/decorations/purple_bed': 0 + 'minecraft:recipes/decorations/purple_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/purple_carpet': 0 + 'minecraft:recipes/decorations/purple_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/purple_glazed_terracotta': 0 + 'minecraft:recipes/decorations/purple_stained_glass_pane': 0 + 'minecraft:recipes/decorations/purple_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/red_banner': 0 + 'minecraft:recipes/decorations/red_bed': 0 + 'minecraft:recipes/decorations/red_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/red_carpet': 0 + 'minecraft:recipes/decorations/red_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/red_glazed_terracotta': 0 + 'minecraft:recipes/decorations/red_nether_brick_wall': 0 + 'minecraft:recipes/decorations/red_nether_brick_wall_from_red_nether_bricks_stonecutting': 0 + 'minecraft:recipes/decorations/red_sandstone_wall': 0 + 'minecraft:recipes/decorations/red_sandstone_wall_from_red_sandstone_stonecutting': 0 + 'minecraft:recipes/decorations/red_stained_glass_pane': 0 + 'minecraft:recipes/decorations/red_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/respawn_anchor': 0 + 'minecraft:recipes/decorations/sandstone_wall': 0 + 'minecraft:recipes/decorations/sandstone_wall_from_sandstone_stonecutting': 0 + 'minecraft:recipes/decorations/scaffolding': 0 + 'minecraft:recipes/decorations/shulker_box': 0 + 'minecraft:recipes/decorations/slime_block': 0 + 'minecraft:recipes/decorations/smithing_table': 0 + 'minecraft:recipes/decorations/smoker': 0 + 'minecraft:recipes/decorations/snow': 0 + 'minecraft:recipes/decorations/soul_campfire': 0 + 'minecraft:recipes/decorations/soul_lantern': 0 + 'minecraft:recipes/decorations/soul_torch': 0 + 'minecraft:recipes/decorations/spruce_fence': 0 + 'minecraft:recipes/decorations/spruce_sign': 0 + 'minecraft:recipes/decorations/stone_brick_wall': 0 + 'minecraft:recipes/decorations/stone_brick_wall_from_stone_bricks_stonecutting': 0 + 'minecraft:recipes/decorations/stone_brick_walls_from_stone_stonecutting': 0 + 'minecraft:recipes/decorations/stonecutter': 0 + 'minecraft:recipes/decorations/torch': 0 + 'minecraft:recipes/decorations/warped_fence': 0 + 'minecraft:recipes/decorations/warped_sign': 0 + 'minecraft:recipes/decorations/white_banner': 0 + 'minecraft:recipes/decorations/white_bed': 0 + 'minecraft:recipes/decorations/white_carpet': 0 + 'minecraft:recipes/decorations/white_glazed_terracotta': 0 + 'minecraft:recipes/decorations/white_stained_glass_pane': 0 + 'minecraft:recipes/decorations/white_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/decorations/yellow_banner': 0 + 'minecraft:recipes/decorations/yellow_bed': 0 + 'minecraft:recipes/decorations/yellow_bed_from_white_bed': 0 + 'minecraft:recipes/decorations/yellow_carpet': 0 + 'minecraft:recipes/decorations/yellow_carpet_from_white_carpet': 0 + 'minecraft:recipes/decorations/yellow_glazed_terracotta': 0 + 'minecraft:recipes/decorations/yellow_stained_glass_pane': 0 + 'minecraft:recipes/decorations/yellow_stained_glass_pane_from_glass_pane': 0 + 'minecraft:recipes/food/baked_potato': 0 + 'minecraft:recipes/food/baked_potato_from_campfire_cooking': 0 + 'minecraft:recipes/food/baked_potato_from_smoking': 0 + 'minecraft:recipes/food/beetroot_soup': 0 + 'minecraft:recipes/food/bread': 0 + 'minecraft:recipes/food/cake': 0 + 'minecraft:recipes/food/cooked_beef': 0 + 'minecraft:recipes/food/cooked_beef_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_beef_from_smoking': 0 + 'minecraft:recipes/food/cooked_chicken': 0 + 'minecraft:recipes/food/cooked_chicken_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_chicken_from_smoking': 0 + 'minecraft:recipes/food/cooked_cod': 0 + 'minecraft:recipes/food/cooked_cod_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_cod_from_smoking': 0 + 'minecraft:recipes/food/cooked_mutton': 0 + 'minecraft:recipes/food/cooked_mutton_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_mutton_from_smoking': 0 + 'minecraft:recipes/food/cooked_porkchop': 0 + 'minecraft:recipes/food/cooked_porkchop_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_porkchop_from_smoking': 0 + 'minecraft:recipes/food/cooked_rabbit': 0 + 'minecraft:recipes/food/cooked_rabbit_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_rabbit_from_smoking': 0 + 'minecraft:recipes/food/cooked_salmon': 0 + 'minecraft:recipes/food/cooked_salmon_from_campfire_cooking': 0 + 'minecraft:recipes/food/cooked_salmon_from_smoking': 0 + 'minecraft:recipes/food/cookie': 0 + 'minecraft:recipes/food/dried_kelp': 0 + 'minecraft:recipes/food/dried_kelp_from_campfire_cooking': 0 + 'minecraft:recipes/food/dried_kelp_from_smelting': 0 + 'minecraft:recipes/food/dried_kelp_from_smoking': 0 + 'minecraft:recipes/food/golden_apple': 0 + 'minecraft:recipes/food/honey_bottle': 0 + 'minecraft:recipes/food/mushroom_stew': 0 + 'minecraft:recipes/food/pumpkin_pie': 0 + 'minecraft:recipes/food/rabbit_stew_from_brown_mushroom': 0 + 'minecraft:recipes/food/rabbit_stew_from_red_mushroom': 0 + 'minecraft:recipes/misc/beacon': 0 + 'minecraft:recipes/misc/black_dye': 0 + 'minecraft:recipes/misc/black_dye_from_wither_rose': 0 + 'minecraft:recipes/misc/blue_dye': 0 + 'minecraft:recipes/misc/blue_dye_from_cornflower': 0 + 'minecraft:recipes/misc/bone_meal': 0 + 'minecraft:recipes/misc/bone_meal_from_bone_block': 0 + 'minecraft:recipes/misc/book': 0 + 'minecraft:recipes/misc/bowl': 0 + 'minecraft:recipes/misc/brick': 0 + 'minecraft:recipes/misc/brown_dye': 0 + 'minecraft:recipes/misc/bucket': 0 + 'minecraft:recipes/misc/charcoal': 0 + 'minecraft:recipes/misc/coal': 0 + 'minecraft:recipes/misc/coal_from_blasting': 0 + 'minecraft:recipes/misc/coal_from_smelting': 0 + 'minecraft:recipes/misc/conduit': 0 + 'minecraft:recipes/misc/creeper_banner_pattern': 0 + 'minecraft:recipes/misc/cyan_dye': 0 + 'minecraft:recipes/misc/diamond': 0 + 'minecraft:recipes/misc/diamond_from_blasting': 0 + 'minecraft:recipes/misc/diamond_from_smelting': 0 + 'minecraft:recipes/misc/emerald': 0 + 'minecraft:recipes/misc/emerald_from_blasting': 0 + 'minecraft:recipes/misc/emerald_from_smelting': 0 + 'minecraft:recipes/misc/ender_eye': 0 + 'minecraft:recipes/misc/fire_charge': 0 + 'minecraft:recipes/misc/flower_banner_pattern': 0 + 'minecraft:recipes/misc/gold_ingot': 0 + 'minecraft:recipes/misc/gold_ingot_from_blasting': 0 + 'minecraft:recipes/misc/gold_ingot_from_gold_block': 0 + 'minecraft:recipes/misc/gold_ingot_from_nuggets': 0 + 'minecraft:recipes/misc/gold_nugget': 0 + 'minecraft:recipes/misc/gold_nugget_from_blasting': 0 + 'minecraft:recipes/misc/gold_nugget_from_smelting': 0 + 'minecraft:recipes/misc/gray_dye': 0 + 'minecraft:recipes/misc/green_dye': 0 + 'minecraft:recipes/misc/iron_ingot': 0 + 'minecraft:recipes/misc/iron_ingot_from_blasting': 0 + 'minecraft:recipes/misc/iron_ingot_from_iron_block': 0 + 'minecraft:recipes/misc/iron_ingot_from_nuggets': 0 + 'minecraft:recipes/misc/iron_nugget': 0 + 'minecraft:recipes/misc/iron_nugget_from_blasting': 0 + 'minecraft:recipes/misc/iron_nugget_from_smelting': 0 + 'minecraft:recipes/misc/lapis_from_blasting': 0 + 'minecraft:recipes/misc/lapis_from_smelting': 0 + 'minecraft:recipes/misc/lapis_lazuli': 0 + 'minecraft:recipes/misc/leather': 0 + 'minecraft:recipes/misc/leather_horse_armor': 0 + 'minecraft:recipes/misc/light_blue_dye_from_blue_orchid': 0 + 'minecraft:recipes/misc/light_blue_dye_from_blue_white_dye': 0 + 'minecraft:recipes/misc/light_gray_dye_from_azure_bluet': 0 + 'minecraft:recipes/misc/light_gray_dye_from_black_white_dye': 0 + 'minecraft:recipes/misc/light_gray_dye_from_gray_white_dye': 0 + 'minecraft:recipes/misc/light_gray_dye_from_oxeye_daisy': 0 + 'minecraft:recipes/misc/light_gray_dye_from_white_tulip': 0 + 'minecraft:recipes/misc/lime_dye': 0 + 'minecraft:recipes/misc/lime_dye_from_smelting': 0 + 'minecraft:recipes/misc/magenta_dye_from_allium': 0 + 'minecraft:recipes/misc/magenta_dye_from_blue_red_pink': 0 + 'minecraft:recipes/misc/magenta_dye_from_blue_red_white_dye': 0 + 'minecraft:recipes/misc/magenta_dye_from_lilac': 0 + 'minecraft:recipes/misc/magenta_dye_from_purple_and_pink': 0 + 'minecraft:recipes/misc/map': 0 + 'minecraft:recipes/misc/melon_seeds': 0 + 'minecraft:recipes/misc/mojang_banner_pattern': 0 + 'minecraft:recipes/misc/nether_brick': 0 + 'minecraft:recipes/misc/netherite_ingot': 0 + 'minecraft:recipes/misc/netherite_ingot_from_netherite_block': 0 + 'minecraft:recipes/misc/netherite_scrap': 0 + 'minecraft:recipes/misc/netherite_scrap_from_blasting': 0 + 'minecraft:recipes/misc/orange_dye_from_orange_tulip': 0 + 'minecraft:recipes/misc/orange_dye_from_red_yellow': 0 + 'minecraft:recipes/misc/paper': 0 + 'minecraft:recipes/misc/pink_dye_from_peony': 0 + 'minecraft:recipes/misc/pink_dye_from_pink_tulip': 0 + 'minecraft:recipes/misc/pink_dye_from_red_white_dye': 0 + 'minecraft:recipes/misc/popped_chorus_fruit': 0 + 'minecraft:recipes/misc/pumpkin_seeds': 0 + 'minecraft:recipes/misc/purple_dye': 0 + 'minecraft:recipes/misc/quartz': 0 + 'minecraft:recipes/misc/quartz_from_blasting': 0 + 'minecraft:recipes/misc/red_dye_from_beetroot': 0 + 'minecraft:recipes/misc/red_dye_from_poppy': 0 + 'minecraft:recipes/misc/red_dye_from_rose_bush': 0 + 'minecraft:recipes/misc/red_dye_from_tulip': 0 + 'minecraft:recipes/misc/skull_banner_pattern': 0 + 'minecraft:recipes/misc/slime_ball': 0 + 'minecraft:recipes/misc/stick': 0 + 'minecraft:recipes/misc/stick_from_bamboo_item': 0 + 'minecraft:recipes/misc/sugar_from_honey_bottle': 0 + 'minecraft:recipes/misc/sugar_from_sugar_cane': 0 + 'minecraft:recipes/misc/wheat': 0 + 'minecraft:recipes/misc/white_dye': 0 + 'minecraft:recipes/misc/white_dye_from_lily_of_the_valley': 0 + 'minecraft:recipes/misc/writable_book': 0 + 'minecraft:recipes/misc/yellow_dye_from_dandelion': 0 + 'minecraft:recipes/misc/yellow_dye_from_sunflower': 0 + 'minecraft:recipes/redstone/acacia_button': 0 + 'minecraft:recipes/redstone/acacia_door': 0 + 'minecraft:recipes/redstone/acacia_fence_gate': 0 + 'minecraft:recipes/redstone/acacia_pressure_plate': 0 + 'minecraft:recipes/redstone/acacia_trapdoor': 0 + 'minecraft:recipes/redstone/birch_button': 0 + 'minecraft:recipes/redstone/birch_door': 0 + 'minecraft:recipes/redstone/birch_fence_gate': 0 + 'minecraft:recipes/redstone/birch_pressure_plate': 0 + 'minecraft:recipes/redstone/birch_trapdoor': 0 + 'minecraft:recipes/redstone/comparator': 0 + 'minecraft:recipes/redstone/crimson_button': 0 + 'minecraft:recipes/redstone/crimson_door': 0 + 'minecraft:recipes/redstone/crimson_fence_gate': 0 + 'minecraft:recipes/redstone/crimson_pressure_plate': 0 + 'minecraft:recipes/redstone/crimson_trapdoor': 0 + 'minecraft:recipes/redstone/dark_oak_button': 0 + 'minecraft:recipes/redstone/dark_oak_door': 0 + 'minecraft:recipes/redstone/dark_oak_fence_gate': 0 + 'minecraft:recipes/redstone/dark_oak_pressure_plate': 0 + 'minecraft:recipes/redstone/dark_oak_trapdoor': 0 + 'minecraft:recipes/redstone/daylight_detector': 0 + 'minecraft:recipes/redstone/dispenser': 0 + 'minecraft:recipes/redstone/dropper': 0 + 'minecraft:recipes/redstone/heavy_weighted_pressure_plate': 0 + 'minecraft:recipes/redstone/hopper': 0 + 'minecraft:recipes/redstone/iron_door': 0 + 'minecraft:recipes/redstone/iron_trapdoor': 0 + 'minecraft:recipes/redstone/jungle_button': 0 + 'minecraft:recipes/redstone/jungle_door': 0 + 'minecraft:recipes/redstone/jungle_fence_gate': 0 + 'minecraft:recipes/redstone/jungle_pressure_plate': 0 + 'minecraft:recipes/redstone/jungle_trapdoor': 0 + 'minecraft:recipes/redstone/lectern': 0 + 'minecraft:recipes/redstone/lever': 0 + 'minecraft:recipes/redstone/light_weighted_pressure_plate': 0 + 'minecraft:recipes/redstone/note_block': 0 + 'minecraft:recipes/redstone/oak_button': 0 + 'minecraft:recipes/redstone/oak_door': 0 + 'minecraft:recipes/redstone/oak_fence_gate': 0 + 'minecraft:recipes/redstone/oak_pressure_plate': 0 + 'minecraft:recipes/redstone/oak_trapdoor': 0 + 'minecraft:recipes/redstone/observer': 0 + 'minecraft:recipes/redstone/piston': 0 + 'minecraft:recipes/redstone/polished_blackstone_button': 0 + 'minecraft:recipes/redstone/polished_blackstone_pressure_plate': 0 + 'minecraft:recipes/redstone/redstone': 0 + 'minecraft:recipes/redstone/redstone_block': 0 + 'minecraft:recipes/redstone/redstone_from_blasting': 0 + 'minecraft:recipes/redstone/redstone_from_smelting': 0 + 'minecraft:recipes/redstone/redstone_lamp': 0 + 'minecraft:recipes/redstone/redstone_torch': 0 + 'minecraft:recipes/redstone/repeater': 0 + 'minecraft:recipes/redstone/spruce_button': 0 + 'minecraft:recipes/redstone/spruce_door': 0 + 'minecraft:recipes/redstone/spruce_fence_gate': 0 + 'minecraft:recipes/redstone/spruce_pressure_plate': 0 + 'minecraft:recipes/redstone/spruce_trapdoor': 0 + 'minecraft:recipes/redstone/sticky_piston': 0 + 'minecraft:recipes/redstone/stone_button': 0 + 'minecraft:recipes/redstone/stone_pressure_plate': 0 + 'minecraft:recipes/redstone/target': 0 + 'minecraft:recipes/redstone/tnt': 0 + 'minecraft:recipes/redstone/trapped_chest': 0 + 'minecraft:recipes/redstone/tripwire_hook': 0 + 'minecraft:recipes/redstone/warped_button': 0 + 'minecraft:recipes/redstone/warped_door': 0 + 'minecraft:recipes/redstone/warped_fence_gate': 0 + 'minecraft:recipes/redstone/warped_pressure_plate': 0 + 'minecraft:recipes/redstone/warped_trapdoor': 0 + 'minecraft:recipes/root': 0 + 'minecraft:recipes/tools/clock': 0 + 'minecraft:recipes/tools/compass': 0 + 'minecraft:recipes/tools/diamond_axe': 0 + 'minecraft:recipes/tools/diamond_hoe': 0 + 'minecraft:recipes/tools/diamond_pickaxe': 0 + 'minecraft:recipes/tools/diamond_shovel': 0 + 'minecraft:recipes/tools/fishing_rod': 0 + 'minecraft:recipes/tools/flint_and_steel': 0 + 'minecraft:recipes/tools/golden_axe': 0 + 'minecraft:recipes/tools/golden_hoe': 0 + 'minecraft:recipes/tools/golden_pickaxe': 0 + 'minecraft:recipes/tools/golden_shovel': 0 + 'minecraft:recipes/tools/iron_axe': 0 + 'minecraft:recipes/tools/iron_hoe': 0 + 'minecraft:recipes/tools/iron_pickaxe': 0 + 'minecraft:recipes/tools/iron_shovel': 0 + 'minecraft:recipes/tools/lead': 0 + 'minecraft:recipes/tools/netherite_axe_smithing': 0 + 'minecraft:recipes/tools/netherite_hoe_smithing': 0 + 'minecraft:recipes/tools/netherite_pickaxe_smithing': 0 + 'minecraft:recipes/tools/netherite_shovel_smithing': 0 + 'minecraft:recipes/tools/shears': 0 + 'minecraft:recipes/tools/stone_axe': 0 + 'minecraft:recipes/tools/stone_hoe': 0 + 'minecraft:recipes/tools/stone_pickaxe': 0 + 'minecraft:recipes/tools/stone_shovel': 0 + 'minecraft:recipes/tools/wooden_axe': 0 + 'minecraft:recipes/tools/wooden_hoe': 0 + 'minecraft:recipes/tools/wooden_pickaxe': 0 + 'minecraft:recipes/tools/wooden_shovel': 0 + 'minecraft:recipes/transportation/acacia_boat': 0 + 'minecraft:recipes/transportation/activator_rail': 0 + 'minecraft:recipes/transportation/birch_boat': 0 + 'minecraft:recipes/transportation/carrot_on_a_stick': 0 + 'minecraft:recipes/transportation/chest_minecart': 0 + 'minecraft:recipes/transportation/dark_oak_boat': 0 + 'minecraft:recipes/transportation/detector_rail': 0 + 'minecraft:recipes/transportation/furnace_minecart': 0 + 'minecraft:recipes/transportation/hopper_minecart': 0 + 'minecraft:recipes/transportation/jungle_boat': 0 + 'minecraft:recipes/transportation/minecart': 0 + 'minecraft:recipes/transportation/oak_boat': 0 + 'minecraft:recipes/transportation/powered_rail': 0 + 'minecraft:recipes/transportation/rail': 0 + 'minecraft:recipes/transportation/spruce_boat': 0 + 'minecraft:recipes/transportation/tnt_minecart': 0 + 'minecraft:recipes/transportation/warped_fungus_on_a_stick': 0 + 'minecraft:story/cure_zombie_villager': 1 + 'minecraft:story/deflect_arrow': 1 + 'minecraft:story/enchant_item': 1 + 'minecraft:story/enter_the_end': 1 + 'minecraft:story/enter_the_nether': 1 + 'minecraft:story/follow_ender_eye': 1 + 'minecraft:story/form_obsidian': 1 + 'minecraft:story/iron_tools': 1 + 'minecraft:story/lava_bucket': 1 + 'minecraft:story/mine_diamond': 1 + 'minecraft:story/mine_stone': 1 + 'minecraft:story/obtain_armor': 1 + 'minecraft:story/root': 0 + 'minecraft:story/shiny_gear': 1 + 'minecraft:story/smelt_iron': 1 + 'minecraft:story/upgrade_tools': 1 \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 40d0775..6f1b84d 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,7 +3,7 @@ boxed: command: # Player Command. What command users will run to access their area. # To define alias, just separate commands with white space. - island: boxed bx + island: boxed bx box # The admin command. # To define alias, just separate commands with white space. admin: boxadmin diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 4821bf9..c3c2102 100755 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -5,20 +5,22 @@ # These strings are deltas to the strings in BentoBox. Any BentoBox string can be # overridden by placing it under the boxed key. boxed: + completed: "&a [name] completed!" + size-changed: "&a Box size increased by [number]!" # General strings general: errors: - no-island: "&c You do not have an area!" - player-has-island: "&c Player already has an area!" - player-has-no-island: "&c That player has no area!" - already-have-island: "&c You already have an area!" - no-safe-location: "&c No safe location found in area!" + no-island: "&c You do not have a box!" + player-has-island: "&c Player already has a box!" + player-has-no-island: "&c That player has no box!" + already-have-island: "&c You already have a box!" + no-safe-location: "&c No safe location found in box!" not-owner: "&c You are not the owner of your team!" commands: #Main Boxed command boxed: help: - description: "Start a Boxed game or teleport to your Boxed home" + description: "Start a Boxed game or teleport to your box" go: description: "Go home" tip: "&c You cannot teleport when falling!" @@ -26,31 +28,31 @@ boxed: # Override BentoBox default island command strings island: info: - description: "display info about your area or the player's area" + description: "display info about your box or the player's box" reset: - description: "restart in another area" + description: "restart in another box" parameters: "" must-remove-members: "&c You must remove all team players before you can restart (/[label] team kick )." sethome: - must-be-on-your-island: "&c You must be in your area to set home!" + must-be-on-your-island: "&c You must be in your box to set home!" home-set: "&6 Your home has been set to your current location." setname: - description: "set a name for your area" + description: "set a name for your box" resetname: - description: "reset your area name" + description: "reset your box name" team: coop: description: "make a player coop rank" uncoop: - you-are-no-longer-a-coop-member: "&c You are no longer a coop member of [name]'s area" - all-members-logged-off: "&c All team members logged off so you are no longer a coop member of [name]'s area" + you-are-no-longer-a-coop-member: "&c You are no longer a coop member of [name]'s box" + all-members-logged-off: "&c All team members logged off so you are no longer a coop member of [name]'s box" trust: description: "give a player trusted rank" invite: description: "invite a player to join your team" name-has-invited-you: "&a [name] has invited you to join their team." to-accept-or-reject: "&a Do /[label] team accept to accept, or /[label] team reject to reject" - you-will-lose-your-island: "&c WARNING! You will lose your our area if you accept!" + you-will-lose-your-island: "&c WARNING! You will lose your our box if you accept!" errors: island-is-full: "&c Your team is full, you can't invite anyone else." accept: @@ -58,7 +60,7 @@ boxed: name-joined-your-island: "&a [name] joined your team!" confirmation: |- &c Are you sure you want to accept this invite? - &c&l This will &n WIPE &r&c&l your current area! + &c&l This will &n WIPE &r&c&l your current box! reject: you-rejected-invite: "&a You rejected the invitation to join a team." name-rejected-your-invite: "&c [name] rejected your invite!" @@ -78,73 +80,73 @@ boxed: description: "transfer team ownership to a member" errors: target-is-not-member: "&c That player is not part of your team!" - name-is-the-owner: "&a [name] is now the area owner!" - you-are-the-owner: "&a You are now the area owner!" + name-is-the-owner: "&a [name] is now the box owner!" + you-are-the-owner: "&a You are now the box owner!" ban: - description: "ban a player from your area" + description: "ban a player from your box" cannot-ban-more-players: "&c You reached the ban limit, you cannot ban any more players." - owner-banned-you: "&b [name]&c banned you from their area!" - you-are-banned: "&b You are banned from this area!" + owner-banned-you: "&b [name]&c banned you from their box!" + you-are-banned: "&b You are banned from this box!" unban: - description: "unban a player from your area" - you-are-unbanned: "&b [name]&a unbanned you from their area!" + description: "unban a player from your box" + you-are-unbanned: "&b [name]&a unbanned you from their box!" banlist: - noone: "&a No one is banned on this area" + noone: "&a No one is banned on this box" settings: - description: "display area settings" + description: "display box settings" # Admin command /sgadmin admin: team: add: - name-has-island: "&c [name] has an area. Unregister or delete them first!" + name-has-island: "&c [name] has a box. Unregister or delete them first!" setowner: - description: "transfers area ownership to the player" - already-owner: "&c Player is already the owner of this area!" + description: "transfers box ownership to the player" + already-owner: "&c Player is already the owner of this box!" range: - description: "Admin area range command" + description: "Admin box range command" display: - description: "Show/hide area range indicators" + description: "Show/hide box range indicators" hint: |- &c Red Barrier icons &f show the current protected range limit. &7 Gray Particles &f show the max limit. &a Green Particles &f show the default protected range if the protection range differs from it. set: - description: "Sets the area protected range" + description: "Sets the box protected range" reset: description: "Resets the protected range to the world default" register: parameters: "" - description: "register player to unowned area you are in" - registered-island: "&a Registered player to area at [xyz]." + description: "register player to unowned box you are in" + registered-island: "&a Registered player to box at [xyz]." already-owned: "&c Area is already owned by another player!" - no-island-here: "&c There is no player area here. Confirm to make one." + no-island-here: "&c There is no player box here. Confirm to make one." in-deletion: "&c This space is currently being regenerated. Try later." unregister: - description: "unregister owner from an area, but keep area blocks as-is" - unregistered-island: "&a Unregistered player from area at [xyz]." + description: "unregister owner from a box, but keep box blocks as-is" + unregistered-island: "&a Unregistered player from box at [xyz]." info: description: "get info on where you are or on player" - no-island: "&c You are not in a registered area right now..." + no-island: "&c You are not in a registered box right now..." island-location: "Area location: [xyz]" island-coords: "Area coordinates: [xz1] to [xz2]" is-spawn: "Area is a spawn island" setrange: - description: "set the range of player's area" + description: "set the range of player's box" range-updated: "Area range updated to [number]" tp: - description: "teleport to a player's area" + description: "teleport to a player's box" getrank: - description: "get a player's rank in their area" - rank-is: "&a Rank is [rank] in their area." + description: "get a player's rank in their box" + rank-is: "&a Rank is [rank] in their box." setrank: - description: "set a player's rank in their area" + description: "set a player's rank in their box" setspawn: - description: "set an area as spawn for this world" - already-spawn: "&c This area is already a spawn!" - no-island-here: "&c There is no registered area here." - confirmation: "&c Are you sure you want to set this area as the spawn for this world?" + description: "set a box as spawn for this world" + already-spawn: "&c This box is already a spawn!" + no-island-here: "&c There is no registered box here." + confirmation: "&c Are you sure you want to set this box as the spawn for this world?" delete: - description: "deletes a player and regenerates their area" + description: "deletes a player and regenerates their box" deleted-island: "&a Area at &e [xyz] &a has been successfully regenerated." protection: @@ -157,49 +159,49 @@ boxed: &a blocks ENTER_EXIT_MESSAGES: description: "Display entry and exit messages" - island: "[name]'s protected area" + island: "[name]'s protected box" name: "Enter/Exit messages" now-entering: '&a Now entering &b [name]&a .' - now-entering-your-island: '&a Now entering your area.' + now-entering-your-island: '&a Now entering your box.' now-leaving: '&a Now leaving &b [name]&a .' - now-leaving-your-island: '&a Now leaving your area.' + now-leaving-your-island: '&a Now leaving your box.' GEO_LIMIT_MOBS: description: |- &a Remove mobs that go &a outside protected &a player space - name: "&e Limit mobs to player area" + name: "&e Limit mobs to player box" ISLAND_RESPAWN: description: |- &a Players respawn - &a in their area + &a in their box name: "Area respawn" LOCK: - name: "Lock player area" + name: "Lock player box" OFFLINE_REDSTONE: description: |- &a When disabled, redstone - &a will not operate in areas + &a will not operate in boxs &a where all members are offline. &a May help reduce lag. PISTON_PUSH: description: |- &a Allow pistons to push - &a blocks outside a player's area + &a blocks outside a player's box PVP_OVERWORLD: description: |- &c Enable/Disable PVP - &c in protected area. + &c in protected box. REMOVE_MOBS: description: |- &a Remove monsters when - &a teleporting to an area + &a teleporting to a box PREVENT_TELEPORT_WHEN_FALLING: description: |- &a Prevent players from teleporting &a if they are falling. hint: "&c You cannot teleport while you are falling!" - locked: "&c This area is locked!" + locked: "&c This box is locked!" protected: "&c Area protected: [description]" panel: @@ -207,9 +209,9 @@ boxed: title: "&6 Protection" description: |- &a Protection settings - &a for this area + &a for this box SETTING: description: |- &a General settings - &a for this area + &a for this box