Add files via upload
进出城镇和死亡事件监听移到了主类中,在主类进行危险度操作但是没有区分生物群系
This commit is contained in:
110
PlayerRisk.java
Normal file
110
PlayerRisk.java
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
77
PlayerRiskManager.java
Normal file
77
PlayerRiskManager.java
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
package com.sakurarealm.playerrisk.api;
|
||||||
|
|
||||||
|
import com.sakurarealm.playerrisk.PlayerRisk;
|
||||||
|
import com.sakurarealm.playerrisk.hook.PlaceHolderAPIHook;
|
||||||
|
import org.apache.commons.lang.NotImplementedException;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 危机度区间为0~level_max级,每次离开安全区(城镇),重置危险等级:每待n秒会使危机等级(变量)提升1点,
|
||||||
|
* 但开始计算时玩家在的每一个每种生物群系最多使危机等级提升10 (如上限level_max是50的话, 玩家至少进入5个不同的生物群系才能达到上限),
|
||||||
|
* 玩家每次死亡重生或回到安全区,会重置当前危机等级。
|
||||||
|
* 所有变量见config.yml
|
||||||
|
* <a href="https://drawrealm.feishu.cn/wiki/ZqTQwSQNyiZUIWkHCRgcuAcYn3f?chunked=false">...</a>
|
||||||
|
*/
|
||||||
|
public class PlayerRiskManager {
|
||||||
|
|
||||||
|
private final PlayerRisk plugin;
|
||||||
|
|
||||||
|
public final PlayerRiskSettings settings;
|
||||||
|
|
||||||
|
// TODO: Add any data structures needed to manage player risk.
|
||||||
|
|
||||||
|
public PlayerRiskManager(PlayerRisk plugin, PlayerRiskSettings settings) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
// Register the event listener.
|
||||||
|
// plugin.getServer().getPluginManager().registerEvents(new Listener(), plugin);
|
||||||
|
//注入settings
|
||||||
|
this.settings = settings;
|
||||||
|
new PlaceHolderAPIHook(this).register();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPlayerRiskLevel(String playerName) {
|
||||||
|
// Get offline player by name.
|
||||||
|
OfflinePlayer player = plugin.getServer().getOfflinePlayer(playerName);
|
||||||
|
return getPlayerRiskLevel(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPlayerRiskLevel(UUID playerId) {
|
||||||
|
// Get offline player by UUID.
|
||||||
|
OfflinePlayer player = plugin.getServer().getOfflinePlayer(playerId);
|
||||||
|
return getPlayerRiskLevel(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: 获取玩家的危险度等级
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
* @return 危险度等级
|
||||||
|
*/
|
||||||
|
public int getPlayerRiskLevel(OfflinePlayer player) {
|
||||||
|
throw new NotImplementedException("Not implemented yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayerRiskLevel(String playerName, int level) {
|
||||||
|
// Get offline player by name.
|
||||||
|
OfflinePlayer player = plugin.getServer().getOfflinePlayer(playerName);
|
||||||
|
setPlayerRiskLevel(player, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlayerRiskLevel(UUID playerId, int level) {
|
||||||
|
// Get offline player by UUID.
|
||||||
|
OfflinePlayer player = plugin.getServer().getOfflinePlayer(playerId);
|
||||||
|
setPlayerRiskLevel(player, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: 设置玩家的危险度等级
|
||||||
|
*/
|
||||||
|
public void setPlayerRiskLevel(OfflinePlayer player, int level) {
|
||||||
|
throw new NotImplementedException("Not implemented yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO Add any other methods needed to manage player risk.
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user