diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2022-04-28 16:02:01 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-28 16:02:01 -0400 |
commit | 52d6f450ed17acb656a1540e6a29c0ef66ce73cc (patch) | |
tree | e9d5e253fa5fadd5a9657efffe6e7329077d73d1 /src/main/java/net/tylermurphy/hideAndSeek/game | |
parent | 1.4.1 Hotfix (diff) | |
parent | change lobby start item to start permission from op (diff) | |
download | kenshinshideandseek-52d6f450ed17acb656a1540e6a29c0ef66ce73cc.tar.gz kenshinshideandseek-52d6f450ed17acb656a1540e6a29c0ef66ce73cc.tar.bz2 kenshinshideandseek-52d6f450ed17acb656a1540e6a29c0ef66ce73cc.zip |
Merge pull request #25 from tylermurphy534/1.4.2
1.4.2
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/game')
3 files changed, 152 insertions, 68 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java index e91e3da..5608e88 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Board.java @@ -34,28 +34,28 @@ import org.bukkit.scoreboard.*; public class Board { - private static final List<UUID> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>(); - private static final Map<UUID, Player> playerList = new HashMap<>(); - private static final Map<UUID, CustomBoard> customBoards = new HashMap<>(); + private static final List<String> Hider = new ArrayList<>(), Seeker = new ArrayList<>(), Spectator = new ArrayList<>(); + private static final Map<String, Player> playerList = new HashMap<>(); + private static final Map<String, CustomBoard> customBoards = new HashMap<>(); public static boolean isPlayer(Player player) { - return playerList.containsKey(player.getUniqueId()); + return playerList.containsKey(player.getUniqueId().toString()); } public static boolean isPlayer(CommandSender sender) { - return playerList.containsKey(Bukkit.getPlayer(sender.getName()).getUniqueId()); + return playerList.containsKey(Bukkit.getPlayer(sender.getName()).getUniqueId().toString()); } public static boolean isHider(Player player) { - return Hider.contains(player.getUniqueId()); + return Hider.contains(player.getUniqueId().toString()); } public static boolean isSeeker(Player player) { - return Seeker.contains(player.getUniqueId()); + return Seeker.contains(player.getUniqueId().toString()); } public static boolean isSpectator(Player player) { - return Spectator.contains(player.getUniqueId()); + return Spectator.contains(player.getUniqueId().toString()); } public static int sizeHider() { @@ -70,13 +70,6 @@ public class Board { return playerList.values().size(); } - public static void check(){ - for(UUID uuid : playerList.keySet()){ - if(Bukkit.getPlayer(uuid) == null) - playerList.remove(uuid); - } - } - public static List<Player> getHiders(){ return Hider.stream().map(playerList::get).collect(Collectors.toList()); } @@ -98,41 +91,41 @@ public class Board { } public static Player getPlayer(UUID uuid) { - return playerList.get(uuid); + return playerList.get(uuid.toString()); } public static void addHider(Player player) { - Hider.add(player.getUniqueId()); - Seeker.remove(player.getUniqueId()); - Spectator.remove(player.getUniqueId()); - playerList.put(player.getUniqueId(), player); + Hider.add(player.getUniqueId().toString()); + Seeker.remove(player.getUniqueId().toString()); + Spectator.remove(player.getUniqueId().toString()); + playerList.put(player.getUniqueId().toString(), player); } public static void addSeeker(Player player) { - Hider.remove(player.getUniqueId()); - Seeker.add(player.getUniqueId()); - Spectator.remove(player.getUniqueId()); - playerList.put(player.getUniqueId(), player); + Hider.remove(player.getUniqueId().toString()); + Seeker.add(player.getUniqueId().toString()); + Spectator.remove(player.getUniqueId().toString()); + playerList.put(player.getUniqueId().toString(), player); } public static void addSpectator(Player player) { - Hider.remove(player.getUniqueId()); - Seeker.remove(player.getUniqueId()); - Spectator.add(player.getUniqueId()); - playerList.put(player.getUniqueId(), player); + Hider.remove(player.getUniqueId().toString()); + Seeker.remove(player.getUniqueId().toString()); + Spectator.add(player.getUniqueId().toString()); + playerList.put(player.getUniqueId().toString(), player); } public static void remove(Player player) { - Hider.remove(player.getUniqueId()); - Seeker.remove(player.getUniqueId()); - Spectator.remove(player.getUniqueId()); - playerList.remove(player.getUniqueId()); + Hider.remove(player.getUniqueId().toString()); + Seeker.remove(player.getUniqueId().toString()); + Spectator.remove(player.getUniqueId().toString()); + playerList.remove(player.getUniqueId().toString()); } public static boolean onSameTeam(Player player1, Player player2) { - if(Hider.contains(player1.getUniqueId()) && Hider.contains(player2.getUniqueId())) return true; - else if(Seeker.contains(player1.getUniqueId()) && Seeker.contains(player2.getUniqueId())) return true; - else return Spectator.contains(player1.getUniqueId()) && Spectator.contains(player2.getUniqueId()); + if(Hider.contains(player1.getUniqueId().toString()) && Hider.contains(player2.getUniqueId().toString())) return true; + else if(Seeker.contains(player1.getUniqueId().toString()) && Seeker.contains(player2.getUniqueId().toString())) return true; + else return Spectator.contains(player1.getUniqueId().toString()) && Spectator.contains(player2.getUniqueId().toString()); } public static void reload() { @@ -146,7 +139,7 @@ public class Board { } private static void createLobbyBoard(Player player, boolean recreate) { - CustomBoard board = customBoards.get(player.getUniqueId()); + CustomBoard board = customBoards.get(player.getUniqueId().toString()); if(recreate) { board = new CustomBoard(player, "&l&eHIDE AND SEEK"); board.updateTeams(); @@ -175,7 +168,7 @@ public class Board { i++; } board.display(); - customBoards.put(player.getUniqueId(), board); + customBoards.put(player.getUniqueId().toString(), board); } public static void createGameBoard(Player player){ @@ -183,7 +176,7 @@ public class Board { } private static void createGameBoard(Player player, boolean recreate){ - CustomBoard board = customBoards.get(player.getUniqueId()); + CustomBoard board = customBoards.get(player.getUniqueId().toString()); if(recreate) { board = new CustomBoard(player, GAME_TITLE); board.updateTeams(); @@ -238,14 +231,14 @@ public class Board { i++; } board.display(); - customBoards.put(player.getUniqueId(), board); + customBoards.put(player.getUniqueId().toString(), board); } public static void removeBoard(Player player) { ScoreboardManager manager = Bukkit.getScoreboardManager(); assert manager != null; player.setScoreboard(manager.getMainScoreboard()); - customBoards.remove(player.getUniqueId()); + customBoards.remove(player.getUniqueId().toString()); } public static void reloadLobbyBoards() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java index a8418e2..668a446 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/EventListener.java @@ -39,8 +39,11 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.entity.*; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.*; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.projectiles.ProjectileSource; @@ -277,10 +280,58 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerInteract(PlayerInteractEvent event) { - if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { - if(Board.isPlayer(event.getPlayer()) && blockedInteracts.contains(event.getClickedBlock().getType().name())){ + if(!Board.isPlayer(event.getPlayer())) return; + + if(event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock() != null && blockedInteracts.contains(event.getClickedBlock().getType().name())){ + event.setCancelled(true); + return; + } + + if(Game.status != Status.STANDBY) return; + + + ItemStack temp = event.getItem(); + if(temp == null) return; + + if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyLeaveItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyLeaveItem.getType()) { + event.setCancelled(true); + Game.leave(event.getPlayer()); + } + + if (temp.getItemMeta().getDisplayName().equalsIgnoreCase(lobbyStartItem.getItemMeta().getDisplayName()) && temp.getType() == lobbyStartItem.getType() && event.getPlayer().hasPermission("hideandseek.start")) { + event.setCancelled(true); + if (Game.isNotSetup()) { + event.getPlayer().sendMessage(errorPrefix + message("GAME_SETUP")); + return; + } + if (Game.status != Status.STANDBY) { + event.getPlayer().sendMessage(errorPrefix + message("GAME_INPROGRESS")); + return; + } + if (Board.size() < minPlayers) { + event.getPlayer().sendMessage(errorPrefix + message("START_MIN_PLAYERS").addAmount(minPlayers)); + return; + } + Game.start(); + } + + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onInventoryClick(InventoryClickEvent event) { + if(event.getWhoClicked() instanceof Player){ + Player player = (Player) event.getWhoClicked(); + if(Board.isPlayer(player) && Game.status == Status.STANDBY){ event.setCancelled(true); } } } + + @EventHandler(priority = EventPriority.HIGHEST) + public void onItemDrop(PlayerDropItemEvent event) + { + if(Board.isPlayer(event.getPlayer()) && Game.status == Status.STANDBY){ + event.setCancelled(true); + } + } }
\ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java index 41b0bc8..6a6ccaa 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java @@ -24,6 +24,8 @@ import static net.tylermurphy.hideAndSeek.configuration.Config.*; import com.cryptomorin.xseries.XMaterial; import com.cryptomorin.xseries.XSound; import com.cryptomorin.xseries.messages.Titles; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; import net.md_5.bungee.api.ChatColor; import net.tylermurphy.hideAndSeek.configuration.Items; import net.tylermurphy.hideAndSeek.database.Database; @@ -70,6 +72,26 @@ public class Game { worldLoader = new WorldLoader(spawnWorld); } + public static void start(){ + Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst(); + if(!rand.isPresent()){ + Main.plugin.getLogger().warning("Failed to select random seeker."); + return; + } + String seekerName = rand.get().getName(); + Player temp = Bukkit.getPlayer(seekerName); + if(temp == null){ + Main.plugin.getLogger().warning("Failed to select random seeker."); + return; + } + Player seeker = Board.getPlayer(temp.getUniqueId()); + if(seeker == null){ + Main.plugin.getLogger().warning("Failed to select random seeker."); + return; + } + start(seeker); + } + public static void start(Player seeker){ if(status == Status.STARTING || status == Status.PLAYING) return; if(worldLoader.getWorld() != null) { @@ -153,6 +175,10 @@ public class Game { player.setGameMode(GameMode.ADVENTURE); Board.addHider(player); player.getInventory().clear(); + if(lobbyStartItem != null && (!lobbyItemStartAdmin || player.isOp())) + player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem); + if(lobbyLeaveItem != null) + player.getInventory().setItem(lobbyItemLeavePosition, lobbyLeaveItem); player.teleport(new Location(Bukkit.getWorld(lobbyWorld), lobbyPosition.getX(),lobbyPosition.getY(),lobbyPosition.getZ())); for(PotionEffect effect : player.getActivePotionEffects()){ player.removePotionEffect(effect.getType()); @@ -187,6 +213,7 @@ public class Game { } public static void resetWorldborder(String worldName){ + worldBorder = new Border(); worldBorder.resetWorldborder(worldName); } @@ -233,6 +260,10 @@ public class Game { public static void join(Player player){ if(Game.status == Status.STANDBY) { player.getInventory().clear(); + if(lobbyStartItem != null && (!lobbyItemStartAdmin || player.hasPermission("hideandseek.start"))) + player.getInventory().setItem(lobbyItemStartPosition, lobbyStartItem); + if(lobbyLeaveItem != null) + player.getInventory().setItem(lobbyItemLeavePosition, lobbyLeaveItem); Board.addHider(player); if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player)); else Game.broadcastMessage(messagePrefix + message("GAME_JOIN").addPlayer(player)); @@ -258,6 +289,28 @@ public class Game { } } + public static void leave(Player player){ + if(announceMessagesToNonPlayers) Bukkit.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player)); + else Game.broadcastMessage(messagePrefix + message("GAME_LEAVE").addPlayer(player)); + Board.removeBoard(player); + Board.remove(player); + player.getInventory().clear(); + if(Game.status == Status.STANDBY) { + Board.reloadLobbyBoards(); + } else { + Board.reloadGameBoards(); + Board.reloadBoardTeams(); + } + if(bungeeLeave) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Connect"); + out.writeUTF(leaveServer); + player.sendPluginMessage(Main.plugin, "BungeeCord", out.toByteArray()); + } else { + player.teleport(new Location(Bukkit.getWorld(exitWorld), exitPosition.getX(), exitPosition.getY(), exitPosition.getZ())); + } + } + public static void removeItems(Player player){ for(ItemStack si : Items.SEEKER_ITEMS) for(ItemStack i : player.getInventory().getContents()) @@ -279,23 +332,7 @@ public class Game { Board.reloadLobbyBoards(); } if(countdownTime == 0){ - Optional<Player> rand = Board.getPlayers().stream().skip(new Random().nextInt(Board.size())).findFirst(); - if(!rand.isPresent()){ - Main.plugin.getLogger().warning("Failed to select random seeker."); - return; - } - String seekerName = rand.get().getName(); - Player temp = Bukkit.getPlayer(seekerName); - if(temp == null){ - Main.plugin.getLogger().warning("Failed to select random seeker."); - return; - } - Player seeker = Board.getPlayer(temp.getUniqueId()); - if(seeker == null){ - Main.plugin.getLogger().warning("Failed to select random seeker."); - return; - } - start(seeker); + start(); } } else { countdownTime = -1; @@ -527,16 +564,19 @@ class Border { } private void decreaceWorldborder() { - if(currentWorldborderSize-100 > 100) { - running = true; - broadcastMessage(worldborderPrefix + message("WORLDBORDER_DECREASING")); - currentWorldborderSize -= 100; - World world = Bukkit.getWorld("hideandseek_"+spawnWorld); - assert world != null; - org.bukkit.WorldBorder border = world.getWorldBorder(); - border.setSize(border.getSize()-100,30); - delay = 30; + if(currentWorldborderSize == 100) return; + int change = worldborderChange; + if(currentWorldborderSize-worldborderChange < 100){ + change = currentWorldborderSize-100; } + running = true; + broadcastMessage(worldborderPrefix + message("WORLDBORDER_DECREASING").addAmount(change)); + currentWorldborderSize -= worldborderChange; + World world = Bukkit.getWorld("hideandseek_"+spawnWorld); + assert world != null; + org.bukkit.WorldBorder border = world.getWorldBorder(); + border.setSize(border.getSize()-change,30); + delay = 30; } public void resetWorldborder(String worldName) { |