fix: avoid recursive LegacyMapper initialization (#1922)

This commit is contained in:
Hannes Greule 2022-08-27 16:48:54 +02:00 committed by GitHub
parent dc2db5f07f
commit a6a0b5eb66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 7 deletions

View File

@ -455,7 +455,7 @@ public class DefaultBlockParser extends InputParser<BaseBlock> {
state = item.getType().getBlockType().getDefaultState(); state = item.getType().getBlockType().getDefaultState();
nbt = item.getNbtData(); nbt = item.getNbtData();
} else { } else {
BlockType type = BlockTypes.parse(typeString.toLowerCase(Locale.ROOT)); BlockType type = BlockTypes.parse(typeString.toLowerCase(Locale.ROOT), context);
if (type != null) { if (type != null) {
state = type.getDefaultState(); state = type.getDefaultState();

View File

@ -23,6 +23,7 @@ import com.fastasyncworldedit.core.command.SuggestInputParseException;
import com.fastasyncworldedit.core.util.JoinedCharSequence; import com.fastasyncworldedit.core.util.JoinedCharSequence;
import com.fastasyncworldedit.core.util.StringMan; import com.fastasyncworldedit.core.util.StringMan;
import com.sk89q.worldedit.extension.input.InputParseException; import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
import com.sk89q.worldedit.world.registry.LegacyMapper; import com.sk89q.worldedit.world.registry.LegacyMapper;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -1948,6 +1949,9 @@ public final class BlockTypes {
*/ */
public static BlockType parse(final String type) throws InputParseException { public static BlockType parse(final String type) throws InputParseException {
return parse(type, new ParserContext());
}
public static BlockType parse(final String type, final ParserContext context) throws InputParseException {
final String inputLower = type.toLowerCase(Locale.ROOT); final String inputLower = type.toLowerCase(Locale.ROOT);
String input = inputLower; String input = inputLower;
@ -1958,13 +1962,14 @@ public final class BlockTypes {
if (result != null) { if (result != null) {
return result; return result;
} }
if (context.isTryingLegacy()) {
try { try {
BlockStateHolder<BlockState> block = LegacyMapper.getInstance().getBlockFromLegacy(input); BlockStateHolder<BlockState> block = LegacyMapper.getInstance().getBlockFromLegacy(input);
if (block != null) { if (block != null) {
return block.getBlockType(); return block.getBlockType();
}
} catch (NumberFormatException | IndexOutOfBoundsException ignored) {
} }
} catch (NumberFormatException | IndexOutOfBoundsException ignored) {
} }
throw new SuggestInputParseException("Does not match a valid block type: " + inputLower, inputLower, () -> Stream.of( throw new SuggestInputParseException("Does not match a valid block type: " + inputLower, inputLower, () -> Stream.of(