Skip to content

Commit 8aa6c1d

Browse files
committed
i hate command arguments
1 parent 5f875ae commit 8aa6c1d

11 files changed

Lines changed: 100 additions & 33 deletions

autodocs/autodoc.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
--#region Information
44
-- GENERATED AUTODOC
5-
-- Generated: 2026-02-05T14:40:12.080874
5+
-- Generated: 2026-02-06T12:35:35.079254700
66
-- Luafy Version: 2.0.0
77
-- Format: Lua LS library file
88
--#endregion
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.diamond.luafy.command;
2+
3+
import com.mojang.brigadier.context.CommandContext;
4+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
5+
import com.mojang.brigadier.suggestion.SuggestionProvider;
6+
import com.mojang.brigadier.suggestion.Suggestions;
7+
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
8+
import net.minecraft.commands.CommandSourceStack;
9+
import net.minecraft.core.Registry;
10+
import net.minecraft.resources.ResourceKey;
11+
12+
import java.util.concurrent.CompletableFuture;
13+
14+
public record RegistryKeySuggestionProvider<T>(ResourceKey<Registry<T>> registry) implements SuggestionProvider<CommandSourceStack> {
15+
16+
@Override
17+
public CompletableFuture<Suggestions> getSuggestions(CommandContext<CommandSourceStack> ctx, SuggestionsBuilder builder) throws CommandSyntaxException {
18+
19+
var reg = ctx.getSource().registryAccess().getOrThrow(registry).value();
20+
for (var thing : reg) {
21+
System.out.println(thing.toString() + " - " + reg.getKey(thing).toString());
22+
builder.suggest(reg.getKey(thing).toString());
23+
}
24+
25+
// Lock the suggestions after we've modified them.
26+
return builder.buildFuture();
27+
}
28+
}

src/main/java/dev/diamond/luafy/command/RegistrySuggestionProvider.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,15 @@
99
import net.minecraft.core.Registry;
1010
import net.minecraft.resources.ResourceKey;
1111

12-
import java.util.List;
1312
import java.util.concurrent.CompletableFuture;
1413

