mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-19 19:25:48 +00:00
Fixes #2999
This commit is contained in:
parent
739a31454c
commit
90c8e2f278
@ -44,6 +44,7 @@
|
|||||||
* Fixed #2987
|
* Fixed #2987
|
||||||
* Fixed #2989
|
* Fixed #2989
|
||||||
* Fixed #2977
|
* Fixed #2977
|
||||||
|
* Fixed #2999
|
||||||
|
|
||||||
## Release Candidate 22 (18 Apr 2021)
|
## Release Candidate 22 (18 Apr 2021)
|
||||||
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#22
|
https://thebusybiscuit.github.io/builds/TheBusyBiscuit/Slimefun4/stable/#22
|
||||||
|
@ -21,6 +21,7 @@ import org.bukkit.entity.LivingEntity;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.entity.Trident;
|
import org.bukkit.entity.Trident;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
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.enchantment.EnchantItemEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerExpChangeEvent;
|
import org.bukkit.event.player.PlayerExpChangeEvent;
|
||||||
import org.bukkit.event.player.PlayerItemBreakEvent;
|
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.implementation.settings.TalismanEnchantment;
|
||||||
import io.github.thebusybiscuit.slimefun4.utils.tags.SlimefunTag;
|
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 {
|
public class TalismanListener implements Listener {
|
||||||
|
|
||||||
private final int[] armorSlots = { 39, 38, 37, 36 };
|
private final int[] armorSlots = { 39, 38, 37, 36 };
|
||||||
@ -60,34 +69,43 @@ public class TalismanListener implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onDamageGet(EntityDamageEvent e) {
|
public void onDamageGet(EntityDamageEvent e) {
|
||||||
if (e.getEntity() instanceof Player) {
|
if (e.getEntity() instanceof Player) {
|
||||||
if (e.getCause() == DamageCause.LAVA) {
|
switch (e.getCause()) {
|
||||||
|
case LAVA:
|
||||||
|
// Fire Resistance when hitting lava
|
||||||
Talisman.trigger(e, SlimefunItems.TALISMAN_LAVA);
|
Talisman.trigger(e, SlimefunItems.TALISMAN_LAVA);
|
||||||
}
|
break;
|
||||||
|
case DROWNING:
|
||||||
if (e.getCause() == DamageCause.DROWNING) {
|
// Water Breathing when starting to drown
|
||||||
Talisman.trigger(e, SlimefunItems.TALISMAN_WATER);
|
Talisman.trigger(e, SlimefunItems.TALISMAN_WATER);
|
||||||
}
|
break;
|
||||||
|
case FALL:
|
||||||
if (e.getCause() == DamageCause.FALL) {
|
// 75% chance to prevent fall damage
|
||||||
Talisman.trigger(e, SlimefunItems.TALISMAN_ANGEL);
|
Talisman.trigger(e, SlimefunItems.TALISMAN_ANGEL);
|
||||||
}
|
break;
|
||||||
|
case FIRE:
|
||||||
if (e.getCause() == DamageCause.FIRE) {
|
// Fire Resistance when starting to burn
|
||||||
Talisman.trigger(e, SlimefunItems.TALISMAN_FIRE);
|
Talisman.trigger(e, SlimefunItems.TALISMAN_FIRE);
|
||||||
}
|
break;
|
||||||
|
case ENTITY_ATTACK:
|
||||||
if (e.getCause() == DamageCause.ENTITY_ATTACK) {
|
// 30% chance to get Regeneration
|
||||||
Talisman.trigger(e, SlimefunItems.TALISMAN_KNIGHT);
|
Talisman.trigger(e, SlimefunItems.TALISMAN_KNIGHT);
|
||||||
Talisman.trigger(e, SlimefunItems.TALISMAN_WARRIOR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.getCause() == DamageCause.PROJECTILE && e instanceof EntityDamageByEntityEvent) {
|
// Strength III when getting attacked
|
||||||
|
Talisman.trigger(e, SlimefunItems.TALISMAN_WARRIOR);
|
||||||
|
break;
|
||||||
|
case PROJECTILE:
|
||||||
|
if (e instanceof EntityDamageByEntityEvent) {
|
||||||
onProjectileDamage((EntityDamageByEntityEvent) e);
|
onProjectileDamage((EntityDamageByEntityEvent) e);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onProjectileDamage(@Nonnull EntityDamageByEntityEvent e) {
|
private void onProjectileDamage(@Nonnull EntityDamageByEntityEvent e) {
|
||||||
|
// "Fixes" #1022 - We just ignore Tridents now.
|
||||||
if (e.getDamager() instanceof Projectile && !(e.getDamager() instanceof Trident)) {
|
if (e.getDamager() instanceof Projectile && !(e.getDamager() instanceof Trident)) {
|
||||||
Projectile projectile = (Projectile) e.getDamager();
|
Projectile projectile = (Projectile) e.getDamager();
|
||||||
|
|
||||||
@ -136,13 +154,18 @@ public class TalismanListener implements Listener {
|
|||||||
LivingEntity entity = e.getEntity();
|
LivingEntity entity = e.getEntity();
|
||||||
|
|
||||||
if (entity instanceof Player || entity instanceof ArmorStand) {
|
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;
|
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)) {
|
if (!entity.getCanPickupItems() && Talisman.trigger(e, SlimefunItems.TALISMAN_HUNTER)) {
|
||||||
Collection<ItemStack> extraDrops = getExtraDrops(e.getEntity(), e.getDrops());
|
Collection<ItemStack> 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!
|
* WARNING: This check is broken as entities now set their
|
||||||
|
* equipment to NULL before calling the event!
|
||||||
// Prevents duplication of handheld items or armor
|
*
|
||||||
|
* It prevents duplication of handheld items or armor.
|
||||||
|
*/
|
||||||
EntityEquipment equipment = entity.getEquipment();
|
EntityEquipment equipment = entity.getEquipment();
|
||||||
|
|
||||||
if (equipment != null) {
|
if (equipment != null) {
|
||||||
for (ItemStack item : equipment.getArmorContents()) {
|
for (ItemStack item : equipment.getArmorContents()) {
|
||||||
items.remove(item);
|
items.remove(item);
|
||||||
@ -240,8 +266,10 @@ public class TalismanListener implements Listener {
|
|||||||
|
|
||||||
if (enchantment != null && Talisman.trigger(e, SlimefunItems.TALISMAN_MAGICIAN)) {
|
if (enchantment != null && Talisman.trigger(e, SlimefunItems.TALISMAN_MAGICIAN)) {
|
||||||
/*
|
/*
|
||||||
* Fix #2679
|
* Fixes #2679
|
||||||
* By default, the Bukkit API doesn't allow us to give enchantment books extra enchantments.
|
*
|
||||||
|
* By default, the Bukkit API doesn't allow us to give enchantment books
|
||||||
|
* extra enchantments.
|
||||||
*/
|
*/
|
||||||
if (talisman.isEnchantmentBookAllowed() && e.getItem().getType() == Material.BOOK) {
|
if (talisman.isEnchantmentBookAllowed() && e.getItem().getType() == Material.BOOK) {
|
||||||
e.getItem().addUnsafeEnchantment(enchantment.getEnchantment(), enchantment.getLevel());
|
e.getItem().addUnsafeEnchantment(enchantment.getEnchantment(), enchantment.getLevel());
|
||||||
|
@ -818,7 +818,7 @@ public final class SlimefunItemSetup {
|
|||||||
|
|
||||||
new Talisman(SlimefunItems.TALISMAN_MINER,
|
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},
|
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);
|
.register(plugin);
|
||||||
|
|
||||||
new Talisman(SlimefunItems.TALISMAN_HUNTER,
|
new Talisman(SlimefunItems.TALISMAN_HUNTER,
|
||||||
|
Loading…
Reference in New Issue
Block a user