diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 79588fc26..467e23aad 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -3422,7 +3422,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "wither (--invulnerable [true|false]) (--arrow-shield [true|false])", + usage = "wither (--invulnerable [true|false]) (--invulnerable-ticks [ticks]) (--arrow-shield [true|false])", desc = "", modifiers = { "wither" }, min = 1, @@ -3431,11 +3431,15 @@ public class NPCCommands { permission = "citizens.npc.wither") @Requirements(selected = true, ownership = true, types = { EntityType.WITHER }) public void wither(CommandContext args, CommandSender sender, NPC npc, @Flag("invulnerable") Boolean invulnerable, - @Flag("arrow-shield") Boolean arrows) throws CommandException { + @Flag("arrow-shield") Boolean arrows, @Flag("invulnerable-ticks") Integer invulnerableTicks) + throws CommandException { WitherTrait trait = npc.getOrAddTrait(WitherTrait.class); if (invulnerable != null) { trait.setInvulnerable(invulnerable); } + if (invulnerableTicks != null) { + trait.setInvulnerableTicks(invulnerableTicks); + } if (arrows != null) { trait.setBlocksArrows(arrows); } diff --git a/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java b/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java index 2f8556062..83624e1d9 100644 --- a/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/WitherTrait.java @@ -18,6 +18,8 @@ public class WitherTrait extends Trait { private Boolean arrowShield; @Persist("charged") private Boolean invulnerable; + @Persist("invulnerableticks") + private Integer invulnerableTicks; public WitherTrait() { super("withertrait"); @@ -27,8 +29,16 @@ public class WitherTrait extends Trait { return arrowShield; } + public Integer getInvulnerableTicks() { + return invulnerableTicks; + } + public boolean isInvulnerable() { - return invulnerable == null ? npc.isProtected() : invulnerable; + if (invulnerable != null) + return invulnerable; + if (invulnerableTicks != null) + return invulnerableTicks > 0; + return npc.isProtected(); } @Override @@ -36,7 +46,13 @@ public class WitherTrait extends Trait { if (!(npc.getEntity() instanceof Wither)) return; Wither wither = (Wither) npc.getEntity(); - NMS.setWitherInvulnerable(wither, invulnerable == null ? npc.isProtected() : invulnerable); + if (invulnerable != null) { + NMS.setWitherInvulnerableTicks(wither, invulnerable ? 20 : 0); + } else if (invulnerableTicks != null) { + NMS.setWitherInvulnerableTicks(wither, invulnerableTicks); + } else { + NMS.setWitherInvulnerableTicks(wither, npc.isProtected() ? 20 : 0); + } if (arrowShield != null) { npc.data().set("wither-arrow-shield", arrowShield); } else { @@ -51,4 +67,8 @@ public class WitherTrait extends Trait { public void setInvulnerable(boolean invulnerable) { this.invulnerable = invulnerable; } + + public void setInvulnerableTicks(int ticks) { + this.invulnerableTicks = ticks; + } } diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 30b5104f0..d3bc72562 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -914,8 +914,8 @@ public class NMS { BRIDGE.setWardenPose(entity, pose); } - public static void setWitherInvulnerable(Wither wither, boolean charged) { - BRIDGE.setWitherCharged(wither, charged); + public static void setWitherInvulnerableTicks(Wither wither, int ticks) { + BRIDGE.setWitherInvulnerableTicks(wither, ticks); } public static boolean shouldJump(org.bukkit.entity.Entity entity) { diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index 70a072c13..608dcbbf0 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -271,7 +271,9 @@ public interface NMSBridge { public default void setWardenPose(Entity entity, Object pose) { } - public void setWitherCharged(Wither wither, boolean charged); + public default void setWitherInvulnerableTicks(Wither wither, int ticks) { + wither.setInvulnerabilityTicks(ticks); + } public boolean shouldJump(Entity entity); diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java index b61a93c90..89e99a73e 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/util/NMSImpl.java @@ -1334,9 +1334,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.g(charged ? 20 : 0); + handle.g(ticks); } @Override diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java index 189fef815..ea190c7b1 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/util/NMSImpl.java @@ -1387,9 +1387,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.g(charged ? 20 : 0); + handle.g(ticks); } @Override diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java index 2c368c194..8c8d78366 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/util/NMSImpl.java @@ -1394,9 +1394,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.g(charged ? 20 : 0); + handle.g(ticks); } @Override diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index e770679b1..a9a67483f 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -1431,9 +1431,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.d(charged ? 20 : 0); + handle.d(ticks); } @Override diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index 52030fbe1..d3333acfe 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -1490,9 +1490,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.r(charged ? 20 : 0); + handle.r(ticks); } @Override diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index a73bb3fb3..cd236eb5d 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -1539,9 +1539,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.s(charged ? 20 : 0); + handle.s(ticks); } @Override diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index ec52cc932..f7a842ab8 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -1563,9 +1563,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.setInvul(charged ? 20 : 0); + handle.setInvul(ticks); } @Override diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java index ccc48007f..bd7bc1266 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java @@ -1559,9 +1559,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { WitherBoss handle = ((CraftWither) wither).getHandle(); - handle.setInvulnerableTicks(charged ? 20 : 0); + handle.setInvulnerableTicks(ticks); } @Override diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java index 5b1958c01..6bee365f5 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java @@ -1567,9 +1567,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { WitherBoss handle = ((CraftWither) wither).getHandle(); - handle.setInvulnerableTicks(charged ? 20 : 0); + handle.setInvulnerableTicks(ticks); } @Override diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java index 37b00d17e..b5a4a3bb0 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/util/NMSImpl.java @@ -1759,9 +1759,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { WitherBoss handle = ((CraftWither) wither).getHandle(); - handle.setInvulnerableTicks(charged ? 20 : 0); + handle.setInvulnerableTicks(ticks); } @Override diff --git a/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java b/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java index 96faad738..bd8703458 100644 --- a/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java +++ b/v1_20_R3/src/main/java/net/citizensnpcs/nms/v1_20_R3/util/NMSImpl.java @@ -34,7 +34,6 @@ import org.bukkit.craftbukkit.v1_20_R3.boss.CraftBossBar; import org.bukkit.craftbukkit.v1_20_R3.command.CraftBlockCommandSender; import org.bukkit.craftbukkit.v1_20_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_20_R3.entity.CraftWither; import org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory; import org.bukkit.craftbukkit.v1_20_R3.event.CraftPortalEvent; import org.bukkit.craftbukkit.v1_20_R3.inventory.CraftInventoryAnvil; @@ -44,7 +43,6 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.FishHook; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; -import org.bukkit.entity.Wither; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; @@ -1722,12 +1720,6 @@ public class NMSImpl implements NMSBridge { } } - @Override - public void setWitherCharged(Wither wither, boolean charged) { - WitherBoss handle = ((CraftWither) wither).getHandle(); - handle.setInvulnerableTicks(charged ? 20 : 0); - } - @Override public boolean shouldJump(org.bukkit.entity.Entity entity) { if (JUMP_FIELD == null || !(entity instanceof org.bukkit.entity.LivingEntity)) diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java index 09bd89501..3fa8f4723 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/util/NMSImpl.java @@ -1258,9 +1258,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setWitherCharged(Wither wither, boolean charged) { + public void setWitherInvulnerableTicks(Wither wither, int ticks) { EntityWither handle = ((CraftWither) wither).getHandle(); - handle.r(charged ? 20 : 0); + handle.r(ticks); } @Override