9
0
mirror of https://github.com/Auxilor/EcoMobs.git synced 2025-12-21 16:09:24 +00:00

Added effects system

This commit is contained in:
Auxilor
2021-04-01 12:15:02 +01:00
parent 751c037cd0
commit 4fa14b356c
10 changed files with 159 additions and 16 deletions

View File

@@ -6,22 +6,10 @@
<suppressions> <suppressions>
<!-- Enchantments don't need javadoc. --> <!-- Enchantments don't need javadoc. -->
<suppress files="[\\/]enchantments[\\/]ecoenchants[\\/]" checks="MissingJavadocMethod"/> <suppress files="[\\/]effects[\\/]effects[\\/]" checks="MissingJavadocMethod"/>
<suppress files="[\\/]enchantments[\\/]ecoenchants[\\/]" checks="JavadocVariable"/> <suppress files="[\\/]effects[\\/]effects[\\/]" checks="JavadocVariable"/>
<!-- Extensions don't need javadoc. --> <!-- Extensions don't need javadoc. -->
<suppress files="[\\/]eco-extensions[\\/]" checks="MissingJavadocMethod"/> <suppress files="[\\/]eco-extensions[\\/]" checks="MissingJavadocMethod"/>
<suppress files="[\\/]eco-extensions[\\/]" checks="JavadocVariable"/> <suppress files="[\\/]eco-extensions[\\/]" checks="JavadocVariable"/>
<!-- Fields don't need javadoc -->
<suppress files="EcoEnchants.java" checks="JavadocVariable"/>
<!-- Modified version of library -->
<suppress files="ArmorEquipEvent.java" checks="JavadocVariable"/>
<suppress files="ArmorEquipEvent.java" checks="MissingJavadocMethod"/>
<suppress files="ArmorEquipEvent.java" checks="JavadocStyle"/>
<suppress files="ArmorListener.java" checks="JavadocVariable"/>
<suppress files="ArmorListener.java" checks="MissingJavadocMethod"/>
<suppress files="ArmorType.java" checks="JavadocVariable"/>
<suppress files="ArmorType.java" checks="MissingJavadocMethod"/>
</suppressions> </suppressions>

View File

@@ -1,11 +1,12 @@
package com.willfp.ecobosses.bosses; package com.willfp.ecobosses.bosses;
import com.willfp.eco.internal.config.AbstractUndefinedConfig; import com.willfp.eco.internal.config.AbstractUndefinedConfig;
import com.willfp.eco.util.NumberUtils;
import com.willfp.eco.util.StringUtils; import com.willfp.eco.util.StringUtils;
import com.willfp.eco.util.internal.PluginDependent; import com.willfp.eco.util.internal.PluginDependent;
import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.eco.util.plugin.AbstractEcoPlugin;
import com.willfp.eco.util.tuples.Pair; import com.willfp.eco.util.tuples.Pair;
import com.willfp.ecobosses.bosses.effects.Effect;
import com.willfp.ecobosses.bosses.effects.Effects;
import com.willfp.ecobosses.bosses.util.bosstype.BossEntityUtils; import com.willfp.ecobosses.bosses.util.bosstype.BossEntityUtils;
import com.willfp.ecobosses.bosses.util.bosstype.BossType; import com.willfp.ecobosses.bosses.util.bosstype.BossType;
import com.willfp.ecobosses.bosses.util.obj.*; import com.willfp.ecobosses.bosses.util.obj.*;
@@ -13,6 +14,7 @@ import com.willfp.ecobosses.bosses.util.obj.attacks.EffectOption;
import com.willfp.ecobosses.bosses.util.obj.attacks.SummonsOption; import com.willfp.ecobosses.bosses.util.obj.attacks.SummonsOption;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
@@ -23,7 +25,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.*; import org.bukkit.entity.*;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -221,6 +222,11 @@ public class EcoBoss extends PluginDependent {
*/ */
private final Map<UUID, LivingEcoBoss> livingBosses; private final Map<UUID, LivingEcoBoss> livingBosses;
/**
* The effect names and arguments.
*/
private final Map<String, List<String>> effectNames;
/** /**
* Create a new Boss. * Create a new Boss.
* *
@@ -423,11 +429,40 @@ public class EcoBoss extends PluginDependent {
this.nearbyPlayersCommands.put(string, chance); this.nearbyPlayersCommands.put(string, chance);
} }
// Effects
this.effectNames = new HashMap<>();
for (String string : this.getConfig().getStrings("effects")) {
String effectName = string.split(":")[0];
List<String> args = Arrays.asList(string.replace(effectName + ":", "").split(":"));
this.effectNames.put(effectName, args);
}
new HashMap<>(this.effectNames).forEach((string, args) -> {
if (Effects.getEffect(string, args) == null) {
this.effectNames.remove(string);
Bukkit.getLogger().warning("Invalid effect specified in " + this.name);
}
});
if (this.getConfig().getBool("enabled")) { if (this.getConfig().getBool("enabled")) {
EcoBosses.addBoss(this); EcoBosses.addBoss(this);
} }
} }
/**
* Create effect tickers for Living Boss.
*
* @return The effects.
*/
public Set<Effect> createEffectTickers() {
Set<Effect> effects = new HashSet<>();
this.effectNames.forEach((string, args) -> {
effects.add(Effects.getEffect(string, args));
});
return effects;
}
/** /**
* Spawn the boss. * Spawn the boss.
* *

View File

@@ -82,6 +82,7 @@ public class LivingEcoBoss extends PluginDependent {
) )
); );
} }
this.tickers.addAll(boss.createEffectTickers());
AtomicLong currentTick = new AtomicLong(0); AtomicLong currentTick = new AtomicLong(0);

View File

@@ -0,0 +1,33 @@
package com.willfp.ecobosses.bosses.effects;
import com.willfp.ecobosses.bosses.tick.BossTicker;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public abstract class Effect implements BossTicker {
/**
* The effect args.
*/
@Getter
private final List<String> args;
/**
* Create a new effect.
*
* @param args The args.
*/
protected Effect(@NotNull final List<String> args) {
this.args = args;
}
public void showConfigError(@NotNull final String message) {
Bukkit.getLogger().warning("An effect is configured incorrectly!");
Bukkit.getLogger().warning(message);
Bukkit.getLogger().warning("Usage: " + getUsage());
}
public abstract String getUsage();
}

