From 0bb880757d0ced21bf34935490b4b6fc08fe6e03 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 2 Jan 2021 16:15:16 +0000 Subject: [PATCH] Added permissions, improved crafting --- .../com/willfp/talismans/TalismansPlugin.java | 4 +- .../talismans/commands/CommandTalreload.java | 1 + .../willfp/talismans/talismans/Talisman.java | 33 +++++++--- .../talismans/util/TalismanChecks.java | 1 + .../talismans/util/TalismanCraftListener.java | 66 +++++++++++++++++++ .../core-plugin/src/main/resources/plugin.yml | 6 +- 6 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanCraftListener.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/TalismansPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/TalismansPlugin.java index 48a1cf4..215616e 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/TalismansPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/TalismansPlugin.java @@ -18,6 +18,7 @@ import com.willfp.talismans.integrations.mcmmo.plugins.McmmoIntegrationImpl; import com.willfp.talismans.talismans.Talisman; import com.willfp.talismans.talismans.Talismans; import com.willfp.talismans.talismans.util.BlockPlaceListener; +import com.willfp.talismans.talismans.util.TalismanCraftListener; import com.willfp.talismans.talismans.util.WatcherTriggers; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; @@ -149,7 +150,8 @@ public class TalismansPlugin extends AbstractEcoPlugin { public List getListeners() { return Arrays.asList( new WatcherTriggers(this), - new BlockPlaceListener() + new BlockPlaceListener(), + new TalismanCraftListener() ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/commands/CommandTalreload.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/commands/CommandTalreload.java index db8447d..b6d1e1c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/commands/CommandTalreload.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/commands/CommandTalreload.java @@ -22,6 +22,7 @@ public class CommandTalreload extends AbstractCommand { public void onExecute(@NotNull final CommandSender sender, @NotNull final List args) { this.getPlugin().reload(); + this.getPlugin().reload(); // Aids sender.sendMessage(Configs.LANG.getMessage("reloaded")); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talisman.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talisman.java index 01d72d5..0d388bb 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talisman.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talisman.java @@ -22,6 +22,8 @@ import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; @@ -30,6 +32,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -125,12 +128,22 @@ public abstract class Talisman implements Listener, Watcher { TalismansConfigs.addTalismanConfig(new TalismanConfig(this.configName, this.strength, this.getClass())); this.config = TalismansConfigs.getTalismanConfig(this.configName); + if (Bukkit.getPluginManager().getPermission("talismans.fromtable." + configName) == null) { + Permission permission = new Permission( + "talismans.fromtable." + configName, + "Allows getting " + configName + " from a Crafting Table", + PermissionDefault.TRUE + ); + permission.addParent(Objects.requireNonNull(Bukkit.getPluginManager().getPermission("talismans.fromtable.*")), true); + Bukkit.getPluginManager().addPermission(permission); + } + if (!Prerequisite.areMet(prerequisites)) { return; } - this.update(); Talismans.addNewTalisman(this); + this.update(); } /** @@ -164,18 +177,22 @@ public abstract class Talisman implements Listener, Watcher { Bukkit.getServer().removeRecipe(this.getKey()); - ShapedRecipe recipe = new ShapedRecipe(this.getKey(), out); + if (this.isEnabled()) { + TalismanDisplay.displayTalisman(out); - List recipeStrings = this.getConfig().getStrings(Talismans.OBTAINING_LOCATION + "recipe"); + ShapedRecipe recipe = new ShapedRecipe(this.getKey(), out); - recipe.shape("012", "345", "678"); + List recipeStrings = this.getConfig().getStrings(Talismans.OBTAINING_LOCATION + "recipe"); - for (int i = 0; i < 9; i++) { - recipe.setIngredient(String.valueOf(i).toCharArray()[0], Material.valueOf(recipeStrings.get(i).toUpperCase())); + recipe.shape("012", "345", "678"); + + for (int i = 0; i < 9; i++) { + recipe.setIngredient(String.valueOf(i).toCharArray()[0], Material.valueOf(recipeStrings.get(i).toUpperCase())); + } + + Bukkit.getServer().addRecipe(recipe); } - Bukkit.getServer().addRecipe(recipe); - postUpdate(); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java index 387d0c0..70c9f1c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanChecks.java @@ -71,6 +71,7 @@ public class TalismanChecks { PersistentDataContainer container = meta.getPersistentDataContainer(); NamespacedKey talismanKey = container.getKeys().stream().filter(namespacedKey -> namespacedKey.getNamespace().equals("talismans")).findFirst().orElse(null); + return Talismans.getByKey(talismanKey); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanCraftListener.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanCraftListener.java new file mode 100644 index 0000000..7a8e7d9 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/util/TalismanCraftListener.java @@ -0,0 +1,66 @@ +package com.willfp.talismans.talismans.util; + +import com.willfp.talismans.talismans.Talisman; +import com.willfp.talismans.talismans.Talismans; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.CraftItemEvent; +import org.bukkit.event.inventory.PrepareItemCraftEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.ShapedRecipe; +import org.jetbrains.annotations.NotNull; + +public class TalismanCraftListener implements Listener { + @EventHandler + public void onCraft(@NotNull final PrepareItemCraftEvent event) { + if (!(event.getRecipe() instanceof ShapedRecipe)) { + return; + } + + ShapedRecipe recipe = (ShapedRecipe) event.getRecipe(); + + Talisman talisman = Talismans.getByKey(recipe.getKey()); + + if (talisman == null) { + return; + } + + if (event.getViewers().isEmpty()) { + return; + } + + Player player = (Player) event.getViewers().get(0); + + if (!player.hasPermission("talismans.fromtable." + recipe.getKey().getKey().replace("_", ""))) { + event.getInventory().setResult(new ItemStack(Material.AIR)); + } + } + + @EventHandler + public void onCraft(@NotNull final CraftItemEvent event) { + if (!(event.getRecipe() instanceof ShapedRecipe)) { + return; + } + + ShapedRecipe recipe = (ShapedRecipe) event.getRecipe(); + + Talisman talisman = Talismans.getByKey(recipe.getKey()); + + if (talisman == null) { + return; + } + + if (event.getViewers().isEmpty()) { + return; + } + + Player player = (Player) event.getViewers().get(0); + + if (!player.hasPermission("talismans.fromtable." + recipe.getKey().getKey().replace("_", ""))) { + event.getInventory().setResult(new ItemStack(Material.AIR)); + event.setCancelled(true); + } + } +} diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index a72e74e..5e6593f 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -36,10 +36,14 @@ permissions: children: talismans.reload: true talismans.taldebug: true + talismans.fromtable.*: true talismans.reload: description: Allows reloading the config default: op talismans.taldebug: description: Allows the use of /taldebug to print verbose debug information to console - default: op \ No newline at end of file + default: op + talismans.fromtable.*: + description: Allows crafting all talismans + default: true \ No newline at end of file