From 2e9f39715516fad6b32508bdf85e8eb509dbd15e Mon Sep 17 00:00:00 2001 From: Raw Leenc Date: Sat, 11 Dec 2021 21:38:42 +0100 Subject: [PATCH] Working on --- .../mineclass/classes/BeastMasterClass.java | 5 +++ .../rawmod/mineclass/classes/DwarfClass.java | 5 +++ .../rawmod/mineclass/classes/ElfClass.java | 5 +++ .../mineclass/classes/EnderElfClass.java | 5 +++ .../mineclass/classes/FireDwarfClass.java | 5 +++ .../rawmod/mineclass/classes/MineClass.java | 2 + .../mineclass/classes/MineClassFactory.java | 2 + .../listeners/MineClassListeners.java | 40 ++++++++++++++----- 8 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/rawmod/mineclass/classes/BeastMasterClass.java b/src/main/java/net/rawmod/mineclass/classes/BeastMasterClass.java index 30bd204..e5bfa5d 100644 --- a/src/main/java/net/rawmod/mineclass/classes/BeastMasterClass.java +++ b/src/main/java/net/rawmod/mineclass/classes/BeastMasterClass.java @@ -64,6 +64,11 @@ public class BeastMasterClass extends MineClassImpl { return "beast_master"; } + @Override + public String getName() { + return "Beast master"; + } + @Override public void giveItems(Player player) { if (!player.getInventory().contains(Material.BONE)) { diff --git a/src/main/java/net/rawmod/mineclass/classes/DwarfClass.java b/src/main/java/net/rawmod/mineclass/classes/DwarfClass.java index fe406ec..2c3e21f 100644 --- a/src/main/java/net/rawmod/mineclass/classes/DwarfClass.java +++ b/src/main/java/net/rawmod/mineclass/classes/DwarfClass.java @@ -93,6 +93,11 @@ public class DwarfClass extends MineClassImpl { return "dwarf"; } + @Override + public String getName() { + return "Dwarf"; + } + @Override public void giveItems(Player player) {} } diff --git a/src/main/java/net/rawmod/mineclass/classes/ElfClass.java b/src/main/java/net/rawmod/mineclass/classes/ElfClass.java index f033b5f..4318541 100644 --- a/src/main/java/net/rawmod/mineclass/classes/ElfClass.java +++ b/src/main/java/net/rawmod/mineclass/classes/ElfClass.java @@ -72,6 +72,11 @@ public class ElfClass extends MineClassImpl { return "elf"; } + @Override + public String getName() { + return "Elf"; + } + @Override public void giveItems(Player player) {} } diff --git a/src/main/java/net/rawmod/mineclass/classes/EnderElfClass.java b/src/main/java/net/rawmod/mineclass/classes/EnderElfClass.java index 230d4cc..98cf4cb 100644 --- a/src/main/java/net/rawmod/mineclass/classes/EnderElfClass.java +++ b/src/main/java/net/rawmod/mineclass/classes/EnderElfClass.java @@ -78,6 +78,11 @@ public class EnderElfClass extends MineClassImpl { return "ender_elf"; } + @Override + public String getName() { + return "Ender elf"; + } + @Override public void reapplyEffects(Player player) { super.reapplyEffects(player); diff --git a/src/main/java/net/rawmod/mineclass/classes/FireDwarfClass.java b/src/main/java/net/rawmod/mineclass/classes/FireDwarfClass.java index 7df572a..52775a2 100644 --- a/src/main/java/net/rawmod/mineclass/classes/FireDwarfClass.java +++ b/src/main/java/net/rawmod/mineclass/classes/FireDwarfClass.java @@ -108,6 +108,11 @@ public class FireDwarfClass extends MineClassImpl { return "fire_dwarf"; } + @Override + public String getName() { + return "Fire dwarf"; + } + @Override public void giveItems(Player player) {} } diff --git a/src/main/java/net/rawmod/mineclass/classes/MineClass.java b/src/main/java/net/rawmod/mineclass/classes/MineClass.java index 0e6dbe0..d2bd4bb 100644 --- a/src/main/java/net/rawmod/mineclass/classes/MineClass.java +++ b/src/main/java/net/rawmod/mineclass/classes/MineClass.java @@ -29,5 +29,7 @@ public interface MineClass { String getCode(); + String getName(); + void dropForbiddenItems(Player player); } diff --git a/src/main/java/net/rawmod/mineclass/classes/MineClassFactory.java b/src/main/java/net/rawmod/mineclass/classes/MineClassFactory.java index d2cb4c2..c21e6ca 100644 --- a/src/main/java/net/rawmod/mineclass/classes/MineClassFactory.java +++ b/src/main/java/net/rawmod/mineclass/classes/MineClassFactory.java @@ -55,6 +55,8 @@ public class MineClassFactory { List loreList = new ArrayList<>(); loreList.add("Soulbound"); loreList.add(player.getName()); + Optional mineClass = MineClassFactory.getInstance().getRightClass(player); + mineClass.ifPresent(aClass -> loreList.add(aClass.getName())); itemMeta.setLore(loreList); itemStack.setItemMeta(itemMeta); } diff --git a/src/main/java/net/rawmod/mineclass/listeners/MineClassListeners.java b/src/main/java/net/rawmod/mineclass/listeners/MineClassListeners.java index 3515216..cc6c415 100644 --- a/src/main/java/net/rawmod/mineclass/listeners/MineClassListeners.java +++ b/src/main/java/net/rawmod/mineclass/listeners/MineClassListeners.java @@ -20,6 +20,7 @@ import org.bukkit.event.entity.*; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; import org.bukkit.potion.PotionEffect; @@ -75,16 +76,25 @@ public class MineClassListeners implements Listener { applyBadEffects(player, itemInHand); } - @EventHandler - public void on(PlayerItemDamageEvent event) { - Player player = event.getPlayer(); - ItemStack itemInHand = event.getItem(); - applyBadEffects(player, itemInHand); + private boolean isItemforbidden(Player player, ItemStack itemStack) { + Optional mineClass = MineClassFactory.getInstance().getRightClass(player); + return mineClass + .map( + aClass -> + Optional.ofNullable(itemStack.getItemMeta()) + .map(ItemMeta::getLore) + .map(it -> it.contains(player.getName()) && !it.contains(aClass.getName())) + .orElse(false)) + .orElse(false); } private void applyBadEffects(Player player, ItemStack itemInHand) { + if (itemInHand == null) { + return; + } Optional mineClass = MineClassFactory.getInstance().getRightClass(player); - if (mineClass.isPresent() && mineClass.get().isItemForbidden(itemInHand.getType())) { + if (mineClass.isPresent() && mineClass.get().isItemForbidden(itemInHand.getType()) + || isItemforbidden(player, itemInHand)) { player.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 200, 0)); if (MineClassFactory.getInstance().getClassCode(player).equals("elf")) { player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 200, 3)); @@ -101,11 +111,10 @@ public class MineClassListeners implements Listener { public void on(PlayerItemHeldEvent event) { Player player = event.getPlayer(); ItemStack itemStack = player.getInventory().getItem(event.getNewSlot()); - player.sendMessage(String.valueOf(itemStack)); Optional mineClass = MineClassFactory.getInstance().getRightClass(player); if (itemStack != null - && mineClass.isPresent() - && mineClass.get().isItemForbidden(itemStack.getType())) { + && (mineClass.isPresent() && mineClass.get().isItemForbidden(itemStack.getType()) + || isItemforbidden(player, itemStack))) { player.sendMessage("Warning : You are unable to use this item efficiently."); } } @@ -285,6 +294,8 @@ public class MineClassListeners implements Listener { @EventHandler public void on(PlayerInteractEvent event) { Player player = event.getPlayer(); + ItemStack itemInHand = event.getItem(); + applyBadEffects(player, itemInHand); if (player.isSneaking() && event.getAction().equals(Action.RIGHT_CLICK_BLOCK) && event.useInteractedBlock().equals(Event.Result.ALLOW) @@ -320,6 +331,17 @@ public class MineClassListeners implements Listener { player.openInventory(player.getEnderChest()); event.setCancelled(true); } + if (player.isSneaking() + && (event.getAction().equals(Action.RIGHT_CLICK_BLOCK) + || event.getAction().equals(Action.RIGHT_CLICK_AIR)) + && event.getItem() != null) { + Optional mineClass = MineClassFactory.getInstance().getRightClass(player); + mineClass.ifPresent( + it -> { + it.enchantItem(event.getItem(), player); + event.setCancelled(true); + }); + } } private void invokeCat(PlayerInteractEvent event, Player player, ItemStack itemStack) {