Skip to content

Commit 3a1b2fd

Browse files
committed
Added Script Config Arguments
(yes you can save the Script Config Arguments, but not load them lmao) (you can't yet save the Options itself lmao)
1 parent 2c3e8af commit 3a1b2fd

File tree

13 files changed

+220
-23
lines changed

13 files changed

+220
-23
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,16 @@ public ScriptAddArgumentScreen(Script script, ScriptAction action, int index) {
4242
clientValueIcon.setCustomName(Text.literal("Client Value")
4343
.fillStyle(Style.EMPTY.withItalic(false)));
4444

45+
ItemStack configValueIcon = new ItemStack(Items.INK_SAC);
46+
configValueIcon.setCustomName(Text.literal("Config Value")
47+
.fillStyle(Style.EMPTY.withItalic(false)));
48+
49+
4550
CItem addNumber = new CItem(2, 40, numberIcon);
4651
CItem addText = new CItem(12, 40, textIcon);
4752
CItem addVariable = new CItem(22, 40, variableIcon);
4853
CItem addClientValue = new CItem(32, 40, clientValueIcon);
54+
CItem addConfigValue = new CItem(42, 40, configValueIcon);
4955

5056
input.setChangedListener(() -> input.textColor = 0xFFFFFF);
5157

@@ -73,11 +79,16 @@ public ScriptAddArgumentScreen(Script script, ScriptAction action, int index) {
7379
DFScript.MC.setScreen(new ScriptAddClientValueScreen(action, script, index));
7480
});
7581

82+
addConfigValue.setClickListener((btn) -> {
83+
DFScript.MC.setScreen(new ScriptAddConfigValueScreen(action, script, index));
84+
});
85+
7686
widgets.add(input);
7787
widgets.add(addNumber);
7888
widgets.add(addText);
7989
widgets.add(addVariable);
8090
widgets.add(addClientValue);
91+
widgets.add(addConfigValue);
8192
}
8293

