|
|
@@ -1,66 +1,132 @@
|
|
|
package me.lethunderhawk.clans.gui;
|
|
|
|
|
|
-import me.lethunderhawk.clans.Clan;
|
|
|
import me.lethunderhawk.clans.claim.Claim;
|
|
|
-import me.lethunderhawk.clans.claim.ClaimManager;
|
|
|
+import me.lethunderhawk.clans.settings.ClaimSetting;
|
|
|
import me.lethunderhawk.fluxapi.FluxService;
|
|
|
-import me.lethunderhawk.fluxapi.util.gui.ConfirmationMenu;
|
|
|
+import me.lethunderhawk.fluxapi.util.UnItalic;
|
|
|
import me.lethunderhawk.fluxapi.util.gui.InventoryGUI;
|
|
|
import me.lethunderhawk.fluxapi.util.gui.input.SignMenuFactory;
|
|
|
+import me.lethunderhawk.fluxapi.util.itemdesign.ItemOptions;
|
|
|
+import me.lethunderhawk.fluxapi.util.itemdesign.LoreDesigner;
|
|
|
import me.lethunderhawk.main.BazaarFlux;
|
|
|
-import me.lethunderhawk.fluxapi.util.UnItalic;
|
|
|
import net.kyori.adventure.text.Component;
|
|
|
import net.kyori.adventure.text.format.NamedTextColor;
|
|
|
import org.bukkit.Material;
|
|
|
import org.bukkit.entity.Player;
|
|
|
import org.bukkit.event.inventory.ClickType;
|
|
|
+import org.bukkit.inventory.ItemFlag;
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
public class ClaimSettingsGUI extends InventoryGUI {
|
|
|
-
|
|
|
private final Player player;
|
|
|
- private final Clan clan;
|
|
|
+ private final Claim claim;
|
|
|
|
|
|
- public ClaimSettingsGUI(Player player, Clan clan) {
|
|
|
+ public ClaimSettingsGUI(Player player, Claim claim) {
|
|
|
super("Claim Settings", 36);
|
|
|
this.player = player;
|
|
|
- this.clan = clan;
|
|
|
+ this.claim = claim;
|
|
|
}
|
|
|
|
|
|
private void buildItems() {
|
|
|
- final int[] slot = {0};
|
|
|
- clan.getClaims().forEach(claim -> {
|
|
|
- setItemWithClickAction(slot[0], buildItemFromClaim(claim), (p, type)->{
|
|
|
- if(type == ClickType.RIGHT || type == ClickType.SHIFT_RIGHT){
|
|
|
- renameClaim(claim);
|
|
|
- update();
|
|
|
- }else if(type == ClickType.LEFT || type == ClickType.SHIFT_LEFT){
|
|
|
- showRemoveClaimDialog(claim, p);
|
|
|
- }
|
|
|
+ AtomicInteger slot = new AtomicInteger(0);
|
|
|
+ claim.getSettings().asMap().forEach((setting, value) -> {
|
|
|
+ setItemWithClickAction(slot.get(), buildDecorationItem(setting, value), (p, type) ->{
|
|
|
+ toggleAndUpdate(p, setting);
|
|
|
});
|
|
|
- slot[0]++;
|
|
|
+ slot.getAndIncrement();
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void showRemoveClaimDialog(Claim claim, Player p) {
|
|
|
- ConfirmationMenu confirmationMenu = new ConfirmationMenu("Delete Claim?", (pl) ->{
|
|
|
- removeClaim(claim);
|
|
|
- });
|
|
|
- openNext(p, confirmationMenu);
|
|
|
+ private void toggleAndUpdate(Player p, ClaimSetting setting) {
|
|
|
+ claim.getSettings().toggleSetting(setting);
|
|
|
+ update();
|
|
|
+ }
|
|
|
+
|
|
|
+ private ItemStack buildDecorationItem(ClaimSetting setting, boolean enabled) {
|
|
|
+ String state = "<br><br>Current state: " + (enabled ? "<green>ENABLED" : "<red>DISABLED");
|
|
|
+ switch (setting){
|
|
|
+ case ClaimSetting.BLOCK_BREAK -> {
|
|
|
+ return buildItemFromParams(Material.DIAMOND_PICKAXE, Component.text("Breaking blocks"),
|
|
|
+ LoreDesigner.createLore("<br>Enable / Disable the ability of other Players not in your clan to break all kinds of blocks!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.EXPLOSIONS -> {
|
|
|
+ return buildItemFromParams(Material.TNT, Component.text("Explosions"),
|
|
|
+ LoreDesigner.createLore("<br>Enable / Disable the usage of Explosives to damage your builds inside this claim! <br>This applies to any explosions like creepers, tnt and tnt minecarts!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.BLOCK_PLACE -> {
|
|
|
+ return buildItemFromParams(Material.OAK_PLANKS, Component.text("Placing Blocks"),
|
|
|
+ LoreDesigner.createLore("<br>Enable / Disable the ability of other Players not in your clan to place blocks inside your territory!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.INTERACT_IGNITION -> {
|
|
|
+ return buildItemFromParams(Material.FLINT_AND_STEEL, Component.text("Igniting blocks"),
|
|
|
+ LoreDesigner.createLore("<br>Allow or prevent outsiders from using flint and steel to ignite blocks within your clan land! <br><red>WARNING: This doesn't prevent others from igniting TNT!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.INTERACT_BLOCK -> {
|
|
|
+ return buildItemFromParams(Material.LEVER, Component.text("Interacting with blocks"),
|
|
|
+ LoreDesigner.createLore("<br>Controls whether non-clan players can interact with mechanisms like buttons, levers, and doors!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.INTERACT_ENTITY -> {
|
|
|
+ return buildItemFromParams(Material.VILLAGER_SPAWN_EGG, Component.text("Interacting with entities"),
|
|
|
+ LoreDesigner.createLore("<br>Determines if outsiders may right-click or otherwise interact with animals and NPC entities!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.OPEN_CONTAINER -> {
|
|
|
+ return buildItemFromParams(Material.CHEST, Component.text("Opening Containers"),
|
|
|
+ LoreDesigner.createLore("<br>Determines if outsiders are allowed to open Containers like chests, barrels, shulkers!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.USE_ANVIL -> {
|
|
|
+ return buildItemFromParams(Material.ANVIL, Component.text("Using Anvils"),
|
|
|
+ LoreDesigner.createLore("<br>Control if outsiders can use anvils inside your territory to repair or rename items!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.ALLOW_HITTING_MOBS -> {
|
|
|
+ return buildItemFromParams(Material.ZOMBIE_HEAD, Component.text("Hitting mobs"),
|
|
|
+ LoreDesigner.createLore("<br>Determines whether players inside your claims may attack hostile or passive mobs in your land!"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ case ClaimSetting.ALLOW_HITTING_PLAYERS -> {
|
|
|
+ return buildItemFromParams(Material.PLAYER_HEAD, Component.text("PvP"),
|
|
|
+ LoreDesigner.createLore("<br>Toggle whether players can hurt each other physically inside this claim (PvP)"
|
|
|
+ + state));
|
|
|
+ }
|
|
|
+ default -> {
|
|
|
+ return new ItemStack(Material.AIR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private ItemStack buildItemFromParams(Material material, Component displayName, List<Component> lore) {
|
|
|
+ ItemStack item = new ItemStack(material);
|
|
|
+ ItemMeta meta = item.getItemMeta();
|
|
|
+ meta.displayName(displayName.color(NamedTextColor.GOLD));
|
|
|
+ meta.lore(lore);
|
|
|
+ meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
|
|
+ item.setItemMeta(UnItalic.removeItalicFromMeta(meta));
|
|
|
+ return item;
|
|
|
}
|
|
|
|
|
|
- private void removeClaim(Claim claim) {
|
|
|
- FluxService.get(ClaimManager.class).removeClaim(claim);
|
|
|
+ private void setRenameButton() {
|
|
|
+ setItemWithClickAction(35, new ItemOptions(Material.OAK_SIGN)
|
|
|
+ .setName(Component.text("Rename Claim", NamedTextColor.YELLOW))
|
|
|
+ .setLore(LoreDesigner.createLore("<dark_gray>Click to rename this claim into anything your heart desires!"))
|
|
|
+ .buildItemStack(), this::showRename);
|
|
|
}
|
|
|
|
|
|
- private void renameClaim(Claim claim) {
|
|
|
+ private void showRename(Player player, ClickType type) {
|
|
|
SignMenuFactory.Menu menu = new SignMenuFactory(FluxService.get(BazaarFlux.class)).newMenu(List.of("", "^^^^^^^^^^^^", "Enter the new", "name of the claim"))
|
|
|
.reopenIfFail(true)
|
|
|
.response((p, strings) -> {
|
|
|
- rename(strings[0], claim);
|
|
|
+ rename(strings[0]);
|
|
|
update();
|
|
|
open(p);
|
|
|
return true;
|
|
|
@@ -68,36 +134,23 @@ public class ClaimSettingsGUI extends InventoryGUI {
|
|
|
menu.open(player);
|
|
|
}
|
|
|
|
|
|
- private void rename(String input, Claim claim) {
|
|
|
+ private void rename(String input) {
|
|
|
claim.setName(input);
|
|
|
}
|
|
|
|
|
|
- private ItemStack buildItemFromClaim(Claim claim) {
|
|
|
- ItemStack item = new ItemStack(Material.GRASS_BLOCK);
|
|
|
- ItemMeta meta = item.getItemMeta();
|
|
|
- meta.displayName(Component.text(claim.getName(), NamedTextColor.GOLD));
|
|
|
- meta.lore(List.of(
|
|
|
- Component.text("Spans from x=" + claim.getMaxX() + ", z=" + claim.getMaxZ(), NamedTextColor.GRAY),
|
|
|
- Component.text("to x=" + claim.getMinX() + ", z=" + claim.getMinZ(), NamedTextColor.GRAY),
|
|
|
- Component.text("Volume: " + claim.getVolume() + " blocks²", NamedTextColor.GRAY),
|
|
|
- Component.text(""),
|
|
|
- Component.text("Left click to remove", NamedTextColor.YELLOW),
|
|
|
- Component.text("Right click to rename", NamedTextColor.YELLOW)
|
|
|
- ));
|
|
|
- item.setItemMeta(UnItalic.removeItalicFromMeta(meta));
|
|
|
- return item;
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
public void buildContent() {
|
|
|
fillGlassPaneBackground();
|
|
|
setBackButton(30);
|
|
|
setCloseButton(31);
|
|
|
+ setRenameButton();
|
|
|
buildItems();
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public void update() {
|
|
|
- buildContent();
|
|
|
+ buildItems();
|
|
|
}
|
|
|
}
|