Major Changes, still big WIP

This commit is contained in:
jakob 2025-04-15 23:21:20 +02:00
parent 6b8ef14f55
commit 33d329cda5
11 changed files with 235 additions and 46 deletions

View File

@ -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;
}
}

View File

@ -2,6 +2,7 @@ package de.ventority.randomizedminigames.GUI;
import de.ventority.randomizedminigames.MinigameHandler; import de.ventority.randomizedminigames.MinigameHandler;
import de.ventority.randomizedminigames.Minigames.Minigame;
import de.ventority.randomizedminigames.RandomizedMinigames; import de.ventority.randomizedminigames.RandomizedMinigames;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -18,12 +19,17 @@ import org.bukkit.persistence.PersistentDataType;
public class GUIClickEvent implements Listener { public class GUIClickEvent implements Listener {
@EventHandler @EventHandler
public void onClickEvent(InventoryClickEvent event) { public void onClickEvent(InventoryClickEvent event) {
Inventory inventory = event.getInventory(); Inventory inventory = event.getClickedInventory();
if (inventory == null) return;
if (inventory.getItem(0) == null) return; if (inventory.getItem(0) == null) return;
if (hasNBTData(inventory.getItem(0))) { ItemStack firstItem = inventory.getItem(0);
if (event.getCurrentItem() == null) return; if (hasNBTData(firstItem)) {
if (event.getCurrentItem().getType() == Material.DIAMOND_SWORD) { event.setCancelled(true);
MinigameHandler.createMinigame(0); 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(); PersistentDataContainer data = meta.getPersistentDataContainer();
return "1".equals(data.get(key, PersistentDataType.STRING)); 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")) {
}
}
} }

View File

@ -1,5 +1,6 @@
package de.ventority.randomizedminigames.GUI; package de.ventority.randomizedminigames.GUI;
import de.ventority.randomizedminigames.Minigames.Minigame;
import de.ventority.randomizedminigames.RandomizedMinigames; import de.ventority.randomizedminigames.RandomizedMinigames;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -27,12 +28,17 @@ public class MinigamesDisplayWindow {
public void buildWindow() { public void buildWindow() {
fillBorder(); fillBorder();
fillGUI(); fillGUI();
addNBT();
p.openInventory(gui); p.openInventory(gui);
} }
private void fillGUI() { 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() { private void fillBorder() {
@ -53,18 +59,22 @@ public class MinigamesDisplayWindow {
gui.setItem(i + 5 * 9, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1)); gui.setItem(i + 5 * 9, new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1));
gui.getItem(i + 5 * 9).setItemMeta(meta); 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() { private ItemMeta addNBT(ItemMeta meta, String key, String value) {
ItemStack item = gui.getItem(0); NamespacedKey key1 = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), key);
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;
PersistentDataContainer data = meta.getPersistentDataContainer(); PersistentDataContainer data = meta.getPersistentDataContainer();
data.set(key1, PersistentDataType.STRING, status); data.set(key1, PersistentDataType.STRING, value);
data.set(key2, PersistentDataType.STRING, "1"); return meta;
item.setItemMeta(meta);
} }
} }

View File

@ -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);
}
}

View File

@ -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<Player> contestants = new ArrayList<>();
}

View File

@ -1,8 +1,7 @@
package de.ventority.randomizedminigames; package de.ventority.randomizedminigames;
import de.ventority.randomizedminigames.GUI.GUIClickEvent; import de.ventority.randomizedminigames.Minigames.ForceItemBattle;
import de.ventority.randomizedminigames.Minigames.ItemForceBattle; import de.ventority.randomizedminigames.Minigames.MinigameBase;
import de.ventority.randomizedminigames.Minigames.Minigame;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList; import java.util.ArrayList;
@ -11,15 +10,15 @@ import java.util.List;
import static org.bukkit.Bukkit.getServer; import static org.bukkit.Bukkit.getServer;
public class MinigameHandler { public class MinigameHandler {
private static List<Minigame> minigames = new ArrayList<>(); private static List<MinigameBase> minigames = new ArrayList<>();
public static void createMinigame(int gameNumber) { public static void createMinigame(int gameNumber) {
List<Player> players = Bukkit.getOnlinePlayers().stream().map(p -> ((Player) p)).toList(); List<Player> 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()); getServer().getPluginManager().registerEvents(minigames.getFirst(), RandomizedMinigames.serverSettingsHandler.getPlugin());
} }
public static void deleteGame(Minigame minigame) { public static void deleteGame(MinigameBase minigame) {
minigames.remove(minigame); minigames.remove(minigame);
} }
} }

