- Баллы
- 36
- Имя в Minecraft
- slime_j
Привет. Делаю РПГ плагин и столкнулся с проблемой с кастомным здоровьем. Я его храню в конфиге и при рестарте всё сохраняется и работает четко. Но после обычного перезахода кастомное здоровье перестаёт убавляться. В чем может быть ошибка?
Код в Main
Вот код в классе PlayerJoin
Если где скобки не закрыл, неправильно скопировал =). Ребят помогите понять почему не убавляется кастомное здоровье после перезахода
Код в Main
Код:
public class Main extends JavaPlugin implements Listener{
private static Main Main;
public static World world;
public Logger log = Bukkit.getLogger();
public static HashMap<String, Integer> playermaxhealth = new HashMap<>();
public static HashMap<String, Integer> playerhealth = new HashMap<>();
@Override
public void onEnable() {
Main = this;
CustomEnchants.register();
Bukkit.getServer().getPluginManager().registerEvents(new Blocks(), this);
Bukkit.getServer().getPluginManager().registerEvents(new PlayerJoin(), this);
Bukkit.getServer().getPluginManager().registerEvents(this, this);
log.info("[RPG] Enabled!");
getCommand("heal").setExecutor(new Commands(this));
getCommand("sword").setExecutor(new Commands(this));
getCommand("shovel").setExecutor(new Commands(this));
/////// create config.yml
this.saveDefaultConfig();
restoreHealth();
if(this.getConfig().contains("data")) {
this.restoreHealth();
this.getConfig().set("data", null);
this.saveConfig();
}
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if(!player.hasPlayedBefore()) {
playermaxhealth.put(player.getName(), 20);
playerhealth.put(player.getName(), 20);
}else {
playermaxhealth.put(player.getName(), 100);
// playerhealth.put(player.getName(), 100);
}
}
@EventHandler
public void onLeave(PlayerQuitEvent event) {
saveHealth();
// playerhealth.remove(event.getPlayer().getName());
}
public void saveHealth() {
for(Map.Entry<String, Integer> entry : playerhealth.entrySet()) {
this.getConfig().set("data." + entry.getKey(), entry.getValue());
}
this.saveConfig();
}
public void restoreHealth() {
this.getConfig().getConfigurationSection("data").getKeys(false).forEach(key ->{
Integer content = (Integer) this.getConfig().get("data." + key);
playerhealth.put(key, content);
});
}
@EventHandler
public void playerDamage(EntityDamageByEntityEvent event) {
if((event.getDamager()) instanceof Monster) {
if(event.getEntity() instanceof Player){
event.getEntity().sendMessage(event.getEntity().getName());
event.getEntity().sendMessage("" +playerhealth.get(event.getEntity().getName()));
int LastDamage = (int) event.getDamage();
((Damageable) event.getEntity()).damage(0.001);
((Damageable) event.getEntity()).setHealth(( 20* (playerhealth.get(event.getEntity().getName())) / (playermaxhealth.get(event.getEntity().
getName())) ));
// if(!(playerhealth.get(event.getEntity().getName())<=1)){
playerhealth.put(event.getEntity().getName(), playerhealth.get(event.getEntity().getName())-LastDamage);
if(playerhealth.get(event.getEntity().getName())<=0) {
((Damageable) event.getEntity()).setHealth(0);
}
// }
}
}
}
@Override
public void onDisable() {
if(!playerhealth.isEmpty()) {
saveHealth();
}
}
public static Main getInstance() {
return Main;
}
}
Код:
public class PlayerJoin implements Listener{
public int alertId;
private int health;
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
Player player = e.getPlayer();
health = (int) player.getHealth();
Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), () ->{
if(!(player.getHealth()==health)) {
Main.playerhealth.put(player.getName(), (int) ( player.getHealth() * (Main.playermaxhealth.get(player.getName())) / 20));
health= (int) player.getHealth();
}
},0,1);
alertId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), () ->{
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent("§c❤" + Main.playerhealth.get(player.getName())
+ "/" + Main.playermaxhealth.get(player.getName()) + "❤"));
}, 0, 10);
}
@EventHandler
public void onDamage(EntityDamageByEntityEvent e) throws Exception {
if(e.getDamager() instanceof Player) {
Player player = (Player) e.getDamager();
if(player.getInventory().getItemInMainHand().getItemMeta()==null) {
return;
}
if(player.getInventory().getItemInMainHand().getItemMeta().getLore()==null) return;
double damage = (int) e.getDamage();
if(player.getInventory().getItemInMainHand().getItemMeta().getLore().contains(ChatColor.GRAY +
"Критический урон " + ChatColor.YELLOW+ "%35 " + "§a✘")){
double a=Math.random()*(100-1)+1;
if(a<25) {
double krit = (damage*35)/100;
LivingEntity entity = (LivingEntity) e.getEntity();
entity.damage(krit);
}
}