From db103b9e353a82294ecafdbe8ae218b9969d93a5 Mon Sep 17 00:00:00 2001 From: tianyu <32282861@qq.com> Date: Wed, 7 Aug 2024 11:29:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 + .../Listener/LandInviteGui.java | 59 +++++++++ .../AskyBlockWarps/Listener/LandTeamGui.java | 45 +++++++ .../AskyBlockWarps/Listener/MainGui.java | 80 ++++++++++-- .../AskyBlockWarps/Listener/WarpGui.java | 17 ++- .../java/me/Demon/AskyBlockWarps/Main.java | 5 +- .../Demon/AskyBlockWarps/Util/itemUtil.java | 123 +++++++++++++++++- 7 files changed, 316 insertions(+), 18 deletions(-) create mode 100644 src/main/java/me/Demon/AskyBlockWarps/Listener/LandInviteGui.java create mode 100644 src/main/java/me/Demon/AskyBlockWarps/Listener/LandTeamGui.java diff --git a/pom.xml b/pom.xml index a473000..1f56ed3 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,11 @@ DemonAPI 1.2.0 + + cn.hamster3.cdapi + CDTimeAPI + 1.0 + \ No newline at end of file diff --git a/src/main/java/me/Demon/AskyBlockWarps/Listener/LandInviteGui.java b/src/main/java/me/Demon/AskyBlockWarps/Listener/LandInviteGui.java new file mode 100644 index 0000000..9489f8c --- /dev/null +++ b/src/main/java/me/Demon/AskyBlockWarps/Listener/LandInviteGui.java @@ -0,0 +1,59 @@ +package me.Demon.AskyBlockWarps.Listener; + +import com.wasteofplastic.askyblock.ASkyBlockAPI; +import me.Demon.AskyBlockWarps.Main; +import me.Demon.AskyBlockWarps.Util.itemUtil; +import me.Demon.DemonPlugin.DemonAPI; +import org.bukkit.Bukkit; +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 java.util.ArrayList; +import java.util.List; + +public class LandInviteGui implements Listener { + public static String invtitle = "帝国战争 - 成员邀请"; + + @EventHandler + public void onclick(InventoryClickEvent e) { + Player p = (Player) e.getWhoClicked(); + if (e.getInventory() != null && e.getInventory().getTitle().contains(invtitle)) { + e.setCancelled(true); + ItemStack item = e.getCurrentItem(); + if (e.getRawSlot() >= 0 && e.getRawSlot() < e.getInventory().getSize() && !DemonAPI.itemIsNull(item) && !DemonAPI.itemIsLore(item)) { + if (ASkyBlockAPI.getInstance().getOwner(p.getLocation()).equals(p.getUniqueId())) { + String playName = item.getItemMeta().getDisplayName().replace("§6§l玩家 §e", ""); + p.performCommand("is invite " + playName); + } else { + p.sendMessage(Main.prefix + "您不是岛主,没权限邀请玩家加入岛屿."); + p.closeInventory(); + } + } + } + } + + public static void Opengui(Player p) { + Inventory inv = Bukkit.createInventory(null, 54, invtitle); + // 获取玩家附近20格内的所有玩家 + List nearbyPlayers = new ArrayList<>(); + for (Player nearbyPlayer : Bukkit.getServer().getOnlinePlayers()) { + if (p.getWorld().equals(nearbyPlayer.getWorld())) { // 确保玩家在同一世界 + if (p.getLocation().distance(nearbyPlayer.getLocation()) <= 20) { + nearbyPlayers.add(nearbyPlayer); + } + } + } + + for (Player nearbyPlayer : nearbyPlayers) { + if (!p.equals(nearbyPlayer)) { // 避免将玩家自己添加到GUI中 + inv.addItem(itemUtil.addTeam(nearbyPlayer.getName())); + } + } + + p.openInventory(inv); + } +} diff --git a/src/main/java/me/Demon/AskyBlockWarps/Listener/LandTeamGui.java b/src/main/java/me/Demon/AskyBlockWarps/Listener/LandTeamGui.java new file mode 100644 index 0000000..1454cae --- /dev/null +++ b/src/main/java/me/Demon/AskyBlockWarps/Listener/LandTeamGui.java @@ -0,0 +1,45 @@ +package me.Demon.AskyBlockWarps.Listener; + +import com.wasteofplastic.askyblock.ASkyBlockAPI; +import me.Demon.AskyBlockWarps.Main; +import me.Demon.AskyBlockWarps.Util.itemUtil; +import me.Demon.DemonPlugin.DemonAPI; +import org.bukkit.Bukkit; +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 java.util.UUID; + +public class LandTeamGui implements Listener { + public static String invtitle = "帝国战争 - 空岛成员"; + + @EventHandler + public void onclick(InventoryClickEvent e) { + Player p = (Player) e.getWhoClicked(); + if (e.getInventory() != null && e.getInventory().getTitle().contains(invtitle)) { + e.setCancelled(true); + ItemStack item = e.getCurrentItem(); + if (e.getRawSlot() >= 0 && e.getRawSlot() < e.getInventory().getSize() && !DemonAPI.itemIsNull(item) && !DemonAPI.itemIsLore(item)) { + if (ASkyBlockAPI.getInstance().getOwner(p.getLocation()).equals(p.getUniqueId())) { + String playName = item.getItemMeta().getDisplayName().replace("§6§l成员 §e", ""); + p.performCommand("is expel " + playName); + } + } else { + p.sendMessage(Main.prefix + "您不是岛主,没权限将玩家移出岛屿."); + p.closeInventory(); + } + } + } + + public static void Opengui(Player p) { + Inventory inv = Bukkit.createInventory(null, 27, invtitle); + for (UUID uid : ASkyBlockAPI.getInstance().getTeamMembers(p.getUniqueId())) { + inv.addItem(itemUtil.teamList(Main.convertUUIDToName(uid))); + } + p.openInventory(inv); + } +} diff --git a/src/main/java/me/Demon/AskyBlockWarps/Listener/MainGui.java b/src/main/java/me/Demon/AskyBlockWarps/Listener/MainGui.java index 693e435..fc1c93a 100644 --- a/src/main/java/me/Demon/AskyBlockWarps/Listener/MainGui.java +++ b/src/main/java/me/Demon/AskyBlockWarps/Listener/MainGui.java @@ -1,11 +1,13 @@ package me.Demon.AskyBlockWarps.Listener; +import cn.hamster3.cdapi.CDTimeAPI; import com.wasteofplastic.askyblock.ASkyBlockAPI; import me.Demon.AskyBlockWarps.Main; import me.Demon.AskyBlockWarps.Util.itemUtil; import me.Demon.DemonPlugin.DemonAPI; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Sound; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -26,20 +28,69 @@ public class MainGui implements Listener { e.setCancelled(true); ItemStack item = e.getCurrentItem(); if (e.getRawSlot() >= 0 && e.getRawSlot() < e.getInventory().getSize() && !DemonAPI.itemIsNull(item) && !DemonAPI.itemIsLore(item)) { - if (e.getRawSlot() == 13) { - UUID islandOwner = ASkyBlockAPI.getInstance().getOwner(p.getLocation()); - System.out.println("LandOwner: " + Main.convertUUIDToName(islandOwner)); + UUID islandOwner = ASkyBlockAPI.getInstance().getOwner(p.getLocation()); + if (e.getRawSlot() == 1) { + p.performCommand("is"); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + p.closeInventory(); + } + + if (e.getRawSlot() == 3) { if (islandOwner != null && islandOwner.equals(p.getUniqueId())) { - SetLocation("Stats." + p.getName(), p.getLocation()); - p.sendMessage(Main.prefix + "设置空岛地标点成功."); - p.closeInventory(); + if (CDTimeAPI.getCD(p.getUniqueId(), "islandsetwarp") < 0) { + SetLocation("Stats." + p.getName(), p.getLocation()); + p.sendMessage(Main.prefix + "设置空岛地标点成功."); + CDTimeAPI.setPlayerCD(p.getUniqueId(), "islandsetwarp", 1000 * 3); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + p.closeInventory(); + } else { + p.sendMessage(Main.prefix + "功能冷却中..."); + p.closeInventory(); + } } else { p.sendMessage(Main.prefix + "您只能在您的岛屿设置传送点地标."); + p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1.0F, 2.0F); p.closeInventory(); } } - if (e.getRawSlot() == 15) { + + if (e.getRawSlot() == 5) { WarpGui.Opengui(p); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + } + + if (e.getRawSlot() == 7) { + DemonAPI.sendTitle(p, 10, 20, 10, "§c§l空岛重置", "§6请联系群客服进行重置"); + p.sendMessage(Main.prefix + "请联系客服进行空岛重置报备!!!"); + p.sendMessage(Main.prefix + "请联系客服进行空岛重置报备!!!"); + p.sendMessage(Main.prefix + "请联系客服进行空岛重置报备!!!"); + p.playSound(p.getLocation(), Sound.ENTITY_BLAZE_DEATH, 1.0F, 2.0F); + p.closeInventory(); + } + + if (e.getRawSlot() == 11) { + p.performCommand("is top"); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + p.closeInventory(); + } + + if (e.getRawSlot() == 13) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "asadmin lock " + p.getName()); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + p.closeInventory(); + } + + if (e.getRawSlot() == 15) { + LandTeamGui.Opengui(p); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + } + if (e.getRawSlot() == 19) { + LandInviteGui.Opengui(p); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); + } + if (e.getRawSlot() == 25) { + p.performCommand("challenge"); + p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0F, 2.0F); } } } @@ -47,12 +98,17 @@ public class MainGui implements Listener { public static void Opengui(Player p) { Inventory inv = Bukkit.createInventory(null, 27, invtitle); + boolean butt = ASkyBlockAPI.getInstance().hasIsland(p.getUniqueId()); - inv.setItem(11, itemUtil.resetLand()); - - inv.setItem(13, itemUtil.setWarp()); - - inv.setItem(15, itemUtil.warpList()); + inv.setItem(1, itemUtil.backisland(butt)); + inv.setItem(3, itemUtil.setWarp()); + inv.setItem(5, itemUtil.warpList()); + inv.setItem(7, itemUtil.resetLand()); + inv.setItem(11, itemUtil.looklandlevel(p, butt)); + inv.setItem(13, itemUtil.islandlock()); + inv.setItem(15, itemUtil.islandlook(butt)); + inv.setItem(19, itemUtil.isLandinvite()); + inv.setItem(25, itemUtil.islandQuest()); p.openInventory(inv); } diff --git a/src/main/java/me/Demon/AskyBlockWarps/Listener/WarpGui.java b/src/main/java/me/Demon/AskyBlockWarps/Listener/WarpGui.java index 5c751a8..815abfb 100644 --- a/src/main/java/me/Demon/AskyBlockWarps/Listener/WarpGui.java +++ b/src/main/java/me/Demon/AskyBlockWarps/Listener/WarpGui.java @@ -1,10 +1,12 @@ package me.Demon.AskyBlockWarps.Listener; +import cn.hamster3.cdapi.CDTimeAPI; import com.wasteofplastic.askyblock.ASkyBlockAPI; import me.Demon.AskyBlockWarps.Main; import me.Demon.AskyBlockWarps.Util.itemUtil; import me.Demon.DemonPlugin.DemonAPI; import org.bukkit.Bukkit; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -24,10 +26,17 @@ public class WarpGui implements Listener { e.setCancelled(true); ItemStack item = e.getCurrentItem(); if (e.getRawSlot() >= 0 && e.getRawSlot() < e.getInventory().getSize() && !DemonAPI.itemIsNull(item) && !DemonAPI.itemIsLore(item)) { - UUID islandOwner = ASkyBlockAPI.getInstance().getOwner(p.getLocation()); - p.teleport(Main.LandWarpLoc(p.getName())); - p.sendMessage(Main.prefix + "您已传送至 §e" + Main.convertUUIDToName(islandOwner) + "§f 的空岛地标旁."); - p.closeInventory(); + if (CDTimeAPI.getCD(p.getUniqueId(), "islandwarptp") < 0) { + UUID islandOwner = ASkyBlockAPI.getInstance().getOwner(p.getLocation()); + p.teleport(Main.LandWarpLoc(p.getName())); + p.sendMessage(Main.prefix + "您已传送至 §e" + Main.convertUUIDToName(islandOwner) + "§f 的空岛地标旁."); + CDTimeAPI.setPlayerCD(p.getUniqueId(), "islandwarptp", 1000 * 3); + p.playSound(p.getLocation(), Sound.ENTITY_ENDEREYE_DEATH, 1.0F, 2.0F); + p.closeInventory(); + } else { + p.sendMessage(Main.prefix + "空岛地标传送冷却中..."); + p.closeInventory(); + } } } } diff --git a/src/main/java/me/Demon/AskyBlockWarps/Main.java b/src/main/java/me/Demon/AskyBlockWarps/Main.java index 6c7f94e..027dd68 100644 --- a/src/main/java/me/Demon/AskyBlockWarps/Main.java +++ b/src/main/java/me/Demon/AskyBlockWarps/Main.java @@ -1,13 +1,14 @@ package me.Demon.AskyBlockWarps; import me.Demon.AskyBlockWarps.Command.iswarpCommand; +import me.Demon.AskyBlockWarps.Listener.LandInviteGui; +import me.Demon.AskyBlockWarps.Listener.LandTeamGui; import me.Demon.AskyBlockWarps.Listener.MainGui; import me.Demon.AskyBlockWarps.Listener.WarpGui; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.OfflinePlayer; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.util.UUID; @@ -22,6 +23,8 @@ public class Main extends JavaPlugin { saveDefaultConfig(); Bukkit.getServer().getPluginManager().registerEvents(new MainGui(), plugin); Bukkit.getServer().getPluginManager().registerEvents(new WarpGui(), plugin); + Bukkit.getServer().getPluginManager().registerEvents(new LandTeamGui(), plugin); + Bukkit.getServer().getPluginManager().registerEvents(new LandInviteGui(), plugin); getCommand("iswarps").setExecutor(new iswarpCommand()); getCommand("iswarps").setTabCompleter(new iswarpCommand()); } diff --git a/src/main/java/me/Demon/AskyBlockWarps/Util/itemUtil.java b/src/main/java/me/Demon/AskyBlockWarps/Util/itemUtil.java index 2943da2..bf70da3 100644 --- a/src/main/java/me/Demon/AskyBlockWarps/Util/itemUtil.java +++ b/src/main/java/me/Demon/AskyBlockWarps/Util/itemUtil.java @@ -1,6 +1,8 @@ package me.Demon.AskyBlockWarps.Util; +import com.wasteofplastic.askyblock.ASkyBlockAPI; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -9,6 +11,38 @@ import java.util.List; public class itemUtil { + public static ItemStack teamList(String name) { + ItemStack item = new ItemStack(Material.SIGN); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l成员 §e" + name); + List lore = new ArrayList<>(); + lore.add("§r"); + lore.add("§c 请勿随意点击"); + lore.add("§c 请勿随意点击"); + lore.add("§c 请勿随意点击"); + lore.add("§r"); + lore.add("§6▸ §c点击移除岛屿"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + + public static ItemStack addTeam(String name) { + ItemStack item = new ItemStack(Material.SIGN); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l玩家 §e" + name); + List lore = new ArrayList<>(); + lore.add("§r"); + lore.add("§c 请勿随意点击"); + lore.add("§c 请勿随意点击"); + lore.add("§c 请勿随意点击"); + lore.add("§r"); + lore.add("§6▸ §e点击邀请加入岛屿"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + public static ItemStack warpShow(String name) { ItemStack item = new ItemStack(Material.SIGN); ItemMeta meta = item.getItemMeta(); @@ -21,8 +55,82 @@ public class itemUtil { return item; } + public static ItemStack looklandlevel(Player p,boolean butt) { + ItemStack item = new ItemStack(Material.BEACON); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l岛屿等级"); + List lore = new ArrayList<>(); + lore.add("§r"); + if (butt) { + lore.add("§7 您的岛屿等级: §f" + ASkyBlockAPI.getInstance().getLongIslandLevel(p.getUniqueId())); + } else { + lore.add("§7 没有属于您的岛屿"); + } + lore.add("§r"); + lore.add("§6▸ §e点击查看空岛排行"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + + public static ItemStack backisland(boolean butt) { + ItemStack item = new ItemStack(Material.ENDER_PORTAL_FRAME); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l返回空岛"); + List lore = new ArrayList<>(); + lore.add("§r"); + if (butt) { + lore.add("§6▸ §e点击返回空岛"); + } else { + lore.add("§6▸ §c点击创建空岛"); + } + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + + public static ItemStack isLandinvite() { + ItemStack item = new ItemStack(Material.SLIME_BALL); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l邀请加入空岛"); + List lore = new ArrayList<>(); + lore.add("§r"); + lore.add("§6▸ §c点击邀请"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + + public static ItemStack islandlook(boolean butt) { + ItemStack item = new ItemStack(Material.EMPTY_MAP); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l查看空岛成员"); + List lore = new ArrayList<>(); + lore.add("§r"); + if (butt) { + lore.add("§6▸ §e点击查看"); + } else { + lore.add("§6▸ §e没有属于您的岛屿"); + } + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + + public static ItemStack islandlock() { + ItemStack item = new ItemStack(Material.WATCH); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§c§l锁定岛屿"); + List lore = new ArrayList<>(); + lore.add("§r"); + lore.add("§6▸ §c点击锁定"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } + public static ItemStack resetLand() { - ItemStack item = new ItemStack(Material.BOOK); + ItemStack item = new ItemStack(Material.LAVA_BUCKET); ItemMeta meta = item.getItemMeta(); meta.setDisplayName("§6§l重置空岛"); List lore = new ArrayList<>(); @@ -44,6 +152,7 @@ public class itemUtil { item.setItemMeta(meta); return item; } + public static ItemStack warpList() { ItemStack item = new ItemStack(Material.SIGN); ItemMeta meta = item.getItemMeta(); @@ -55,4 +164,16 @@ public class itemUtil { item.setItemMeta(meta); return item; } + + public static ItemStack islandQuest() { + ItemStack item = new ItemStack(Material.BOOK); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName("§6§l挑战任务"); + List lore = new ArrayList<>(); + lore.add("§r"); + lore.add("§6▸ §e点击查看"); + meta.setLore(lore); + item.setItemMeta(meta); + return item; + } }