diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index 297775a..fe56131 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -19,6 +19,7 @@ import com.willfp.ecoarmor.sets.util.PotionEffectListener; import com.willfp.ecoarmor.upgrades.advanced.AdvancementShardListener; import com.willfp.ecoarmor.upgrades.crystal.CrystalListener; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; +import com.willfp.ecoarmor.util.DiscoverRecipeListener; import lombok.Getter; import org.bukkit.event.Listener; @@ -132,7 +133,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { new CrystalListener(this), new AdvancementShardListener(this), new PotionEffectListener(this), - new EffectiveDurabilityListener(this) + new EffectiveDurabilityListener(this), + new DiscoverRecipeListener(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index f76b3c1..19ad38c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -235,13 +235,14 @@ public class ArmorSet { } itemStack.setItemMeta(meta); - - RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { - if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { - return false; - } - return Objects.equals(this, ArmorUtils.getSetOnItem(test)); - }, itemStack)); + if (!advanced) { + RecipePartUtils.registerLookup("ecoarmor:set_" + name.toLowerCase() + "_" + pieceName, s -> new ComplexRecipePart(test -> { + if (ArmorSlot.getSlot(test) != ArmorSlot.getSlot(itemStack)) { + return false; + } + return Objects.equals(this, ArmorUtils.getSetOnItem(test)); + }, itemStack)); + } constructRecipe(slot, itemStack); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java index 9a7fa1d..2d7e5e5 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/meta/ArmorSlot.java @@ -50,7 +50,11 @@ public enum ArmorSlot { * @return The slot, or null. */ @Nullable - public static ArmorSlot getSlot(@NotNull final ItemStack itemStack) { + public static ArmorSlot getSlot(@Nullable final ItemStack itemStack) { + if (itemStack == null) { + return null; + } + Material material = itemStack.getType(); String name = material.name().toLowerCase(); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java index 3351ef7..5b56ea4 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/advanced/AdvancementShardListener.java @@ -74,7 +74,7 @@ public class AdvancementShardListener extends PluginDependent implements Listene ArmorUtils.setAdvanced(current, true); - event.getWhoClicked().setItemOnCursor(null); + event.getWhoClicked().setItemOnCursor(new ItemStack(Material.AIR)); event.setCancelled(true); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java index 17e827f..c309b18 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/upgrades/crystal/CrystalListener.java @@ -66,7 +66,7 @@ public class CrystalListener extends PluginDependent implements Listener { ArmorUtils.setTier(current, tier); - event.getWhoClicked().setItemOnCursor(null); + event.getWhoClicked().setItemOnCursor(new ItemStack(Material.AIR)); event.setCancelled(true); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java new file mode 100644 index 0000000..b899a99 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/util/DiscoverRecipeListener.java @@ -0,0 +1,46 @@ +package com.willfp.ecoarmor.util; + +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import org.bukkit.Bukkit; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ShapedRecipe; +import org.jetbrains.annotations.NotNull; + +public class DiscoverRecipeListener extends PluginDependent implements Listener { + /** + * Register listener. + * + * @param plugin Talismans. + */ + public DiscoverRecipeListener(@NotNull final AbstractEcoPlugin plugin) { + super(plugin); + } + + /** + * Unlock all recipes on player join. + * + * @param event The event to listen for. + */ + @EventHandler + public void onJoin(@NotNull final PlayerJoinEvent event) { + Player player = event.getPlayer(); + + if (this.getPlugin().getConfigYml().getBool("discover-recipes")) { + Bukkit.getServer().recipeIterator().forEachRemaining(recipe -> { + if (recipe instanceof ShapedRecipe) { + NamespacedKey key = ((ShapedRecipe) recipe).getKey(); + if (key.getNamespace().equals("ecoarmor")) { + if (!key.getKey().contains("displayed")) { + player.discoverRecipe(key); + } + } + } + }); + } + } +} diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 73aa5b9..dd1f57b 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -3,6 +3,7 @@ # by Auxilor # +discover-recipes: true # If all recipes should be automatically discovered. # Effects are passive abilities that happen when wearing a full set with the effect present. effects: