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:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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: []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user