15-
public record RegistrySuggestionProvider<T>(ResourceKey<Registry<T>> registry) implements SuggestionProvider<CommandSourceStack> {
14+
public record RegistrySuggestionProvider<T>(Registry<T> registry) implements SuggestionProvider<CommandSourceStack> {
1615

1716
@Override
1817
public CompletableFuture<Suggestions> getSuggestions(CommandContext<CommandSourceStack> ctx, SuggestionsBuilder builder) throws CommandSyntaxException {
1918

20-
var reg = ctx.getSource().registryAccess().getOrThrow(registry).value();
21-
for (var thing : reg) {
22-
builder.suggest(reg.getKey(thing).toString());
19+
for (var thing : registry) {
20+
builder.suggest(registry.getKey(thing).toString());
2321
}
2422

2523
// Lock the suggestions after we've modified them.

src/main/java/dev/diamond/luafy/registry/LuafyRegistries.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
public class LuafyRegistries {
1616

1717
public static ResourceKey<Registry<ScriptPlugin>> SCRIPT_PLUGINS_KEY;
18-
public static ResourceKey<Registry<Argtype<?, ?>>> SERIALIZABLE_ARGTYPES_KEY;
18+
public static ResourceKey<Registry<Argtype<?, ?>>> ARGTYPES_KEY;
1919
public static ResourceKey<Registry<ScriptEvent<?>>> SCRIPT_EVENTS_KEY;
2020
public static ResourceKey<Registry<AbstractScriptObject<?>>> SCRIPT_OBJECTS_KEY;
2121
public static ResourceKey<Registry<StringAlias<?>>> STRING_ALIASES_KEY;
@@ -41,8 +41,8 @@ public static void register() {
4141
SCRIPT_PLUGINS_KEY = of("script_plugins");
4242
SCRIPT_PLUGINS = create(SCRIPT_PLUGINS_KEY);
4343

44-
SERIALIZABLE_ARGTYPES_KEY = of("serializable_argtypes");
45-
ARGTYPES = create(SERIALIZABLE_ARGTYPES_KEY);
44+
ARGTYPES_KEY = of("serializable_argtypes");
45+
ARGTYPES = create(ARGTYPES_KEY);
4646

4747
SCRIPT_EVENTS_KEY = of("script_events");
4848
SCRIPT_EVENTS = create(SCRIPT_EVENTS_KEY);

src/main/java/dev/diamond/luafy/registry/StringAliases.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import dev.diamond.luafy.Luafy;
44
import dev.diamond.luafy.script.event.ScriptEvent;
5-
import dev.diamond.luafy.script.type.Argtype;
6-
import dev.diamond.luafy.script.type.IdentifierStringAlias;
7-
import dev.diamond.luafy.script.type.RegistryIdentifierStringAlias;
8-
import dev.diamond.luafy.script.type.StringAlias;
5+
import dev.diamond.luafy.script.type.*;
96
import net.minecraft.core.Registry;
107
import net.minecraft.core.registries.Registries;
118
import net.minecraft.resources.Identifier;
@@ -21,16 +18,16 @@ public class StringAliases {
2118

2219
public static final IdentifierStringAlias IDENTIFIER = new IdentifierStringAlias();
2320

24-
public static final RegistryIdentifierStringAlias<Argtype<?, ?>> REGISTRY_ARGTYPE = new RegistryIdentifierStringAlias<>(LuafyRegistries.SERIALIZABLE_ARGTYPES_KEY, "Argtype");
25-
public static final RegistryIdentifierStringAlias<ScriptEvent<?>> REGISTRY_SCRIPT_EVENT = new RegistryIdentifierStringAlias<>(LuafyRegistries.SCRIPT_EVENTS_KEY, "ScriptEvent");
21+
public static final RegistryIdentifierStringAlias<Argtype<?, ?>> REGISTRY_ARGTYPE = new RegistryIdentifierStringAlias<>(LuafyRegistries.ARGTYPES, "Argtype");
22+
public static final RegistryIdentifierStringAlias<ScriptEvent<?>> REGISTRY_SCRIPT_EVENT = new RegistryIdentifierStringAlias<>(LuafyRegistries.SCRIPT_EVENTS, "ScriptEvent");
2623

27-
public static final RegistryIdentifierStringAlias<Item> REGISTRY_ITEM = new RegistryIdentifierStringAlias<>(Registries.ITEM, "Item");
28-
public static final RegistryIdentifierStringAlias<Block> REGISTRY_BLOCK = new RegistryIdentifierStringAlias<>(Registries.BLOCK, "Block");
29-
public static final RegistryIdentifierStringAlias<EntityType<?>> REGISTRY_ENTITY_TYPE = new RegistryIdentifierStringAlias<>(Registries.ENTITY_TYPE, "EntityType");
30-
public static final RegistryIdentifierStringAlias<Biome> REGISTRY_BIOME = new RegistryIdentifierStringAlias<>(Registries.BIOME, "Biome");
31-
public static final RegistryIdentifierStringAlias<Level> REGISTRY_DIMENSION = new RegistryIdentifierStringAlias<>(Registries.DIMENSION, "Dimension");
32-
public static final RegistryIdentifierStringAlias<Enchantment> REGISTRY_ENCHANTMENT = new RegistryIdentifierStringAlias<>(Registries.ENCHANTMENT, "Enchantment");
33-
public static final RegistryIdentifierStringAlias<MobEffect> REGISTRY_EFFECT = new RegistryIdentifierStringAlias<>(Registries.MOB_EFFECT, "StatusEffect");
24+
public static final RegistryKeyIdentifierStringAlias<Item> REGISTRY_ITEM = new RegistryKeyIdentifierStringAlias<>(Registries.ITEM, "Item");
25+
public static final RegistryKeyIdentifierStringAlias<Block> REGISTRY_BLOCK = new RegistryKeyIdentifierStringAlias<>(Registries.BLOCK, "Block");
26+
public static final RegistryKeyIdentifierStringAlias<EntityType<?>> REGISTRY_ENTITY_TYPE = new RegistryKeyIdentifierStringAlias<>(Registries.ENTITY_TYPE, "EntityType");
27+
public static final RegistryKeyIdentifierStringAlias<Biome> REGISTRY_BIOME = new RegistryKeyIdentifierStringAlias<>(Registries.BIOME, "Biome");
28+
public static final RegistryKeyIdentifierStringAlias<Level> REGISTRY_DIMENSION = new RegistryKeyIdentifierStringAlias<>(Registries.DIMENSION, "Dimension");
29+
public static final RegistryKeyIdentifierStringAlias<Enchantment> REGISTRY_ENCHANTMENT = new RegistryKeyIdentifierStringAlias<>(Registries.ENCHANTMENT, "Enchantment");
30+
public static final RegistryKeyIdentifierStringAlias<MobEffect> REGISTRY_EFFECT = new RegistryKeyIdentifierStringAlias<>(Registries.MOB_EFFECT, "StatusEffect");
3431

3532

3633
public static void registerAll() {

src/main/java/dev/diamond/luafy/script/type/RegistryIdentifierStringAlias.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.diamond.luafy.script.type;
22

33
import com.mojang.brigadier.suggestion.SuggestionProvider;
4+
import dev.diamond.luafy.command.RegistryKeySuggestionProvider;
45
import dev.diamond.luafy.command.RegistrySuggestionProvider;
56
import dev.diamond.luafy.script.LuaScript;
67
import net.minecraft.commands.CommandSourceStack;
@@ -13,10 +14,10 @@
1314

1415
public class RegistryIdentifierStringAlias<T> extends StringAlias<T> {
1516

16-
private final ResourceKey<Registry<T>> registry;
17+
private final Registry<T> registry;
1718
private final String identifierType;
1819

19-
public RegistryIdentifierStringAlias(ResourceKey<Registry<T>> registry, String identifierType) {
20+
public RegistryIdentifierStringAlias(Registry<T> registry, String identifierType) {
2021
this.registry = registry;
2122
this.identifierType = identifierType;
2223
}
@@ -33,11 +34,11 @@ public Optional<SuggestionProvider<CommandSourceStack>> suggest() {
3334

3435
@Override
3536
public T parse(String s, LuaScript script) {
36-
return script.getRegistry(registry).getValue(Identifier.parse(s));
37+
return registry.getValue(Identifier.parse(s));
3738
}
3839

3940
@Override
4041
public String serialise(T t, LuaScript script) {
41-
return Objects.requireNonNull(script.getRegistry(registry).getKey(t)).toString();
42+
return Objects.requireNonNull(registry.getKey(t)).toString();
4243
}
4344
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dev.diamond.luafy.script.type;
2+
3+
import com.mojang.brigadier.suggestion.SuggestionProvider;
4+
import dev.diamond.luafy.command.RegistryKeySuggestionProvider;
5+
import dev.diamond.luafy.script.LuaScript;
6+
import net.minecraft.commands.CommandSourceStack;
7+
import net.minecraft.core.Registry;
8+
import net.minecraft.resources.Identifier;
9+
import net.minecraft.resources.ResourceKey;
10+
11+
import java.util.Objects;
12+
import java.util.Optional;
13+
14+
public class RegistryKeyIdentifierStringAlias<T> extends StringAlias<T> {
15+
16+
private final ResourceKey<Registry<T>> registry;
17+
private final String identifierType;
18+
19+
public RegistryKeyIdentifierStringAlias(ResourceKey<Registry<T>> registry, String identifierType) {
20+
this.registry = registry;
21+
this.identifierType = identifierType;
22+
}
23+
24+
@Override
25+
public String getArgtypeString() {
26+
return identifierType + "Identifier";
27+
}
28+
29+
@Override
30+
public Optional<SuggestionProvider<CommandSourceStack>> suggest() {
31+
return Optional.of(new RegistryKeySuggestionProvider<>(this.registry));
32+
}
33+
34+
@Override
35+
public T parse(String s, LuaScript script) {
36+
return script.getRegistry(registry).getValue(Identifier.parse(s));
37+
}
38+
39+
@Override
40+
public String serialise(T t, LuaScript script) {
41+
return Objects.requireNonNull(script.getRegistry(registry).getKey(t)).toString();
42+
}
43+
}

src/main/java/dev/diamond/luafy/script/type/StringAlias.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public abstract class StringAlias<T> implements Argtype<LuaString, T> {
1818

1919
@Override
2020
public Optional<ArgumentType<?>> getCommandArgumentType(CommandBuildContext ctx) {
21-
return Optional.of(StringArgumentType.word());
21+
return Optional.of(StringArgumentType.string());
2222
}
2323

2424
@Override

src/main/java/dev/diamond/luafy/script/type/object/game/registry/RegistryBlockScriptObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.mojang.brigadier.arguments.ArgumentType;
44
import com.mojang.brigadier.context.CommandContext;
55
import com.mojang.brigadier.suggestion.SuggestionProvider;
6-
import dev.diamond.luafy.command.RegistrySuggestionProvider;
6+
import dev.diamond.luafy.command.RegistryKeySuggestionProvider;
77
import dev.diamond.luafy.lua.LuaTableBuilder;
88
import dev.diamond.luafy.script.LuaScript;
99
import dev.diamond.luafy.script.type.object.AbstractScriptObject;
@@ -59,6 +59,6 @@ public Optional<LuaTable> parseCommandToLua(CommandContext<CommandSourceStack> c
5959

6060
@Override
6161
public Optional<SuggestionProvider<CommandSourceStack>> suggest() {
62-
return Optional.of(new RegistrySuggestionProvider<>(Registries.BLOCK));
62+
return Optional.of(new RegistryKeySuggestionProvider<>(Registries.BLOCK));
6363
}
6464
}

src/main/java/dev/diamond/luafy/script/type/object/game/registry/RegistryEntityTypeScriptObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.mojang.brigadier.context.CommandContext;
55
import com.mojang.brigadier.suggestion.SuggestionProvider;
66
import dev.diamond.luafy.script.type.Argtypes;
7-
import dev.diamond.luafy.command.RegistrySuggestionProvider;
7+
import dev.diamond.luafy.command.RegistryKeySuggestionProvider;
88
import dev.diamond.luafy.lua.LuaTableBuilder;
99
import dev.diamond.luafy.lua.MetamethodImpl;
1010
import dev.diamond.luafy.registry.ScriptObjects;
@@ -105,6 +105,6 @@ public Optional<LuaTable> parseCommandToLua(CommandContext<CommandSourceStack> c
105105

106106
@Override
107107
public Optional<SuggestionProvider<CommandSourceStack>> suggest() {
108-
return Optional.of(new RegistrySuggestionProvider<>(Registries.ENTITY_TYPE));
108+
return Optional.of(new RegistryKeySuggestionProvider<>(Registries.ENTITY_TYPE));
109109
}
110110
}

0 commit comments

Comments
 (0)