mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-03-09 12:49:06 +01:00
fixed things
This commit is contained in:
parent
f5ea91fd44
commit
7082cae74d
4
pom.xml
4
pom.xml
@ -4,7 +4,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>net.Indyuce</groupId>
|
||||
<artifactId>MMOItems</artifactId>
|
||||
<version>6.6.0</version>
|
||||
<version>6.6.1</version>
|
||||
<name>MMOItems</name>
|
||||
<description>A great item solution for your RPG server!!</description>
|
||||
|
||||
@ -139,7 +139,7 @@
|
||||
<dependency>
|
||||
<groupId>io.lumine</groupId>
|
||||
<artifactId>MythicLib</artifactId>
|
||||
<version>1.1.2</version>
|
||||
<version>1.1.3</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
@ -4,9 +4,11 @@ import com.evill4mer.RealDualWield.Api.PlayerDamageEntityWithOffhandEvent;
|
||||
import io.lumine.mythic.lib.MythicLib;
|
||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||
import io.lumine.mythic.lib.api.player.EquipmentSlot;
|
||||
import io.lumine.mythic.lib.api.stat.StatMap;
|
||||
import io.lumine.mythic.lib.damage.DamageMetadata;
|
||||
import io.lumine.mythic.lib.damage.DamageType;
|
||||
import net.Indyuce.mmoitems.api.ItemAttackMetadata;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.TypeSet;
|
||||
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
@ -20,8 +22,11 @@ public class RealDualWieldHook implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void a(PlayerDamageEntityWithOffhandEvent event) {
|
||||
|
||||
// Citizens NPC support; also check if it's not a useless event
|
||||
if (event.getDamage() == 0 || !(event.getEntity() instanceof LivingEntity) || event.getEntity().hasMetadata("NPC"))
|
||||
/*
|
||||
* Citizens and Sentinels NPC support; damage = 0 check to ignore safety
|
||||
* checks; check for entity attack
|
||||
*/
|
||||
if (event.getDamage() == 0 || !(event.getEntity() instanceof LivingEntity) || event.getEntity().hasMetadata("NPC") || event.getPlayer().hasMetadata("NPC"))
|
||||
return;
|
||||
|
||||
// Custom damage check
|
||||
@ -30,15 +35,16 @@ public class RealDualWieldHook implements Listener {
|
||||
return;
|
||||
|
||||
/*
|
||||
* Must apply attack conditions before apply any effects.
|
||||
* The event must be cancelled before anything is applied
|
||||
* Must apply attack conditions before apply any effects. the event must
|
||||
* be cancelled before anything is applied
|
||||
*/
|
||||
Player player = event.getPlayer();
|
||||
PlayerData playerData = PlayerData.get(player);
|
||||
NBTItem offhandItem = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInOffHand());
|
||||
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInMainHand());
|
||||
ItemAttackMetadata attackMeta = null;
|
||||
|
||||
if (offhandItem.hasType()) {
|
||||
Weapon weapon = new Weapon(playerData, offhandItem);
|
||||
if (item.hasType() && Type.get(item.getType()) != Type.BLOCK) {
|
||||
Weapon weapon = new Weapon(playerData, item);
|
||||
|
||||
if (weapon.getMMOItem().getType().getItemSet() == TypeSet.RANGE) {
|
||||
event.setCancelled(true);
|
||||
@ -49,11 +55,22 @@ public class RealDualWieldHook implements Listener {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!weapon.handleTargetedAttack(attackMeta = getAttack(playerData, event), target).isSuccessful()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Cast on-hit abilities and add extra damage to the Bukkit event
|
||||
ItemAttackMetadata attack = new ItemAttackMetadata(new DamageMetadata(event.getDamage(), DamageType.WEAPON, DamageType.PHYSICAL), playerData.getMMOPlayerData().getStatMap().cache(EquipmentSlot.OFF_HAND));
|
||||
attack.applyEffects(offhandItem, target);
|
||||
event.setDamage(attack.getDamage().getDamage());
|
||||
// Cast on-hit abilities and add the extra damage to the damage event
|
||||
(attackMeta == null ? attackMeta = getAttack(playerData, event) : attackMeta).applyEffects(item, target);
|
||||
|
||||
// Finally update Bukkit event
|
||||
event.setDamage(attackMeta.getDamage().getDamage());
|
||||
}
|
||||
|
||||
private ItemAttackMetadata getAttack(PlayerData playerData, PlayerDamageEntityWithOffhandEvent event) {
|
||||
StatMap.CachedStatMap cachedStatMap = playerData.getMMOPlayerData().getStatMap().cache(EquipmentSlot.OFF_HAND);
|
||||
return new ItemAttackMetadata(new DamageMetadata(event.getDamage(), DamageType.WEAPON, DamageType.PHYSICAL), cachedStatMap);
|
||||
}
|
||||
}
|
||||
|
@ -1,126 +0,0 @@
|
||||
package net.Indyuce.mmoitems.comp.mythicmobs;
|
||||
|
||||
import io.lumine.xikage.mythicmobs.MythicMobs;
|
||||
import io.lumine.xikage.mythicmobs.adapters.bukkit.BukkitItemStack;
|
||||
import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicDropLoadEvent;
|
||||
import io.lumine.xikage.mythicmobs.drops.Drop;
|
||||
import io.lumine.xikage.mythicmobs.drops.DropMetadata;
|
||||
import io.lumine.xikage.mythicmobs.drops.IMultiDrop;
|
||||
import io.lumine.xikage.mythicmobs.drops.LootBag;
|
||||
import io.lumine.xikage.mythicmobs.drops.droppables.ItemDrop;
|
||||
import io.lumine.xikage.mythicmobs.io.MythicLineConfig;
|
||||
import io.lumine.xikage.mythicmobs.skills.SkillMetadata;
|
||||
import io.lumine.xikage.mythicmobs.skills.placeholders.Placeholder;
|
||||
import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.api.Type;
|
||||
import net.Indyuce.mmoitems.api.droptable.item.DropItem;
|
||||
import net.Indyuce.mmoitems.api.droptable.item.MMOItemDropItem;
|
||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class MythicMobsHook implements Listener {
|
||||
|
||||
/*
|
||||
* has been moved over to MythicMobs because MMOItems needs access to MythicMobs
|
||||
* abilities and therefore must be enabled after MythicMobs
|
||||
*/
|
||||
|
||||
/*
|
||||
* MUST NOT BE REMOVED - this class must be kept ad vitam aeternam in case we
|
||||
* need to change something in MM compatibility and sent it back to MM devs
|
||||
*/
|
||||
public MythicMobsHook() {
|
||||
/*MythicMobs.inst().getPlaceholderManager().register("mmoitems.skill",
|
||||
Placeholder.meta((metadata, arg) -> String.valueOf(PlayerData
|
||||
.get(metadata.getCaster().getEntity().getUniqueId()).getAbilityData().getCachedModifier(arg))));*/
|
||||
Bukkit.getPluginManager().registerEvents(this, MMOItems.plugin);
|
||||
// MMOItems.plugin.getCrafting().registerIngredient("mythicitem", config -> new MythicItemIngredient(config),
|
||||
// new ConditionalDisplay("&8" + AltChar.check + " &7#amount# #item#", "&c" + AltChar.cross + " &7#amount# #item#"),
|
||||
// nbt -> nbt.hasTag("MYTHIC_TYPE"), nbt -> nbt.getString("MYTHIC_TYPE").toLowerCase());
|
||||
}
|
||||
|
||||
/*
|
||||
* registers custom drop types
|
||||
*/
|
||||
@EventHandler
|
||||
public void a(MythicDropLoadEvent event) {
|
||||
if (event.getDropName().equalsIgnoreCase("mmoitems") || event.getDropName().equalsIgnoreCase("mmoitem"))
|
||||
event.register(new MMOItemsDrop(event.getConfig()));
|
||||
}
|
||||
|
||||
/*
|
||||
* register placeholders when MM is reloaded. the skill placeholder let players
|
||||
* retrieve cached ability values.
|
||||
*/
|
||||
/*@EventHandler
|
||||
public void b(MythicReloadedEvent event) {
|
||||
MythicMobs.inst().getPlaceholderManager().register("mmoitems.skill",
|
||||
Placeholder.meta((metadata, arg) -> String.valueOf(PlayerData
|
||||
.get(metadata.getCaster().getEntity().getUniqueId()).getAbilityData().getCachedModifier(arg))));
|
||||
}*/
|
||||
|
||||
private void registerSkillPlaceholders() {
|
||||
/*
|
||||
Placeholder.meta((meta, arg) -> {
|
||||
|
||||
SkillMetadata skillMeta = (SkillMetadata) meta;
|
||||
skillMeta.getVariables().get("MMOStats");
|
||||
|
||||
|
||||
return null;
|
||||
|
||||
} );
|
||||
|
||||
MythicMobs.inst().getPlaceholderManager().register("modifier",
|
||||
Placeholder.meta((metadata, arg) -> String.valueOf(PlayerData
|
||||
.get(metadata.getCaster().getEntity().getUniqueId()).getAbilityData().getCachedModifier(arg))));*/
|
||||
|
||||
}
|
||||
|
||||
public static class MMOItemsDrop extends Drop implements IMultiDrop {
|
||||
private DropItem dropItem;
|
||||
|
||||
public MMOItemsDrop(MythicLineConfig config) {
|
||||
super(config.getLine(), config);
|
||||
|
||||
/*
|
||||
* TODO move try-catch to the MythicDropLoadEvent method and make the dropItem
|
||||
* field final
|
||||
*/
|
||||
try {
|
||||
String typeFormat = config.getString("type").toUpperCase().replace("-", "_");
|
||||
Validate.isTrue(MMOItems.plugin.getTypes().has(typeFormat),
|
||||
"Could not find type with ID " + typeFormat);
|
||||
|
||||
Type type = MMOItems.plugin.getTypes().get(typeFormat);
|
||||
String id = config.getString("id");
|
||||
|
||||
Validate.notNull(id, "MMOItems ID cannot be null");
|
||||
|
||||
dropItem = new MMOItemDropItem(type, id, 1, config.getDouble("unidentified", 0), 1, 1);
|
||||
|
||||
} catch (IllegalArgumentException exception) {
|
||||
MMOItems.plugin.getLogger().log(Level.WARNING, "Could not load drop item: " + exception.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO remove null check with extra method from MythicDropLoadEvent
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public LootBag get(DropMetadata metadata) {
|
||||
LootBag loot = new LootBag(metadata);
|
||||
if (dropItem != null)
|
||||
// TODO fix null
|
||||
loot.add(new ItemDrop(this.getLine(), (MythicLineConfig) this.getConfig(),
|
||||
new BukkitItemStack(dropItem.getItem(null, 1))));
|
||||
return loot;
|
||||
}
|
||||
}
|
||||
}
|
@ -10,10 +10,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/*
|
||||
* this loads mmoitems comp for mythic mobs
|
||||
* since MythicMobsHook is purely for documentation
|
||||
*/
|
||||
public class MythicMobsLoader {
|
||||
|
||||
public MythicMobsLoader() {
|
||||
|
@ -58,12 +58,13 @@ public class MythicMobsAbility extends Ability<MythicMobsAbilityMetadata> {
|
||||
|
||||
targetEntities.add(BukkitAdapter.adapt(target));
|
||||
|
||||
SkillMetadata data = new SkillMetadata(SkillTrigger.API, caster, trigger, BukkitAdapter.adapt(attackMeta.getDamager().getEyeLocation()), targetEntities, targetLocations, 1);
|
||||
SkillMetadata data = new SkillMetadata(SkillTrigger.CAST, caster, trigger, BukkitAdapter.adapt(attackMeta.getDamager().getEyeLocation()), targetEntities, targetLocations, 1);
|
||||
|
||||
// Stats are cached inside a variable.
|
||||
/*data.getVariables().putObject();*/
|
||||
// Stats are cached inside a variable
|
||||
data.getVariables().putObject("MMOStatMap", attackMeta.getStats());
|
||||
data.getVariables().putObject("MMOSkill", ability.getAbility());
|
||||
|
||||
if (skill.usable(data, SkillTrigger.API))
|
||||
if (skill.usable(data, SkillTrigger.CAST))
|
||||
skill.execute(data);
|
||||
else
|
||||
attackMeta.setSuccessful(false);
|
||||
|
@ -119,12 +119,11 @@ public class ItemUse implements Listener {
|
||||
if (MythicLib.plugin.getDamage().findInfo(target) != null)
|
||||
return;
|
||||
|
||||
Player player = (Player) event.getDamager();
|
||||
|
||||
/*
|
||||
* Must apply attack conditions before apply any effects. the event must
|
||||
* be cancelled before anything is applied
|
||||
*/
|
||||
Player player = (Player) event.getDamager();
|
||||
PlayerData playerData = PlayerData.get(player);
|
||||
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInMainHand());
|
||||
ItemAttackMetadata attackMeta = null;
|
||||
@ -142,22 +141,25 @@ public class ItemUse implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
StatMap.CachedStatMap cachedStatMap = playerData.getMMOPlayerData().getStatMap().cache(EquipmentSlot.MAIN_HAND);
|
||||
attackMeta = new ItemAttackMetadata(new DamageMetadata(event.getDamage(), DamageType.WEAPON, DamageType.PHYSICAL), cachedStatMap);
|
||||
if (!weapon.handleTargetedAttack(attackMeta, target).isSuccessful()) {
|
||||
if (!weapon.handleTargetedAttack(attackMeta = getAttack(playerData, event), target).isSuccessful()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Cast on-hit abilities and add the extra damage to the damage event
|
||||
attackMeta.applyEffects(item, target);
|
||||
(attackMeta == null ? attackMeta = getAttack(playerData, event) : attackMeta).applyEffects(item, target);
|
||||
|
||||
// Finally update Bukkit event
|
||||
event.setDamage(attackMeta.getDamage().getDamage());
|
||||
}
|
||||
|
||||
/*
|
||||
private ItemAttackMetadata getAttack(PlayerData playerData, EntityDamageByEntityEvent event) {
|
||||
StatMap.CachedStatMap cachedStatMap = playerData.getMMOPlayerData().getStatMap().cache(EquipmentSlot.MAIN_HAND);
|
||||
return new ItemAttackMetadata(new DamageMetadata(event.getDamage(), DamageType.WEAPON, DamageType.PHYSICAL), cachedStatMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Event priority set to LOW to fix an infinite-exp glitch with
|
||||
* MMOCore. MMOCore experience source listens on HIGH and must be
|
||||
* higher than this event otherwise the exp is given even if the
|
||||
|
@ -4,6 +4,7 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import io.lumine.mythic.lib.comp.mythicmobs.MythicSkillInfo;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
|
||||
@ -13,7 +14,7 @@ import net.Indyuce.mmoitems.MMOItems;
|
||||
import net.Indyuce.mmoitems.ability.Ability;
|
||||
import net.Indyuce.mmoitems.ability.Ability.CastingMode;
|
||||
|
||||
public class AbilityData {
|
||||
public class AbilityData implements MythicSkillInfo {
|
||||
private final Ability ability;
|
||||
private final CastingMode castMode;
|
||||
private final Map<String, Double> modifiers = new HashMap<>();
|
||||
@ -90,8 +91,9 @@ public class AbilityData {
|
||||
return modifiers.containsKey(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getModifier(String path) {
|
||||
return modifiers.containsKey(path) ? modifiers.get(path) : ability.getDefaultValue(path);
|
||||
return modifiers.getOrDefault(path, ability.getDefaultValue(path));
|
||||
}
|
||||
|
||||
public JsonObject toJson() {
|
||||
|
Loading…
Reference in New Issue
Block a user