Fixed many bugs

Continued adding Team functionality
FIB and FIB with same Items works now as expected
Added customizable Timers
Minor changes
This commit is contained in:
jakob 2025-08-26 22:02:23 +02:00
parent be00c49e2d
commit 99e88c4f47
18 changed files with 481 additions and 36 deletions

View File

@ -93,4 +93,12 @@ public abstract class BaseWindow {
return p; return p;
} }
protected String getNBT(ItemStack item, String key) {
if (item == null) return "ItemIsNull";
ItemMeta meta = item.getItemMeta();
NamespacedKey nsKey = new NamespacedKey(RandomizedMinigames.serverSettingsHandler.getPlugin(), key);
if (meta == null) return "NoItemMeta";
PersistentDataContainer data = meta.getPersistentDataContainer();
return data.get(nsKey, PersistentDataType.STRING);
}
} }

View File

@ -16,7 +16,6 @@ public class MinigameSetup extends BaseWindow {
@Override @Override
protected void fillGUI() { protected void fillGUI() {
System.out.println("Hallo");
ItemStack playerSelect = new ItemStack(Material.PLAYER_HEAD); ItemStack playerSelect = new ItemStack(Material.PLAYER_HEAD);
addNBT(playerSelect, "Type", "MinigameSetup"); addNBT(playerSelect, "Type", "MinigameSetup");
addNBT(playerSelect, "Action", "startPlayerSelection"); addNBT(playerSelect, "Action", "startPlayerSelection");
@ -42,6 +41,17 @@ public class MinigameSetup extends BaseWindow {
setItemName(start, "Start"); setItemName(start, "Start");
addItemToGUI(50, start); addItemToGUI(50, start);
ItemStack timer = new ItemStack(Material.CLOCK);
addNBT(timer, "Type", "MinigameSetup");
addNBT(timer, "Action", "startTimerSetup");
setItemName(timer, "Set Timer");
addItemToGUI(timer);
ItemStack enableTimer = new ItemStack(Material.TARGET);
addNBT(enableTimer, "Type", "MinigameSetup");
addNBT(enableTimer, "Action", "toggleTimer");
setItemName(enableTimer, "Timer: " + (playerSettings.isTimed ? (ChatColor.GREEN + "On") : ChatColor.RED + "Off"));
addItemToGUI(enableTimer);
ItemStack back = new ItemStack(Material.ARROW); ItemStack back = new ItemStack(Material.ARROW);
addNBT(back, "Type", "MinigameSelect"); addNBT(back, "Type", "MinigameSelect");

View File

@ -19,7 +19,7 @@ public class MinigamesDisplayWindow extends BaseWindow {
ItemStack item = new ItemStack(minigame.getMaterial(), 1); ItemStack item = new ItemStack(minigame.getMaterial(), 1);
setItemName(item, minigame.getName()); setItemName(item, minigame.getName());
addNBT(item, "Type", "MinigameSelect"); addNBT(item, "Type", "MinigameSelect");
addNBT(item, "Action", "openMinigameSetup"); addNBT(item, "Action", minigame.getAction());
addNBT(item, "selectedMinigame", Integer.toString(minigame.getNumber())); addNBT(item, "selectedMinigame", Integer.toString(minigame.getNumber()));
addItemToGUI(item); addItemToGUI(item);
} }

View File

@ -15,6 +15,7 @@ public class PlayerSelection extends BaseWindow {
super(p); super(p);
} }
@Override @Override
protected void fillGUI() { protected void fillGUI() {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
@ -39,7 +40,7 @@ public class PlayerSelection extends BaseWindow {
SkullMeta meta = (SkullMeta) head.getItemMeta(); SkullMeta meta = (SkullMeta) head.getItemMeta();
if (meta != null) { if (meta != null) {
meta.setOwningPlayer(player); meta.setOwningPlayer(player);
meta.setDisplayName((MinigameHandler.getSettings(player).getSelectedPlayers().contains(player) ? meta.setDisplayName((MinigameHandler.getSettings(p).getSelectedPlayers().contains(player) ?
ChatColor.GREEN : ChatColor.RED) + player.getName()); ChatColor.GREEN : ChatColor.RED) + player.getName());
head.setItemMeta(meta); head.setItemMeta(meta);
} }

View File

@ -0,0 +1,75 @@
package de.ventority.randomizedminigames.GUI.MinigameSetups;
import de.ventority.randomizedminigames.GUI.BaseWindow;
import de.ventority.randomizedminigames.misc.MinigameHandler;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class SetTimeLimit extends BaseWindow {
public SetTimeLimit(Player p) {
super(p);
}
@Override
protected void fillGUI() {
ItemStack add30 = new ItemStack(Material.RED_DYE);
addNBT(add30, "Type", "MinigameSetup");
addNBT(add30, "Action", "add30ToTimeLimit");
setItemName(add30, "+30min");
addItemToGUI(16, add30);
ItemStack add10 = new ItemStack(Material.RED_DYE);
addNBT(add10, "Type", "MinigameSetup");
addNBT(add10, "Action", "add10ToTimeLimit");
setItemName(add10, "+10min");
addItemToGUI(15, add10);
ItemStack add1 = new ItemStack(Material.RED_DYE);
addNBT(add1, "Type", "MinigameSetup");
addNBT(add1, "Action", "add1ToTimeLimit");
setItemName(add1, "+1min");
addItemToGUI(14, add1);
ItemStack sub30 = new ItemStack(Material.GREEN_DYE);
addNBT(sub30, "Type", "MinigameSetup");
addNBT(sub30, "Action", "sub30FromTimeLimit");
setItemName(sub30, "-30min");
addItemToGUI(10, sub30);
ItemStack sub10 = new ItemStack(Material.GREEN_DYE);
addNBT(sub10, "Type", "MinigameSetup");
addNBT(sub10, "Action", "sub10FromTimeLimit");
setItemName(sub10, "-10min");
addItemToGUI(11, sub10);
ItemStack sub1 = new ItemStack(Material.GREEN_DYE);
addNBT(sub1, "Type", "MinigameSetup");
addNBT(sub1, "Action", "sub1FromTimeLimit");
setItemName(sub1, "-1min");
addItemToGUI(12, sub1);
ItemStack display = new ItemStack(Material.PAPER);
addNBT(display, "Type", "MinigameSetup");
addNBT(display, "Action", "none");
setItemName(display, formattedTime(MinigameHandler.getSettings(p).timerStop));
addItemToGUI(13, display);
ItemStack back = new ItemStack(Material.ARROW);
addNBT(back, "Type", "MinigameSetup");
addNBT(back, "Action", "homeMenu");
setItemName(back, "Back");
addItemToGUI(49, back);
}
private String formattedTime(int time) {
int minutes = (int)Math.floor((double) time / 60);
int seconds = time % 60;
StringBuilder sb = new StringBuilder();
if (minutes != 0) {
sb.append(minutes).append(":");
}
sb.append(seconds);
return sb.toString();
}
}

View File

@ -0,0 +1,41 @@
package de.ventority.randomizedminigames.GUI.MinigameSetups;
import de.ventority.randomizedminigames.GUI.BaseWindow;
import de.ventority.randomizedminigames.misc.MinigameHandler;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class TeamCountSelection extends BaseWindow {
public TeamCountSelection(Player p) {
super(p);
}
@Override
protected void fillGUI() {
ItemStack add = new ItemStack(Material.RED_DYE);
addNBT(add, "Type", "MinigameSetup");
addNBT(add, "Action", "addTeamCount");
setItemName(add, "Add");
addItemToGUI(14, add);
ItemStack sub = new ItemStack(Material.GREEN_DYE);
addNBT(sub, "Type", "MinigameSetup");
addNBT(sub, "Action", "subTeamCount");
setItemName(sub, "Sub");
addItemToGUI(12, sub);
ItemStack display = new ItemStack(Material.PAPER);
addNBT(display, "Type", "MinigameSetup");
addNBT(display, "Action", "none");
setItemName(display, "" + MinigameHandler.getSettings(p).getTeamCount());
addItemToGUI(13, display);
ItemStack next = new ItemStack(Material.ARROW);
addNBT(next, "Type", "MinigameSetup");
addNBT(next, "Action", "TeamSetupSelection");
setItemName(next, "Next");
addItemToGUI(49, next);
}
}

View File

@ -0,0 +1,57 @@
package de.ventority.randomizedminigames.GUI.MinigameSetups;
import de.ventority.randomizedminigames.GUI.BaseWindow;
import de.ventority.randomizedminigames.misc.MinigameHandler;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
public class TeamPlayerSelection extends BaseWindow {
public TeamPlayerSelection(Player p) {
super(p);
}
@Override
protected void fillGUI() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (!MinigameHandler.getOccupiedPlayers().contains(player)) {
ItemStack item = getPlayerHead(player);
addNBT(item, "Type", "MinigameSetup");
addNBT(item, "Action", "clickedPlayerInTeams");
addNBT(item, "Player", player.getDisplayName());
addItemToGUI(item);
}
}
final org.bukkit.ChatColor[] colors = new org.bukkit.ChatColor[]{org.bukkit.ChatColor.GREEN,
org.bukkit.ChatColor.RED, org.bukkit.ChatColor.BLUE, org.bukkit.ChatColor.DARK_PURPLE,
org.bukkit.ChatColor.BLACK, org.bukkit.ChatColor.DARK_GREEN};
final Material[] material = new Material[]{Material.GREEN_WOOL, Material.RED_WOOL,
Material.BLUE_WOOL, Material.PURPLE_WOOL, Material.BLACK_WOOL, Material.GREEN_WOOL};
ItemStack selectedTeam = new ItemStack(material[MinigameHandler.getSettings(p).getSelectedTeamIndex()], 1);
setItemName(selectedTeam, colors[MinigameHandler.getSettings(p).getSelectedTeamIndex()] + "Team #" + (MinigameHandler.getSettings(p).getSelectedTeamIndex() + 1));
addItemToGUI(4, selectedTeam);
ItemStack back = new ItemStack(Material.ARROW);
addNBT(back, "Type", "MinigameSetup");
addNBT(back, "Action", "homeMenu");
setItemName(back, "Back");
addItemToGUI(49, back);
}
private ItemStack getPlayerHead(Player player) {
ItemStack head = new ItemStack(Material.PLAYER_HEAD);
SkullMeta meta = (SkullMeta) head.getItemMeta();
if (meta != null) {
meta.setOwningPlayer(player);
meta.setDisplayName((MinigameHandler.getSettings(p).getSelectedPlayers().contains(player) ?
ChatColor.GREEN : ChatColor.RED) + player.getName());
head.setItemMeta(meta);
}
return head;
}
}

View File

@ -0,0 +1,31 @@
package de.ventority.randomizedminigames.GUI.MinigameSetups;
import de.ventority.randomizedminigames.GUI.BaseWindow;
import de.ventority.randomizedminigames.misc.MinigameHandler;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
public class TeamSetupSelection extends BaseWindow {
private final ChatColor[] colors = new ChatColor[]{ChatColor.GREEN, ChatColor.RED, ChatColor.BLUE, ChatColor.DARK_PURPLE, ChatColor.BLACK, ChatColor.DARK_GREEN};
private final Material[] material = new Material[]{Material.GREEN_WOOL, Material.RED_WOOL, Material.BLUE_WOOL, Material.PURPLE_WOOL, Material.BLACK_WOOL, Material.GREEN_WOOL};
public TeamSetupSelection(Player p) {
super(p);
}
@Override
protected void fillGUI() {
for (int i = 0; i < MinigameHandler.getSettings(p).getTeamCount(); i++) {
ItemStack item = new ItemStack(material[i], 1);
setItemName(item, colors[i] + "Team #" + (i + 1));
addNBT(item, "Type", "MinigameSetup");
addNBT(item, "Action", "selectTeam");
addNBT(item, "selectedTeam", Integer.toString(i));
addItemToGUI(item);
}
}
}

View File

@ -1,6 +1,7 @@
package de.ventority.randomizedminigames.GUI.handlers; package de.ventority.randomizedminigames.GUI.handlers;
import de.ventority.randomizedminigames.GUI.MinigameSetups.MinigameSetup; import de.ventority.randomizedminigames.GUI.MinigameSetups.MinigameSetup;
import de.ventority.randomizedminigames.GUI.MinigameSetups.TeamCountSelection;
import de.ventority.randomizedminigames.RandomizedMinigames; import de.ventority.randomizedminigames.RandomizedMinigames;
import de.ventority.randomizedminigames.misc.MinigameHandler; import de.ventority.randomizedminigames.misc.MinigameHandler;
import de.ventority.randomizedminigames.misc.Settings; import de.ventority.randomizedminigames.misc.Settings;
@ -15,10 +16,14 @@ public class MinigameSelectHandler extends GUIHandler{
@Override @Override
public void handle() { public void handle() {
Settings settings = MinigameHandler.getSettings((Player) event.getWhoClicked()); Settings settings = MinigameHandler.getSettings((Player) event.getWhoClicked());
if (action.equals("openMinigameSetup")) { if (action.equals("startForceItem") || action.equals("startForceItemSameItem")) {
settings.selectMinigame(Integer.parseInt(getNBT(event.getCurrentItem(), "selectedMinigame"))); settings.selectMinigame(Integer.parseInt(getNBT(event.getCurrentItem(), "selectedMinigame")));
new MinigameSetup((Player) event.getWhoClicked()).buildWindow(); new MinigameSetup((Player) event.getWhoClicked()).buildWindow();
} }
if (action.equals("startForceItemTeams")) {
settings.selectMinigame(Integer.parseInt(getNBT(event.getCurrentItem(), "selectedMinigame")));
new TeamCountSelection((Player)event.getWhoClicked()).buildWindow();
}
if (action.equals("homeMenu")) { if (action.equals("homeMenu")) {
new MinigameSetup((Player) event.getWhoClicked()).buildWindow(); new MinigameSetup((Player) event.getWhoClicked()).buildWindow();
} }

View File

@ -1,8 +1,6 @@
package de.ventority.randomizedminigames.GUI.handlers; package de.ventority.randomizedminigames.GUI.handlers;
import de.ventority.randomizedminigames.GUI.MinigameSetups.MinigameSetup; import de.ventority.randomizedminigames.GUI.MinigameSetups.*;
import de.ventority.randomizedminigames.GUI.MinigameSetups.PlayerSelection;
import de.ventority.randomizedminigames.GUI.MinigameSetups.SetLimit;
import de.ventority.randomizedminigames.misc.MinigameHandler; import de.ventority.randomizedminigames.misc.MinigameHandler;
import de.ventority.randomizedminigames.misc.Settings; import de.ventority.randomizedminigames.misc.Settings;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -42,6 +40,16 @@ public class MinigameSetupHandler extends GUIHandler {
new SetLimit((Player)event.getWhoClicked()).buildWindow(); new SetLimit((Player)event.getWhoClicked()).buildWindow();
} }
if (action.equals("addTeamCount")) {
playerSettings.addTeamCount();
new TeamCountSelection((Player)event.getWhoClicked()).buildWindow();
}
if (action.equals("subTeamCount")) {
playerSettings.subTeamCount();
new TeamCountSelection((Player)event.getWhoClicked()).buildWindow();
}
if (action.equals("startPlayerSelection")) { if (action.equals("startPlayerSelection")) {
new PlayerSelection((Player)event.getWhoClicked()).buildWindow(); new PlayerSelection((Player)event.getWhoClicked()).buildWindow();
} }
@ -55,8 +63,43 @@ public class MinigameSetupHandler extends GUIHandler {
new MinigameSetup((Player) event.getWhoClicked()).buildWindow(); new MinigameSetup((Player) event.getWhoClicked()).buildWindow();
} }
if (action.equals("toggleTimer")) {
playerSettings.isTimed = !playerSettings.isTimed;
new MinigameSetup((Player) event.getWhoClicked()).buildWindow();
}
if (action.equals("startGame")) { if (action.equals("startGame")) {
MinigameHandler.createMinigame(playerSettings.getSelectedMinigame(), (Player) event.getWhoClicked()); MinigameHandler.createMinigame(playerSettings.getSelectedMinigame(), (Player) event.getWhoClicked());
event.getWhoClicked().closeInventory();
}
if (action.equals("TeamSetupSelection")) {
new TeamSetupSelection((Player)event.getWhoClicked()).buildWindow();
}
if (action.equals("selectTeam")) {
MinigameHandler.getSettings(((Player) event.getWhoClicked()).getPlayer()).setSelectedTeamIndex(Integer.parseInt(getNBT(event.getCurrentItem(), "selectedTeam")));
new TeamPlayerSelection((Player)event.getWhoClicked()).buildWindow();
}
if (action.equals("clickedPlayerInTeams")) {
return;
}
if (action.equals("startTimerSetup")) {
new SetTimeLimit((Player)event.getWhoClicked()).buildWindow();
}
if (action.contains("FromTimeLimit") || action.contains("ToTimeLimit")) {
switch (action) {
case "add30ToTimeLimit": playerSettings.timerStop = playerSettings.timerStop + 30*60; break;
case "add10ToTimeLimit": playerSettings.timerStop = playerSettings.timerStop + 10*60; break;
case "add1ToTimeLimit": playerSettings.timerStop = playerSettings.timerStop + 60; break;
case "sub30FromTimeLimit": playerSettings.timerStop = playerSettings.timerStop - 30*60; break;
case "sub10FromTimeLimit": playerSettings.timerStop = playerSettings.timerStop - 10*60; break;
case "sub1FromTimeLimit": playerSettings.timerStop = playerSettings.timerStop - 60; break;
}
new SetTimeLimit((Player)event.getWhoClicked()).buildWindow();
} }
} }
} }

