diff --git a/src/main/java/de/j/stationofdoom/main/Main.java b/src/main/java/de/j/stationofdoom/main/Main.java index c3f3fa2..919ac0f 100755 --- a/src/main/java/de/j/stationofdoom/main/Main.java +++ b/src/main/java/de/j/stationofdoom/main/Main.java @@ -12,6 +12,7 @@ import de.j.stationofdoom.enchants.FurnaceEvents; import de.j.stationofdoom.enchants.TelepathyEvents; import de.j.stationofdoom.listener.*; +import de.j.stationofdoom.teams.TeamInventoryReload; import de.j.stationofdoom.teams.TeamSettingsCMD; import de.j.stationofdoom.teams.TeamSettingsInventoryListener; import de.j.stationofdoom.util.EntityManager; @@ -116,6 +117,7 @@ public void onEnable() { pluginManager.registerEvents(new LeaveListener(), this); pluginManager.registerEvents(new AnvilListener(), this); pluginManager.registerEvents(new TeamSettingsInventoryListener(), this); + pluginManager.registerEvents(new TeamInventoryReload(), this); //CustomEnchants.register(); -> see custom enchants class for more info diff --git a/src/main/java/de/j/stationofdoom/teams/Team.java b/src/main/java/de/j/stationofdoom/teams/Team.java index 57719b8..0f4416a 100644 --- a/src/main/java/de/j/stationofdoom/teams/Team.java +++ b/src/main/java/de/j/stationofdoom/teams/Team.java @@ -4,6 +4,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; @@ -23,6 +24,12 @@ public class Team { private HashMap members = new HashMap<>(); private UUID uuid; + public boolean isDeleted() { + return deleted; + } + + private volatile boolean deleted = false; + public Team(Player player) { uuid = UUID.randomUUID(); name = player.getName() + "'s Team"; @@ -162,6 +169,7 @@ public void remove() { } this.members.clear(); TeamsMainMenuGUI.teams.remove(this); + this.deleted = true; Main.getMainLogger().info("Removed team " + this.name); } diff --git a/src/main/java/de/j/stationofdoom/teams/TeamInventoryReload.java b/src/main/java/de/j/stationofdoom/teams/TeamInventoryReload.java new file mode 100644 index 0000000..a755499 --- /dev/null +++ b/src/main/java/de/j/stationofdoom/teams/TeamInventoryReload.java @@ -0,0 +1,45 @@ +package de.j.stationofdoom.teams; + +import de.j.deathMinigames.settings.GUI; +import de.j.stationofdoom.main.Main; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.scheduler.BukkitRunnable; + +public class TeamInventoryReload implements Listener { + private static final int secondsBetweenReloads = 1; + + @EventHandler + public void onInventoryOpen(InventoryOpenEvent event) { + if(event.getInventory().getHolder() instanceof TeamsMainMenuGUI || event.getInventory().getHolder() instanceof TeamSettingsGUI) { + GUI gui = (GUI) event.getInventory().getHolder(); + Player viewer = (Player) event.getPlayer(); + Inventory inv = event.getInventory(); + startTimer(inv, gui, viewer); + } + } + + private void startTimer(Inventory inv, GUI gui, Player viewer) { + new BukkitRunnable() { + @Override + public void run() { + if(!inv.getViewers().contains(viewer)) { + cancel(); + } + else { + int currentPage = inv.getItem(53).getAmount() - 1; + if(gui instanceof TeamsMainMenuGUI teamsMainMenuGUI) { + teamsMainMenuGUI.showPage(currentPage, viewer); + } + else if(gui instanceof TeamSettingsGUI teamSettingsGUI) { + teamSettingsGUI.showPage(currentPage, viewer); + } + cancel(); + } + } + }.runTaskTimer(Main.getPlugin(), 10, secondsBetweenReloads * 20); + } +} \ No newline at end of file diff --git a/src/main/java/de/j/stationofdoom/teams/TeamPlayerSettingsGUI.java b/src/main/java/de/j/stationofdoom/teams/TeamPlayerSettingsGUI.java index 058fa1b..9a7406e 100644 --- a/src/main/java/de/j/stationofdoom/teams/TeamPlayerSettingsGUI.java +++ b/src/main/java/de/j/stationofdoom/teams/TeamPlayerSettingsGUI.java @@ -2,6 +2,7 @@ import de.j.deathMinigames.settings.GUI; import de.j.stationofdoom.util.translations.TranslationFactory; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -12,11 +13,15 @@ public class TeamPlayerSettingsGUI extends GUI { private volatile Player player; private volatile Team team; - public TeamPlayerSettingsGUI() { - super("Team player settings", false, false, 2 * 9); + public TeamPlayerSettingsGUI() {} + + public void showInventory(Player playerToShowTheInvTo, Player playerBasedOnSlot) { + fillInv(playerBasedOnSlot); + playerToShowTheInvTo.openInventory(inventory); } private void fillInv(Player player) { + this.inventory = Bukkit.createInventory(this.inventory.getHolder(), 18, player.getName()); this.player = player; this.team = TeamsMainMenuGUI.getTeam(player); boolean isOperator = team.getTeamOperators().contains(player); @@ -40,11 +45,6 @@ private void fillInv(Player player) { addClickableItemStack(tf.getTranslation(player, "backButton"), Material.RED_CONCRETE, 1, 17); } - public void showInventory(Player playerToShowTheInvTo, Player playerBasedOnSlot) { - fillInv(playerBasedOnSlot); - playerToShowTheInvTo.openInventory(inventory); - } - public Player getPlayer() { return player; } diff --git a/src/main/java/de/j/stationofdoom/teams/TeamSettingsGUI.java b/src/main/java/de/j/stationofdoom/teams/TeamSettingsGUI.java index 6b025dc..1f0e36f 100644 --- a/src/main/java/de/j/stationofdoom/teams/TeamSettingsGUI.java +++ b/src/main/java/de/j/stationofdoom/teams/TeamSettingsGUI.java @@ -5,6 +5,8 @@ import de.j.deathMinigames.settings.MainMenu; import de.j.stationofdoom.main.Main; import de.j.stationofdoom.util.translations.TranslationFactory; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -33,6 +35,12 @@ public TeamSettingsGUI(Team team) { public void showPage(int page, Player playerToShowTheInvTo) { this.inventory = null; this.inventory = Bukkit.createInventory(this, inventorySize, team.getName() +" - " + tf.getTranslation(playerToShowTheInvTo, "page") + " " + page ); + if(this.team.isDeleted()) { + Main.getMainLogger().info("Team is deleted and therefore not opened"); + playerToShowTheInvTo.sendMessage(Component.text(tf.getTranslation(playerToShowTheInvTo, "teamDeleted", team.getName())).color(NamedTextColor.RED)); + new TeamsMainMenuGUI().showPage(1, playerToShowTheInvTo); + return; + } members = team.getAllPlayers(); if(members.isEmpty()) { Main.getMainLogger().info("No players were found!"); diff --git a/src/main/java/de/j/stationofdoom/teams/TeamsMainMenuGUI.java b/src/main/java/de/j/stationofdoom/teams/TeamsMainMenuGUI.java index 5c33093..4b02b0e 100644 --- a/src/main/java/de/j/stationofdoom/teams/TeamsMainMenuGUI.java +++ b/src/main/java/de/j/stationofdoom/teams/TeamsMainMenuGUI.java @@ -6,7 +6,6 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashMap; @@ -25,7 +24,13 @@ public TeamsMainMenuGUI() {} public static Team getTeam(Player player) { for(Team team : TeamsMainMenuGUI.teams) { + Main.getMainLogger().info(team.getName()); + for (Player player1 : team.getAllPlayers()) { + Main.getMainLogger().info(player1.getName()); + } + if(team.isDeleted()) continue; if(team.getAllPlayers().contains(player)) { + Main.getMainLogger().info("Found team " + team.getName()); return team; } } diff --git a/src/main/resources/translations.json b/src/main/resources/translations.json index 98d0249..c8e42a9 100755 --- a/src/main/resources/translations.json +++ b/src/main/resources/translations.json @@ -103,7 +103,8 @@ "teamPlayerSettingsDemoteToMember": "Zu Mitglied herunterstufen", "teamPlayerSettingsPromoteToOperator": "Zu Operator hochstufen", "teamPlayerSettingsKickPlayer": "Spieler kicken", - "kickedFromTeam": "Du wurdest von %s vom Team gekickt" + "kickedFromTeam": "Du wurdest von %s vom Team gekickt", + "teamDeleted": "Das Team, %s, ist gelöscht und du kannst es nicht mehr öffnen" } ], "en-US": [ @@ -210,7 +211,8 @@ "teamPlayerSettingsDemoteToMember": "Demote to member", "teamPlayerSettingsPromoteToOperator": "Promote to operator", "teamPlayerSettingsKickPlayer": "Kick player", - "kickedFromTeam": "You got kicked from the team by %s" + "kickedFromTeam": "You got kicked from the team by %s", + "teamDeleted": "The team, %s, is deleted and you can not open it anymore" } ] } \ No newline at end of file