geforkt von Mirrors/FastAsyncWorldEdit
Added WorldConverter.java
Dieser Commit ist enthalten in:
Ursprung
ae2d765533
Commit
e88adea066
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* 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.command.argument;
|
||||||
|
|
||||||
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
|
import com.sk89q.worldedit.extension.platform.Capability;
|
||||||
|
import com.sk89q.worldedit.util.formatting.text.Component;
|
||||||
|
import com.sk89q.worldedit.util.formatting.text.TextComponent;
|
||||||
|
import com.sk89q.worldedit.world.World;
|
||||||
|
import org.enginehub.piston.CommandManager;
|
||||||
|
import org.enginehub.piston.converter.ArgumentConverter;
|
||||||
|
import org.enginehub.piston.converter.ConversionResult;
|
||||||
|
import org.enginehub.piston.converter.FailedConversion;
|
||||||
|
import org.enginehub.piston.converter.SuccessfulConversion;
|
||||||
|
import org.enginehub.piston.inject.InjectedValueAccess;
|
||||||
|
import org.enginehub.piston.inject.Key;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class WorldConverter implements ArgumentConverter<World> {
|
||||||
|
|
||||||
|
public static void register(CommandManager commandManager) {
|
||||||
|
commandManager.registerConverter(Key.of(World.class),
|
||||||
|
new WorldConverter()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final TextComponent choices;
|
||||||
|
|
||||||
|
private WorldConverter() {
|
||||||
|
this.choices = TextComponent.of("any world");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Component describeAcceptableArguments() {
|
||||||
|
return this.choices;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Stream<? extends World> getWorlds() {
|
||||||
|
return WorldEdit.getInstance().getPlatformManager()
|
||||||
|
.queryCapability(Capability.GAME_HOOKS).getWorlds().stream();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getSuggestions(String input) {
|
||||||
|
return getWorlds()
|
||||||
|
.map(World::getId)
|
||||||
|
.filter(world -> world.startsWith(input))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConversionResult<World> convert(String s, InjectedValueAccess injectedValueAccess) {
|
||||||
|
World result = getWorlds()
|
||||||
|
.filter(world -> world.getId().equals(s))
|
||||||
|
.findAny().orElse(null);
|
||||||
|
return result == null
|
||||||
|
? FailedConversion.from(new IllegalArgumentException(
|
||||||
|
"Not a valid world: " + s))
|
||||||
|
: SuccessfulConversion.fromSingle(result);
|
||||||
|
}
|
||||||
|
}
|
@ -96,6 +96,7 @@ import com.sk89q.worldedit.command.argument.FactoryConverter;
|
|||||||
import com.sk89q.worldedit.command.argument.RegionFactoryConverter;
|
import com.sk89q.worldedit.command.argument.RegionFactoryConverter;
|
||||||
import com.sk89q.worldedit.command.argument.RegistryConverter;
|
import com.sk89q.worldedit.command.argument.RegistryConverter;
|
||||||
import com.sk89q.worldedit.command.argument.VectorConverter;
|
import com.sk89q.worldedit.command.argument.VectorConverter;
|
||||||
|
import com.sk89q.worldedit.command.argument.WorldConverter;
|
||||||
import com.sk89q.worldedit.command.argument.ZonedDateTimeConverter;
|
import com.sk89q.worldedit.command.argument.ZonedDateTimeConverter;
|
||||||
import com.sk89q.worldedit.command.util.CommandPermissions;
|
import com.sk89q.worldedit.command.util.CommandPermissions;
|
||||||
import com.sk89q.worldedit.command.util.CommandQueuedCondition;
|
import com.sk89q.worldedit.command.util.CommandQueuedCondition;
|
||||||
@ -258,6 +259,7 @@ public final class PlatformCommandManager {
|
|||||||
BooleanConverter.register(commandManager);
|
BooleanConverter.register(commandManager);
|
||||||
EntityRemoverConverter.register(commandManager);
|
EntityRemoverConverter.register(commandManager);
|
||||||
RegionFactoryConverter.register(commandManager);
|
RegionFactoryConverter.register(commandManager);
|
||||||
|
WorldConverter.register(commandManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAlwaysInjectedValues() {
|
public void registerAlwaysInjectedValues() {
|
||||||
@ -356,7 +358,9 @@ public final class PlatformCommandManager {
|
|||||||
new SuperPickaxeCommands(worldEdit)
|
new SuperPickaxeCommands(worldEdit)
|
||||||
);
|
);
|
||||||
registerSubCommands(
|
registerSubCommands(
|
||||||
"brush", Arrays.asList("br", "/brush", "/br", "/tool", "tool"), "Brushing commands",
|
"brush",
|
||||||
|
ImmutableList.of("br", "/brush", "/br", "/tool", "tool"),
|
||||||
|
"Brushing commands",
|
||||||
commandManager,
|
commandManager,
|
||||||
c -> {
|
c -> {
|
||||||
c.accept(BrushCommandsRegistration.builder(), new BrushCommands(worldEdit));
|
c.accept(BrushCommandsRegistration.builder(), new BrushCommands(worldEdit));
|
||||||
@ -627,7 +631,6 @@ public final class PlatformCommandManager {
|
|||||||
Request.reset();
|
Request.reset();
|
||||||
Actor actor = event.getActor();
|
Actor actor = event.getActor();
|
||||||
String args = event.getArguments();
|
String args = event.getArguments();
|
||||||
CommandEvent finalEvent = event;
|
|
||||||
final FawePlayer<Object> fp = FawePlayer.wrap(actor);
|
final FawePlayer<Object> fp = FawePlayer.wrap(actor);
|
||||||
System.out.println(1);
|
System.out.println(1);
|
||||||
TaskManager.IMP.taskNow(() -> {
|
TaskManager.IMP.taskNow(() -> {
|
||||||
@ -635,20 +638,21 @@ public final class PlatformCommandManager {
|
|||||||
String arg0 = space0 == -1 ? args : args.substring(0, space0);
|
String arg0 = space0 == -1 ? args : args.substring(0, space0);
|
||||||
Optional<Command> optional = commandManager.getCommand(arg0);
|
Optional<Command> optional = commandManager.getCommand(arg0);
|
||||||
if (!optional.isPresent()) {
|
if (!optional.isPresent()) {
|
||||||
System.out.println("No command for '" + arg0 + "' " + StringMan.getString(commandManager.getAllCommands().map(command -> command.getName()).collect(Collectors.toList())));
|
System.out.println("No command for '" + arg0 + "' " + StringMan.getString(commandManager.getAllCommands().map(
|
||||||
|
Command::getName).collect(Collectors.toList())));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Command cmd = optional.get();
|
Command cmd = optional.get();
|
||||||
CommandQueuedCondition queued = cmd.getCondition().as(CommandQueuedCondition.class).orElse(null);
|
CommandQueuedCondition queued = cmd.getCondition().as(CommandQueuedCondition.class).orElse(null);
|
||||||
if (queued != null && !queued.isQueued()) {
|
if (queued != null && !queued.isQueued()) {
|
||||||
handleCommandOnCurrentThread(finalEvent);
|
handleCommandOnCurrentThread(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LocalSession session = worldEdit.getSessionManager().get(actor);
|
LocalSession session = worldEdit.getSessionManager().get(actor);
|
||||||
synchronized (session) {
|
synchronized (session) {
|
||||||
SessionKey key = actor.getSessionKey();
|
SessionKey key = actor.getSessionKey();
|
||||||
if (key.isActive()) {
|
if (key.isActive()) {
|
||||||
PlatformCommandManager.this.handleCommandOnCurrentThread(finalEvent);
|
PlatformCommandManager.this.handleCommandOnCurrentThread(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, Fawe.isMainThread());
|
}, Fawe.isMainThread());
|
||||||
@ -694,8 +698,7 @@ public final class PlatformCommandManager {
|
|||||||
// exceptions without writing a hook into every dispatcher, we need to unwrap these
|
// exceptions without writing a hook into every dispatcher, we need to unwrap these
|
||||||
// exceptions and rethrow their converted form, if their is one.
|
// exceptions and rethrow their converted form, if their is one.
|
||||||
try {
|
try {
|
||||||
//Why the hell do we need to return an object if we aren't doing anything with it?
|
task.get();
|
||||||
Object result = task.get();
|
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
// Use the exception converter to convert the exception if any of its causes
|
// Use the exception converter to convert the exception if any of its causes
|
||||||
// can be converted, otherwise throw the original exception
|
// can be converted, otherwise throw the original exception
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren