From 20549781ed3e0c8d1cc65523320dc7f0e2488ac0 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 8 Dec 2020 22:03:00 +0000 Subject: [PATCH] Added support for 1.15 --- .../illusioner/v1_15_R1/EntityIllusioner.java | 66 +++++++++++++++++++ .../illusioner/v1_15_R1/Illusioner.java | 15 +++++ .../illusioner/v1_16_R1/EntityIllusioner.java | 66 +++++++++++++++++++ .../illusioner/v1_16_R1/Illusioner.java | 15 +++++ .../illusioner/v1_16_R2/EntityIllusioner.java | 66 +++++++++++++++++++ .../illusioner/v1_16_R2/Illusioner.java | 15 +++++ 6 files changed, 243 insertions(+) create mode 100644 NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java create mode 100644 NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/Illusioner.java create mode 100644 NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java create mode 100644 NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/Illusioner.java create mode 100644 NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java create mode 100644 NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/Illusioner.java diff --git a/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java new file mode 100644 index 0000000..2f4a6c8 --- /dev/null +++ b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java @@ -0,0 +1,66 @@ +package com.willfp.illusioner.v1_15_R1; + +import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; +import net.minecraft.server.v1_15_R1.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.attribute.Attribute; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarFlag; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; +import org.bukkit.entity.LivingEntity; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class EntityIllusioner extends EntityIllagerIllusioner implements EntityIllusionerWrapper { + private final String displayName; + + public EntityIllusioner(Location location, double maxHealth, double attackDamage, String name) { + super(EntityTypes.ILLUSIONER, ((CraftWorld) location.getWorld()).getHandle()); + this.displayName = name; + + this.setPosition(location.getX(), location.getY(), location.getZ()); + + this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(maxHealth); + this.setHealth((float) maxHealth); + + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(attackDamage); + + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(1, new EntityIllagerWizard.b()); + this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false)); + this.goalSelector.a(2, new PathfinderGoalBowShoot<>(this, 1.0D, 20, 15.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(6, new PathfinderGoalBowShoot(this, 0.5D, 20, 15.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); + this.goalSelector.a(9, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 3.0F, 1.0F)); + this.goalSelector.a(10, new PathfinderGoalLookAtPlayer(this, EntityInsentient.class, 8.0F)); + this.targetSelector.a(1, (new PathfinderGoalHurtByTarget(this, new Class[]{EntityRaider.class})).a(new Class[0])); + this.targetSelector.a(2, (new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)).a(300)); + this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget(this, EntityVillagerAbstract.class, false)).a(300)); + this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget(this, EntityIronGolem.class, false)).a(300)); + } + + @Override + public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); + LivingEntity entity = (LivingEntity) this.getBukkitEntity(); + + new BukkitRunnable() { + @Override + public void run() { + if(!entity.isDead()) { + bossBar.setProgress(entity.getHealth() / entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + } else { + bossBar.getPlayers().forEach(bossBar::removePlayer); + bossBar.setVisible(false); + this.cancel(); + } + } + }.runTaskTimer(plugin, 0, 1); + } +} 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 new file mode 100644 index 0000000..4d92e2f --- /dev/null +++ b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/Illusioner.java @@ -0,0 +1,15 @@ +package com.willfp.illusioner.v1_15_R1; + +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; + +public class Illusioner implements IllusionerWrapper { + @Override + public EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner illusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); + return illusioner; + } +} diff --git a/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java new file mode 100644 index 0000000..eaa78f3 --- /dev/null +++ b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java @@ -0,0 +1,66 @@ +package com.willfp.illusioner.v1_16_R1; + +import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; +import net.minecraft.server.v1_16_R1.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.attribute.Attribute; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarFlag; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; +import org.bukkit.entity.LivingEntity; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class EntityIllusioner extends EntityIllagerIllusioner implements EntityIllusionerWrapper { + private final String displayName; + + public EntityIllusioner(Location location, double maxHealth, double attackDamage, String name) { + super(EntityTypes.ILLUSIONER, ((CraftWorld) location.getWorld()).getHandle()); + this.displayName = name; + + this.setPosition(location.getX(), location.getY(), location.getZ()); + + this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(maxHealth); + this.setHealth((float) maxHealth); + + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(attackDamage); + + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(1, new EntityIllagerWizard.b()); + this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false)); + this.goalSelector.a(2, new PathfinderGoalBowShoot<>(this, 1.0D, 20, 15.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(6, new PathfinderGoalBowShoot(this, 0.5D, 20, 15.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); + this.goalSelector.a(9, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 3.0F, 1.0F)); + this.goalSelector.a(10, new PathfinderGoalLookAtPlayer(this, EntityInsentient.class, 8.0F)); + this.targetSelector.a(1, (new PathfinderGoalHurtByTarget(this, new Class[]{EntityRaider.class})).a(new Class[0])); + this.targetSelector.a(2, (new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)).a(300)); + this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget(this, EntityVillagerAbstract.class, false)).a(300)); + this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget(this, EntityIronGolem.class, false)).a(300)); + } + + @Override + public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); + LivingEntity entity = (LivingEntity) this.getBukkitEntity(); + + new BukkitRunnable() { + @Override + public void run() { + if(!entity.isDead()) { + bossBar.setProgress(entity.getHealth() / entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + } else { + bossBar.getPlayers().forEach(bossBar::removePlayer); + bossBar.setVisible(false); + this.cancel(); + } + } + }.runTaskTimer(plugin, 0, 1); + } +} 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 new file mode 100644 index 0000000..da0fb37 --- /dev/null +++ b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/Illusioner.java @@ -0,0 +1,15 @@ +package com.willfp.illusioner.v1_16_R1; + +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; + +public class Illusioner implements IllusionerWrapper { + @Override + public EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner illusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); + return illusioner; + } +} diff --git a/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java new file mode 100644 index 0000000..38b8cff --- /dev/null +++ b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java @@ -0,0 +1,66 @@ +package com.willfp.illusioner.v1_16_R2; + +import com.willfp.illusioner.nms.api.EntityIllusionerWrapper; +import net.minecraft.server.v1_16_R2.*; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.attribute.Attribute; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarFlag; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; +import org.bukkit.entity.LivingEntity; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class EntityIllusioner extends EntityIllagerIllusioner implements EntityIllusionerWrapper { + private final String displayName; + + public EntityIllusioner(Location location, double maxHealth, double attackDamage, String name) { + super(EntityTypes.ILLUSIONER, ((CraftWorld) location.getWorld()).getHandle()); + this.displayName = name; + + this.setPosition(location.getX(), location.getY(), location.getZ()); + + this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue(maxHealth); + this.setHealth((float) maxHealth); + + this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue(attackDamage); + + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(1, new EntityIllagerWizard.b()); + this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, 1.0D, false)); + this.goalSelector.a(2, new PathfinderGoalBowShoot<>(this, 1.0D, 20, 15.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); + this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(6, new PathfinderGoalBowShoot(this, 0.5D, 20, 15.0F)); + this.goalSelector.a(8, new PathfinderGoalRandomStroll(this, 0.6D)); + this.goalSelector.a(9, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 3.0F, 1.0F)); + this.goalSelector.a(10, new PathfinderGoalLookAtPlayer(this, EntityInsentient.class, 8.0F)); + this.targetSelector.a(1, (new PathfinderGoalHurtByTarget(this, new Class[]{EntityRaider.class})).a(new Class[0])); + this.targetSelector.a(2, (new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, true)).a(300)); + this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget(this, EntityVillagerAbstract.class, false)).a(300)); + this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget(this, EntityIronGolem.class, false)).a(300)); + } + + @Override + public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); + LivingEntity entity = (LivingEntity) this.getBukkitEntity(); + + new BukkitRunnable() { + @Override + public void run() { + if(!entity.isDead()) { + bossBar.setProgress(entity.getHealth() / entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + } else { + bossBar.getPlayers().forEach(bossBar::removePlayer); + bossBar.setVisible(false); + this.cancel(); + } + } + }.runTaskTimer(plugin, 0, 1); + } +} 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 new file mode 100644 index 0000000..1b4d12d --- /dev/null +++ b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/Illusioner.java @@ -0,0 +1,15 @@ +package com.willfp.illusioner.v1_16_R2; + +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; + +public class Illusioner implements IllusionerWrapper { + @Override + public EntityIllusionerWrapper spawn(Location location, double maxHealth, double attackDamage, String name) { + EntityIllusioner illusioner = new EntityIllusioner(location, maxHealth, attackDamage, name); + ((CraftWorld) location.getWorld()).getHandle().addEntity(illusioner); + return illusioner; + } +}