Skip to content

Commit 79ee10d

Browse files
committed
Made everything related to config save
(i expect bugs)
1 parent 3a1b2fd commit 79ee10d

File tree

5 files changed

+82
-6
lines changed

5 files changed

+82
-6
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,11 @@ public Script deserialize(JsonElement json, Type typeOfT, JsonDeserializationCon
351351
Script script = new Script(name, owner, serverId, parts, disabled, version);
352352
script.setDescription(description);
353353

354+
for (JsonElement element : object.get("config").getAsJsonArray()) {
355+
ScriptNamedOption option = context.deserialize(element, ScriptNamedOption.class);
356+
script.addOption(script.getOptions().size(), option);
357+
}
358+
354359
script.updateScriptReferences();
355360

356361
return script;
@@ -369,7 +374,13 @@ public JsonElement serialize(Script src, Type typeOfSrc, JsonSerializationContex
369374
array.add(context.serialize(part));
370375
}
371376

377+
JsonArray config = new JsonArray();
378+
for (ScriptNamedOption option : src.getOptions()) {
379+
config.add(context.serialize(option));
380+
}
381+
372382
object.add("actions", array);
383+
object.add("config", config);
373384
object.addProperty("disabled", src.disabled);
374385
object.addProperty("version", src.version);
375386
return object;

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,10 @@
1616
import io.github.techstreet.dfscript.loader.Loadable;
1717
import io.github.techstreet.dfscript.screen.script.ScriptAddScreen;
1818
import io.github.techstreet.dfscript.script.action.ScriptAction;
19-
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
20-
import io.github.techstreet.dfscript.script.argument.ScriptClientValueArgument;
21-
import io.github.techstreet.dfscript.script.argument.ScriptNumberArgument;
22-
import io.github.techstreet.dfscript.script.argument.ScriptTextArgument;
23-
import io.github.techstreet.dfscript.script.argument.ScriptVariableArgument;
19+
import io.github.techstreet.dfscript.script.argument.*;
2420
import io.github.techstreet.dfscript.script.event.ScriptEvent;
2521
import io.github.techstreet.dfscript.script.event.ScriptStartUpEvent;
22+
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
2623
import io.github.techstreet.dfscript.util.FileUtil;
2724
import io.github.techstreet.dfscript.util.chat.ChatType;
2825
import io.github.techstreet.dfscript.util.chat.ChatUtil;
@@ -52,6 +49,8 @@ public class ScriptManager implements Loadable {
5249
.registerTypeAdapter(ScriptNumberArgument.class, new ScriptNumberArgument.Serializer())
5350
.registerTypeAdapter(ScriptVariableArgument.class, new ScriptVariableArgument.Serializer())
5451
.registerTypeAdapter(ScriptClientValueArgument.class, new ScriptClientValueArgument.Serializer())
52+
.registerTypeAdapter(ScriptConfigArgument.class, new ScriptConfigArgument.Serializer())
53+
.registerTypeAdapter(ScriptNamedOption.class, new ScriptNamedOption.Serializer())
5554
.registerTypeAdapter(ScriptAction.class, new ScriptAction.Serializer())
5655
.registerTypeAdapter(ScriptEvent.class, new ScriptEvent.Serializer())
5756
.create();

src/main/java/io/github/techstreet/dfscript/script/options/ScriptNamedOption.java

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

3+
import com.google.gson.*;
4+
import io.github.techstreet.dfscript.DFScript;
35
import io.github.techstreet.dfscript.screen.widget.CScrollPanel;
6+
import io.github.techstreet.dfscript.script.Script;
7+
import io.github.techstreet.dfscript.script.ScriptPart;
48
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
59
import net.minecraft.item.ItemStack;
610
import net.minecraft.text.Style;
711
import net.minecraft.text.Text;
812

13+
import java.lang.reflect.Type;
14+
import java.util.ArrayList;
15+
import java.util.List;
16+
917
public class ScriptNamedOption {
1018
String name;
1119
ScriptOption option;
@@ -27,6 +35,8 @@ public ScriptArgument getValue() {
2735
return option.getValue();
2836
}
2937

38+
public ScriptOption getOption() { return option; }
39+
3040
public int create(CScrollPanel panel, int x, int y) {
3141
return option.create(panel, x, y, 105);
3242
}
@@ -38,4 +48,38 @@ public void setName(String text) {
3848
public ItemStack getIcon() {
3949
return new ItemStack(option.getIcon()).setCustomName(Text.literal(getName()).fillStyle(Style.EMPTY.withItalic(false)));
4050
}
51+
52+
public static class Serializer implements JsonSerializer<ScriptNamedOption>, JsonDeserializer<ScriptNamedOption> {
53+
@Override
54+
public ScriptNamedOption deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
55+
JsonObject object = json.getAsJsonObject();
56+
String name = object.get("name").getAsString();
57+
String type = object.get("type").getAsString();
58+
59+
ScriptOption option;
60+
61+
switch(type)
62+
{
63+
case "TEXT" -> option = new ScriptTextOption(object.get("value").getAsString());
64+
default -> throw new JsonParseException("Unknown option type: " + type);
65+
}
66+
67+
ScriptNamedOption namedOption = new ScriptNamedOption(option, name);
68+
69+
return namedOption;
70+
}
71+
72+
@Override
73+
public JsonElement serialize(ScriptNamedOption src, Type typeOfSrc, JsonSerializationContext context) {
74+
JsonObject object = new JsonObject();
75+
76+
object.addProperty("name", src.name);
77+
78+
object.addProperty("type", src.getOption().getType());
79+
80+
object.add("value", src.getOption().getJsonPrimitive());
81+
82+
return object;
83+
}
84+
}
4185
}

src/main/java/io/github/techstreet/dfscript/script/options/ScriptOption.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.github.techstreet.dfscript.script.options;
22

3+
import com.google.gson.JsonElement;
34
import io.github.techstreet.dfscript.screen.widget.CScrollPanel;
45
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
56
import net.minecraft.item.Item;
6-
import net.minecraft.item.Items;
77

88
public interface ScriptOption {
99
ScriptArgument getValue();
@@ -13,4 +13,8 @@ public interface ScriptOption {
1313
int create(CScrollPanel panel, int x, int y, int width); // the return value = new y
1414

1515
Item getIcon();
16+
17+
String getType();
18+
19+
JsonElement getJsonPrimitive();
1620
}

src/main/java/io/github/techstreet/dfscript/script/options/ScriptTextOption.java

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

3+
import com.google.gson.JsonElement;
4+
import com.google.gson.JsonPrimitive;
35
import io.github.techstreet.dfscript.screen.widget.CScrollPanel;
46
import io.github.techstreet.dfscript.screen.widget.CTextField;
57
import io.github.techstreet.dfscript.script.argument.ScriptArgument;
@@ -12,6 +14,12 @@ public class ScriptTextOption implements ScriptOption {
1214

1315
String value = "";
1416

17+
public ScriptTextOption(String value) {
18+
this.value = value;
19+
}
20+
21+
public ScriptTextOption() {}
22+
1523
@Override
1624
public ScriptArgument getValue() {
1725
return new ScriptTextArgument(value);
@@ -33,4 +41,14 @@ public int create(CScrollPanel panel, int x, int y, int width) {
3341
public Item getIcon() {
3442
return Items.BOOK;
3543
}
44+
45+
@Override
46+
public String getType() {
47+
return "TEXT";
48+
}
49+
50+
@Override
51+
public JsonElement getJsonPrimitive() {
52+
return new JsonPrimitive(value);
53+
}
3654
}

0 commit comments

Comments
 (0)