Added permissions, improved crafting
This commit is contained in:
@@ -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<Listener> getListeners() {
|
||||
return Arrays.asList(
|
||||
new WatcherTriggers(this),
|
||||
new BlockPlaceListener()
|
||||
new BlockPlaceListener(),
|
||||
new TalismanCraftListener()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ public class CommandTalreload extends AbstractCommand {
|
||||
public void onExecute(@NotNull final CommandSender sender,
|
||||
@NotNull final List<String> args) {
|
||||
this.getPlugin().reload();
|
||||
this.getPlugin().reload(); // Aids
|
||||
sender.sendMessage(Configs.LANG.getMessage("reloaded"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String> recipeStrings = this.getConfig().getStrings(Talismans.OBTAINING_LOCATION + "recipe");
|
||||
ShapedRecipe recipe = new ShapedRecipe(this.getKey(), out);
|
||||
|
||||
recipe.shape("012", "345", "678");
|
||||
List<String> 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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
default: op
|
||||
talismans.fromtable.*:
|
||||
description: Allows crafting all talismans
|
||||
default: true
|
||||
Reference in New Issue
Block a user