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:
@@ -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>
|
||||||
@@ -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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ public class LivingEcoBoss extends PluginDependent {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
this.tickers.addAll(boss.createEffectTickers());
|
||||||
|
|
||||||
|
|
||||||
AtomicLong currentTick = new AtomicLong(0);
|
AtomicLong currentTick = new AtomicLong(0);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,6 +53,7 @@ broadcast:
|
|||||||
- "&f - %third%&f (%third_damage% Damage)"
|
- "&f - %third%&f (%third_damage% Damage)"
|
||||||
- ""
|
- ""
|
||||||
|
|
||||||
|
effects: []
|
||||||
|
|
||||||
defence:
|
defence:
|
||||||
immunities:
|
immunities:
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ broadcast:
|
|||||||
- "&f - &9%third%&f (%third_damage% Damage)"
|
- "&f - &9%third%&f (%third_damage% Damage)"
|
||||||
- ""
|
- ""
|
||||||
|
|
||||||
|
effects: [ ]
|
||||||
|
|
||||||
defence:
|
defence:
|
||||||
immunities:
|
immunities:
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ broadcast:
|
|||||||
- "&f - &8%third%&f (%third_damage% Damage)"
|
- "&f - &8%third%&f (%third_damage% Damage)"
|
||||||
- ""
|
- ""
|
||||||
|
|
||||||
|
effects: []
|
||||||
|
|
||||||
defence:
|
defence:
|
||||||
immunities:
|
immunities:
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ broadcast:
|
|||||||
- "&f - &4%third%&f (%third_damage% Damage)"
|
- "&f - &4%third%&f (%third_damage% Damage)"
|
||||||
- ""
|
- ""
|
||||||
|
|
||||||
|
effects: []
|
||||||
|
|
||||||
defence:
|
defence:
|
||||||
immunities:
|
immunities:
|
||||||
|
|||||||
Reference in New Issue
Block a user