Add /npc axolotl

This commit is contained in:
fullwall 2021-07-05 23:39:15 +08:00
parent 15583711b6
commit 3a50ad5d85
7 changed files with 93 additions and 2 deletions

View File

@ -0,0 +1,46 @@
package net.citizensnpcs.trait.versioned;
import org.bukkit.entity.Axolotl;
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
@TraitName("axolotltrait")
public class AxolotlTrait extends Trait {
@Persist
private boolean playingDead = false;
@Persist
private Axolotl.Variant variant = null;
public AxolotlTrait() {
super("axolotltrait");
}
public Axolotl.Variant getVariant() {
return variant;
}
public boolean isPlayingDead() {
return playingDead;
}
@Override
public void run() {
if (npc.isSpawned() && npc.getEntity() instanceof Axolotl) {
Axolotl axolotl = (Axolotl) npc.getEntity();
if (variant != null) {
axolotl.setVariant(variant);
}
axolotl.setPlayingDead(playingDead);
}
}
public void setPlayingDead(boolean playingDead) {
this.playingDead = playingDead;
}
public void setVariant(Axolotl.Variant variant) {
this.variant = variant;
}
}

View File

@ -18,6 +18,9 @@ public class Messages {
public static final String ANIMATION_ADDED = "citizens.editors.waypoints.triggers.animation.added";
public static final String ANIMATION_TRIGGER_PROMPT = "citizens.editors.waypoints.triggers.animation.prompt";
public static final String AVAILABLE_WAYPOINT_PROVIDERS = "citizens.waypoints.available-providers-header";
public static final String AXOLOTL_NOT_PLAYING_DEAD = "citizens.commands.npc.axolotl.playing-dead-stopped";
public static final String AXOLOTL_PLAYING_DEAD = "citizens.commands.npc.axolotl.playing-dead";
public static final String AXOLOTL_VARIANT_SET = "citizens.commands.npc.axolotl.variant-set";
public static final String BEE_ANGER_SET = "citizens.commands.npc.bee.anger-set";
public static final String BEE_HAS_NECTAR = "citizens.commands.npc.bee.has-nectar";
public static final String BEE_NO_NECTAR = "citizens.commands.npc.bee.no-nectar";
@ -162,6 +165,7 @@ public class Messages {
public static final String INVALID_AGE = "citizens.commands.npc.age.invalid-age";
public static final String INVALID_ANCHOR_NAME = "citizens.commands.npc.anchor.invalid-name";
public static final String INVALID_ANIMATION = "citizens.editors.waypoints.triggers.animation.invalid-animation";
public static final String INVALID_AXOLOTL_VARIANT = "citizens.commands.npc.axolotl.invalid-variant";
public static final String INVALID_BEE_ANGER = "citizens.commands.npc.bee.invalid-anger";
public static final String INVALID_CAT_COLLAR_COLOR = "citizens.commands.npc.cat.invalid-collar-color";
public static final String INVALID_CAT_TYPE = "citizens.commands.npc.cat.invalid-type";

View File

@ -24,6 +24,10 @@ citizens.commands.npc.anchor.already-exists=The anchor [[{0}]] already exists.
citizens.commands.npc.anchor.invalid-name=Invalid anchor name.
citizens.commands.npc.anchor.missing=The anchor [[{1}]] does not exist.
citizens.commands.npc.anchor.removed=Anchor removed.
citizens.commands.npc.axolotl.invalid-variant=Invalid variant. Valid variants are [[{0}]].
citizens.commands.npc.axolotl.variant-set=Variant set to [[{0}]].
citizens.commands.npc.axolotl.playing-dead=[[{0}]] now playing dead.
citizens.commands.npc.axolotl.playing-dead-stopped=[[{0}]] no longer playing dead.
citizens.commands.npc.bee.anger-set=Anger set to [[{0}]].
citizens.commands.npc.bee.has-nectar=[[{0}]] has nectar.
citizens.commands.npc.bee.no-nectar=[[{0}]] has no nectar.

View File

@ -6,6 +6,7 @@ import org.bukkit.DyeColor;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarFlag;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Axolotl;
import org.bukkit.entity.Cat;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fox;
@ -30,6 +31,7 @@ import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.util.Colorizer;
import net.citizensnpcs.api.util.Messaging;
import net.citizensnpcs.trait.VillagerProfession;
import net.citizensnpcs.trait.versioned.AxolotlTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
@ -49,6 +51,40 @@ import net.citizensnpcs.util.Messages;
import net.citizensnpcs.util.Util;
public class Commands {
@Command(
aliases = { "npc" },
usage = "axolotl (-d) (--variant variant)",
desc = "Sets axolotl modifiers",
modifiers = { "axolotl" },
min = 1,
max = 1,
flags = "d",
permission = "citizens.npc.axolotl")
@Requirements(selected = true, ownership = true, types = EntityType.AXOLOTL)
public void axolotl(CommandContext args, CommandSender sender, NPC npc) throws CommandException {
AxolotlTrait trait = npc.getOrAddTrait(AxolotlTrait.class);
String output = "";
if (args.hasValueFlag("variant")) {
Axolotl.Variant variant = Util.matchEnum(Axolotl.Variant.values(), args.getFlag("variant"));
if (variant == null) {
throw new CommandException(Messages.INVALID_AXOLOTL_VARIANT,
Util.listValuesPretty(Axolotl.Variant.values()));
}
trait.setVariant(variant);
output += ' ' + Messaging.tr(Messages.AXOLOTL_VARIANT_SET, args.getFlag("variant"));
}
if (args.hasFlag('d')) {
trait.setPlayingDead(!trait.isPlayingDead());
output += ' ' + (trait.isPlayingDead() ? Messaging.tr(Messages.AXOLOTL_PLAYING_DEAD, npc.getName())
: Messaging.tr(Messages.AXOLOTL_NOT_PLAYING_DEAD, npc.getName()));
}
if (!output.isEmpty()) {
Messaging.send(sender, output.trim());
} else {
throw new CommandUsageException();
}
}
@Command(
aliases = { "npc" },
usage = "bee (-s/-n) --anger anger",

View File

@ -189,6 +189,7 @@ import net.citizensnpcs.npc.ai.MCNavigationStrategy.MCNavigator;
import net.citizensnpcs.npc.ai.MCTargetStrategy.TargetNavigator;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.npc.skin.SkinnableEntity;
import net.citizensnpcs.trait.versioned.AxolotlTrait;
import net.citizensnpcs.trait.versioned.BeeTrait;
import net.citizensnpcs.trait.versioned.BossBarTrait;
import net.citizensnpcs.trait.versioned.CatTrait;
@ -731,6 +732,7 @@ public class NMSImpl implements NMSBridge {
@Override
public void load(CommandManager manager) {
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(AxolotlTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BeeTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(BossBarTrait.class));
CitizensAPI.getTraitFactory().registerTrait(TraitInfo.create(CatTrait.class));

View File

@ -527,7 +527,7 @@ public class PlayerNavigation extends PathNavigation {
if (isDone())
return;
Vec3 var0 = this.path.getNextEntityPos(this.mob);
BlockPos var1 = new BlockPos(var0);
BlockPos var1 = new BlockPos(var0);
this.mob.getMoveControl().setWantedPosition(var0.x, this.level.getBlockState(var1.down()).isAir() ? var0.y
: WalkNodeEvaluator.getFloorLevel(this.level, var1), var0.z, this.speedModifier);
}

View File

@ -156,5 +156,4 @@ public class PlayerPathfinder extends PathFinder {
}
return new Path(var3, var1, var2);
}
}