package jk_5.nailed.plugins.worldedit;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.event.platform.CommandEvent;
import com.sk89q.worldedit.event.platform.CommandSuggestionEvent;
import com.sk89q.worldedit.util.command.CommandMapping;
import jk_5.nailed.api.command.CommandCallable;
import jk_5.nailed.api.command.CommandException;
import jk_5.nailed.api.command.Description;
import jk_5.nailed.api.command.Parameter;
import jk_5.nailed.api.command.context.CommandLocals;
import jk_5.nailed.api.command.sender.CommandSender;
import jk_5.nailed.api.command.util.auth.AuthorizationException;
import jk_5.nailed.server.player.NailedPlayer;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
public class WorldEditCommand implements CommandCallable {
private final CommandMapping mapping;
public WorldEditCommand(CommandMapping mapping) {
this.mapping = mapping;
}
@Override
public boolean call(String arguments, CommandLocals locals, String[] parentCommands) throws CommandException, AuthorizationException {
CommandSender sender = locals.get(CommandSender.class);
if((sender instanceof NailedPlayer)){
NailedPlayer player = ((NailedPlayer) sender);
CommandEvent weEvent = new CommandEvent(WorldEditPlayer.wrap(player.getEntity()), parentCommands[0] + " " + arguments);
WorldEdit.getInstance().getEventBus().post(weEvent);
}
return false;
}
@Override
public Description getDescription() {
return new Description() {
@Override
public List<Parameter> getParameters() {
List<Parameter> ret = new ArrayList<Parameter>();
for (final com.sk89q.worldedit.util.command.Parameter p : mapping.getDescription().getParameters()) {
ret.add(new Parameter() {
@Override
public String getName() {
return p.getName();
}
@Override
public Character getFlag() {
return p.getFlag();
}
@Override
public boolean isValueFlag() {
return p.isValueFlag();
}
@Override
public boolean isOptional() {
return p.isOptional();
}
@Override
public String[] getDefaultValue() {
return p.getDefaultValue();
}
});
}
return ret;
}
@Nullable
@Override
public String getShortDescription() {
return mapping.getDescription().getShortDescription();
}
@Nullable
@Override
public String getHelp() {
return mapping.getDescription().getHelp();
}
@Override
public String getUsage() {
return mapping.getDescription().getUsage();
}
@Override
public List<String> getPermissions() {
return mapping.getDescription().getPermissions();
}
};
}
@Override
public boolean testPermission(CommandLocals locals) {
return true; //TODO
}
@Override
public List<String> getSuggestions(String arguments, CommandLocals locals) throws CommandException {
CommandSender sender = locals.get(CommandSender.class);
if((sender instanceof NailedPlayer)){
NailedPlayer player = ((NailedPlayer) sender);
String input = mapping.getPrimaryAlias() + " " + arguments;
CommandSuggestionEvent event = new CommandSuggestionEvent(WorldEditPlayer.wrap(player.getEntity()), input);
WorldEdit.getInstance().getEventBus().post(event);
return event.getSuggestions();
}
return null;
}
}