Skip to content

Commit fdfd80d

Browse files
committed
You can now rename options by left clicking the name.
Also separated the name property from the ScriptOption into ScriptNamedOption
1 parent 4714d44 commit fdfd80d

File tree

7 files changed

+132
-10
lines changed

7 files changed

+132
-10
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.github.techstreet.dfscript.screen.CScreen;
55
import io.github.techstreet.dfscript.screen.widget.CItem;
66
import io.github.techstreet.dfscript.script.Script;
7+
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
78
import io.github.techstreet.dfscript.script.options.ScriptOptionEnum;
89
import io.github.techstreet.dfscript.util.chat.ChatUtil;
910
public class ScriptAddSettingScreen extends CScreen {
@@ -28,7 +29,7 @@ public ScriptAddSettingScreen(Script script, int pos) {
2829

2930
citem.setClickListener((a) -> {
3031
try {
31-
script.addOption(pos, option.getOptionType().getConstructor().newInstance());
32+
script.addOption(pos, new ScriptNamedOption(option.getOptionType().getConstructor().newInstance(), script.getUnnamedOption()));
3233
} catch (Exception e) {
3334
ChatUtil.error(String.valueOf(e.getCause()));
3435
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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.CButton;
6+
import io.github.techstreet.dfscript.screen.widget.CTextField;
7+
import io.github.techstreet.dfscript.script.Script;
8+
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
9+
10+
public class ScriptEditSettingScreen extends CScreen {
11+
private final Script script;
12+
private final ScriptNamedOption option;
13+
14+
public ScriptEditSettingScreen(Script script, ScriptNamedOption o) {
15+
super(100, 50);
16+
this.script = script;
17+
option = o;
18+
19+
CTextField input = new CTextField(option.getName(), 2, 2, 96, 35, true);
20+
21+
input.setChangedListener(() -> input.textColor = 0xFFFFFF);
22+
23+
CButton confirm = new CButton(0, 35, 50, 15, "Confirm Rename", () -> {
24+
if(option.getName() != input.getText()) {
25+
if(script.optionExists(input.getText())) {
26+
input.textColor = 0xFF3333;
27+
} else {
28+
option.setName(input.getText());
29+
close();
30+
}
31+
} else {
32+
close();
33+
}
34+
});
35+
36+
CButton cancel = new CButton(50, 35, 50, 15, "Cancel", this::close);
37+
38+
widgets.add(input);
39+
widgets.add(confirm);
40+
widgets.add(cancel);
41+
}
42+
43+
@Override
44+
public void close() {
45+
DFScript.MC.setScreen(new ScriptSettingsScreen(script));
46+
}
47+
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.github.techstreet.dfscript.script.Script;
77
import io.github.techstreet.dfscript.script.ScriptManager;
88
import io.github.techstreet.dfscript.script.action.ScriptActionType;
9+
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
910
import io.github.techstreet.dfscript.script.options.ScriptOption;
1011
import io.github.techstreet.dfscript.util.chat.ChatUtil;
1112
import net.minecraft.client.gui.DrawableHelper;
@@ -48,9 +49,9 @@ public ScriptSettingsScreen(Script script) {
4849

4950
y += 22;
5051

51-
for(ScriptOption option : script.getOptions())
52+
for(ScriptNamedOption option : script.getOptions())
5253
{
53-
String name = option.getName() + ":";
54+
String name = option.getFullName();
5455

5556
Text text = Text.of(name);
5657

@@ -95,6 +96,10 @@ public boolean mouseClicked(double x, double y, int button) {
9596
contextMenu.add(delete);
9697
});
9798
}
99+
else
100+
{
101+
DFScript.MC.setScreen(new ScriptEditSettingScreen(script, option));
102+
}
98103
return true;
99104
}
100105
return false;
@@ -104,7 +109,7 @@ public boolean mouseClicked(double x, double y, int button) {
104109
y += height;
105110
y++;
106111

107-
y = option.create(panel, 5, y, 105);
112+
y = option.create(panel, 5, y);
108113

109114
index++;
110115
}

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

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,22 @@
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.options.ScriptNamedOption;
1516
import io.github.techstreet.dfscript.script.options.ScriptOption;
1617
import io.github.techstreet.dfscript.script.event.ScriptEvent;
1718
import io.github.techstreet.dfscript.script.execution.ScriptContext;
1819
import io.github.techstreet.dfscript.script.execution.ScriptPosStack;
1920
import io.github.techstreet.dfscript.script.execution.ScriptScopeVariables;
2021
import io.github.techstreet.dfscript.script.execution.ScriptTask;
22+
import io.github.techstreet.dfscript.script.values.ScriptUnknownValue;
23+
import io.github.techstreet.dfscript.script.values.ScriptValue;
2124
import io.github.techstreet.dfscript.util.chat.ChatType;
2225
import io.github.techstreet.dfscript.util.chat.ChatUtil;
2326
import java.io.File;
2427
import java.lang.reflect.Type;
2528
import java.util.ArrayList;
2629
import java.util.List;
30+
import java.util.Objects;
2731
import java.util.function.Consumer;
2832
import org.apache.logging.log4j.LogManager;
2933
import org.apache.logging.log4j.Logger;
@@ -38,7 +42,7 @@ public class Script {
3842
private String server;
3943
private final List<ScriptPart> parts;
4044

41-
private final List<ScriptOption> options;
45+
private final List<ScriptNamedOption> options;
4246
private final Logger LOGGER;
4347
private final ScriptContext context = new ScriptContext();
4448
private File file;
@@ -262,14 +266,47 @@ public void replaceAction(ScriptActionType oldAction, ScriptActionType newAction
262266
}
263267
}
264268

265-
public List<ScriptOption> getOptions() {
269+
public List<ScriptNamedOption> getOptions() {
266270
return options;
267271
}
268272

269-
public void addOption(int pos, ScriptOption option) {
273+
public void addOption(int pos, ScriptNamedOption option) {
270274
options.add(pos, option);
271275
}
272276

277+
public boolean optionExists(String option) {
278+
for(ScriptNamedOption o : getOptions())
279+
{
280+
if(Objects.equals(o.getName(), option)) return true;
281+
}
282+
283+
return false;
284+
}
285+
286+
public ScriptValue getOption(String option) {
287+
for(ScriptNamedOption o : getOptions())
288+
{
289+
if(Objects.equals(o.getName(), option)) return o.getValue();
290+
}
291+
292+
return new ScriptUnknownValue();
293+
}
294+
295+
public String getUnnamedOption() {
296+
for(int i = 1; ; i++) {
297+
298+
String name = "Option";
299+
300+
if(i != 1) {
301+
name = name + " " + i;
302+
}
303+
304+
if(!optionExists(name)) {
305+
return name;
306+
}
307+
}
308+
}
309+
273310
public static class Serializer implements JsonSerializer<Script>, JsonDeserializer<Script> {
274311
@Override
275312
public Script deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.github.techstreet.dfscript.script.options;
2+
3+
import io.github.techstreet.dfscript.screen.widget.CScrollPanel;
4+
import io.github.techstreet.dfscript.script.values.ScriptValue;
5+
6+
public class ScriptNamedOption {
7+
String name;
8+
ScriptOption option;
9+
10+
public ScriptNamedOption(ScriptOption option, String name) {
11+
this.name = name;
12+
this.option = option;
13+
}
14+
15+
public String getFullName() {
16+
return getName() + " (" + option.getName() + "):";
17+
}
18+
19+
public String getName() {
20+
return name;
21+
}
22+
23+
public ScriptValue getValue() {
24+
return option.getValue();
25+
}
26+
27+
public int create(CScrollPanel panel, int x, int y) {
28+
return option.create(panel, x, y, 105);
29+
}
30+
31+
public void setName(String text) {
32+
name = text;
33+
}
34+
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import net.minecraft.text.Text;
66

77
public interface ScriptOption {
8-
String name = "Default Config Option Name";
9-
108
ScriptValue getValue();
119

1210
String getName();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public ScriptValue getValue() {
1515
}
1616

1717
@Override
18-
public String getName() { return name; }
18+
public String getName() { return "Text"; }
1919

2020
@Override
2121
public int create(CScrollPanel panel, int x, int y, int width) {

0 commit comments

Comments
 (0)