diff --git a/src/com/alphaae/mcpe/servers/MainPlugin.java b/src/com/alphaae/mcpe/servers/MainPlugin.java index 4bcc927..c2e636a 100644 --- a/src/com/alphaae/mcpe/servers/MainPlugin.java +++ b/src/com/alphaae/mcpe/servers/MainPlugin.java @@ -6,10 +6,7 @@ import cn.nukkit.plugin.PluginBase; 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.FormRespondedEvent; -import com.alphaae.mcpe.servers.event.PlayerInventoryEvent; -import com.alphaae.mcpe.servers.event.PlayerInteractSetEvent; -import com.alphaae.mcpe.servers.event.PlayerJoinQuitEvent; +import com.alphaae.mcpe.servers.event.*; public class MainPlugin extends PluginBase { @@ -54,6 +51,7 @@ public class MainPlugin extends PluginBase { pluginManager.registerEvents(new PlayerJoinQuitEvent(), this); pluginManager.registerEvents(new PlayerInteractSetEvent(), this); pluginManager.registerEvents(new FormRespondedEvent(), this); + pluginManager.registerEvents(new PlayerDeathRespawnEvent(), this); // pluginManager.registerEvents(new PlayerInventoryEvent(), this); } } diff --git a/src/com/alphaae/mcpe/servers/event/PlayerDeathRespawnEvent.java b/src/com/alphaae/mcpe/servers/event/PlayerDeathRespawnEvent.java new file mode 100644 index 0000000..205edb0 --- /dev/null +++ b/src/com/alphaae/mcpe/servers/event/PlayerDeathRespawnEvent.java @@ -0,0 +1,35 @@ +package com.alphaae.mcpe.servers.event; + +import cn.nukkit.Player; +import cn.nukkit.event.EventHandler; +import cn.nukkit.event.EventPriority; +import cn.nukkit.event.Listener; +import cn.nukkit.event.player.PlayerDeathEvent; +import cn.nukkit.event.player.PlayerRespawnEvent; +import cn.nukkit.item.Item; +import cn.nukkit.level.Position; +import com.alphaae.mcpe.servers.StaticData; +import com.alphaae.mcpe.servers.model.RePlayer; +import com.alphaae.mcpe.servers.model.UserLocation; + +public class PlayerDeathRespawnEvent implements Listener { + + //玩家死亡事件 + @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) + public void onPlayerDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + RePlayer rePlayer = StaticData.rePlayerMap.get(player.getUniqueId()); + + //记录死亡地点 + Position deathPosition = player.getPosition(); + rePlayer.putUserLocation("__deathPosition__", new UserLocation(deathPosition.getX(), deathPosition.getY(), deathPosition.getZ(), player.getLevel().getName())); + } + + //玩家重生事件 + @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) + public void onPlayerRespawn(PlayerRespawnEvent event) { + Player player = event.getPlayer(); + player.getInventory().setHeldItemSlot(1); + player.getInventory().addItem(new Item(347)); + } +} diff --git a/src/com/alphaae/mcpe/servers/event/block/joinquit/LoadPlayerDataBlock.java b/src/com/alphaae/mcpe/servers/event/block/joinquit/LoadPlayerDataBlock.java index a9ee81c..b2c3b6a 100644 --- a/src/com/alphaae/mcpe/servers/event/block/joinquit/LoadPlayerDataBlock.java +++ b/src/com/alphaae/mcpe/servers/event/block/joinquit/LoadPlayerDataBlock.java @@ -4,6 +4,7 @@ import cn.nukkit.Player; import cn.nukkit.event.player.PlayerJoinEvent; import cn.nukkit.event.player.PlayerQuitEvent; import cn.nukkit.utils.TextFormat; +import com.alphaae.mcpe.servers.MainPlugin; import com.alphaae.mcpe.servers.StaticData; import com.alphaae.mcpe.servers.model.RePlayer; import com.alphaae.mcpe.servers.utils.PlayerDataUtils; @@ -31,7 +32,12 @@ public class LoadPlayerDataBlock implements JoinQuitEventBlock { Player player = event.getPlayer(); UUID uuid = player.getUniqueId(); RePlayer rePlayer = StaticData.rePlayerMap.get(uuid); - PlayerDataUtils.SaveData(rePlayer); + if (rePlayer != null) { + PlayerDataUtils.SaveData(rePlayer); + MainPlugin.getPlugin().getServer().getLogger().info("玩家退出服务器 数据保存成功!"); + } else { + MainPlugin.getPlugin().getServer().getLogger().error("玩家退出服务器 数据丢失!"); + } StaticData.rePlayerMap.remove(uuid); } diff --git a/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java b/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java index 4d9ec7a..9bf39df 100644 --- a/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java +++ b/src/com/alphaae/mcpe/servers/form/FormWindowTeleport.java @@ -45,6 +45,7 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent { while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); String key = (String) entry.getKey(); + if (key.equals("__deathPosition__")) continue; UserLocation value = (UserLocation) entry.getValue(); addButton(new ElementButton(key + " ( " + value.getLevelName() + " )")); } @@ -61,7 +62,15 @@ public class FormWindowTeleport extends FormWindowSimple implements FormEvent { player.showFormWindow(formWindowMeun); return; case "上次死亡地点": - player.sendMessage("" + player.getLevel().getName()); + Map userLocationMap = rePlayer.getUserLocationMap(); + UserLocation deathUserLocation = userLocationMap.get("__deathPosition__"); + if (deathUserLocation != null) { + Level level = MainPlugin.getPlugin().getServer().getLevelByName(deathUserLocation.getLevelName()); + Position deathPosition = new Position(deathUserLocation.getX(), deathUserLocation.getY(), deathUserLocation.getZ(), level); + player.teleport(deathPosition); + } else { + player.sendPopup(TextFormat.colorize("&4不存在死亡记录点")); + } return; case "主城": Position spawnLocation = player.getLevel().getSpawnLocation(); diff --git a/src/com/alphaae/mcpe/servers/utils/PlayerDataUtils.java b/src/com/alphaae/mcpe/servers/utils/PlayerDataUtils.java index 62a301d..c517fb5 100644 --- a/src/com/alphaae/mcpe/servers/utils/PlayerDataUtils.java +++ b/src/com/alphaae/mcpe/servers/utils/PlayerDataUtils.java @@ -86,6 +86,7 @@ public class PlayerDataUtils { try { UUID uuid = player.getUniqueId(); //给予初始玩家的操作 + player.getInventory().setHeldItemSlot(1); player.getInventory().addItem(new Item(347)); RePlayer rePlayer = new RePlayer(uuid, "新火", 2000);