mirror of
https://github.com/Auxilor/EcoMobs.git
synced 2025-12-28 03:19:07 +00:00
Added more options
This commit is contained in:
@@ -3,13 +3,25 @@ package com.willfp.ecobosses.bosses;
|
||||
import com.willfp.eco.internal.config.AbstractUndefinedConfig;
|
||||
import com.willfp.eco.util.internal.PluginDependent;
|
||||
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||
import com.willfp.ecobosses.bosses.util.BossbarProperties;
|
||||
import com.willfp.ecobosses.bosses.util.SpawnTotem;
|
||||
import com.willfp.ecobosses.bosses.util.bosstype.BossType;
|
||||
import com.willfp.ecobosses.bosses.util.obj.BossbarProperties;
|
||||
import com.willfp.ecobosses.bosses.util.obj.ImmunityOptions;
|
||||
import com.willfp.ecobosses.bosses.util.obj.SpawnTotem;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeInstance;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class EcoBoss extends PluginDependent {
|
||||
@@ -28,7 +40,6 @@ public class EcoBoss extends PluginDependent {
|
||||
/**
|
||||
* The base entity spawner.
|
||||
*/
|
||||
@Getter
|
||||
private final BossType bossType;
|
||||
|
||||
/**
|
||||
@@ -55,6 +66,30 @@ public class EcoBoss extends PluginDependent {
|
||||
@Getter
|
||||
private final SpawnTotem spawnTotem;
|
||||
|
||||
/**
|
||||
* The max health.
|
||||
*/
|
||||
@Getter
|
||||
private final int maxHealth;
|
||||
|
||||
/**
|
||||
* The attack damage.
|
||||
*/
|
||||
@Getter
|
||||
private final int attackDamage;
|
||||
|
||||
/**
|
||||
* The immunity options.
|
||||
*/
|
||||
@Getter
|
||||
private final ImmunityOptions immunityOptions;
|
||||
|
||||
/**
|
||||
* The drops.
|
||||
*/
|
||||
@Getter
|
||||
private final List<ItemStack> drops;
|
||||
|
||||
/**
|
||||
* Create a new Boss.
|
||||
*
|
||||
@@ -74,6 +109,61 @@ public class EcoBoss extends PluginDependent {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Spawn the boss.
|
||||
*
|
||||
* @param location The location.
|
||||
*/
|
||||
public void spawn(@NotNull final Location location) {
|
||||
LivingEntity entity = bossType.spawnBossEntity(location);
|
||||
entity.getPersistentDataContainer().set(this.getPlugin().getNamespacedKeyFactory().create("boss"), PersistentDataType.STRING, name);
|
||||
entity.setPersistent(true);
|
||||
|
||||
AttributeInstance maxHealth = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH);
|
||||
assert maxHealth != null;
|
||||
maxHealth.setBaseValue(this.getMaxHealth());
|
||||
|
||||
AttributeInstance attackDamage = entity.getAttribute(Attribute.GENERIC_ATTACK_DAMAGE);
|
||||
assert attackDamage != null;
|
||||
attackDamage.setBaseValue(this.getAttackDamage());
|
||||
|
||||
createBossBar(entity);
|
||||
}
|
||||
|
||||
private void createBossBar(@NotNull final LivingEntity entity) {
|
||||
BossBar bossBar = Bukkit.getServer().createBossBar(
|
||||
this.getDisplayName(),
|
||||
this.getBossbarProperties().getColor(),
|
||||
this.getBossbarProperties().getStyle(),
|
||||
(BarFlag) null
|
||||
);
|
||||
|
||||
int radius = this.getPlugin().getConfigYml().getInt("bossbar-radius");
|
||||
|
||||
this.getPlugin().getRunnableFactory().create(runnable -> {
|
||||
if (!entity.isDead()) {
|
||||
bossBar.getPlayers().forEach(bossBar::removePlayer);
|
||||
entity.getNearbyEntities(radius, radius, radius).forEach(entity1 -> {
|
||||
if (entity1 instanceof Player) {
|
||||
bossBar.addPlayer((Player) entity1);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
runnable.cancel();
|
||||
}
|
||||
}).runTaskTimer(0, 40);
|
||||
|
||||
this.getPlugin().getRunnableFactory().create(runnable -> {
|
||||
if (!entity.isDead()) {
|
||||
bossBar.setProgress(entity.getHealth() / entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
|
||||
} else {
|
||||
bossBar.getPlayers().forEach(bossBar::removePlayer);
|
||||
bossBar.setVisible(false);
|
||||
runnable.cancel();
|
||||
}
|
||||
}).runTaskTimer(0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object o) {
|
||||
if (this == o) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.willfp.ecobosses.bosses.listeners;
|
||||
|
||||
import com.willfp.eco.util.NumberUtils;
|
||||
import com.willfp.ecobosses.bosses.util.OptionedSound;
|
||||
import com.willfp.ecobosses.bosses.util.obj.OptionedSound;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.willfp.ecobosses.bosses.listeners;
|
||||
|
||||
|
||||
import com.willfp.eco.util.events.entitydeathbyentity.EntityDeathByEntityEvent;
|
||||
import com.willfp.ecobosses.bosses.util.OptionedSound;
|
||||
import com.willfp.ecobosses.bosses.util.obj.OptionedSound;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package com.willfp.ecobosses.bosses.listeners;
|
||||
import com.willfp.eco.util.internal.PluginDependent;
|
||||
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||
import com.willfp.ecobosses.bosses.util.SpawnTotem;
|
||||
import com.willfp.ecobosses.proxy.proxies.CustomEntitySpawnerProxy;
|
||||
import com.willfp.ecobosses.bosses.util.obj.SpawnTotem;
|
||||
import com.willfp.ecobosses.proxy.proxies.CustomIllusionerProxy;
|
||||
import com.willfp.ecobosses.util.ProxyUtils;
|
||||
import org.bukkit.Material;
|
||||
|
||||
@@ -2,8 +2,8 @@ package com.willfp.ecobosses.bosses.options;
|
||||
|
||||
import com.willfp.eco.util.internal.PluginDependent;
|
||||
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||
import com.willfp.ecobosses.bosses.util.EffectOption;
|
||||
import com.willfp.ecobosses.bosses.util.OptionedSound;
|
||||
import com.willfp.ecobosses.bosses.util.obj.EffectOption;
|
||||
import com.willfp.ecobosses.bosses.util.obj.OptionedSound;
|
||||
import com.willfp.ecobosses.config.EcoBossesConfigs;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.willfp.eco.util.internal.PluginDependent;
|
||||
import com.willfp.eco.util.plugin.AbstractEcoPlugin;
|
||||
import com.willfp.eco.util.tuples.Pair;
|
||||
import com.willfp.ecobosses.config.EcoBossesConfigs;
|
||||
import com.willfp.ecobosses.bosses.util.SpawnTotem;
|
||||
import com.willfp.ecobosses.bosses.util.OptionedSound;
|
||||
import com.willfp.ecobosses.bosses.util.obj.SpawnTotem;
|
||||
import com.willfp.ecobosses.bosses.util.obj.OptionedSound;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
import org.bukkit.Material;
|
||||
|
||||
@@ -12,37 +12,5 @@ import org.jetbrains.annotations.NotNull;
|
||||
@UtilityClass
|
||||
public class BossbarUtils {
|
||||
public BossBar createBossBar(@NotNull final LivingEntity entity) {
|
||||
if (bossBar != null) {
|
||||
return bossBar;
|
||||
}
|
||||
BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, IllusionerManager.OPTIONS.getColor(), IllusionerManager.OPTIONS.getStyle(), (BarFlag) null);
|
||||
this.bossBar = bossBar;
|
||||
|
||||
LivingEntity entity = (LivingEntity) this.getBukkitEntity();
|
||||
|
||||
plugin.getRunnableFactory().create(runnable -> {
|
||||
if (!entity.isDead()) {
|
||||
bossBar.getPlayers().forEach(bossBar::removePlayer);
|
||||
entity.getNearbyEntities(50, 50, 50).forEach(entity1 -> {
|
||||
if (entity1 instanceof Player) {
|
||||
bossBar.addPlayer((Player) entity1);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
runnable.cancel();
|
||||
}
|
||||
}).runTaskTimer(0, 40);
|
||||
|
||||
plugin.getRunnableFactory().create(runnable -> {
|
||||
if (!entity.isDead()) {
|
||||
bossBar.setProgress(entity.getHealth() / entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue());
|
||||
} else {
|
||||
bossBar.getPlayers().forEach(bossBar::removePlayer);
|
||||
bossBar.setVisible(false);
|
||||
runnable.cancel();
|
||||
}
|
||||
}).runTaskTimer(0, 1);
|
||||
|
||||
return bossBar;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.willfp.ecobosses.bosses.util;
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import lombok.Data;
|
||||
import org.bukkit.boss.BarColor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.willfp.ecobosses.bosses.util;
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import com.willfp.eco.util.NumberUtils;
|
||||
|
||||
public class ExperienceOptions {
|
||||
/**
|
||||
* The minimum xp to drop.
|
||||
*/
|
||||
private final int minimum;
|
||||
|
||||
/**
|
||||
* The maximum xp to drop.
|
||||
*/
|
||||
private final int maximum;
|
||||
|
||||
/**
|
||||
* Create new experience options.
|
||||
*
|
||||
* @param minimum Minimum xp.
|
||||
* @param maximum Maximum xp.
|
||||
*/
|
||||
public ExperienceOptions(final int minimum,
|
||||
final int maximum) {
|
||||
this.minimum = minimum;
|
||||
this.maximum = maximum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate an exp amount.
|
||||
*
|
||||
* @return The amount.
|
||||
*/
|
||||
public int generateXp() {
|
||||
return NumberUtils.randInt(minimum, maximum);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ImmunityOptions {
|
||||
/**
|
||||
* If is immune to fire.
|
||||
*/
|
||||
private final boolean immuneToFire;
|
||||
|
||||
/**
|
||||
* If is immune to suffocation.
|
||||
*/
|
||||
private final boolean immuneToSuffocation;
|
||||
|
||||
/**
|
||||
* If is immune to drowning.
|
||||
*/
|
||||
private final boolean immuneToDrowning;
|
||||
|
||||
/**
|
||||
* If is immune to projectiles.
|
||||
*/
|
||||
private final boolean immuneToProjectiles;
|
||||
|
||||
/**
|
||||
* If is immune to explosions.
|
||||
*/
|
||||
private final boolean immuneToExplosions;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.willfp.ecobosses.bosses.util;
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Sound;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.willfp.ecobosses.bosses.util;
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import lombok.Data;
|
||||
import org.bukkit.Material;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.willfp.ecobosses.bosses.util;
|
||||
package com.willfp.ecobosses.bosses.util.obj;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.bukkit.entity.EntityType;
|
||||
@@ -1,4 +1,6 @@
|
||||
#
|
||||
# EcoBosses
|
||||
# by Auxilor
|
||||
#
|
||||
#
|
||||
|
||||
bossbar-radius: 50 # How far away players should be able to see the boss bar for bosses.
|
||||
Reference in New Issue
Block a user