diff --git a/src/main/java/net/babamod/mineclass/classes/MineClass.java b/src/main/java/net/babamod/mineclass/classes/MineClass.java index b2494af..85d0c89 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClass.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClass.java @@ -30,4 +30,6 @@ public interface MineClass { void giveItems(Player player); String getCode(); + + void dropForbiddenItems(Player player); } diff --git a/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java b/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java index abd9741..ae27af4 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClassFactory.java @@ -62,7 +62,8 @@ public class MineClassFactory { public synchronized Optional getRightClass(Player player) { for (Map.Entry stringMineClassEntry : availableClasses.entrySet()) { - if (AppliedStatus.getInstance().getStatus(player).equals(stringMineClassEntry.getKey()) + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals(stringMineClassEntry.getKey()) || stringMineClassEntry.getValue().is(player)) { return Optional.of(stringMineClassEntry.getValue()); } @@ -77,4 +78,8 @@ public class MineClassFactory { public void giveItemsForClassByCode(String code, Player player) { availableClasses.get(code).giveItems(player); } + + public void dropForbiddenItemsForClassByCode(String code, Player player) { + availableClasses.get(code).dropForbiddenItems(player); + } } diff --git a/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java b/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java index 45cead2..f0efa51 100644 --- a/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java +++ b/src/main/java/net/babamod/mineclass/classes/MineClassImpl.java @@ -51,4 +51,14 @@ public abstract class MineClassImpl implements MineClass { MineClassFactory.setUnbreakableAndSoulbound(itemStack); } } + + @Override + public void dropForbiddenItems(Player player) { + for (ItemStack content : player.getInventory().getContents()) { + if (content != null && getForbiddenItems().contains(content.getType())) { + player.getInventory().remove(content); + player.getWorld().dropItemNaturally(player.getLocation(), content); + } + } + } } diff --git a/src/main/java/net/babamod/mineclass/commands/CommandClass.java b/src/main/java/net/babamod/mineclass/commands/CommandClass.java index 31a8014..1c7a99e 100644 --- a/src/main/java/net/babamod/mineclass/commands/CommandClass.java +++ b/src/main/java/net/babamod/mineclass/commands/CommandClass.java @@ -22,6 +22,7 @@ public class CommandClass implements CommandExecutor { MineClassFactory.clearAllClassEffects(player); MineClassFactory.getInstance().reapplyEffectsByCode(args[0], player); MineClassFactory.getInstance().giveItemsForClassByCode(args[0], player); + MineClassFactory.getInstance().dropForbiddenItemsForClassByCode(args[0], player); return true; } if (args[0].equals("clear")) { diff --git a/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java b/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java index 84ab358..0525b9a 100644 --- a/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java +++ b/src/main/java/net/babamod/mineclass/listeners/MineClassListeners.java @@ -14,7 +14,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockDropItemEvent; import org.bukkit.event.entity.*; -import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; @@ -92,20 +91,7 @@ public class MineClassListeners implements Listener { @EventHandler public void on(InventoryClickEvent event) { - if ((event.getAction().equals(InventoryAction.PICKUP_ALL) - || event.getAction().equals(InventoryAction.PICKUP_HALF) - || event.getAction().equals(InventoryAction.PICKUP_ONE) - || event.getAction().equals(InventoryAction.PICKUP_SOME)) - && event.getWhoClicked() instanceof Player) { - if (isForbiddenItem(event)) { - event.setCancelled(true); - return; - } - enchantItem(event); - } - - if ((event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) - && event.getWhoClicked() instanceof Player) { + if (event.getWhoClicked() instanceof Player) { if (isForbiddenItem(event)) { event.setCancelled(true); return; @@ -144,7 +130,8 @@ public class MineClassListeners implements Listener { @EventHandler public void on(BlockDropItemEvent event) { Player player = event.getPlayer(); - if (AppliedStatus.getInstance().getStatus(player).equals("fire_dwarf")) { + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals("fire_dwarf")) { event .getItems() .forEach( @@ -166,7 +153,8 @@ public class MineClassListeners implements Listener { ((AbstractArrow) event.getProjectile()) .setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); } - if (AppliedStatus.getInstance().getStatus(player).equals("fire_dwarf")) { + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals("fire_dwarf")) { event.getProjectile().setFireTicks(10000); } } @@ -178,6 +166,7 @@ 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) != null && (AppliedStatus.getInstance().getStatus(player).equals("elf") || AppliedStatus.getInstance().getStatus(player).equals("ender_elf"))) { event.setCancelled(true); @@ -189,10 +178,12 @@ 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).equals("elf")) { + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals("elf")) { event.setCancelled(true); } - if (AppliedStatus.getInstance().getStatus(player).equals("ender_elf")) { + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals("ender_elf")) { int difference = player.getFoodLevel() - event.getFoodLevel(); if (difference > 0) { event.setFoodLevel(player.getFoodLevel() - (difference * 2)); @@ -205,7 +196,8 @@ 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).equals("ender_elf") + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals("ender_elf") && player.getInventory().getItemInMainHand().getType().equals(Material.ENDER_PEARL)) { PlayerHitCounter.getInstance().increaseHitCount(player); if (player.getAttackCooldown() == 1) { @@ -242,7 +234,8 @@ public class MineClassListeners implements Listener { if (player.getGameMode().equals(GameMode.CREATIVE)) { return; } - if (AppliedStatus.getInstance().getStatus(player).equals("ender_elf") + if (AppliedStatus.getInstance().getStatus(player) != null + && AppliedStatus.getInstance().getStatus(player).equals("ender_elf") && event.getEntity() instanceof EnderPearl) { ItemStack itemStack = new ItemStack(Material.ENDER_PEARL, 1); MineClassFactory.setUnbreakableAndSoulbound(itemStack); diff --git a/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java b/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java index cfe850c..adadcc7 100644 --- a/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java +++ b/src/main/java/net/babamod/mineclass/utils/AppliedStatus.java @@ -34,10 +34,6 @@ public class AppliedStatus implements Serializable { return appliedStatus.getOrDefault(player.getName(), "none"); } - public synchronized boolean hasClass(Player player) { - return appliedStatus.get(player.getName()) != null; - } - @Override public boolean equals(Object o) { if (this == o) return true;