summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/game')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/Game.java6
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java22
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java85
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java33
4 files changed, 128 insertions, 18 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
index e8b39d1..5213c87 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/Game.java
@@ -58,6 +58,8 @@ public class Game {
private int gameTimer;
private boolean hiderLeft;
+ private Random random;
+
public Game(Map map, Board board) {
this.currentMap = map;
@@ -74,6 +76,8 @@ public class Game {
this.startingTimer = -1;
this.gameTimer = 0;
this.hiderLeft = false;
+
+ this.random = new Random();
}
public Status getStatus(){
@@ -101,7 +105,7 @@ public class Game {
List<Player> pool = board.getPlayers();
for (int i = 0; i < startingSeekerCount; i++) {
try {
- int rand = new Random().nextInt(0, pool.size()-1);
+ int rand = random.nextInt(0, pool.size());
seekers.add(pool.remove(rand));
} catch (Exception e){
Main.getInstance().getLogger().warning("Failed to select random seeker.");
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
index e424024..9c2dd37 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/PlayerLoader.java
@@ -82,15 +82,33 @@ public class PlayerLoader {
if(board.isSpectator(player)) return;
loadPlayer(player);
if (board.isSeeker(player)) {
- if (pvpEnabled)
+ if (pvpEnabled) {
for(ItemStack item : Items.SEEKER_ITEMS)
player.getInventory().addItem(item);
+ if (Items.SEEKER_HELM != null)
+ player.getInventory().setHelmet(Items.SEEKER_HELM);
+ if (Items.SEEKER_CHEST != null)
+ player.getInventory().setChestplate(Items.SEEKER_CHEST);
+ if (Items.SEEKER_LEGS != null)
+ player.getInventory().setLeggings(Items.SEEKER_LEGS);
+ if (Items.SEEKER_BOOTS != null)
+ player.getInventory().setBoots(Items.SEEKER_BOOTS);
+ }
for(PotionEffect effect : Items.SEEKER_EFFECTS)
player.addPotionEffect(effect);
} else if (board.isHider(player)) {
- if (pvpEnabled)
+ if (pvpEnabled) {
for(ItemStack item : Items.HIDER_ITEMS)
player.getInventory().addItem(item);
+ if (Items.HIDER_HELM != null)
+ player.getInventory().setHelmet(Items.HIDER_HELM);
+ if (Items.HIDER_CHEST != null)
+ player.getInventory().setChestplate(Items.HIDER_CHEST);
+ if (Items.HIDER_LEGS != null)
+ player.getInventory().setLeggings(Items.HIDER_LEGS);
+ if (Items.HIDER_BOOTS != null)
+ player.getInventory().setBoots(Items.HIDER_BOOTS);
+ }
for(PotionEffect effect : Items.HIDER_EFFECTS)
player.addPotionEffect(effect);
if (glowEnabled) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
index 0326391..95577ee 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InteractHandler.java
@@ -3,8 +3,10 @@ package net.tylermurphy.hideAndSeek.game.listener;
import com.cryptomorin.xseries.XMaterial;
import com.cryptomorin.xseries.messages.ActionBar;
import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.game.Board;
import net.tylermurphy.hideAndSeek.game.util.Status;
import org.bukkit.ChatColor;
+import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -13,6 +15,8 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.BookMeta;
+import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import java.util.ArrayList;
@@ -94,17 +98,82 @@ public class InteractHandler implements Listener {
return;
}
if(temp.isSimilar(teleportItem)){
- int amount = Main.getInstance().getBoard().getHiders().size() + Main.getInstance().getBoard().getSeekers().size();
- Inventory teleportMenu = Main.getInstance().getServer().createInventory(null, 9*(((amount-1)/9)+1), ChatColor.stripColor(teleportItem.getItemMeta().getDisplayName()));
- List<String> hider_lore = new ArrayList<>(); hider_lore.add(message("HIDER_TEAM_NAME").toString());
- Main.getInstance().getBoard().getHiders().forEach(hider -> teleportMenu.addItem(getSkull(hider, hider_lore)));
- List<String> seeker_lore = new ArrayList<>(); seeker_lore.add(message("SEEKER_TEAM_NAME").toString());
- Main.getInstance().getBoard().getSeekers().forEach(seeker -> teleportMenu.addItem(getSkull(seeker, seeker_lore)));
- event.getPlayer().openInventory(teleportMenu);
+ // int amount = Main.getInstance().getBoard().getHiders().size() + Main.getInstance().getBoard().getSeekers().size();
+ // Inventory teleportMenu = Main.getInstance().getServer().createInventory(null, 9*(((amount-1)/9)+1), ChatColor.stripColor(teleportItem.getItemMeta().getDisplayName()));
+ // List<String> hider_lore = new ArrayList<>(); hider_lore.add(message("HIDER_TEAM_NAME").toString());
+ // Main.getInstance().getBoard().getHiders().forEach(hider -> teleportMenu.addItem(getSkull(hider, hider_lore)));
+ // List<String> seeker_lore = new ArrayList<>(); seeker_lore.add(message("SEEKER_TEAM_NAME").toString());
+ // Main.getInstance().getBoard().getSeekers().forEach(seeker -> teleportMenu.addItem(getSkull(seeker, seeker_lore)));
+ // event.getPlayer().openInventory(teleportMenu);
+ createSpectatorTeleportPage(event.getPlayer(), 0);
}
}
- private ItemStack getSkull(Player player, List<String> lore){
+ public static void createSpectatorTeleportPage(Player player, int page) {
+
+ if (page < 0) {
+ return;
+ }
+
+ final Board board = Main.getInstance().getBoard();
+ List<Player> players = new ArrayList<>();
+ players.addAll(board.getHiders());
+ players.addAll(board.getSeekers());
+
+ final int page_size = 9 * 5;
+ final int amount = players.size();
+ final int start = page * page_size;
+
+ int page_amount = amount - start;
+
+ if (page_amount < 1) {
+ return;
+ }
+
+ boolean next = false, prev = true;
+
+ if (page_amount > page_size) {
+ page_amount = page_size;
+ next = true;
+ }
+
+ if (page == 0) {
+ prev = false;
+ }
+
+ final int rows = ((amount - 1) / 9) + 2;
+
+ final Inventory teleportMenu = Main.getInstance().getServer().createInventory(null, 9 * rows, ChatColor.stripColor(teleportItem.getItemMeta().getDisplayName()));
+
+ final List<String> hider_lore = new ArrayList<>(); hider_lore.add(message("HIDER_TEAM_NAME").toString());
+ final List<String> seeker_lore = new ArrayList<>(); seeker_lore.add(message("SEEKER_TEAM_NAME").toString());
+
+ for (int i = 0; i < page_amount; i++) {
+ Player plr = players.get(i);
+ teleportMenu.addItem(getSkull(plr, board.isHider(plr) ? hider_lore : seeker_lore));
+ }
+
+ final int lastRow = (rows - 1) * 9;
+ if (prev) {
+ teleportMenu.setItem(lastRow, getPageItem(page - 1));
+ }
+
+ if (next) {
+ teleportMenu.setItem(lastRow + 8, getPageItem(page + 1));
+ }
+
+ player.openInventory(teleportMenu);
+ }
+
+ private static ItemStack getPageItem(int page) {
+ ItemStack prevItem = new ItemStack(XMaterial.ENCHANTED_BOOK.parseMaterial(), page + 1);
+ ItemMeta meta = prevItem.getItemMeta();
+ meta.setDisplayName("Page " + (page+1));
+ prevItem.setItemMeta(meta);
+ return prevItem;
+ }
+
+ private static ItemStack getSkull(Player player, List<String> lore){
assert XMaterial.PLAYER_HEAD.parseMaterial() != null;
ItemStack playerHead = new ItemStack(XMaterial.PLAYER_HEAD.parseMaterial(), 1, (byte) 3);
SkullMeta playerHeadMeta = (SkullMeta) playerHead.getItemMeta();
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java
index 0f306b1..dd30e60 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/game/listener/InventoryHandler.java
@@ -32,6 +32,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
public class InventoryHandler implements Listener {
@@ -52,13 +54,30 @@ public class InventoryHandler implements Listener {
private void checkForSpectatorTeleportMenu(InventoryClickEvent event){
Player player = (Player) event.getWhoClicked();
- if (Main.getInstance().getBoard().isSpectator(player) && event.getCurrentItem().getType() == XMaterial.PLAYER_HEAD.parseMaterial()) {
- event.setCancelled(true);
- player.closeInventory();
- String name = event.getCurrentItem().getItemMeta().getDisplayName();
- Player clicked = Main.getInstance().getServer().getPlayer(name);
- if(clicked == null) return;
- player.teleport(clicked);
+
+ ItemStack item = event.getCurrentItem();
+ ItemMeta meta = item.getItemMeta();
+ String name = meta.getDisplayName();
+
+ if (Main.getInstance().getBoard().isSpectator(player)) {
+ if (XMaterial.PLAYER_HEAD.isSimilar(item)) {
+ event.setCancelled(true);
+ player.closeInventory();
+ Player clicked = Main.getInstance().getServer().getPlayer(name);
+ if (clicked == null) return;
+ player.teleport(clicked);
+ } else if (XMaterial.ENCHANTED_BOOK.isSimilar(item)) {
+ event.setCancelled(true);
+ player.closeInventory();
+ if (!name.startsWith("Page ")) return;
+ String number_str = name.substring(5);
+ try {
+ int page = Integer.parseInt(number_str);
+ InteractHandler.createSpectatorTeleportPage(player, page - 1);
+ } catch(Exception ignored) {
+ return;
+ }
+ }
}
}