From eac2fefa350880405a148ab1e65bbf93c76f757e Mon Sep 17 00:00:00 2001 From: Barazok Date: Sun, 11 Oct 2020 16:09:37 +0200 Subject: [PATCH] Working on project --- .../mineclass/classes/ClassWrapper.java | 30 +-- .../babamod/mineclass/classes/DwarfClass.java | 1 - .../babamod/mineclass/classes/ElfClass.java | 7 +- .../mineclass/classes/FireDwarfClass.java | 11 +- .../babamod/mineclass/classes/NagaClass.java | 6 +- .../mineclass/utils/ClassItemPossessed.java | 1 - .../mineclass/utils/MineClassListeners.java | 181 ++++++++++++------ .../mineclass/utils/SmeltingEngine.java | 24 +++ 8 files changed, 169 insertions(+), 92 deletions(-) create mode 100644 src/main/java/net/babamod/mineclass/utils/SmeltingEngine.java diff --git a/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java b/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java index 9103947..02531d5 100644 --- a/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java +++ b/src/main/java/net/babamod/mineclass/classes/ClassWrapper.java @@ -2,7 +2,6 @@ package net.babamod.mineclass.classes; import net.babamod.mineclass.utils.AppliedStatus; 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; @@ -86,28 +85,33 @@ public class ClassWrapper { public static void enchantItem(Player player, ItemStack itemStack) { if (AppliedStatus.getInstance().isDwarf(player.getName())) { - setUnbreakableAndSoulbound(itemStack); - DwarfClass.enchantItem(itemStack); + if (DwarfClass.isItemEnchantable(itemStack.getType())) { + setUnbreakableAndSoulbound(itemStack); + DwarfClass.enchantItem(itemStack); + } } if (AppliedStatus.getInstance().isElf(player.getName())) { - setUnbreakableAndSoulbound(itemStack); - ElfClass.enchantItem(itemStack); + if (ElfClass.isItemEnchantable(itemStack.getType())) { + setUnbreakableAndSoulbound(itemStack); + ElfClass.enchantItem(itemStack); + } } if (AppliedStatus.getInstance().isFireDwarf(player.getName())) { - setUnbreakableAndSoulbound(itemStack); - FireDwarfClass.enchantItem(itemStack); + if (FireDwarfClass.isItemEnchantable(itemStack.getType())) { + setUnbreakableAndSoulbound(itemStack); + FireDwarfClass.enchantItem(itemStack); + } } if (AppliedStatus.getInstance().isNaga(player.getName())) { - setUnbreakableAndSoulbound(itemStack); - NagaClass.enchantItem(itemStack); + if (NagaClass.isItemEnchantable(itemStack.getType())) { + setUnbreakableAndSoulbound(itemStack); + NagaClass.enchantItem(itemStack); + } } } public static void removeAllEnchantments(ItemStack itemStack) { - itemStack - .getEnchantments() - .keySet() - .forEach(itemStack::removeEnchantment); + itemStack.getEnchantments().keySet().forEach(itemStack::removeEnchantment); removeUnbreakableAndSoulbound(itemStack); } diff --git a/src/main/java/net/babamod/mineclass/classes/DwarfClass.java b/src/main/java/net/babamod/mineclass/classes/DwarfClass.java index 6064397..5b201b2 100644 --- a/src/main/java/net/babamod/mineclass/classes/DwarfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/DwarfClass.java @@ -5,7 +5,6 @@ import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; diff --git a/src/main/java/net/babamod/mineclass/classes/ElfClass.java b/src/main/java/net/babamod/mineclass/classes/ElfClass.java index f8cc386..71f6a5f 100644 --- a/src/main/java/net/babamod/mineclass/classes/ElfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/ElfClass.java @@ -3,10 +3,8 @@ package net.babamod.mineclass.classes; import net.babamod.mineclass.utils.Pair; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; -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 org.bukkit.potion.PotionEffectType; @@ -85,8 +83,7 @@ public class ElfClass { .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( enchantmentIntegerPair -> - itemStack - .addUnsafeEnchantment( - enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); + itemStack.addUnsafeEnchantment( + enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } } diff --git a/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java b/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java index 97040e8..7b66174 100644 --- a/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java +++ b/src/main/java/net/babamod/mineclass/classes/FireDwarfClass.java @@ -3,10 +3,8 @@ package net.babamod.mineclass.classes; import net.babamod.mineclass.utils.Pair; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; -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 org.bukkit.potion.PotionEffectType; @@ -32,7 +30,6 @@ public class FireDwarfClass { add(Material.IRON_SHOVEL); add(Material.NETHERITE_SHOVEL); add(Material.BOW); - add(Material.ARROW); add(Material.TRIDENT); } }; @@ -86,6 +83,9 @@ public class FireDwarfClass { new AbstractMap.SimpleEntry<>( Material.WOODEN_PICKAXE, Collections.singletonList(new Pair<>(Enchantment.DIG_SPEED, 5))), + new AbstractMap.SimpleEntry<>( + Material.CROSSBOW, + Collections.singletonList(new Pair<>(Enchantment.ARROW_INFINITE, 1))), new AbstractMap.SimpleEntry<>( Material.FLINT_AND_STEEL, new ArrayList>()) // See to make infinity working on crossbow @@ -123,8 +123,7 @@ public class FireDwarfClass { .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( enchantmentIntegerPair -> - itemStack - .addUnsafeEnchantment( - enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); + itemStack.addUnsafeEnchantment( + enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } } diff --git a/src/main/java/net/babamod/mineclass/classes/NagaClass.java b/src/main/java/net/babamod/mineclass/classes/NagaClass.java index 66d976b..1aba5df 100644 --- a/src/main/java/net/babamod/mineclass/classes/NagaClass.java +++ b/src/main/java/net/babamod/mineclass/classes/NagaClass.java @@ -5,7 +5,6 @@ import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -104,8 +103,7 @@ public class NagaClass { .getOrDefault(itemStack.getType(), new ArrayList<>()) .forEach( enchantmentIntegerPair -> - itemStack - .addUnsafeEnchantment( - enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); + itemStack.addUnsafeEnchantment( + enchantmentIntegerPair.getFirst(), enchantmentIntegerPair.getSecond())); } } diff --git a/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java b/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java index 6c1d7dd..7d4d3b7 100644 --- a/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java +++ b/src/main/java/net/babamod/mineclass/utils/ClassItemPossessed.java @@ -3,7 +3,6 @@ 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; diff --git a/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java b/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java index c3e4e8e..d252efe 100644 --- a/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java +++ b/src/main/java/net/babamod/mineclass/utils/MineClassListeners.java @@ -4,21 +4,22 @@ import net.babamod.mineclass.Mineclass; import net.babamod.mineclass.classes.ClassWrapper; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.entity.SmallFireball; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; 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 java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -50,15 +51,10 @@ public class MineClassListeners implements Listener { public void on(EntityPickupItemEvent event) { if (event.getEntity() instanceof Player) { Player player = (Player) event.getEntity(); - player.sendMessage("You picked up " + event.getItem().getItemStack().getType()); if (ClassWrapper.isItemForbidden(player, event.getItem().getItemStack().getType())) { event.setCancelled(true); } - player.sendMessage( - String.valueOf( - ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType()))); if (ClassWrapper.isItemEnchantable(player, event.getItem().getItemStack().getType())) { - player.sendMessage("Enchantable item !"); ClassWrapper.enchantItem(player, event.getItem().getItemStack()); } } @@ -82,66 +78,127 @@ public class MineClassListeners implements Listener { } @EventHandler - public void on(PlayerDropItemEvent event) { - if (ClassWrapper.isSoulBound(event.getItemDrop().getItemStack())) { - ClassWrapper.removeAllEnchantments(event.getItemDrop().getItemStack()); + 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.PLACE_ALL) + || event.getAction().equals(InventoryAction.PLACE_ONE) + || event.getAction().equals(InventoryAction.PLACE_SOME)) + && event.getWhoClicked() instanceof Player + && !(event.getClickedInventory() instanceof PlayerInventory)) { + unenchantItem(event); + } + + if ((event.getAction().equals(InventoryAction.MOVE_TO_OTHER_INVENTORY)) + && event.getWhoClicked() instanceof Player) { + if (isForbiddenItem(event)) { + event.setCancelled(true); + return; + } + enchantItem(event); + } + } + + private boolean isForbiddenItem(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + if (AppliedStatus.getInstance().hasAClass(player.getName())) { + if (event.getCurrentItem() != null + && ClassWrapper.isItemForbidden(player, event.getCurrentItem().getType())) { + return true; + } + return event.getCursor() != null + && ClassWrapper.isItemForbidden(player, event.getCursor().getType()); + } + return false; + } + + private void enchantItem(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + if (AppliedStatus.getInstance().hasAClass(player.getName())) { + if (event.getCurrentItem() != null && !ClassWrapper.isSoulBound(event.getCurrentItem())) { + ClassWrapper.enchantItem(player, event.getCurrentItem()); + } + if (event.getCursor() != null && !ClassWrapper.isSoulBound(event.getCursor())) { + ClassWrapper.enchantItem(player, event.getCursor()); + } + } + } + + private void unenchantItem(InventoryClickEvent event) { + Player player = (Player) event.getWhoClicked(); + if (AppliedStatus.getInstance().hasAClass(player.getName())) { + if (event.getCurrentItem() != null && ClassWrapper.isSoulBound(event.getCurrentItem())) { + ClassWrapper.removeAllEnchantments(event.getCurrentItem()); + } + if (event.getCursor() != null && ClassWrapper.isSoulBound(event.getCursor())) { + ClassWrapper.removeAllEnchantments(event.getCursor()); + } } } @EventHandler - public void on(InventoryClickEvent event) { - System.out.println("InventoryClickEvent triggered !"); - System.out.println("-----------------------------------"); - System.out.println(event.getAction()); - System.out.println(event.getClick()); - System.out.println(event.getClickedInventory()); - System.out.println(event.getCurrentItem()); - System.out.println(event.getCursor()); - System.out.println(event.getSlotType()); - System.out.println(Arrays.toString(event.getHandlers().getRegisteredListeners())); - System.out.println(event.getHotbarButton()); - System.out.println(event.getRawSlot()); - System.out.println(event.getSlot()); - - 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 - && playerInventory.getHolder() != null - && !ClassWrapper.isSoulBound(event.getCursor())) { - System.out.println("Enchanting item !"); - ClassWrapper.enchantItem((Player) playerInventory.getHolder(), event.getCursor()); + public void on(BlockBreakEvent event) { + Player player = event.getPlayer(); + if (AppliedStatus.getInstance().isFireDwarf(player.getName())) { + List itemStacks = + event.getBlock().getDrops().stream() + .map( + itemStack -> { + ItemStack smelted = SmeltingEngine.smelt(itemStack); + if (smelted != null) { + return smelted; + } else return itemStack; + }) + .collect(Collectors.toList()); + if (!itemStacks.isEmpty()) { + event.setCancelled(true); + itemStacks.forEach( + itemStack -> + event + .getBlock() + .getWorld() + .dropItemNaturally(event.getBlock().getLocation(), itemStack)); + event.getBlock().setType(Material.AIR); } } - - 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("-----------------------------------"); } - /* - IMPOSSIBLE DE GIVER LES ITEMS DE CLASSES. - */ + @EventHandler + public void on(PlayerInteractEvent event) { + if (event.getItem() != null && event.getItem().getType().equals(Material.CROSSBOW)) { + if (event + .getPlayer() + .getInventory() + .getItemInOffHand() + .getType() + .equals(Material.FIREWORK_ROCKET)) { + event + .getPlayer() + .sendMessage("You've interacted with a crossbow with a firework in offhand."); + } + } + } + + @EventHandler + public void on(EntityShootBowEvent event) { + if (event.getBow() != null && event.getBow().getType().equals(Material.CROSSBOW)) { + if (event.getEntity() instanceof Player) { + Player player = (Player) event.getEntity(); + if (AppliedStatus.getInstance().isFireDwarf(player.getName())) { + player.getInventory().addItem(new ItemStack(Material.ARROW)); + event.setProjectile(player.launchProjectile(SmallFireball.class)); + } + } + } + } } diff --git a/src/main/java/net/babamod/mineclass/utils/SmeltingEngine.java b/src/main/java/net/babamod/mineclass/utils/SmeltingEngine.java new file mode 100644 index 0000000..912c192 --- /dev/null +++ b/src/main/java/net/babamod/mineclass/utils/SmeltingEngine.java @@ -0,0 +1,24 @@ +package net.babamod.mineclass.utils; + +import org.bukkit.Bukkit; +import org.bukkit.inventory.FurnaceRecipe; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; + +import java.util.Iterator; + +public class SmeltingEngine { + + public static ItemStack smelt(ItemStack itemStack) { + ItemStack result = null; + Iterator iter = Bukkit.recipeIterator(); + while (iter.hasNext()) { + Recipe recipe = iter.next(); + if (!(recipe instanceof FurnaceRecipe)) continue; + if (((FurnaceRecipe) recipe).getInput().getType() != itemStack.getType()) continue; + result = recipe.getResult(); + break; + } + return result; + } +}