diff --git a/src/main/java/com/loganmagnan/eventcore/managers/hotbar/types/StaffModeHotBar.java b/src/main/java/com/loganmagnan/eventcore/managers/hotbar/types/StaffModeHotBar.java index 457ca0a..55a51c3 100644 --- a/src/main/java/com/loganmagnan/eventcore/managers/hotbar/types/StaffModeHotBar.java +++ b/src/main/java/com/loganmagnan/eventcore/managers/hotbar/types/StaffModeHotBar.java @@ -3,6 +3,7 @@ package com.loganmagnan.eventcore.managers.hotbar.types; import com.loganmagnan.eventcore.EventCore; import com.loganmagnan.eventcore.managers.hotbar.ClickableItem; import com.loganmagnan.eventcore.managers.hotbar.HotBar; +import com.loganmagnan.eventcore.menusystem.menus.StaffOnlineMenu; import com.loganmagnan.eventcore.utils.ColorUtils; import com.loganmagnan.eventcore.utils.Constants; import com.loganmagnan.eventcore.utils.ItemBuilder; @@ -60,7 +61,7 @@ public class StaffModeHotBar extends HotBar { }, new ItemBuilder(Material.RED_CARPET).name(ColorUtils.getMessageType("&bBetter Looking")).build(), false, false, false)); this.addClickableItem("staff-online", new ClickableItem(player -> { - // To Do: Staff Online System + new StaffOnlineMenu(this.main.getPlayerMenuUtil(player)).open(player); }, new ItemBuilder(Material.PLAYER_HEAD).name(ColorUtils.getMessageType("&bStaff Online")).build(), false, false, false)); this.addClickableItem("vanish", new ClickableItem(player -> { diff --git a/src/main/java/com/loganmagnan/eventcore/menusystem/menus/StaffOnlineMenu.java b/src/main/java/com/loganmagnan/eventcore/menusystem/menus/StaffOnlineMenu.java new file mode 100644 index 0000000..7937835 --- /dev/null +++ b/src/main/java/com/loganmagnan/eventcore/menusystem/menus/StaffOnlineMenu.java @@ -0,0 +1,130 @@ +package com.loganmagnan.eventcore.menusystem.menus; + +import com.loganmagnan.eventcore.EventCore; +import com.loganmagnan.eventcore.menusystem.PaginatedMenu; +import com.loganmagnan.eventcore.menusystem.PlayerMenuUtil; +import com.loganmagnan.eventcore.utils.ColorUtils; +import com.loganmagnan.eventcore.utils.PlayerHeadUtils; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import java.util.ArrayList; +import java.util.List; + +public class StaffOnlineMenu extends PaginatedMenu { + + private EventCore main = EventCore.getInstance(); + + private List players = new ArrayList(); + + public StaffOnlineMenu(PlayerMenuUtil playerMenuUtil) { + super(playerMenuUtil); + + for (Player playerOnline : this.main.getServer().getOnlinePlayers()) { + if (!playerOnline.hasPermission("eventcore.command.staffmode")) { + continue; + } + + this.players.add(playerOnline); + } + } + + @Override + public String getMenuName() { + return ColorUtils.getMessageType("&bStaff Online"); + } + + @Override + public int getSlots() { + return 27; + } + + @Override + public void handleMenu(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + + if (event.getView().getTitle().equalsIgnoreCase(ColorUtils.getMessageType("&bStaff Online"))) { + ItemStack itemStack = event.getCurrentItem(); + + switch (ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName())) { + case "Previous Page": + if (this.page == 0) { + player.sendMessage(ColorUtils.getMessageType("&aYou're on the first page")); + } else { + this.page--; + this.open(player); + } + + break; + case "Close": + player.closeInventory(); + + break; + case "Next Page": + if (!((this.index++) >= this.players.size())) { + this.page++; + this.open(player); + } else { + player.sendMessage(ColorUtils.getMessageType("&aYou're on the last page")); + } + + break; + } + + String targetName = event.getCurrentItem().getItemMeta().getDisplayName(); + + Player target = this.main.getServer().getPlayer(ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName())); + + if (target == null) { + return; + } + + player.closeInventory(); + player.teleport(target); + player.sendMessage(ColorUtils.getMessageType("&aTeleported to &a&l" + target.getName())); + } + } + + @Override + public void setMenuItems(Player player) { + this.addMenuBorder(); + + if (this.players.isEmpty()) { + return; + } + + for (int i = 0; i < this.getMaxItemsPerPage(); i++) { + this.index = this.getMaxItemsPerPage() * this.page + i; + + if (this.index >= this.players.size()) { + break; + } + + if (this.players.get(this.index) == null) { + continue; + } + + Player playerOnline = this.players.get(this.index); + + if (playerOnline == null) { + continue; + } + + List lore = new ArrayList(); + lore.add(ColorUtils.getMessageType("&fStaff Mode: " + (this.main.getStaffManager().isPlayerInStaffMode(playerOnline) ? "&aEnabled" : "&4Disabled"))); + lore.add(ColorUtils.getMessageType("&fVanish: " + (this.main.getStaffManager().isPlayerVanished(playerOnline) ? "&aEnabled" : "&4Disabled"))); + lore.add(ColorUtils.getMessageType("")); + lore.add(ColorUtils.getMessageType("&bClick to teleport")); + + PlayerHeadUtils playerHeadUtils = new PlayerHeadUtils(); + playerHeadUtils.name(playerOnline.getDisplayName()); + playerHeadUtils.lore(lore); + playerHeadUtils.owner(playerOnline.getName()); + + ItemStack itemStack = playerHeadUtils.makeItemStack(); + + this.inventory.addItem(itemStack); + } + } +} diff --git a/src/main/java/com/loganmagnan/eventcore/utils/PlayerHeadUtils.java b/src/main/java/com/loganmagnan/eventcore/utils/PlayerHeadUtils.java new file mode 100644 index 0000000..95d2797 --- /dev/null +++ b/src/main/java/com/loganmagnan/eventcore/utils/PlayerHeadUtils.java @@ -0,0 +1,50 @@ +package com.loganmagnan.eventcore.utils; + +import java.util.List; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; + +public class PlayerHeadUtils { + + private Material material = Material.PLAYER_HEAD; + + private Short durability = Short.valueOf((short)3); + + private int amount = 1; + + private String name; + + private Object owner = "steve"; + + private List lore; + + public PlayerHeadUtils name(String name) { + this.name = name; + return this; + } + + public PlayerHeadUtils owner(Object owner) { + this.owner = owner; + return this; + } + + public PlayerHeadUtils lore(List lore) { + this.lore = lore; + return this; + } + + public ItemStack makeItemStack() { + ItemStack itemStack = new ItemStack(Material.PLAYER_HEAD); + SkullMeta meta = (SkullMeta)itemStack.getItemMeta(); + itemStack.setAmount(1); + itemStack.setDurability((short)3); + if (this.name != null) + meta.setDisplayName(ColorUtils.getMessageType("&r" + this.name)); + if (this.lore != null && this.lore.size() > 0) + meta.setLore(ColorUtils.getMessageType(this.lore)); + meta.setOwner((String)this.owner); + itemStack.setItemMeta(meta); + return itemStack; + } +}