diff --git a/src/com/alphaae/mcpe/servers/MainPlugin.java b/src/com/alphaae/mcpe/servers/MainPlugin.java index c2e636a..53266d6 100644 --- a/src/com/alphaae/mcpe/servers/MainPlugin.java +++ b/src/com/alphaae/mcpe/servers/MainPlugin.java @@ -7,6 +7,7 @@ import cn.nukkit.plugin.PluginManager; import com.alphaae.mcpe.servers.command.HiCommand; import com.alphaae.mcpe.servers.command.UpdataUserDataCommand; import com.alphaae.mcpe.servers.event.*; +import com.alphaae.mcpe.servers.task.DisplayPlayerInfoTask; public class MainPlugin extends PluginBase { @@ -25,6 +26,7 @@ public class MainPlugin extends PluginBase { public void onEnable() { plugin = this; initConfig(); + startTask(); registerCommands(); registerEvents(); } @@ -40,6 +42,10 @@ public class MainPlugin extends PluginBase { reloadConfig(); } + private void startTask() { + new DisplayPlayerInfoTask(this); + } + private void registerCommands() { SimpleCommandMap commandMap = getServer().getCommandMap(); commandMap.register("AlphaAPI", new HiCommand(this)); diff --git a/src/com/alphaae/mcpe/servers/event/PlayerJoinQuitEvent.java b/src/com/alphaae/mcpe/servers/event/PlayerJoinQuitEvent.java index 398a9b2..9bf45bc 100644 --- a/src/com/alphaae/mcpe/servers/event/PlayerJoinQuitEvent.java +++ b/src/com/alphaae/mcpe/servers/event/PlayerJoinQuitEvent.java @@ -5,7 +5,6 @@ import cn.nukkit.event.EventPriority; import cn.nukkit.event.Listener; import cn.nukkit.event.player.PlayerJoinEvent; import cn.nukkit.event.player.PlayerQuitEvent; -import com.alphaae.mcpe.servers.event.block.joinquit.DisplayInfoBlock; import com.alphaae.mcpe.servers.event.block.joinquit.JoinQuitEventBlock; import com.alphaae.mcpe.servers.event.block.joinquit.JoinWindowBlock; import com.alphaae.mcpe.servers.event.block.joinquit.LoadPlayerDataBlock; @@ -19,7 +18,6 @@ public class PlayerJoinQuitEvent implements Listener { static { eventBlockList = new ArrayList<>(); - eventBlockList.add(new DisplayInfoBlock()); eventBlockList.add(new JoinWindowBlock()); eventBlockList.add(new LoadPlayerDataBlock()); } diff --git a/src/com/alphaae/mcpe/servers/event/block/joinquit/DisplayInfoBlock.java b/src/com/alphaae/mcpe/servers/event/block/joinquit/DisplayInfoBlock.java deleted file mode 100644 index bed1e6f..0000000 --- a/src/com/alphaae/mcpe/servers/event/block/joinquit/DisplayInfoBlock.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.alphaae.mcpe.servers.event.block.joinquit; - -import cn.nukkit.Player; -import cn.nukkit.event.player.PlayerJoinEvent; -import cn.nukkit.event.player.PlayerQuitEvent; -import cn.nukkit.scheduler.Task; -import cn.nukkit.scheduler.TaskHandler; -import cn.nukkit.utils.TextFormat; -import com.alphaae.mcpe.servers.Config; -import com.alphaae.mcpe.servers.MainPlugin; -import com.alphaae.mcpe.servers.StaticData; -import com.alphaae.mcpe.servers.model.RePlayer; - -import java.util.UUID; - -public class DisplayInfoBlock implements JoinQuitEventBlock { - - private TaskHandler infoHandler; - - public DisplayInfoBlock() { - } - - @Override - public void onPlayerJoin(PlayerJoinEvent event) { - final Player player = event.getPlayer(); - final UUID uuid = player.getUniqueId(); - - try { - infoHandler = MainPlugin.getPlugin().getServer().getScheduler().scheduleDelayedRepeatingTask(MainPlugin.getPlugin(), () -> { - try { - RePlayer rePlayer = StaticData.rePlayerMap.get(uuid); - String name = player.getDisplayName(); - int ping = player.getPing(); - int coin = rePlayer.getCoin(); - float tps = MainPlugin.getPlugin().getServer().getTicksPerSecond(); - - StringBuilder showText = new StringBuilder() - .append(name) - .append(" &f硬币: ").append(coin) - .append(" 延迟: ").append(ping).append("ms") - .append(" TPS: ").append(tps); - - player.sendActionBar(TextFormat.colorize(showText.toString())); - } catch (Exception e) { - if (infoHandler != null) - infoHandler.cancel(); - e.printStackTrace(); - } - }, Config.JOIN_WAITING_TIME, 36); - } catch (Exception e) { - if (infoHandler != null) - infoHandler.cancel(); - e.printStackTrace(); - } - - } - - @Override - public void onPlayerQuit(PlayerQuitEvent event) { - if (infoHandler != null) - infoHandler.cancel(); - } - -} diff --git a/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java b/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java index 1fb711a..eaff595 100644 --- a/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java +++ b/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java @@ -36,6 +36,7 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent { private void initButtons() { addButton(new ElementButton("返回")); addButton(new ElementButton("上次死亡地点")); + addButton(new ElementButton("玩家")); addButton(new ElementButton("主城")); Map userLocationMap = rePlayer.getUserLocationMap(); Iterator iterator = userLocationMap.entrySet().iterator(); @@ -71,7 +72,8 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent { } return; case "玩家": - + FormWindowTeleportPlayer formWindowTeleportPlayer = new FormWindowTeleportPlayer(player); + player.showFormWindow(formWindowTeleportPlayer); return; case "主城": Position spawnLocation = player.getLevel().getSpawnLocation(); diff --git a/src/com/alphaae/mcpe/servers/form/FormWindowTeleportAllow.java b/src/com/alphaae/mcpe/servers/form/FormWindowTeleportAllow.java new file mode 100644 index 0000000..ab86675 --- /dev/null +++ b/src/com/alphaae/mcpe/servers/form/FormWindowTeleportAllow.java @@ -0,0 +1,38 @@ +package com.alphaae.mcpe.servers.form; + +import cn.nukkit.Player; +import cn.nukkit.event.player.PlayerFormRespondedEvent; +import cn.nukkit.form.response.FormResponseModal; +import cn.nukkit.form.window.FormWindowModal; +import cn.nukkit.level.Position; +import com.alphaae.mcpe.servers.event.block.form.FormEvent; +import com.alphaae.mcpe.servers.model.RePlayer; +import com.alphaae.mcpe.servers.utils.ToastUtils; +import com.sun.istack.internal.NotNull; + +public class FormWindowTeleportAllow extends FormWindowModal implements FormEvent { + + private transient Player player; + private transient RePlayer rePlayer; + + public FormWindowTeleportAllow(@NotNull Player player) { + super("玩家传送", "", "接受", "拒绝"); + this.player = player; +// this.rePlayer = StaticData.rePlayerMap.get(player.getUniqueId()); + String name = player.getDisplayName(); + setContent("玩家: " + name + " 请求传送到你身边"); + } + + @Override + public void RespondedEvent(PlayerFormRespondedEvent event) { + FormResponseModal formResponseModal = (FormResponseModal) event.getResponse(); + int clickedButtonId = formResponseModal.getClickedButtonId(); + Player player2 = event.getPlayer(); + if (clickedButtonId == 0) { + Position position = player2.getPosition(); + player.teleport(position); + } else { + ToastUtils.Show(player, ToastUtils.INFO_TYPE_WARNING, "对方拒绝了传送"); + } + } +} diff --git a/src/com/alphaae/mcpe/servers/form/FormWindowTeleportPlayer.java b/src/com/alphaae/mcpe/servers/form/FormWindowTeleportPlayer.java new file mode 100644 index 0000000..816af8c --- /dev/null +++ b/src/com/alphaae/mcpe/servers/form/FormWindowTeleportPlayer.java @@ -0,0 +1,66 @@ +package com.alphaae.mcpe.servers.form; + +import cn.nukkit.Player; +import cn.nukkit.event.player.PlayerFormRespondedEvent; +import cn.nukkit.form.element.ElementDropdown; +import cn.nukkit.form.element.ElementInput; +import cn.nukkit.form.response.FormResponseCustom; +import cn.nukkit.form.response.FormResponseData; +import cn.nukkit.form.window.FormWindowCustom; +import cn.nukkit.level.Position; +import com.alphaae.mcpe.servers.MainPlugin; +import com.alphaae.mcpe.servers.StaticData; +import com.alphaae.mcpe.servers.event.block.form.FormEvent; +import com.alphaae.mcpe.servers.model.RePlayer; +import com.alphaae.mcpe.servers.model.UserLocation; +import com.alphaae.mcpe.servers.utils.ToastUtils; +import com.sun.istack.internal.NotNull; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FormWindowTeleportPlayer extends FormWindowCustom implements FormEvent { + + private transient Player player; + private transient RePlayer rePlayer; + + public FormWindowTeleportPlayer(@NotNull Player player) { + super("传送到某玩家"); + this.player = player; +// this.rePlayer = StaticData.rePlayerMap.get(player.getUniqueId()); + initElements(); + } + + private void initElements() { + Map playerMap = MainPlugin.getPlugin().getServer().getOnlinePlayers(); + List playerList = new ArrayList<>(); + for (Player tPlayer : playerMap.values()) { + String name = tPlayer.getName(); + if (name.equals(player.getName())) continue; + playerList.add(tPlayer.getName()); + } + addElement(new ElementDropdown("选择玩家:", playerList)); + } + + @Override + public void RespondedEvent(PlayerFormRespondedEvent event) { + FormResponseCustom formResponseCustom = (FormResponseCustom) event.getResponse(); + String posName = formResponseCustom.getDropdownResponse(0).getElementContent(); + Player player = event.getPlayer(); + if (!posName.equals("")) { + Player player2 = MainPlugin.getPlugin().getServer().getPlayer(posName); + if (player2 != null) { + FormWindowTeleportAllow formWindowTeleportAllow = new FormWindowTeleportAllow(player); + player2.showFormWindow(formWindowTeleportAllow); + ToastUtils.Show(player, ToastUtils.INFO_TYPE_INFO, "传送请求已发送"); + } else { + ToastUtils.Show(player, ToastUtils.INFO_TYPE_ERROR, "玩家不在游戏中"); + } + } + + } + + +} diff --git a/src/com/alphaae/mcpe/servers/task/DisplayPlayerInfoTask.java b/src/com/alphaae/mcpe/servers/task/DisplayPlayerInfoTask.java new file mode 100644 index 0000000..6d6fc44 --- /dev/null +++ b/src/com/alphaae/mcpe/servers/task/DisplayPlayerInfoTask.java @@ -0,0 +1,51 @@ +package com.alphaae.mcpe.servers.task; + +import cn.nukkit.Player; +import cn.nukkit.plugin.Plugin; +import cn.nukkit.scheduler.TaskHandler; +import cn.nukkit.utils.TextFormat; +import com.alphaae.mcpe.servers.Config; +import com.alphaae.mcpe.servers.MainPlugin; +import com.alphaae.mcpe.servers.StaticData; +import com.alphaae.mcpe.servers.model.RePlayer; + +import java.util.Map; +import java.util.UUID; + +public class DisplayPlayerInfoTask { + + private Plugin plugin; + + private TaskHandler infoHandler; + + public DisplayPlayerInfoTask(Plugin plugin) { + this.plugin = plugin; + + infoHandler = MainPlugin.getPlugin().getServer().getScheduler().scheduleDelayedRepeatingTask(MainPlugin.getPlugin(), () -> { + try { + float tps = MainPlugin.getPlugin().getServer().getTicksPerSecond(); + + Map playerMap = plugin.getServer().getOnlinePlayers(); + for (Player tPlayer : playerMap.values()) { + RePlayer tRePlayer = StaticData.rePlayerMap.get(tPlayer.getUniqueId()); + if (tRePlayer == null) continue; + String name = tPlayer.getDisplayName(); + int ping = tPlayer.getPing(); + int coin = tRePlayer.getCoin(); + StringBuilder showText = new StringBuilder() + .append(name) + .append(" &f硬币: ").append(coin) + .append(" 延迟: ").append(ping).append("ms") + .append(" TPS: ").append(tps); + tPlayer.sendActionBar(TextFormat.colorize(showText.toString())); + } + } catch (Exception e) { + if (infoHandler != null) + infoHandler.cancel(); + e.printStackTrace(); + } + }, Config.JOIN_WAITING_TIME, 36); + + } + +} diff --git a/src/com/alphaae/mcpe/servers/utils/ToastUtils.java b/src/com/alphaae/mcpe/servers/utils/ToastUtils.java index fa507f3..b477092 100644 --- a/src/com/alphaae/mcpe/servers/utils/ToastUtils.java +++ b/src/com/alphaae/mcpe/servers/utils/ToastUtils.java @@ -6,9 +6,11 @@ import cn.nukkit.utils.TextFormat; public class ToastUtils { public static final int INFO_TYPE_ERROR = 0; + public static final int INFO_TYPE_INFO = 1; + public static final int INFO_TYPE_WARNING = 2; - private static String[] infoTypeArr = new String[]{"&4"}; + private static String[] infoTypeArr = new String[]{"&", "&b", "&e"}; public static void Show(Player player, int infoType, String info) { player.sendPopup(TextFormat.colorize(infoTypeArr[infoType] + info));