diff --git a/pom.xml b/pom.xml
index 5795620c..4655cba7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
ne.fnfal113
FNAmplifications
- 3.1.7-UNOFFICIAL
+ 3.1.8-UNOFFICIAL
jar
FNAmplifications
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/AchillesHeelGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/AchillesHeelGem.java
index 68f505de..bdc9f23d 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/AchillesHeelGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/AchillesHeelGem.java
@@ -21,6 +21,8 @@
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
+import java.util.concurrent.ThreadLocalRandom;
+
public class AchillesHeelGem extends AbstractGem implements OnProjectileDamageHandler {
@Getter
@@ -58,8 +60,10 @@ public void onProjectileDamage(EntityDamageByEntityEvent event, Player shooter,
return;
}
- if((projectile.getLocation().getY() - entity.getLocation().getY()) < 0.5){
+ if(ThreadLocalRandom.current().nextInt(100) < getChance() &&
+ (projectile.getLocation().getY() - entity.getLocation().getY()) < 0.5){
event.setDamage(event.getDamage() * 2.0);
+ shooter.sendMessage(Utils.colorTranslator("&6Achilles heel gem has taken effect!"));
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/AdamantineGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/AdamantineGem.java
index a1c5252f..95f3dc04 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/AdamantineGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/AdamantineGem.java
@@ -52,9 +52,11 @@ public void onDrag(InventoryClickEvent event, Player player) {
@Override
public void onDurabilityChange(PlayerItemDamageEvent event) {
- int random = ThreadLocalRandom.current().nextInt(100);
- if(random < getChance()){
+
+ if(ThreadLocalRandom.current().nextInt(100) < getChance()){
event.setCancelled(true);
+ event.getPlayer().sendMessage(Utils.colorTranslator("&6Adamantine gem has taken effect!"));
}
}
+
}
\ No newline at end of file
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/ArmorImpairGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/ArmorImpairGem.java
index ab3ba3d6..dc86a0eb 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/ArmorImpairGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/ArmorImpairGem.java
@@ -68,6 +68,7 @@ public void onDamage(EntityDamageByEntityEvent event){
Damageable damageable = (Damageable) meta;
damageable.setDamage(damageable.getDamage() + 4);
entityEquipment.setItemMeta(meta);
+ event.getDamager().sendMessage(Utils.colorTranslator("&eArmor impair gem has taken effect!"));
}
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/ArrowAvertGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/ArrowAvertGem.java
index 0a465371..40b28639 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/ArrowAvertGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/ArrowAvertGem.java
@@ -54,7 +54,7 @@ public void onDrag(InventoryClickEvent event, Player player) {
public void onDamage(EntityDamageByEntityEvent event) {
if(ThreadLocalRandom.current().nextInt(100) < getChance() &&
event.getCause() == EntityDamageEvent.DamageCause.PROJECTILE){
- event.getEntity().sendMessage(Utils.colorTranslator("&6Enemy arrow deflected! arrow avert gem has taken effect."));
+ event.getEntity().sendMessage(Utils.colorTranslator("&6Arrow avert gem has taken effect!"));
event.setCancelled(true);
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/AvengeGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/AvengeGem.java
index 80537ea3..6f950054 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/AvengeGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/AvengeGem.java
@@ -59,6 +59,7 @@ public void onPlayerDeath(PlayerDeathEvent event) {
Creeper creeper = player.getWorld().spawn(loc.clone(), Creeper.class);
creeper.setPowered(true); // big boomer creeper
creeper.setExplosionRadius(3);
+ event.getEntity().sendMessage(Utils.colorTranslator("&cAvenge gem has taken effect!"));
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/BlindBindGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/BlindBindGem.java
index 82b637ed..9b14b33d 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/BlindBindGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/BlindBindGem.java
@@ -66,6 +66,7 @@ public void onProjectileDamage(EntityDamageByEntityEvent event, Player shooter,
if(ThreadLocalRandom.current().nextInt(100) < getChance()){
entity.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 80, 2, true, false, false));
+ shooter.sendMessage(Utils.colorTranslator("&cBlind bind gem has taken effect!"));
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/DeberserkGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/DeberserkGem.java
index 111d63bc..12cf8293 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/DeberserkGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/DeberserkGem.java
@@ -56,6 +56,7 @@ public void onDamage(EntityDamageByEntityEvent event) {
if(!(event.getDamager() instanceof LivingEntity)){
return;
}
+
LivingEntity damager = (LivingEntity) event.getDamager();
if(damager.getEquipment() == null){
@@ -63,9 +64,9 @@ public void onDamage(EntityDamageByEntityEvent event) {
}
if(WeaponArmorEnum.AXES.isTagged(damager.getEquipment().getItemInMainHand().getType())){
- int random = ThreadLocalRandom.current().nextInt(100);
- if(random < getChance()){
+ if(ThreadLocalRandom.current().nextInt(100) < getChance()){
event.setDamage(event.getDamage() * 0.75);
+ event.getDamager().sendMessage(Utils.colorTranslator("&6Deberserk gem has taken effect!"));
}
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/DisarmorGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/DisarmorGem.java
new file mode 100644
index 00000000..1b76bda2
--- /dev/null
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/DisarmorGem.java
@@ -0,0 +1,96 @@
+package ne.fnfal113.fnamplifications.gems;
+
+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 lombok.Getter;
+import ne.fnfal113.fnamplifications.FNAmplifications;
+import ne.fnfal113.fnamplifications.gems.abstracts.AbstractGem;
+import ne.fnfal113.fnamplifications.gems.handlers.OnDamageHandler;
+import ne.fnfal113.fnamplifications.gems.implementation.Gem;
+import ne.fnfal113.fnamplifications.utils.Utils;
+import ne.fnfal113.fnamplifications.utils.WeaponArmorEnum;
+import org.bukkit.entity.Player;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.ItemStack;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+public class DisarmorGem extends AbstractGem implements OnDamageHandler {
+
+ @Getter
+ private final int chance;
+
+ public DisarmorGem(ItemGroup itemGroup, SlimefunItemStack item, RecipeType recipeType, ItemStack[] recipe) {
+ super(itemGroup, item, recipeType, recipe, 10);
+
+ this.chance = FNAmplifications.getInstance().getConfigManager().getValueById(this.getId() + "-percent-chance");
+ }
+
+ @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) {
+ if (WeaponArmorEnum.AXES.isTagged(currentItem.getType()) || WeaponArmorEnum.SWORDS.isTagged(currentItem.getType())) {
+ new Gem(slimefunItem, currentItem, player).onDrag(event, false);
+ } else {
+ player.sendMessage(Utils.colorTranslator("&eInvalid item to socket! Gem works on swords and axes only"));
+ }
+ }
+ }
+
+ @Override
+ public void onDamage(EntityDamageByEntityEvent event) {
+ if(!(event.getEntity() instanceof Player) || !(event.getDamager() instanceof Player)){
+ return;
+ }
+ Player victim = (Player) event.getEntity();
+ Player damager = (Player) event.getDamager();
+
+ if(ThreadLocalRandom.current().nextInt(100) < getChance()) {
+ int slot = victim.getInventory().firstEmpty();
+
+ if (victim.getInventory().getHelmet() != null && ThreadLocalRandom.current().nextInt(100) < 50) {
+ ItemStack helmet = victim.getInventory().getHelmet();
+ victim.getInventory().setHelmet(null);
+
+ moveArmorToInventory(slot, victim, damager, helmet);
+ } else if(victim.getInventory().getChestplate() != null && ThreadLocalRandom.current().nextInt(100) < 50){
+ ItemStack chestplate = victim.getInventory().getChestplate();
+ victim.getInventory().setChestplate(null);
+
+ moveArmorToInventory(slot, victim, damager, chestplate);
+ } else if(victim.getInventory().getLeggings() != null && ThreadLocalRandom.current().nextInt(100) < 50){
+ ItemStack leggings = victim.getInventory().getLeggings();
+ victim.getInventory().setLeggings(null);
+
+ moveArmorToInventory(slot, victim, damager, leggings);
+ } else if(victim.getInventory().getBoots() != null && ThreadLocalRandom.current().nextInt(100) < 50){
+ ItemStack boots = victim.getInventory().getBoots();
+ victim.getInventory().setBoots(null);
+
+ moveArmorToInventory(slot, victim, damager, boots);
+ }
+ }
+
+ }
+
+ public void moveArmorToInventory(int slot, Player victim, Player damager, ItemStack armor){
+ if (slot != -1) {
+ victim.getInventory().setItem(slot, armor.clone());
+ } else {
+ victim.getWorld().dropItem(victim.getLocation(), armor.clone());
+ }
+ damager.sendMessage(Utils.colorTranslator("&6Disarmor gem has taken effect!"));
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/GuardianGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/GuardianGem.java
index 7d3e83d5..034928b5 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/GuardianGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/GuardianGem.java
@@ -92,6 +92,7 @@ public void onDamage(EntityDamageByEntityEvent event){
return;
}
+ player.sendMessage(Utils.colorTranslator("&6Guardian gem has taken effect!"));
runnableMap.put(player.getUniqueId(),
guardianTask.runTaskTimer(FNAmplifications.getInstance(), 5L, 3L));
entityUUIDMap.put(player.getUniqueId(), guardianTask.getZombie());
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/ImpostorGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/ImpostorGem.java
index cf8fec68..efb603fe 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/ImpostorGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/ImpostorGem.java
@@ -74,6 +74,7 @@ public void onDamage(EntityDamageByEntityEvent event){
Location newDamagerLoc = new Location(victim.getWorld(), damager.getLocation().getX() - nX,
damager.getLocation().getY(), damager.getLocation().getZ() - nZ, damager.getLocation().getYaw(), damager.getLocation().getPitch());
victim.teleport(newDamagerLoc);
+ victim.sendMessage(Utils.colorTranslator("&6Impostor gem has taken effect!"));
} // teleport behind the attacker
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/InfernoGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/InfernoGem.java
index 4522753c..f12b2def 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/InfernoGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/InfernoGem.java
@@ -63,6 +63,7 @@ public void onDamage(EntityDamageByEntityEvent event){
if(random < getChance()){
livingEntity.setFireTicks(60);
+ event.getDamager().sendMessage(Utils.colorTranslator("&cInferno gem has taken effect!"));
} // set the attacked entity on fire
for(Entity entity : livingEntity.getNearbyEntities(7, 4,7)){
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/ParryGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/ParryGem.java
index a7c91473..cdaa27e4 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/ParryGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/ParryGem.java
@@ -66,6 +66,7 @@ public void onDamage(EntityDamageByEntityEvent event) {
int random = ThreadLocalRandom.current().nextInt(100);
if(random < getChance()){
event.setDamage(event.getDamage() * 0.75);
+ event.getDamager().sendMessage(Utils.colorTranslator("&6Parry gem has taken effect!"));
}
}
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/PsychokinesisGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/PsychokinesisGem.java
index b9343a89..11002e44 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/PsychokinesisGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/PsychokinesisGem.java
@@ -62,6 +62,7 @@ public void onProjectileDamage(EntityDamageByEntityEvent event, Player shooter,
if(ThreadLocalRandom.current().nextInt(100) < getChance()){
shooter.getWorld().spawnParticle(Particle.FLASH, entity.getLocation(), 2);
entity.teleport(shooter);
+ shooter.sendMessage(Utils.colorTranslator("&6Psychokinesis gem has taken effect!"));
}
}
}
\ No newline at end of file
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/StoutGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/StoutGem.java
index 778a90e0..680a2828 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/StoutGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/StoutGem.java
@@ -51,9 +51,10 @@ public void onDrag(InventoryClickEvent event, Player player) {
@Override
public void onDurabilityChange(PlayerItemDamageEvent event) {
- int random = ThreadLocalRandom.current().nextInt(100);
- if(random < getChance()){
+ if(ThreadLocalRandom.current().nextInt(100) < getChance()){
event.setCancelled(true);
+ event.getPlayer().sendMessage(Utils.colorTranslator("&6Stout gem has taken effect!"));
}
}
+
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/ThornAwayGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/ThornAwayGem.java
index aef92237..700a479c 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/ThornAwayGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/ThornAwayGem.java
@@ -62,6 +62,7 @@ public void onDamage(EntityDamageByEntityEvent event){
if(ThreadLocalRandom.current().nextInt(100) < getChance()){
event.setCancelled(true);
+ event.getEntity().sendMessage(Utils.colorTranslator("&6Thorn away gem has taken effect!"));
} // cancel any thorn damage
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/ThunderBoltGem.java b/src/main/java/ne/fnfal113/fnamplifications/gems/ThunderBoltGem.java
index 532b2dfb..2774fc15 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/ThunderBoltGem.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/ThunderBoltGem.java
@@ -60,6 +60,7 @@ public void onDamage(EntityDamageByEntityEvent event){
if(ThreadLocalRandom.current().nextInt(100) < getChance()){
livingEntity.getWorld().strikeLightning(livingEntity.getLocation());
player.setNoDamageTicks(20);
+ player.sendMessage(Utils.colorTranslator("&6Thunderbolt gem has taken effect!"));
} // if below the chance, strike lightning at the victim and set no damage for the attacker for 1 second
}
}
\ No newline at end of file
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/RegisterGems.java b/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/RegisterGems.java
index 2f7b6ea0..a217535a 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/RegisterGems.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/RegisterGems.java
@@ -149,9 +149,15 @@ FNAmpItems.PESTILENCE_RUNE, new ItemStack(Material.ROTTEN_FLESH), FNAmpItems.PES
.register(instance);
new AchillesHeelGem(FNAmpItems.FN_GEMS, FNAmpItems.FN_GEM_ACHILLES_HEEL, FnGemAltar.RECIPE_TYPE, new ItemStack[]{
- FNAmpItems.PESTILENCE_RUNE, new ItemStack(Material.ROTTEN_FLESH), FNAmpItems.PESTILENCE_RUNE,
- new ItemStack(Material.ROTTEN_FLESH), new ItemStack(Material.EMERALD), new ItemStack(Material.ROTTEN_FLESH),
- FNAmpItems.LINGER_RUNE, SlimefunItems.MAGIC_SUGAR, FNAmpItems.LINGER_RUNE})
+ FNAmpItems.AGILITY_RUNE, new ItemStack(Material.FEATHER), FNAmpItems.AGILITY_RUNE,
+ new ItemStack(Material.ARROW), new ItemStack(Material.EMERALD), new ItemStack(Material.ARROW),
+ FNAmpItems.PESTILENCE_RUNE, null, FNAmpItems.INTELLECT_RUNE})
+ .register(instance);
+
+ new DisarmorGem(FNAmpItems.FN_GEMS, FNAmpItems.FN_GEM_DISARMOR, FnGemAltar.RECIPE_TYPE, new ItemStack[]{
+ FNAmpItems.INTELLECT_RUNE, null, FNAmpItems.PESTILENCE_RUNE,
+ new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.EMERALD), new ItemStack(Material.BLAZE_POWDER),
+ FNAmpItems.POWER_RUNE, null, FNAmpItems.INTELLECT_RUNE})
.register(instance);
new FlawlessUnbindGem(FNAmpItems.FN_GEMS, FNAmpItems.FN_GEM_FLAWLESS_UNBIND, FnGemAltar.RECIPE_TYPE, new ItemStack[]{
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ReturnWeaponTask.java b/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ReturnWeaponTask.java
index a5b6a9a7..5aa6d613 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ReturnWeaponTask.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ReturnWeaponTask.java
@@ -3,6 +3,7 @@
import lombok.Getter;
import ne.fnfal113.fnamplifications.utils.Utils;
import org.bukkit.Location;
+import org.bukkit.Sound;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
@@ -34,11 +35,13 @@ public void run() {
getArmorStand().teleport(asLocation.subtract(asVector.subtract(pVector).normalize()).setDirection(pLocation.getDirection()));
+ // if player is not online, drop the throwable immediately
if(!getPlayer().isOnline()){
dropItem(asLocation);
stopTask();
}
+ // drop the item if the distance between player and throwable is square root of 150 blocks away
if(distanceBetween(asLocation, pLocation) > 150){
Location dropLoc = dropItem(asLocation);
getPlayer().sendMessage(Utils.colorTranslator("&cWeapon has not been returned because you're too far!"));
@@ -57,12 +60,12 @@ public void run() {
} else {
getPlayer().getInventory().addItem(getItemStack().clone());
}
-
+ getPlayer().playSound(getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 1.0F, 1.0F);
stopTask();
}
}
- public Location dropItem(Location location){
+ public Location dropItem(Location location){ // drop the throwable weapon if player inventory is full
Item droppedItem = getPlayer().getWorld().dropItem(location, getItemStack().clone());
droppedItem.setOwner(getPlayer().getUniqueId());
droppedItem.setGlowing(true);
@@ -70,11 +73,12 @@ public Location dropItem(Location location){
return droppedItem.getLocation();
}
+ // get the distance between two locations and return the square root of the distance
public double distanceBetween(Location asLoc, Location pLoc){
return asLoc.distance(pLoc);
}
- public void stopTask(){
+ public void stopTask(){ // stop the task once task has been completed
getArmorStand().remove();
this.cancel();
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ThrowableWeapon.java b/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ThrowableWeapon.java
index acedcc49..557bf1dc 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ThrowableWeapon.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/implementation/ThrowableWeapon.java
@@ -59,6 +59,8 @@ public boolean isBelow4Weapons(Player player){
public void floatThrowItem(Player player, ItemStack itemStack, boolean returnWeapon){
ArmorStand as = spawnArmorstand(player, itemStack, false);
+ player.playSound(player.getLocation(), Sound.ENTITY_ILLUSIONER_PREPARE_MIRROR, 1.0F, 1.0F);
+
int id = Bukkit.getScheduler().runTaskTimer(FNAmplifications.getInstance(), () -> {
int x = ThreadLocalRandom.current().nextInt(3);
int xFinal = x < 1 ? -2 : 2;
@@ -79,6 +81,7 @@ public void throwWeapon(Player player, ArmorStand as, ItemStack itemStack, boole
Vector vector = player.getLocation().add(player.getLocation().getDirection().multiply(9).normalize())
.subtract(player.getLocation().toVector()).toVector();
+ player.playSound(player.getLocation(), Sound.ENTITY_WITCH_THROW, 1.0F, 1.0F);
Bukkit.getScheduler().runTaskLater(FNAmplifications.getInstance(), () -> {
as.teleport(player.getLocation().add(0,0.9, 0));
diff --git a/src/main/java/ne/fnfal113/fnamplifications/gems/listener/GemListener.java b/src/main/java/ne/fnfal113/fnamplifications/gems/listener/GemListener.java
index c22b8d7d..11567f04 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/gems/listener/GemListener.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/gems/listener/GemListener.java
@@ -56,7 +56,7 @@ public void onGuardianSpawn(GuardianSpawnEvent event){
callGemHandler(OnGuardianSpawnHandler.class, handler -> handler.onGuardianSpawn(event), itemStack, pdc);
}
- public void callGemHandler(Class clazz, Consumer consumer, ItemStack itemStack ,PersistentDataContainer pdc) {
+ public void callGemHandler(Class clazz, Consumer consumer, ItemStack itemStack, PersistentDataContainer pdc) {
if (pdc.has(new NamespacedKey(FNAmplifications.getInstance(),
itemStack.getType().toString().toLowerCase() + "_socket_amount"), PersistentDataType.INTEGER)) {
for (NamespacedKey key : GemKeysEnum.GEM_KEYS_ENUM.getGEM_KEYS()) {
@@ -128,6 +128,11 @@ public void onEntityDamage(EntityDamageByEntityEvent event){
Player player = (Player) projectile.getShooter();
LivingEntity livingEntity = (LivingEntity) event.getEntity();
+
+ if(player.getInventory().getItemInMainHand().getType() == Material.AIR){
+ return;
+ }
+
ItemStack itemStackHand = player.getInventory().getItemInMainHand();
PersistentDataContainer pdcHand = getPersistentDataContainer(itemStackHand);
@@ -142,13 +147,15 @@ public void onEntityDamage(EntityDamageByEntityEvent event){
if(event.getDamager() instanceof Player && event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
Player player = (Player) event.getDamager();
- if(player.getInventory().getItemInMainHand().getType() != Material.AIR) {
- ItemStack itemStackHand = player.getInventory().getItemInMainHand();
- PersistentDataContainer pdcHand = getPersistentDataContainer(itemStackHand);
-
- callGemHandler(OnDamageHandler.class, handler -> handler.onDamage(event), itemStackHand, pdcHand);
+ if(player.getInventory().getItemInMainHand().getType() == Material.AIR) {
+ return;
} // check if player is holding an item in main hand
+ ItemStack itemStackHand = player.getInventory().getItemInMainHand();
+ PersistentDataContainer pdcHand = getPersistentDataContainer(itemStackHand);
+
+ callGemHandler(OnDamageHandler.class, handler -> handler.onDamage(event), itemStackHand, pdcHand);
+
if(event.getEntity().getPersistentDataContainer().has(Keys.GUARDIAN_KEY, PersistentDataType.STRING)){
if(Objects.equals(event.getEntity().getPersistentDataContainer().get(Keys.GUARDIAN_KEY, PersistentDataType.STRING), player.getName())) {
event.setCancelled(true);
@@ -275,7 +282,7 @@ public SlimefunItem getSfItem(NamespacedKey key, PersistentDataContainer pdc){
public PersistentDataContainer getPersistentDataContainer(ItemStack itemStack){
ItemMeta meta = itemStack.getItemMeta();
- Validate.notNull(meta, "Meta must not be null!");
+ Validate.notNull(meta, "Meta must not be null! Item type (for debugging): " + itemStack.getType());
return meta.getPersistentDataContainer();
}
diff --git a/src/main/java/ne/fnfal113/fnamplifications/items/FNAmpItems.java b/src/main/java/ne/fnfal113/fnamplifications/items/FNAmpItems.java
index d745c77c..6acd5951 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/items/FNAmpItems.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/items/FNAmpItems.java
@@ -1957,6 +1957,18 @@ private FNAmpItems() {}
"&dto bind this gem"
);
+ public static final SlimefunItemStack FN_GEM_AVENGE = new SlimefunItemStack(
+ "FN_GEM_AVENGE",
+ Material.EMERALD,
+ "&cAvenge Gem",
+ "",
+ "&e% chance to spawn primed creeper",
+ "&eupon player death at same location",
+ "",
+ "&dDrag and drop on a boots",
+ "&dto bind this gem"
+ );
+
public static final SlimefunItemStack FN_GEM_ACHILLES_HEEL = new SlimefunItemStack(
"FN_GEM_ACHILLES_HEEL",
Material.EMERALD,
@@ -1970,15 +1982,15 @@ private FNAmpItems() {}
"&dto bind this gem"
);
- public static final SlimefunItemStack FN_GEM_AVENGE = new SlimefunItemStack(
- "FN_GEM_AVENGE",
+ public static final SlimefunItemStack FN_GEM_DISARMOR = new SlimefunItemStack(
+ "FN_GEM_DISARMOR",
Material.EMERALD,
- "&cAvenge Gem",
+ "&cDisarmor Gem",
"",
- "&e% chance to spawn primed creeper",
- "&eupon player death at same location",
+ "&e% chance of unequipping a random",
+ "&earmor piece from your enemy",
"",
- "&dDrag and drop on a boots",
+ "&dDrag and drop on sword or axe",
"&dto bind this gem"
);
diff --git a/src/main/java/ne/fnfal113/fnamplifications/materialgenerators/implementations/CustomMaterialGenerator.java b/src/main/java/ne/fnfal113/fnamplifications/materialgenerators/implementations/CustomMaterialGenerator.java
index 10bdcef6..9d1e05f1 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/materialgenerators/implementations/CustomMaterialGenerator.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/materialgenerators/implementations/CustomMaterialGenerator.java
@@ -109,9 +109,12 @@ public void onPlayerPlace(@Nonnull BlockPlaceEvent e) {
public void onPlayerBreak(@Nonnull BlockBreakEvent e, @Nonnull ItemStack item, @Nonnull List drops) {
if(BlockStorage.getLocationInfo(e.getBlock().getLocation(), "generator_status") != null) {
e.setDropItems(false);
+ e.setCancelled(true);
+ e.getBlock().setType(Material.AIR);
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(),
SlimefunItem.getById(BlockStorage.getLocationInfo(e.getBlock().getLocation(), "id") + "_BROKEN").getItem());
generatorStatus.remove(new BlockPosition(e.getBlock().getLocation()));
+ BlockStorage.clearBlockInfo(e.getBlock().getLocation());
} else {
e.getPlayer().sendMessage(Utils.
colorTranslator("&cSlimefun block data is missing! Please ask for replacement from your server admin"));
diff --git a/src/main/java/ne/fnfal113/fnamplifications/utils/PlayerJoinLister.java b/src/main/java/ne/fnfal113/fnamplifications/utils/PlayerJoinLister.java
index de37c4b4..2502234b 100644
--- a/src/main/java/ne/fnfal113/fnamplifications/utils/PlayerJoinLister.java
+++ b/src/main/java/ne/fnfal113/fnamplifications/utils/PlayerJoinLister.java
@@ -45,10 +45,13 @@ public String[] getChangelog(){
Utils.colorTranslator("&e&lFN &c&lAmpli&b&lfications &r&e" + FNAmplifications.getInstance().getDescription().getVersion()),
Utils.colorTranslator("&fChangelog"),
"",
- Utils.colorTranslator("&d&l• &r&d&lAdded new gems"),
- Utils.colorTranslator(" &bAvenge, Awaken and Achilles Heel Gem"),
- Utils.colorTranslator("&d&l• &r&d&lFixed &r&dblock rotator small bug"),
- Utils.colorTranslator("&d&l• &r&d&lSome code refactors"),
+ Utils.colorTranslator("&d&l• &r&d&lAdded Disarmor gem"),
+ Utils.colorTranslator(" &ba chance to disamor your enemy armor!"),
+ Utils.colorTranslator("&d&l• &r&d&lFixed &r&dimportant bugs"),
+ Utils.colorTranslator("&d&l• &r&dAdded gem messages to know it"),
+ Utils.colorTranslator(" &bhas taken effect when triggered"),
+ Utils.colorTranslator("&d&l• &r&dAdded throw and return weapon sounds"),
+ Utils.colorTranslator(" &bfor axe throwie, damnation and tri-sword gem"),
Utils.colorTranslator(""),
Utils.colorTranslator("&ehttps://github.com/FN-FAL113"),
"||---------------------------------------------------||"