mirror of
https://gitlab.com/phoenix-dvpmt/mmoitems.git
synced 2025-01-03 06:37:47 +01:00
Fixed mi_tools
region flag not working
This commit is contained in:
parent
514efa21a4
commit
6a6f2c0377
@ -10,12 +10,18 @@ import io.lumine.mythic.lib.skill.handler.SkillHandler;
|
|||||||
import io.lumine.mythic.lib.util.PostLoadAction;
|
import io.lumine.mythic.lib.util.PostLoadAction;
|
||||||
import io.lumine.mythic.lib.util.PreloadedObject;
|
import io.lumine.mythic.lib.util.PreloadedObject;
|
||||||
import net.Indyuce.mmoitems.MMOItems;
|
import net.Indyuce.mmoitems.MMOItems;
|
||||||
|
import net.Indyuce.mmoitems.api.interaction.*;
|
||||||
|
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
|
||||||
|
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Lute;
|
||||||
|
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Musket;
|
||||||
import net.Indyuce.mmoitems.api.item.util.identify.UnidentifiedItem;
|
import net.Indyuce.mmoitems.api.item.util.identify.UnidentifiedItem;
|
||||||
|
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||||
import net.Indyuce.mmoitems.manager.TypeManager;
|
import net.Indyuce.mmoitems.manager.TypeManager;
|
||||||
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
import net.Indyuce.mmoitems.stat.type.ItemStat;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@ -23,6 +29,7 @@ import javax.annotation.Nullable;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class Type implements CooldownObject, PreloadedObject {
|
public class Type implements CooldownObject, PreloadedObject {
|
||||||
@ -43,11 +50,11 @@ public class Type implements CooldownObject, PreloadedObject {
|
|||||||
public static final Type STAFF = new Type("STAFF", ModifierSource.RANGED_WEAPON);
|
public static final Type STAFF = new Type("STAFF", ModifierSource.RANGED_WEAPON);
|
||||||
public static final Type BOW = new Type("BOW", ModifierSource.RANGED_WEAPON);
|
public static final Type BOW = new Type("BOW", ModifierSource.RANGED_WEAPON);
|
||||||
public static final Type CROSSBOW = new Type("CROSSBOW", ModifierSource.RANGED_WEAPON);
|
public static final Type CROSSBOW = new Type("CROSSBOW", ModifierSource.RANGED_WEAPON);
|
||||||
public static final Type MUSKET = new Type("MUSKET", ModifierSource.RANGED_WEAPON);
|
public static final Type MUSKET = new Type("MUSKET", ModifierSource.RANGED_WEAPON, Musket::new);
|
||||||
public static final Type LUTE = new Type("LUTE", ModifierSource.RANGED_WEAPON);
|
public static final Type LUTE = new Type("LUTE", ModifierSource.RANGED_WEAPON, Lute::new);
|
||||||
|
|
||||||
// Other weapons
|
// Other weapons
|
||||||
public static final Type TOOL = new Type("TOOL", ModifierSource.MELEE_WEAPON);
|
public static final Type TOOL = new Type("TOOL", ModifierSource.MELEE_WEAPON, Tool::new);
|
||||||
|
|
||||||
// Hand Accessories
|
// Hand Accessories
|
||||||
public static final Type CATALYST = new Type("CATALYST", ModifierSource.HAND_ITEM);
|
public static final Type CATALYST = new Type("CATALYST", ModifierSource.HAND_ITEM);
|
||||||
@ -57,15 +64,16 @@ public class Type implements CooldownObject, PreloadedObject {
|
|||||||
// Other
|
// Other
|
||||||
public static final Type ORNAMENT = new Type("ORNAMENT", ModifierSource.VOID);
|
public static final Type ORNAMENT = new Type("ORNAMENT", ModifierSource.VOID);
|
||||||
public static final Type ARMOR = new Type("ARMOR", ModifierSource.ARMOR);
|
public static final Type ARMOR = new Type("ARMOR", ModifierSource.ARMOR);
|
||||||
public static final Type CONSUMABLE = new Type("CONSUMABLE", ModifierSource.MAINHAND_ITEM);
|
public static final Type CONSUMABLE = new Type("CONSUMABLE", ModifierSource.MAINHAND_ITEM, Consumable::new);
|
||||||
public static final Type MISCELLANEOUS = new Type("MISCELLANEOUS", ModifierSource.MAINHAND_ITEM);
|
public static final Type MISCELLANEOUS = new Type("MISCELLANEOUS", ModifierSource.MAINHAND_ITEM);
|
||||||
public static final Type GEM_STONE = new Type("GEM_STONE", ModifierSource.VOID);
|
public static final Type GEM_STONE = new Type("GEM_STONE", ModifierSource.VOID, GemStone::new);
|
||||||
public static final Type SKIN = new Type("SKIN", ModifierSource.VOID);
|
public static final Type SKIN = new Type("SKIN", ModifierSource.VOID, ItemSkin::new);
|
||||||
public static final Type ACCESSORY = new Type("ACCESSORY", ModifierSource.ACCESSORY);
|
public static final Type ACCESSORY = new Type("ACCESSORY", ModifierSource.ACCESSORY);
|
||||||
public static final Type BLOCK = new Type("BLOCK", ModifierSource.VOID);
|
public static final Type BLOCK = new Type("BLOCK", ModifierSource.VOID);
|
||||||
|
|
||||||
private final String id;
|
private final String id;
|
||||||
private final ModifierSource modifierSource;
|
private final ModifierSource modifierSource;
|
||||||
|
private final BiFunction<PlayerData, NBTItem, UseItem> interactionProvider;
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
@ -112,13 +120,18 @@ public class Type implements CooldownObject, PreloadedObject {
|
|||||||
onEntityInteract = config.contains("on-entity-interact") ? MythicLib.plugin.getSkills().loadSkillHandler(config.get("on-entity-interact")) : null;
|
onEntityInteract = config.contains("on-entity-interact") ? MythicLib.plugin.getSkills().loadSkillHandler(config.get("on-entity-interact")) : null;
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Hard-coded type with given parameters. Can be used by other plugins
|
|
||||||
* to create types using MMOItems API.
|
|
||||||
*/
|
|
||||||
public Type(@NotNull String id, @NotNull ModifierSource modifierSource) {
|
public Type(@NotNull String id, @NotNull ModifierSource modifierSource) {
|
||||||
|
this(id, modifierSource, modifierSource.isWeapon() ? Weapon::new : UseItem::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hard-coded type with given parameters. Can be used
|
||||||
|
* by other plugins to create types using MMOItems API.
|
||||||
|
*/
|
||||||
|
public Type(@NotNull String id, @NotNull ModifierSource modifierSource, @NotNull BiFunction<PlayerData, NBTItem, UseItem> interactionProvider) {
|
||||||
this.id = UtilityMethods.enumName(id);
|
this.id = UtilityMethods.enumName(id);
|
||||||
this.modifierSource = modifierSource;
|
this.modifierSource = modifierSource;
|
||||||
|
this.interactionProvider = interactionProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -128,6 +141,7 @@ public class Type implements CooldownObject, PreloadedObject {
|
|||||||
id = UtilityMethods.enumName(config.getName());
|
id = UtilityMethods.enumName(config.getName());
|
||||||
parent = manager.get(config.getString("parent", "").toUpperCase().replace("-", "_").replace(" ", "_"));
|
parent = manager.get(config.getString("parent", "").toUpperCase().replace("-", "_").replace(" ", "_"));
|
||||||
modifierSource = config.contains("modifier-source") ? ModifierSource.valueOf(UtilityMethods.enumName(config.getString("modifier-source"))) : (parent != null ? parent.modifierSource : ModifierSource.OTHER);
|
modifierSource = config.contains("modifier-source") ? ModifierSource.valueOf(UtilityMethods.enumName(config.getString("modifier-source"))) : (parent != null ? parent.modifierSource : ModifierSource.OTHER);
|
||||||
|
interactionProvider = parent.interactionProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void load(@NotNull ConfigurationSection config) {
|
public void load(@NotNull ConfigurationSection config) {
|
||||||
@ -152,6 +166,16 @@ public class Type implements CooldownObject, PreloadedObject {
|
|||||||
return !hideInGame;
|
return !hideInGame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public UseItem toUseItem(@NotNull Player player, @NotNull NBTItem item) {
|
||||||
|
return toUseItem(PlayerData.get(player), item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public UseItem toUseItem(@NotNull PlayerData playerData, @NotNull NBTItem item) {
|
||||||
|
return interactionProvider.apply(playerData, item);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Example <code>OFF_CATALYST</code>
|
* Example <code>OFF_CATALYST</code>
|
||||||
*
|
*
|
||||||
|
@ -10,6 +10,7 @@ import io.lumine.mythic.lib.version.OreDrops;
|
|||||||
import io.lumine.mythic.lib.version.VEnchantment;
|
import io.lumine.mythic.lib.version.VEnchantment;
|
||||||
import net.Indyuce.mmoitems.MMOItems;
|
import net.Indyuce.mmoitems.MMOItems;
|
||||||
import net.Indyuce.mmoitems.api.event.BouncingCrackBlockBreakEvent;
|
import net.Indyuce.mmoitems.api.event.BouncingCrackBlockBreakEvent;
|
||||||
|
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
|
||||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||||
import net.Indyuce.mmoitems.util.MMOUtils;
|
import net.Indyuce.mmoitems.util.MMOUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -24,14 +25,19 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class Tool extends UseItem {
|
public class Tool extends Weapon {
|
||||||
|
public Tool(PlayerData playerData, NBTItem item) {
|
||||||
|
super(playerData, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public Tool(Player player, NBTItem item) {
|
public Tool(Player player, NBTItem item) {
|
||||||
super(player, item);
|
super(player, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkItemRequirements() {
|
public CustomFlag getUseFlag() {
|
||||||
return MythicLib.plugin.getFlags().isFlagAllowed(player, CustomFlag.MI_TOOLS) && playerData.getRPG().canUse(getNBTItem(), true);
|
return CustomFlag.MI_TOOLS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final BlockFace[] NEIGHBORS = {BlockFace.NORTH, BlockFace.DOWN, BlockFace.EAST, BlockFace.UP, BlockFace.WEST, BlockFace.SOUTH};
|
private static final BlockFace[] NEIGHBORS = {BlockFace.NORTH, BlockFace.DOWN, BlockFace.EAST, BlockFace.UP, BlockFace.WEST, BlockFace.SOUTH};
|
||||||
|
@ -6,9 +6,6 @@ import io.lumine.mythic.lib.comp.flags.CustomFlag;
|
|||||||
import net.Indyuce.mmoitems.ItemStats;
|
import net.Indyuce.mmoitems.ItemStats;
|
||||||
import net.Indyuce.mmoitems.MMOItems;
|
import net.Indyuce.mmoitems.MMOItems;
|
||||||
import net.Indyuce.mmoitems.api.Type;
|
import net.Indyuce.mmoitems.api.Type;
|
||||||
import net.Indyuce.mmoitems.api.interaction.weapon.Weapon;
|
|
||||||
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Lute;
|
|
||||||
import net.Indyuce.mmoitems.api.interaction.weapon.untargeted.Musket;
|
|
||||||
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
|
import net.Indyuce.mmoitems.api.item.mmoitem.VolatileMMOItem;
|
||||||
import net.Indyuce.mmoitems.api.player.PlayerData;
|
import net.Indyuce.mmoitems.api.player.PlayerData;
|
||||||
import net.Indyuce.mmoitems.stat.data.CommandData;
|
import net.Indyuce.mmoitems.stat.data.CommandData;
|
||||||
@ -123,14 +120,8 @@ public class UseItem {
|
|||||||
return getItem(player, item, Type.get(type));
|
return getItem(player, item, Type.get(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static UseItem getItem(@NotNull Player player, @NotNull NBTItem item, @NotNull Type type) {
|
public static UseItem getItem(@NotNull Player player, @NotNull NBTItem item, @NotNull Type type) {
|
||||||
final PlayerData playerData = PlayerData.get(player);
|
return type.toUseItem(PlayerData.get(player), item);
|
||||||
if (type.corresponds(Type.CONSUMABLE)) return new Consumable(playerData, item);
|
|
||||||
if (type.corresponds(Type.SKIN)) return new ItemSkin(playerData, item);
|
|
||||||
if (type.corresponds(Type.GEM_STONE)) return new GemStone(playerData, item);
|
|
||||||
if (type.corresponds(Type.MUSKET)) return new Musket(playerData, item);
|
|
||||||
if (type.corresponds(Type.LUTE)) return new Lute(playerData, item);
|
|
||||||
|
|
||||||
return type.isWeapon() ? new Weapon(playerData, item) : new UseItem(playerData, item);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
public class Weapon extends UseItem {
|
public class Weapon extends UseItem {
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public Weapon(Player player, NBTItem item) {
|
public Weapon(Player player, NBTItem item) {
|
||||||
this(PlayerData.get(player), item);
|
this(PlayerData.get(player), item);
|
||||||
@ -45,13 +44,19 @@ public class Weapon extends UseItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean checkItemRequirements() {
|
public boolean checkItemRequirements() {
|
||||||
|
|
||||||
|
// Light checks first
|
||||||
if (playerData.isEncumbered()) {
|
if (playerData.isEncumbered()) {
|
||||||
Message.HANDS_TOO_CHARGED.format(ChatColor.RED).send(getPlayer());
|
Message.HANDS_TOO_CHARGED.format(ChatColor.RED).send(getPlayer());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for class, level... then flags
|
// Check for class, level... then flags
|
||||||
return playerData.getRPG().canUse(getNBTItem(), true) && MythicLib.plugin.getFlags().isFlagAllowed(getPlayer(), CustomFlag.MI_WEAPONS);
|
return playerData.getRPG().canUse(getNBTItem(), true) && MythicLib.plugin.getFlags().isFlagAllowed(getPlayer(), getUseFlag());
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomFlag getUseFlag() {
|
||||||
|
return CustomFlag.MI_WEAPONS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -233,6 +238,7 @@ public class Weapon extends UseItem {
|
|||||||
return WeaponAttackResult.SUCCESS;
|
return WeaponAttackResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
protected Location getGround(Location loc) {
|
protected Location getGround(Location loc) {
|
||||||
for (int j = 0; j < 20; j++) {
|
for (int j = 0; j < 20; j++) {
|
||||||
if (loc.getBlock().getType().isSolid()) return loc;
|
if (loc.getBlock().getType().isSolid()) return loc;
|
||||||
|
@ -59,7 +59,7 @@ public class ItemUse implements Listener {
|
|||||||
* animation and are handled there {@link #handleVanillaEatenConsumables(PlayerItemConsumeEvent)}
|
* animation and are handled there {@link #handleVanillaEatenConsumables(PlayerItemConsumeEvent)}
|
||||||
*/
|
*/
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
final UseItem useItem = UseItem.getItem(player, item, itemType);
|
final UseItem useItem = itemType.toUseItem(player, item);
|
||||||
if (useItem instanceof Consumable && ((Consumable) useItem).hasVanillaEating()) return;
|
if (useItem instanceof Consumable && ((Consumable) useItem).hasVanillaEating()) return;
|
||||||
|
|
||||||
// (BUG FIX) Cancel the event to prevent things like shield blocking
|
// (BUG FIX) Cancel the event to prevent things like shield blocking
|
||||||
@ -138,7 +138,7 @@ public class ItemUse implements Listener {
|
|||||||
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInMainHand());
|
NBTItem item = MythicLib.plugin.getVersion().getWrapper().getNBTItem(player.getInventory().getItemInMainHand());
|
||||||
if (!item.hasType()) return;
|
if (!item.hasType()) return;
|
||||||
|
|
||||||
Tool tool = new Tool(player, item);
|
Tool tool = new Tool(PlayerData.get(player), item);
|
||||||
if (!tool.checkItemRequirements()) {
|
if (!tool.checkItemRequirements()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -160,11 +160,11 @@ public class ItemUse implements Listener {
|
|||||||
if (!UtilityMethods.canTarget(player, target, InteractionType.OFFENSE_ACTION)) return;
|
if (!UtilityMethods.canTarget(player, target, InteractionType.OFFENSE_ACTION)) return;
|
||||||
|
|
||||||
// Check for usability
|
// Check for usability
|
||||||
final UseItem usableItem = UseItem.getItem(player, item, itemType);
|
final UseItem usableItem = itemType.toUseItem(player, item);
|
||||||
if (!usableItem.checkItemRequirements()) return;
|
if (!usableItem.checkItemRequirements()) return;
|
||||||
|
|
||||||
// Apply type-specific entity interactions
|
// Apply type-specific entity interactions
|
||||||
final SkillHandler onEntityInteract = usableItem.getMMOItem().getType().onEntityInteract();
|
final SkillHandler<?> onEntityInteract = usableItem.getMMOItem().getType().onEntityInteract();
|
||||||
if (onEntityInteract != null) {
|
if (onEntityInteract != null) {
|
||||||
SpecialWeaponAttackEvent called = new SpecialWeaponAttackEvent(usableItem.getPlayerData(), (Weapon) usableItem, target);
|
SpecialWeaponAttackEvent called = new SpecialWeaponAttackEvent(usableItem.getPlayerData(), (Weapon) usableItem, target);
|
||||||
Bukkit.getPluginManager().callEvent(called);
|
Bukkit.getPluginManager().callEvent(called);
|
||||||
@ -183,7 +183,7 @@ public class ItemUse implements Listener {
|
|||||||
final Type type = Type.get(item);
|
final Type type = Type.get(item);
|
||||||
if (type == null) return;
|
if (type == null) return;
|
||||||
|
|
||||||
final UseItem useItem = UseItem.getItem(player, item, type);
|
final UseItem useItem = type.toUseItem(player, item);
|
||||||
if (!useItem.checkItemRequirements()) return;
|
if (!useItem.checkItemRequirements()) return;
|
||||||
|
|
||||||
if (useItem instanceof ItemSkin) {
|
if (useItem instanceof ItemSkin) {
|
||||||
@ -269,7 +269,7 @@ public class ItemUse implements Listener {
|
|||||||
if (itemType == null) return;
|
if (itemType == null) return;
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UseItem useItem = UseItem.getItem(player, item, itemType);
|
UseItem useItem = itemType.toUseItem(player, item);
|
||||||
if (!useItem.checkItemRequirements()) {
|
if (!useItem.checkItemRequirements()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user