diff --git a/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapedCraftingRecipe.java b/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapedCraftingRecipe.java index 2c54ab11..e7d7e74e 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapedCraftingRecipe.java +++ b/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapedCraftingRecipe.java @@ -96,50 +96,53 @@ public final class ShapedCraftingRecipe extends PluginDependent imple shapedRecipe.setIngredient(character, parts.get(i).getItem().getType()); } - ShapedRecipe displayedRecipe = new ShapedRecipe(this.getDisplayedKey(), this.getOutput()); - displayedRecipe.shape("012", "345", "678"); - for (int i = 0; i < 9; i++) { - if (parts.get(i) instanceof EmptyTestableItem) { - continue; - } - - char character = String.valueOf(i).toCharArray()[0]; - - List items = new ArrayList<>(); - if (parts.get(i) instanceof GroupedTestableItems group) { - items.addAll(group.getChildren()); - } else { - items.add(parts.get(i)); - } - - List displayedItems = new ArrayList<>(); - - for (TestableItem testableItem : items) { - if (testableItem instanceof TestableStack) { - ItemStack item = testableItem.getItem().clone(); - ItemMeta meta = item.getItemMeta(); - assert meta != null; - - List lore = meta.hasLore() ? meta.getLore() : new ArrayList<>(); - assert lore != null; - lore.add(""); - String add = Eco.getHandler().getEcoPlugin().getLangYml().getFormattedString("multiple-in-craft"); - add = add.replace("%amount%", String.valueOf(item.getAmount())); - lore.add(add); - meta.setLore(lore); - item.setItemMeta(meta); - - displayedItems.add(item); - } else { - displayedItems.add(testableItem.getItem()); + if (Eco.getHandler().getEcoPlugin().getConfigYml().getBool("displayed-recipes")) { + ShapedRecipe displayedRecipe = new ShapedRecipe(this.getDisplayedKey(), this.getOutput()); + displayedRecipe.shape("012", "345", "678"); + for (int i = 0; i < 9; i++) { + if (parts.get(i) instanceof EmptyTestableItem) { + continue; } + + char character = String.valueOf(i).toCharArray()[0]; + + List items = new ArrayList<>(); + if (parts.get(i) instanceof GroupedTestableItems group) { + items.addAll(group.getChildren()); + } else { + items.add(parts.get(i)); + } + + List displayedItems = new ArrayList<>(); + + for (TestableItem testableItem : items) { + if (testableItem instanceof TestableStack) { + ItemStack item = testableItem.getItem().clone(); + ItemMeta meta = item.getItemMeta(); + assert meta != null; + + List lore = meta.hasLore() ? meta.getLore() : new ArrayList<>(); + assert lore != null; + lore.add(""); + String add = Eco.getHandler().getEcoPlugin().getLangYml().getFormattedString("multiple-in-craft"); + add = add.replace("%amount%", String.valueOf(item.getAmount())); + lore.add(add); + meta.setLore(lore); + item.setItemMeta(meta); + + displayedItems.add(item); + } else { + displayedItems.add(testableItem.getItem()); + } + } + + displayedRecipe.setIngredient(character, new RecipeChoice.ExactChoice(displayedItems)); } - displayedRecipe.setIngredient(character, new RecipeChoice.ExactChoice(displayedItems)); + Bukkit.getServer().addRecipe(displayedRecipe); } Bukkit.getServer().addRecipe(shapedRecipe); - Bukkit.getServer().addRecipe(displayedRecipe); } /** diff --git a/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapelessCraftingRecipe.java b/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapelessCraftingRecipe.java index 73c4b57a..17e7f6e6 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapelessCraftingRecipe.java +++ b/eco-api/src/main/java/com/willfp/eco/core/recipe/recipes/ShapelessCraftingRecipe.java @@ -101,43 +101,46 @@ public final class ShapelessCraftingRecipe extends PluginDependent im shapelessRecipe.addIngredient(part.getItem().getType()); } - ShapelessRecipe displayedRecipe = new ShapelessRecipe(this.getDisplayedKey(), this.getOutput()); - for (TestableItem part : parts) { - List items = new ArrayList<>(); - if (part instanceof GroupedTestableItems group) { - items.addAll(group.getChildren()); - } else { - items.add(part); - } - - List displayedItems = new ArrayList<>(); - - for (TestableItem testableItem : items) { - if (testableItem instanceof TestableStack) { - ItemStack item = testableItem.getItem().clone(); - ItemMeta meta = item.getItemMeta(); - assert meta != null; - - List lore = meta.hasLore() ? meta.getLore() : new ArrayList<>(); - assert lore != null; - lore.add(""); - String add = Eco.getHandler().getEcoPlugin().getLangYml().getFormattedString("multiple-in-craft"); - add = add.replace("%amount%", String.valueOf(item.getAmount())); - lore.add(add); - meta.setLore(lore); - item.setItemMeta(meta); - - displayedItems.add(item); + if (Eco.getHandler().getEcoPlugin().getConfigYml().getBool("displayed-recipes")) { + ShapelessRecipe displayedRecipe = new ShapelessRecipe(this.getDisplayedKey(), this.getOutput()); + for (TestableItem part : parts) { + List items = new ArrayList<>(); + if (part instanceof GroupedTestableItems group) { + items.addAll(group.getChildren()); } else { - displayedItems.add(testableItem.getItem()); + items.add(part); } + + List displayedItems = new ArrayList<>(); + + for (TestableItem testableItem : items) { + if (testableItem instanceof TestableStack) { + ItemStack item = testableItem.getItem().clone(); + ItemMeta meta = item.getItemMeta(); + assert meta != null; + + List lore = meta.hasLore() ? meta.getLore() : new ArrayList<>(); + assert lore != null; + lore.add(""); + String add = Eco.getHandler().getEcoPlugin().getLangYml().getFormattedString("multiple-in-craft"); + add = add.replace("%amount%", String.valueOf(item.getAmount())); + lore.add(add); + meta.setLore(lore); + item.setItemMeta(meta); + + displayedItems.add(item); + } else { + displayedItems.add(testableItem.getItem()); + } + } + + displayedRecipe.addIngredient(new RecipeChoice.ExactChoice(displayedItems)); } - displayedRecipe.addIngredient(new RecipeChoice.ExactChoice(displayedItems)); + Bukkit.getServer().addRecipe(displayedRecipe); } Bukkit.getServer().addRecipe(shapelessRecipe); - Bukkit.getServer().addRecipe(displayedRecipe); } /** diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/display/PacketAutoRecipe.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/display/PacketAutoRecipe.kt index d56e5c7a..16ed606a 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/display/PacketAutoRecipe.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/display/PacketAutoRecipe.kt @@ -15,6 +15,10 @@ class PacketAutoRecipe(plugin: EcoPlugin) : AbstractPacketAdapter(plugin, Packet player: Player, event: PacketEvent ) { + if (!this.getPlugin().configYml.getBool("displayed-recipes")) { + return + } + if (!EcoPlugin.getPluginNames() .contains(packet.minecraftKeys.values[0].fullKey.split(":".toRegex()).toTypedArray()[0]) ) { @@ -28,4 +32,4 @@ class PacketAutoRecipe(plugin: EcoPlugin) : AbstractPacketAdapter(plugin, Packet newAutoRecipe.minecraftKeys.write(0, packet.minecraftKeys.read(0)) ProtocolLibrary.getProtocolManager().sendServerPacket(player, newAutoRecipe) } -} \ No newline at end of file +} diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index ca4b9f1e..51508482 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -72,3 +72,11 @@ use-safer-namespacedkey-creation: false # If the stack traces of extensions that failed to load should be logged. Disabled by # default to prevent users from reporting bugs. Enable if you're a developer. log-full-extension-errors: false + +# To make the custom crafting system work better for players, players are also sent an +# additional recipe containing the displayed items as ingredients. However, with a large +# number of recipes, this can create PacketTooLargeExceptions. If you have this exception, +# disable this option. Bear in mind that this means the auto-craft preview will fail to +# render items nicely, which may degrade the user experience on your server. If you use +# a custom crafting table, though, this won't affect anything, and you should disable the option. +displayed-recipes: true \ No newline at end of file