View File

@ -11,15 +11,16 @@ import org.bukkit.boss.BossBar;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
public class ItemForceBattle implements Minigame, Listener { public class ForceItemBattle implements MinigameBase, Listener {
private final HashMap<Player, ItemStack> currentItems; private final HashMap<Player, ItemStack> currentItems;
private final HashMap<Player, Integer> currentScores; private final HashMap<Player, Integer> currentScores;
private final HashMap<Player, BossBar> itemDisplays; private final HashMap<Player, BossBar> itemDisplays;
@ -28,7 +29,7 @@ public class ItemForceBattle implements Minigame, Listener {
private final List<Player> contestants; private final List<Player> contestants;
public ItemForceBattle(List<Player> players) { public ForceItemBattle(List<Player> players) {
id = new Random().nextInt(1024); id = new Random().nextInt(1024);
currentItems = new HashMap<>(); currentItems = new HashMap<>();
currentScores = new HashMap<>(); currentScores = new HashMap<>();
@ -140,6 +141,10 @@ public class ItemForceBattle implements Minigame, Listener {
scoreboardManager.removeScoreboard(); scoreboardManager.removeScoreboard();
scoreboardManager = null; scoreboardManager = null;
for (Player player : contestants) {
player.sendTitle(winner.getDisplayName() + " hat gewonnen!", "Die Player werden jetzt zurückgesetzt.", 10, 70, 20);
}
MinigameHandler.deleteGame(this); MinigameHandler.deleteGame(this);
} }
@ -151,7 +156,15 @@ public class ItemForceBattle implements Minigame, Listener {
else else
return; return;
if (currentItems.containsKey(eventPlayer)) 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());
}
} }

View File

@ -1,17 +1,28 @@
package de.ventority.randomizedminigames.Minigames; package de.ventority.randomizedminigames.Minigames;
import org.bukkit.entity.Player; import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import java.util.List; public enum Minigame {
ForceItemBattle(Material.DIAMOND_SWORD, "Force Item Battle", 0);
public interface Minigame extends Listener { Material material;
int getID(); String name;
String getName(); int number;
int getPlayerIntervals(); Minigame(Material m, String s, int i) {
int getMinPlayers(); material = m;
int getMaxPlayers(); name = s;
ItemStack getSymbol(); number = i;
void addPlayers(List<Player> players); }
public Material getMaterial() {
return material;
}
public String getName() {
return name;
}
public int getNumber() {
return number;
}
} }

View File

@ -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<Player> players);
}

View File

@ -1,13 +1,8 @@
package de.ventority.randomizedminigames; package de.ventority.randomizedminigames;
import de.ventority.randomizedminigames.GUI.GUIClickEvent; 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 org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.List;
public final class RandomizedMinigames extends JavaPlugin { public final class RandomizedMinigames extends JavaPlugin {
public static final ServerSettingsHandler serverSettingsHandler = new ServerSettingsHandler(); public static final ServerSettingsHandler serverSettingsHandler = new ServerSettingsHandler();
@Override @Override

View File

@ -7,7 +7,7 @@ import org.bukkit.entity.Player;
public class SelectMinigame implements CommandExecutor { public class SelectMinigame implements CommandExecutor {
@Override @Override
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) { 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(); window.buildWindow();
return true; return true;
} }