Skip to content

Commit

Permalink
Add /npc wither --invulnerableticks command
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Mar 31, 2024
1 parent 8cf37b0 commit 9729e35
Show file tree
Hide file tree
Showing 16 changed files with 55 additions and 37 deletions.
8 changes: 6 additions & 2 deletions main/src/main/java/net/citizensnpcs/commands/NPCCommands.java
Expand Up @@ -3422,7 +3422,7 @@ public void wander(CommandContext args, CommandSender sender, NPC npc) throws Co

@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,
Expand All @@ -3431,11 +3431,15 @@ public void wander(CommandContext args, CommandSender sender, NPC npc) throws Co
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);
}
Expand Down
24 changes: 22 additions & 2 deletions main/src/main/java/net/citizensnpcs/trait/WitherTrait.java
Expand Up @@ -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");
Expand All @@ -27,16 +29,30 @@ public Boolean blocksArrows() {
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
public void run() {
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 {
Expand All @@ -51,4 +67,8 @@ public void setBlocksArrows(boolean arrowShield) {
public void setInvulnerable(boolean invulnerable) {
this.invulnerable = invulnerable;
}

public void setInvulnerableTicks(int ticks) {
this.invulnerableTicks = ticks;
}
}
4 changes: 2 additions & 2 deletions main/src/main/java/net/citizensnpcs/util/NMS.java
Expand Up @@ -914,8 +914,8 @@ public static void setWardenPose(Entity entity, Object pose) {
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) {
Expand Down
4 changes: 3 additions & 1 deletion main/src/main/java/net/citizensnpcs/util/NMSBridge.java
Expand Up @@ -271,7 +271,9 @@ public default void setTeamNameTagVisible(Team team, boolean visible) {
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);

Expand Down
Expand Up @@ -1334,9 +1334,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1387,9 +1387,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1394,9 +1394,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1431,9 +1431,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1490,9 +1490,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1539,9 +1539,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1563,9 +1563,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1559,9 +1559,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1567,9 +1567,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down
Expand Up @@ -1759,9 +1759,9 @@ public void setWardenPose(org.bukkit.entity.Entity entity, Object pose) {
}

@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
Expand Down
Expand Up @@ -34,7 +34,6 @@
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;
Expand All @@ -44,7 +43,6 @@
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;
Expand Down Expand Up @@ -1722,12 +1720,6 @@ public void setWardenPose(org.bukkit.entity.Entity entity, Object pose) {
}
}

@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))
Expand Down
Expand Up @@ -1258,9 +1258,9 @@ public void setVerticalMovement(org.bukkit.entity.Entity bukkitEntity, double d)
}

@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
Expand Down

0 comments on commit 9729e35

Please sign in to comment.