Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
import org.enginehub.linbus.stream.exception.NbtParseException;
import org.enginehub.linbus.tree.LinCompoundTag;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
Expand Down Expand Up @@ -206,7 +207,36 @@ private static Map<Property<?>, Object> parseProperties(BlockType type, String[]
public Stream<String> getSuggestions(String input, ParserContext context) {
final int idx = input.lastIndexOf('[');
if (idx < 0) {
return SuggestionHelper.getNamespacedRegistrySuggestions(BlockType.REGISTRY, input);
ArrayList<String> playerSpecificBlocks = new ArrayList<>();

var actor = context.getActor();
if (actor instanceof Player player) {
try {
player.getBlockInHand(HandSide.MAIN_HAND);
playerSpecificBlocks.add("hand");
} catch (WorldEditException ignored) {
}

try {
player.getBlockInHand(HandSide.OFF_HAND);
playerSpecificBlocks.add("offhand");
} catch (WorldEditException ignored) {
}

World world = context.getWorld();
LocalSession session = context.getSession();
if (world != null && session != null) {
try {
session.getRegionSelector(world).getPrimaryPosition();
playerSpecificBlocks.add("pos1");
} catch (IncompleteRegionException ignored) {
}
}
}
return Stream.concat(
playerSpecificBlocks.stream(),
SuggestionHelper.getNamespacedRegistrySuggestions(BlockType.REGISTRY, input)
);
}
String blockType = input.substring(0, idx);
BlockType type = BlockTypes.get(blockType.toLowerCase(Locale.ROOT));
Expand Down