From 33d329cda5418cf59bf558e0f96e4b32fa2d92fa Mon Sep 17 00:00:00 2001 From: jakob Date: Tue, 15 Apr 2025 23:21:20 +0200 Subject: [PATCH] Major Changes, still big WIP --- .../randomizedminigames/GUI/BaseWindow.java | 73 +++++++++++++++++++ .../GUI/GUIClickEvent.java | 42 +++++++++-- .../GUI/MinigamesDisplayWindow.java | 34 ++++++--- .../GUI/SettingsWindow.java | 27 +++++++ .../randomizedminigames/GeneralSettings.java | 12 +++ .../randomizedminigames/MinigameHandler.java | 11 ++- ...mForceBattle.java => ForceItemBattle.java} | 23 ++++-- .../Minigames/Minigame.java | 35 ++++++--- .../Minigames/MinigameBase.java | 17 +++++ .../RandomizedMinigames.java | 5 -- .../randomizedminigames/SelectMinigame.java | 2 +- 11 files changed, 235 insertions(+), 46 deletions(-) create mode 100644 src/main/java/de/ventority/randomizedminigames/GUI/BaseWindow.java create mode 100644 src/main/java/de/ventority/randomizedminigames/GUI/SettingsWindow.java create mode 100644 src/main/java/de/ventority/randomizedminigames/GeneralSettings.java rename src/main/java/de/ventority/randomizedminigames/Minigames/{ItemForceBattle.java => ForceItemBattle.java} (86%) create mode 100644 src/main/java/de/ventority/randomizedminigames/Minigames/MinigameBase.java diff --git a/src/main/java/de/ventority/randomizedminigames/GUI/BaseWindow.java b/src/main/java/de/ventority/randomizedminigames/GUI/BaseWindow.java new file mode 100644 index 0000000..7fd980c --- /dev/null +++ b/src/main/java/de/ventority/randomizedminigames/GUI/BaseWindow.java @@ -0,0 +1,73 @@ +package de.ventority.randomizedminigames.GUI; + +import de.ventority.randomizedminigames.RandomizedMinigames; +import net.md_5.bungee.api.ChatColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +public abstract class BaseWindow { + private final Player p; + private final Inventory gui; + private String status; + + public BaseWindow(Player p, String status) { + this.p = p; + gui = Bukkit.createInventory(p, 54, RandomizedMinigames.serverSettingsHandler.getServerName() + + ChatColor.RESET + ChatColor.DARK_GRAY + " " + status); + this.status = status; + } + + private void fillBorder() { + ItemStack stack = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(" "); + for (int i = 0; i < 9; i++) { + gui.setItem(i, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1)); + gui.getItem(i).setItemMeta(meta); + } + for (int i = 1; i < 5; i++) { + gui.setItem(9 * i, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1)); + gui.getItem(9 * i).setItemMeta(meta); + gui.setItem(8 + 9 * i, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1)); + gui.getItem(8 + 9 * i).setItemMeta(meta); + } + for (int i = 0; i < 9; i++) { + gui.setItem(i + 5 * 9, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1)); + gui.getItem(i + 5 * 9).setItemMeta(meta); + } + } + + public abstract void fillGUI(); + + public void buildWindow() { + fillBorder(); + fillGUI(); + p.openInventory(gui); + } + + public ItemMeta addNBT(ItemMeta meta, String key, String value) { + NamespacedKey namespacedKey = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), key); + PersistentDataContainer data = meta.getPersistentDataContainer(); + data.set(namespacedKey, PersistentDataType.STRING, value); + return meta; + } + + public Inventory getGUI() { + return gui; + } + + private Player getPlayer() { + return p; + } + + private String getStatus() { + return status; + } +} diff --git a/src/main/java/de/ventority/randomizedminigames/GUI/GUIClickEvent.java b/src/main/java/de/ventority/randomizedminigames/GUI/GUIClickEvent.java index 15e2067..f996671 100644 --- a/src/main/java/de/ventority/randomizedminigames/GUI/GUIClickEvent.java +++ b/src/main/java/de/ventority/randomizedminigames/GUI/GUIClickEvent.java @@ -2,6 +2,7 @@ package de.ventority.randomizedminigames.GUI; import de.ventority.randomizedminigames.MinigameHandler; +import de.ventority.randomizedminigames.Minigames.Minigame; import de.ventority.randomizedminigames.RandomizedMinigames; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -18,12 +19,17 @@ import org.bukkit.persistence.PersistentDataType; public class GUIClickEvent implements Listener { @EventHandler public void onClickEvent(InventoryClickEvent event) { - Inventory inventory = event.getInventory(); + Inventory inventory = event.getClickedInventory(); + if (inventory == null) return; if (inventory.getItem(0) == null) return; - if (hasNBTData(inventory.getItem(0))) { - if (event.getCurrentItem() == null) return; - if (event.getCurrentItem().getType() == Material.DIAMOND_SWORD) { - MinigameHandler.createMinigame(0); + ItemStack firstItem = inventory.getItem(0); + if (hasNBTData(firstItem)) { + event.setCancelled(true); + if (getStatus(firstItem).equals("selectMinigame")) { + handleMinigame(event); + } + if (getStatus(firstItem).equals("selectSettings")) { + handleSettings(event); } } } @@ -37,4 +43,30 @@ public class GUIClickEvent implements Listener { PersistentDataContainer data = meta.getPersistentDataContainer(); return "1".equals(data.get(key, PersistentDataType.STRING)); } + + private String getStatus(ItemStack item) { + if (item == null || !item.hasItemMeta()) return ""; + ItemMeta meta = item.getItemMeta(); + NamespacedKey key = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), "IsMinigamePlugin"); + if (meta == null) return ""; + PersistentDataContainer data = meta.getPersistentDataContainer(); + return data.get(key, PersistentDataType.STRING); + } + + private void handleMinigame(InventoryClickEvent event) { + for (Minigame minigame : Minigame.values()) { + if (event.getCurrentItem().getType() == minigame.getMaterial()) { + MinigameHandler.createMinigame(minigame.getNumber()); + } + } + } + + private void handleSettings(InventoryClickEvent event) { + if (event.getCurrentItem() == null) return; + PersistentDataContainer data = event.getCurrentItem().getItemMeta().getPersistentDataContainer(); + NamespacedKey key = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), "State"); + if (data.get(key, PersistentDataType.STRING).equals("addContestants")) { + + } + } } diff --git a/src/main/java/de/ventority/randomizedminigames/GUI/MinigamesDisplayWindow.java b/src/main/java/de/ventority/randomizedminigames/GUI/MinigamesDisplayWindow.java index a282961..749d082 100644 --- a/src/main/java/de/ventority/randomizedminigames/GUI/MinigamesDisplayWindow.java +++ b/src/main/java/de/ventority/randomizedminigames/GUI/MinigamesDisplayWindow.java @@ -1,5 +1,6 @@ package de.ventority.randomizedminigames.GUI; +import de.ventority.randomizedminigames.Minigames.Minigame; import de.ventority.randomizedminigames.RandomizedMinigames; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; @@ -27,12 +28,17 @@ public class MinigamesDisplayWindow { public void buildWindow() { fillBorder(); fillGUI(); - addNBT(); p.openInventory(gui); } private void fillGUI() { - gui.addItem(new ItemStack(Material.DIAMOND_SWORD)); + for (Minigame minigame : Minigame.values()) { + ItemStack item = new ItemStack(minigame.getMaterial(), 1); + ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName(minigame.getName()); + gui.addItem(item); + } } private void fillBorder() { @@ -53,18 +59,22 @@ public class MinigamesDisplayWindow { gui.setItem(i + 5 * 9, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1)); gui.getItem(i + 5 * 9).setItemMeta(meta); } + ItemMeta meta1 = addNBT(gui.getItem(0).getItemMeta(), "Status", status); + meta1 = addNBT(meta1, "IsMinigamePlugin", "1"); + gui.getItem(0).setItemMeta(meta1); + + ItemStack settings = new ItemStack(Material.REDSTONE, 1); + ItemMeta settingsMeta = settings.getItemMeta(); + settingsMeta.setDisplayName("Settings"); + settingsMeta = addNBT(settingsMeta, "Status", "selectSettings"); + settings.setItemMeta(settingsMeta); + gui.setItem(9, settings); } - private void addNBT() { - ItemStack item = gui.getItem(0); - assert item != null; - ItemMeta meta = item.getItemMeta(); - NamespacedKey key1 = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), "Status"); - NamespacedKey key2 = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), "IsMinigamePlugin"); - assert meta != null; + private ItemMeta addNBT(ItemMeta meta, String key, String value) { + NamespacedKey key1 = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), key); PersistentDataContainer data = meta.getPersistentDataContainer(); - data.set(key1, PersistentDataType.STRING, status); - data.set(key2, PersistentDataType.STRING, "1"); - item.setItemMeta(meta); + data.set(key1, PersistentDataType.STRING, value); + return meta; } } diff --git a/src/main/java/de/ventority/randomizedminigames/GUI/SettingsWindow.java b/src/main/java/de/ventority/randomizedminigames/GUI/SettingsWindow.java new file mode 100644 index 0000000..19dd9b7 --- /dev/null +++ b/src/main/java/de/ventority/randomizedminigames/GUI/SettingsWindow.java @@ -0,0 +1,27 @@ +package de.ventority.randomizedminigames.GUI; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class SettingsWindow extends BaseWindow{ + + public SettingsWindow(Player p, String status) { + super(p, status); + } + + @Override + public void fillGUI() { + Inventory gui = getGUI(); + ItemStack setContestants = new ItemStack(Material.ZOMBIE_HEAD, 1); + ItemMeta setContestantsMeta = setContestants.getItemMeta(); + setContestantsMeta.setDisplayName("Contestants"); + setContestantsMeta = addNBT(setContestantsMeta, "Status", "addContestants"); + setContestants.setItemMeta(setContestantsMeta); + gui.addItem(setContestants); + } + + +} diff --git a/src/main/java/de/ventority/randomizedminigames/GeneralSettings.java b/src/main/java/de/ventority/randomizedminigames/GeneralSettings.java new file mode 100644 index 0000000..c3927ab --- /dev/null +++ b/src/main/java/de/ventority/randomizedminigames/GeneralSettings.java @@ -0,0 +1,12 @@ +package de.ventority.randomizedminigames; + +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class GeneralSettings { + public List contestants = new ArrayList<>(); + + +} diff --git a/src/main/java/de/ventority/randomizedminigames/MinigameHandler.java b/src/main/java/de/ventority/randomizedminigames/MinigameHandler.java index 03e7373..e084d40 100644 --- a/src/main/java/de/ventority/randomizedminigames/MinigameHandler.java +++ b/src/main/java/de/ventority/randomizedminigames/MinigameHandler.java @@ -1,8 +1,7 @@ package de.ventority.randomizedminigames; -import de.ventority.randomizedminigames.GUI.GUIClickEvent; -import de.ventority.randomizedminigames.Minigames.ItemForceBattle; -import de.ventority.randomizedminigames.Minigames.Minigame; +import de.ventority.randomizedminigames.Minigames.ForceItemBattle; +import de.ventority.randomizedminigames.Minigames.MinigameBase; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -11,15 +10,15 @@ import java.util.List; import static org.bukkit.Bukkit.getServer; public class MinigameHandler { - private static List minigames = new ArrayList<>(); + private static List minigames = new ArrayList<>(); public static void createMinigame(int gameNumber) { List players = Bukkit.getOnlinePlayers().stream().map(p -> ((Player) p)).toList(); - minigames.add(new ItemForceBattle(players)); + minigames.add(new ForceItemBattle(players)); getServer().getPluginManager().registerEvents(minigames.getFirst(), RandomizedMinigames.serverSettingsHandler.getPlugin()); } - public static void deleteGame(Minigame minigame) { + public static void deleteGame(MinigameBase minigame) { minigames.remove(minigame); } } diff --git a/src/main/java/de/ventority/randomizedminigames/Minigames/ItemForceBattle.java b/src/main/java/de/ventority/randomizedminigames/Minigames/ForceItemBattle.java similarity index 86% rename from src/main/java/de/ventority/randomizedminigames/Minigames/ItemForceBattle.java rename to src/main/java/de/ventority/randomizedminigames/Minigames/ForceItemBattle.java index 61ae7e7..c5672f9 100644 --- a/src/main/java/de/ventority/randomizedminigames/Minigames/ItemForceBattle.java +++ b/src/main/java/de/ventority/randomizedminigames/Minigames/ForceItemBattle.java @@ -11,15 +11,16 @@ import org.bukkit.boss.BossBar; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Random; -public class ItemForceBattle implements Minigame, Listener { +public class ForceItemBattle implements MinigameBase, Listener { private final HashMap currentItems; private final HashMap currentScores; private final HashMap itemDisplays; @@ -28,7 +29,7 @@ public class ItemForceBattle implements Minigame, Listener { private final List contestants; - public ItemForceBattle(List players) { + public ForceItemBattle(List players) { id = new Random().nextInt(1024); currentItems = new HashMap<>(); currentScores = new HashMap<>(); @@ -140,6 +141,10 @@ public class ItemForceBattle implements Minigame, Listener { scoreboardManager.removeScoreboard(); scoreboardManager = null; + + for (Player player : contestants) { + player.sendTitle(winner.getDisplayName() + " hat gewonnen!", "Die Player werden jetzt zurückgesetzt.", 10, 70, 20); + } MinigameHandler.deleteGame(this); } @@ -151,7 +156,15 @@ public class ItemForceBattle implements Minigame, Listener { else return; if (currentItems.containsKey(eventPlayer)) - if (e.getItem().getItemStack().getType() == currentItems.get(eventPlayer).getType()) - checkItem(eventPlayer, e.getItem().getItemStack()); + checkItem(eventPlayer, e.getItem().getItemStack()); + } + + @EventHandler + public void onItemCraft(CraftItemEvent e) { + if (e.getCurrentItem() == null) + return; + Player p = (Player)e.getWhoClicked(); + if (currentItems.containsKey(p)) + checkItem(p, e.getCurrentItem()); } } diff --git a/src/main/java/de/ventority/randomizedminigames/Minigames/Minigame.java b/src/main/java/de/ventority/randomizedminigames/Minigames/Minigame.java index 58d81ad..b57290f 100644 --- a/src/main/java/de/ventority/randomizedminigames/Minigames/Minigame.java +++ b/src/main/java/de/ventority/randomizedminigames/Minigames/Minigame.java @@ -1,17 +1,28 @@ package de.ventority.randomizedminigames.Minigames; -import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.inventory.ItemStack; +import org.bukkit.Material; -import java.util.List; +public enum Minigame { + ForceItemBattle(Material.DIAMOND_SWORD, "Force Item Battle", 0); -public interface Minigame extends Listener { - int getID(); - String getName(); - int getPlayerIntervals(); - int getMinPlayers(); - int getMaxPlayers(); - ItemStack getSymbol(); - void addPlayers(List players); + Material material; + String name; + int number; + Minigame(Material m, String s, int i) { + material = m; + name = s; + number = i; + } + + public Material getMaterial() { + return material; + } + + public String getName() { + return name; + } + + public int getNumber() { + return number; + } } diff --git a/src/main/java/de/ventority/randomizedminigames/Minigames/MinigameBase.java b/src/main/java/de/ventority/randomizedminigames/Minigames/MinigameBase.java new file mode 100644 index 0000000..1626620 --- /dev/null +++ b/src/main/java/de/ventority/randomizedminigames/Minigames/MinigameBase.java @@ -0,0 +1,17 @@ +package de.ventority.randomizedminigames.Minigames; + +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public interface MinigameBase extends Listener { + int getID(); + String getName(); + int getPlayerIntervals(); + int getMinPlayers(); + int getMaxPlayers(); + ItemStack getSymbol(); + void addPlayers(List players); +} diff --git a/src/main/java/de/ventority/randomizedminigames/RandomizedMinigames.java b/src/main/java/de/ventority/randomizedminigames/RandomizedMinigames.java index 0a0baee..b7f1eb5 100644 --- a/src/main/java/de/ventority/randomizedminigames/RandomizedMinigames.java +++ b/src/main/java/de/ventority/randomizedminigames/RandomizedMinigames.java @@ -1,13 +1,8 @@ package de.ventority.randomizedminigames; import de.ventority.randomizedminigames.GUI.GUIClickEvent; -import de.ventority.randomizedminigames.Minigames.ItemForceBattle; -import de.ventority.randomizedminigames.Minigames.Minigame; import org.bukkit.plugin.java.JavaPlugin; -import java.util.ArrayList; -import java.util.List; - public final class RandomizedMinigames extends JavaPlugin { public static final ServerSettingsHandler serverSettingsHandler = new ServerSettingsHandler(); @Override diff --git a/src/main/java/de/ventority/randomizedminigames/SelectMinigame.java b/src/main/java/de/ventority/randomizedminigames/SelectMinigame.java index cfb4554..a642e3b 100644 --- a/src/main/java/de/ventority/randomizedminigames/SelectMinigame.java +++ b/src/main/java/de/ventority/randomizedminigames/SelectMinigame.java @@ -7,7 +7,7 @@ import org.bukkit.entity.Player; public class SelectMinigame implements CommandExecutor { @Override public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) { - MinigamesDisplayWindow window = new MinigamesDisplayWindow((Player) commandSender, "MinigameSelect"); + MinigamesDisplayWindow window = new MinigamesDisplayWindow((Player) commandSender, "minigameSelect"); window.buildWindow(); return true; }