9
0
mirror of https://github.com/Auxilor/EcoMobs.git synced 2025-12-23 08:59:31 +00:00

Reworked custom entity system

This commit is contained in:
Auxilor
2021-03-11 17:34:16 +00:00
parent 91a2e1559c
commit 8828e80dca
15 changed files with 240 additions and 58 deletions

View File

@@ -3,6 +3,9 @@ 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 lombok.AccessLevel;
import lombok.Getter;
import org.jetbrains.annotations.NotNull;
@@ -22,6 +25,36 @@ public class EcoBoss extends PluginDependent {
@Getter(AccessLevel.PRIVATE)
private final AbstractUndefinedConfig config;
/**
* The base entity spawner.
*/
@Getter
private final BossType bossType;
/**
* If the boss bar is enabled.
*/
@Getter
private final boolean bossbarEnabled;
/**
* The BossBar properties.
*/
@Getter
private final BossbarProperties bossbarProperties;
/**
* If spawn totem is enabled.
*/
@Getter
private final boolean spawnTotemEnabled;
/**
* The spawn totem.
*/
@Getter
private final SpawnTotem spawnTotem;
/**
* Create a new Boss.
*

View File

@@ -2,6 +2,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.proxy.proxies.CustomIllusionerProxy;
import com.willfp.ecobosses.util.ProxyUtils;
import org.bukkit.Material;

View File

@@ -0,0 +1,18 @@
package com.willfp.ecobosses.bosses.util;
import lombok.Data;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
@Data
public class BossbarProperties {
/**
* The BossBar color.
*/
private final BarColor color;
/**
* The BossBar style.
*/
private final BarStyle style;
}

View File

@@ -1,59 +1,22 @@
package com.willfp.ecobosses.bosses.util;
import lombok.Getter;
import lombok.Data;
import org.bukkit.Material;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
@Data
public class SpawnTotem {
/**
* The bottom block.
*/
@Getter
private final Material bottom;
/**
* The middle block.
*/
@Getter
private final Material middle;
/**
* The top block.
*/
@Getter
private final Material top;
/**
* Create a new spawn totem.
*
* @param bottom The bottom block.
* @param middle The middle block.
* @param top The top block.
*/
public SpawnTotem(@NotNull final Material bottom,
@NotNull final Material middle,
@NotNull final Material top) {
this.bottom = bottom;
this.middle = middle;
this.top = top;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof SpawnTotem)) {
return false;
}
SpawnTotem that = (SpawnTotem) o;
return getBottom() == that.getBottom() && getMiddle() == that.getMiddle() && getTop() == that.getTop();
}
@Override
public int hashCode() {
return Objects.hash(getBottom(), getMiddle(), getTop());
}
}

View File

@@ -0,0 +1,25 @@
package com.willfp.ecobosses.bosses.util.bosstype;
import com.willfp.ecobosses.proxy.util.CustomEntities;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.EntityType;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
@UtilityClass
public class BossEntityUtils {
/**
* Get boss type.
*
* @param id The name.
* @return The boss type.
*/
public static BossType getBossType(@NotNull final String id) {
if (CustomEntities.getEntityClass(id) != null) {
return new CustomBossType(Objects.requireNonNull(CustomEntities.getEntityClass(id)));
} else {
return new VanillaBossType(Objects.requireNonNull(EntityType.valueOf(id.toUpperCase()).getEntityClass()));
}
}
}

View File

@@ -0,0 +1,15 @@
package com.willfp.ecobosses.bosses.util.bosstype;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.jetbrains.annotations.NotNull;
public abstract class BossType {
/**
* Spawn boss entity.
*
* @param location The location.
* @return The entity.
*/
public abstract LivingEntity spawnBossEntity(@NotNull Location location);
}

View File

@@ -0,0 +1,29 @@
package com.willfp.ecobosses.bosses.util.bosstype;
import com.willfp.ecobosses.proxy.proxies.CustomEntitySpawnerProxy;
import com.willfp.ecobosses.proxy.util.CustomEntity;
import com.willfp.ecobosses.util.ProxyUtils;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import org.jetbrains.annotations.NotNull;
class CustomBossType extends BossType {
/**
* The entity type.
*/
private final Class<? extends CustomEntity<? extends LivingEntity>> entityClass;
/**
* Create new vanilla boss type.
*
* @param entityClass The entity class.
*/
CustomBossType(@NotNull final Class<? extends CustomEntity<? extends LivingEntity>> entityClass) {
this.entityClass = entityClass;
}
@Override
public LivingEntity spawnBossEntity(@NotNull final Location location) {
return ProxyUtils.getProxy(CustomEntitySpawnerProxy.class).spawnCustomEntity(entityClass, location);
}
}

View File

@@ -0,0 +1,29 @@
package com.willfp.ecobosses.bosses.util.bosstype;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
class VanillaBossType extends BossType {
/**
* The entity type.
*/
private final Class<? extends Entity> entityClass;
/**
* Create new vanilla boss type.
*
* @param entityClass The entity class.
*/
VanillaBossType(@NotNull final Class<? extends Entity> entityClass) {
this.entityClass = entityClass;
}
@Override
public LivingEntity spawnBossEntity(@NotNull final Location location) {
return (LivingEntity) Objects.requireNonNull(location.getWorld()).spawn(location, entityClass);
}
}

View File

@@ -4,7 +4,7 @@ name: "Illusioner" # Display name
base-mob: custom_illusioner # Any existing mob - custom_illusioner is also accepted (like in the old Illusioner plugin)
spawn-egg:
mob-type: illusioner
egg-material: illusioner_spawn_egg
display-name: "Illusioner Spawn Egg"
lore: []