9
0
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:
Auxilor
2021-03-12 12:18:48 +00:00
parent 32100fe08f
commit 39d1170f77
15 changed files with 175 additions and 49 deletions

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -1,4 +1,4 @@
package com.willfp.ecobosses.bosses.util;
package com.willfp.ecobosses.bosses.util.obj;
import lombok.Getter;
import org.bukkit.Sound;

View File

@@ -1,4 +1,4 @@
package com.willfp.ecobosses.bosses.util;
package com.willfp.ecobosses.bosses.util.obj;
import lombok.Data;
import org.bukkit.Material;

View File

@@ -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;

View File

@@ -1,4 +1,6 @@
#
# EcoBosses
# by Auxilor
#
#
bossbar-radius: 50 # How far away players should be able to see the boss bar for bosses.