From 9a78535f8082e4bf6430bad69bf80143210ffaca Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 14 Dec 2015 12:27:12 +0100 Subject: [PATCH] Gamemode mixin --- .../command/type/sender/TypeSenderEntity.java | 7 ++++ .../command/type/sender/TypeSenderId.java | 8 ++++ .../type/sender/TypeSenderIdAbstract.java | 13 ++++++- .../massivecore/mixin/GamemodeMixin.java | 9 +++++ .../mixin/GamemodeMixinAbstract.java | 6 +++ .../mixin/GamemodeMixinDefault.java | 39 +++++++++++++++++++ .../massivecraft/massivecore/mixin/Mixin.java | 19 +++++++++ 7 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/com/massivecraft/massivecore/mixin/GamemodeMixin.java create mode 100644 src/com/massivecraft/massivecore/mixin/GamemodeMixinAbstract.java create mode 100644 src/com/massivecraft/massivecore/mixin/GamemodeMixinDefault.java diff --git a/src/com/massivecraft/massivecore/command/type/sender/TypeSenderEntity.java b/src/com/massivecraft/massivecore/command/type/sender/TypeSenderEntity.java index a1e210af..6879579d 100644 --- a/src/com/massivecraft/massivecore/command/type/sender/TypeSenderEntity.java +++ b/src/com/massivecraft/massivecore/command/type/sender/TypeSenderEntity.java @@ -29,6 +29,12 @@ public class TypeSenderEntity> extends TypeSenderIdAbs this.coll = coll; } + private TypeSenderEntity(SenderColl coll, SenderType type) + { + super(coll, type); + this.coll = coll; + } + private TypeSenderEntity(SenderColl coll) { super(coll); @@ -41,6 +47,7 @@ public class TypeSenderEntity> extends TypeSenderIdAbs public static > TypeSenderEntity get(SenderColl coll, SenderPresence presence, SenderType type) { return new TypeSenderEntity(coll, presence, type); } public static > TypeSenderEntity get(SenderColl coll, SenderPresence presence) { return new TypeSenderEntity(coll, presence); } + public static > TypeSenderEntity get(SenderColl coll, SenderType type) { return new TypeSenderEntity(coll, type); } public static > TypeSenderEntity get(SenderColl coll) { return new TypeSenderEntity(coll); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/type/sender/TypeSenderId.java b/src/com/massivecraft/massivecore/command/type/sender/TypeSenderId.java index a81126ad..63c1be47 100644 --- a/src/com/massivecraft/massivecore/command/type/sender/TypeSenderId.java +++ b/src/com/massivecraft/massivecore/command/type/sender/TypeSenderId.java @@ -21,6 +21,13 @@ public class TypeSenderId extends TypeSenderIdAbstract super(source, presence); } + + private TypeSenderId(SenderIdSource source, SenderType type) + { + super(source, type); + } + + private TypeSenderId(SenderIdSource source) { super(source); @@ -39,6 +46,7 @@ public class TypeSenderId extends TypeSenderIdAbstract public static TypeSenderId get(SenderIdSource source, SenderPresence presence, SenderType type) { return new TypeSenderId(source, presence, type); } public static TypeSenderId get(SenderIdSource source, SenderPresence presence) { return new TypeSenderId(source, presence); } + public static TypeSenderId get(SenderIdSource source, SenderType type) { return new TypeSenderId(source, type); } public static TypeSenderId get(SenderIdSource source) { return new TypeSenderId(source); } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/command/type/sender/TypeSenderIdAbstract.java b/src/com/massivecraft/massivecore/command/type/sender/TypeSenderIdAbstract.java index 861812ab..dc9e7a09 100644 --- a/src/com/massivecraft/massivecore/command/type/sender/TypeSenderIdAbstract.java +++ b/src/com/massivecraft/massivecore/command/type/sender/TypeSenderIdAbstract.java @@ -15,6 +15,7 @@ import com.massivecraft.massivecore.mixin.Mixin; import com.massivecraft.massivecore.store.SenderIdSource; import com.massivecraft.massivecore.util.IdUtil; import com.massivecraft.massivecore.util.MUtil; +import com.massivecraft.massivecore.util.Txt; public abstract class TypeSenderIdAbstract extends TypeAbstract { @@ -46,6 +47,11 @@ public abstract class TypeSenderIdAbstract extends TypeAbstract this(source, presence, SenderType.ANY); } + public TypeSenderIdAbstract(SenderIdSource source, SenderType type) + { + this(source, SenderPresence.ANY, type); + } + public TypeSenderIdAbstract(SenderIdSource source) { this(source, SenderPresence.ANY); @@ -109,7 +115,7 @@ public abstract class TypeSenderIdAbstract extends TypeAbstract if (ret == null) { // No alternatives found - throw new MassiveException().addMsg("No %s matches \"%s\".", this.getTypeName(), arg); + throw new MassiveException().addMessage(this.getErrorMessageForArg(arg)); } // Return Ret @@ -166,6 +172,11 @@ public abstract class TypeSenderIdAbstract extends TypeAbstract // UTIL // -------------------------------------------- // + public String getErrorMessageForArg(String arg) + { + return Txt.parse("No %s matches \"%s\".", this.getTypeName(), arg); + } + public String getSenderIdFor(String arg) { // Get senderId from the arg. diff --git a/src/com/massivecraft/massivecore/mixin/GamemodeMixin.java b/src/com/massivecraft/massivecore/mixin/GamemodeMixin.java new file mode 100644 index 00000000..f0179ce9 --- /dev/null +++ b/src/com/massivecraft/massivecore/mixin/GamemodeMixin.java @@ -0,0 +1,9 @@ +package com.massivecraft.massivecore.mixin; + +import org.bukkit.GameMode; + +public interface GamemodeMixin +{ + public GameMode getGamemode(Object playerObject); + public void setGamemode(Object playerObject, GameMode gm); +} diff --git a/src/com/massivecraft/massivecore/mixin/GamemodeMixinAbstract.java b/src/com/massivecraft/massivecore/mixin/GamemodeMixinAbstract.java new file mode 100644 index 00000000..cebc016e --- /dev/null +++ b/src/com/massivecraft/massivecore/mixin/GamemodeMixinAbstract.java @@ -0,0 +1,6 @@ +package com.massivecraft.massivecore.mixin; + +public abstract class GamemodeMixinAbstract implements GamemodeMixin +{ + +} diff --git a/src/com/massivecraft/massivecore/mixin/GamemodeMixinDefault.java b/src/com/massivecraft/massivecore/mixin/GamemodeMixinDefault.java new file mode 100644 index 00000000..0035b494 --- /dev/null +++ b/src/com/massivecraft/massivecore/mixin/GamemodeMixinDefault.java @@ -0,0 +1,39 @@ +package com.massivecraft.massivecore.mixin; + +import org.bukkit.GameMode; +import org.bukkit.entity.Player; + +import com.massivecraft.massivecore.util.IdUtil; + +public class GamemodeMixinDefault extends GamemodeMixinAbstract +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static GamemodeMixinDefault i = new GamemodeMixinDefault(); + public static GamemodeMixinDefault get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public GameMode getGamemode(Object playerObject) + { + Player player = IdUtil.getPlayer(playerObject); + if (player == null) return null; + + return player.getGameMode(); + } + + @Override + public void setGamemode(Object playerObject, GameMode gm) + { + Player player = IdUtil.getPlayer(playerObject); + if (player == null) return; + + player.setGameMode(gm); + } + +} diff --git a/src/com/massivecraft/massivecore/mixin/Mixin.java b/src/com/massivecraft/massivecore/mixin/Mixin.java index 4d46f97f..4b78899a 100644 --- a/src/com/massivecraft/massivecore/mixin/Mixin.java +++ b/src/com/massivecraft/massivecore/mixin/Mixin.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.List; import org.bukkit.ChatColor; +import org.bukkit.GameMode; import org.bukkit.command.CommandSender; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerTeleportEvent; @@ -41,6 +42,10 @@ public class Mixin private static SenderPsMixin senderPsMixin = SenderPsMixinDefault.get(); public static SenderPsMixin getSenderPsMixin() { return senderPsMixin; } public static void setSenderPsMixin(SenderPsMixin val) { senderPsMixin = val; } + + private static GamemodeMixin gamemodeMixin = GamemodeMixinDefault.get(); + public static GamemodeMixin getGamemodeMixin() { return gamemodeMixin; } + public static void setGamemodeMixin(GamemodeMixin val) { gamemodeMixin = val; } private static PlayedMixin playedMixin = PlayedMixinDefault.get(); public static PlayedMixin getPlayedMixin() { return playedMixin; } @@ -184,6 +189,20 @@ public class Mixin getSenderPsMixin().setSenderPs(senderObject, ps); } + // -------------------------------------------- // + // STATIC EXPOSE: GAMEMODE + // -------------------------------------------- // + + public static GameMode getGamemode(Object playerObject) + { + return getGamemodeMixin().getGamemode(playerObject); + } + + public static void setGamemode(Object playerObject, GameMode gm) + { + getGamemodeMixin().setGamemode(playerObject, gm); + } + // -------------------------------------------- // // STATIC EXPOSE: PLAYED // -------------------------------------------- //