mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-05 04:26:42 +00:00
Re-implement richer mask and transform parsing (#1223)
Co-authored-by: dordsor21 <dordsor21@gmail.com> Co-authored-by: Hannes Greule <SirYwell@users.noreply.github.com>
This commit is contained in:
@ -86,6 +86,18 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||
@CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class)
|
||||
public class GeneralCommands {
|
||||
|
||||
private final WorldEdit worldEdit;
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*
|
||||
* @param worldEdit reference to WorldEdit
|
||||
*/
|
||||
public GeneralCommands(WorldEdit worldEdit) {
|
||||
checkNotNull(worldEdit);
|
||||
this.worldEdit = worldEdit;
|
||||
}
|
||||
|
||||
public static void register(
|
||||
CommandRegistrationHandler registration,
|
||||
CommandManager commandManager,
|
||||
@ -149,18 +161,6 @@ public class GeneralCommands {
|
||||
return CommandUtil.createNewCommandReplacementText("//perf " + flipped);
|
||||
}
|
||||
|
||||
private final WorldEdit worldEdit;
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*
|
||||
* @param worldEdit reference to WorldEdit
|
||||
*/
|
||||
public GeneralCommands(WorldEdit worldEdit) {
|
||||
checkNotNull(worldEdit);
|
||||
this.worldEdit = worldEdit;
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "/limit",
|
||||
desc = "Modify block change limit"
|
||||
@ -451,50 +451,6 @@ public class GeneralCommands {
|
||||
);
|
||||
}
|
||||
|
||||
private static class ItemSearcher implements Callable<Component> {
|
||||
|
||||
private final boolean blocksOnly;
|
||||
private final boolean itemsOnly;
|
||||
private final String search;
|
||||
private final int page;
|
||||
|
||||
ItemSearcher(String search, boolean blocksOnly, boolean itemsOnly, int page) {
|
||||
this.blocksOnly = blocksOnly;
|
||||
this.itemsOnly = itemsOnly;
|
||||
this.search = search;
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component call() throws Exception {
|
||||
String command = "/searchitem " + (blocksOnly ? "-b " : "") + (itemsOnly ? "-i " : "") + "-p %page% " + search;
|
||||
Map<String, Component> results = new TreeMap<>();
|
||||
String idMatch = search.replace(' ', '_');
|
||||
String nameMatch = search.toLowerCase(Locale.ROOT);
|
||||
for (ItemType searchType : ItemType.REGISTRY) {
|
||||
if (blocksOnly && !searchType.hasBlockType()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (itemsOnly && searchType.hasBlockType()) {
|
||||
continue;
|
||||
}
|
||||
final String id = searchType.getId();
|
||||
if (id.contains(idMatch)) {
|
||||
Component name = searchType.getRichName();
|
||||
results.put(id, TextComponent.builder()
|
||||
.append(name)
|
||||
.append(" (" + id + ")")
|
||||
.build());
|
||||
}
|
||||
}
|
||||
List<Component> list = new ArrayList<>(results.values());
|
||||
return PaginationBox.fromComponents("Search results for '" + search + "'", command, list)
|
||||
.create(page);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//FAWE start
|
||||
@Command(
|
||||
name = "/gtexture",
|
||||
@ -592,15 +548,18 @@ public class GeneralCommands {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Command(
|
||||
name = "/gtransform",
|
||||
aliases = {"gtransform"},
|
||||
desc = "Set the global transform"
|
||||
)
|
||||
@CommandPermissions({"worldedit.global-transform", "worldedit.transform.global"})
|
||||
public void gtransform(Player player, EditSession editSession, LocalSession session, ResettableExtent transform) throws
|
||||
WorldEditException {
|
||||
public void gtransform(
|
||||
Player player,
|
||||
EditSession editSession,
|
||||
LocalSession session,
|
||||
@Arg(desc = "The transform to set", def = "") ResettableExtent transform
|
||||
) throws WorldEditException {
|
||||
session.setTransform(transform);
|
||||
if (transform == null) {
|
||||
player.print(Caption.of("fawe.worldedit.general.transform.disabled"));
|
||||
@ -648,5 +607,49 @@ public class GeneralCommands {
|
||||
actor.print(Caption.of("worldedit.fast.enabled"));
|
||||
}
|
||||
}
|
||||
|
||||
private static class ItemSearcher implements Callable<Component> {
|
||||
|
||||
private final boolean blocksOnly;
|
||||
private final boolean itemsOnly;
|
||||
private final String search;
|
||||
private final int page;
|
||||
|
||||
ItemSearcher(String search, boolean blocksOnly, boolean itemsOnly, int page) {
|
||||
this.blocksOnly = blocksOnly;
|
||||
this.itemsOnly = itemsOnly;
|
||||
this.search = search;
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component call() throws Exception {
|
||||
String command = "/searchitem " + (blocksOnly ? "-b " : "") + (itemsOnly ? "-i " : "") + "-p %page% " + search;
|
||||
Map<String, Component> results = new TreeMap<>();
|
||||
String idMatch = search.replace(' ', '_');
|
||||
String nameMatch = search.toLowerCase(Locale.ROOT);
|
||||
for (ItemType searchType : ItemType.REGISTRY) {
|
||||
if (blocksOnly && !searchType.hasBlockType()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (itemsOnly && searchType.hasBlockType()) {
|
||||
continue;
|
||||
}
|
||||
final String id = searchType.getId();
|
||||
if (id.contains(idMatch)) {
|
||||
Component name = searchType.getRichName();
|
||||
results.put(id, TextComponent.builder()
|
||||
.append(name)
|
||||
.append(" (" + id + ")")
|
||||
.build());
|
||||
}
|
||||
}
|
||||
List<Component> list = new ArrayList<>(results.values());
|
||||
return PaginationBox.fromComponents("Search results for '" + search + "'", command, list)
|
||||
.create(page);
|
||||
}
|
||||
|
||||
}
|
||||
//FAWE end
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import com.fastasyncworldedit.core.command.tool.TargetMode;
|
||||
import com.fastasyncworldedit.core.command.tool.brush.BrushSettings;
|
||||
import com.fastasyncworldedit.core.command.tool.scroll.Scroll;
|
||||
import com.fastasyncworldedit.core.configuration.Caption;
|
||||
import com.fastasyncworldedit.core.extent.ResettableExtent;
|
||||
import com.fastasyncworldedit.core.util.MathMan;
|
||||
import com.fastasyncworldedit.core.util.StringMan;
|
||||
import com.google.common.collect.Iterables;
|
||||
@ -360,33 +361,33 @@ public class ToolUtilCommands {
|
||||
player.print(Caption.of("fawe.worldedit.brush.brush.source.mask"));
|
||||
}
|
||||
|
||||
// TODO: Ping @MattBDev to reimplement 2020-02-04
|
||||
// @Command(
|
||||
// name = "transform",
|
||||
// desc = "Set the brush transform"
|
||||
// )
|
||||
// @CommandPermissions({"worldedit.brush.options.transform", "worldedit.transform.brush"})
|
||||
// public void transform(Player player, LocalSession session, EditSession editSession,
|
||||
// @Arg(desc = "The transform", def = "") ResettableExtent transform,
|
||||
// @Switch(name = 'h', desc = "Whether the offhand should be considered or not")
|
||||
// boolean offHand,
|
||||
// Arguments arguments) throws WorldEditException {
|
||||
// BrushTool tool = session.getBrushTool(player, false);
|
||||
// if (tool == null) {
|
||||
// player.print(TranslatableComponent.of("fawe.worldedit.brush.brush.none"));
|
||||
// return;
|
||||
// }
|
||||
// if (transform == null) {
|
||||
// player.print(TranslatableComponent.of("fawe.worldedit.brush.brush.transform.disabled"));
|
||||
// tool.setTransform(null);
|
||||
// return;
|
||||
// }
|
||||
// BrushSettings settings = offHand ? tool.getOffHand() : tool.getContext();
|
||||
// String lastArg = Iterables.getLast(CommandArgParser.spaceSplit(arguments.get())).getSubstring();
|
||||
// settings.addSetting(BrushSettings.SettingType.TRANSFORM, lastArg);
|
||||
// settings.setTransform(transform);
|
||||
// tool.update();
|
||||
// player.print(TranslatableComponent.of("fawe.worldedit.brush.brush.transform"));
|
||||
// }
|
||||
@Command(
|
||||
name = "transform",
|
||||
aliases = {"/transform"},
|
||||
desc = "Set the brush transform"
|
||||
)
|
||||
@CommandPermissions({"worldedit.brush.options.transform", "worldedit.transform.brush"})
|
||||
public void transform(Player player, LocalSession session, EditSession editSession,
|
||||
@Arg(desc = "The transform", def = "") ResettableExtent transform,
|
||||
@Switch(name = 'h', desc = "Whether the offhand should be considered or not")
|
||||
boolean offHand,
|
||||
Arguments arguments) throws WorldEditException {
|
||||
BrushTool tool = session.getBrushTool(player, false);
|
||||
if (tool == null) {
|
||||
player.print(Caption.of("fawe.worldedit.brush.brush.none"));
|
||||
return;
|
||||
}
|
||||
if (transform == null) {
|
||||
player.print(Caption.of("fawe.worldedit.brush.brush.transform.disabled"));
|
||||
tool.setTransform(null);
|
||||
return;
|
||||
}
|
||||
BrushSettings settings = offHand ? tool.getOffHand() : tool.getContext();
|
||||
String lastArg = Iterables.getLast(CommandArgParser.spaceSplit(arguments.get())).getSubstring();
|
||||
settings.addSetting(BrushSettings.SettingType.TRANSFORM, lastArg);
|
||||
settings.setTransform(transform);
|
||||
tool.update();
|
||||
player.print(Caption.of("fawe.worldedit.brush.brush.transform"));
|
||||
}
|
||||
//FAWE end
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package com.sk89q.worldedit.command.argument;
|
||||
|
||||
import com.fastasyncworldedit.core.extent.ResettableExtent;
|
||||
import com.fastasyncworldedit.core.extent.SupplyingExtent;
|
||||
import com.sk89q.worldedit.EmptyClipboardException;
|
||||
import com.sk89q.worldedit.LocalSession;
|
||||
@ -54,6 +55,23 @@ import java.util.function.Function;
|
||||
|
||||
public class FactoryConverter<T> implements ArgumentConverter<T> {
|
||||
|
||||
private final WorldEdit worldEdit;
|
||||
private final Function<WorldEdit, AbstractFactory<T>> factoryExtractor;
|
||||
private final String description;
|
||||
@Nullable
|
||||
private final Consumer<ParserContext> contextTweaker;
|
||||
private FactoryConverter(
|
||||
WorldEdit worldEdit,
|
||||
Function<WorldEdit, AbstractFactory<T>> factoryExtractor,
|
||||
String description,
|
||||
@Nullable Consumer<ParserContext> contextTweaker
|
||||
) {
|
||||
this.worldEdit = worldEdit;
|
||||
this.factoryExtractor = factoryExtractor;
|
||||
this.description = description;
|
||||
this.contextTweaker = contextTweaker;
|
||||
}
|
||||
|
||||
public static void register(WorldEdit worldEdit, CommandManager commandManager) {
|
||||
commandManager.registerConverter(
|
||||
Key.of(Pattern.class),
|
||||
@ -67,6 +85,10 @@ public class FactoryConverter<T> implements ArgumentConverter<T> {
|
||||
Key.of(BaseItem.class),
|
||||
new FactoryConverter<>(worldEdit, WorldEdit::getItemFactory, "item", null)
|
||||
);
|
||||
commandManager.registerConverter(
|
||||
Key.of(ResettableExtent.class),
|
||||
new FactoryConverter<>(worldEdit, WorldEdit::getTransformFactory, "transform", null)
|
||||
);
|
||||
|
||||
commandManager.registerConverter(
|
||||
Key.of(Mask.class, ClipboardMask.class),
|
||||
@ -90,24 +112,6 @@ public class FactoryConverter<T> implements ArgumentConverter<T> {
|
||||
);
|
||||
}
|
||||
|
||||
private final WorldEdit worldEdit;
|
||||
private final Function<WorldEdit, AbstractFactory<T>> factoryExtractor;
|
||||
private final String description;
|
||||
@Nullable
|
||||
private final Consumer<ParserContext> contextTweaker;
|
||||
|
||||
private FactoryConverter(
|
||||
WorldEdit worldEdit,
|
||||
Function<WorldEdit, AbstractFactory<T>> factoryExtractor,
|
||||
String description,
|
||||
@Nullable Consumer<ParserContext> contextTweaker
|
||||
) {
|
||||
this.worldEdit = worldEdit;
|
||||
this.factoryExtractor = factoryExtractor;
|
||||
this.description = description;
|
||||
this.contextTweaker = contextTweaker;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConversionResult<T> convert(String argument, InjectedValueAccess context) {
|
||||
Actor actor = context.injectedValue(Key.of(Actor.class))
|
||||
|
@ -234,6 +234,27 @@ public final class SuggestionHelper {
|
||||
return Stream.empty();
|
||||
}
|
||||
|
||||
//FAWE start
|
||||
/**
|
||||
* Returns a stream of suggestions for booleans.
|
||||
*
|
||||
* @param argumentInput the given input to filter with.
|
||||
* @return a stream of suggestions.
|
||||
*/
|
||||
public static Stream<String> suggestBoolean(String argumentInput) {
|
||||
if (argumentInput.isEmpty()) {
|
||||
return Stream.of("true", "false");
|
||||
}
|
||||
if ("true".startsWith(argumentInput)) {
|
||||
return Stream.of("true");
|
||||
} else if ("false".startsWith(argumentInput)) {
|
||||
return Stream.of("false");
|
||||
}
|
||||
// no valid input anymore
|
||||
return Stream.empty();
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
private static boolean isDouble(String input) {
|
||||
boolean point = false;
|
||||
for (char c : input.toCharArray()) {
|
||||
|
Reference in New Issue
Block a user