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