From c0c18048a7575b4330703654f649f9b01297dc74 Mon Sep 17 00:00:00 2001 From: FN-FAL113 <88238718+FN-FAL113@users.noreply.github.com> Date: Wed, 23 Feb 2022 12:19:53 +0800 Subject: [PATCH] Rewrite sticks, throwables and new gem --- pom.xml | 2 +- .../fnamplifications/FNAmplifications.java | 6 + .../fnamplifications/Gems/ArmorImpairGem.java | 4 +- .../fnamplifications/Gems/AxeThrowieGem.java | 16 +- .../fnamplifications/Gems/BlindBindGem.java | 4 +- .../fnamplifications/Gems/DamnationGem.java | 16 +- .../fnamplifications/Gems/HastyGem.java | 4 +- .../Gems/Implementation/Gem.java | 11 +- .../Gems/Implementation/ReturnWeaponTask.java | 82 ++++++++ .../Gems/Implementation/ThrowWeaponTask.java | 194 ++++++++---------- .../Gems/Implementation/ThrowableWeapon.java | 96 +++++++++ .../fnamplifications/Gems/ImpostorGem.java | 4 +- .../fnamplifications/Gems/InfernoGem.java | 4 +- .../Gems/Listeners/GemListener.java | 2 + .../Gems/PsychokinesisGem.java | 4 +- .../fnamplifications/Gems/RetaliateGem.java | 95 +++++++++ .../fnamplifications/Gems/TelepathyGem.java | 4 +- .../fnamplifications/Gems/ThornAwayGem.java | 4 +- .../fnamplifications/Gems/ThunderBoltGem.java | 4 +- .../fnamplifications/Gems/TriSwordGem.java | 16 +- .../Items/FNAmpItemSetup.java | 1 + .../fnamplifications/Items/FNAmpItems.java | 16 ++ .../MysteriousItems/MainStick.java | 141 +++++++++++++ .../MysteriousItems/MysteryStick.java | 136 ++++-------- .../MysteriousItems/MysteryStick10.java | 181 +++++----------- .../MysteriousItems/MysteryStick11.java | 169 +++++---------- .../MysteriousItems/MysteryStick2.java | 137 ++++--------- .../MysteriousItems/MysteryStick3.java | 122 +++-------- .../MysteriousItems/MysteryStick4.java | 146 ++++--------- .../MysteriousItems/MysteryStick5.java | 136 ++++-------- .../MysteriousItems/MysteryStick6.java | 129 +++--------- .../MysteriousItems/MysteryStick7.java | 172 +++++----------- .../MysteriousItems/MysteryStick8.java | 169 +++++---------- .../MysteriousItems/MysteryStick9.java | 148 ++++--------- .../Utils/PlayerJoinLister.java | 6 +- 35 files changed, 1071 insertions(+), 1310 deletions(-) create mode 100644 src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ReturnWeaponTask.java create mode 100644 src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowableWeapon.java create mode 100644 src/main/java/ne/fnfal113/fnamplifications/Gems/RetaliateGem.java create mode 100644 src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MainStick.java diff --git a/pom.xml b/pom.xml index 81f06c30..5ded72cb 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ne.fnfal113 FNAmplifications - 2.9.9 + 3.0.0 jar FNAmplifications diff --git a/src/main/java/ne/fnfal113/fnamplifications/FNAmplifications.java b/src/main/java/ne/fnfal113/fnamplifications/FNAmplifications.java index e238eb5b..9ab6153a 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/FNAmplifications.java +++ b/src/main/java/ne/fnfal113/fnamplifications/FNAmplifications.java @@ -16,6 +16,7 @@ import ne.fnfal113.fnamplifications.Utils.PlayerJoinLister; import org.bstats.bukkit.Metrics; import org.bstats.charts.AdvancedPie; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import ne.fnfal113.fnamplifications.Items.FNAmpItemSetup; @@ -64,6 +65,11 @@ public void onEnable() { } } + @Override + public void onDisable(){ + Bukkit.getScheduler().cancelTasks(FNAmplifications.getInstance()); + } + @Nonnull @Override public JavaPlugin getJavaPlugin() { diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/ArmorImpairGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/ArmorImpairGem.java index 39c9b040..ca2a95b5 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/ArmorImpairGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/ArmorImpairGem.java @@ -53,7 +53,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -63,7 +63,7 @@ public void onDrag(InventoryClickEvent event, Player player){ } event.setCancelled(true); } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); event.setCancelled(true); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/AxeThrowieGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/AxeThrowieGem.java index 49f5273f..2cbcbda3 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/AxeThrowieGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/AxeThrowieGem.java @@ -9,7 +9,7 @@ import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Gems.Implementation.Gem; import ne.fnfal113.fnamplifications.Gems.Interface.GemImpl; -import ne.fnfal113.fnamplifications.Gems.Implementation.ThrowWeaponTask; +import ne.fnfal113.fnamplifications.Gems.Implementation.ThrowableWeapon; import ne.fnfal113.fnamplifications.Gems.Implementation.WeaponArmorEnum; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnGemAltar; @@ -22,11 +22,12 @@ import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +@SuppressWarnings("ConstantConditions") public class AxeThrowieGem extends SlimefunItem implements GemImpl { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); - private final ThrowWeaponTask throwWeaponTask = new ThrowWeaponTask(); + private final ThrowableWeapon throwableWeapon = new ThrowableWeapon(); public AxeThrowieGem(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); @@ -46,7 +47,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -55,7 +56,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); @@ -73,8 +74,11 @@ public int checkGemAmount(PersistentDataContainer pdc, ItemStack itemStack){ public void onRightClick(Player player){ ItemStack itemStack = player.getInventory().getItemInMainHand(); - throwWeaponTask.throwWeapon(player, throwWeaponTask.spawnArmorstand(player, itemStack.clone(), false), itemStack.clone(), - true, false, false); + PersistentDataContainer pdc = itemStack.getItemMeta().getPersistentDataContainer(); + NamespacedKey key = new NamespacedKey(FNAmplifications.getInstance(), "return_weapon"); + + throwableWeapon.throwWeapon(player, throwableWeapon.spawnArmorstand(player, itemStack.clone(), false), itemStack.clone(), + true, false, false, Boolean.parseBoolean(pdc.getOrDefault(key, PersistentDataType.STRING, "false"))); itemStack.setAmount(0); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/BlindBindGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/BlindBindGem.java index a8c5ed28..610d9a7c 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/BlindBindGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/BlindBindGem.java @@ -55,7 +55,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -64,7 +64,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/DamnationGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/DamnationGem.java index ead8286c..5025dd18 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/DamnationGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/DamnationGem.java @@ -9,7 +9,7 @@ import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Gems.Implementation.Gem; import ne.fnfal113.fnamplifications.Gems.Interface.GemImpl; -import ne.fnfal113.fnamplifications.Gems.Implementation.ThrowWeaponTask; +import ne.fnfal113.fnamplifications.Gems.Implementation.ThrowableWeapon; import ne.fnfal113.fnamplifications.Gems.Implementation.WeaponArmorEnum; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnGemAltar; @@ -22,11 +22,12 @@ import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +@SuppressWarnings("ConstantConditions") public class DamnationGem extends SlimefunItem implements GemImpl { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); - private final ThrowWeaponTask throwWeaponTask = new ThrowWeaponTask(); + private final ThrowableWeapon throwableWeapon = new ThrowableWeapon(); public DamnationGem(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); @@ -47,7 +48,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -56,7 +57,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); @@ -74,8 +75,11 @@ public int checkGemAmount(PersistentDataContainer pdc, ItemStack itemStack){ public void onRightClick(Player player){ ItemStack itemStack = player.getInventory().getItemInMainHand(); - if(throwWeaponTask.isBelow4Weapons(player)) { - throwWeaponTask.floatThrowItem(player, itemStack.clone()); + if(throwableWeapon.isBelow4Weapons(player)) { + PersistentDataContainer pdc = itemStack.getItemMeta().getPersistentDataContainer(); + NamespacedKey key = new NamespacedKey(FNAmplifications.getInstance(), "return_weapon"); + + throwableWeapon.floatThrowItem(player, itemStack.clone(), Boolean.parseBoolean(pdc.getOrDefault(key, PersistentDataType.STRING, "false"))); itemStack.setAmount(0); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/HastyGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/HastyGem.java index b84243c8..c2e6887e 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/HastyGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/HastyGem.java @@ -59,7 +59,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -69,7 +69,7 @@ public void onDrag(InventoryClickEvent event, Player player){ } event.setCancelled(true); } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); event.setCancelled(true); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/Gem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/Gem.java index 87575b3d..92e842c0 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/Gem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/Gem.java @@ -19,6 +19,7 @@ import java.util.List; import java.util.Locale; +@SuppressWarnings("ConstantConditions") public class Gem { private final SlimefunItem slimefunItem; @@ -36,7 +37,7 @@ public Gem(SlimefunItem sfItem, ItemStack itemToSocket, Player p){ this.sfItemName = sfItem.getItemName(); this.gemID = sfItem.getId(); this.player = p; - this.key1 = new NamespacedKey(FNAmplifications.getInstance(), sfItem.getId()); + this.key1 = new NamespacedKey(FNAmplifications.getInstance(), sfItem.getId().toLowerCase()); this.key2 = new NamespacedKey(FNAmplifications.getInstance(), itemToSocket.getType().toString().toLowerCase() + "_socket_amount"); } @@ -127,4 +128,12 @@ public boolean isSameGem(ItemStack itemStack){ return container.has(getStorageKey1(), PersistentDataType.STRING); } + public void retaliateWeapon(){ + ItemMeta meta = getSocketedItemStack().getItemMeta(); + PersistentDataContainer pdc = meta.getPersistentDataContainer(); + + pdc.set(new NamespacedKey(FNAmplifications.getInstance(), "return_weapon"), PersistentDataType.STRING, "true"); + getSocketedItemStack().setItemMeta(meta); + } + } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ReturnWeaponTask.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ReturnWeaponTask.java new file mode 100644 index 00000000..9926fc09 --- /dev/null +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ReturnWeaponTask.java @@ -0,0 +1,82 @@ +package ne.fnfal113.fnamplifications.Gems.Implementation; + +import lombok.Getter; +import ne.fnfal113.fnamplifications.Utils.Utils; +import org.bukkit.Location; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +public class ReturnWeaponTask extends BukkitRunnable { + + @Getter + private final ItemStack itemStack; + @Getter + private final ArmorStand armorStand; + @Getter + private final Player player; + + public ReturnWeaponTask(ItemStack itemStack, ArmorStand armorStand, Player player){ + this.itemStack = itemStack; + this.armorStand = armorStand; + this.player = player; + } + + @Override + public void run() { + Location asLocation = getArmorStand().getLocation(); + Vector asVector = asLocation.toVector(); + Location pLocation = getPlayer().getLocation(); + Vector pVector = pLocation.toVector(); + + getArmorStand().teleport(asLocation.subtract(asVector.subtract(pVector).normalize()).setDirection(pLocation.getDirection())); + + if(!getPlayer().isOnline()){ + dropItem(asLocation); + + stopTask(); + } + + if(distanceBetween(asLocation, pLocation) > 150){ + Location dropLoc = dropItem(asLocation); + getPlayer().sendMessage(Utils.colorTranslator("&cWeapon has not been returned because you're too far!")); + getPlayer().sendMessage(Utils.colorTranslator("&cit was dropped at: &e" + + "x: " + (int) dropLoc.getX() + ", " + + "y: " + (int) dropLoc.getY() + ", " + + "z: " + (int) dropLoc.getZ())); + + stopTask(); + } + + if(distanceBetween(asLocation, pLocation) < 0.5){ + if(getPlayer().getInventory().firstEmpty() == -1){ + getPlayer().sendMessage(Utils.colorTranslator("&eInventory full! dropped the item instead")); + dropItem(pLocation); + } else { + getPlayer().getInventory().addItem(getItemStack().clone()); + } + + stopTask(); + } + } + + public Location dropItem(Location location){ + Item droppedItem = getPlayer().getWorld().dropItem(location, getItemStack().clone()); + droppedItem.setOwner(getPlayer().getUniqueId()); + droppedItem.setGlowing(true); + + return droppedItem.getLocation(); + } + + public double distanceBetween(Location asLoc, Location pLoc){ + return asLoc.distance(pLoc); + } + + public void stopTask(){ + getArmorStand().remove(); + this.cancel(); + } +} diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowWeaponTask.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowWeaponTask.java index dc21d870..dea6f107 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowWeaponTask.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowWeaponTask.java @@ -8,140 +8,110 @@ import org.bukkit.*; import org.bukkit.entity.*; import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitTask; -import org.bukkit.util.EulerAngle; +import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.RayTraceResult; import org.bukkit.util.Vector; -import java.util.*; +import java.util.List; +import java.util.Objects; import java.util.concurrent.ThreadLocalRandom; -@Getter -public class ThrowWeaponTask { - - private final Map WEAPONS = new HashMap<>(); - - public ThrowWeaponTask(){ - +public class ThrowWeaponTask extends BukkitRunnable { + + @Getter + private final ArmorStand armorStand; + @Getter + private final Player player; + @Getter + private final ItemStack itemStack; + @Getter + private final boolean rotateWeapon; + @Getter + private final boolean isCutThrough; + @Getter + private final boolean isTriWeapon; + @Getter + private final boolean returnWeapon; + @Getter + private final Vector vector; + + private final ReturnWeaponTask returnWeaponTask; + + public ThrowWeaponTask(ArmorStand armorStand, Player player, ItemStack itemStack, boolean rotateWeapon, boolean isCutThrough, boolean isTriWeapon, boolean returnWeapon, Vector vector){ + this.armorStand = armorStand; + this.player = player; + this.itemStack = itemStack; + this.rotateWeapon = rotateWeapon; + this.isCutThrough = isCutThrough; + this.isTriWeapon = isTriWeapon; + this.returnWeapon = returnWeapon; + this.vector = vector; + this.returnWeaponTask = new ReturnWeaponTask(itemStack, armorStand, player); } - public ArmorStand spawnArmorstand(Player player, ItemStack itemStack, boolean isTriSword){ - - return player.getWorld().spawn(player.getLocation().add(0, 0.9, 0), ArmorStand.class, armorStand ->{ - armorStand.setArms(true); - armorStand.setGravity(false); - armorStand.setVisible(false); - armorStand.setSmall(true); - armorStand.setMarker(true); - armorStand.setCustomNameVisible(false); - armorStand.setPersistent(false); - if(!isTriSword) { - armorStand.setRightArmPose(Utils.setRightArmAngle(armorStand, 270, 0, 0)); - Objects.requireNonNull(armorStand.getEquipment()).setItemInMainHand(itemStack.clone()); - } else{ - armorStand.setRightArmPose(Utils.setRightArmAngle(armorStand, 0, 0, 0)); - Objects.requireNonNull(armorStand.getEquipment()).setItemInMainHand(itemStack.clone()); - Objects.requireNonNull(armorStand.getEquipment()).setItemInOffHand(itemStack.clone()); - Objects.requireNonNull(armorStand.getEquipment()).setHelmet(itemStack.clone()); - } - }); - } - - public boolean isBelow4Weapons(Player player){ - if(!WEAPONS.containsKey(player.getUniqueId())){ - WEAPONS.put(player.getUniqueId(), 0); - } + @Override + public void run() { + getArmorStand().teleport(getArmorStand().getLocation().add(getVector())); + getArmorStand().getWorld().spawnParticle(Particle.DRIPPING_OBSIDIAN_TEAR, getArmorStand().getLocation().add(0,0, 0.5), 2); - if(WEAPONS.get(player.getUniqueId()) < 4) { - WEAPONS.put(player.getUniqueId(), WEAPONS.get(player.getUniqueId()) + 1); - return true; - } else{ - player.sendMessage(Utils.colorTranslator("&eLimit reached! You can only have 4 weapons simultaneously")); - return false; + // rotate weapon by 45 degrees each tick + if(isRotateWeapon()) { + getArmorStand().setRightArmPose(Utils.setRightArmAngle(getArmorStand(), 45, 0, 0)); } - } - - public void floatThrowItem(Player player, ItemStack itemStack){ - ArmorStand as = spawnArmorstand(player, itemStack, false); - - int id = Bukkit.getScheduler().runTaskTimer(FNAmplifications.getInstance(), () -> { - int x = ThreadLocalRandom.current().nextInt(3); - int xFinal = x < 1 ? -2 : 2; - int z = ThreadLocalRandom.current().nextInt(3); - int zFinal = z < 1 ? -2 : 2; - as.teleport(player.getLocation().clone().add(xFinal, 0.8, zFinal)); - }, 5L, 12L).getTaskId(); - - Bukkit.getScheduler().runTaskLater(FNAmplifications.getInstance(), () -> { - WEAPONS.put(player.getUniqueId(), WEAPONS.get(player.getUniqueId()) - 1); - Bukkit.getScheduler().cancelTask(id); - as.setRightArmPose(new EulerAngle(0, 0, 0)); - throwWeapon(player, as, itemStack.clone(), false, false, false); - }, 160L); - } - - - public void throwWeapon(Player player, ArmorStand as, ItemStack itemStack, boolean rotateWeapon, boolean cutThrough, boolean isTriWeapon){ - Vector vector = player.getLocation().add(player.getLocation().getDirection().multiply(9).normalize()) - .subtract(player.getLocation().toVector()).toVector(); - - Bukkit.getScheduler().runTaskLater(FNAmplifications.getInstance(), () -> { - as.teleport(player.getLocation().add(0,0.9, 0)); + RayTraceResult result = getArmorStand().rayTraceBlocks(0.107); + List entityList = getArmorStand().getNearbyEntities(0.3, 0.3, 0.3); - if(isTriWeapon){ - as.setRightArmPose(Utils.setRightArmAngle(as, 0, 348, 0)); - as.setLeftArmPose(Utils.setLeftArmAngle(as, 0, 12, 0)); - as.setHeadPose(Utils.setHeadAngle(as, 98, 32, 97)); + // check if the raytrace result has a block within the max distance + if(result != null && Objects.requireNonNull(result.getHitBlock()).getType() != Material.GRASS && + !Tag.FLOWERS.isTagged(result.getHitBlock().getType())){ + if(isReturnWeapon()) { + returnWeapon(); + return; } - Bukkit.getScheduler().runTaskTimer(FNAmplifications.getInstance(), task -> { - as.teleport(as.getLocation().add(vector)); - as.getWorld().spawnParticle(Particle.DRIPPING_OBSIDIAN_TEAR, as.getLocation().add(0,0, 0.2), 2); - if(rotateWeapon) { - as.setRightArmPose(Utils.setRightArmAngle(as, 45, 0, 0)); - } - RayTraceResult result = as.rayTraceBlocks(0.105); - List entityList = as.getNearbyEntities(0.3, 0.3, 0.3); + getPlayer().sendMessage(weaponTask(getArmorStand(), getPlayer(), getItemStack().clone())); + return; + } - if(result != null && Objects.requireNonNull(result.getHitBlock()).getType() != Material.GRASS && - !Tag.FLOWERS.isTagged(result.getHitBlock().getType())){ - player.sendMessage(weaponTask(as, player, task, itemStack.clone())); - return; - } - if(!entityList.isEmpty() && !entityList.contains(player)){ - for(int i = 0; i < entityList.size(); i++){ - if(entityList.get(i) instanceof Damageable && entityList.get(i).getUniqueId() != player.getUniqueId()){ - if(Slimefun.getProtectionManager().hasPermission(Bukkit.getOfflinePlayer(player.getUniqueId()), entityList.get(i).getLocation(), Interaction.BREAK_BLOCK)) { - if(WeaponArmorEnum.SWORDS.isTagged(itemStack.clone().getType())) { - ((Damageable) entityList.get(i)).damage(ThreadLocalRandom.current().nextInt(100) < 35 ? 6 : 3); - } else { - ((Damageable) entityList.get(i)).damage(ThreadLocalRandom.current().nextInt(100) < 35 ? 8 : 4); - } - } + // check if there are nearby entities around the given bounding box + if(!entityList.isEmpty() && !entityList.contains(getPlayer())){ + for(int i = 0; i < entityList.size(); i++){ + if(entityList.get(i) instanceof Damageable && entityList.get(i).getUniqueId() != getPlayer().getUniqueId()){ + if(Slimefun.getProtectionManager().hasPermission(Bukkit.getOfflinePlayer(getPlayer().getUniqueId()), entityList.get(i).getLocation(), Interaction.BREAK_BLOCK)) { + if(WeaponArmorEnum.SWORDS.isTagged(getItemStack().clone().getType())) { + ((Damageable) entityList.get(i)).damage(ThreadLocalRandom.current().nextInt(100) < 35 ? 8 : 5); + } else { + ((Damageable) entityList.get(i)).damage(ThreadLocalRandom.current().nextInt(100) < 35 ? 10 : 7); } } - if(!cutThrough) { - weaponTask(as, player, task, itemStack.clone()); - return; - } } - if(as.getLocation().distanceSquared(player.getLocation()) > 3600){ - player.sendMessage(Utils.colorTranslator("&eYour weapon has reached the max distance, " + weaponTask(as, player, task, itemStack.clone()))); + } - } - }, 0L, 1L); - }, 1L); + if(isReturnWeapon() && !isTriWeapon()) { + returnWeapon(); + return; + } + + if(!isTriWeapon()) { + weaponTask(getArmorStand(), getPlayer(), getItemStack().clone()); + return; + } + } + // drop the weapon if the distance is greater 60 blocks + if(getArmorStand().getLocation().distanceSquared(player.getLocation()) > 3600){ + getPlayer().sendMessage(Utils.colorTranslator("&eYour weapon has reached the max distance, " + weaponTask(getArmorStand(), getPlayer(), getItemStack().clone()))); + } } - public String weaponTask(ArmorStand as, Player player, BukkitTask task, ItemStack itemStack){ - Item droppedItem = as.getWorld().dropItem(as.getLocation(), itemStack); + public String weaponTask(ArmorStand as, Player player, ItemStack itemStack){ + Item droppedItem = as.getWorld().dropItem(as.getLocation(), itemStack.clone()); Location locInfo = droppedItem.getLocation(); droppedItem.setOwner(player.getUniqueId()); droppedItem.setGlowing(true); as.remove(); - task.cancel(); + this.cancel(); return Utils.colorTranslator("&eWeapon dropped near at " + "x: " + (int) locInfo.getX() + ", " + @@ -149,4 +119,8 @@ public String weaponTask(ArmorStand as, Player player, BukkitTask task, ItemStac "z: " + (int) locInfo.getZ()); } -} + public void returnWeapon(){ + this.cancel(); + returnWeaponTask.runTaskTimer(FNAmplifications.getInstance(), 4L, 1L); + } +} \ No newline at end of file diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowableWeapon.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowableWeapon.java new file mode 100644 index 00000000..13d17476 --- /dev/null +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/Implementation/ThrowableWeapon.java @@ -0,0 +1,96 @@ +package ne.fnfal113.fnamplifications.Gems.Implementation; + +import lombok.Getter; +import ne.fnfal113.fnamplifications.FNAmplifications; +import ne.fnfal113.fnamplifications.Utils.Utils; +import org.bukkit.*; +import org.bukkit.entity.*; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.EulerAngle; +import org.bukkit.util.Vector; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +@Getter +public class ThrowableWeapon { + + private final Map WEAPONS = new HashMap<>(); + + public ThrowableWeapon(){ + + } + + public ArmorStand spawnArmorstand(Player player, ItemStack itemStack, boolean isTriSword){ + return player.getWorld().spawn(player.getLocation().add(0, 0.9, 0), ArmorStand.class, armorStand ->{ + armorStand.setArms(true); + armorStand.setGravity(false); + armorStand.setVisible(false); + armorStand.setSmall(true); + armorStand.setMarker(true); + armorStand.setCustomNameVisible(false); + armorStand.setPersistent(false); + if(!isTriSword) { + armorStand.setRightArmPose(Utils.setRightArmAngle(armorStand, 270, 0, 0)); + Objects.requireNonNull(armorStand.getEquipment()).setItemInMainHand(itemStack.clone()); + } else{ + armorStand.setRightArmPose(Utils.setRightArmAngle(armorStand, 0, 0, 0)); + Objects.requireNonNull(armorStand.getEquipment()).setItemInMainHand(itemStack.clone()); + Objects.requireNonNull(armorStand.getEquipment()).setItemInOffHand(itemStack.clone()); + Objects.requireNonNull(armorStand.getEquipment()).setHelmet(itemStack.clone()); + } + }); + } + + public boolean isBelow4Weapons(Player player){ + if(!WEAPONS.containsKey(player.getUniqueId())){ + WEAPONS.put(player.getUniqueId(), 0); + } + + if(WEAPONS.get(player.getUniqueId()) < 4) { + WEAPONS.put(player.getUniqueId(), WEAPONS.get(player.getUniqueId()) + 1); + return true; + } else{ + player.sendMessage(Utils.colorTranslator("&eLimit reached! You can only have 4 weapons simultaneously")); + return false; + } + } + + public void floatThrowItem(Player player, ItemStack itemStack, boolean returnWeapon){ + ArmorStand as = spawnArmorstand(player, itemStack, false); + + int id = Bukkit.getScheduler().runTaskTimer(FNAmplifications.getInstance(), () -> { + int x = ThreadLocalRandom.current().nextInt(3); + int xFinal = x < 1 ? -2 : 2; + int z = ThreadLocalRandom.current().nextInt(3); + int zFinal = z < 1 ? -2 : 2; + as.teleport(player.getLocation().clone().add(xFinal, 0.8, zFinal)); + }, 5L, 12L).getTaskId(); + + Bukkit.getScheduler().runTaskLater(FNAmplifications.getInstance(), () -> { + WEAPONS.put(player.getUniqueId(), WEAPONS.get(player.getUniqueId()) - 1); + Bukkit.getScheduler().cancelTask(id); + as.setRightArmPose(new EulerAngle(0, 0, 0)); + throwWeapon(player, as, itemStack.clone(), false, false, false, returnWeapon); + }, 160L); + } + + public void throwWeapon(Player player, ArmorStand as, ItemStack itemStack, boolean rotateWeapon, boolean cutThrough, boolean isTriWeapon, boolean returnWeapon){ + Vector vector = player.getLocation().add(player.getLocation().getDirection().multiply(9).normalize()) + .subtract(player.getLocation().toVector()).toVector(); + + Bukkit.getScheduler().runTaskLater(FNAmplifications.getInstance(), () -> { + as.teleport(player.getLocation().add(0,0.9, 0)); + + if(isTriWeapon){ + as.setRightArmPose(Utils.setRightArmAngle(as, 0, 348, 0)); + as.setLeftArmPose(Utils.setLeftArmAngle(as, 0, 12, 0)); + as.setHeadPose(Utils.setHeadAngle(as, 98, 32, 97)); + } + + new ThrowWeaponTask(as, player, itemStack, rotateWeapon, cutThrough, isTriWeapon, returnWeapon, vector) + .runTaskTimer(FNAmplifications.getInstance(), 0L, 1L); + }, 1L); + } + +} diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/ImpostorGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/ImpostorGem.java index 973bd419..be1eeef3 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/ImpostorGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/ImpostorGem.java @@ -50,7 +50,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -59,7 +59,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/InfernoGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/InfernoGem.java index 29aafc6b..935ee517 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/InfernoGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/InfernoGem.java @@ -53,7 +53,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -62,7 +62,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/Listeners/GemListener.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/Listeners/GemListener.java index 05ab99d5..6b17d4aa 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/Listeners/GemListener.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/Listeners/GemListener.java @@ -66,6 +66,8 @@ public void onDragDrop(InventoryClickEvent event){ ((TriSwordGem) gem).onDrag(event, player); } else if(gem instanceof DamnationGem){ ((DamnationGem) gem).onDrag(event, player); + } else if(gem instanceof RetaliateGem){ + ((RetaliateGem) gem).onDrag(event, player); } } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/PsychokinesisGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/PsychokinesisGem.java index 71c6db92..756ac02f 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/PsychokinesisGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/PsychokinesisGem.java @@ -48,7 +48,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -57,7 +57,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/RetaliateGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/RetaliateGem.java new file mode 100644 index 00000000..d0dda854 --- /dev/null +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/RetaliateGem.java @@ -0,0 +1,95 @@ +package ne.fnfal113.fnamplifications.Gems; + +import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; +import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem; +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; +import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; +import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; +import ne.fnfal113.fnamplifications.FNAmplifications; +import ne.fnfal113.fnamplifications.Gems.Implementation.Gem; +import ne.fnfal113.fnamplifications.Gems.Implementation.WeaponArmorEnum; +import ne.fnfal113.fnamplifications.Gems.Interface.GemImpl; +import ne.fnfal113.fnamplifications.Items.FNAmpItems; +import ne.fnfal113.fnamplifications.Multiblock.FnGemAltar; +import ne.fnfal113.fnamplifications.Utils.Utils; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +@SuppressWarnings("ConstantConditions") +public class RetaliateGem extends SlimefunItem implements GemImpl { + + private static final SlimefunAddon plugin = FNAmplifications.getInstance(); + + public RetaliateGem(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { + super(itemGroup, item, recipeType, recipe); + } + + @Override + public void onDrag(InventoryClickEvent event, Player player){ + + if(event.getCursor() == null){ + return; + } + + ItemStack currentItem = event.getCurrentItem(); + + SlimefunItem slimefunItem = SlimefunItem.getByItem(event.getCursor()); + if(slimefunItem != null && currentItem != null && + (WeaponArmorEnum.SWORDS.isTagged(currentItem.getType()) || WeaponArmorEnum.AXES.isTagged(currentItem.getType()))){ + ItemMeta meta = currentItem.getItemMeta(); + PersistentDataContainer container = meta.getPersistentDataContainer(); + + if(checkGemAmount(container, currentItem) < 4) { + Gem gem = new Gem(slimefunItem, currentItem, player); + if(hasNeededGem(container)) { + if (!gem.isSameGem(currentItem)) { + player.setItemOnCursor(new ItemStack(Material.AIR)); + gem.socketItem(); + gem.retaliateWeapon(); + } else { + player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); + } + } else { + player.sendMessage(Utils.colorTranslator("&eWeapon is missing the needed gem in the weapon, please read the lore of the gem!")); + } + } else { + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); + player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); + } + event.setCancelled(true); + } + + } + + @Override + public int checkGemAmount(PersistentDataContainer pdc, ItemStack itemStack){ + return pdc.getOrDefault( + new NamespacedKey(FNAmplifications.getInstance(), itemStack.getType().toString().toLowerCase() + "_socket_amount"), + PersistentDataType.INTEGER, 0); + } + + public boolean hasNeededGem(PersistentDataContainer pdc){ + NamespacedKey damnedKey = new NamespacedKey(FNAmplifications.getInstance(), "fn_gem_damnation"); + NamespacedKey triKey = new NamespacedKey(FNAmplifications.getInstance(), "fn_gem_tri_sword"); + NamespacedKey throwieKey = new NamespacedKey(FNAmplifications.getInstance(), "fn_gem_axethrowie"); + + return pdc.has(damnedKey, PersistentDataType.STRING) || pdc.has(triKey, PersistentDataType.STRING) || + pdc.has(throwieKey, PersistentDataType.STRING); + } + + public static void setup(){ + new RetaliateGem(FNAmpItems.FN_GEMS, FNAmpItems.FN_GEM_RETALIATE, FnGemAltar.RECIPE_TYPE, new ItemStack[]{ + SlimefunItems.COMMON_TALISMAN, new SlimefunItemStack(SlimefunItems.AIR_RUNE, 2), SlimefunItems.TALISMAN_WHIRLWIND, + new SlimefunItemStack(SlimefunItems.ESSENCE_OF_AFTERLIFE, 1), new ItemStack(Material.EMERALD), new SlimefunItemStack(SlimefunItems.ESSENCE_OF_AFTERLIFE, 1), + SlimefunItems.TALISMAN_WHIRLWIND, new SlimefunItemStack(SlimefunItems.AIR_RUNE, 2), SlimefunItems.COMMON_TALISMAN}) + .register(plugin); + } +} diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/TelepathyGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/TelepathyGem.java index f2a5ecb6..ce019d8d 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/TelepathyGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/TelepathyGem.java @@ -47,7 +47,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -57,7 +57,7 @@ public void onDrag(InventoryClickEvent event, Player player){ } event.setCancelled(true); } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); event.setCancelled(true); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/ThornAwayGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/ThornAwayGem.java index 5e1b472a..a12cd426 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/ThornAwayGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/ThornAwayGem.java @@ -50,7 +50,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -60,7 +60,7 @@ public void onDrag(InventoryClickEvent event, Player player){ } event.setCancelled(true); } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); event.setCancelled(true); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/ThunderBoltGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/ThunderBoltGem.java index ffba7036..c14ebb43 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/ThunderBoltGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/ThunderBoltGem.java @@ -52,7 +52,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -61,7 +61,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); diff --git a/src/main/java/ne/fnfal113/fnamplifications/Gems/TriSwordGem.java b/src/main/java/ne/fnfal113/fnamplifications/Gems/TriSwordGem.java index cde5fea2..ad65c676 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Gems/TriSwordGem.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Gems/TriSwordGem.java @@ -9,7 +9,7 @@ import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Gems.Implementation.Gem; import ne.fnfal113.fnamplifications.Gems.Interface.GemImpl; -import ne.fnfal113.fnamplifications.Gems.Implementation.ThrowWeaponTask; +import ne.fnfal113.fnamplifications.Gems.Implementation.ThrowableWeapon; import ne.fnfal113.fnamplifications.Gems.Implementation.WeaponArmorEnum; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnGemAltar; @@ -22,11 +22,12 @@ import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; +@SuppressWarnings("ConstantConditions") public class TriSwordGem extends SlimefunItem implements GemImpl { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); - private final ThrowWeaponTask throwWeaponTask = new ThrowWeaponTask(); + private final ThrowableWeapon throwableWeapon = new ThrowableWeapon(); public TriSwordGem(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); @@ -46,7 +47,7 @@ public void onDrag(InventoryClickEvent event, Player player){ ItemMeta meta = currentItem.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); - if(checkGemAmount(container, currentItem) < 3) { + if(checkGemAmount(container, currentItem) < 4) { Gem gem = new Gem(slimefunItem, currentItem, player); if(!gem.isSameGem(currentItem)){ player.setItemOnCursor(new ItemStack(Material.AIR)); @@ -55,7 +56,7 @@ public void onDrag(InventoryClickEvent event, Player player){ player.sendMessage(Utils.colorTranslator("&6Your item has " + gem.getSfItemName() + " &6socketed already!")); } } else { - player.sendMessage(Utils.colorTranslator("&eOnly 3 gems per item is allowed!")); + player.sendMessage(Utils.colorTranslator("&eOnly 4 gems per item is allowed!")); player.playSound(player.getLocation(), Sound.UI_TOAST_OUT, 1.0F, 1.0F); } event.setCancelled(true); @@ -73,8 +74,11 @@ public int checkGemAmount(PersistentDataContainer pdc, ItemStack itemStack){ public void onRightClick(Player player){ ItemStack itemStack = player.getInventory().getItemInMainHand(); - throwWeaponTask.throwWeapon(player, throwWeaponTask.spawnArmorstand(player, itemStack.clone(), true), itemStack.clone(), - false, true, true); + PersistentDataContainer pdc = itemStack.getItemMeta().getPersistentDataContainer(); + NamespacedKey key = new NamespacedKey(FNAmplifications.getInstance(), "return_weapon"); + + throwableWeapon.throwWeapon(player, throwableWeapon.spawnArmorstand(player, itemStack.clone(), true), itemStack.clone(), + false, true, true, Boolean.parseBoolean(pdc.getOrDefault(key, PersistentDataType.STRING, "false"))); itemStack.setAmount(0); } diff --git a/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItemSetup.java b/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItemSetup.java index 72af35ce..00f87755 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItemSetup.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItemSetup.java @@ -185,6 +185,7 @@ public void registerGems(){ BlindBindGem.setup(); TriSwordGem.setup(); DamnationGem.setup(); + RetaliateGem.setup(); } public void registerTools(){ diff --git a/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItems.java b/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItems.java index 114f2ab6..0fc32c48 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItems.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Items/FNAmpItems.java @@ -1567,6 +1567,22 @@ private FNAmpItems() {} "&dto bind this gem" ); + public static final SlimefunItemStack FN_GEM_RETALIATE = new SlimefunItemStack( + "FN_GEM_RETALIATE", + Material.EMERALD, + "&cRetaliate Gem", + "", + "&eAllows your weapons to return back to you after", + "ðrowing it, weapon must have any of these gems", + "&ebound to it before binding this gem: ", + "&e- Damnation Gem", + "&e- Tri-Sword Gem", + "&e- Axe Throwie Gem", + "", + "&dDrag and drop on sword or axe", + "&dto bind this gem" + ); + public static final SlimefunItemStack FN_GEM_BLINDBIND = new SlimefunItemStack( "FN_GEM_BLINDBIND", Material.EMERALD, diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MainStick.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MainStick.java new file mode 100644 index 00000000..68a82f8b --- /dev/null +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MainStick.java @@ -0,0 +1,141 @@ +package ne.fnfal113.fnamplifications.MysteriousItems; + +import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; +import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; +import lombok.Getter; +import org.bukkit.*; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerLevelChangeEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.List; +import java.util.Map; + +@SuppressWarnings("ConstantConditions") +public class MainStick { + + @Getter + public final NamespacedKey storageKey; + @Getter + public final NamespacedKey storageKey2; + @Getter + public final Map enchantmentMap; + @Getter + public final String weaponLore; + @Getter + public final String stickLore; + @Getter + public final List effects; + + public MainStick(NamespacedKey key1, NamespacedKey key2, Map enchantmentMap, String weaponLore, String stickLore){ + this(key1, key2, enchantmentMap, weaponLore, stickLore, null); + } + + public MainStick(NamespacedKey key1, NamespacedKey key2, Map enchantmentMap, String weaponLore, String stickLore, List effects){ + this.storageKey = key1; + this.storageKey2 = key2; + this.enchantmentMap = enchantmentMap; + this.weaponLore = weaponLore; + this.stickLore = stickLore; + this.effects = effects; + } + + public void onInteract(PlayerInteractEvent e, Material material, boolean withEffects){ + Player player = e.getPlayer(); + ItemStack item1 = player.getInventory().getItemInMainHand(); + + ItemMeta meta = item1.getItemMeta(); + List lore2 = meta.getLore(); + + NamespacedKey key = getStorageKey(); + NamespacedKey key2 = getStorageKey2(); + + PersistentDataContainer expUsed = meta.getPersistentDataContainer(); + PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); + int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); + int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); + + getEnchantmentMap().forEach((Key, Value) -> meta.addEnchant(Key, Value, true)); + meta.setUnbreakable(true); + meta.setLore(loreUpdate(lore2, damageAll, xpamount, weaponLore, withEffects)); + item1.setItemMeta(meta); + + if(!(item1.getType() == material)) { + item1.setType(material); + player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); + player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); + player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); + } + } + + public void levelChange(PlayerLevelChangeEvent event, SlimefunItemStack slimefunItem, int level, int incrementLevel){ + Player p = event.getPlayer(); + ItemStack item = p.getInventory().getItemInMainHand(); + if(event.getOldLevel() > event.getNewLevel() && p.getLevel() > level) { + transformWeapon(p, item, slimefunItem, level, weaponLore, incrementLevel); + } + } + + public void transformWeapon(Player p, ItemStack item, SlimefunItemStack slimefunItem, int level, String finalLore, int incrementLevel) { + CustomItemStack item2 = new CustomItemStack(slimefunItem); + ItemMeta meta = item.getItemMeta(); + List lore = meta.getLore(); + + PersistentDataContainer expUsed = meta.getPersistentDataContainer(); + PersistentDataContainer damage = meta.getPersistentDataContainer(); + int xpAmount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + int damageAmount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); + int amount = ++xpAmount + incrementLevel; + + + expUsed.set(getStorageKey(), PersistentDataType.INTEGER, amount); + meta.setLore(loreUpdate(lore, damageAmount, amount, finalLore, false)); + item.setItemMeta(meta); + + if (p.getLevel() <= level) { + if (lore.size() >= 4) { + lore.subList(3, lore.size()).clear(); + } + meta.setLore(lore); + getEnchantmentMap().forEach((Key, Value) -> meta.removeEnchant(Key)); + item.setItemMeta(meta); + item.setType(item2.getType()); + } + + } + + public List loreUpdate(List lore2, int get_Damage, int xpamount, String lore, boolean withEffects){ + if(lore2.size() == 1) { + lore2.remove(0); + lore2.add(lore); + lore2.add(ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); + lore2.add(ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); + } else{ + lore2.set(0,lore); + lore2.set(1,ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); + lore2.set(2,ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); + } + + if(withEffects){ + if(!(lore2.size() >= 4)){ + lore2.addAll(getEffects()); + } + } + + return lore2; + } + + public void darkenVision(Player player,int level){ + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); + player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); + player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than " + level); + } + +} diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick.java index addf180e..ba464ad3 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick.java @@ -6,7 +6,6 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; @@ -14,6 +13,7 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -21,15 +21,15 @@ import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -37,12 +37,15 @@ public class MysteryStick extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "expstick"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "expstickdamage"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore()); } protected @Nonnull NamespacedKey getStorageKey() { @@ -53,43 +56,34 @@ public MysteryStick(ItemGroup itemGroup, SlimefunItemStack item, RecipeType reci return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.SWEEPING_EDGE, 3); + enchantments.put(Enchantment.DAMAGE_ALL, 4); + enchantments.put(Enchantment.FIRE_ASPECT, 2); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); - - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.SWEEPING_EDGE, 3, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 4, true); - meta.addEnchant(Enchantment.FIRE_ASPECT, 2, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_SWORD)) { - item1.setType(Material.DIAMOND_SWORD); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - } + public String weaponLore(){ + return ChatColor.GOLD + "What is this sorcery?"; + } + public String stickLore(){ + return ChatColor.WHITE + "I wonder what this stick does"; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_SWORD, false); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); @@ -97,84 +91,32 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } - if(player.getLevel() >= 5) { - if(ThreadLocalRandom.current().nextInt(100) < 20) { - player.setLevel(player.getLevel() - 1); - } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 5"); - transformWeapon(player, item); - } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + List lore2 = meta.getLore(); PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), false)); item.setItemMeta(meta); - } + if(player.getLevel() >= 5) { + if(ThreadLocalRandom.current().nextInt(100) < 20) { + player.setLevel(player.getLevel() - 1); + } + } else{ + mainStick.darkenVision(player, 5); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK, 5, stickLore(), 0); + } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "What is this sorcery?"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 5) { - lore.set(0, ChatColor.WHITE + "I wonder what this stick does"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.SWEEPING_EDGE); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.FIRE_ASPECT); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK, 5, 0); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick10.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick10.java index 411abca0..65667a8d 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick10.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick10.java @@ -6,16 +6,17 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; +import ne.fnfal113.fnamplifications.Utils.Utils; import org.bukkit.*; import org.bukkit.attribute.Attribute; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -27,11 +28,10 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick10 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -39,12 +39,15 @@ public class MysteryStick10 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick10(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "expstickupgradedfinalfn"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "damagefinalfn"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore(), effectLore()); } protected @Nonnull @@ -57,54 +60,67 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.SWEEPING_EDGE, 18); + enchantments.put(Enchantment.DAMAGE_ALL, 20); + enchantments.put(Enchantment.FIRE_ASPECT, 15); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 17); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 17); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); + return enchantments; + } - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.SWEEPING_EDGE, 18, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 20, true); - meta.addEnchant(Enchantment.FIRE_ASPECT, 15, true); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 17, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 17, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); + public String weaponLore(){ + return ChatColor.GOLD + "Why is this stick too good"; + } - if(!(item1.getType() == Material.DIAMOND_SWORD)) { - item1.setType(Material.DIAMOND_SWORD); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - player.getWorld().spawnParticle(Particle.CLOUD, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - player.getWorld().spawnParticle(Particle.LAVA, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String stickLore(){ + return ChatColor.WHITE + "Deadly or creepy stick"; + } + public List effectLore(){ + List lore2 = new ArrayList<>(); + lore2.add(0,""); + lore2.add(1, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4&lEffects &f|◥◣◥◣◥◣◥◣")); + lore2.add(2, ChatColor.BLUE +"◆ 15% Chance 5s Poison"); + lore2.add(3, ChatColor.BLUE +"◆ 13% Chance 5s Wither"); + lore2.add(4, ChatColor.BLUE +"◆ 13% Chance 4s Weakness"); + lore2.add(5, ChatColor.BLUE +"◆ 6% Chance ♡ Lifesteal"); + lore2.add(6, ChatColor.BLUE +"◆ 8% Chance 180° rotation"); + lore2.add(7, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4◢◤◤◥◤◥◥◣ &f|◥◣◥◣◥◣◥◣")); + return lore2; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_SWORD, true); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); if(item.getType() != Material.DIAMOND_SWORD){ return; } + ItemMeta meta = item.getItemMeta(); + List lore2 = meta.getLore(); + + PersistentDataContainer expUsed = meta.getPersistentDataContainer(); + PersistentDataContainer damage = meta.getPersistentDataContainer(); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); + int get_Damage = (int) event.getDamage() + damageamount; + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); + + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), true)); + item.setItemMeta(meta); if(player.getLevel() >= 25) { if(ThreadLocalRandom.current().nextInt(100) < 47) { @@ -136,103 +152,16 @@ public void onSwing(EntityDamageByEntityEvent event){ victim.teleport(loc); victim.sendMessage(ChatColor.DARK_RED + "You have been disoriented! your opponent's mysterious stick is deadly"); } - } else { - return; } + } else{ + mainStick.darkenVision(player, 25); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_10, 25, stickLore(), 3); } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 25"); - transformWeapon(player, item); - } - - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); - - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); - item.setItemMeta(meta); } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "Why is this stick too good"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - lore2.add(3, ""); - lore2.add(4, ChatColor.RED + "◢◤◢◤◢◤◢◤| "+ ChatColor.DARK_RED + "" + ChatColor.BOLD + "Effects " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - lore2.add(5, ChatColor.BLUE +"◆ 15% Chance 5s Poison"); - lore2.add(6, ChatColor.BLUE +"◆ 13% Chance 5s Wither"); - lore2.add(7, ChatColor.BLUE +"◆ 13% Chance 4s Weakness"); - lore2.add(8, ChatColor.BLUE +"◆ 6% Chance ♡ Lifesteal"); - lore2.add(9, ChatColor.BLUE +"◆ 8% Chance 180° rotation"); - lore2.add(10,ChatColor.RED + "◢◤◢◤◢◤◢◤| " + ChatColor.DARK_RED + " ◢◤◤◥◤◥◥◣ " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - return lore2; - } - public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_10); - - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 3; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 25) { - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.set(0, ChatColor.WHITE + "Deadly or creepy stick"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.SWEEPING_EDGE); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.FIRE_ASPECT); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_10, 25, 3); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick11.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick11.java index 11b94ce9..f0c1fb74 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick11.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick11.java @@ -6,15 +6,16 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; +import ne.fnfal113.fnamplifications.Utils.Utils; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -27,9 +28,12 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick11 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -37,12 +41,15 @@ public class MysteryStick11 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick11(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "axeexp_xpfinalfn"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "axeexpdamage_damagefinalfn"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore(), effectLore()); } protected @Nonnull @@ -55,45 +62,46 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 28); + enchantments.put(Enchantment.DAMAGE_ALL, 18); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 15); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); + public String weaponLore(){ + return ChatColor.GOLD + "Behind your enemies awaits danger"; + } - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 20, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 18, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 15, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_AXE)) { - item1.setType(Material.DIAMOND_AXE); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - player.getWorld().spawnParticle(Particle.CLOUD, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String stickLore(){ + return ChatColor.WHITE + "The stick of the nords"; + } + public List effectLore(){ + List lore2 = new ArrayList<>(); + lore2.add(0,""); + lore2.add(1, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4&lEffects &f|◥◣◥◣◥◣◥◣")); + lore2.add(2, ChatColor.BLUE +"◆ 15% Chance 5s Slow"); + lore2.add(3, ChatColor.BLUE +"◆ 13% Chance 4s Weakness"); + lore2.add(4, ChatColor.BLUE +"◆ 13% Chance 5s Hunger"); + lore2.add(5, ChatColor.BLUE +"◆ 10% Chance tp behind opponent"); + lore2.add(6, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4◢◤◤◥◤◥◥◣ &f|◥◣◥◣◥◣◥◣")); + return lore2; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_AXE, true); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); @@ -101,6 +109,19 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } + ItemMeta meta = item.getItemMeta(); + List lore2 = meta.getLore(); + + PersistentDataContainer expUsed = meta.getPersistentDataContainer(); + PersistentDataContainer damage = meta.getPersistentDataContainer(); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); + int get_Damage = (int) event.getDamage() + damageamount; + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); + + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), true)); + item.setItemMeta(meta); + if(player.getLevel() >= 25) { if(ThreadLocalRandom.current().nextInt(100) < 35) { player.setLevel(player.getLevel() - 4); @@ -131,98 +152,16 @@ public void onSwing(EntityDamageByEntityEvent event){ player.teleport(newDamagerLoc); victim.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "Behind you awaits danger"); } - } else { - return; } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 25"); - transformWeapon(player, item); + } else{ + mainStick.darkenVision(player, 25); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_11, 25, stickLore(), 3); } - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); - - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); - item.setItemMeta(meta); - - } - - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "Behind your enemies awaits danger"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - lore2.add(3, ""); - lore2.add(4, ChatColor.RED + "◢◤◢◤◢◤◢◤| "+ ChatColor.DARK_RED + "" + ChatColor.BOLD + "Effects " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - lore2.add(5, ChatColor.BLUE +"◆ 15% Chance 5s Slow"); - lore2.add(6, ChatColor.BLUE +"◆ 13% Chance 4s Weakness"); - lore2.add(7, ChatColor.BLUE +"◆ 13% Chance 5s Hunger"); - lore2.add(8, ChatColor.BLUE +"◆ 10% Chance tp behind opponent"); - lore2.add(9, ChatColor.RED + "◢◤◢◤◢◤◢◤| " + ChatColor.DARK_RED + " ◢◤◤◥◤◥◥◣ " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_11); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 3; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 25) { - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.set(0, ChatColor.WHITE + "The stick of the nords"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_11, 25, 3); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick2.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick2.java index ba1d6b5e..1dd5f187 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick2.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick2.java @@ -6,7 +6,6 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; @@ -14,21 +13,22 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick2 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -36,12 +36,15 @@ public class MysteryStick2 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick2(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "axeexp"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "axeexpdamage"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore()); } protected @Nonnull @@ -54,36 +57,25 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 3); + enchantments.put(Enchantment.DAMAGE_ALL, 2); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 3); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); - - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 3, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 2, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 3, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_AXE)) { - item1.setType(Material.DIAMOND_AXE); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - } + public String weaponLore(){ + return ChatColor.GOLD + "Another stick of wrecking"; + } + public String stickLore(){ + return ChatColor.WHITE + "Another stick of no matter what is it"; + } + + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_AXE, false); } @@ -91,6 +83,9 @@ public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); @@ -98,84 +93,32 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } - if(player.getLevel() >= 5) { - if(ThreadLocalRandom.current().nextInt(100) < 15) { - player.setLevel(player.getLevel() - 1); - } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 5"); - transformWeapon(player, item); - } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + List lore2 = meta.getLore(); PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), false)); item.setItemMeta(meta); - } + if(player.getLevel() >= 5) { + if(ThreadLocalRandom.current().nextInt(100) < 15) { + player.setLevel(player.getLevel() - 1); + } + } else{ + mainStick.darkenVision(player, 5); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_2, 5, stickLore(), 0); + } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "Another stick of wrecking"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_2); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 5) { - lore.set(0, ChatColor.WHITE + "Another stick of no matter what is it"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_2, 5, 0); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick3.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick3.java index d616395e..973e1588 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick3.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick3.java @@ -6,7 +6,6 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; @@ -15,20 +14,21 @@ import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +@SuppressWarnings("ConstantConditions") public class MysteryStick3 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -36,12 +36,15 @@ public class MysteryStick3 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick3(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "bowexp"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "bowdamage"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore()); } protected @Nonnull @@ -54,35 +57,24 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.ARROW_DAMAGE, 3); + enchantments.put(Enchantment.ARROW_INFINITE, 1); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); - - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.ARROW_DAMAGE, 3, true); - meta.addEnchant(Enchantment.ARROW_INFINITE, 1, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.BOW)) { - item1.setType(Material.BOW); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - } + public String weaponLore(){ + return ChatColor.GOLD + "I knew it was something about shooting arrows"; + } + public String stickLore(){ + return ChatColor.WHITE + "I feel coordinated when holding this stick"; + } + + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.BOW, false); } public void onSwing(EntityDamageByEntityEvent event){ @@ -91,6 +83,9 @@ public void onSwing(EntityDamageByEntityEvent event){ if(player == null){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } ItemStack item = player.getInventory().getItemInMainHand(); if(item.getType() != Material.BOW) { @@ -98,78 +93,27 @@ public void onSwing(EntityDamageByEntityEvent event){ } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + List lore2 = meta.getLore(); PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), false)); item.setItemMeta(meta); if(player.getLevel() <= 5) { - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 5"); - transformWeapon(player, item); + mainStick.darkenVision(player, 5); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_3, 5, stickLore(), 0); } } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "I knew it was something about shooting arrows"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - return lore2; - } - public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel() && p.getLevel() > 5) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_3); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 5) { - lore.set(0, ChatColor.WHITE + "I feel coordinated when holding this stick"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.ARROW_DAMAGE); - meta.removeEnchant(Enchantment.ARROW_INFINITE); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_3, 5, 0); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick4.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick4.java index 5e7db1ff..5c6225b8 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick4.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick4.java @@ -6,7 +6,6 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; @@ -14,21 +13,22 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick4 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -36,12 +36,15 @@ public class MysteryStick4 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick4(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "expstickupgraded"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "damage"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore()); } protected @Nonnull @@ -54,49 +57,36 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.SWEEPING_EDGE, 6); + enchantments.put(Enchantment.DAMAGE_ALL, 7); + enchantments.put(Enchantment.FIRE_ASPECT, 4); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 5); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 6); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); - - List lore2 = new ArrayList<>(); - lore2.add(0,ChatColor.GOLD + "It was indeed a magical improvement"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageAll); - meta.addEnchant(Enchantment.SWEEPING_EDGE, 6, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 7, true); - meta.addEnchant(Enchantment.FIRE_ASPECT, 4, true); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 5, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 6, true); - meta.setUnbreakable(true); - meta.setLore(lore2); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_SWORD)) { - item1.setType(Material.DIAMOND_SWORD); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String weaponLore(){ + return ChatColor.GOLD + "It was indeed a magical improvement"; + } + public String stickLore(){ + return ChatColor.WHITE + "Did I use this before or maybe not"; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_SWORD, false); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); @@ -104,86 +94,32 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } - if(player.getLevel() >= 15) { - if(ThreadLocalRandom.current().nextInt(100) < 30) { - player.setLevel(player.getLevel() - 2); - } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 15"); - transformWeapon(player, item); - } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + List lore2 = meta.getLore(); PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), false)); item.setItemMeta(meta); - } + if(player.getLevel() >= 15) { + if(ThreadLocalRandom.current().nextInt(100) < 30) { + player.setLevel(player.getLevel() - 2); + } + } else{ + mainStick.darkenVision(player, 15); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_4, 15, stickLore(), 1); + } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "It was indeed a magical improvement"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_4); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 1; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 15) { - lore.set(0, ChatColor.WHITE + "Did I use this before or maybe not"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.SWEEPING_EDGE); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.FIRE_ASPECT); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_4, 15, 1); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick5.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick5.java index 96723e5b..79e7b05c 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick5.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick5.java @@ -6,7 +6,6 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; @@ -20,15 +19,15 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick5 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -36,12 +35,15 @@ public class MysteryStick5 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick5(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "axeexp_xp"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "axeexpdamage_damage"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore()); } protected @Nonnull @@ -54,40 +56,27 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 6); + enchantments.put(Enchantment.DAMAGE_ALL, 5); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 5); + enchantments.put(Enchantment.KNOCKBACK, 3); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); - - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 6, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 5, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 5, true); - meta.addEnchant(Enchantment.KNOCKBACK, 3, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_AXE)) { - item1.setType(Material.DIAMOND_AXE); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String weaponLore(){ + return ChatColor.GOLD + "Another stick of somewhat reckoning"; + } + public String stickLore(){ + return ChatColor.WHITE + "I know you are tired of this stick thing"; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_AXE, false); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ @@ -100,85 +89,32 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } - if(player.getLevel() >= 15) { - if(ThreadLocalRandom.current().nextInt(100) < 30) { - player.setLevel(player.getLevel() - 2); - } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 15"); - transformWeapon(player, item); - } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + List lore2 = meta.getLore(); PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), false)); item.setItemMeta(meta); - } + if(player.getLevel() >= 15) { + if(ThreadLocalRandom.current().nextInt(100) < 30) { + player.setLevel(player.getLevel() - 2); + } + } else{ + mainStick.darkenVision(player, 15); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_5, 15, stickLore(), 1); + } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "Another stick of somewhat reckoning"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_5); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 1; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 15) { - lore.set(0, ChatColor.WHITE + "I know you are tired of this stick thing"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - meta.removeEnchant(Enchantment.KNOCKBACK); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_5, 15, 1); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick6.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick6.java index 10062457..b0335c7d 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick6.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick6.java @@ -6,7 +6,6 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; @@ -15,20 +14,19 @@ import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +@SuppressWarnings("ConstantConditions") public class MysteryStick6 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -36,12 +34,15 @@ public class MysteryStick6 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick6(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "bowexp_xp"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "bowdamage_damage"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore()); } protected @Nonnull @@ -54,38 +55,26 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.ARROW_DAMAGE, 8); + enchantments.put(Enchantment.ARROW_INFINITE, 1); + enchantments.put(Enchantment.ARROW_FIRE, 6); + enchantments.put(Enchantment.ARROW_KNOCKBACK, 5); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); - - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.ARROW_DAMAGE, 8, true); - meta.addEnchant(Enchantment.ARROW_INFINITE, 1, true); - meta.addEnchant(Enchantment.ARROW_FIRE, 6, true); - meta.addEnchant(Enchantment.ARROW_KNOCKBACK, 5, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.BOW)) { - item1.setType(Material.BOW); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String weaponLore(){ + return ChatColor.GOLD + "Make them take an arrow to the knee"; + } + public String stickLore(){ + return ChatColor.WHITE + "May the force and accuracy be with you"; + } + + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.BOW, false); } public void onSwing(EntityDamageByEntityEvent event){ @@ -94,6 +83,9 @@ public void onSwing(EntityDamageByEntityEvent event){ if(player == null){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } ItemStack item = player.getInventory().getItemInMainHand(); if(item.getType() != Material.BOW) { @@ -101,80 +93,27 @@ public void onSwing(EntityDamageByEntityEvent event){ } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + List lore2 = meta.getLore(); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), false)); item.setItemMeta(meta); if(player.getLevel() <= 15) { - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 15"); - transformWeapon(player, item); + mainStick.darkenVision(player, 15); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_6, 15, stickLore(), 1); } } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "Make them take an arrow to the knee"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - return lore2; - } - public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel() && p.getLevel() > 15) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_6); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 1; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 15) { - lore.set(0, ChatColor.WHITE + "May the force and accuracy be with you"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.ARROW_DAMAGE); - meta.removeEnchant(Enchantment.ARROW_INFINITE); - meta.removeEnchant(Enchantment.ARROW_FIRE); - meta.removeEnchant(Enchantment.ARROW_KNOCKBACK); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_6, 15, 1); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick7.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick7.java index 4bb6d378..76f1c485 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick7.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick7.java @@ -6,15 +6,16 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; +import ne.fnfal113.fnamplifications.Utils.Utils; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -27,9 +28,12 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick7 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -37,12 +41,15 @@ public class MysteryStick7 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick7(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "expstickupgradedfinal"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "damagefinal"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore(), effectLore()); } protected @Nonnull @@ -55,47 +62,47 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.SWEEPING_EDGE, 12); + enchantments.put(Enchantment.DAMAGE_ALL, 10); + enchantments.put(Enchantment.FIRE_ASPECT, 10); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 11); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 10); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); + public String weaponLore(){ + return ChatColor.GOLD + "Blood will spit across the land"; + } - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.SWEEPING_EDGE, 12, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 10, true); - meta.addEnchant(Enchantment.FIRE_ASPECT, 10, true); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 11, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 10, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_SWORD)) { - item1.setType(Material.DIAMOND_SWORD); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - player.getWorld().spawnParticle(Particle.CLOUD, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String stickLore(){ + return ChatColor.WHITE + "May the force and accuracy be with you"; + } + public List effectLore(){ + List lore2 = new ArrayList<>(); + lore2.add(0,""); + lore2.add(1, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4&lEffects &f|◥◣◥◣◥◣◥◣")); + lore2.add(2, ChatColor.BLUE +"◆ 7% Chance 3s Poison"); + lore2.add(3, ChatColor.BLUE +"◆ 8% Chance 4s Wither"); + lore2.add(4, ChatColor.BLUE +"◆ 10% Chance 4s Weakness"); + lore2.add(5, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4◢◤◤◥◤◥◥◣ &f|◥◣◥◣◥◣◥◣")); + return lore2; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_SWORD, true); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); @@ -103,6 +110,19 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } + ItemMeta meta = item.getItemMeta(); + List lore2 = meta.getLore(); + + PersistentDataContainer expUsed = meta.getPersistentDataContainer(); + PersistentDataContainer damage = meta.getPersistentDataContainer(); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); + int get_Damage = (int) event.getDamage() + damageamount; + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); + + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), true)); + item.setItemMeta(meta); + if(player.getLevel() >= 20) { if(ThreadLocalRandom.current().nextInt(100) < 40) { player.setLevel(player.getLevel() - 3); @@ -118,98 +138,16 @@ public void onSwing(EntityDamageByEntityEvent event){ if(ThreadLocalRandom.current().nextInt(100) < 10 && !(victim.hasPotionEffect(PotionEffectType.WEAKNESS))){ victim.addPotionEffect(new PotionEffect(PotionEffectType.WEAKNESS, 80, 1, false, true)); } - } else { - return; } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 20"); - transformWeapon(player, item); + } else{ + mainStick.darkenVision(player, 20); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_7, 20, stickLore(), 2); } - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); - - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); - item.setItemMeta(meta); - - } - - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "Blood will spit across the land"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - lore2.add(3,""); - lore2.add(4, ChatColor.RED + "◢◤◢◤◢◤◢◤| "+ ChatColor.DARK_RED + "" + ChatColor.BOLD + "Effects " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - lore2.add(5, ChatColor.BLUE +"◆ 7% Chance 3s Poison"); - lore2.add(6, ChatColor.BLUE +"◆ 8% Chance 4s Wither"); - lore2.add(7, ChatColor.BLUE +"◆ 10% Chance 4s Weakness"); - lore2.add(8, ChatColor.RED + "◢◤◢◤◢◤◢◤| " + ChatColor.DARK_RED + " ◢◤◤◥◤◥◥◣ " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_7); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 2; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 20) { - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.set(0, ChatColor.WHITE + "The aura on this stick is mesmerizing"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.SWEEPING_EDGE); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.FIRE_ASPECT); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_7, 20, 2); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick8.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick8.java index 59bd8b93..87811634 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick8.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick8.java @@ -6,15 +6,16 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; +import ne.fnfal113.fnamplifications.Utils.Utils; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -27,9 +28,12 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick8 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -37,12 +41,15 @@ public class MysteryStick8 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick8(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "axeexp_xpfinal"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "axeexpdamage_damagefinal"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore(), effectLore()); } protected @Nonnull @@ -55,46 +62,46 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.DAMAGE_ARTHROPODS, 12); + enchantments.put(Enchantment.DAMAGE_ALL, 10); + enchantments.put(Enchantment.DAMAGE_UNDEAD, 11); + enchantments.put(Enchantment.KNOCKBACK, 6); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); + public String weaponLore(){ + return ChatColor.GOLD + "I'm out of words using this"; + } - List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.DAMAGE_ARTHROPODS, 12, true); - meta.addEnchant(Enchantment.DAMAGE_ALL, 10, true); - meta.addEnchant(Enchantment.DAMAGE_UNDEAD, 11, true); - meta.addEnchant(Enchantment.KNOCKBACK, 6, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.DIAMOND_AXE)) { - item1.setType(Material.DIAMOND_AXE); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - player.getWorld().spawnParticle(Particle.CLOUD, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + public String stickLore(){ + return ChatColor.WHITE + "This stick is kinda heavy"; + } + public List effectLore(){ + List lore2 = new ArrayList<>(); + lore2.add(0,""); + lore2.add(1, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4&lEffects &f|◥◣◥◣◥◣◥◣")); + lore2.add(2, ChatColor.BLUE +"◆ 8% Chance 4s Slow"); + lore2.add(3, ChatColor.BLUE +"◆ 7% Chance 3s Weakness"); + lore2.add(4, ChatColor.BLUE +"◆ 10% Chance 4s Hunger"); + lore2.add(5, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4◢◤◤◥◤◥◥◣ &f|◥◣◥◣◥◣◥◣")); + return lore2; } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.DIAMOND_AXE, true); + } public void onSwing(EntityDamageByEntityEvent event){ if(!(event.getDamager() instanceof Player)){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } Player player = (Player) event.getDamager(); ItemStack item = player.getInventory().getItemInMainHand(); @@ -102,6 +109,19 @@ public void onSwing(EntityDamageByEntityEvent event){ return; } + ItemMeta meta = item.getItemMeta(); + List lore2 = meta.getLore(); + + PersistentDataContainer expUsed = meta.getPersistentDataContainer(); + PersistentDataContainer damage = meta.getPersistentDataContainer(); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); + int get_Damage = (int) event.getDamage() + damageamount; + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); + + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), true)); + item.setItemMeta(meta); + if(player.getLevel() >= 20) { if(ThreadLocalRandom.current().nextInt(100) < 30) { player.setLevel(player.getLevel() - 3); @@ -117,97 +137,16 @@ public void onSwing(EntityDamageByEntityEvent event){ if(ThreadLocalRandom.current().nextInt(100) < 10 && !(victim.hasPotionEffect(PotionEffectType.HUNGER))){ victim.addPotionEffect(new PotionEffect(PotionEffectType.HUNGER, 80, 1, false, true)); } - } else { - return; } - } - else{ - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 20"); - transformWeapon(player, item); + } else{ + mainStick.darkenVision(player, 20); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_8, 20, stickLore(), 2); } - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); - - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); - item.setItemMeta(meta); - - } - - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "I'm out of words using this"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - lore2.add(3,""); - lore2.add(4, ChatColor.RED + "◢◤◢◤◢◤◢◤| "+ ChatColor.DARK_RED + "" + ChatColor.BOLD + "Effects " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - lore2.add(5, ChatColor.BLUE +"◆ 8% Chance 4s Slow"); - lore2.add(6, ChatColor.BLUE +"◆ 7% Chance 3s Weakness"); - lore2.add(7, ChatColor.BLUE +"◆ 10% Chance 4s Hunger"); - lore2.add(8, ChatColor.RED + "◢◤◢◤◢◤◢◤| " + ChatColor.DARK_RED + " ◢◤◤◥◤◥◥◣ " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - return lore2; } public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel()) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_8); - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 2; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 20) { - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.set(0, ChatColor.WHITE + "This stick is kinda heavy"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.DAMAGE_ARTHROPODS); - meta.removeEnchant(Enchantment.DAMAGE_ALL); - meta.removeEnchant(Enchantment.DAMAGE_UNDEAD); - meta.removeEnchant(Enchantment.KNOCKBACK); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_8, 20, 2); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick9.java b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick9.java index 6c91ea79..b87d53a0 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick9.java +++ b/src/main/java/ne/fnfal113/fnamplifications/MysteriousItems/MysteryStick9.java @@ -6,16 +6,17 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; import ne.fnfal113.fnamplifications.FNAmplifications; import ne.fnfal113.fnamplifications.Items.FNAmpItems; import ne.fnfal113.fnamplifications.Multiblock.FnMysteryStickAltar; +import ne.fnfal113.fnamplifications.Utils.Utils; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Arrow; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.inventory.ItemStack; @@ -28,9 +29,12 @@ import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +@SuppressWarnings("ConstantConditions") public class MysteryStick9 extends SlimefunItem { private static final SlimefunAddon plugin = FNAmplifications.getInstance(); @@ -38,12 +42,15 @@ public class MysteryStick9 extends SlimefunItem { private final NamespacedKey defaultUsageKey; private final NamespacedKey defaultUsageKey2; + public final MainStick mainStick; + @ParametersAreNonnullByDefault public MysteryStick9(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) { super(itemGroup, item, recipeType, recipe); this.defaultUsageKey = new NamespacedKey(FNAmplifications.getInstance(), "bowexp_xpfinal"); this.defaultUsageKey2 = new NamespacedKey(FNAmplifications.getInstance(), "bowdamage_damagefinal"); + this.mainStick = new MainStick(getStorageKey(), getStorageKey2(), enchantments(), weaponLore(), stickLore(), effectLore()); } protected @Nonnull @@ -56,39 +63,37 @@ NamespacedKey getStorageKey2() { return defaultUsageKey2; } - public void interact(PlayerInteractEvent e) { - Player player = e.getPlayer(); - ItemStack item1 = player.getInventory().getItemInMainHand(); + public Map enchantments(){ + Map enchantments = new HashMap<>(); + enchantments.put(Enchantment.ARROW_DAMAGE, 13); + enchantments.put(Enchantment.ARROW_INFINITE, 1); + enchantments.put(Enchantment.ARROW_FIRE, 10); + enchantments.put(Enchantment.ARROW_KNOCKBACK, 7); - ItemMeta meta = item1.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + return enchantments; + } - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damageAmount = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageAll = damageAmount.getOrDefault(key2, PersistentDataType.INTEGER, 0); + public String weaponLore(){ + return ChatColor.GOLD + "I wonder if Elves possess this relic"; + } + + public String stickLore(){ + return ChatColor.WHITE + "You need more mana when using this"; + } + public List effectLore(){ List lore2 = new ArrayList<>(); - meta.addEnchant(Enchantment.ARROW_DAMAGE, 13, true); - meta.addEnchant(Enchantment.ARROW_INFINITE, 1, true); - meta.addEnchant(Enchantment.ARROW_FIRE, 10, true); - meta.addEnchant(Enchantment.ARROW_KNOCKBACK, 7, true); - meta.setUnbreakable(true); - meta.setLore(loreUpdate(lore2, damageAll, xpamount)); - item1.setItemMeta(meta); - - if(!(item1.getType() == Material.BOW)) { - item1.setType(Material.BOW); - player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_MIRROR_MOVE, 1, 1); - player.getWorld().playEffect(player.getLocation().add(0.3, 0.4, 0.45), Effect.ENDER_SIGNAL, 1); - player.getWorld().spawnParticle(Particle.FLASH, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - player.getWorld().spawnParticle(Particle.CLOUD, player.getLocation().add(0.3, 0.4, 0.45), 2, 0.1, 0.1, 0.1, 0.1); - } + lore2.add(0,""); + lore2.add(1, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4&lEffects &f|◥◣◥◣◥◣◥◣")); + lore2.add(2, ChatColor.BLUE +"◆ 9% Chance 3s Levitation"); + lore2.add(3, ChatColor.BLUE +"◆ 8% Chance 4s Harm"); + lore2.add(4, ChatColor.BLUE +"◆ 8% Chance 3s Blindness"); + lore2.add(5, Utils.colorTranslator("&c◢◤◢◤◢◤◢◤| &4◢◤◤◥◤◥◥◣ &f|◥◣◥◣◥◣◥◣")); + return lore2; + } + public void interact(PlayerInteractEvent e) { + mainStick.onInteract(e, Material.BOW, true); } public void onSwing(EntityDamageByEntityEvent event){ @@ -97,6 +102,9 @@ public void onSwing(EntityDamageByEntityEvent event){ if(player == null){ return; } + if(event.getCause() == EntityDamageEvent.DamageCause.THORNS){ + return; + } ItemStack item = player.getInventory().getItemInMainHand(); if(item.getType() != Material.BOW) { @@ -104,21 +112,16 @@ public void onSwing(EntityDamageByEntityEvent event){ } ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } + List lore2 = meta.getLore(); PersistentDataContainer expUsed = meta.getPersistentDataContainer(); PersistentDataContainer damage = meta.getPersistentDataContainer(); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); + int damageamount = damage.getOrDefault(getStorageKey2(), PersistentDataType.INTEGER, 0); int get_Damage = (int) event.getDamage() + damageamount; - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - damage.set(key2, PersistentDataType.INTEGER, get_Damage); + int xpamount = expUsed.getOrDefault(getStorageKey(), PersistentDataType.INTEGER, 0); + damage.set(getStorageKey2(), PersistentDataType.INTEGER, get_Damage); - List lore2 = new ArrayList<>(); - meta.setLore(loreUpdate(lore2, get_Damage, xpamount)); + meta.setLore(mainStick.loreUpdate(lore2, get_Damage, xpamount, weaponLore(), true)); item.setItemMeta(meta); if(event.getEntity() instanceof LivingEntity) { @@ -135,74 +138,13 @@ public void onSwing(EntityDamageByEntityEvent event){ } if(player.getLevel() <= 20) { - player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 300, 2, false, false)); - player.sendTitle(ChatColor.DARK_RED + "Your vision darkens!", ChatColor.RED + "The stick is unpredictable", 45, 120, 135); - player.sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "[FNAmpli" + ChatColor.AQUA + "" + ChatColor.BOLD + "fications] > " + ChatColor.YELLOW + "You're too weak, make sure your exp level is higher than 20"); - transformWeapon(player, item); + mainStick.darkenVision(player, 20); + mainStick.transformWeapon(player, item, FNAmpItems.FN_STICK_9, 20, stickLore(), 2); } } - public List loreUpdate(List lore2, int get_Damage, int xpamount){ - lore2.add(0,ChatColor.GOLD + "I wonder if Elves possess this relic"); - lore2.add(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + xpamount); - lore2.add(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + get_Damage); - lore2.add(3, ""); - lore2.add(4, ChatColor.RED + "◢◤◢◤◢◤◢◤| "+ ChatColor.DARK_RED + "" + ChatColor.BOLD + "Effects " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - lore2.add(5, ChatColor.BLUE +"◆ 9% Chance 3s Levitation"); - lore2.add(6, ChatColor.BLUE +"◆ 8% Chance 4s Harm"); - lore2.add(7, ChatColor.BLUE +"◆ 8% Chance 3s Blindness"); - lore2.add(8, ChatColor.RED + "◢◤◢◤◢◤◢◤| " + ChatColor.DARK_RED + " ◢◤◤◥◤◥◥◣ " + ChatColor.WHITE + "|◥◣◥◣◥◣◥◣"); - return lore2; - } - public void LevelChange(PlayerLevelChangeEvent event){ - Player p = event.getPlayer(); - ItemStack item = p.getInventory().getItemInMainHand(); - if(event.getOldLevel() > event.getNewLevel() && p.getLevel() > 20) { - transformWeapon(p, item); - } - } - - public void transformWeapon(Player p, ItemStack item) { - CustomItemStack item2 = new CustomItemStack(FNAmpItems.FN_STICK_9); - - ItemMeta meta = item.getItemMeta(); - NamespacedKey key = getStorageKey(); - NamespacedKey key2 = getStorageKey2(); - if(meta == null){ - return; - } - - PersistentDataContainer expUsed = meta.getPersistentDataContainer(); - PersistentDataContainer damage = meta.getPersistentDataContainer(); - int xpamount = expUsed.getOrDefault(key, PersistentDataType.INTEGER, 0); - int damageamount = damage.getOrDefault(key2, PersistentDataType.INTEGER, 0); - int amount = ++xpamount + 2; - expUsed.set(key, PersistentDataType.INTEGER, amount); - - List lore = new ArrayList<>(); - meta.setLore(loreUpdate(lore, damageamount, amount)); - item.setItemMeta(meta); - - if (p.getLevel() <= 20) { - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.remove(3); - lore.set(0, ChatColor.WHITE + "You need more mana when using this"); - lore.set(1, ChatColor.YELLOW + "Exp Levels Consumed: " + ChatColor.WHITE + amount); - lore.set(2, ChatColor.YELLOW + "Total Damage inflicted: " + ChatColor.WHITE + damageamount); - meta.setLore(lore); - meta.removeEnchant(Enchantment.ARROW_DAMAGE); - meta.removeEnchant(Enchantment.ARROW_INFINITE); - meta.removeEnchant(Enchantment.ARROW_FIRE); - meta.removeEnchant(Enchantment.ARROW_KNOCKBACK); - item.setItemMeta(meta); - item.setType(item2.getType()); - } - + mainStick.levelChange(event, FNAmpItems.FN_STICK_9, 20, 2); } @Override diff --git a/src/main/java/ne/fnfal113/fnamplifications/Utils/PlayerJoinLister.java b/src/main/java/ne/fnfal113/fnamplifications/Utils/PlayerJoinLister.java index 4b175d55..0b6a282d 100644 --- a/src/main/java/ne/fnfal113/fnamplifications/Utils/PlayerJoinLister.java +++ b/src/main/java/ne/fnfal113/fnamplifications/Utils/PlayerJoinLister.java @@ -45,9 +45,9 @@ public String[] getChangelog(){ Utils.colorTranslator("&e&lFN &c&lAmpli&b&lfications &r&e" + FNAmplifications.getInstance().getDescription().getVersion()), Utils.colorTranslator("&fChangelog"), "", - Utils.colorTranslator("&d&l• &dAdded command to check FN Gear progress (/fngear)"), - Utils.colorTranslator("&d&l• &r&dAllow multi-blocks to output even with or without output chest"), - Utils.colorTranslator("&d&l• &r&dRewritten/Refactored the code for Gears and Quiver"), + Utils.colorTranslator("&d&l• &r&dAdded Retaliate Gem - return to me my weapon"), + Utils.colorTranslator("&d&l• &r&dRewritten/refactored Mystery Sticks code and also cleanups"), + Utils.colorTranslator("&d&l• &r&dRewritten/refactored the code for making weapons throwable"), Utils.colorTranslator("&e-FN_FAL113"), "||---------------------------------------------------||" );