View File

@ -19,6 +19,7 @@ import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import de.ventority.randomizedminigames.misc.Timer;
import java.util.*; import java.util.*;
@ -32,6 +33,8 @@ public class ForceItemBattle implements MinigameBase, Listener {
private final HashMap<Player, PlayerBackup> backups; private final HashMap<Player, PlayerBackup> backups;
private final Player owner; private final Player owner;
protected Settings settings; protected Settings settings;
private Timer timer;
private List<Player> disconnected = new ArrayList<>();
private final List<Material> SURVIVAL_ITEMS = Arrays.stream(Material.values()) private final List<Material> SURVIVAL_ITEMS = Arrays.stream(Material.values())
.filter(Material::isItem) .filter(Material::isItem)
@ -53,13 +56,19 @@ public class ForceItemBattle implements MinigameBase, Listener {
!name.contains("END_GATEWAY") && !name.contains("END_GATEWAY") &&
!name.contains("NETHER_PORTAL") && !name.contains("NETHER_PORTAL") &&
!name.contains("POTTED_") && !name.contains("POTTED_") &&
!name.contains("MUSIC"); !name.contains("MUSIC") &&
!name.contains("AMETHYST_BUD") &&
!name.contains("OXIDIZED") &&
!name.contains("AMETHYST") &&
!name.contains("PURPUR") &&
!name.contains("EXPOSED");
}) })
.toList(); .toList();
public ForceItemBattle(List<Player> players, Player owner) { public ForceItemBattle(List<Player> players, Player owner) {
settings = MinigameHandler.getSettings(owner); settings = MinigameHandler.getSettings(owner);
timer = new Timer(settings.timerStop, players, this, "");
id = new Random().nextInt(1024); id = new Random().nextInt(1024);
currentItems = new HashMap<>(); currentItems = new HashMap<>();
@ -80,7 +89,8 @@ public class ForceItemBattle implements MinigameBase, Listener {
itemDisplays.put(player, bar); itemDisplays.put(player, bar);
updatePlayerItem(player, getRandomItem()); updatePlayerItem(player, getRandomItem());
backups.put(player, new PlayerBackup(player.getInventory().getContents(), player.getInventory().getArmorContents(), player.getExp(), player.getLocation())); backups.put(player, new PlayerBackup(player.getInventory().getContents(), player.getInventory().getArmorContents(), player.getExp(), player.getLocation(), player.getGameMode()));
player.getInventory().clear();
ItemStack skip = new ItemStack(Material.BARRIER, 3); ItemStack skip = new ItemStack(Material.BARRIER, 3);
ItemMeta meta = skip.getItemMeta(); ItemMeta meta = skip.getItemMeta();
@ -89,6 +99,7 @@ public class ForceItemBattle implements MinigameBase, Listener {
skip.setItemMeta(meta); skip.setItemMeta(meta);
player.getInventory().addItem(skip); player.getInventory().addItem(skip);
} }
timer.startCounter();
} }
@Override @Override
@ -119,9 +130,12 @@ public class ForceItemBattle implements MinigameBase, Listener {
if (i == null) return; if (i == null) return;
if (currentItems.get(p).getType() == i.getType()) { if (currentItems.get(p).getType() == i.getType()) {
currentScores.replace(p, currentScores.get(p) + 1); currentScores.replace(p, currentScores.get(p) + 1);
p.sendMessage("Du hast " + i.getTranslationKey().replace("block.minecraft.", "")
.replace("_", " ")
.replace("item.minecraft.", "") + " gefunden!");
if (settings.getScoreboardStatus()) if (settings.getScoreboardStatus())
scoreboardManager.setPunkte(p.getName(), scoreboardManager.getPunkte(p.getName()) + 1); scoreboardManager.setPunkte(p.getName(), scoreboardManager.getPunkte(p.getName()) + 1);
if (checkWin(p)) { if (!settings.isTimed && checkWin(p)) {
stopGame(p); stopGame(p);
return; return;
} }
@ -150,32 +164,37 @@ public class ForceItemBattle implements MinigameBase, Listener {
if (player != winner) { if (player != winner) {
player.teleport(winner); player.teleport(winner);
player.setGameMode(GameMode.SPECTATOR); player.setGameMode(GameMode.SPECTATOR);
player.sendTitle(winner.getDisplayName() + " won!", "Resetting players...", 10, 70, 20); player.sendTitle(winner.getDisplayName() + " won!", "Resetting game...", 10, 70, 20);
//restorePlayer(player); } else {
player.sendTitle("You won. Congratulations!", "Your score was: " + currentScores.get(winner), 10, 70, 20);
} }
if (settings.getScoreboardStatus()) if (settings.getScoreboardStatus())
player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard()); player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard());
} }
} }
public void stopGame() {
Map.Entry<Player, Integer> bestEntry = currentScores.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.orElse(null);
assert bestEntry != null;
stopGame(bestEntry.getKey());
}
private void stopGame(Player winner) { private void stopGame(Player winner) {
showEndMessage(winner); showEndMessage(winner);
for (Player p : itemDisplays.keySet()) { timer.pauseCounter();
itemDisplays.get(p).setVisible(false); Timer t = new Timer(10, contestants, this, this::killGame, true, "Resetting game in: ");
itemDisplays.get(p).removePlayer(p); t.startCounter();
}
itemDisplays.clear();
if (settings.getScoreboardStatus()) {
scoreboardManager.removeScoreboard();
scoreboardManager = null;
}
MinigameHandler.resetSettings(owner);
MinigameHandler.deleteGame(this);
} }
private void removePlayer(Player p) { private void removePlayer(Player p) {
contestants.remove(p);
if (itemDisplays.get(p) != null) {
itemDisplays.get(p).setVisible(false); itemDisplays.get(p).setVisible(false);
itemDisplays.get(p).removePlayer(p); itemDisplays.get(p).removePlayer(p);
itemDisplays.remove(p);
}
if (settings.getScoreboardStatus()) if (settings.getScoreboardStatus())
p.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard()); p.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard());
if (contestants.isEmpty()) if (contestants.isEmpty())
@ -183,9 +202,12 @@ public class ForceItemBattle implements MinigameBase, Listener {
} }
public void killGame() { public void killGame() {
for (Player player : contestants) { for (Player p : contestants) {
if (settings.getScoreboardStatus()) restorePlayer(p);
player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard()); }
for (Player p : itemDisplays.keySet()) {
itemDisplays.get(p).setVisible(false);
itemDisplays.get(p).removePlayer(p);
} }
itemDisplays.clear(); itemDisplays.clear();
@ -193,6 +215,11 @@ public class ForceItemBattle implements MinigameBase, Listener {
scoreboardManager.removeScoreboard(); scoreboardManager.removeScoreboard();
scoreboardManager = null; scoreboardManager = null;
} }
if (settings.getScoreboardStatus())
for (Player player : contestants)
player.setScoreboard(Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard());
itemDisplays.clear();
MinigameHandler.resetSettings(owner); MinigameHandler.resetSettings(owner);
MinigameHandler.deleteGame(this); MinigameHandler.deleteGame(this);
} }
@ -204,6 +231,7 @@ public class ForceItemBattle implements MinigameBase, Listener {
p.getInventory().clear(); p.getInventory().clear();
p.getInventory().setContents(backup.getInventory()); p.getInventory().setContents(backup.getInventory());
p.getInventory().setArmorContents(backup.getArmor()); p.getInventory().setArmorContents(backup.getArmor());
p.setGameMode(backup.getGamemode());
} }
public List<Player> getPlayers() { public List<Player> getPlayers() {
@ -216,6 +244,10 @@ public class ForceItemBattle implements MinigameBase, Listener {
checkItem(p, curItem); checkItem(p, curItem);
} }
public Player getOwner() {
return owner;
}
@EventHandler @EventHandler
public void onItemPickup(EntityPickupItemEvent e) { public void onItemPickup(EntityPickupItemEvent e) {
Player eventPlayer; Player eventPlayer;
@ -239,8 +271,8 @@ public class ForceItemBattle implements MinigameBase, Listener {
@EventHandler @EventHandler
public void onPlayerLeave(PlayerQuitEvent e) { public void onPlayerLeave(PlayerQuitEvent e) {
if (contestants.contains(e.getPlayer())) { if (contestants.contains(e.getPlayer())) {
disconnected.add(e.getPlayer());
removePlayer(e.getPlayer()); removePlayer(e.getPlayer());
restorePlayer(e.getPlayer());
} }
} }
} }

View File

@ -35,7 +35,6 @@ public class ForceItemBattleTeams extends ForceItemBattle{
if (team.getPlayers().contains(player)) winningTeam = team; if (team.getPlayers().contains(player)) winningTeam = team;
player.sendTitle(winningTeam.getColor() + winningTeam.getColor().name() + "Team " + ChatColor.RESET + " won!", player.sendTitle(winningTeam.getColor() + winningTeam.getColor().name() + "Team " + ChatColor.RESET + " won!",
"Resetting players...", 10, 70, 20); "Resetting players...", 10, 70, 20);
//restorePlayer(player);
player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard()); player.setScoreboard(Bukkit.getScoreboardManager().getMainScoreboard());
} }
} }

