From fc3d2298fae0f27c3832a903bc9ab1c144d60079 Mon Sep 17 00:00:00 2001 From: Barazok Date: Sat, 10 Oct 2020 18:07:02 +0200 Subject: [PATCH] Working on project --- .../mineclass/classes/ClassWrapper.java | 64 ++++++++++--------- .../babamod/mineclass/classes/DwarfClass.java | 22 ------- .../babamod/mineclass/classes/ElfClass.java | 31 --------- .../mineclass/classes/FireDwarfClass.java | 22 ------- .../babamod/mineclass/classes/NagaClass.java | 22 ------- .../mineclass/commands/CommandClass.java | 5 -- .../mineclass/utils/ClassItemPossessed.java | 43 +++++++++++++ .../mineclass/utils/MineClassListeners.java | 58 ++++++++++++----- 8 files changed, 120 insertions(+), 147 deletions(-) create mode 100644 src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java diff --git a/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java b/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java index 89d8f26..9103947 100644 --- a/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java +++ b/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java @@ -5,11 +5,11 @@ import org.bukkit.Material; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; -import java.util.Arrays; -import java.util.Objects; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.Collections; public class ClassWrapper { @@ -84,33 +84,48 @@ public class ClassWrapper { return false; } - public static void enchantItem(Player player, Item item) { + public static void enchantItem(Player player, ItemStack itemStack) { if (AppliedStatus.getInstance().isDwarf(player.getName())) { - DwarfClass.enchantItem(item.getItemStack()); + setUnbreakableAndSoulbound(itemStack); + DwarfClass.enchantItem(itemStack); } if (AppliedStatus.getInstance().isElf(player.getName())) { - ElfClass.enchantItem(item.getItemStack()); + setUnbreakableAndSoulbound(itemStack); + ElfClass.enchantItem(itemStack); } if (AppliedStatus.getInstance().isFireDwarf(player.getName())) { - FireDwarfClass.enchantItem(item.getItemStack()); + setUnbreakableAndSoulbound(itemStack); + FireDwarfClass.enchantItem(itemStack); } if (AppliedStatus.getInstance().isNaga(player.getName())) { - NagaClass.enchantItem(item.getItemStack()); + setUnbreakableAndSoulbound(itemStack); + NagaClass.enchantItem(itemStack); } } - public static void givePlayerClassItem(Player player) { - if (AppliedStatus.getInstance().isDwarf(player.getName())) { - DwarfClass.giveClassItem(player); + public static void removeAllEnchantments(ItemStack itemStack) { + itemStack + .getEnchantments() + .keySet() + .forEach(itemStack::removeEnchantment); + removeUnbreakableAndSoulbound(itemStack); + } + + public static void setUnbreakableAndSoulbound(ItemStack itemStack) { + if (itemStack.getItemMeta() != null) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setUnbreakable(true); + itemMeta.setLore(Collections.singletonList("Soulbound")); + itemStack.setItemMeta(itemMeta); } - if (AppliedStatus.getInstance().isElf(player.getName())) { - ElfClass.giveClassItem(player); - } - if (AppliedStatus.getInstance().isFireDwarf(player.getName())) { - FireDwarfClass.giveClassItem(player); - } - if (AppliedStatus.getInstance().isNaga(player.getName())) { - NagaClass.giveClassItem(player); + } + + public static void removeUnbreakableAndSoulbound(ItemStack itemStack) { + if (itemStack.getItemMeta() != null) { + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.setUnbreakable(false); + itemMeta.setLore(new ArrayList<>()); + itemStack.setItemMeta(itemMeta); } } @@ -120,15 +135,4 @@ public class ClassWrapper { } return false; } - - public static void removePlayerClassItem(Player player) { - for (ItemStack content : - Arrays.stream(player.getInventory().getContents()) - .filter(Objects::nonNull) - .collect(Collectors.toList())) { - if (isSoulBound(content)) { - player.getInventory().remove(content); - } - } - } } diff --git a/src/main/java/net/babamod/mineclass/classes/DwarfClass.java b/src/main/java/net/babamod/mineclass/classes/DwarfClass.java index 0e2b4d0..6064397 100644 --- a/src/main/java/net/babamod/mineclass/classes/DwarfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/DwarfClass.java @@ -102,12 +102,6 @@ public class DwarfClass { } public static void enchantItem(ItemStack itemStack) { - if (itemStack.getItemMeta() != null) { - ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.setUnbreakable(true); - itemMeta.setLore(Collections.singletonList("Soulbound")); - itemStack.setItemMeta(itemMeta); - } classEnchantments .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( @@ -115,20 +109,4 @@ public class DwarfClass { itemStack.addUnsafeEnchantment( enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } - - public static void giveClassItem(Player player) { - List itemStackList = - Arrays.stream(player.getInventory().getContents()) - .filter(Objects::nonNull) - .map(ClassWrapper::isSoulBound) - .collect(Collectors.toList()); - if (itemStackList.contains(true)) { - return; - } - for (Material material : classEnchantments.keySet()) { - ItemStack itemStack = new ItemStack(material); - enchantItem(itemStack); - player.getInventory().addItem(itemStack); - } - } } diff --git a/src/main/java/net/babamod/mineclass/classes/ElfClass.java b/src/main/java/net/babamod/mineclass/classes/ElfClass.java index b6acd36..f8cc386 100644 --- a/src/main/java/net/babamod/mineclass/classes/ElfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/ElfClass.java @@ -80,17 +80,7 @@ public class ElfClass { return classEnchantments.containsKey(type); } - public static void makeSoulbound(ItemStack itemStack) { - if (itemStack.getItemMeta() != null) { - ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.setUnbreakable(true); - itemMeta.setLore(Collections.singletonList("Soulbound")); - itemStack.setItemMeta(itemMeta); - } - } - public static void enchantItem(ItemStack itemStack) { - makeSoulbound(itemStack); classEnchantments .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( @@ -99,25 +89,4 @@ public class ElfClass { .addUnsafeEnchantment( enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } - - public static void giveClassItem(Player player) { - List itemStackList = - Arrays.stream(player.getInventory().getContents()) - .filter(Objects::nonNull) - .map(ClassWrapper::isSoulBound) - .collect(Collectors.toList()); - if (itemStackList.contains(true)) { - return; - } - for (Material material : classEnchantments.keySet()) { - if (material.equals(Material.BOW)) { - ItemStack itemStack = new ItemStack(Material.ARROW); - makeSoulbound(itemStack); - player.getInventory().addItem(itemStack); - } - ItemStack itemStack = new ItemStack(material); - enchantItem(itemStack); - player.getInventory().addItem(itemStack); - } - } } diff --git a/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java b/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java index f754c36..97040e8 100644 --- a/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java @@ -119,12 +119,6 @@ public class FireDwarfClass { } public static void enchantItem(ItemStack itemStack) { - if (itemStack.getItemMeta() != null) { - ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.setUnbreakable(true); - itemMeta.setLore(Collections.singletonList("Soulbound")); - itemStack.setItemMeta(itemMeta); - } classEnchantments .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( @@ -133,20 +127,4 @@ public class FireDwarfClass { .addUnsafeEnchantment( enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } - - public static void giveClassItem(Player player) { - List itemStackList = - Arrays.stream(player.getInventory().getContents()) - .filter(Objects::nonNull) - .map(ClassWrapper::isSoulBound) - .collect(Collectors.toList()); - if (itemStackList.contains(true)) { - return; - } - for (Material material : classEnchantments.keySet()) { - ItemStack itemStack = new ItemStack(material); - enchantItem(itemStack); - player.getInventory().addItem(itemStack); - } - } } diff --git a/src/main/java/net/babamod/mineclass/classes/NagaClass.java b/src/main/java/net/babamod/mineclass/classes/NagaClass.java index 06f0118..66d976b 100644 --- a/src/main/java/net/babamod/mineclass/classes/NagaClass.java +++ b/src/main/java/net/babamod/mineclass/classes/NagaClass.java @@ -100,12 +100,6 @@ public class NagaClass { } public static void enchantItem(ItemStack itemStack) { - if (itemStack.getItemMeta() != null) { - ItemMeta itemMeta = itemStack.getItemMeta(); - itemMeta.setUnbreakable(true); - itemMeta.setLore(Collections.singletonList("Soulbound")); - itemStack.setItemMeta(itemMeta); - } classEnchantments .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( @@ -114,20 +108,4 @@ public class NagaClass { .addUnsafeEnchantment( enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } - - public static void giveClassItem(Player player) { - List itemStackList = - Arrays.stream(player.getInventory().getContents()) - .filter(Objects::nonNull) - .map(ClassWrapper::isSoulBound) - .collect(Collectors.toList()); - if (itemStackList.contains(true)) { - return; - } - for (Material material : classEnchantments.keySet()) { - ItemStack itemStack = new ItemStack(material); - enchantItem(itemStack); - player.getInventory().addItem(itemStack); - } - } } diff --git a/src/main/java/net/babamod/mineclass/commands/CommandClass.java b/src/main/java/net/babamod/mineclass/commands/CommandClass.java index 890ebce..c86813e 100644 --- a/src/main/java/net/babamod/mineclass/commands/CommandClass.java +++ b/src/main/java/net/babamod/mineclass/commands/CommandClass.java @@ -23,7 +23,6 @@ public class CommandClass implements CommandExecutor { AppliedStatus.getInstance().setDwarf(player.getName(), true); ClassWrapper.clearAllClassEffects(player); DwarfClass.reapplyEffects(player); - DwarfClass.giveClassItem(player); return true; } if (args[0].equals("elf")) { @@ -33,7 +32,6 @@ public class CommandClass implements CommandExecutor { AppliedStatus.getInstance().setElf(player.getName(), true); ClassWrapper.clearAllClassEffects(player); ElfClass.reapplyEffects(player); - ElfClass.giveClassItem(player); return true; } if (args[0].equals("fire_dwarf")) { @@ -43,7 +41,6 @@ public class CommandClass implements CommandExecutor { AppliedStatus.getInstance().setFireDwarf(player.getName(), true); ClassWrapper.clearAllClassEffects(player); FireDwarfClass.reapplyEffects(player); - FireDwarfClass.giveClassItem(player); return true; } if (args[0].equals("naga")) { @@ -53,7 +50,6 @@ public class CommandClass implements CommandExecutor { AppliedStatus.getInstance().setNaga(player.getName(), true); ClassWrapper.clearAllClassEffects(player); NagaClass.reapplyEffects(player); - NagaClass.giveClassItem(player); return true; } if (args[0].equals("clear")) { @@ -62,7 +58,6 @@ public class CommandClass implements CommandExecutor { AppliedStatus.getInstance().setFireDwarf(player.getName(), false); AppliedStatus.getInstance().setNaga(player.getName(), false); ClassWrapper.clearAllClassEffects(player); - ClassWrapper.removePlayerClassItem(player); return true; } if (args[0].equals("whoami")) { diff --git a/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java b/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java new file mode 100644 index 0000000..6c1d7dd --- /dev/null +++ b/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java @@ -0,0 +1,43 @@ +package net.babamod.mineclass.utils; + +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class ClassItemPossessed { + /** Instance unique pré-initialisée */ + private static ClassItemPossessed INSTANCE; + + private final HashMap> itemsPossessed; + + /** Constructeur privé */ + private ClassItemPossessed() { + itemsPossessed = new HashMap<>(); + } + + /** Point d'accès pour l'instance unique du singleton */ + public static synchronized ClassItemPossessed getInstance() { + if (INSTANCE == null) { + INSTANCE = new ClassItemPossessed(); + } + + return INSTANCE; + } + + public void addItems(String playerName, List itemStacks) { + List itemStackList = itemsPossessed.getOrDefault(playerName, new ArrayList<>()); + itemStackList.addAll(itemStacks); + itemsPossessed.put(playerName, itemStackList); + } + + public void clearItems(String playerName) { + itemsPossessed.put(playerName, new ArrayList<>()); + } + + public List getItems(String playerName) { + return itemsPossessed.get(playerName); + } +} diff --git a/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java b/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java index 5b933a6..c3e4e8e 100644 --- a/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java +++ b/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java @@ -3,22 +3,21 @@ package net.babamod.mineclass.utils; import net.babamod.mineclass.Mineclass; import net.babamod.mineclass.classes.ClassWrapper; import org.bukkit.Material; -import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.*; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.inventory.CraftingInventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import javax.swing.*; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -60,7 +59,7 @@ public class MineClassListeners implements Listener { ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType()))); if (ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType())) { player.sendMessage("Enchantable item !"); - ClassWrapper.enchantItem(player, event.getItem()); + ClassWrapper.enchantItem(player, event.getItem().getItemStack()); } } } @@ -70,19 +69,22 @@ public class MineClassListeners implements Listener { List itemStackList = event.getDrops().stream().filter(ClassWrapper::isSoulBound).collect(Collectors.toList()); event.getDrops().removeAll(itemStackList); - ClassWrapper.removePlayerClassItem(event.getEntity()); + ClassItemPossessed.getInstance().addItems(event.getEntity().getName(), itemStackList); } @EventHandler public void on(PlayerRespawnEvent event) { - ClassWrapper.givePlayerClassItem(event.getPlayer()); new ApplyClassStatusTask(this.plugin, event.getPlayer()).runTaskLater(this.plugin, 10); + ClassItemPossessed.getInstance() + .getItems(event.getPlayer().getName()) + .forEach(itemStack -> event.getPlayer().getInventory().addItem(itemStack)); + ClassItemPossessed.getInstance().clearItems(event.getPlayer().getName()); } @EventHandler public void on(PlayerDropItemEvent event) { if (ClassWrapper.isSoulBound(event.getItemDrop().getItemStack())) { - event.setCancelled(true); + ClassWrapper.removeAllEnchantments(event.getItemDrop().getItemStack()); } } @@ -100,17 +102,43 @@ public class MineClassListeners implements Listener { System.out.println(event.getHotbarButton()); System.out.println(event.getRawSlot()); System.out.println(event.getSlot()); - System.out.println("-----------------------------------"); - if (event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) { - if (event.getCurrentItem() != null && ClassWrapper.isSoulBound(event.getCurrentItem())) { - event.setCancelled(true); - return; + if (event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY) + && event.getClickedInventory() instanceof CraftingInventory) { + System.out.println("We are in a crafting inventory."); + CraftingInventory playerInventory = (CraftingInventory) event.getClickedInventory(); + if (event.getCurrentItem() != null + && playerInventory.getHolder() != null + && !ClassWrapper.isSoulBound(event.getCurrentItem())) { + System.out.println("Enchanting item !"); + ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCurrentItem()); } - if (event.getCursor() != null && ClassWrapper.isSoulBound(event.getCursor())) { - event.setCancelled(true); + if (event.getCursor() != null + && playerInventory.getHolder() != null + && !ClassWrapper.isSoulBound(event.getCursor())) { + System.out.println("Enchanting item !"); + ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor()); } } + + if (event.getAction().equals(InventoryAction.PLACE_ALL) + && event.getClickedInventory() instanceof PlayerInventory) { + System.out.println("We are in a player inventory."); + PlayerInventory playerInventory = (PlayerInventory) event.getClickedInventory(); + if (event.getCurrentItem() != null + && playerInventory.getHolder() != null + && !ClassWrapper.isSoulBound(event.getCurrentItem())) { + System.out.println("Enchanting item !"); + ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCurrentItem()); + } + if (event.getCursor() != null + && playerInventory.getHolder() != null + && !ClassWrapper.isSoulBound(event.getCursor())) { + System.out.println("Enchanting item !"); + ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor()); + } + } + System.out.println("-----------------------------------"); } /*