diff --git a/pom.xml b/pom.xml
index 40c7685..825d391 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,6 +50,12 @@
EtzCore
1.0.5
+
+ junit
+ junit
+ RELEASE
+ test
+
diff --git a/src/main/java/com/zerohighdef/geoffrey/Commands/AddItemCommand.java b/src/main/java/com/zerohighdef/geoffrey/Commands/AddItemCommand.java
index f4ce54a..25bb75d 100644
--- a/src/main/java/com/zerohighdef/geoffrey/Commands/AddItemCommand.java
+++ b/src/main/java/com/zerohighdef/geoffrey/Commands/AddItemCommand.java
@@ -6,14 +6,17 @@ import com.zerohighdef.geoffrey.Models.GeoffreyItemListing;
import com.zerohighdef.geoffrey.Objects.GeoffreyAPICallback;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommand;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommandError;
+import com.zerohighdef.geoffrey.Objects.GeoffreyUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.text.ParseException;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class AddItemCommand extends GeoffreyCommand {
@@ -27,20 +30,30 @@ public class AddItemCommand extends GeoffreyCommand {
if ((sender instanceof Player)) {
Map params = new HashMap();
+ List parsedArgs;
- if (args.length > 3) {
- String name[] = Arrays.copyOfRange(args, 3, args.length-1);
- params.put("shop_name", StringUtils.join(name, " "));
+ try {
+ parsedArgs = GeoffreyUtil.parseArgs(args);
}
- else if (args.length < 3) {
+ catch (ParseException e) {
+ sender.sendMessage(ChatColor.RED + e.getMessage());
+ return false;
+ }
+
+ if (parsedArgs.size() > 3) {
+ String name = StringUtils.join(parsedArgs.subList(3, parsedArgs.size()), " ");
+ params.put("shop_name", name);
+ }
+ else if (parsedArgs.size() < 3) {
sender.sendMessage(ChatColor.RED + "Too few parameters given.");
return false;
}
Player player = ((Player) sender).getPlayer();
- String quantity = args[1];
- String diamondPrice = args[2];
+ String itemName = parsedArgs.get(0);
+ String quantity = parsedArgs.get(1);
+ String diamondPrice = parsedArgs.get(2);
try {
Integer.parseInt(quantity);
@@ -59,7 +72,7 @@ public class AddItemCommand extends GeoffreyCommand {
}
params.put("mc_uuid", player.getUniqueId().toString().replace("-", ""));
- params.put("item_name", args[0]);
+ params.put("item_name", itemName);
params.put("quantity", quantity);
params.put("diamond_price", diamondPrice);
RunCommand("add_item", params, Method.POST , new CommandCallback(sender));
diff --git a/src/main/java/com/zerohighdef/geoffrey/Commands/AddResourceCommand.java b/src/main/java/com/zerohighdef/geoffrey/Commands/AddResourceCommand.java
index acf9e97..63f8090 100644
--- a/src/main/java/com/zerohighdef/geoffrey/Commands/AddResourceCommand.java
+++ b/src/main/java/com/zerohighdef/geoffrey/Commands/AddResourceCommand.java
@@ -6,14 +6,17 @@ import com.zerohighdef.geoffrey.Models.GeoffreyResource;
import com.zerohighdef.geoffrey.Objects.GeoffreyAPICallback;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommand;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommandError;
+import com.zerohighdef.geoffrey.Objects.GeoffreyUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.text.ParseException;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class AddResourceCommand extends GeoffreyCommand {
@@ -27,12 +30,21 @@ public class AddResourceCommand extends GeoffreyCommand {
if ((sender instanceof Player)) {
Map params = new HashMap();
+ List parsedArgs;
- if (args.length > 1) {
- String name[] = Arrays.copyOfRange(args, 1, args.length);
- params.put("farm_name", StringUtils.join(name, " "));
+ try {
+ parsedArgs = GeoffreyUtil.parseArgs(args);
}
- else if (args.length == 0) {
+ catch (ParseException e) {
+ sender.sendMessage(ChatColor.RED + e.getMessage());
+ return false;
+ }
+
+ if (parsedArgs.size() > 1) {
+ String name = StringUtils.join(parsedArgs.subList(1, parsedArgs.size()), " ");
+ params.put("farm_name", name);
+ }
+ else if (parsedArgs.size() < 1) {
sender.sendMessage(ChatColor.RED + "Too few parameters given.");
return false;
}
@@ -40,7 +52,7 @@ public class AddResourceCommand extends GeoffreyCommand {
Player player = ((Player) sender).getPlayer();
params.put("mc_uuid", player.getUniqueId().toString().replace("-", ""));
- params.put("resource_name", args[0]);
+ params.put("resource_name", parsedArgs.get(0));
RunCommand("add_resource", params, Method.POST , new CommandCallback(sender));
}
diff --git a/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteItemCommand.java b/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteItemCommand.java
index 797d8a0..4ceaa81 100644
--- a/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteItemCommand.java
+++ b/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteItemCommand.java
@@ -6,14 +6,17 @@ import com.zerohighdef.geoffrey.Models.GeoffreyLocation;
import com.zerohighdef.geoffrey.Objects.GeoffreyAPICallback;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommand;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommandError;
+import com.zerohighdef.geoffrey.Objects.GeoffreyUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.text.ParseException;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class DeleteItemCommand extends GeoffreyCommand {
@@ -27,18 +30,27 @@ public class DeleteItemCommand extends GeoffreyCommand {
if ((sender instanceof Player)) {
Map params = new HashMap();
+ List parsedArgs;
- if (args.length > 1) {
- String name[] = Arrays.copyOfRange(args, 1, args.length);
- params.put("shop_name", StringUtils.join(name, " "));
+ try {
+ parsedArgs = GeoffreyUtil.parseArgs(args);
}
- else if (args.length == 0) {
+ catch (ParseException e) {
+ sender.sendMessage(ChatColor.RED + e.getMessage());
+ return false;
+ }
+
+ if (parsedArgs.size() > 1) {
+ String name = StringUtils.join(parsedArgs.subList(1, parsedArgs.size()), " ");
+ params.put("shop_name", name);
+ }
+ else if (parsedArgs.size() == 0) {
sender.sendMessage(ChatColor.RED + "Too few parameters given.");
return false;
}
Player player = ((Player) sender).getPlayer();
- String itemName = args[0];
+ String itemName = parsedArgs.get(0);
params.put("mc_uuid", player.getUniqueId().toString().replace("-", ""));
params.put("item", itemName);
diff --git a/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteResourceCommand.java b/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteResourceCommand.java
index 47d3103..c71dac3 100644
--- a/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteResourceCommand.java
+++ b/src/main/java/com/zerohighdef/geoffrey/Commands/DeleteResourceCommand.java
@@ -6,14 +6,17 @@ import com.zerohighdef.geoffrey.Models.GeoffreyLocation;
import com.zerohighdef.geoffrey.Objects.GeoffreyAPICallback;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommand;
import com.zerohighdef.geoffrey.Objects.GeoffreyCommandError;
+import com.zerohighdef.geoffrey.Objects.GeoffreyUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.text.ParseException;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class DeleteResourceCommand extends GeoffreyCommand {
@@ -28,20 +31,32 @@ public class DeleteResourceCommand extends GeoffreyCommand {
if ((sender instanceof Player)) {
Map params = new HashMap();
- if (args.length > 1) {
- String name[] = Arrays.copyOfRange(args, 1, args.length);
- params.put("farm_name", StringUtils.join(name, " "));
+ List parsedArgs;
+
+ try {
+ parsedArgs = GeoffreyUtil.parseArgs(args);
}
- else if (args.length == 0) {
+ catch (ParseException e) {
+ sender.sendMessage(ChatColor.RED + e.getMessage());
+ return false;
+ }
+
+ if (parsedArgs.size() > 1) {
+ String name = StringUtils.join(parsedArgs.subList(1, parsedArgs.size()), " ");
+ params.put("farm_name", name);
+ }
+ else if (parsedArgs.size() < 1) {
sender.sendMessage(ChatColor.RED + "Too few parameters given.");
return false;
}
Player player = ((Player) sender).getPlayer();
- String resource = args[0];
+
+ String resource = parsedArgs.get(0);
params.put("mc_uuid", player.getUniqueId().toString().replace("-", ""));
params.put("resource", resource);
+
RunCommand("delete_resource", params, Method.POST , new CommandCallback(sender, resource));
}
diff --git a/src/main/java/com/zerohighdef/geoffrey/Commands/EditNameCommand.java b/src/main/java/com/zerohighdef/geoffrey/Commands/EditNameCommand.java
new file mode 100644
index 0000000..9caa4f4
--- /dev/null
+++ b/src/main/java/com/zerohighdef/geoffrey/Commands/EditNameCommand.java
@@ -0,0 +1,84 @@
+package com.zerohighdef.geoffrey.Commands;
+
+import com.google.gson.JsonElement;
+import com.zerohighdef.geoffrey.GeoffreyMC;
+import com.zerohighdef.geoffrey.Models.GeoffreyLocation;
+import com.zerohighdef.geoffrey.Objects.GeoffreyAPICallback;
+import com.zerohighdef.geoffrey.Objects.GeoffreyCommand;
+import com.zerohighdef.geoffrey.Objects.GeoffreyCommandError;
+import com.zerohighdef.geoffrey.Objects.GeoffreyUtil;
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.ChatColor;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class EditNameCommand extends GeoffreyCommand {
+ public EditNameCommand(GeoffreyMC plugin) {
+ super(plugin);
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+
+ if ((sender instanceof Player)) {
+ List parsedArgs;
+ try {
+ parsedArgs = GeoffreyUtil.parseArgs(args);
+ }
+ catch (ParseException e) {
+ sender.sendMessage(ChatColor.RED + e.getMessage());
+ return false;
+ }
+ Map params = new HashMap();
+
+ if (parsedArgs.size() < 2) {
+ sender.sendMessage(ChatColor.RED + "Not enough parameters!");
+ return false;
+ }
+
+ Player player = ((Player) sender).getPlayer();
+
+ String oldLocationName = parsedArgs.get(0);
+ String newLocationName = parsedArgs.get(1);
+
+ params.put("mc_uuid", player.getUniqueId().toString().replace("-", ""));
+ params.put("new_name", oldLocationName);
+ params.put("loc_name", newLocationName);
+ RunCommand("edit_name", params, Method.POST , new CommandCallback(sender, oldLocationName, newLocationName));
+ }
+ else {
+ sender.sendMessage(ChatColor.RED + "Console can not add locations!");
+ }
+
+ return true;
+ }
+
+ private class CommandCallback extends GeoffreyAPICallback {
+
+ CommandCallback(CommandSender sender, String oldLocationName, String newLocationName) {
+ super(sender);
+ errors.put("EntryNameNotUniqueError", "A location is already called " + newLocationName + " you ding dong goober");
+ errors.put("LocationLookUpError", "You do not have a location by the name " + oldLocationName + " you ding dong goober.");
+ }
+
+ @Override
+ public void invoke(String s) {
+ try {
+ JsonElement json = parseJSON(s);
+
+ GeoffreyLocation location = new GeoffreyLocation(json.getAsJsonObject());
+ String msg = ChatColor.GREEN + location.getLocationName() + " has been updated.";
+ commandSender.sendMessage(msg);
+ }
+ catch (GeoffreyCommandError e) {
+ return;
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/zerohighdef/geoffrey/Commands/SellingCommand.java b/src/main/java/com/zerohighdef/geoffrey/Commands/SellingCommand.java
index 76cacc6..b1644b0 100644
--- a/src/main/java/com/zerohighdef/geoffrey/Commands/SellingCommand.java
+++ b/src/main/java/com/zerohighdef/geoffrey/Commands/SellingCommand.java
@@ -24,7 +24,7 @@ public class SellingCommand extends GeoffreyCommand {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length > 0) {
- String item = StringUtils.join(args, " ");
+ String item = StringUtils.join(args, " ").replace("\"", "");
String commandName;
if (command.getName().contains("price")) {
diff --git a/src/main/java/com/zerohighdef/geoffrey/GeoffreyMC.java b/src/main/java/com/zerohighdef/geoffrey/GeoffreyMC.java
index c5aa121..ce648ac 100644
--- a/src/main/java/com/zerohighdef/geoffrey/GeoffreyMC.java
+++ b/src/main/java/com/zerohighdef/geoffrey/GeoffreyMC.java
@@ -64,6 +64,9 @@ public final class GeoffreyMC extends JavaPlugin {
DeleteResourceCommand deleteResourceCommand = new DeleteResourceCommand(this);
this.getCommand("geoffrey_delete_resource").setExecutor(deleteResourceCommand);
+
+ EditNameCommand editNameCommand = new EditNameCommand(this);
+ this.getCommand("geoffrey_edit_name").setExecutor(editNameCommand);
}
}
diff --git a/src/main/java/com/zerohighdef/geoffrey/Objects/GeoffreyUtil.java b/src/main/java/com/zerohighdef/geoffrey/Objects/GeoffreyUtil.java
new file mode 100644
index 0000000..97ff750
--- /dev/null
+++ b/src/main/java/com/zerohighdef/geoffrey/Objects/GeoffreyUtil.java
@@ -0,0 +1,49 @@
+package com.zerohighdef.geoffrey.Objects;
+
+import java.text.ParseException;
+import java.util.LinkedList;
+import java.util.List;
+
+public class GeoffreyUtil {
+ public static List parseArgs(String [] args) throws ParseException {
+ LinkedList parsedArgs = new LinkedList<>();
+ boolean parsingMultiWordArg = false;
+ StringBuilder parsedArg = new StringBuilder();
+
+ for (String arg: args) {
+ boolean foundEndOfString = false;
+
+ if (!parsingMultiWordArg) {
+ parsedArg = new StringBuilder();
+ }
+
+ for (char c: arg.toCharArray()) {
+ if (c == '"') {
+ if (parsingMultiWordArg) {
+ foundEndOfString = true;
+ parsingMultiWordArg = false;
+ }
+ else {
+ parsingMultiWordArg = true;
+ }
+ }
+ }
+
+ parsedArg.append(arg);
+
+ if (parsingMultiWordArg) {
+ parsedArg.append(" ");
+ }
+
+ if (foundEndOfString || !parsingMultiWordArg) {
+ parsedArgs.add(parsedArg.toString().replace("\"", ""));
+ }
+ }
+
+ if (parsingMultiWordArg) {
+ throw new ParseException("No matching \" found", 0);
+ }
+
+ return parsedArgs;
+ }
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 1fb7a8c..5095682 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -91,6 +91,11 @@ commands:
aliases: [delete_resource]
permission: geoffrey.add
usage: /delete_resource [resource name] [farm name]
+ geoffrey_edit_name:
+ description: Edits the name of a location in Geoffrey
+ aliases: [edit_name]
+ permission: geoffrey.add
+ usage: /edit_name [new name] [old name]
permissions:
add:
diff --git a/src/test/java/com/zerohighdef/geoffrey/Objects/GeoffreyUtilTest.java b/src/test/java/com/zerohighdef/geoffrey/Objects/GeoffreyUtilTest.java
new file mode 100644
index 0000000..03c0783
--- /dev/null
+++ b/src/test/java/com/zerohighdef/geoffrey/Objects/GeoffreyUtilTest.java
@@ -0,0 +1,23 @@
+package com.zerohighdef.geoffrey.Objects;
+
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+import static org.junit.Assert.*;
+
+public class GeoffreyUtilTest {
+
+ @org.junit.Test
+ public void parseArgs() {
+ String testArgs []= {"\"this", "is", "a", "test"};
+ List output;
+ try {
+ output = GeoffreyUtil.parseArgs(testArgs);
+ }
+ catch (Exception e) {
+ return;
+ }
+ System.out.println(output);
+ }
+}