View File

@ -4,7 +4,8 @@ import org.bukkit.Material;
public enum Minigame { public enum Minigame {
ForceItemBattle(Material.DIAMOND_SWORD, "Force Item Battle", 0, "startForceItem"), ForceItemBattle(Material.DIAMOND_SWORD, "Force Item Battle", 0, "startForceItem"),
ForceItemBattleSameItems(Material.NETHERITE_SWORD, "Force Item Battle (Same Items)", 1, "startForceItemSameItem"),; ForceItemBattleSameItems(Material.NETHERITE_SWORD, "Force Item Battle (Same Items)", 1, "startForceItemSameItem");
//ForceItemBattleTeams(Material.GOLDEN_SWORD, "Force Item Battle (Teams)", 2, "startForceItemTeams"),;
final Material material; final Material material;
final String name; final String name;

View File

@ -13,4 +13,6 @@ public interface MinigameBase extends Listener {
void addPlayers(List<Player> players); void addPlayers(List<Player> players);
List<Player> getPlayers(); List<Player> getPlayers();
void killGame(); void killGame();
void stopGame();
Player getOwner();
} }

View File

@ -4,13 +4,11 @@ import de.ventority.randomizedminigames.Minigames.ForceItemBattle;
import de.ventority.randomizedminigames.Minigames.ForceItemBattleSameItems; import de.ventority.randomizedminigames.Minigames.ForceItemBattleSameItems;
import de.ventority.randomizedminigames.Minigames.MinigameBase; import de.ventority.randomizedminigames.Minigames.MinigameBase;
import de.ventority.randomizedminigames.RandomizedMinigames; import de.ventority.randomizedminigames.RandomizedMinigames;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import static org.bukkit.Bukkit.getServer; import static org.bukkit.Bukkit.getServer;
public class MinigameHandler { public class MinigameHandler {

View File

@ -1,5 +1,6 @@
package de.ventority.randomizedminigames.misc; package de.ventority.randomizedminigames.misc;
import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -8,12 +9,14 @@ public class PlayerBackup {
private final ItemStack[] armor; private final ItemStack[] armor;
private final float exp; private final float exp;
private final Location location; private final Location location;
private GameMode gamemode;
public PlayerBackup(ItemStack[] inventory, ItemStack[] armor, float exp, Location location) { public PlayerBackup(ItemStack[] inventory, ItemStack[] armor, float exp, Location location, GameMode gamemode) {
this.inventory = inventory; this.inventory = inventory;
this.armor = armor; this.armor = armor;
this.exp = exp; this.exp = exp;
this.location = location; this.location = location;
this.gamemode = gamemode;
} }
public ItemStack[] getInventory() { public ItemStack[] getInventory() {
@ -32,4 +35,8 @@ public class PlayerBackup {
return location; return location;
} }
public GameMode getGamemode() {
return gamemode;
}
} }

View File

@ -13,6 +13,9 @@ public class Settings {
int selectedLimit = 10; int selectedLimit = 10;
List<Team> teams = new ArrayList<>(); List<Team> teams = new ArrayList<>();
boolean showScoreboard = true; boolean showScoreboard = true;
private int selectedTeamCount = 2;
private int selectedTeamIndex = 0;
public int timerStop = 1800;
public Settings(Player owner) { public Settings(Player owner) {
this.owner = owner; this.owner = owner;
@ -31,7 +34,6 @@ public class Settings {
} }
public void addPlayersToSelection(Player toAdd) { public void addPlayersToSelection(Player toAdd) {
System.out.println(toAdd.getName());
selectedPlayers.add(toAdd); selectedPlayers.add(toAdd);
} }
@ -58,4 +60,29 @@ public class Settings {
public void subFromSelectedLimit() { public void subFromSelectedLimit() {
selectedLimit--; selectedLimit--;
} }
public void addTeamCount() {
if (selectedTeamCount < 6) {}
selectedTeamCount++;
}
public void subTeamCount() {
if (selectedTeamCount > 2)
selectedTeamCount--;
}
public int getTeamCount() {
return selectedTeamCount;
}
public void setSelectedTeamIndex(int selectedTeamIndex) {
this.selectedTeamIndex = selectedTeamIndex;
}
public int getSelectedTeamIndex() {
return selectedTeamIndex;
}
public boolean isTimed;
} }

View File

@ -0,0 +1,108 @@
package de.ventority.randomizedminigames.misc;
import de.ventority.randomizedminigames.Minigames.MinigameBase;
import de.ventority.randomizedminigames.RandomizedMinigames;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;
import java.util.List;
public class Timer {
private int counter = 0;
private BukkitTask counterTask;
private int maxValue = 10;
private List<Player> players;
private MinigameBase minigame;
private boolean isPaused = false;
private Runnable methodToCall;
private boolean isReversed = false;
private String outputText;
public Timer(int maxValue, List<Player> players, MinigameBase minigame, String text) {
this.maxValue = maxValue;
this.players = players;
this.minigame = minigame;
this.outputText = text;
}
public Timer(int maxValue, List<Player> players, MinigameBase minigame, Runnable method, String text) {
this.maxValue = maxValue;
this.players = players;
this.minigame = minigame;
this.methodToCall = method;
this.outputText = text;
}
public Timer(int maxValue, List<Player> players, MinigameBase minigame, Runnable method, boolean isReversed, String text) {
this.maxValue = maxValue;
this.players = players;
this.minigame = minigame;
this.methodToCall = method;
this.isReversed = isReversed;
this.outputText = text;
}
public void startCounter() {
if (counterTask != null && !counterTask.isCancelled()) {
return;
}
counter = 0;
counterTask = Bukkit.getScheduler().runTaskTimer(RandomizedMinigames.serverSettingsHandler.getPlugin(), () -> {
updatePlayers();
if (!isPaused) {
counter++;
if (counter >= maxValue && MinigameHandler.getSettings(minigame.getOwner()).isTimed) {
if (methodToCall != null)
methodToCall.run();
else
minigame.stopGame();
stopCounter();
}
}
}, 20L, 20L);
}
public void pauseCounter() {
isPaused = true;
}
public void resumeCounter() {
isPaused = false;
}
public void stopCounter() {
if (counterTask != null)
counterTask.cancel();
}
public void resetCounter() {
counter = 0;
}
private void updatePlayers() {
if (isPaused) {
for (Player player : players)
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.DARK_PURPLE + ChatColor.BOLD.toString() + "The Timer is paused..."));
return;
}
int x = isReversed ? maxValue - counter : counter;
int minutes = (int)Math.floor((double) x / 60);
int seconds = x % 60;
StringBuilder sb = new StringBuilder();
if (minutes != 0) {
sb.append(minutes).append(":");
}
sb.append(seconds < 10 ? "0" + seconds : seconds);
String output = sb.toString();
for (Player player : players) {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.DARK_PURPLE + ChatColor.BOLD.toString() + outputText + output));
}
}
}