diff --git a/CHANGELOG.md b/CHANGELOG.md index caa1d7dd3..40a9227b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ * Fixed #2987 * Fixed #2989 * Fixed #2977 +* Fixed #2999 ## Release Candidate 22 (18 Apr 2021) https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#22 diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index 45e04c655..bb21818e2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -21,6 +21,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.Trident; +import org.bukkit.event.Event; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -29,7 +30,6 @@ import org.bukkit.event.block.BlockDropItemEvent; import org.bukkit.event.enchantment.EnchantItemEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerItemBreakEvent; @@ -49,6 +49,15 @@ import io.github.thebusybiscuit.slimefun4.implementation.items.magical.talismans import io.github.thebusybiscuit.slimefun4.implementation.settings.TalismanEnchantment; import io.github.thebusybiscuit.slimefun4.utils.tags.SlimefunTag; +/** + * This {@link Listener} is responsible for handling any {@link Event} + * that is required for activating a {@link Talisman}. + * + * @author TheBusyBiscuit + * + * @see Talisman + * + */ public class TalismanListener implements Listener { private final int[] armorSlots = { 39, 38, 37, 36 }; @@ -60,34 +69,43 @@ public class TalismanListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onDamageGet(EntityDamageEvent e) { if (e.getEntity() instanceof Player) { - if (e.getCause() == DamageCause.LAVA) { - Talisman.trigger(e, SlimefunItems.TALISMAN_LAVA); - } + switch (e.getCause()) { + case LAVA: + // Fire Resistance when hitting lava + Talisman.trigger(e, SlimefunItems.TALISMAN_LAVA); + break; + case DROWNING: + // Water Breathing when starting to drown + Talisman.trigger(e, SlimefunItems.TALISMAN_WATER); + break; + case FALL: + // 75% chance to prevent fall damage + Talisman.trigger(e, SlimefunItems.TALISMAN_ANGEL); + break; + case FIRE: + // Fire Resistance when starting to burn + Talisman.trigger(e, SlimefunItems.TALISMAN_FIRE); + break; + case ENTITY_ATTACK: + // 30% chance to get Regeneration + Talisman.trigger(e, SlimefunItems.TALISMAN_KNIGHT); - if (e.getCause() == DamageCause.DROWNING) { - Talisman.trigger(e, SlimefunItems.TALISMAN_WATER); - } - - if (e.getCause() == DamageCause.FALL) { - Talisman.trigger(e, SlimefunItems.TALISMAN_ANGEL); - } - - if (e.getCause() == DamageCause.FIRE) { - Talisman.trigger(e, SlimefunItems.TALISMAN_FIRE); - } - - if (e.getCause() == DamageCause.ENTITY_ATTACK) { - Talisman.trigger(e, SlimefunItems.TALISMAN_KNIGHT); - Talisman.trigger(e, SlimefunItems.TALISMAN_WARRIOR); - } - - if (e.getCause() == DamageCause.PROJECTILE && e instanceof EntityDamageByEntityEvent) { - onProjectileDamage((EntityDamageByEntityEvent) e); + // Strength III when getting attacked + Talisman.trigger(e, SlimefunItems.TALISMAN_WARRIOR); + break; + case PROJECTILE: + if (e instanceof EntityDamageByEntityEvent) { + onProjectileDamage((EntityDamageByEntityEvent) e); + } + break; + default: + break; } } } private void onProjectileDamage(@Nonnull EntityDamageByEntityEvent e) { + // "Fixes" #1022 - We just ignore Tridents now. if (e.getDamager() instanceof Projectile && !(e.getDamager() instanceof Trident)) { Projectile projectile = (Projectile) e.getDamager(); @@ -136,13 +154,18 @@ public class TalismanListener implements Listener { LivingEntity entity = e.getEntity(); if (entity instanceof Player || entity instanceof ArmorStand) { - // We absolutely don't want to double the - // drops from players or ArmorStands + /* + * We absolutely don't want to double the + * drops from players or ArmorStands + */ return; } - // We are also excluding entities which can pickup items, this is not perfect - // but it at least prevents dupes by tossing items to zombies + /* + * We are also excluding entities which can pickup items, + * this is not perfect but it at least prevents dupes + * by tossing items to zombies. + */ if (!entity.getCanPickupItems() && Talisman.trigger(e, SlimefunItems.TALISMAN_HUNTER)) { Collection extraDrops = getExtraDrops(e.getEntity(), e.getDrops()); @@ -173,11 +196,14 @@ public class TalismanListener implements Listener { } } - // WARNING: This check is broken as entities now set their - // equipment to NULL before calling the event! - - // Prevents duplication of handheld items or armor + /* + * WARNING: This check is broken as entities now set their + * equipment to NULL before calling the event! + * + * It prevents duplication of handheld items or armor. + */ EntityEquipment equipment = entity.getEquipment(); + if (equipment != null) { for (ItemStack item : equipment.getArmorContents()) { items.remove(item); @@ -240,8 +266,10 @@ public class TalismanListener implements Listener { if (enchantment != null && Talisman.trigger(e, SlimefunItems.TALISMAN_MAGICIAN)) { /* - * Fix #2679 - * By default, the Bukkit API doesn't allow us to give enchantment books extra enchantments. + * Fixes #2679 + * + * By default, the Bukkit API doesn't allow us to give enchantment books + * extra enchantments. */ if (talisman.isEnchantmentBookAllowed() && e.getItem().getType() == Material.BOOK) { e.getItem().addUnsafeEnchantment(enchantment.getEnchantment(), enchantment.getLevel()); diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java index 4ba64a463..42b714a4e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/setup/SlimefunItemSetup.java @@ -818,7 +818,7 @@ public final class SlimefunItemSetup { new Talisman(SlimefunItems.TALISMAN_MINER, new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.COMMON_TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, null, 20) + false, false, "miner", 20) .register(plugin); new Talisman(SlimefunItems.TALISMAN_HUNTER,