diff --git a/src/main/java/com/sakurarealm/playerrisk/PlayerRisk.java b/src/main/java/com/sakurarealm/playerrisk/PlayerRisk.java index d381de2..e11d1fe 100644 --- a/src/main/java/com/sakurarealm/playerrisk/PlayerRisk.java +++ b/src/main/java/com/sakurarealm/playerrisk/PlayerRisk.java @@ -1,21 +1,34 @@ package com.sakurarealm.playerrisk; +import com.palmergames.bukkit.towny.event.PlayerEnterTownEvent; +import com.palmergames.bukkit.towny.event.PlayerLeaveTownEvent; import com.sakurarealm.playerrisk.api.PlayerRiskManager; import com.sakurarealm.playerrisk.api.PlayerRiskSettings; +import org.apache.commons.lang.NotImplementedException; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.plugin.java.JavaPlugin; -public final class PlayerRisk extends JavaPlugin { +import java.util.*; +public final class PlayerRisk extends JavaPlugin implements Listener { + + //用来记录在城镇之外的玩家 + Map playsOutTown = new Hashtable<>(); PlayerRiskManager playerRiskManager = null; - public PlayerRiskManager getPlayerRiskManager() { - if (playerRiskManager == null) { - throw new NullPointerException("PlayerRisk plugin is not initialized."); - } - return playerRiskManager; - } +// public PlayerRiskManager getPlayerRiskManager() { +// if (playerRiskManager == null) { +// throw new NullPointerException("PlayerRisk plugin is not initialized."); +// } +// return playerRiskManager; +// } public void load() { saveDefaultConfig(); @@ -29,6 +42,10 @@ public final class PlayerRisk extends JavaPlugin { // Plugin startup logic load(); getCommand("playerrisk").setExecutor(new CommandHandler(this)); + //注册监听器 + Bukkit.getPluginManager().registerEvents(this,this); + + getServer().getScheduler().scheduleSyncRepeatingTask(this, this::addRiskToOutTownPlayers, 0, 1200); } @Override @@ -36,4 +53,58 @@ public final class PlayerRisk extends JavaPlugin { // Plugin shutdown logic } + + /** + * TODO: 当玩家进入城镇时, 危险度不再增加. + * + * @param event The PlayerEnterTownEvent. + */ + @EventHandler + public void onPlayerEnterTown(PlayerEnterTownEvent event) { + //当玩家进入城镇后,移出map集合并且清零 + Player player = event.getPlayer(); + playsOutTown.remove(player.getName()); + throw new NotImplementedException("Not implemented yet."); + } + + /** + * TODO: 当玩家离开城镇时, 危险度开始增加. + * + * @param event The PlayerLeaveTownEvent. + */ + @EventHandler + public void onPlayerLeaveTown(PlayerLeaveTownEvent event) { + //当玩家离开城镇后,移出map集合并且清零 + Player player = event.getPlayer(); + playsOutTown.put(player.getName(),0); + + throw new NotImplementedException("Not implemented yet."); + } + + /** + * TODO: 当玩家死亡时, 危险度重置. + * + * @param event The PlayerDeathEvent. + */ + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + Player player = event.getEntity(); + playsOutTown.remove(player.getName()); + throw new NotImplementedException("Not implemented yet."); + } + // TODO: Add any other event handlers needed to manage player risk. + + //注册主任务,一直循环给增加在城镇之外的玩家的危险度 + public void addRiskToOutTownPlayers(){ + for (String name : playsOutTown.keySet()){ + //获取玩家当前的危险度 + int playerRiskLevel = playerRiskManager.getPlayerRiskLevel(name); + //日志报告,测试用 + getLogger().info(ChatColor.GREEN+name+"危险度为:"+playerRiskLevel); + //注意此处是把所有生物群系的危险度放在一起计算了, + if (playerRiskLevel < playerRiskManager.settings.getLevelMax()){ + playerRiskManager.setPlayerRiskLevel(name,playerRiskLevel + 1); + } + } + } }