Skip to content

Commit a33e234

Browse files
SirYwellme4502
andauthored
Address more getSuggestions deprecations (#3277)
* Allow factory suggestions to have parser context (#2236) (cherry picked from commit 98fd5dc) * Add property suggestions for hand,offhand,pos1 patterns (#2269) (cherry picked from commit d960fa2) * Fix getSuggestions deprecations in FAWE code --------- Co-authored-by: Maddy Miller <[email protected]>
1 parent 4165498 commit a33e234

File tree

12 files changed

+59
-26
lines changed

12 files changed

+59
-26
lines changed

worldedit-core/src/main/java/com/fastasyncworldedit/core/extension/factory/parser/RichParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public List<String> getMatchedAliases() {
9292
}
9393

9494
@Override
95-
public Stream<String> getSuggestions(String input) {
95+
public Stream<String> getSuggestions(String input, ParserContext context) {
9696
return Arrays.stream(this.prefixes)
9797
.filter(validPrefix(input))
9898
.flatMap(extractArguments(input, new ParserContext()));

worldedit-core/src/main/java/com/fastasyncworldedit/core/extension/factory/parser/pattern/BiomePatternParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public Pattern parseFromInput(String input, ParserContext context) throws InputP
4545

4646
// overridden to provide $<biome> too
4747
@Override
48-
public Stream<String> getSuggestions(String input) {
48+
public Stream<String> getSuggestions(String input, ParserContext context) {
4949
if (input.startsWith(BIOME_PREFIX)) {
5050
return BiomeType.REGISTRY.getSuggestions(input.substring(1)).map(biome -> BIOME_PREFIX + biome);
5151
} else {
52-
return super.getSuggestions(input);
52+
return super.getSuggestions(input, context);
5353
}
5454
}
5555

worldedit-core/src/main/java/com/fastasyncworldedit/core/extension/factory/parser/transform/RandomTransformParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public RandomTransformParser(WorldEdit worldEdit) {
2323
}
2424

2525
@Override
26-
public Stream<String> getSuggestions(String input) {
26+
public Stream<String> getSuggestions(String input, ParserContext context) {
2727
if (input.isEmpty()) {
2828
return Stream.empty();
2929
}
@@ -36,7 +36,7 @@ public Stream<String> getSuggestions(String input) {
3636
builder.append(split.get(i)).append(',');
3737
}
3838
String previous = builder.toString();
39-
return worldEdit.getTransformFactory().getSuggestions(split.get(split.size() - 1)).stream()
39+
return worldEdit.getTransformFactory().getSuggestions(split.getLast(), context).stream()
4040
.map(s -> previous + s);
4141
}
4242

worldedit-core/src/main/java/com/sk89q/worldedit/command/util/SuggestionHelper.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ public static Stream<String> getBlockCategorySuggestions(String tag, boolean all
7272
return Stream.empty();
7373
}
7474

75-
public static Stream<String> getBlockPropertySuggestions(String blockType, String props) {
76-
BlockType type = BlockTypes.get(blockType.toLowerCase(Locale.ROOT));
75+
public static Stream<String> getBlockPropertySuggestions(String blockTypeString, BlockType type, String props) {
7776
if (type == null) {
7877
return Stream.empty();
7978
}
@@ -90,7 +89,7 @@ public static Stream<String> getBlockPropertySuggestions(String blockType, Strin
9089
// suggest for next property
9190
String previous = Arrays.stream(propParts, 0, propParts.length - 1).collect(Collectors.joining(","))
9291
+ (propParts.length == 1 ? "" : ",");
93-
String lastValidInput = (blockType + "[" + previous).toLowerCase(Locale.ROOT);
92+
String lastValidInput = (blockTypeString + "[" + previous).toLowerCase(Locale.ROOT);
9493
if (propVal.length == 1) {
9594
// only property, no value yet
9695
final List<? extends Property<?>> matchingProps = propertyMap.entrySet().stream()

worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.google.common.collect.Maps;
3232
import com.sk89q.jnbt.CompoundTag;
3333
import com.sk89q.worldedit.IncompleteRegionException;
34+
import com.sk89q.worldedit.LocalSession;
3435
import com.sk89q.worldedit.NotABlockException;
3536
import com.sk89q.worldedit.WorldEdit;
3637
import com.sk89q.worldedit.WorldEditException;
@@ -319,23 +320,52 @@ public static Map<Property<?>, Object> parseProperties(
319320
}
320321

321322
@Override
322-
public Stream<String> getSuggestions(String input) {
323+
public Stream<String> getSuggestions(String input, ParserContext context) {
323324
final int idx = input.lastIndexOf('[');
324325
if (idx < 0) {
325326
return SuggestionHelper.getNamespacedRegistrySuggestions(BlockType.REGISTRY, input);
326327
}
327328
String blockType = input.substring(0, idx);
328329
BlockType type = BlockTypes.get(blockType.toLowerCase(Locale.ROOT));
329330
if (type == null) {
330-
return Stream.empty();
331+
var lowerBlockType = blockType.toLowerCase(Locale.ROOT);
332+
switch (lowerBlockType) {
333+
case "hand", "offhand" -> {
334+
var actor = context.getActor();
335+
if (actor instanceof Player player) {
336+
var itemInHand = player.getItemInHand(lowerBlockType.equals("hand") ? HandSide.MAIN_HAND : HandSide.OFF_HAND);
337+
if (itemInHand.getType().hasBlockType()) {
338+
type = itemInHand.getType().getBlockType();
339+
}
340+
}
341+
}
342+
case "pos1" -> {
343+
// Get the block type from the "primary position"
344+
World world = context.getWorld();
345+
LocalSession session = context.getSession();
346+
if (world != null && session != null) {
347+
try {
348+
BlockVector3 primaryPosition = session.getRegionSelector(world).getPrimaryPosition();
349+
type = world.getBlock(primaryPosition).getBlockType();
350+
} catch (IncompleteRegionException ignored) {
351+
}
352+
}
353+
}
354+
default -> {
355+
}
356+
}
357+
358+
if (type == null) {
359+
return Stream.empty();
360+
}
331361
}
332362

333363
String props = input.substring(idx + 1);
334364
if (props.isEmpty()) {
335365
return type.getProperties().stream().map(p -> input + p.getName() + "=");
336366
}
337367

338-
return SuggestionHelper.getBlockPropertySuggestions(blockType, props);
368+
return SuggestionHelper.getBlockPropertySuggestions(blockType, type, props);
339369
}
340370

341371
@Nonnull

worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/BlocksMaskParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ public BlocksMaskParser(WorldEdit worldEdit) {
4040
}
4141

4242
@Override
43-
public Stream<String> getSuggestions(String input) {
44-
return worldEdit.getBlockFactory().getSuggestions(input).stream();
43+
public Stream<String> getSuggestions(String input, ParserContext context) {
44+
return worldEdit.getBlockFactory().getSuggestions(input, context).stream();
4545
}
4646

4747
@Override

worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/NegateMaskParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ public NegateMaskParser(WorldEdit worldEdit) {
4343
}
4444

4545
@Override
46-
public Stream<String> getSuggestions(String input) {
46+
public Stream<String> getSuggestions(String input, ParserContext context) {
4747
if (input.isEmpty()) {
4848
return Stream.of("!");
4949
}
5050
if (input.charAt(0) != '!') {
5151
return Stream.empty();
5252
}
53-
return worldEdit.getMaskFactory().getSuggestions(input.substring(1)).stream().map(s -> "!" + s);
53+
return worldEdit.getMaskFactory().getSuggestions(input.substring(1), context).stream().map(s -> "!" + s);
5454
}
5555

5656
@Override

worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/mask/OffsetMaskParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ public OffsetMaskParser(WorldEdit worldEdit) {
4444
}
4545

4646
@Override
47-
public Stream<String> getSuggestions(String input) {
47+
public Stream<String> getSuggestions(String input, ParserContext context) {
4848
if (input.isEmpty()) {
4949
return Stream.of(">", "<");
5050
}
5151
final char firstChar = input.charAt(0);
5252
if (firstChar != '>' && firstChar != '<') {
5353
return Stream.empty();
5454
}
55-
return worldEdit.getMaskFactory().getSuggestions(input.substring(1)).stream().map(s -> firstChar + s);
55+
return worldEdit.getMaskFactory().getSuggestions(input.substring(1), context).stream().map(s -> firstChar + s);
5656
}
5757

5858
@Override

worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/pattern/RandomPatternParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public RandomPatternParser(WorldEdit worldEdit) {
2727
}
2828

2929
@Override
30-
public Stream<String> getSuggestions(String input) {
30+
public Stream<String> getSuggestions(String input, ParserContext context) {
3131
//FAWE start
3232
List<String> patterns = StringUtil.split(input, ',', '[', ']');
3333
if (patterns.isEmpty()) {
@@ -46,7 +46,7 @@ public Stream<String> getSuggestions(String input) {
4646
}
4747
String previous = patterns.size() == 1 ? "" : String.join(",", patterns.subList(0, patterns.size() - 1)) + ",";
4848
String prefix = previous + (percent == null ? "" : percent + "%");
49-
final List<String> innerSuggestions = worldEdit.getPatternFactory().getSuggestions(token);
49+
final List<String> innerSuggestions = worldEdit.getPatternFactory().getSuggestions(token, context);
5050
return innerSuggestions.stream().map(s -> prefix + s);
5151
}
5252

worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/pattern/RandomStatePatternParser.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ public RandomStatePatternParser(WorldEdit worldEdit) {
4242
}
4343

4444
@Override
45-
public Stream<String> getSuggestions(String input) {
45+
public Stream<String> getSuggestions(String input, ParserContext context) {
4646
if (input.isEmpty()) {
4747
return Stream.of("*");
4848
}
4949
if (!input.startsWith("*")) {
5050
return Stream.empty();
5151
}
5252

53-
return worldEdit.getBlockFactory().getSuggestions(input.substring(1)).stream().map(s -> "*" + s);
53+
return worldEdit.getBlockFactory().getSuggestions(input.substring(1), context).stream().map(s -> "*" + s);
5454
}
5555

5656
@Override

0 commit comments

Comments
 (0)