Skip to content

Commit 7cab38f

Browse files
committed
added function calls
also added a special case for mismatched close brackets from before the rework
1 parent ea933fe commit 7cab38f

File tree

8 files changed

+144
-18
lines changed

8 files changed

+144
-18
lines changed

src/main/java/io/github/techstreet/dfscript/screen/script/ScriptAddPartScreen.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public class ScriptAddPartScreen extends CScreen {
2424
private final int insertIndex;
2525

2626
public ScriptAddPartScreen(Script script, ScriptSnippet snippet, int insertIndex, ScriptActionCategory category) {
27-
super(size(category), size(category));
28-
int size = size(category);
27+
super(size(category, script), size(category, script));
28+
int size = size(category, script);
2929
this.script = script;
3030
this.insertIndex = insertIndex;
3131
this.snippet = snippet;
@@ -52,7 +52,7 @@ public ScriptAddPartScreen(Script script, ScriptSnippet snippet, int insertIndex
5252

5353
if (category != null)
5454
{
55-
for(ScriptActionCategoryExtra extra : category.getExtras()) {
55+
for(ScriptActionCategoryExtra extra : category.getExtras(script)) {
5656
CItem item = new CItem(x, y, extra.getIcon());
5757
item.setClickListener((btn) -> {
5858
snippet.add(insertIndex, extra.getPart());
@@ -122,9 +122,9 @@ public ScriptAddPartScreen(Script script, ScriptSnippet snippet, int insertIndex
122122
}
123123
}
124124

125-
private static int size(ScriptActionCategory category) {
125+
private static int size(ScriptActionCategory category, Script script) {
126126
int amount = 0;
127-
amount += category.getExtras().size();
127+
amount += category.getExtras(script).size();
128128
for (ScriptActionType type : ScriptActionType.values()) {
129129
if (type.getCategory() == category) {
130130
amount++;

src/main/java/io/github/techstreet/dfscript/script/Script.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,10 @@ public static void legacyDeserialize(List<ScriptHeader> headers, JsonArray parts
495495
}
496496
else {
497497
header = new ScriptEmptyHeader();
498+
if(obj.get("action").getAsString().equals("CLOSE_BRACKET"))
499+
{
500+
pos++;
501+
}
498502
}
499503

500504
ScriptSnippet snippet = new ScriptSnippet();

src/main/java/io/github/techstreet/dfscript/script/ScriptManager.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,12 @@
99
import io.github.techstreet.dfscript.loader.Loadable;
1010
import io.github.techstreet.dfscript.screen.script.ScriptAddScreen;
1111
import io.github.techstreet.dfscript.script.action.ScriptBuiltinAction;
12+
import io.github.techstreet.dfscript.script.action.ScriptFunctionCall;
1213
import io.github.techstreet.dfscript.script.argument.*;
1314
import io.github.techstreet.dfscript.script.conditions.ScriptBranch;
1415
import io.github.techstreet.dfscript.script.conditions.ScriptBuiltinCondition;
1516
import io.github.techstreet.dfscript.script.conditions.ScriptCondition;
16-
import io.github.techstreet.dfscript.script.event.ScriptEmptyHeader;
17-
import io.github.techstreet.dfscript.script.event.ScriptEvent;
18-
import io.github.techstreet.dfscript.script.event.ScriptHeader;
19-
import io.github.techstreet.dfscript.script.event.ScriptStartUpEvent;
17+
import io.github.techstreet.dfscript.script.event.*;
2018
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
2119
import io.github.techstreet.dfscript.script.repetitions.ScriptBuiltinRepetition;
2220
import io.github.techstreet.dfscript.util.FileUtil;
@@ -51,11 +49,13 @@ public class ScriptManager implements Loadable {
5149
.registerTypeAdapter(ScriptConfigArgument.class, new ScriptConfigArgument.Serializer())
5250
.registerTypeAdapter(ScriptNamedOption.class, new ScriptNamedOption.Serializer())
5351
.registerTypeAdapter(ScriptBuiltinAction.class, new ScriptBuiltinAction.Serializer())
52+
.registerTypeAdapter(ScriptFunctionCall.class, new ScriptBuiltinAction.Serializer())
5453
.registerTypeAdapter(ScriptBuiltinCondition.class, new ScriptBuiltinCondition.Serializer())
5554
.registerTypeAdapter(ScriptCondition.class, new ScriptCondition.Serializer())
5655
.registerTypeAdapter(ScriptBuiltinRepetition.class, new ScriptBuiltinRepetition.Serializer())
5756
.registerTypeAdapter(ScriptBranch.class, new ScriptBranch.Serializer())
5857
.registerTypeAdapter(ScriptEvent.class, new ScriptEvent.Serializer())
58+
.registerTypeAdapter(ScriptFunction.class, new ScriptEvent.Serializer())
5959
.registerTypeAdapter(ScriptComment.class, new ScriptComment.Serializer())
6060
.registerTypeAdapter(ScriptSnippet.class, new ScriptSnippet.Serializer())
6161
.registerTypeAdapter(ScriptHeader.class, new ScriptHeader.Serializer())

src/main/java/io/github/techstreet/dfscript/script/ScriptPart.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.github.techstreet.dfscript.screen.ContextMenuButton;
99
import io.github.techstreet.dfscript.script.action.ScriptActionType;
1010
import io.github.techstreet.dfscript.script.action.ScriptBuiltinAction;
11+
import io.github.techstreet.dfscript.script.action.ScriptFunctionCall;
1112
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
1213
import io.github.techstreet.dfscript.script.conditions.ScriptBranch;
1314
import io.github.techstreet.dfscript.script.conditions.ScriptCondition;
@@ -52,6 +53,14 @@ public ScriptPart deserialize(JsonElement json, Type typeOfT, JsonDeserializatio
5253
}
5354
return new ScriptBuiltinAction(ScriptActionType.valueOf(action), args);
5455
}
56+
case "functionCall" -> {
57+
String action = obj.get("functionCall").getAsString();
58+
List<ScriptArgument> args = new ArrayList<>();
59+
for (JsonElement arg : obj.get("arguments").getAsJsonArray()) {
60+
args.add(context.deserialize(arg, ScriptArgument.class));
61+
}
62+
return new ScriptFunctionCall(null, action, args);
63+
}
5564
case "branch" -> {
5665
boolean hasElse = obj.get("hasElse").getAsBoolean();
5766
List<ScriptArgument> args = new ArrayList<>();
Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.github.techstreet.dfscript.script.action;
22

3+
import io.github.techstreet.dfscript.script.Script;
34
import io.github.techstreet.dfscript.script.ScriptComment;
5+
import io.github.techstreet.dfscript.script.event.ScriptFunction;
46
import net.minecraft.item.Item;
57
import net.minecraft.item.ItemStack;
68
import net.minecraft.item.Items;
@@ -10,13 +12,14 @@
1012

1113
import java.util.ArrayList;
1214
import java.util.List;
15+
import java.util.function.Function;
1316

1417
public enum ScriptActionCategory {
1518

1619
VISUALS("Visuals", Items.ENDER_EYE),
1720
ACTIONS("Actions", Items.PLAYER_HEAD),
1821
MISC("Misc", Items.COMPASS, List.of(
19-
new ScriptActionCategoryExtra(new ItemStack(Items.MAP).setCustomName(Text.literal("Comment").setStyle(Style.EMPTY.withItalic(false))), (Void) -> new ScriptComment(""))
22+
new ScriptActionCategoryExtra(new ItemStack(Items.MAP).setCustomName(Text.literal("Comment").setStyle(Style.EMPTY.withItalic(false))), () -> new ScriptComment(""))
2023
)),
2124
VARIABLES("Variables", Items.IRON_INGOT),
2225
NUMBERS("Numbers", Items.SLIME_BALL),
@@ -26,19 +29,38 @@ public enum ScriptActionCategory {
2629

2730
MENUS("Menus", Items.PAINTING),
2831

29-
CONTROL("Control", Items.COAL)
32+
CONTROL("Control", Items.COAL),
33+
34+
FUNCTIONS("Functions", Items.LAPIS_LAZULI, (script) -> {
35+
List<ScriptActionCategoryExtra> extras = new ArrayList<>();
36+
37+
for (ScriptFunction function : script.getFunctions()) {
38+
extras.add(new ScriptActionCategoryExtra(
39+
function.getIcon(),
40+
() -> new ScriptFunctionCall(script, function.getName(), new ArrayList<>())
41+
));
42+
}
43+
44+
return extras;
45+
})
3046
;
3147

3248
private final ItemStack icon;
3349

34-
private List<ScriptActionCategoryExtra> extras = new ArrayList<>();
50+
private Function<Script, List<ScriptActionCategoryExtra>> extras;
3551

3652
ScriptActionCategory(String name, Item icon) {
3753
this.icon = new ItemStack(icon);
3854
this.icon.setCustomName(Text.literal(name).fillStyle(Style.EMPTY.withItalic(false)));
3955
}
4056

4157
ScriptActionCategory(String name, Item icon, List<ScriptActionCategoryExtra> extras) {
58+
this.icon = new ItemStack(icon);
59+
this.icon.setCustomName(Text.literal(name).fillStyle(Style.EMPTY.withItalic(false)));
60+
this.extras = (script) -> extras;
61+
}
62+
63+
ScriptActionCategory(String name, Item icon, Function<Script, List<ScriptActionCategoryExtra>> extras) {
4264
this.icon = new ItemStack(icon);
4365
this.icon.setCustomName(Text.literal(name).fillStyle(Style.EMPTY.withItalic(false)));
4466
this.extras = extras;
@@ -47,8 +69,10 @@ public enum ScriptActionCategory {
4769
public ItemStack getIcon() {
4870
return icon;
4971
}
50-
public List<ScriptActionCategoryExtra> getExtras()
72+
public List<ScriptActionCategoryExtra> getExtras(Script script)
5173
{
52-
return extras;
74+
if(extras == null) return List.of();
75+
76+
return extras.apply(script);
5377
}
5478
}

src/main/java/io/github/techstreet/dfscript/script/action/ScriptActionCategoryExtra.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
import net.minecraft.item.ItemStack;
55

66
import java.util.function.Function;
7+
import java.util.function.Supplier;
78

8-
public record ScriptActionCategoryExtra(ItemStack icon, Function<Void, ScriptPart> createPartFunction) {
9+
public record ScriptActionCategoryExtra(ItemStack icon, Supplier<ScriptPart> createPartFunction) {
910
public ItemStack getIcon() {
1011
return icon;
1112
}
1213

1314
public ScriptPart getPart() {
14-
return createPartFunction.apply(null);
15+
return createPartFunction.get();
1516
}
1617
}

src/main/java/io/github/techstreet/dfscript/script/action/ScriptActionType.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ public enum ScriptActionType {
355355
.icon(Items.BOOK)
356356
.category(ScriptActionCategory.LISTS)
357357
.arg("Result", ScriptActionArgumentType.VARIABLE)
358-
.arg("List", ScriptActionArgumentType.VARIABLE)
358+
.arg("List", ScriptActionArgumentType.LIST)
359359
.arg("Index", ScriptActionArgumentType.NUMBER)
360360
.action(ctx -> {
361361
List<ScriptValue> list = ctx.value("List").asList();
@@ -1070,7 +1070,7 @@ public enum ScriptActionType {
10701070
int width = (int) ctx.value("Width").asNumber();
10711071
int height = (int) ctx.value("Height").asNumber();
10721072

1073-
io.github.techstreet.dfscript.DFScript.MC.setScreen(new ScriptMenu(width,height,ctx.task().context().script()));
1073+
DFScript.MC.send(() -> io.github.techstreet.dfscript.DFScript.MC.setScreen(new ScriptMenu(width,height,ctx.task().context().script())));
10741074
})),
10751075

10761076
ADD_MENU_BUTTON(builder -> builder.name("Add Menu Button")
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package io.github.techstreet.dfscript.script.action;
2+
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.JsonSerializationContext;
6+
import com.google.gson.JsonSerializer;
7+
import io.github.techstreet.dfscript.script.Script;
8+
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
9+
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
10+
import io.github.techstreet.dfscript.script.event.ScriptFunction;
11+
import io.github.techstreet.dfscript.script.execution.ScriptActionContext;
12+
import io.github.techstreet.dfscript.script.execution.ScriptTask;
13+
import io.github.techstreet.dfscript.script.render.ScriptPartRender;
14+
import io.github.techstreet.dfscript.script.render.ScriptPartRenderIconElement;
15+
import net.minecraft.item.ItemStack;
16+
17+
import java.lang.reflect.Type;
18+
import java.util.List;
19+
20+
public class ScriptFunctionCall extends ScriptAction {
21+
transient Script script;
22+
private String function;
23+
24+
public ScriptFunctionCall(Script script, String function, List<ScriptArgument> arguments) {
25+
super(arguments);
26+
this.function = function;
27+
this.script = script;
28+
}
29+
30+
public ScriptFunctionCall setFunction(String newFunction) {
31+
function = newFunction;
32+
33+
return this;
34+
}
35+
36+
@Override
37+
public void run(ScriptTask task) {
38+
getFunction().container().runSnippet(task, 0, getFunction());
39+
}
40+
41+
public ScriptFunction getFunction() {
42+
return script.getNamedFunction(function);
43+
}
44+
45+
public String getFunctionName() {
46+
return function;
47+
}
48+
49+
@Override
50+
public boolean isDeprecated() {
51+
return false;
52+
}
53+
54+
@Override
55+
public ItemStack getIcon() {
56+
return getFunction().getIcon();
57+
}
58+
59+
@Override
60+
public String getName() {
61+
return function;
62+
}
63+
64+
@Override
65+
public void create(ScriptPartRender render, Script script) {
66+
render.addElement(new ScriptPartRenderIconElement(getFunctionName(), getIcon()));
67+
68+
super.create(render, script);
69+
}
70+
71+
@Override
72+
public void updateScriptReferences(Script script) {
73+
super.updateScriptReferences(script);
74+
this.script = script;
75+
}
76+
77+
public static class Serializer implements JsonSerializer<ScriptFunctionCall> {
78+
79+
@Override
80+
public JsonElement serialize(ScriptFunctionCall src, Type typeOfSrc, JsonSerializationContext context) {
81+
JsonObject obj = new JsonObject();
82+
obj.addProperty("type", "functionCall");
83+
obj.addProperty("functionCall", src.getFunctionName());
84+
obj.add("arguments", context.serialize(src.getArguments()));
85+
return obj;
86+
}
87+
}
88+
}

0 commit comments

Comments
 (0)