diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/CachedBukkitAdapter.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/CachedBukkitAdapter.java index 76e0392d7..dd2a862ad 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/CachedBukkitAdapter.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/CachedBukkitAdapter.java @@ -48,7 +48,7 @@ public abstract class CachedBukkitAdapter implements IBukkitAdapter { @Override public ItemType asItemType(Material material) { try { - return ItemTypes.get(itemTypes[material.ordinal()]); + return ItemTypes.get(material.getKey().getKey()); } catch (NullPointerException e) { if (init()) return asItemType(material); return ItemTypes.get(itemTypes[material.ordinal()]); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandArgParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandArgParser.java index c7ce23311..07e878068 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandArgParser.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/internal/command/CommandArgParser.java @@ -31,6 +31,10 @@ import java.util.stream.Stream; public class CommandArgParser { + public static CommandArgParser forArgString(String argString) { + return new CommandArgParser(spaceSplit(argString)); + } + public static ImmutableList spaceSplit(String string) { ImmutableList.Builder result = ImmutableList.builder(); int index = 0; @@ -67,16 +71,28 @@ public class CommandArgParser { handleQuote(nextPart); } } + if (currentArg.size() > 0) { + finishArg(); // force finish "hanging" args + } return args.build(); } private void handleNormal(Substring part) { - if (part.getSubstring().startsWith("\"")) { - state = State.QUOTE; - currentArg.add(Substring.wrap( - part.getSubstring().substring(1), - part.getStart(), part.getEnd() - )); + final String strPart = part.getSubstring(); + if (strPart.startsWith("\"")) { + if (strPart.endsWith("\"") && strPart.length() > 1) { + currentArg.add(Substring.wrap( + strPart.substring(1, strPart.length() - 1), + part.getStart() + 1, part.getEnd() - 1 + )); + finishArg(); + } else { + state = State.QUOTE; + currentArg.add(Substring.wrap( + strPart.substring(1), + part.getStart() + 1, part.getEnd() + )); + } } else { currentArg.add(part); finishArg(); @@ -88,7 +104,7 @@ public class CommandArgParser { state = State.NORMAL; currentArg.add(Substring.wrap( part.getSubstring().substring(0, part.getSubstring().length() - 1), - part.getStart(), part.getEnd() + part.getStart(), part.getEnd() - 1 )); finishArg(); } else { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemTypes.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemTypes.java index 93b1e8d33..857c42a41 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemTypes.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemTypes.java @@ -232,7 +232,7 @@ public final class ItemTypes { @Nullable public static final ItemType CYAN_WOOL = get("minecraft:cyan_wool"); @Nullable public static final ItemType DAMAGED_ANVIL = get("minecraft:damaged_anvil"); @Nullable public static final ItemType DANDELION = get("minecraft:dandelion"); - @Deprecated @Nullable public static final ItemType DANDELION_YELLOW = Optional.ofNullable(get("minecraft:dandelion_yellow")).orElseGet(() -> (get("minecraft:yellow_dye"))); + @Deprecated @Nullable public static final ItemType DANDELION_YELLOW = Optional.ofNullable(get("minecraft:dandelion_yellow")).orElseGet(() -> get("minecraft:yellow_dye")); @Nullable public static final ItemType DARK_OAK_BOAT = get("minecraft:dark_oak_boat"); @Nullable public static final ItemType DARK_OAK_BUTTON = get("minecraft:dark_oak_button"); @Nullable public static final ItemType DARK_OAK_DOOR = get("minecraft:dark_oak_door"); @@ -730,7 +730,7 @@ public final class ItemTypes { @Nullable public static final ItemType REPEATER = get("minecraft:repeater"); @Nullable public static final ItemType REPEATING_COMMAND_BLOCK = get("minecraft:repeating_command_block"); @Nullable public static final ItemType ROSE_BUSH = get("minecraft:rose_bush"); - @Deprecated @Nullable public static final ItemType ROSE_RED = Optional.ofNullable(get("minecraft:rose_red")).orElseGet(() -> (get("minecraft:red_dye"))); + @Deprecated @Nullable public static final ItemType ROSE_RED = Optional.ofNullable(get("minecraft:rose_red")).orElseGet(() -> get("minecraft:red_dye")); @Nullable public static final ItemType ROTTEN_FLESH = get("minecraft:rotten_flesh"); @Nullable public static final ItemType SADDLE = get("minecraft:saddle"); @Nullable public static final ItemType SALMON = get("minecraft:salmon"); @@ -752,7 +752,7 @@ public final class ItemTypes { @Nullable public static final ItemType SHULKER_BOX = get("minecraft:shulker_box"); @Nullable public static final ItemType SHULKER_SHELL = get("minecraft:shulker_shell"); @Nullable public static final ItemType SHULKER_SPAWN_EGG = get("minecraft:shulker_spawn_egg"); - @Deprecated @Nullable public static final ItemType SIGN = Optional.ofNullable(get("minecraft:sign")).orElseGet(() -> (get("minecraft:oak_sign"))); + @Deprecated @Nullable public static final ItemType SIGN = Optional.ofNullable(get("minecraft:sign")).orElseGet(() -> get("minecraft:oak_sign")); @Nullable public static final ItemType SILVERFISH_SPAWN_EGG = get("minecraft:silverfish_spawn_egg"); @Nullable public static final ItemType SKELETON_HORSE_SPAWN_EGG = get("minecraft:skeleton_horse_spawn_egg"); @Nullable public static final ItemType SKELETON_SKULL = get("minecraft:skeleton_skull"); @@ -929,12 +929,12 @@ public final class ItemTypes { return get(input); } - public static @Nullable ItemType get(final String id) { + public static @Nullable ItemType get(String id) { return ItemType.REGISTRY.get(id); } @Deprecated - public static ItemType get(final int ordinal) { + public static ItemType get(int ordinal) { return ItemType.REGISTRY.getByInternalId(ordinal); } diff --git a/worldedit-core/src/test/java/com/sk89q/minecraft/util/commands/CommandContextTest.java b/worldedit-core/src/test/java/com/sk89q/minecraft/util/commands/CommandContextTest.java index 1a010265b..19bd552ec 100644 --- a/worldedit-core/src/test/java/com/sk89q/minecraft/util/commands/CommandContextTest.java +++ b/worldedit-core/src/test/java/com/sk89q/minecraft/util/commands/CommandContextTest.java @@ -54,7 +54,7 @@ public class CommandContextTest { public void testInvalidFlags() { final String failingCommand = "herpderp -opw testers"; assertThrows(CommandException.class, () -> { - new CommandContext(failingCommand, new HashSet<>(Arrays.asList('o', 'w'))); + new CommandContext(failingCommand, new HashSet<>(Arrays.asList('o', 'w'))); }); } diff --git a/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java b/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java index f18ec27f4..0c2fb8843 100644 --- a/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java +++ b/worldedit-core/src/test/java/com/sk89q/worldedit/extent/transform/BlockTransformExtentTest.java @@ -24,9 +24,9 @@ import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.world.block.BlockType; import java.util.HashSet; import java.util.Set; -import org.junit.Test; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; @Disabled("A platform is currently required to get properties, preventing this test.") public class BlockTransformExtentTest { @@ -37,7 +37,7 @@ public class BlockTransformExtentTest { @BeforeEach public void setUp() { -// BlockType.REGISTRY.register("worldedit:test", new BlockType("worldedit:test")); + //BlockType.REGISTRY.register("worldedit:test", new BlockType("worldedit:test")); } @Test diff --git a/worldedit-core/src/test/java/com/sk89q/worldedit/internal/command/CommandArgParserTest.java b/worldedit-core/src/test/java/com/sk89q/worldedit/internal/command/CommandArgParserTest.java new file mode 100644 index 000000000..632e1219b --- /dev/null +++ b/worldedit-core/src/test/java/com/sk89q/worldedit/internal/command/CommandArgParserTest.java @@ -0,0 +1,58 @@ +/* + * WorldEdit, a Minecraft world manipulation toolkit + * Copyright (C) sk89q + * 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 . + */ + +package com.sk89q.worldedit.internal.command; + +import com.google.common.collect.ImmutableList; +import com.sk89q.worldedit.internal.util.Substring; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CommandArgParserTest { + + private static List argParse(String s) { + return CommandArgParser.forArgString(s).parseArgs().collect(Collectors.toList()); + } + + @Test + void testArgumentParsing() { + assertEquals(ImmutableList.of( + Substring.wrap("", 0, 0) + ), argParse("")); + assertEquals(ImmutableList.of( + Substring.wrap("ab", 0, 2) + ), argParse("ab")); + assertEquals(ImmutableList.of( + Substring.wrap("", 0, 0), + Substring.wrap("", 1, 1) + ), argParse(" ")); + assertEquals(ImmutableList.of( + Substring.wrap("a", 0, 1), + Substring.wrap("", 2, 2) + ), argParse("a ")); + assertEquals(ImmutableList.of( + Substring.wrap("a", 0, 1), + Substring.wrap("b", 2, 3) + ), argParse("a b")); + } +} diff --git a/worldedit-core/src/test/java/com/sk89q/worldedit/util/LocationTest.java b/worldedit-core/src/test/java/com/sk89q/worldedit/util/LocationTest.java index 0dfd618df..9330bf513 100644 --- a/worldedit-core/src/test/java/com/sk89q/worldedit/util/LocationTest.java +++ b/worldedit-core/src/test/java/com/sk89q/worldedit/util/LocationTest.java @@ -19,12 +19,12 @@ package com.sk89q.worldedit.util; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.world.World; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * Tests {@link Location}.