From 3a0c992a07c9b1e5171f5e375a470ca6729fd46c Mon Sep 17 00:00:00 2001 From: Barazok Date: Sat, 24 Oct 2020 17:53:47 +0200 Subject: [PATCH] Fix the on respawn event who don't reapply class --- .../mineclass/classes/MineClassFactory.java | 4 +++- .../babamod/mineclass/classes/MineClassImpl.java | 2 +- .../babamod/mineclass/commands/CommandClass.java | 6 +++--- .../mineclass/listeners/MineClassListeners.java | 14 +++++++------- .../net/babamod/mineclass/utils/AppliedStatus.java | 14 ++++++++++---- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java b/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java index 1b04c4c..abd9741 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java @@ -1,5 +1,6 @@ package net.babamod.mineclass.classes; +import net.babamod.mineclass.utils.AppliedStatus; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -61,7 +62,8 @@ public class MineClassFactory { public synchronized Optional getRightClass(Player player) { for (Map.Entry stringMineClassEntry : availableClasses.entrySet()) { - if (stringMineClassEntry.getValue().is(player)) { + if (AppliedStatus.getInstance().getStatus(player).equals(stringMineClassEntry.getKey()) + || stringMineClassEntry.getValue().is(player)) { return Optional.of(stringMineClassEntry.getValue()); } } diff --git a/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java b/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java index 20d5f87..d963bf8 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java @@ -30,7 +30,7 @@ public abstract class MineClassImpl implements MineClass { player.addPotionEffect( new PotionEffect(key, Integer.MAX_VALUE, value - 1, false, false)); }); - AppliedStatus.getInstance().setStatus(player.getName(), getCode()); + AppliedStatus.getInstance().setStatus(player, getCode()); } @Override diff --git a/src/main/java/net/babamod/mineclass/commands/CommandClass.java b/src/main/java/net/babamod/mineclass/commands/CommandClass.java index 7834ae6..31a8014 100644 --- a/src/main/java/net/babamod/mineclass/commands/CommandClass.java +++ b/src/main/java/net/babamod/mineclass/commands/CommandClass.java @@ -18,19 +18,19 @@ public class CommandClass implements CommandExecutor { if (sender instanceof Player) { Player player = (Player) sender; if (MineClassFactory.getInstance().getAvailableClassCodes().contains(args[0])) { - AppliedStatus.getInstance().setStatus(player.getName(), args[0]); + AppliedStatus.getInstance().setStatus(player, args[0]); MineClassFactory.clearAllClassEffects(player); MineClassFactory.getInstance().reapplyEffectsByCode(args[0], player); MineClassFactory.getInstance().giveItemsForClassByCode(args[0], player); return true; } if (args[0].equals("clear")) { - AppliedStatus.getInstance().setStatus(player.getName(), null); + AppliedStatus.getInstance().setStatus(player, null); MineClassFactory.clearAllClassEffects(player); return true; } if (args[0].equals("whoami")) { - String classCode = AppliedStatus.getInstance().getStatus(player.getName()); + String classCode = AppliedStatus.getInstance().getStatus(player); if (classCode != null && !classCode.equals("none")) { player.sendMessage(String.format("You are a %s.", classCode)); } else { diff --git a/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java b/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java index 9f4677f..f405001 100644 --- a/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java +++ b/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java @@ -144,7 +144,7 @@ public class MineClassListeners implements Listener { @EventHandler public void on(BlockDropItemEvent event) { Player player = event.getPlayer(); - if (AppliedStatus.getInstance().getStatus(player.getName()).equals("fire_dwarf")) { + if (AppliedStatus.getInstance().getStatus(player).equals("fire_dwarf")) { event .getItems() .forEach( @@ -166,7 +166,7 @@ public class MineClassListeners implements Listener { ((AbstractArrow) event.getProjectile()) .setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); } - if (AppliedStatus.getInstance().getStatus(player.getName()).equals("fire_dwarf")) { + if (AppliedStatus.getInstance().getStatus(player).equals("fire_dwarf")) { event.getProjectile().setFireTicks(10000); } } @@ -178,8 +178,8 @@ public class MineClassListeners implements Listener { if (event.getEntity() instanceof Player) { Player player = (Player) event.getEntity(); if (event.getCause().equals(EntityDamageEvent.DamageCause.FALL) - && (AppliedStatus.getInstance().getStatus(player.getName()).equals("elf") - || AppliedStatus.getInstance().getStatus(player.getName()).equals("ender_elf"))) { + && (AppliedStatus.getInstance().getStatus(player).equals("elf") + || AppliedStatus.getInstance().getStatus(player).equals("ender_elf"))) { event.setCancelled(true); } } @@ -189,7 +189,7 @@ public class MineClassListeners implements Listener { public void on(FoodLevelChangeEvent event) { if (event.getEntity() instanceof Player) { Player player = (Player) event.getEntity(); - if (AppliedStatus.getInstance().getStatus(player.getName()).equals("elf")) { + if (AppliedStatus.getInstance().getStatus(player).equals("elf")) { event.setCancelled(true); } } @@ -199,7 +199,7 @@ public class MineClassListeners implements Listener { public void on(EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Player) { Player player = (Player) event.getDamager(); - if (AppliedStatus.getInstance().getStatus(player.getName()).equals("ender_elf") + if (AppliedStatus.getInstance().getStatus(player).equals("ender_elf") && player.getInventory().getItemInMainHand().getType().equals(Material.ENDER_PEARL)) { PlayerHitCounter.getInstance().increaseHitCount(player); if (player.getAttackCooldown() == 1) { @@ -225,7 +225,7 @@ public class MineClassListeners implements Listener { @EventHandler public void on(PlayerInteractEvent event) { Player player = event.getPlayer(); - if (AppliedStatus.getInstance().getStatus(player.getName()).equals("ender_elf") + if (AppliedStatus.getInstance().getStatus(player).equals("ender_elf") && event.getItem() != null && event.getItem().getType().equals(Material.ENDER_PEARL)) { if (event.getAction().equals(Action.RIGHT_CLICK_AIR) diff --git a/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java b/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java index aaa4a0a..cfe850c 100644 --- a/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java +++ b/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java @@ -1,5 +1,7 @@ package net.babamod.mineclass.utils; +import org.bukkit.entity.Player; + import java.io.Serializable; import java.util.HashMap; import java.util.Objects; @@ -24,12 +26,16 @@ public class AppliedStatus implements Serializable { return INSTANCE; } - public synchronized void setStatus(String playerName, String status) { - appliedStatus.put(playerName, status); + public synchronized void setStatus(Player player, String status) { + appliedStatus.put(player.getName(), status); } - public synchronized String getStatus(String playerName) { - return appliedStatus.getOrDefault(playerName, "none"); + public synchronized String getStatus(Player player) { + return appliedStatus.getOrDefault(player.getName(), "none"); + } + + public synchronized boolean hasClass(Player player) { + return appliedStatus.get(player.getName()) != null; } @Override