mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2024-12-23 09:47:38 +00:00
Restored tab completion of player names.
Fixes WORLDEDIT-3144.
This commit is contained in:
parent
f1649dbf51
commit
6f0fde47b0
@ -26,7 +26,9 @@ import com.sk89q.worldedit.LocalConfiguration;
|
|||||||
import com.sk89q.worldedit.LocalWorld;
|
import com.sk89q.worldedit.LocalWorld;
|
||||||
import com.sk89q.worldedit.ServerInterface;
|
import com.sk89q.worldedit.ServerInterface;
|
||||||
import com.sk89q.worldedit.entity.Player;
|
import com.sk89q.worldedit.entity.Player;
|
||||||
|
import com.sk89q.worldedit.extension.platform.Actor;
|
||||||
import com.sk89q.worldedit.extension.platform.Capability;
|
import com.sk89q.worldedit.extension.platform.Capability;
|
||||||
|
import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
|
||||||
import com.sk89q.worldedit.extension.platform.Preference;
|
import com.sk89q.worldedit.extension.platform.Preference;
|
||||||
import com.sk89q.worldedit.util.command.CommandMapping;
|
import com.sk89q.worldedit.util.command.CommandMapping;
|
||||||
import com.sk89q.worldedit.util.command.Description;
|
import com.sk89q.worldedit.util.command.Description;
|
||||||
@ -39,11 +41,12 @@ import org.bukkit.entity.EntityType;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class BukkitServerInterface extends ServerInterface {
|
public class BukkitServerInterface extends ServerInterface implements MultiUserPlatform {
|
||||||
public Server server;
|
public Server server;
|
||||||
public WorldEditPlugin plugin;
|
public WorldEditPlugin plugin;
|
||||||
private CommandRegistration dynamicCommands;
|
private CommandRegistration dynamicCommands;
|
||||||
@ -179,4 +182,13 @@ public class BukkitServerInterface extends ServerInterface {
|
|||||||
public void unregisterCommands() {
|
public void unregisterCommands() {
|
||||||
dynamicCommands.unregisterCommands();
|
dynamicCommands.unregisterCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Actor> getConnectedUsers() {
|
||||||
|
List<Actor> users = new ArrayList<Actor>();
|
||||||
|
for (org.bukkit.entity.Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||||
|
users.add(new BukkitPlayer(plugin, this, player));
|
||||||
|
}
|
||||||
|
return users;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,9 @@ import com.sk89q.worldedit.BiomeTypes;
|
|||||||
import com.sk89q.worldedit.LocalConfiguration;
|
import com.sk89q.worldedit.LocalConfiguration;
|
||||||
import com.sk89q.worldedit.ServerInterface;
|
import com.sk89q.worldedit.ServerInterface;
|
||||||
import com.sk89q.worldedit.entity.Player;
|
import com.sk89q.worldedit.entity.Player;
|
||||||
|
import com.sk89q.worldedit.extension.platform.Actor;
|
||||||
import com.sk89q.worldedit.extension.platform.Capability;
|
import com.sk89q.worldedit.extension.platform.Capability;
|
||||||
|
import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
|
||||||
import com.sk89q.worldedit.extension.platform.Preference;
|
import com.sk89q.worldedit.extension.platform.Preference;
|
||||||
import com.sk89q.worldedit.util.command.CommandMapping;
|
import com.sk89q.worldedit.util.command.CommandMapping;
|
||||||
import com.sk89q.worldedit.util.command.Description;
|
import com.sk89q.worldedit.util.command.Description;
|
||||||
@ -38,13 +40,19 @@ import net.minecraft.entity.EntityList;
|
|||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.management.ServerConfigurationManager;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraftforge.common.DimensionManager;
|
import net.minecraftforge.common.DimensionManager;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.EnumMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
class ForgePlatform extends ServerInterface {
|
class ForgePlatform extends ServerInterface implements MultiUserPlatform {
|
||||||
|
|
||||||
private final ForgeWorldEdit mod;
|
private final ForgeWorldEdit mod;
|
||||||
private final MinecraftServer server;
|
private final MinecraftServer server;
|
||||||
@ -213,4 +221,16 @@ class ForgePlatform extends ServerInterface {
|
|||||||
return capabilities;
|
return capabilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Actor> getConnectedUsers() {
|
||||||
|
List<Actor> users = new ArrayList<Actor>();
|
||||||
|
ServerConfigurationManager scm = server.getConfigurationManager();
|
||||||
|
for (String name : scm.getAllUsernames()) {
|
||||||
|
EntityPlayerMP entity = scm.getPlayerForUsername(name);
|
||||||
|
if (entity != null) {
|
||||||
|
users.add(new ForgePlayer(entity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return users;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ import com.sk89q.worldedit.event.platform.CommandEvent;
|
|||||||
import com.sk89q.worldedit.event.platform.CommandSuggestionEvent;
|
import com.sk89q.worldedit.event.platform.CommandSuggestionEvent;
|
||||||
import com.sk89q.worldedit.internal.command.ActorAuthorizer;
|
import com.sk89q.worldedit.internal.command.ActorAuthorizer;
|
||||||
import com.sk89q.worldedit.internal.command.CommandLoggingHandler;
|
import com.sk89q.worldedit.internal.command.CommandLoggingHandler;
|
||||||
|
import com.sk89q.worldedit.internal.command.UserCommandCompleter;
|
||||||
import com.sk89q.worldedit.internal.command.WorldEditBinding;
|
import com.sk89q.worldedit.internal.command.WorldEditBinding;
|
||||||
import com.sk89q.worldedit.internal.command.WorldEditExceptionConverter;
|
import com.sk89q.worldedit.internal.command.WorldEditExceptionConverter;
|
||||||
import com.sk89q.worldedit.session.request.Request;
|
import com.sk89q.worldedit.session.request.Request;
|
||||||
@ -93,6 +94,7 @@ public final class CommandManager {
|
|||||||
// Set up the commands manager
|
// Set up the commands manager
|
||||||
ParametricBuilder builder = new ParametricBuilder();
|
ParametricBuilder builder = new ParametricBuilder();
|
||||||
builder.setAuthorizer(new ActorAuthorizer());
|
builder.setAuthorizer(new ActorAuthorizer());
|
||||||
|
builder.setDefaultCompleter(new UserCommandCompleter(platformManager));
|
||||||
builder.addBinding(new WorldEditBinding(worldEdit));
|
builder.addBinding(new WorldEditBinding(worldEdit));
|
||||||
builder.addExceptionConverter(new WorldEditExceptionConverter(worldEdit));
|
builder.addExceptionConverter(new WorldEditExceptionConverter(worldEdit));
|
||||||
builder.addInvokeListener(new LegacyCommandsHandler());
|
builder.addInvokeListener(new LegacyCommandsHandler());
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* WorldEdit, a Minecraft world manipulation toolkit
|
||||||
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||||
|
* Copyright (C) WorldEdit team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sk89q.worldedit.extension.platform;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements a platform with multiple connected users.
|
||||||
|
*/
|
||||||
|
public interface MultiUserPlatform extends Platform {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of connected users.
|
||||||
|
*
|
||||||
|
* @return a list of connected users
|
||||||
|
*/
|
||||||
|
Collection<Actor> getConnectedUsers();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* WorldEdit, a Minecraft world manipulation toolkit
|
||||||
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||||
|
* Copyright (C) WorldEdit team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sk89q.worldedit.internal.command;
|
||||||
|
|
||||||
|
import com.sk89q.minecraft.util.commands.CommandException;
|
||||||
|
import com.sk89q.minecraft.util.commands.CommandLocals;
|
||||||
|
import com.sk89q.worldedit.extension.platform.Actor;
|
||||||
|
import com.sk89q.worldedit.extension.platform.Capability;
|
||||||
|
import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
|
||||||
|
import com.sk89q.worldedit.extension.platform.Platform;
|
||||||
|
import com.sk89q.worldedit.extension.platform.PlatformManager;
|
||||||
|
import com.sk89q.worldedit.util.command.CommandCompleter;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides the names of connected users as suggestions.
|
||||||
|
*/
|
||||||
|
public class UserCommandCompleter implements CommandCompleter {
|
||||||
|
|
||||||
|
private final PlatformManager platformManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance.
|
||||||
|
*
|
||||||
|
* @param platformManager the platform manager
|
||||||
|
*/
|
||||||
|
public UserCommandCompleter(PlatformManager platformManager) {
|
||||||
|
checkNotNull(platformManager);
|
||||||
|
this.platformManager = platformManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSuggestions(String arguments, CommandLocals locals) throws CommandException {
|
||||||
|
Platform platform = platformManager.queryCapability(Capability.USER_COMMANDS);
|
||||||
|
if (platform instanceof MultiUserPlatform) {
|
||||||
|
List<String> suggestions = new ArrayList<String>();
|
||||||
|
Collection<Actor> users = ((MultiUserPlatform) platform).getConnectedUsers();
|
||||||
|
for (Actor user : users) {
|
||||||
|
if (user.getName().toLowerCase().startsWith(arguments.toLowerCase().trim())) {
|
||||||
|
suggestions.add(user.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return suggestions;
|
||||||
|
} else {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -22,12 +22,10 @@ package com.sk89q.worldedit.util.command;
|
|||||||
import com.sk89q.minecraft.util.commands.CommandException;
|
import com.sk89q.minecraft.util.commands.CommandException;
|
||||||
import com.sk89q.minecraft.util.commands.CommandLocals;
|
import com.sk89q.minecraft.util.commands.CommandLocals;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A command that can be executed.
|
* A command that can be executed.
|
||||||
*/
|
*/
|
||||||
public interface CommandCallable {
|
public interface CommandCallable extends CommandCompleter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Execute the correct command based on the input.
|
* Execute the correct command based on the input.
|
||||||
@ -41,16 +39,6 @@ public interface CommandCallable {
|
|||||||
* @throws CommandException thrown on a command error
|
* @throws CommandException thrown on a command error
|
||||||
*/
|
*/
|
||||||
boolean call(String arguments, CommandLocals locals, String[] parentCommands) throws CommandException;
|
boolean call(String arguments, CommandLocals locals, String[] parentCommands) throws CommandException;
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of suggestions based on input.
|
|
||||||
*
|
|
||||||
* @param arguments the arguments entered up to this point
|
|
||||||
* @param locals the locals
|
|
||||||
* @return a list of suggestions
|
|
||||||
* @throws CommandException thrown if there was a parsing error
|
|
||||||
*/
|
|
||||||
List<String> getSuggestions(String arguments, CommandLocals locals) throws CommandException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get an object describing this command.
|
* Get an object describing this command.
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* WorldEdit, a Minecraft world manipulation toolkit
|
||||||
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||||
|
* Copyright (C) WorldEdit team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sk89q.worldedit.util.command;
|
||||||
|
|
||||||
|
import com.sk89q.minecraft.util.commands.CommandException;
|
||||||
|
import com.sk89q.minecraft.util.commands.CommandLocals;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a method that can provide tab completion for commands.
|
||||||
|
*/
|
||||||
|
public interface CommandCompleter {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of suggestions based on input.
|
||||||
|
*
|
||||||
|
* @param arguments the arguments entered up to this point
|
||||||
|
* @param locals the locals
|
||||||
|
* @return a list of suggestions
|
||||||
|
* @throws CommandException thrown if there was a parsing error
|
||||||
|
*/
|
||||||
|
List<String> getSuggestions(String arguments, CommandLocals locals) throws CommandException;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* WorldEdit, a Minecraft world manipulation toolkit
|
||||||
|
* Copyright (C) sk89q <http://www.sk89q.com>
|
||||||
|
* Copyright (C) WorldEdit team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU Lesser General Public License as published by the
|
||||||
|
* Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sk89q.worldedit.util.command;
|
||||||
|
|
||||||
|
import com.sk89q.minecraft.util.commands.CommandException;
|
||||||
|
import com.sk89q.minecraft.util.commands.CommandLocals;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Always returns an empty list of suggestions.
|
||||||
|
*/
|
||||||
|
public class NullCompleter implements CommandCompleter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSuggestions(String arguments, CommandLocals locals) throws CommandException {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -27,7 +27,9 @@ import com.sk89q.minecraft.util.commands.CommandPermissions;
|
|||||||
import com.sk89q.worldedit.util.auth.Authorizer;
|
import com.sk89q.worldedit.util.auth.Authorizer;
|
||||||
import com.sk89q.worldedit.util.auth.NullAuthorizer;
|
import com.sk89q.worldedit.util.auth.NullAuthorizer;
|
||||||
import com.sk89q.worldedit.util.command.CommandCallable;
|
import com.sk89q.worldedit.util.command.CommandCallable;
|
||||||
|
import com.sk89q.worldedit.util.command.CommandCompleter;
|
||||||
import com.sk89q.worldedit.util.command.Dispatcher;
|
import com.sk89q.worldedit.util.command.Dispatcher;
|
||||||
|
import com.sk89q.worldedit.util.command.NullCompleter;
|
||||||
import com.sk89q.worldedit.util.command.binding.PrimitiveBindings;
|
import com.sk89q.worldedit.util.command.binding.PrimitiveBindings;
|
||||||
import com.sk89q.worldedit.util.command.binding.StandardBindings;
|
import com.sk89q.worldedit.util.command.binding.StandardBindings;
|
||||||
import com.sk89q.worldedit.util.command.binding.Switch;
|
import com.sk89q.worldedit.util.command.binding.Switch;
|
||||||
@ -57,6 +59,7 @@ public class ParametricBuilder {
|
|||||||
private final List<InvokeListener> invokeListeners = new ArrayList<InvokeListener>();
|
private final List<InvokeListener> invokeListeners = new ArrayList<InvokeListener>();
|
||||||
private final List<ExceptionConverter> exceptionConverters = new ArrayList<ExceptionConverter>();
|
private final List<ExceptionConverter> exceptionConverters = new ArrayList<ExceptionConverter>();
|
||||||
private Authorizer authorizer = new NullAuthorizer();
|
private Authorizer authorizer = new NullAuthorizer();
|
||||||
|
private CommandCompleter defaultCompleter = new NullCompleter();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new builder.
|
* Create a new builder.
|
||||||
@ -225,4 +228,26 @@ public class ParametricBuilder {
|
|||||||
checkNotNull(authorizer);
|
checkNotNull(authorizer);
|
||||||
this.authorizer = authorizer;
|
this.authorizer = authorizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default command suggestions provider that will be used if
|
||||||
|
* no suggestions are available.
|
||||||
|
*
|
||||||
|
* @return the default command completer
|
||||||
|
*/
|
||||||
|
public CommandCompleter getDefaultCompleter() {
|
||||||
|
return defaultCompleter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the default command suggestions provider that will be used if
|
||||||
|
* no suggestions are available.
|
||||||
|
*
|
||||||
|
* @param defaultCompleter the default command completer
|
||||||
|
*/
|
||||||
|
public void setDefaultCompleter(CommandCompleter defaultCompleter) {
|
||||||
|
checkNotNull(defaultCompleter);
|
||||||
|
this.defaultCompleter = defaultCompleter;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,6 @@ import java.lang.reflect.Method;
|
|||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -273,8 +272,8 @@ class ParametricCallable implements CommandCallable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getSuggestions(String stringArguments, CommandLocals locals) throws CommandException {
|
public List<String> getSuggestions(String arguments, CommandLocals locals) throws CommandException {
|
||||||
return Collections.emptyList();
|
return builder.getDefaultCompleter().getSuggestions(arguments, locals);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user