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"),
"||---------------------------------------------------||"
);