From 3ca12de138b212258e97f332d723550d178c77a1 Mon Sep 17 00:00:00 2001 From: fullwall Date: Mon, 12 Nov 2018 14:53:52 +0800 Subject: [PATCH] Add GameModeTrait --- .../citizensnpcs/commands/NPCCommands.java | 3 +- .../npc/CitizensTraitFactory.java | 2 ++ .../net/citizensnpcs/trait/GameModeTrait.java | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index e62c71949..49c5f4f44 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -75,6 +75,7 @@ import net.citizensnpcs.trait.Controllable; import net.citizensnpcs.trait.CurrentLocation; import net.citizensnpcs.trait.FollowTrait; +import net.citizensnpcs.trait.GameModeTrait; import net.citizensnpcs.trait.Gravity; import net.citizensnpcs.trait.HorseModifiers; import net.citizensnpcs.trait.LookClose; @@ -564,7 +565,7 @@ public void gamemode(CommandContext args, CommandSender sender, NPC npc) { Messaging.sendErrorTr(sender, Messages.GAMEMODE_INVALID, args.getString(1)); return; } - player.setGameMode(mode); + npc.getTrait(GameModeTrait.class).setGameMode(mode); Messaging.sendTr(sender, Messages.GAMEMODE_SET, mode.name().toLowerCase()); } diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java index 29ce1d21d..54ae3e843 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java @@ -25,6 +25,7 @@ import net.citizensnpcs.trait.Controllable; import net.citizensnpcs.trait.CurrentLocation; import net.citizensnpcs.trait.FollowTrait; +import net.citizensnpcs.trait.GameModeTrait; import net.citizensnpcs.trait.Gravity; import net.citizensnpcs.trait.HorseModifiers; import net.citizensnpcs.trait.LookClose; @@ -57,6 +58,7 @@ public CitizensTraitFactory() { registerTrait(TraitInfo.create(CurrentLocation.class)); registerTrait(TraitInfo.create(Equipment.class)); registerTrait(TraitInfo.create(FollowTrait.class)); + registerTrait(TraitInfo.create(GameModeTrait.class)); registerTrait(TraitInfo.create(Gravity.class)); registerTrait(TraitInfo.create(HorseModifiers.class)); registerTrait(TraitInfo.create(Inventory.class)); diff --git a/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java b/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java new file mode 100644 index 000000000..cf83b9a15 --- /dev/null +++ b/main/src/main/java/net/citizensnpcs/trait/GameModeTrait.java @@ -0,0 +1,29 @@ +package net.citizensnpcs.trait; + +import org.bukkit.GameMode; +import org.bukkit.entity.Player; + +import net.citizensnpcs.api.persistence.Persist; +import net.citizensnpcs.api.trait.Trait; +import net.citizensnpcs.api.trait.TraitName; + +@TraitName("gamemodetrait") +public class GameModeTrait extends Trait { + @Persist + private GameMode mode; + + public GameModeTrait() { + super("gamemodetrait"); + } + + @Override + public void run() { + if (npc.isSpawned() && npc.getEntity() instanceof Player && mode != null) { + ((Player) npc.getEntity()).setGameMode(mode); + } + } + + public void setGameMode(GameMode mode) { + this.mode = mode; + } +}