Commands now support prefix

This commit is contained in:
Vlammar 2021-01-11 22:52:07 +01:00
parent 7eb646f1a1
commit 0058dba680
8 changed files with 76 additions and 44 deletions

View File

@ -93,7 +93,7 @@
<dependency>
<groupId>fr.zcraft</groupId>
<artifactId>quartzlib</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>org.bstats</groupId>

View File

@ -82,32 +82,40 @@ public abstract class IoMCommand extends Command {
//State of the automaton, can read word like:
//name_here; "name here"
int state = 0;
StringBuilder s = new StringBuilder();
for (String arg : args) {
switch (state) {
case 0:
if (arg.startsWith("\"")) {
state = 1;
arg = arg.substring(1);
StringBuilder s;
s = s.append(arg);
} else {
arguments.add(arg.toString());
}
break;
case 1:
if (arg.endsWith("\"")) {
arg = arg.substring(0, arg.length() - 1);
s = s.append(" " + arg);
arguments.add(s.toString());
s = new StringBuilder();
state = 0;
} else {
s = s.append(" " + arg);
}
break;
default:
throw new IllegalStateException("Unexpected value: " + state);
for (String arg : args) {
s = new StringBuilder();
for (char c : arg.toCharArray()) {
switch (state) {
case 0:
if (c == '\"') {
state = 1;
} else {
//If we read a : that means that we are on a new argument example:"hello"
if (c == ':') {
arguments.add(s.toString());
s = new StringBuilder();
} else {
s = s.append(c);
}
}
break;
case 1:
if (c == '\"') {
arguments.add(s.toString());
s = new StringBuilder();
state = 0;
} else {
s = s.append(c);
}
break;
default:
throw new IllegalStateException("Unexpected value: " + state);
}
}
if (s.length() > 0) {
arguments.add(s.toString());
}
}
return arguments;

View File

@ -104,7 +104,7 @@ public class DeleteCommand extends IoMCommand {
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> {
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
info(sender, I.t("The player {0} does not exist.", playerName));
return;

View File

@ -75,13 +75,13 @@ public class ExploreCommand extends IoMCommand {
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> {
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
info(sender, I.t("The player {0} does not exist.", playerName));
return;
}
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
Gui.open(sender, new MapListGui(offlinePlayer));
Gui.open(sender, new MapListGui(offlinePlayer,playerName));
});

View File

@ -100,7 +100,7 @@ public class GetCommand extends IoMCommand {
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> {
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
info(sender, I.t("The player {0} does not exist.", playerName));
return;

View File

@ -44,6 +44,7 @@ import fr.moribus.imageonmap.map.MapManager;
import fr.zcraft.quartzlib.components.commands.CommandException;
import fr.zcraft.quartzlib.components.commands.CommandInfo;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.tools.PluginLogger;
import fr.zcraft.quartzlib.tools.mojang.UUIDFetcher;
import java.io.IOException;
import java.util.ArrayList;
@ -53,7 +54,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandInfo(name = "give", usageParameters = "[playerFrom] <playername> <mapname>")
@CommandInfo(name = "give", usageParameters = "<playername> [playerFrom]:<mapname>")
public class GiveCommand extends IoMCommand {
@Override
@ -64,26 +65,41 @@ public class GiveCommand extends IoMCommand {
}
ArrayList<String> arguments = getArgs();
for (String arg : arguments) {
PluginLogger.info(arg);
}
if (arguments.size() > 3) {
warning(I.t("Too many parameters! Usage: /maptool give [playerFrom] <playername> <mapname>"));
warning(I.t("Too many parameters! Usage: /maptool give <playername> [playerFrom]:<mapname>"));
return;
}
if (arguments.size() < 1) {
warning(I.t("Too few parameters! Usage: /maptool give [playerFrom] <playername> <mapname>"));
warning(I.t("Too few parameters! Usage: /maptool give <playername> [playerFrom]:<mapname>"));
return;
}
final String mapName;
final String from;
final String playerName;
final Player sender = playerSender();
final Player playerSender;
Player playerSender1;
try {
playerSender1 = playerSender();
} catch (CommandException ignored) {
if (arguments.size() == 2) {
throwInvalidArgument(I.t("Usage: /maptool give <playername> <playerFrom>:<mapname>"));
}
playerSender1 = null;
}
playerSender = playerSender1;
if (arguments.size() == 2) {
from = sender.getName();
from = playerSender.getName();
playerName = arguments.get(0);
mapName = arguments.get(1);
} else {
if (arguments.size() == 3) {
from = arguments.get(0);
playerName = arguments.get(1);
from = arguments.get(1);
playerName = arguments.get(0);
mapName = arguments.get(2);
} else {
from = "";
@ -93,21 +109,27 @@ public class GiveCommand extends IoMCommand {
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(from, uuid -> {
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(from, uuid -> {
if (uuid == null) {
info(sender, I.t("The player {0} does not exist.", from));
if (playerSender != null) {
info(playerSender, I.t("The player {0} does not exist.", from));
}
return;
}
final ImageMap map = MapManager.getMap(uuid, mapName);
if (map == null) {
info(sender, I.t("This map does not exist."));
if (playerSender != null) {
info(playerSender, I.t("This map does not exist."));
}
return;
}
try {
UUID uuid2 = UUIDFetcher.fetch(playerName);
if (uuid2 == null) {
info(sender, I.t("The player {0} does not exist.", playerName));
if (playerSender != null) {
info(playerSender, I.t("The player {0} does not exist.", playerName));
}
return;
}
if (map.give(Bukkit.getPlayer(uuid2))) {
@ -116,7 +138,9 @@ public class GiveCommand extends IoMCommand {
}
} catch (IOException | InterruptedException e) {
info(sender, I.t("The player {0} does not exist.", playerName));
if (playerSender != null) {
info(playerSender, I.t("The player {0} does not exist.", playerName));
}
return;
}
});

View File

@ -79,7 +79,7 @@ public class ListCommand extends IoMCommand {
final Player sender = playerSender();
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> {
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
List<ImageMap> mapList = MapManager.getMapList(uuid);
if (uuid == null) {
info(sender, I.t("Player {} not found.", playerName));

View File

@ -146,7 +146,7 @@ public class UpdateCommand extends IoMCommand {
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> {
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
info(sender, I.t("The player {0} does not exist.", playerName));
return;