mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-02-27 15:31:22 +01:00
Spectral arrows are now considered arrows
This commit is contained in:
parent
d1f2af29c3
commit
3600ce63e4
@ -4,14 +4,14 @@ import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.gson.JsonParser;
|
||||
import io.lumine.mythic.lib.player.particle.ParticleInformation;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.AbstractArrow;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class ArrowParticles extends BukkitRunnable {
|
||||
private final Arrow arrow;
|
||||
private final AbstractArrow arrow;
|
||||
private final ParticleInformation particleInfo;
|
||||
|
||||
public ArrowParticles(Arrow arrow, NBTItem item) {
|
||||
public ArrowParticles(AbstractArrow arrow, NBTItem item) {
|
||||
this.arrow = arrow;
|
||||
this.particleInfo = new ParticleInformation(JsonParser.parseString(item.getString("MMOITEMS_ARROW_PARTICLES")).getAsJsonObject());
|
||||
|
||||
|
@ -74,10 +74,8 @@ public class ProjectileData {
|
||||
}
|
||||
|
||||
public void applyPotionEffects(LivingEntity target) {
|
||||
if (sourceItem.hasTag("MMOITEMS_ARROW_POTION_EFFECTS")) {
|
||||
for (ArrowPotionEffectArrayItem entry : MythicLib.plugin.getJson().parse(sourceItem.getString("MMOITEMS_ARROW_POTION_EFFECTS"), ArrowPotionEffectArrayItem[].class)) {
|
||||
if (sourceItem.hasTag("MMOITEMS_ARROW_POTION_EFFECTS"))
|
||||
for (ArrowPotionEffectArrayItem entry : MythicLib.plugin.getJson().parse(sourceItem.getString("MMOITEMS_ARROW_POTION_EFFECTS"), ArrowPotionEffectArrayItem[].class))
|
||||
target.addPotionEffect(new PotionEffectData(PotionEffectType.getByName(entry.type), entry.duration, entry.level).toEffect());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.AbstractArrow;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
@ -272,7 +272,7 @@ public class ItemUse implements Listener {
|
||||
*/
|
||||
@EventHandler
|
||||
public void handleCustomBows(EntityShootBowEvent event) {
|
||||
if (!(event.getProjectile() instanceof Arrow) || !(event.getEntity() instanceof Player))
|
||||
if (!(event.getProjectile() instanceof AbstractArrow) || !(event.getEntity() instanceof Player))
|
||||
return;
|
||||
|
||||
final NBTItem item = NBTItem.get(event.getBow());
|
||||
@ -291,7 +291,7 @@ public class ItemUse implements Listener {
|
||||
final EquipmentSlot bowSlot = itemInMainHand.isSimilar(event.getBow()) ? EquipmentSlot.MAIN_HAND : EquipmentSlot.OFF_HAND;
|
||||
MMOItems.plugin.getEntities().registerCustomProjectile(item, playerData.getStats().newTemporary(bowSlot), event.getProjectile(), event.getForce());
|
||||
|
||||
final Arrow arrow = (Arrow) event.getProjectile();
|
||||
final AbstractArrow arrow = (AbstractArrow) event.getProjectile();
|
||||
if (item.getStat("ARROW_VELOCITY") > 0)
|
||||
arrow.setVelocity(arrow.getVelocity().multiply(item.getStat("ARROW_VELOCITY")));
|
||||
}
|
||||
|
@ -9,11 +9,9 @@ import net.Indyuce.mmoitems.api.interaction.projectile.ArrowParticles;
|
||||
import net.Indyuce.mmoitems.api.interaction.projectile.EntityData;
|
||||
import net.Indyuce.mmoitems.api.interaction.projectile.ProjectileData;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.*;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.AbstractArrow;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -21,6 +19,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -62,8 +61,8 @@ public class EntityManager implements Listener {
|
||||
* arrow particles. Currently projectiles are only arrows so there is no
|
||||
* problem with other projectiles like snowballs etc.
|
||||
*/
|
||||
if (entity instanceof Arrow && sourceItem.hasTag("MMOITEMS_ARROW_PARTICLES"))
|
||||
new ArrowParticles((Arrow) entity, sourceItem);
|
||||
if (entity instanceof AbstractArrow && sourceItem.hasTag("MMOITEMS_ARROW_PARTICLES"))
|
||||
new ArrowParticles((AbstractArrow) entity, sourceItem);
|
||||
|
||||
projectiles.put(entity.getEntityId(), projectileData);
|
||||
}
|
||||
@ -100,11 +99,13 @@ public class EntityManager implements Listener {
|
||||
* This event is called on LOWEST and only edits the custom bow base damage.
|
||||
* It does NOT take into account the base damage passed in Bow#getDamage()
|
||||
* and fully overrides any change.
|
||||
*
|
||||
* This applies to tridents, arrows, spectral arrows etc.
|
||||
* <p>
|
||||
* Event order: ProjectileHit -> EntityDamage / EntityDeathEvent
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
||||
public void customBowDamage(EntityDamageByEntityEvent event) {
|
||||
public void customProjectileDamage(EntityDamageByEntityEvent event) {
|
||||
if (!(event.getDamager() instanceof Projectile) || !(event.getEntity() instanceof LivingEntity) || event.getEntity().hasMetadata("NPC"))
|
||||
return;
|
||||
|
||||
@ -113,11 +114,11 @@ public class EntityManager implements Listener {
|
||||
if (data == null)
|
||||
return;
|
||||
|
||||
// Calculate custom base bow damage
|
||||
// Calculate custom base damage
|
||||
double baseDamage = data.getDamage();
|
||||
|
||||
// Apply power vanilla enchant
|
||||
if (projectile instanceof Arrow && data.getSourceItem().getItem().hasItemMeta()
|
||||
if (projectile instanceof AbstractArrow && data.getSourceItem().getItem().hasItemMeta()
|
||||
&& data.getSourceItem().getItem().getItemMeta().getEnchants().containsKey(Enchantment.ARROW_DAMAGE))
|
||||
baseDamage *= 1.25 + (.25 * data.getSourceItem().getItem().getItemMeta().getEnchantLevel(Enchantment.ARROW_DAMAGE));
|
||||
|
||||
@ -130,7 +131,7 @@ public class EntityManager implements Listener {
|
||||
return;
|
||||
|
||||
final ProjectileAttackMetadata projAttack = (ProjectileAttackMetadata) event.getAttack();
|
||||
final ProjectileData data = projectiles.get(projAttack.getProjectile().getEntityId());
|
||||
final @Nullable ProjectileData data = projectiles.get(projAttack.getProjectile().getEntityId());
|
||||
if (data == null)
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user