修复了死亡后的刷新bug
This commit is contained in:
parent
ac3ed0ac88
commit
f41a8511dd
@ -34,6 +34,14 @@ public final class SrWildEntity extends JavaPlugin implements CommandExecutor {
|
|||||||
|
|
||||||
Bukkit.getPluginManager().registerEvents(entityRefreshListener,this);
|
Bukkit.getPluginManager().registerEvents(entityRefreshListener,this);
|
||||||
|
|
||||||
|
//注册定时任务
|
||||||
|
this.getServer().getScheduler().scheduleSyncRepeatingTask
|
||||||
|
(this,this.entityRefreshListener::timedRdfreshEneity,
|
||||||
|
0,this.entityRefreshListener.getConfigManager().getRefreshTime()*20);
|
||||||
|
|
||||||
|
getLogger().info(ChatColor.DARK_GREEN+"SrWildEntity定时任务触发");
|
||||||
|
|
||||||
|
|
||||||
this.getCommand("despawn").setExecutor(entityRefreshListener);
|
this.getCommand("despawn").setExecutor(entityRefreshListener);
|
||||||
this.getCommand("SrWildEntity").setExecutor(this::onCommand);
|
this.getCommand("SrWildEntity").setExecutor(this::onCommand);
|
||||||
|
|
||||||
@ -72,10 +80,21 @@ public final class SrWildEntity extends JavaPlugin implements CommandExecutor {
|
|||||||
commandSender.sendMessage(ChatColor.RED+"请加上reload操作");
|
commandSender.sendMessage(ChatColor.RED+"请加上reload操作");
|
||||||
}else {
|
}else {
|
||||||
if (strings[0].equalsIgnoreCase("reload")){
|
if (strings[0].equalsIgnoreCase("reload")){
|
||||||
|
|
||||||
|
getLogger().info(ChatColor.GOLD+"SrWildEntity定时任务关闭");
|
||||||
|
Bukkit.getScheduler().cancelTasks(this);
|
||||||
|
|
||||||
getLogger().info(ChatColor.AQUA+"SrWildEntity重新读取配置文件");
|
getLogger().info(ChatColor.AQUA+"SrWildEntity重新读取配置文件");
|
||||||
commandSender.sendMessage(ChatColor.YELLOW+"SrWildEntity重新读取配置文件");
|
commandSender.sendMessage(ChatColor.YELLOW+"SrWildEntity重新读取配置文件");
|
||||||
entityRefreshListener.setConfigManager(this.onload());
|
entityRefreshListener.setConfigManager(this.onload());
|
||||||
|
|
||||||
|
//注册定时任务
|
||||||
|
this.getServer().getScheduler().scheduleSyncRepeatingTask
|
||||||
|
(this,this.entityRefreshListener::timedRdfreshEneity,
|
||||||
|
0,this.entityRefreshListener.getConfigManager().getRefreshTime()*20);
|
||||||
|
|
||||||
|
getLogger().info(ChatColor.DARK_GREEN+"SrWildEntity定时任务触发");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,10 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
@ -76,10 +78,7 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
this.germPlugin = GermPlugin.getPlugin();
|
this.germPlugin = GermPlugin.getPlugin();
|
||||||
|
|
||||||
|
|
||||||
logger.info(ChatColor.DARK_GREEN+"SrWildEntity定时任务触发");
|
|
||||||
//注册定时任务
|
|
||||||
plugin.getServer().getScheduler().scheduleSyncRepeatingTask
|
|
||||||
(this.plugin,this::timedRdfreshEneity,0,configManager.getRefreshTime()*20);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -115,8 +114,7 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
Collection<? extends Player> onlinePlayers = plugin.getServer().getOnlinePlayers();
|
Collection<? extends Player> onlinePlayers = plugin.getServer().getOnlinePlayers();
|
||||||
for (Player player : onlinePlayers){
|
for (Player player : onlinePlayers){
|
||||||
String name = player.getName();
|
String name = player.getName();
|
||||||
Town town = TownyAPI.getInstance().getTown(player.getLocation());
|
if (!this.playerStayTown(player.getLocation())){
|
||||||
if (town == null){
|
|
||||||
PlayerRefreshinfo playerRefreshinfo = new PlayerRefreshinfo(name, 0, new ArrayList<>());
|
PlayerRefreshinfo playerRefreshinfo = new PlayerRefreshinfo(name, 0, new ArrayList<>());
|
||||||
refreshPlayer.put(name, playerRefreshinfo);
|
refreshPlayer.put(name, playerRefreshinfo);
|
||||||
}
|
}
|
||||||
@ -133,8 +131,9 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}else {
|
}else {
|
||||||
String choice = strings[0];//只能是on,或者off
|
String choice = strings[0];//只能是on,off或者clear
|
||||||
if (choice.equalsIgnoreCase("on") || choice.equalsIgnoreCase("off")){
|
if (choice.equalsIgnoreCase("on") || choice.equalsIgnoreCase("off")
|
||||||
|
|| choice.equalsIgnoreCase("clear")){
|
||||||
if (choice.equalsIgnoreCase("on")){
|
if (choice.equalsIgnoreCase("on")){
|
||||||
Player player = plugin.getServer().getPlayer(strings[1]);
|
Player player = plugin.getServer().getPlayer(strings[1]);
|
||||||
if (player == null){
|
if (player == null){
|
||||||
@ -147,7 +146,7 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
commandSender.sendMessage(ChatColor.YELLOW+strings[1]+"开始刷怪");
|
commandSender.sendMessage(ChatColor.YELLOW+strings[1]+"开始刷怪");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}else {
|
}else if (choice.equalsIgnoreCase("off")){
|
||||||
Player player = plugin.getServer().getPlayer(strings[1]);
|
Player player = plugin.getServer().getPlayer(strings[1]);
|
||||||
if (player == null){
|
if (player == null){
|
||||||
commandSender.sendMessage("请输入正确的玩家姓名!");
|
commandSender.sendMessage("请输入正确的玩家姓名!");
|
||||||
@ -159,6 +158,12 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
commandSender.sendMessage(ChatColor.YELLOW+strings[1]+"停止刷怪");
|
commandSender.sendMessage(ChatColor.YELLOW+strings[1]+"停止刷怪");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
//清空刷新的怪物
|
||||||
|
this.clearRefreshEntity();
|
||||||
|
logger.info(ChatColor.GOLD+"SrWildEntity刷新的所有实体被清除!");
|
||||||
|
commandSender.sendMessage(ChatColor.GOLD+"SrWildEntity刷新的所有实体被清除!");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -191,16 +196,22 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
public void onPlayerInTown(PlayerEnterTownEvent event) {
|
public void onPlayerInTown(PlayerEnterTownEvent event) {
|
||||||
if (flag){
|
if (flag){
|
||||||
String name = event.getPlayer().getName();
|
String name = event.getPlayer().getName();
|
||||||
// List<UUID> entityList = refreshPlayer.get(name).getEntityList();
|
|
||||||
// for (UUID uuid : entityList){
|
|
||||||
// //删除储存的实体信息
|
|
||||||
// entityUUIDToPlayer.remove(uuid);
|
|
||||||
// }
|
|
||||||
refreshPlayer.remove(name);
|
refreshPlayer.remove(name);
|
||||||
logger.info(name + "开始停止怪物");
|
logger.info(name + "开始停止怪物");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void playerRevive(PlayerRespawnEvent event){
|
||||||
|
Location respawnLocation = event.getRespawnLocation();
|
||||||
|
if (!this.playerStayTown(respawnLocation)){
|
||||||
|
// 返回true则表示在城镇,不用管
|
||||||
|
//反之增加
|
||||||
|
String name = event.getPlayer().getName();
|
||||||
|
this.playerRefreshEntiyt(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 玩家离开城镇
|
* 玩家离开城镇
|
||||||
* @param event
|
* @param event
|
||||||
@ -209,11 +220,7 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
public void onPlayerLeaveTown(PlayerLeaveTownEvent event) {
|
public void onPlayerLeaveTown(PlayerLeaveTownEvent event) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
String name = event.getPlayer().getName();
|
String name = event.getPlayer().getName();
|
||||||
if (!noRefreshPlayer.contains(name)) {
|
this.playerRefreshEntiyt(name);
|
||||||
PlayerRefreshinfo playerRefreshinfo = new PlayerRefreshinfo(name, 0, new ArrayList<>());
|
|
||||||
refreshPlayer.put(name, playerRefreshinfo);
|
|
||||||
logger.info(name + "开始刷新实体");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,11 +233,8 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
if (flag){
|
if (flag){
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
String name = player.getName();
|
String name = player.getName();
|
||||||
Town town = TownyAPI.getInstance().getTown(player.getLocation());
|
if (!this.playerStayTown(player.getLocation()) && !noRefreshPlayer.contains(name)) {
|
||||||
if (town == null && !noRefreshPlayer.contains(name)) {
|
this.playerRefreshEntiyt(name);
|
||||||
PlayerRefreshinfo playerRefreshinfo = new PlayerRefreshinfo(name, 0, new ArrayList<>());
|
|
||||||
refreshPlayer.put(name, playerRefreshinfo);
|
|
||||||
logger.info(ChatColor.MAGIC + player.getName() + "在野外登录,开始刷新实体");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -459,4 +463,63 @@ public class EntityRefreshListener implements Listener, CommandExecutor {
|
|||||||
public void setConfigManager(ConfigManager configManager) {
|
public void setConfigManager(ConfigManager configManager) {
|
||||||
this.configManager = configManager;
|
this.configManager = configManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空所有记录在的实体
|
||||||
|
*/
|
||||||
|
public void clearRefreshEntity(){
|
||||||
|
Server server = plugin.getServer();
|
||||||
|
Collection<? extends Player> onlinePlayers = server.getOnlinePlayers();
|
||||||
|
for (Player player : onlinePlayers){
|
||||||
|
String name = player.getName();
|
||||||
|
List<UUID> entityList = refreshPlayer.get(name).getEntityList();
|
||||||
|
for (UUID uuid : entityList){
|
||||||
|
Entity entity = server.getEntity(uuid);
|
||||||
|
if (entity != null){
|
||||||
|
entity.remove();
|
||||||
|
if (entityUUIDToPlayer.containsKey(uuid)){
|
||||||
|
entityUUIDToPlayer.remove(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//entity清除完后
|
||||||
|
refreshPlayer.get(name).setEntityList(new ArrayList<>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void playerRefreshEntiyt(String name){
|
||||||
|
if (!noRefreshPlayer.contains(name) && !entityUUIDToPlayer.containsValue(name)) {
|
||||||
|
|
||||||
|
PlayerRefreshinfo playerRefreshinfo = new PlayerRefreshinfo(name, 0, new ArrayList<>());
|
||||||
|
refreshPlayer.put(name, playerRefreshinfo);
|
||||||
|
logger.info(name + "开始刷新实体");
|
||||||
|
}else {
|
||||||
|
List<UUID> uuidList = new ArrayList<>();
|
||||||
|
for (UUID uuid : entityUUIDToPlayer.keySet()){
|
||||||
|
String s = entityUUIDToPlayer.get(uuid);
|
||||||
|
if (s.equals(name)){
|
||||||
|
uuidList.add(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerRefreshinfo playerRefreshinfo = new PlayerRefreshinfo(name,0, uuidList);
|
||||||
|
refreshPlayer.put(name, playerRefreshinfo);
|
||||||
|
logger.info(name + "开始刷新实体");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于判断玩家是否在城镇
|
||||||
|
* @param location
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean playerStayTown(Location location) {
|
||||||
|
Town town = TownyAPI.getInstance().getTown(location);
|
||||||
|
if (town == null){
|
||||||
|
//为空则不再城镇
|
||||||
|
return false;
|
||||||
|
}else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user