Implemented the requirement system on all enchantments

This commit is contained in:
Auxilor 2021-08-28 21:57:57 +01:00
parent 385e186066
commit 804246d360
49 changed files with 279 additions and 41 deletions

View File

@ -136,7 +136,7 @@ public class EnchantDisplay extends DisplayModule {
}
if (player != null && enchantment instanceof EcoEnchant ecoEnchant) {
if (!ecoEnchant.doesPlayerMeetRequirements(player)) {
if (!ecoEnchant.areRequirementsMet(player)) {
requirementLore.addAll(StringUtils.formatList(EnchantmentCache.getEntry(enchantment).getRequirementLore(), player));
}
}

View File

@ -266,7 +266,7 @@ public class EnchantmentCache {
String formattedName = name;
String unformattedName = name;
if (enchantment instanceof EcoEnchant enchant && player != null) {
if (!enchant.doesPlayerMeetRequirements(player)) {
if (!enchant.areRequirementsMet(player)) {
String color = PLUGIN.getDisplayModule().getOptions().getRequirementsOptions().getRequirementColor();
if (color.contains("{}")) {
unformattedName = color.replace("{}", unformattedName);

View File

@ -19,6 +19,7 @@ import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
@ -291,10 +292,14 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Watche
/**
* Does the player meet the requirements to use this enchantment.
*
* @param player The player.
* @param entity The entity.
* @return If the requirements are met.
*/
public boolean doesPlayerMeetRequirements(@NotNull final Player player) {
public boolean areRequirementsMet(@NotNull final LivingEntity entity) {
if (!(entity instanceof Player player)) {
return true;
}
if (cachedRequirements.containsKey(player.getUniqueId())) {
return cachedRequirements.get(player.getUniqueId());
}

View File

@ -57,7 +57,9 @@ public class CallingCurse extends EcoEnchant implements TimedRunnable {
for (Player player : this.getPlugin().getServer().getOnlinePlayers()) {
int level = EnchantChecks.getArmorPoints(player, this, 0);
if (level > 0) {
players.put(player, level);
if (this.areRequirementsMet(player)) {
players.put(player, level);
}
}
}
}, 1);

View File

@ -69,7 +69,9 @@ public class DecayCurse extends EcoEnchant implements TimedRunnable {
players.clear();
this.getPlugin().getScheduler().runLater(() -> this.getPlugin().getServer().getOnlinePlayers().forEach(player -> {
if (Arrays.stream(player.getInventory().getContents()).parallel().anyMatch(item -> EnchantChecks.item(item, this))) {
players.add(player);
if (this.areRequirementsMet(player)) {
players.add(player);
}
}
}), 1);
amount = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "multiplier");
@ -78,7 +80,9 @@ public class DecayCurse extends EcoEnchant implements TimedRunnable {
private void refreshPlayer(@NotNull final Player player) {
players.remove(player);
if (Arrays.stream(player.getInventory().getContents()).parallel().anyMatch(item -> EnchantChecks.item(item, this))) {
players.add(player);
if (this.areRequirementsMet(player)) {
players.add(player);
}
}
}

View File

@ -33,6 +33,10 @@ public class FragilityCurse extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(event.getPlayer())) {
return;
}
if (this.getDisabledWorlds().contains(event.getPlayer().getWorld())) {
return;
}

View File

@ -40,6 +40,10 @@ public class HungerCurse extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
int delta = player.getFoodLevel() - event.getFoodLevel();
delta *= this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "times-more-hunger");

View File

@ -35,6 +35,10 @@ public class Beheading extends EcoEnchant {
Player player = event.getEntity().getKiller();
if (!this.areRequirementsMet(player)) {
return;
}
LivingEntity victim = event.getEntity();
if (!EnchantChecks.mainhand(player, this)) {

View File

@ -32,6 +32,10 @@ public class Dexterous extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
int level = EnchantChecks.getItemLevel(item, this);
double bonus = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "add-speed-per-level");
player.getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(4.0 + (level * bonus));

View File

@ -33,6 +33,9 @@ public class Economical extends EcoEnchant {
if (this.getDisabledWorlds().contains(event.getPlayer().getWorld())) {
return;
}
if (!this.areRequirementsMet(event.getPlayer())) {
return;
}
event.setShouldConsume(false);
}
}

View File

@ -43,11 +43,14 @@ public class Enderism extends EcoEnchant {
return;
}
assert player != null;
if (!player.getWorld().getEnvironment().equals(World.Environment.THE_END)) {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.arrow(arrow, this)) {
return;
}

View File

@ -37,6 +37,10 @@ public class Farmhand extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!(event.getClickedBlock().getType().equals(Material.DIRT) || event.getClickedBlock().getType().equals(Material.GRASS_BLOCK))) {
return;
}

View File

@ -43,6 +43,10 @@ public class Fetching extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!(EnchantChecks.helmet(player, this))) {
return;
}

View File

@ -52,7 +52,9 @@ public class Forcefield extends EcoEnchant implements TimedRunnable {
for (Player player : this.getPlugin().getServer().getOnlinePlayers()) {
int level = EnchantChecks.getArmorPoints(player, this, 0);
if (level > 0) {
players.put(player, level);
if (this.areRequirementsMet(player)) {
players.put(player, level);
}
}
}
}, 1);

View File

@ -35,6 +35,10 @@ public class Frozen extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
final int points = EnchantChecks.getArmorPoints(player, this, 0);
if (points == 0) {

View File

@ -33,6 +33,10 @@ public class Graceful extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (player.getVelocity().getY() > -1) {
return;
}

View File

@ -28,6 +28,10 @@ public class GreenThumb extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (event.getClickedBlock() == null) {
return;
}

View File

@ -29,6 +29,10 @@ public class Grit extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(attacker)) {
return;
}
if (!AntigriefManager.canInjure(attacker, player)) {
return;
}

View File

@ -72,6 +72,10 @@ public class InfernalTouch extends EcoEnchant {
Player player = event.getPlayer();
Block block = event.getBlock();
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.mainhand(player, this)) {
return;
}

View File

@ -27,6 +27,10 @@ public class Invigoration extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
int totalInvigorationPoints = EnchantChecks.getArmorPoints(player, this, 0);
if (this.getDisabledWorlds().contains(player.getWorld())) {
return;
@ -47,6 +51,10 @@ public class Invigoration extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (player.getHealth() > this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "below-health")) {
return;
}

View File

@ -35,6 +35,10 @@ public class Launch extends EcoEnchant {
Player player = event.getPlayer();
if (!this.areRequirementsMet(player)) {
return;
}
if (!player.isGliding()) {
return;
}

View File

@ -33,6 +33,10 @@ public class LuckyCatch extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (event.getState() == PlayerFishEvent.State.CAUGHT_ENTITY) {
return;
}

View File

@ -51,7 +51,9 @@ public class Magnetic extends EcoEnchant implements TimedRunnable {
this.getPlugin().getScheduler().runLater(() -> this.getPlugin().getServer().getOnlinePlayers().forEach(player -> {
int level = EnchantChecks.getArmorPoints(player, this, 0);
if (level > 0) {
players.put(player, level);
if (this.areRequirementsMet(player)) {
players.put(player, level);
}
}
}), 1);
initialDistance = EcoEnchants.MAGNETIC.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "initial-distance");

View File

@ -19,11 +19,14 @@ public class Marksman extends EcoEnchant {
@EventHandler
public void onMarksmanShoot(@NotNull final ProjectileLaunchEvent event) {
if (!(event.getEntity().getShooter() instanceof Player player)) {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.mainhand(player, this)) {
return;
}

View File

@ -37,6 +37,10 @@ public class Necrotic extends EcoEnchant {
Player player = event.getEntity().getKiller();
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.mainhand(player, this)) {
return;
}

View File

@ -32,6 +32,10 @@ public class Rebounding extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(victim)) {
return;
}
int level = EnchantChecks.getArmorPoints(victim, this);
if (level == 0) {

View File

@ -32,6 +32,10 @@ public class Reel extends EcoEnchant {
Player player = event.getPlayer();
if (!this.areRequirementsMet(player)) {
return;
}
if (victim.hasMetadata("NPC")) {
return;
}

View File

@ -22,6 +22,10 @@ public class Rejuvenation extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!event.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.SATIATED) && !event.getRegainReason().equals(EntityRegainHealthEvent.RegainReason.REGEN)) {
return;
}

View File

@ -27,6 +27,10 @@ public class Sating extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.helmet(player, this)) {
return;
}

View File

@ -31,6 +31,10 @@ public class Shockwave extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
ItemStack item = player.getInventory().getItemInMainHand();
if (entity instanceof Trident trident) {
item = trident.getItem();

View File

@ -36,6 +36,10 @@ public class ShotAssist extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
assert player != null;
int points = EnchantChecks.getArmorPoints(player, this, 0);

View File

@ -32,6 +32,10 @@ public class Slicing extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.chestplate(player, this)) {
return;
}

View File

@ -43,6 +43,10 @@ public class Spearfishing extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!(event.getEntity() instanceof Trident trident)) {
return;
}

View File

@ -30,6 +30,10 @@ public class Spiked extends EcoEnchant {
Player player = event.getPlayer();
if (!this.areRequirementsMet(player)) {
return;
}
if (victim.hasMetadata("NPC")) {
return;
}

View File

@ -31,6 +31,10 @@ public class Stamina extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.boots(player, this)) {
return;
}

View File

@ -48,7 +48,7 @@ public class Telekinesis extends EcoEnchant {
public void telekinesisDropItem(@NotNull final BlockDropItemEvent event) {
Player player = event.getPlayer();
if (!always && !EnchantChecks.mainhand(player, this)) {
if (!always && !(EnchantChecks.mainhand(player, this)) && this.areRequirementsMet(player)) {
return;
}
@ -94,7 +94,7 @@ public class Telekinesis extends EcoEnchant {
Player player = event.getPlayer();
Block block = event.getBlock();
if (!always && !EnchantChecks.mainhand(player, this)) {
if (!always && !(EnchantChecks.mainhand(player, this)) && this.areRequirementsMet(player)) {
return;
}

View File

@ -27,6 +27,10 @@ public class Thrive extends EcoEnchant {
public void onArmorEquip(@NotNull final ArmorChangeEvent event) {
Player player = event.getPlayer();
if (!this.areRequirementsMet(player)) {
return;
}
int points = EnchantChecks.getArmorPoints(player, this);
AttributeInstance inst = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);

View File

@ -46,6 +46,10 @@ public class Aiming extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
int level = EnchantChecks.getMainhandLevel(player, this);
if (this.getDisabledWorlds().contains(player.getWorld())) {

View File

@ -26,6 +26,10 @@ public class Frenzy extends EcoEnchant {
Player player = event.getEntity().getKiller();
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.mainhand(player, this)) {
return;
}

View File

@ -30,6 +30,10 @@ public class Harpoon extends EcoEnchant {
Player player = event.getPlayer();
if (!this.areRequirementsMet(player)) {
return;
}
if (victim.hasMetadata("NPC")) {
return;
}

View File

@ -29,6 +29,10 @@ public class Indestructibility extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(event.getPlayer())) {
return;
}
double level = EnchantChecks.getItemLevel(item, this);
double levelBonus = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "level-bonus");

View File

@ -29,6 +29,10 @@ public class Instability extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.mainhand(player, this)) {
return;
}

View File

@ -24,6 +24,10 @@ public class Intellect extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
int level = EnchantChecks.getMainhandLevel(player, this);
if (level == 0) {

View File

@ -27,37 +27,39 @@ public class Prosperity extends EcoEnchant {
public void onArmorEquip(@NotNull final ArmorChangeEvent event) {
Player player = event.getPlayer();
this.getPlugin().getScheduler().runLater(() -> {
int points = EnchantChecks.getArmorPoints(player, this);
if (!this.areRequirementsMet(player)) {
return;
}
AttributeInstance inst = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
int points = EnchantChecks.getArmorPoints(player, this);
assert inst != null;
AttributeInstance inst = player.getAttribute(Attribute.GENERIC_MAX_HEALTH);
inst.setBaseValue(inst.getDefaultValue());
assert inst != null;
if (this.getDisabledWorlds().contains(player.getWorld())) {
points = 0;
}
inst.setBaseValue(inst.getDefaultValue());
inst.removeModifier(modifier);
if (this.getDisabledWorlds().contains(player.getWorld())) {
points = 0;
}
if (player.getHealth() >= inst.getValue()) {
this.getPlugin().getScheduler().runLater(() -> {
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
}, 1);
}
inst.removeModifier(modifier);
if (points > 0) {
inst.addModifier(
new AttributeModifier(
UUID.nameUUIDFromBytes("prosperity".getBytes()),
this.getKey().getKey(),
this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "health-per-point") * points,
AttributeModifier.Operation.ADD_NUMBER
)
);
}
}, 1);
if (player.getHealth() >= inst.getValue()) {
this.getPlugin().getScheduler().runLater(() -> {
player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
}, 1);
}
if (points > 0) {
inst.addModifier(
new AttributeModifier(
UUID.nameUUIDFromBytes("prosperity".getBytes()),
this.getKey().getKey(),
this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "health-per-point") * points,
AttributeModifier.Operation.ADD_NUMBER
)
);
}
}
}

View File

@ -70,7 +70,9 @@ public class Repairing extends EcoEnchant implements TimedRunnable {
players.clear();
this.getPlugin().getScheduler().runLater(() -> this.getPlugin().getServer().getOnlinePlayers().forEach(player -> {
if (Arrays.stream(player.getInventory().getContents()).parallel().anyMatch(item -> EnchantChecks.item(item, this))) {
players.add(player);
if (this.areRequirementsMet(player)) {
players.add(player);
}
}
}), 1);
amount = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "multiplier");
@ -79,7 +81,9 @@ public class Repairing extends EcoEnchant implements TimedRunnable {
private void refreshPlayer(@NotNull final Player player) {
players.remove(player);
if (Arrays.stream(player.getInventory().getContents()).parallel().anyMatch(item -> EnchantChecks.item(item, this))) {
players.add(player);
if (this.areRequirementsMet(player)) {
players.add(player);
}
}
}

View File

@ -42,6 +42,10 @@ public class Soulbound extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (player.getKiller() != null) {
Player killer = player.getKiller();
int reaperLevel = EnchantChecks.getMainhandLevel(killer, EcoEnchants.REAPER);

View File

@ -100,6 +100,10 @@ public abstract class Artifact extends EcoEnchant {
return;
}
if (!this.areRequirementsMet(player)) {
return;
}
if (!EnchantChecks.chestplate(player, this)) {
return;
}

View File

@ -252,6 +252,10 @@ public abstract class Spell extends EcoEnchant {
}
}
if (!this.areRequirementsMet(player)) {
return;
}
if (cooldown > 0) {
if (!this.hasFlag("no-cooldown-message")) {
if (this.getPlugin().getConfigYml().getBool("types.special.cooldown-in-actionbar")) {

View File

@ -113,6 +113,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(attacker)) {
return;
}
enchant.onArrowDamage(attacker, victim, arrow, level, event);
}));
}
@ -173,6 +177,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(attacker)) {
return;
}
enchant.onTridentDamage(attacker, victim, trident, level, event);
}));
}
@ -203,6 +211,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(player)) {
return;
}
enchant.onJump(player, level, event);
});
}
@ -257,6 +269,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(attacker)) {
return;
}
enchant.onMeleeAttack(attacker, victim, level, event);
});
}
@ -292,6 +308,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(shooter)) {
return;
}
enchant.onBowShoot(shooter, arrow, level, event);
});
}
@ -342,6 +362,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(shooter)) {
return;
}
enchant.onProjectileLaunch(shooter, projectile, level, event);
});
}
@ -378,6 +402,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(victim)) {
return;
}
enchant.onFallDamage(victim, level, event);
});
}
@ -414,6 +442,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(shooter)) {
return;
}
enchant.onArrowHit(shooter, level, event);
}));
}
@ -452,6 +484,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(shooter)) {
return;
}
enchant.onTridentHit(shooter, level, event);
});
}
@ -491,6 +527,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(player)) {
return;
}
enchant.onBlockBreak(player, block, level, event);
});
}
@ -523,6 +563,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(victim)) {
return;
}
enchant.onDamageWearingArmor(victim, level, event);
});
}
@ -550,6 +594,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(player)) {
return;
}
int level = EnchantChecks.getArmorPoints(player, enchant);
enchant.onArmorEquip(player, level, event);
}), 1);
@ -561,7 +609,6 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
* @param event The event to listen for.
*/
@EventHandler(ignoreCancelled = true)
@Deprecated
public void onArmorChange(@NotNull final ArmorChangeEvent event) {
if (McmmoManager.isFake(event)) {
return;
@ -578,6 +625,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(player)) {
return;
}
int level = EnchantChecks.getArmorPoints(player, enchant);
enchant.onArmorEquip(player, level, event);
});
@ -614,6 +665,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(player)) {
return;
}
enchant.onDamageBlock(player, block, level, event);
});
}
@ -639,6 +694,7 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
LivingEntity shooter = (LivingEntity) trident.getShooter();
ItemStack item = trident.getItem();
assert shooter != null;
EnchantChecks.getEnchantsOnItem(item).forEach((enchant, level) -> {
if (event.isCancelled()) {
@ -653,6 +709,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(shooter)) {
return;
}
enchant.onTridentLaunch(shooter, trident, level, event);
});
}
@ -701,6 +761,10 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
if (!enchant.areRequirementsMet(blocker)) {
return;
}
enchant.onDeflect(blocker, attacker, level, event);
});
}