8394
@Override
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package io.github.techstreet.dfscript.screen.script;
2+
3+
import io.github.techstreet.dfscript.DFScript;
4+
import io.github.techstreet.dfscript.screen.CScreen;
5+
import io.github.techstreet.dfscript.screen.widget.CItem;
6+
import io.github.techstreet.dfscript.screen.widget.CScrollPanel;
7+
import io.github.techstreet.dfscript.script.Script;
8+
import io.github.techstreet.dfscript.script.action.ScriptAction;
9+
import io.github.techstreet.dfscript.script.argument.ScriptClientValueArgument;
10+
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
11+
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
12+
13+
public class ScriptAddConfigValueScreen extends CScreen {
14+
private final Script script;
15+
private final ScriptAction action;
16+
private final int insertIndex;
17+
18+
private static int WIDTH = 200;
19+
private static int HEIGHT = 94;
20+
21+
public ScriptAddConfigValueScreen(ScriptAction action, Script script, int insertIndex) {
22+
super(WIDTH, HEIGHT);
23+
this.script = script;
24+
this.action = action;
25+
this.insertIndex = insertIndex;
26+
27+
CScrollPanel panel = new CScrollPanel(0, 0, WIDTH, HEIGHT);
28+
29+
int x = 5;
30+
int y = 5;
31+
for (ScriptNamedOption arg : script.getOptions()) {
32+
CItem item = new CItem(x, y, arg.getIcon());
33+
item.setClickListener((btn) -> {
34+
this.action.getArguments().add(insertIndex, new ScriptConfigArgument(arg.getName(), this.script));
35+
DFScript.MC.setScreen(new ScriptEditActionScreen(this.action, this.script));
36+
});
37+
panel.add(item);
38+
x += 10;
39+
if (x > WIDTH-10) {
40+
x = 5;
41+
y += 10;
42+
}
43+
}
44+
45+
widgets.add(panel);
46+
}
47+
48+
@Override
49+
public void close() {
50+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex));
51+
}
52+
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,8 @@
88
import io.github.techstreet.dfscript.screen.widget.CWidget;
99
import io.github.techstreet.dfscript.script.Script;
1010
import io.github.techstreet.dfscript.script.action.ScriptAction;
11-
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
12-
import io.github.techstreet.dfscript.script.argument.ScriptClientValueArgument;
13-
import io.github.techstreet.dfscript.script.argument.ScriptNumberArgument;
14-
import io.github.techstreet.dfscript.script.argument.ScriptTextArgument;
15-
import io.github.techstreet.dfscript.script.argument.ScriptVariableArgument;
11+
import io.github.techstreet.dfscript.script.argument.*;
12+
1613
import java.awt.Rectangle;
1714
import java.util.ArrayList;
1815
import java.util.List;
@@ -54,6 +51,9 @@ public ScriptEditActionScreen(ScriptAction action, Script script) {
5451
} else if (arg instanceof ScriptClientValueArgument cva) {
5552
icon = new ItemStack(Items.NAME_TAG);
5653
text = cva.getName();
54+
} else if (arg instanceof ScriptConfigArgument ca) {
55+
icon = new ItemStack(Items.INK_SAC);
56+
text = ca.getOption().getFullName();
5757
} else {
5858
throw new IllegalArgumentException("Invalid argument type");
5959
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public ScriptSettingsScreen(Script script) {
5151

5252
for(ScriptNamedOption option : script.getOptions())
5353
{
54-
String name = option.getFullName();
54+
String name = option.getFullName() + ":";
5555

5656
Text text = Text.of(name);
5757

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@
1212
import io.github.techstreet.dfscript.event.system.Event;
1313
import io.github.techstreet.dfscript.script.action.ScriptAction;
1414
import io.github.techstreet.dfscript.script.action.ScriptActionType;
15+
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
16+
import io.github.techstreet.dfscript.script.argument.ScriptUnknownArgument;
1517
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
16-
import io.github.techstreet.dfscript.script.options.ScriptOption;
1718
import io.github.techstreet.dfscript.script.event.ScriptEvent;
1819
import io.github.techstreet.dfscript.script.execution.ScriptContext;
1920
import io.github.techstreet.dfscript.script.execution.ScriptPosStack;
@@ -44,7 +45,7 @@ public class Script {
4445

4546
private final List<ScriptNamedOption> options;
4647
private final Logger LOGGER;
47-
private final ScriptContext context = new ScriptContext();
48+
private final ScriptContext context = new ScriptContext(this);
4849
private File file;
4950
private boolean disabled;
5051

@@ -275,21 +276,19 @@ public void addOption(int pos, ScriptNamedOption option) {
275276
}
276277

277278
public boolean optionExists(String option) {
278-
for(ScriptNamedOption o : getOptions())
279-
{
279+
for(ScriptNamedOption o : getOptions()) {
280280
if(Objects.equals(o.getName(), option)) return true;
281281
}
282282

283283
return false;
284284
}
285285

286-
public ScriptValue getOption(String option) {
287-
for(ScriptNamedOption o : getOptions())
288-
{
286+
public ScriptArgument getOption(String option) {
287+
for(ScriptNamedOption o : getOptions()) {
289288
if(Objects.equals(o.getName(), option)) return o.getValue();
290289
}
291290

292-
return new ScriptUnknownValue();
291+
return new ScriptUnknownArgument();
293292
}
294293

295294
public String getUnnamedOption() {
@@ -307,6 +306,22 @@ public String getUnnamedOption() {
307306
}
308307
}
309308

309+
public ScriptNamedOption getNamedOption(String option) {
310+
for(ScriptNamedOption o : getOptions()) {
311+
if(Objects.equals(o.getName(), option)) return o;
312+
}
313+
314+
return null;
315+
}
316+
317+
private void updateScriptReferences() {
318+
for(ScriptPart part : getParts()) {
319+
if(part instanceof ScriptAction a) {
320+
a.updateScriptReferences(this);
321+
}
322+
}
323+
}
324+
310325
public static class Serializer implements JsonSerializer<Script>, JsonDeserializer<Script> {
311326
@Override
312327
public Script deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
@@ -336,6 +351,8 @@ public Script deserialize(JsonElement json, Type typeOfT, JsonDeserializationCon
336351
Script script = new Script(name, owner, serverId, parts, disabled, version);
337352
script.setDescription(description);
338353

354+
script.updateScriptReferences();
355+
339356
return script;
340357
}
341358

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.github.techstreet.dfscript.script.ScriptGroup;
1010
import io.github.techstreet.dfscript.script.ScriptPart;
1111
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
12+
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
1213
import io.github.techstreet.dfscript.script.execution.ScriptActionContext;
1314
import io.github.techstreet.dfscript.script.execution.ScriptContext;
1415
import io.github.techstreet.dfscript.script.execution.ScriptScopeVariables;
@@ -53,6 +54,14 @@ public ScriptGroup getGroup() {
5354
return getType().getGroup();
5455
}
5556

57+
public void updateScriptReferences(Script script) {
58+
for(ScriptArgument arg : getArguments()) {
59+
if (arg instanceof ScriptConfigArgument carg) {
60+
carg.setScript(script);
61+
}
62+
}
63+
}
64+
5665
public static class Serializer implements JsonSerializer<ScriptAction> {
5766

5867
@Override

src/main/java/io/github/techstreet/dfscript/script/argument/ScriptArgument.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public ScriptArgument deserialize(JsonElement json, Type typeOfT, JsonDeserializ
2828
case "NUMBER" -> new ScriptNumberArgument(object.get("value").getAsDouble());
2929
case "VARIABLE" -> new ScriptVariableArgument(object.get("value").getAsString());
3030
case "CLIENT_VALUE" -> ScriptClientValueArgument.valueOf(object.get("value").getAsString());
31+
case "CONFIG_VALUE" -> new ScriptConfigArgument(object.get("value").getAsString(), null);
3132
default -> throw new JsonParseException("Unknown argument type: " + type);
3233
};
3334
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.github.techstreet.dfscript.script.argument;
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.event.system.Event;
8+
import io.github.techstreet.dfscript.script.Script;
9+
import io.github.techstreet.dfscript.script.action.ScriptActionArgument;
10+
import io.github.techstreet.dfscript.script.execution.ScriptContext;
11+
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
12+
import io.github.techstreet.dfscript.script.values.ScriptValue;
13+
14+
import java.lang.reflect.Type;
15+
import java.util.Objects;
16+
17+
public final class ScriptConfigArgument implements ScriptArgument {
18+
19+
private String option;
20+
private transient Script script;
21+
22+
public ScriptConfigArgument(String option, Script script) {
23+
this.option = option;
24+
this.script = script;
25+
}
26+
27+
@Override
28+
public ScriptValue getValue(Event event, ScriptContext context) {
29+
return script.getOption(option).getValue(event, context);
30+
}
31+
32+
@Override
33+
public boolean convertableTo(ScriptActionArgument.ScriptActionArgumentType type) {
34+
return script.getOption(option).convertableTo(type);
35+
}
36+
37+
public ScriptNamedOption getOption() {
38+
return script.getNamedOption(option);
39+
}
40+
41+
public void setScript(Script script) {
42+
this.script = script;
43+
}
44+
45+
public String getName() {
46+
return option;
47+
}
48+
49+
public static class Serializer implements JsonSerializer<ScriptConfigArgument> {
50+
51+
@Override
52+
public JsonElement serialize(ScriptConfigArgument src, Type typeOfSrc, JsonSerializationContext context) {
53+
JsonObject object = new JsonObject();
54+
object.addProperty("type", "CONFIG_VALUE");
55+
object.addProperty("value", src.getName());
56+
return object;
57+
}
58+
}
59+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.github.techstreet.dfscript.script.argument;
2+
3+
import io.github.techstreet.dfscript.event.system.Event;
4+
import io.github.techstreet.dfscript.script.action.ScriptActionArgument;
5+
import io.github.techstreet.dfscript.script.execution.ScriptContext;
6+
import io.github.techstreet.dfscript.script.values.ScriptUnknownValue;
7+
import io.github.techstreet.dfscript.script.values.ScriptValue;
8+
9+
public record ScriptUnknownArgument() implements ScriptArgument {
10+
@Override
11+
public ScriptValue getValue(Event event, ScriptContext context) {
12+
return new ScriptUnknownValue();
13+
}
14+
15+
@Override
16+
public boolean convertableTo(ScriptActionArgument.ScriptActionArgumentType type) {
17+
return false;
18+
}
19+
}

src/main/java/io/github/techstreet/dfscript/script/execution/ScriptContext.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.techstreet.dfscript.script.execution;
22

3+
import io.github.techstreet.dfscript.script.Script;
34
import io.github.techstreet.dfscript.script.values.ScriptUnknownValue;
45
import io.github.techstreet.dfscript.script.values.ScriptValue;
56
import java.util.HashMap;
@@ -9,7 +10,13 @@
910

1011
public class ScriptContext {
1112

13+
private final Script script;
1214
private int isForcedToEnd = 0;
15+
16+
public ScriptContext(Script script) {
17+
this.script = script;
18+
}
19+
1320
public void forceEndScope(int times) {
1421
isForcedToEnd += times;
1522
}
@@ -68,4 +75,8 @@ public List<Entry<String, ScriptValue>> listVariables(String filter) {
6875
public int getVariableCount() {
6976
return variables.size();
7077
}
78+
79+
public Script script() {
80+
return script;
81+
}
7182
}

0 commit comments

Comments
 (0)