Skip to content

Commit 6e62ba8

Browse files
committed
please work eventually πŸ™
1 parent 6d5d8a2 commit 6e62ba8

14 files changed

Lines changed: 158 additions & 93 deletions

β€Žsrc/main/java/dev/diamond/luafy/lua/ScriptFunction.javaβ€Ž

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import net.minecraft.commands.CommandSourceStack;
66
import org.luaj.vm2.*;
77

8+
import java.util.ArrayList;
9+
import java.util.function.BiFunction;
810
import java.util.function.Function;
911

1012
@FunctionalInterface
@@ -26,107 +28,127 @@ private ArgumentSupplier(Varargs args) {
2628
this.argIdx = 1;
2729
}
2830

29-
public LuaTable getTable(int idx) {
30-
return args.arg(idx).checktable();
31+
private LuaValue idx(int idx) {
32+
return args.arg(idx);
33+
}
34+
private LuaValue next() {
35+
return idx(this.argIdx++);
3136
}
3237

33-
public int getInt(int idx) {
34-
return args.arg(idx).toint();
38+
39+
40+
public LuaTable getTable(LuaValue val, LuaTable def) {
41+
return val.opttable(def);
3542
}
3643

37-
public float getFloat(int idx) {
38-
return args.arg(idx).tofloat();
44+
public int getInt(LuaValue val, int def) {
45+
return val.optint(def);
3946
}
4047

41-
public boolean getBoolean(int idx) {
42-
return args.arg(idx).toboolean();
48+
public float getFloat(LuaValue val, float def) {
49+
return (float) val.optdouble(def);
4350
}
4451

45-
public String getString(int idx) {
46-
return MetamethodImpl.tostring(args.arg(idx));
52+
public boolean getBoolean(LuaValue val, boolean def) {
53+
return val.optboolean(def);
4754
}
4855

49-
public LuaValue getLuaValue(int idx) {
50-
return args.arg(idx);
56+
public String getString(LuaValue val, String def) {
57+
return MetamethodImpl.tostring(val.optstring(LuaString.valueOf(def)));
5158
}
5259

53-
public LuaFunction getFunction(int idx) {
54-
return args.arg(idx).checkfunction();
60+
public LuaValue getLuaValue(LuaValue val, LuaValue def) {
61+
return val.optvalue(def);
62+
}
63+
64+
public LuaFunction getFunction(LuaValue val, LuaFunction def) {
65+
return val.optfunction(def);
66+
}
67+
68+
public <T> T getScriptObject(AbstractScriptObject<T> obj, LuaValue val, CommandSourceStack src, LuaScript script, T def) {
69+
LuaTable table = val.checktable();
70+
if (table.isnil()) {
71+
return def;
72+
} else {
73+
return obj.toThing(table, src, script);
74+
}
5575
}
5676

57-
public <T> T getScriptObject(AbstractScriptObject<T> obj, int idx, CommandSourceStack src, LuaScript script) {
58-
return obj.toThing(getTable(idx), src, script);
77+
public <T> ArrayList<T> getArray(int idx, BiFunction<LuaValue, T, T> getter) {
78+
LuaTable table = getTable(idx);
79+
ArrayList<T> ts = new ArrayList<>();
80+
81+
for (LuaValue key : table.keys()) {
82+
var luaValue = table.get(key);
83+
}
84+
5985
}
6086

6187

6288
public LuaTable nextTable() {
63-
return args.arg(this.argIdx++).checktable();
89+
return getTable(next());
6490
}
6591

6692
public int nextInt() {
67-
return args.arg(this.argIdx++).toint();
93+
return getInt(next());
6894
}
6995

7096
public float nextFloat() {
71-
return args.arg(this.argIdx++).tofloat();
97+
return getFloat(next());
7298
}
7399

74100
public boolean nextBoolean() {
75-
return args.arg(this.argIdx++).toboolean();
101+
return getBoolean(next());
76102
}
77103

78104
public String nextString() {
79-
return MetamethodImpl.tostring(args.arg(this.argIdx++));
105+
return getString(next());
80106
}
81107

82108
public LuaValue nextLuaValue() {
83-
return args.arg(this.argIdx++);
109+
return getLuaValue(next());
84110
}
85111

86112
public LuaFunction nextFunction() {
87-
return args.arg(this.argIdx++).checkfunction();
113+
return getFunction(next());
88114
}
89115

90116
public <T> T nextScriptObject(AbstractScriptObject<T> obj, CommandSourceStack src, LuaScript script) {
91-
return obj.toThing(getTable(this.argIdx++), src, script);
117+
return getScriptObject(obj, next(), src, script);
92118
}
93119

120+
// defaults
94121

95122
public LuaTable nextTable(LuaTable def) {
96-
return args.arg(this.argIdx++).checktable().opttable(def);
123+
return getTable(next(), def);
97124
}
98125

99126
public int nextInt(int def) {
100-
return args.arg(this.argIdx++).optint(def);
127+
return getInt(next(), def);
101128
}
102129

103130
public float nextFloat(float def) {
104-
return (float) args.arg(this.argIdx++).optdouble(def);
131+
return getFloat(next(), def);
105132
}
106133

107134
public boolean nextBoolean(boolean def) {
108-
return args.arg(this.argIdx++).optboolean(def);
135+
return getBoolean(next(), def);
109136
}
110137

111138
public String nextString(String def) {
112-
return MetamethodImpl.tostring(args.arg(this.argIdx++).optstring(LuaString.valueOf(def)));
139+
return getString(next(), def);
113140
}
114141

115142
public LuaValue nextLuaValue(LuaValue def) {
116-
return args.arg(this.argIdx++).optvalue(def);
143+
return getLuaValue(next(), def);
117144
}
118145

119146
public LuaFunction nextFunction(LuaFunction def) {
120-
return args.arg(this.argIdx++).optfunction(def);
147+
return getFunction(next(), def);
121148
}
122149

123150
public <T> T nextScriptObject(AbstractScriptObject<T> obj, CommandSourceStack src, LuaScript script, T def) {
124-
LuaTable table = getTable(this.argIdx++);
125-
if (table.isnil()) {
126-
return def;
127-
} else {
128-
return obj.toThing(table, src, script);
129-
}
151+
return getScriptObject(obj, next(), src, script, def);
130152
}
131153

132154
}

β€Žsrc/main/java/dev/diamond/luafy/registry/ScriptObjects.javaβ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import dev.diamond.luafy.script.object.game.RegistryBlockScriptObject;
66
import dev.diamond.luafy.script.object.game.RegistryItemScriptObject;
77
import dev.diamond.luafy.script.object.game.ItemStackScriptObject;
8+
import dev.diamond.luafy.script.object.game.TextComponentScriptObject;
89
import dev.diamond.luafy.script.object.game.entity.EntityScriptObject;
910
import dev.diamond.luafy.script.object.game.entity.LivingEntityScriptObject;
1011
import dev.diamond.luafy.script.object.game.entity.PlayerScriptObject;
@@ -26,6 +27,7 @@ public class ScriptObjects {
2627
public static RegistryBlockScriptObject BLOCK = new RegistryBlockScriptObject();
2728
public static RegistryItemScriptObject ITEM = new RegistryItemScriptObject();
2829
public static ItemStackScriptObject ITEM_STACK = new ItemStackScriptObject();
30+
public static TextComponentScriptObject TEXT_COMPONENT = new TextComponentScriptObject();
2931

3032
public static void registerAll() {
3133
Registry.register(LuafyRegistries.SCRIPT_OBJECTS, Luafy.id("vec3d"), VEC3D);
@@ -39,6 +41,7 @@ public static void registerAll() {
3941
Registry.register(LuafyRegistries.SCRIPT_OBJECTS, Luafy.id("block"), BLOCK);
4042
Registry.register(LuafyRegistries.SCRIPT_OBJECTS, Luafy.id("item"), ITEM);
4143
Registry.register(LuafyRegistries.SCRIPT_OBJECTS, Luafy.id("item_stack"), ITEM_STACK);
44+
Registry.register(LuafyRegistries.SCRIPT_OBJECTS, Luafy.id("text_component"), TEXT_COMPONENT);
4245

4346
// this has to be deferred so that objects can reference each other in their docs
4447
AbstractScriptObject.buildAllDocs();

β€Žsrc/main/java/dev/diamond/luafy/script/LuaScript.javaβ€Ž

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ public class LuaScript {
2424
private String compilationError;
2525
private CommandSourceStack src;
2626
private final HashMap<Integer, Object> unserializableDataReferences;
27-
private int nextUnserializableDataReferenceIndex;
27+
private int nextUnserializableDataReferencePtr;
2828

2929
public LuaScript(String source) {
3030
this.globals = new Globals();
3131
injectSources();
3232

3333
this.unserializableDataReferences = new HashMap<>();
34-
this.nextUnserializableDataReferenceIndex = 0;
34+
this.nextUnserializableDataReferencePtr = 0;
3535

3636
try {
3737
this.script = this.globals.load(source);
@@ -43,12 +43,12 @@ public LuaScript(String source) {
4343
}
4444

4545
public int addUnserializableData(Object o) {
46-
unserializableDataReferences.put(nextUnserializableDataReferenceIndex, o);
47-
return nextUnserializableDataReferenceIndex++;
46+
unserializableDataReferences.put(nextUnserializableDataReferencePtr, o);
47+
return nextUnserializableDataReferencePtr++;
4848
}
4949

50-
public <T> T getUnserializableData(int idx, Class<T> clazz) {
51-
return clazz.cast(unserializableDataReferences.get(idx));
50+
public <T> T getUnserializableData(int ptr, Class<T> clazz) {
51+
return clazz.cast(unserializableDataReferences.get(ptr));
5252
}
5353

5454
public void releaseUnserializableData(int idx) {

β€Žsrc/main/java/dev/diamond/luafy/script/object/AbstractScriptObject.javaβ€Ž

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public AbstractScriptObject(String desc, Consumer<ScriptObjectDocBuilder> docBui
3131

3232
public abstract void toTable(T obj, LuaTableBuilder builder, LuaScript script);
3333
public abstract T toThing(LuaTable table, CommandSourceStack src, LuaScript script);
34-
public abstract Class<T> getType();
3534

3635
public Optional<AbstractScriptObject<? super T>> getParentType() {
3736
return Optional.empty();

β€Žsrc/main/java/dev/diamond/luafy/script/object/ModScriptObject.javaβ€Ž

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ public ModContainer toThing(LuaTable table, CommandSourceStack src, LuaScript sc
3434
return FabricLoader.getInstance().getModContainer(table.get(FUNC_MODID).tojstring()).orElseThrow();
3535
}
3636

37-
@Override
38-
public Class<ModContainer> getType() {
39-
return ModContainer.class;
40-
}
41-
4237
@Override
4338
public String getArgtypeString() {
4439
return "Mod";

β€Žsrc/main/java/dev/diamond/luafy/script/object/ScriptResultScriptObject.javaβ€Ž

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,6 @@ public Future<ScriptExecutionResult> toThing(LuaTable table, CommandSourceStack
8484
return script.getUnserializableData(idx, DummyFutureLuaScriptResultWrapper.class);
8585
}
8686

87-
@Override
88-
public Class<Future<ScriptExecutionResult>> getType() {
89-
// HOLY CURSED
90-
return (Class<Future<ScriptExecutionResult>>) DummyFutureLuaScriptResultWrapper.class.getInterfaces()[0];
91-
}
92-
9387
@Override
9488
public String getArgtypeString() {
9589
return "ScriptResult";

β€Žsrc/main/java/dev/diamond/luafy/script/object/Vec3dScriptObject.javaβ€Ž

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@ public Vec3 toThing(LuaTable table, CommandSourceStack src, LuaScript script) {
3838
return new Vec3(table.get(PROP_X).tofloat(), table.get(PROP_Y).tofloat(), table.get(PROP_Z).tofloat());
3939
}
4040

41-
@Override
42-
public Class<Vec3> getType() {
43-
return Vec3.class;
44-
}
45-
4641
@Override
4742
public String getArgtypeString() {
4843
return "Vec3d";

β€Žsrc/main/java/dev/diamond/luafy/script/object/game/ItemStackScriptObject.javaβ€Ž

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.mojang.serialization.DataResult;
44
import dev.diamond.luafy.autodoc.Argtypes;
55
import dev.diamond.luafy.lua.LuaTableBuilder;
6-
import dev.diamond.luafy.lua.MetamethodImpl;
76
import dev.diamond.luafy.registry.ScriptObjects;
87
import dev.diamond.luafy.script.LuaScript;
98
import dev.diamond.luafy.script.object.AbstractScriptObject;
@@ -63,7 +62,7 @@ public void toTable(ItemStack obj, LuaTableBuilder builder, LuaScript script) {
6362
obj.setCount(args.nextInt());
6463
return LuaValue.NIL;
6564
});
66-
builder.add(FUNC_ITEM_TYPE, args -> LuaTableBuilder.provide(b -> ScriptObjects.ITEM.toTable(obj.getItem(), b, script)));
65+
builder.add(FUNC_ITEM_TYPE, args -> LuaTableBuilder.provide(ScriptObjects.ITEM, obj.getItem(), script));
6766
builder.add(FUNC_ITEM_ID, args -> LuaValue.valueOf(BuiltInRegistries.ITEM.getId(obj.getItem())));
6867

6968
builder.add(FUNC_COMPONENT, args -> {
@@ -105,11 +104,6 @@ public ItemStack toThing(LuaTable table, CommandSourceStack src, LuaScript scrip
105104
return script.getUnserializableData(ptr, ItemStack.class);
106105
}
107106

108-
@Override
109-
public Class<ItemStack> getType() {
110-
return ItemStack.class;
111-
}
112-
113107
@Override
114108
public String getArgtypeString() {
115109
return "ItemStack";

β€Žsrc/main/java/dev/diamond/luafy/script/object/game/RegistryBlockScriptObject.javaβ€Ž

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ public Block toThing(LuaTable table, CommandSourceStack src, LuaScript script) {
2525
return null;
2626
}
2727

28-
@Override
29-
public Class<Block> getType() {
30-
return Block.class;
31-
}
32-
3328
@Override
3429
public String getArgtypeString() {
3530
return "Block";

β€Žsrc/main/java/dev/diamond/luafy/script/object/game/RegistryItemScriptObject.javaβ€Ž

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,6 @@ public Item toThing(LuaTable table, CommandSourceStack src, LuaScript script) {
4747
return BuiltInRegistries.ITEM.getValue(Identifier.parse(table.get(PROP_ID).tojstring()));
4848
}
4949

50-
@Override
51-
public Class<Item> getType() {
52-
return Item.class;
53-
}
54-
5550
@Override
5651
public String getArgtypeString() {
5752
return "Item";

0 commit comments

Comments
Β (0)