Crossbows trigger abilities

This commit is contained in:
Indyuce 2022-07-04 21:29:17 +02:00
parent b69303b82c
commit cf4d00f92c
3 changed files with 10 additions and 90 deletions

View File

@ -1,41 +0,0 @@
package net.Indyuce.mmoitems.api.event;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.HandlerList;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.stat.data.AbilityData;
@Deprecated
public class AbilityUseEvent extends PlayerDataEvent {
private static final HandlerList handlers = new HandlerList();
private final AbilityData ability;
private final LivingEntity target;
public AbilityUseEvent(PlayerData playerData, AbilityData ability) {
this(playerData, ability, null);
}
public AbilityUseEvent(PlayerData playerData, AbilityData ability, LivingEntity target) {
super(playerData);
this.ability = ability;
this.target = target;
}
public AbilityData getAbility() {
return ability;
}
public LivingEntity getTarget() {
return target;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -3,6 +3,8 @@ package net.Indyuce.mmoitems.api.interaction.weapon.untargeted;
import io.lumine.mythic.lib.api.item.NBTItem;
import io.lumine.mythic.lib.api.player.EquipmentSlot;
import io.lumine.mythic.lib.player.PlayerMetadata;
import io.lumine.mythic.lib.skill.trigger.TriggerType;
import io.lumine.mythic.lib.util.ProjectileTrigger;
import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.MMOItems;
import org.bukkit.GameMode;
@ -29,12 +31,16 @@ public class Crossbow extends UntargetedWeapon {
if (getPlayer().getGameMode() != GameMode.CREATIVE)
getPlayer().getInventory().removeItem(new ItemStack(Material.ARROW));
getPlayer().getWorld().playSound(getPlayer().getLocation(), Sound.ENTITY_ARROW_SHOOT, 1, 1);
Arrow arrow = getPlayer().launchProjectile(Arrow.class);
arrow.setVelocity(
getPlayer().getEyeLocation().getDirection().multiply(3 * getValue(getNBTItem().getStat(ItemStats.ARROW_VELOCITY.getId()), 1)));
final Arrow arrow = getPlayer().launchProjectile(Arrow.class);
arrow.setVelocity(getPlayer().getEyeLocation().getDirection().multiply(3 * getValue(getNBTItem().getStat(ItemStats.ARROW_VELOCITY.getId()), 1)));
getPlayer().setVelocity(getPlayer().getVelocity().setX(0).setZ(0));
getPlayer().getWorld().playSound(getPlayer().getLocation(), Sound.ENTITY_ARROW_SHOOT, 1, 1);
// Register custom projectile
MMOItems.plugin.getEntities().registerCustomProjectile(getNBTItem(), stats, arrow, true, 1);
// Trigger abilities
stats.getData().triggerSkills(TriggerType.SHOOT_BOW, arrow);
new ProjectileTrigger(stats.getData(), ProjectileTrigger.ProjectileType.ARROW, arrow, slot);
}
}

View File

@ -1,36 +1,18 @@
package net.Indyuce.mmoitems.listener;
import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.api.event.skill.PlayerCastSkillEvent;
import io.lumine.mythic.lib.api.item.NBTItem;
import io.lumine.mythic.lib.api.player.EquipmentSlot;
import io.lumine.mythic.lib.api.util.ui.SilentNumbers;
import io.lumine.mythic.lib.skill.trigger.TriggerType;
import io.lumine.mythic.utils.Schedulers;
import io.lumine.mythic.utils.events.extra.ArmorEquipEvent;
import net.Indyuce.mmoitems.ItemStats;
import net.Indyuce.mmoitems.MMOItems;
import net.Indyuce.mmoitems.MMOUtils;
import net.Indyuce.mmoitems.api.SoulboundInfo;
import net.Indyuce.mmoitems.api.Type;
import net.Indyuce.mmoitems.api.event.AbilityUseEvent;
import net.Indyuce.mmoitems.api.interaction.util.DurabilityItem;
import net.Indyuce.mmoitems.api.interaction.util.InteractItem;
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
import net.Indyuce.mmoitems.api.item.mmoitem.LiveMMOItem;
import net.Indyuce.mmoitems.api.player.PlayerData;
import net.Indyuce.mmoitems.api.player.inventory.EditableEquippedItem;
import net.Indyuce.mmoitems.api.player.inventory.EquippedPlayerItem;
import net.Indyuce.mmoitems.api.player.inventory.InventoryUpdateHandler;
import net.Indyuce.mmoitems.api.util.DeathDowngrading;
import net.Indyuce.mmoitems.api.util.message.Message;
import net.Indyuce.mmoitems.skill.RegisteredSkill;
import net.Indyuce.mmoitems.stat.data.AbilityData;
import net.Indyuce.mmoitems.stat.data.UpgradeData;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Trident;
import org.bukkit.event.Cancellable;
@ -200,33 +182,6 @@ public class PlayerListener implements Listener {
PlayerData.get(event.getPlayer()).getInventory().scheduleUpdate();
}
@Deprecated
@EventHandler
public void registerOldEvent(PlayerCastSkillEvent event) {
// Find caster
PlayerData playerData = PlayerData.get(event.getPlayer().getUniqueId());
// Create registered skill
RegisteredSkill registeredSkill = new RegisteredSkill(event.getCast().getHandler(), event.getCast().getHandler().getId());
for (String mod : event.getCast().getHandler().getModifiers()) {
registeredSkill.setDefaultValue(mod, event.getMetadata().getModifier(mod));
registeredSkill.setName(mod, MMOUtils.caseOnWords(mod.toLowerCase().replace("-", " ").replace("_", " ")));
}
// Create ability data
AbilityData abilityData = new AbilityData(registeredSkill, TriggerType.CAST);
for (String mod : event.getCast().getHandler().getModifiers())
abilityData.setModifier(mod, event.getMetadata().getModifier(mod));
// Find ability target
LivingEntity target = event.getMetadata().hasTargetEntity() && event.getMetadata().getTargetEntityOrNull() instanceof LivingEntity ?
(LivingEntity) event.getMetadata().getTargetEntityOrNull() : null;
// Call event for compatibility
Bukkit.getPluginManager().callEvent(new AbilityUseEvent(playerData, abilityData, target));
}
/**
* Some plugins like to interfere with dropping items when the
* player dies, or whatever of that sort.