add task block

complete tp
This commit is contained in:
AlphaAE
2019-05-13 16:05:16 +08:00
parent 2fa0ea5823
commit 4ed2bdcf2e
8 changed files with 167 additions and 68 deletions

View File

@ -7,6 +7,7 @@ import cn.nukkit.plugin.PluginManager;
import com.alphaae.mcpe.servers.command.HiCommand; import com.alphaae.mcpe.servers.command.HiCommand;
import com.alphaae.mcpe.servers.command.UpdataUserDataCommand; import com.alphaae.mcpe.servers.command.UpdataUserDataCommand;
import com.alphaae.mcpe.servers.event.*; import com.alphaae.mcpe.servers.event.*;
import com.alphaae.mcpe.servers.task.DisplayPlayerInfoTask;
public class MainPlugin extends PluginBase { public class MainPlugin extends PluginBase {
@ -25,6 +26,7 @@ public class MainPlugin extends PluginBase {
public void onEnable() { public void onEnable() {
plugin = this; plugin = this;
initConfig(); initConfig();
startTask();
registerCommands(); registerCommands();
registerEvents(); registerEvents();
} }
@ -40,6 +42,10 @@ public class MainPlugin extends PluginBase {
reloadConfig(); reloadConfig();
} }
private void startTask() {
new DisplayPlayerInfoTask(this);
}
private void registerCommands() { private void registerCommands() {
SimpleCommandMap commandMap = getServer().getCommandMap(); SimpleCommandMap commandMap = getServer().getCommandMap();
commandMap.register("AlphaAPI", new HiCommand(this)); commandMap.register("AlphaAPI", new HiCommand(this));

View File

@ -5,7 +5,6 @@ import cn.nukkit.event.EventPriority;
import cn.nukkit.event.Listener; import cn.nukkit.event.Listener;
import cn.nukkit.event.player.PlayerJoinEvent; import cn.nukkit.event.player.PlayerJoinEvent;
import cn.nukkit.event.player.PlayerQuitEvent; 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.JoinQuitEventBlock;
import com.alphaae.mcpe.servers.event.block.joinquit.JoinWindowBlock; import com.alphaae.mcpe.servers.event.block.joinquit.JoinWindowBlock;
import com.alphaae.mcpe.servers.event.block.joinquit.LoadPlayerDataBlock; import com.alphaae.mcpe.servers.event.block.joinquit.LoadPlayerDataBlock;
@ -19,7 +18,6 @@ public class PlayerJoinQuitEvent implements Listener {
static { static {
eventBlockList = new ArrayList<>(); eventBlockList = new ArrayList<>();
eventBlockList.add(new DisplayInfoBlock());
eventBlockList.add(new JoinWindowBlock()); eventBlockList.add(new JoinWindowBlock());
eventBlockList.add(new LoadPlayerDataBlock()); eventBlockList.add(new LoadPlayerDataBlock());
} }

View File

@ -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();
}
}

View File

@ -36,6 +36,7 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent {
private void initButtons() { private void initButtons() {
addButton(new ElementButton("返回")); addButton(new ElementButton("返回"));
addButton(new ElementButton("上次死亡地点")); addButton(new ElementButton("上次死亡地点"));
addButton(new ElementButton("玩家"));
addButton(new ElementButton("主城")); addButton(new ElementButton("主城"));
Map<String, UserLocation> userLocationMap = rePlayer.getUserLocationMap(); Map<String, UserLocation> userLocationMap = rePlayer.getUserLocationMap();
Iterator iterator = userLocationMap.entrySet().iterator(); Iterator iterator = userLocationMap.entrySet().iterator();
@ -71,7 +72,8 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent {
} }
return; return;
case "玩家": case "玩家":
FormWindowTeleportPlayer formWindowTeleportPlayer = new FormWindowTeleportPlayer(player);
player.showFormWindow(formWindowTeleportPlayer);
return; return;
case "主城": case "主城":
Position spawnLocation = player.getLevel().getSpawnLocation(); Position spawnLocation = player.getLevel().getSpawnLocation();

View File

@ -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, "对方拒绝了传送");
}
}
}

View File

@ -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<UUID, Player> playerMap = MainPlugin.getPlugin().getServer().getOnlinePlayers();
List<String> 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, "玩家不在游戏中");
}
}
}
}

View File

@ -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<UUID, Player> 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);
}
}

View File

@ -6,9 +6,11 @@ import cn.nukkit.utils.TextFormat;
public class ToastUtils { public class ToastUtils {
public static final int INFO_TYPE_ERROR = 0; 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) { public static void Show(Player player, int infoType, String info) {
player.sendPopup(TextFormat.colorize(infoTypeArr[infoType] + info)); player.sendPopup(TextFormat.colorize(infoTypeArr[infoType] + info));