diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index f6e7c47..e1775cd 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -16,6 +16,7 @@ import de.fanta.challenges.commands.coords.CoordsShareCommand; import de.fanta.challenges.commands.editor.EditorCommand; import de.fanta.challenges.commands.editor.EditorSetCommand; +import de.fanta.challenges.commands.event.CreateTeamsCommand; import de.fanta.challenges.commands.event.EventCommand; import de.fanta.challenges.commands.event.EventGetScoreCommand; import de.fanta.challenges.commands.event.EventSettingsCommand; @@ -99,6 +100,7 @@ eventRouter.addCommandMapping(new EventSettingsCommand(plugin), "settings"); eventRouter.addCommandMapping(new EventGetScoreCommand(plugin), "getscore"); eventRouter.addCommandMapping(new EventStartCommand(plugin), "start"); + eventRouter.addCommandMapping(new CreateTeamsCommand(), "createteams"); CommandRouter bingoRouter = new CommandRouter(plugin.getCommand("bingo")); bingoRouter.addCommandMapping(new BingoCommand(plugin)); diff --git a/src/main/java/de/fanta/challenges/commands/event/CreateTeamsCommand.java b/src/main/java/de/fanta/challenges/commands/event/CreateTeamsCommand.java new file mode 100644 index 0000000..31441cd --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/event/CreateTeamsCommand.java @@ -0,0 +1,51 @@ +package de.fanta.challenges.commands.event; + +import de.fanta.challenges.teams.TeamUtils; +import de.fanta.challenges.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CreateTeamsCommand extends SubCommand { + + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (sender.hasPermission("challenges.event")) { + int teams; + int playerperteam; + if (args.hasNext()) { + teams = Integer.parseInt(args.getNext()); + } else { + ChatUtil.sendErrorMessage(sender, "/event createteams "); + return true; + } + + if (teams > 28) { + ChatUtil.sendErrorMessage(sender, "Du kannst nicht mehr als 28 Teams anlegen."); + return true; + } + + if (args.hasNext()) { + playerperteam = Integer.parseInt(args.getNext()); + } else { + ChatUtil.sendErrorMessage(sender, "/event createteams "); + return true; + } + + TeamUtils.setTeamCount(teams); + TeamUtils.setTeamSize(playerperteam); + ChatUtil.sendNormalMessage(sender, "Es wurden " + teams + " Teams erstellt."); + return true; + } else { + ChatUtil.sendErrorMessage(sender, "Keine Berechtigung!"); + } + return true; + } +} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java index ac61b8c..ecb0214 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; +import de.fanta.challenges.teams.TeamUtils; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.GUIUtils; import de.iani.cubesideutils.bukkit.commands.SubCommand; @@ -46,6 +47,9 @@ if (plugin.getServerType() != ServerType.ADVENTURE) { world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); } + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().removeItem(TeamUtils.selectiomItem()); + } plugin.getTimer().startTimer(); Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(p, 0)); diff --git a/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java b/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java index eb299a5..af47d9a 100644 --- a/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java +++ b/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java @@ -33,7 +33,7 @@ } Player p = e.getEntity(); - if (p.getLocation().getBlockY() > p.getLocation().getWorld().getMinHeight()) { + if (p.getLocation().getBlockY() > p.getLocation().getWorld().getMinHeight() - 3) { e.getDrops().clear(); Block block = p.getLocation().subtract(0, 1, 0).getBlock(); String inventoryString = GravestoneUtils.createInventoryString(p); diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java index d96304c..ca112fa 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -2,23 +2,26 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.challenges.DeathrunChallengeEvent; +import de.fanta.challenges.teams.TeamUtils; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.GUIUtils; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import java.util.Objects; public class EventGui implements Listener { - private static final Challenges plugin = Challenges.getPlugin(); - public static final int INVENTORY_SIZE = 27; + private static final Challenges plugin = Challenges.getPlugin(); public static final Inventory EVENT_GUI = Bukkit.createInventory(null, INVENTORY_SIZE, plugin.getGUIPREFIX() + " >> Event Settings"); private static final int NULL_EVENT_INDEX = 0; @@ -103,12 +106,23 @@ } } case TEAM_INDEX -> { - if (!plugin.getConfig().getBoolean("event.teams")) { - GUIUtils.setConfig("event.teams", true); - GUIUtils.sendTitleToAll("Event", "Teams aktiviert", ChatUtil.GREEN); + + if (TeamUtils.getTeams() != null && TeamUtils.getTeamSize() != 0) { + if (!plugin.getConfig().getBoolean("event.teams")) { + GUIUtils.setConfig("event.teams", true); + GUIUtils.sendTitleToAll("Event", "Teams aktiviert", ChatUtil.GREEN); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().setItem(8, TeamUtils.selectiomItem()); + } + } else { + GUIUtils.setConfig("event.teams", false); + GUIUtils.sendTitleToAll("Event", "Teams deaktiviert", ChatUtil.RED); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.getInventory().removeItem(TeamUtils.selectiomItem()); + } + } } else { - GUIUtils.setConfig("event.teams", false); - GUIUtils.sendTitleToAll("Event", "Teams deaktiviert", ChatUtil.RED); + ChatUtil.sendErrorMessage(p, "Du musst erst teams anlegen! /event createteams "); } } case BUILD_EVENT_INDEX -> { diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java new file mode 100644 index 0000000..e3dca51 --- /dev/null +++ b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java @@ -0,0 +1,83 @@ +package de.fanta.challenges.guis.eventgui; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.teams.ChallengeTeam; +import de.fanta.challenges.teams.TeamUtils; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.guiutils.GUIUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; + +import java.util.HashMap; +import java.util.Map; + +public class TeamSelectGUI implements Listener { + + private static final Challenges plugin = Challenges.getPlugin(); + private static final Map teamperSlot = new HashMap<>(); + private static int CLOSE_IDEX; + private static Inventory TEAM_SELECT_UI; + + public static void buildTeamSelectInventory() { + TEAM_SELECT_UI = Bukkit.createInventory(null, 9 * (TeamUtils.getTeams().length / 7 + ((TeamUtils.getTeams().length % 7 > 0) ? 1 : 0)) + 18, plugin.getGUIPREFIX() + " >> Select Team..."); + System.out.println(TEAM_SELECT_UI.getSize()); + CLOSE_IDEX = TEAM_SELECT_UI.getSize() - 9; + int row = 0; + int cat = 0; + + if (TeamUtils.getTeams().length == 0) { + return; + } + + for (ChallengeTeam team : TeamUtils.getTeams()) { + int slot = row * 9 + cat + 10; + + TEAM_SELECT_UI.setItem(slot, team.getDisplayItem()); + teamperSlot.put(slot, team); + if (cat < 6) { + cat++; + continue; + } + row++; + cat = 0; + } + + TEAM_SELECT_UI.setItem(CLOSE_IDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Menü verlassen!")); + for (int i = 0; i < TEAM_SELECT_UI.getSize(); i++) { + if (TEAM_SELECT_UI.getItem(i) == null || TEAM_SELECT_UI.getItem(i).getType() == Material.AIR) { + TEAM_SELECT_UI.setItem(i, GUIUtils.EMPTY_ICON); + } + } + } + + public static void openTeamSelectGui(Player p) { + p.openInventory(TEAM_SELECT_UI); + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + int slot = e.getRawSlot(); + Player p = (Player) e.getWhoClicked(); + ChallengeTeam team = teamperSlot.get(slot); + if (e.getInventory() == TEAM_SELECT_UI) { + if (team != null) { + if (e.isLeftClick()) { + ChatUtil.sendNormalMessage(p, "Du bist nun in Team " + team.getName() + "!"); + p.closeInventory(); + } + } + + if (slot == CLOSE_IDEX) { + p.closeInventory(); + } + + e.setCancelled(true); + } + } +} + diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index e49a8c2..60365e7 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -9,6 +9,7 @@ import de.fanta.challenges.guis.eventgui.EventGui; import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; import de.fanta.challenges.guis.eventgui.EventItemsGui; +import de.fanta.challenges.guis.eventgui.TeamSelectGUI; import de.fanta.challenges.guis.settingsgui.MainGui; import de.fanta.challenges.guis.settingsgui.OtherSettingsGui; import de.fanta.challenges.guis.settingsgui.ServerSettingsGui; @@ -40,6 +41,7 @@ pM.registerEvents(new FurnaceListener(), plugin); pM.registerEvents(new CommandBlockListener(), plugin); pM.registerEvents(new TeleportGUI(), plugin); + pM.registerEvents(new TeamSelectGUI(), plugin); pM.registerEvents(new GravestoneListener(), plugin); diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index 1ee0cef..dc43214 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -3,6 +3,8 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; import de.fanta.challenges.events.PlayerCountChangedEvent; +import de.fanta.challenges.guis.eventgui.TeamSelectGUI; +import de.fanta.challenges.teams.TeamUtils; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.commands.ArgsParser; import de.tr7zw.changeme.nbtapi.NBTCompoundList; @@ -20,15 +22,19 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.scoreboard.Team; import org.kitteh.vanish.event.VanishStatusChangeEvent; import org.spigotmc.event.player.PlayerSpawnLocationEvent; @@ -273,6 +279,36 @@ } } + + @EventHandler + public void onSwapItem(PlayerSwapHandItemsEvent e) { + Player p = e.getPlayer(); + if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selectiomItem().getType()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + if (e.getItemDrop().getItemStack().getType() == TeamUtils.selectiomItem().getType()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent e) { + if (e.getItem().getType() == TeamUtils.selectiomItem().getType()) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemClick(PlayerInteractEvent e) { + Player p = e.getPlayer(); + if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selectiomItem().getType()) { + TeamSelectGUI.openTeamSelectGui(p); + } + } /*@EventHandler public void move(PlayerMoveEvent e) { Player p = e.getPlayer(); diff --git a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java new file mode 100644 index 0000000..9e895f6 --- /dev/null +++ b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java @@ -0,0 +1,59 @@ +package de.fanta.challenges.teams; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.inventory.ItemStack; + +public class ChallengeTeam { + private String name; + + private ChatColor chatColor; + + private Location spawn; + + private ItemStack displayItem; + + private int score; + + public ChallengeTeam(String name, ChatColor chatColor, ItemStack displayItem) { + this.name = name; + this.chatColor = chatColor; + this.displayItem = displayItem; + } + + public String getName() { + return name; + } + + public ChatColor getChatColor() { + return chatColor; + } + + public Location getSpawn() { + return spawn; + } + + public int getScore() { + return score; + } + + public void setScore(int score) { + this.score = score; + } + + public void setName(String name) { + this.name = name; + } + + public void setChatColor(ChatColor chatColor) { + this.chatColor = chatColor; + } + + public void setSpawn(Location spawn) { + this.spawn = spawn; + } + + public ItemStack getDisplayItem() { + return displayItem; + } +} diff --git a/src/main/java/de/fanta/challenges/teams/TeamUtils.java b/src/main/java/de/fanta/challenges/teams/TeamUtils.java new file mode 100644 index 0000000..7cdab0d --- /dev/null +++ b/src/main/java/de/fanta/challenges/teams/TeamUtils.java @@ -0,0 +1,117 @@ +package de.fanta.challenges.teams; + +import de.fanta.challenges.guis.eventgui.TeamSelectGUI; +import de.fanta.challenges.utils.ChatUtil; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; + +public class TeamUtils { + + private static ChallengeTeam[] teams; + + private static int teamsize; + + private static int maxplayers; + + private static ChallengeTeam createDefaultTeam(int nr) { + if (nr == 0) { + return new ChallengeTeam("Schwarz", ChatColor.BLACK, createDisplayItem(Color.fromRGB(0,0,0), "Schwarz")); + } + if (nr == 1) { + return new ChallengeTeam("Dunkel-Blau", ChatColor.DARK_BLUE, createDisplayItem(Color.fromRGB(0,0,170), "Dunkel-Blau")); + } + if (nr == 2) { + return new ChallengeTeam("Dunkel-Grün", ChatColor.DARK_GREEN, createDisplayItem(Color.fromRGB(0,170,0), "Dunkel-Grün")); + } + if (nr == 3) { + return new ChallengeTeam("Türkis", ChatColor.DARK_AQUA, createDisplayItem(Color.fromRGB(0,170,170), "Türkis")); + } + if (nr == 4) { + return new ChallengeTeam("Dunkel-Rot", ChatColor.DARK_RED, createDisplayItem(Color.fromRGB(170,0,0), "Dunkel-Rot")); + } + if (nr == 5) { + return new ChallengeTeam("Lila", ChatColor.DARK_PURPLE, createDisplayItem(Color.fromRGB(170,170,0), "Lila")); + } + if (nr == 6) { + return new ChallengeTeam("Gold", ChatColor.GOLD, createDisplayItem(Color.fromRGB(255,170,0), "Gold")); + } + if (nr == 7) { + return new ChallengeTeam("Grau", ChatColor.GRAY, createDisplayItem(Color.fromRGB(170,170,170), "Grau")); + } + if (nr == 8) { + return new ChallengeTeam("Dunkel-Grau", ChatColor.DARK_GRAY, createDisplayItem(Color.fromRGB(85,85,85), "Dunkel-Grau")); + } + if (nr == 9) { + return new ChallengeTeam("Blau", ChatColor.BLUE, createDisplayItem(Color.fromRGB(85,85,255), "Blau")); + } + if (nr == 10) { + return new ChallengeTeam("Grün", ChatColor.GREEN, createDisplayItem(Color.fromRGB(85,255,85), "Grün")); + } + if (nr == 11) { + return new ChallengeTeam("Hell-Blau", ChatColor.AQUA, createDisplayItem(Color.fromRGB(85,255,255), "Hell-Blau")); + } + if (nr == 12) { + return new ChallengeTeam("Rot", ChatColor.RED, createDisplayItem(Color.fromRGB(255,85,85), "Rot")); + } + if (nr == 13) { + return new ChallengeTeam("Pink", ChatColor.LIGHT_PURPLE, createDisplayItem(Color.fromRGB(255,85,255), "Pink")); + } + if (nr == 14) { + return new ChallengeTeam("Gelb", ChatColor.YELLOW, createDisplayItem(Color.fromRGB(255,255,85), "Gelb")); + } + + return new ChallengeTeam("Team_" + nr, ChatColor.WHITE, createDisplayItem(Color.WHITE, "Team " + nr)); + } + + public static void setTeamCount(int teamcount) { + ChallengeTeam[] oldTeams = teams; + teams = new ChallengeTeam[teamcount]; + for (int i = 0; i < teamcount; i++) { + teams[i] = (oldTeams != null && oldTeams.length > i && oldTeams[i] != null) ? oldTeams[i] : createDefaultTeam(i); + } + TeamSelectGUI.buildTeamSelectInventory(); + } + + private static ItemStack createDisplayItem(Color color, String teamName) { + ItemStack displayItem = new ItemStack(Material.LEATHER_HELMET, 1); + LeatherArmorMeta meta = (LeatherArmorMeta) displayItem.getItemMeta(); + meta.setColor(color); + meta.setDisplayName(teamName); + displayItem.setItemMeta(meta); + return displayItem; + } + + + public static int getTeamSize() { + return teamsize; + } + + public static void setTeamSize(int size) { + teamsize = size; + } + + public static void setMaxplayers(int size) { + maxplayers = size; + } + + public static int getMaxplayers() { + return maxplayers; + } + + public static ChallengeTeam[] getTeams() { + return teams; + } + + public static ItemStack selectiomItem() { + ItemStack stack = new ItemStack(Material.LIME_BED); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(ChatUtil.GREEN + "Team Auswahl"); + stack.setItemMeta(meta); + + return stack; + } +}