diff --git a/NMS/API/src/main/java/com/willfp/illusioner/nms/api/IllusionerWrapper.java b/NMS/API/src/main/java/com/willfp/illusioner/nms/api/IllusionerWrapper.java index 80e7170..7dfa5d4 100644 --- a/NMS/API/src/main/java/com/willfp/illusioner/nms/api/IllusionerWrapper.java +++ b/NMS/API/src/main/java/com/willfp/illusioner/nms/api/IllusionerWrapper.java @@ -7,4 +7,5 @@ import org.bukkit.Location; */ public interface IllusionerWrapper { EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name); + EntityIllusionerWrapper adapt(org.bukkit.entity.Illusioner illusioner, Location location, double maxHealth, double attackDamage, String name); } \ No newline at end of file diff --git a/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/Illusioner.java b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/Illusioner.java index 4d92e2f..547983f 100644 --- a/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/Illusioner.java +++ b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/Illusioner.java @@ -4,6 +4,7 @@ import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; import com.willfp.illusioner.nms.api.IllusionerWrapper; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_15_R1.entity.CraftIllusioner; public class Illusioner implements IllusionerWrapper { @Override @@ -12,4 +13,12 @@ public class Illusioner implements IllusionerWrapper { ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); return illusioner; } + + @Override + public EntityIllusionerWrapper adapt(org.bukkit.entity.Illusioner illusioner, Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner internalIllusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + if(!(illusioner instanceof CraftIllusioner)) return null; + ((CraftIllusioner) illusioner).setHandle(internalIllusioner); + return internalIllusioner; + } } diff --git a/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/Illusioner.java b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/Illusioner.java index da0fb37..149d543 100644 --- a/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/Illusioner.java +++ b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/Illusioner.java @@ -4,6 +4,7 @@ import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; import com.willfp.illusioner.nms.api.IllusionerWrapper; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftIllusioner; public class Illusioner implements IllusionerWrapper { @Override @@ -12,4 +13,12 @@ public class Illusioner implements IllusionerWrapper { ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); return illusioner; } + + @Override + public EntityIllusionerWrapper adapt(org.bukkit.entity.Illusioner illusioner, Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner internalIllusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + if(!(illusioner instanceof CraftIllusioner)) return null; + ((CraftIllusioner) illusioner).setHandle(internalIllusioner); + return internalIllusioner; + } } diff --git a/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/Illusioner.java b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/Illusioner.java index 1b4d12d..19c7414 100644 --- a/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/Illusioner.java +++ b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/Illusioner.java @@ -4,6 +4,7 @@ import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; import com.willfp.illusioner.nms.api.IllusionerWrapper; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; +import org.bukkit.craftbukkit.v1_16_R2.entity.CraftIllusioner; public class Illusioner implements IllusionerWrapper { @Override @@ -12,4 +13,12 @@ public class Illusioner implements IllusionerWrapper { ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); return illusioner; } + + @Override + public EntityIllusionerWrapper adapt(org.bukkit.entity.Illusioner illusioner, Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner internalIllusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + if(!(illusioner instanceof CraftIllusioner)) return null; + ((CraftIllusioner) illusioner).setHandle(internalIllusioner); + return internalIllusioner; + } } diff --git a/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/Illusioner.java b/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/Illusioner.java index 6cc6425..6098451 100644 --- a/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/Illusioner.java +++ b/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/Illusioner.java @@ -4,6 +4,7 @@ import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; import com.willfp.illusioner.nms.api.IllusionerWrapper; import org.bukkit.Location; import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; +import org.bukkit.craftbukkit.v1_16_R3.entity.CraftIllusioner; public class Illusioner implements IllusionerWrapper { @Override @@ -12,4 +13,12 @@ public class Illusioner implements IllusionerWrapper { ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); return illusioner; } + + @Override + public EntityIllusionerWrapper adapt(org.bukkit.entity.Illusioner illusioner, Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner internalIllusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + if(!(illusioner instanceof CraftIllusioner)) return null; + ((CraftIllusioner) illusioner).setHandle(internalIllusioner); + return internalIllusioner; + } } diff --git a/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/SpawnListeners.java b/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/SpawnListeners.java index eb87e18..5ade902 100644 --- a/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/SpawnListeners.java +++ b/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/SpawnListeners.java @@ -7,9 +7,11 @@ import com.willfp.illusioner.nms.NMSIllusioner; import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.entity.Illusioner; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntitySpawnEvent; import java.util.HashSet; import java.util.Set; @@ -62,4 +64,15 @@ public class SpawnListeners implements Listener { EntityIllusionerWrapper illusioner = NMSIllusioner.spawn(event.getBlock().getLocation(), IllusionerManager.OPTIONS.getMaxHealth(), IllusionerManager.OPTIONS.getAttackDamage(), IllusionerManager.OPTIONS.getName()); illusioner.createBossbar(IllusionerPlugin.getInstance(), IllusionerManager.OPTIONS.getColor(), IllusionerManager.OPTIONS.getStyle()); } + + @EventHandler + public void onExternalSpawn(EntitySpawnEvent event) { + if(!(event.getEntity() instanceof Illusioner)) + return; + + Illusioner illusioner = (Illusioner) event.getEntity(); + EntityIllusionerWrapper internalIllusioner = NMSIllusioner.convertIllusioner(illusioner, IllusionerManager.OPTIONS.getMaxHealth(), IllusionerManager.OPTIONS.getAttackDamage(), IllusionerManager.OPTIONS.getName()); + if(internalIllusioner == null) return; + internalIllusioner.createBossbar(IllusionerPlugin.getInstance(), IllusionerManager.OPTIONS.getColor(), IllusionerManager.OPTIONS.getStyle()); + } } diff --git a/Plugin/src/main/java/com/willfp/illusioner/nms/NMSIllusioner.java b/Plugin/src/main/java/com/willfp/illusioner/nms/NMSIllusioner.java index fb81cfd..819f5bd 100644 --- a/Plugin/src/main/java/com/willfp/illusioner/nms/NMSIllusioner.java +++ b/Plugin/src/main/java/com/willfp/illusioner/nms/NMSIllusioner.java @@ -4,6 +4,7 @@ import com.willfp.illusioner.IllusionerPlugin; import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; import com.willfp.illusioner.nms.api.IllusionerWrapper; import org.bukkit.Location; +import org.bukkit.entity.Illusioner; import org.jetbrains.annotations.ApiStatus; /** @@ -39,4 +40,18 @@ public class NMSIllusioner { assert illusionerWrapper != null; return illusionerWrapper.spawn(location, maxHealth, attackDamage, name); } + + /** + * Adapt an existing Illusioner into an Illusioner boss + * + * @param illusioner The Illusioner to adapt + * @param maxHealth The max health for the illusioner to have + * @param attackDamage The attack damage for the illusioner + * @param name The name of the Illusioner + * @return The illusioner + */ + public static EntityIllusionerWrapper convertIllusioner(Illusioner illusioner, double maxHealth, double attackDamage, String name) { + assert illusionerWrapper != null; + return illusionerWrapper.adapt(illusioner, illusioner.getLocation(), maxHealth, attackDamage, name); + } }