View File

@@ -0,0 +1,30 @@
package com.willfp.ecobosses.bosses.effects;
import com.willfp.ecobosses.bosses.effects.effects.DamageNearbyPlayers;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@UtilityClass
public class Effects {
/**
* Get effect matching name.
*
* @param name The effect name.
* @param args The args.
* @return The found effect, or null.
*/
@Nullable
public Effect getEffect(@NotNull final String name,
@NotNull final List<String> args) {
switch (name.toLowerCase()) {
case "damage-nearby-players":
return new DamageNearbyPlayers(args);
default:
return null;
}
}
}

View File

@@ -0,0 +1,52 @@
package com.willfp.ecobosses.bosses.effects.effects;
import com.willfp.ecobosses.bosses.EcoBoss;
import com.willfp.ecobosses.bosses.effects.Effect;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
public class DamageNearbyPlayers extends Effect {
private final int frequency;
private final double damage;
private final double radius;
private final boolean triggerHandler;
public DamageNearbyPlayers(@NotNull final List<String> args) {
super(args);
if (args.size() < 4) {
showConfigError("Incorrect amount of arguments!");
}
frequency = Integer.parseInt(args.get(0));
radius = Double.parseDouble(args.get(1));
damage = Double.parseDouble(args.get(2));
triggerHandler = Boolean.parseBoolean(args.get(3));
}
@Override
public String getUsage() {
return "damage-nearby-players:<frequency>:<damage>:<radius>:<triggerHandler>";
}
@Override
public void tick(@NotNull final EcoBoss boss,
@NotNull final LivingEntity entity,
final long tick) {
if (tick % frequency == 0) {
for (Entity nearbyEntity : entity.getNearbyEntities(radius, radius, radius)) {
if (nearbyEntity instanceof Player) {
if (triggerHandler) {
((Player) nearbyEntity).damage(damage, entity);
} else {
((Player) nearbyEntity).damage(damage);
}
}
}
}
}
}

View File

@@ -53,6 +53,7 @@ broadcast:
- "&f - %third%&f (%third_damage% Damage)" - "&f - %third%&f (%third_damage% Damage)"
- "" - ""
effects: []
defence: defence:
immunities: immunities:

View File

@@ -53,6 +53,7 @@ broadcast:
- "&f - &9%third%&f (%third_damage% Damage)" - "&f - &9%third%&f (%third_damage% Damage)"
- "" - ""
effects: [ ]
defence: defence:
immunities: immunities:

View File

@@ -53,6 +53,7 @@ broadcast:
- "&f - &8%third%&f (%third_damage% Damage)" - "&f - &8%third%&f (%third_damage% Damage)"
- "" - ""
effects: []
defence: defence:
immunities: immunities:

View File

@@ -53,6 +53,7 @@ broadcast:
- "&f - &4%third%&f (%third_damage% Damage)" - "&f - &4%third%&f (%third_damage% Damage)"
- "" - ""
effects: []
defence: defence:
immunities: immunities: