diff --git a/java/src/game/command/Command.java b/java/src/game/command/Command.java index 76c80fa..cfb029e 100644 --- a/java/src/game/command/Command.java +++ b/java/src/game/command/Command.java @@ -142,6 +142,10 @@ public abstract class Command implements Executable { return this.addEnum(name, null, clazz, values); } + protected Command addEnum(String name, char shortName, T def, Class clazz, T ... values) { + return this.addParameter(shortName, new EnumParser(name, clazz, def, values)); + } + protected Command addTag(String name) { return this.addParameter(new TagParser(name, null)); } diff --git a/java/src/game/command/CommandEnvironment.java b/java/src/game/command/CommandEnvironment.java index 8b2a691..458a2c2 100644 --- a/java/src/game/command/CommandEnvironment.java +++ b/java/src/game/command/CommandEnvironment.java @@ -252,6 +252,8 @@ public class CommandEnvironment { this.registerExecutable(new CommandTime()); this.registerExecutable(new CommandRemove()); this.registerExecutable(new CommandWeather()); + this.registerExecutable(new CommandKick()); + this.registerExecutable(new CommandMessage()); this.registerExecutable(new CommandHelp(this)); } diff --git a/java/src/game/command/commands/CommandKick.java b/java/src/game/command/commands/CommandKick.java new file mode 100644 index 0000000..579d21a --- /dev/null +++ b/java/src/game/command/commands/CommandKick.java @@ -0,0 +1,28 @@ +package game.command.commands; + +import game.command.CommandEnvironment; +import game.command.RunException; +import game.command.Command; +import game.command.Executor; +import game.network.Player; + +public class CommandKick extends Command { + public CommandKick() { + super("kick"); + + this.addPlayer("player", false); + } + + public void exec(CommandEnvironment env, Executor exec, Player player) { + if(!(exec instanceof Player)) + throw new RunException("Dieser Befehl kann nur von Spielern ausgeführt werden"); + else if(player == exec) + throw new RunException("Du kannst nicht dich nicht selbst vom Server werfen"); + else if(player.isLocal()) + throw new RunException("%s ist der Host-Spieler", player.getUser()); + else if(player.getAdmin()) + throw new RunException("%s ist ein Admin", player.getUser()); + player.disconnect(); + exec.logConsole("%s wurde vom Server geworfen", player.getUser()); + } +} diff --git a/java/src/game/command/commands/CommandMessage.java b/java/src/game/command/commands/CommandMessage.java new file mode 100644 index 0000000..ecd6702 --- /dev/null +++ b/java/src/game/command/commands/CommandMessage.java @@ -0,0 +1,20 @@ +package game.command.commands; + +import game.command.CommandEnvironment; +import game.command.Command; +import game.command.Executor; +import game.packet.SPacketMessage; + +public class CommandMessage extends Command { + public CommandMessage() { + super("message"); + + this.addString("message", false); + + this.addEnum("type", 't', SPacketMessage.Type.CHAT, SPacketMessage.Type.class, SPacketMessage.Type.values()); + } + + public void exec(CommandEnvironment env, Executor exec, String message, SPacketMessage.Type type) { + env.getServer().sendPacket(new SPacketMessage(message, type)); + } +} diff --git a/java/src/game/network/Player.java b/java/src/game/network/Player.java index 38c67ce..8200a16 100755 --- a/java/src/game/network/Player.java +++ b/java/src/game/network/Player.java @@ -1671,6 +1671,16 @@ public class Player extends NetHandler implements ICrafting, Executor line); return true; } + + private boolean sendEmote(String line) { + if(!line.startsWith("*") || line.length() < 2) + return false; + String str = line.substring(1).trim(); + if(str.isEmpty()) + return false; + this.server.sendPacket(new SPacketMessage(String.format(TextColor.LGRAY + "* %s %s", this.entity.getColoredName(TextColor.LGRAY), str), Type.CHAT)); + return true; + } private boolean setVar(String line) { if(!this.isAdmin()) @@ -1969,7 +1979,7 @@ public class Player extends NetHandler implements ICrafting, Executor break; case CHAT: - if(!this.sendPlayer(msg)) + if(!this.sendPlayer(msg) && !this.sendEmote(msg)) this.server.sendPacket(new SPacketMessage(String.format("%s %s", this.entity.getColoredName(TextColor.LGRAY), msg), Type.CHAT)); break;