Switch to using JCommander for the params/arguments system.

This system is very complex and we can make it as complex or as simple
as we want. This will save us time when we want to parse commands and
since it takes a while to write the code to parse the commands, this way
provides a lot more options. I'm excited for this.
This commit is contained in:
graywolf336 2013-12-18 17:26:39 -06:00
parent 6158aae5b5
commit 500c2abd51
5 changed files with 125 additions and 23 deletions

View File

@ -3,9 +3,13 @@ package com.graywolf336.jail.command.commands;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.beust.jcommander.JCommander;
import com.beust.jcommander.ParameterException;
import com.graywolf336.jail.JailManager;
import com.graywolf336.jail.command.Command;
import com.graywolf336.jail.command.CommandInfo;
import com.graywolf336.jail.command.parameters.JailParameters;
@CommandInfo(
maxArgs = -1,
@ -13,39 +17,28 @@ import com.graywolf336.jail.command.CommandInfo;
needsPlayer = false,
pattern = "jail|j",
permission = "jail.command.jail",
usage = "/jail [p:name] (t:time) (j:Jail name) (c:Cell name) (m:Muted) (r:Reason)"
usage = "/jail [-p name] (-t time) (-j JailName) (-c CellName) (-m Muted) (-r A reason for jailing)"
)
public class JailCommand implements Command {
public boolean execute(JailManager jm, CommandSender sender, String... args) {
String player = "", jail = "", cell = "", reason = "";
int time = 30;
boolean muted = false;
JailParameters params = new JailParameters();
for(String s : args) {
if(s.startsWith("p:")) {
player = s.substring(2);
}else if(s.startsWith("t:")) {
time = Integer.parseInt(s.substring(2));
}else if(s.startsWith("j:")) {
jail = s.substring(2);
}else if(s.startsWith("c:")) {
cell = s.substring(2);
}else if(s.startsWith("m:")) {
muted = Boolean.parseBoolean(s.substring(2));
}else if(s.startsWith("r:")) {
reason = s.substring(2);
}
try {
new JCommander(params, args);
}catch(ParameterException e) {
return false;
}
Player p = jm.getPlugin().getServer().getPlayer(player);
Player p = jm.getPlugin().getServer().getPlayer(params.player());
//Player is not online
if(p == null) {
sender.sendMessage(player + " is offline and will be jailed for " + time + " minutes in the jail " + jail + " and will be muted: " + muted + ".");
sender.sendMessage(params.player() + " is offline and will be jailed for " + params.time() + " minutes in the jail " + params.jail() + "in the cell " + params.cell() + " and will be muted: " + params.muted() + ".");
}else {
//Player *is* online
sender.sendMessage(player + " is offline and will be jailed for " + time + " minutes in the jail " + jail + " and will be muted: " + muted + ".");
sender.sendMessage(params.player() + " is online and will be jailed for " + params.time() + " minutes in the jail " + params.jail() + "in the cell " + params.cell() + " and will be muted: " + params.muted() + ".");
}
return true;

View File

@ -12,7 +12,7 @@ import com.graywolf336.jail.command.CommandInfo;
maxArgs = 0,
minimumArgs = 0,
needsPlayer = false,
pattern = "jaillist|jc",
pattern = "jaillist|jl",
permission = "jail.command.jaillist",
usage = "/jaillist"
)

View File

@ -0,0 +1,81 @@
package com.graywolf336.jail.command.parameters;
import java.util.ArrayList;
import java.util.List;
import com.beust.jcommander.Parameter;
/**
* Contains all the parameters from the jail command.
*
* @author graywolf336
* @version 1.0.0
* @since 3.0.0
*/
public class JailParameters {
@Parameter
private List<String> parameters = new ArrayList<String>();
@Parameter(names = { "-p", "-player", "-prisoner" }, description = "The name of the player we are jailing.")
private String player = "";
@Parameter(names = { "-t", "-time", "-length" }, description = "The length of the jailing sentence.")
private String time = "";
@Parameter(names = { "-j", "-jail", "-prison" }, description = "The jail we are sending the player to.")
private String jail = "";
@Parameter(names = { "-c", "-cell" }, description = "The cell in the jail we are sending them to.")
private String cell = "";
@Parameter(names = { "-m", "-muted" }, description = "Whether they can talk or not.", arity = 1)
private boolean muted = false;
@Parameter(names = { "-r", "-reason" }, description = "The reason this player is being jailed for.", variableArity = true)
private List<String> reason = new ArrayList<String>();
/** Returns the parameters. */
public List<String> parameters() {
return parameters;
}
/** Returns the player parameter. */
public String player() {
return player;
}
/** Returns the time parameter. */
public String time() {
return time;
}
/** Returns the jail parameter. */
public String jail() {
return jail;
}
/** Returns the cell parameter. */
public String cell() {
return cell;
}
/** Returns the muted parameter. */
public boolean muted() {
return muted;
}
/** Returns the reason compressed into one string. */
public String reason() {
String r = "";
for(String s : reason) {
if(r.isEmpty()) {
r = s;
}else {
r += " " + s;
}
}
return r;
}
}

View File

@ -0,0 +1,26 @@
package test.java.com.graywolf336.jail;
import junit.framework.Assert;
import org.junit.Test;
import com.beust.jcommander.JCommander;
import com.graywolf336.jail.command.parameters.JailParameters;
public class TestCommandParams {
@Test
public void TestJailCommand() {
JailParameters jail = new JailParameters();
//"/jail [-p name] (-t time) (-j JailName) (-c CellName) (-m Muted) (-r A reason for jailing)"
String[] params = { "-p", "graywolf336", "-t", "30", "-j", "den", "-c", "cell_01", "-m", "true", "-r", "He", "was", "a", "very", "bad", "boy." };
new JCommander(jail, params);
Assert.assertEquals("The player is not the one we provided.", jail.player(), "graywolf336");
Assert.assertEquals("The time doesn't match what we gave.", jail.time(), "30");
Assert.assertEquals("The jail is not the one we specified.", jail.jail(), "den");
Assert.assertEquals("The cell doesn't match up.", jail.cell(), "cell_01");
Assert.assertEquals("The muted is not true.", jail.muted(), true);
Assert.assertEquals("Jailed reason didn't match up.", jail.reason(), "He was a very bad boy.");
}
}

View File

@ -9,7 +9,9 @@ import org.junit.Test;
import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
@Parameters(separators = ":")
public class TestJCommander {
@Parameter
public List<String> parameters = new ArrayList<String>();
@ -25,7 +27,7 @@ public class TestJCommander {
@Test
public void testJCommander() {
String[] args = { "-log", "2", "-groups", "unit" };
String[] args = { "-log:2", "-groups:unit" };
new JCommander(this, args);
Assert.assertEquals(this.verbose.intValue(), 2);