Files
PlayerRisk/PlayerRisk.java
玉玉第一名 02bdcfb89d Add files via upload
进出城镇和死亡事件监听移到了主类中,在主类进行危险度操作但是没有区分生物群系
2024-03-14 21:12:52 +08:00

111 lines
3.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
import java.util.*;
public final class PlayerRisk extends JavaPlugin implements Listener {
//用来记录在城镇之外的玩家
Map<String,Integer> playsOutTown = new Hashtable<>();
PlayerRiskManager playerRiskManager = null;
// public PlayerRiskManager getPlayerRiskManager() {
// if (playerRiskManager == null) {
// throw new NullPointerException("PlayerRisk plugin is not initialized.");
// }
// return playerRiskManager;
// }
public void load() {
saveDefaultConfig();
FileConfiguration config = getConfig();
ConfigurationSection settingsSection = config.getConfigurationSection("settings");
playerRiskManager = new PlayerRiskManager(this, new PlayerRiskSettings(settingsSection));
}
@Override
public void onEnable() {
// Plugin startup logic
load();
getCommand("playerrisk").setExecutor(new CommandHandler(this));
//注册监听器
Bukkit.getPluginManager().registerEvents(this,this);
getServer().getScheduler().scheduleSyncRepeatingTask(this, this::addRiskToOutTownPlayers, 0, 1200);
}
@Override
public void onDisable() {
// 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);
}
}
}
}