Skip to content

Commit ecd0786

Browse files
Merge pull request #42 from XTerPL/Functions
Functions
2 parents 064862c + b9bfef8 commit ecd0786

File tree

68 files changed

+2709
-396
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+2709
-396
lines changed

src/main/java/io/github/techstreet/dfscript/commands/misc/ScriptsCommand.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.github.techstreet.dfscript.script.Script;
1212
import io.github.techstreet.dfscript.script.ScriptManager;
1313
import io.github.techstreet.dfscript.script.values.ScriptValue;
14+
import io.github.techstreet.dfscript.script.values.ScriptVariable;
1415
import io.github.techstreet.dfscript.util.chat.ChatUtil;
1516
import java.util.List;
1617
import java.util.Map.Entry;
@@ -64,11 +65,11 @@ public void register(CommandDispatcher<FabricClientCommandSource> cd) {
6465
private void listVars(String script, String filter) {
6566
for (Script s : ScriptManager.getInstance().getScripts()) {
6667
if (s.getName().replaceAll(" ", "_").equals(script)) {
67-
List<Entry<String, ScriptValue>> vars = s.getContext().listVariables(filter);
68+
List<Entry<String, ScriptVariable>> vars = s.getContext().variables().list(filter);
6869

6970
int showing = Math.min(vars.size(), 50);
7071
int filtered = vars.size();
71-
int total = s.getContext().getVariableCount();
72+
int total = s.getContext().variables().count();
7273

7374
ChatUtil.info("Script " + s.getName() + " has a total of " + total + " variables.");
7475

@@ -79,7 +80,7 @@ private void listVars(String script, String filter) {
7980
}
8081

8182
for (int i = 0; i < showing; i++) {
82-
Entry<String, ScriptValue> e = vars.get(i);
83+
Entry<String, ScriptVariable> e = vars.get(i);
8384
ChatUtil.info(e.getKey() + ": " + e.getValue().asText());
8485
}
8586
return;
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.github.techstreet.dfscript.screen;
2+
3+
import io.github.techstreet.dfscript.DFScript;
4+
import io.github.techstreet.dfscript.screen.widget.CWidget;
5+
import io.github.techstreet.dfscript.util.RenderUtil;
6+
import net.minecraft.client.MinecraftClient;
7+
import net.minecraft.client.gui.screen.Screen;
8+
import net.minecraft.client.util.math.MatrixStack;
9+
import net.minecraft.text.Text;
10+
import org.jetbrains.annotations.NotNull;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
public abstract class CReloadableScreen extends CScreen {
16+
17+
public abstract void reload();
18+
19+
protected CReloadableScreen(int width, int height) {
20+
super(width, height);
21+
}
22+
}

src/main/java/io/github/techstreet/dfscript/screen/ContextMenuButton.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public Runnable getOnClick() {
2525
if(reloadOnClick) {
2626
return () -> {
2727
onClick.run();
28-
if(DFScript.MC.currentScreen instanceof ScriptEditScreen editScreen)
28+
if(DFScript.MC.currentScreen instanceof CReloadableScreen screen)
2929
{
30-
editScreen.reload();
30+
screen.reload();
3131
}
3232
};
3333
}

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

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66
import io.github.techstreet.dfscript.screen.widget.CTextField;
77
import io.github.techstreet.dfscript.script.Script;
88
import io.github.techstreet.dfscript.script.ScriptParametrizedPart;
9-
import io.github.techstreet.dfscript.script.ScriptPart;
10-
import io.github.techstreet.dfscript.script.action.ScriptAction;
11-
import io.github.techstreet.dfscript.script.argument.ScriptNumberArgument;
12-
import io.github.techstreet.dfscript.script.argument.ScriptTextArgument;
13-
import io.github.techstreet.dfscript.script.argument.ScriptVariableArgument;
9+
import io.github.techstreet.dfscript.script.argument.*;
10+
import io.github.techstreet.dfscript.script.event.ScriptFunction;
11+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
1412
import net.minecraft.item.ItemStack;
1513
import net.minecraft.item.Items;
1614
import net.minecraft.text.Style;
@@ -19,15 +17,18 @@
1917
public class ScriptAddArgumentScreen extends CScreen {
2018

2119
private final Script script;
20+
21+
private final ScriptHeader header;
2222
private final ScriptParametrizedPart action;
2323

24-
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index) {
25-
this(script,action,index,null);
24+
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index, ScriptHeader header) {
25+
this(script,action,index, header,null);
2626
}
27-
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index, String overwrite) {
27+
public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int index, ScriptHeader header, String overwrite) {
2828
super(100, 50);
2929
this.script = script;
3030
this.action = action;
31+
this.header = header;
3132

3233
CTextField input = new CTextField("Input", 2, 2, 96, 35, true);
3334
if(overwrite != null) input.setText(overwrite);
@@ -52,44 +53,53 @@ public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int
5253
configValueIcon.setCustomName(Text.literal("Config Value")
5354
.fillStyle(Style.EMPTY.withItalic(false)));
5455

56+
ItemStack functionArgumentIcon = new ItemStack(Items.BLUE_DYE);
57+
functionArgumentIcon.setCustomName(Text.literal("Function Argument")
58+
.fillStyle(Style.EMPTY.withItalic(false)));
59+
5560

5661
CItem addNumber = new CItem(2, 40, numberIcon);
5762
CItem addText = new CItem(12, 40, textIcon);
5863
CItem addVariable = new CItem(22, 40, variableIcon);
5964
CItem addClientValue = new CItem(32, 40, clientValueIcon);
6065
CItem addConfigValue = new CItem(42, 40, configValueIcon);
66+
CItem addFunctionArgument = new CItem(52, 40, functionArgumentIcon);
6167

6268
input.setChangedListener(() -> input.textColor = 0xFFFFFF);
6369

6470
addText.setClickListener((btn) -> {
6571
if(overwrite != null) action.getArguments().remove(index);
6672
action.getArguments().add(index, new ScriptTextArgument(input.getText()));
67-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
73+
close();
6874
});
6975

7076
addNumber.setClickListener((btn) -> {
7177
try {
7278
double number = Double.parseDouble(input.getText());
7379
if(overwrite != null) action.getArguments().remove(index);
7480
action.getArguments().add(index, new ScriptNumberArgument(number));
75-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
81+
close();
7682
} catch (Exception err) {
7783
input.textColor = 0xFF3333;
7884
}
7985
});
8086

8187
addVariable.setClickListener((btn) -> {
8288
if(overwrite != null) action.getArguments().remove(index);
83-
action.getArguments().add(index, new ScriptVariableArgument(input.getText()));
84-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
89+
action.getArguments().add(index, new ScriptVariableArgument(input.getText(), ScriptVariableScope.SCRIPT));
90+
close();
8591
});
8692

8793
addClientValue.setClickListener((btn) -> {
88-
DFScript.MC.setScreen(new ScriptAddClientValueScreen(action, script, index, overwrite));
94+
DFScript.MC.setScreen(new ScriptAddClientValueScreen(action, script, index, header, overwrite));
8995
});
9096

9197
addConfigValue.setClickListener((btn) -> {
92-
DFScript.MC.setScreen(new ScriptAddConfigValueScreen(action, script, index, overwrite));
98+
DFScript.MC.setScreen(new ScriptAddConfigValueScreen(action, script, index, header, overwrite));
99+
});
100+
101+
addFunctionArgument.setClickListener((btn) -> {
102+
DFScript.MC.setScreen(new ScriptAddFunctionArgValueScreen(action, script, index, header, overwrite));
93103
});
94104

95105
widgets.add(input);
@@ -98,10 +108,13 @@ public ScriptAddArgumentScreen(Script script, ScriptParametrizedPart action, int
98108
widgets.add(addVariable);
99109
widgets.add(addClientValue);
100110
widgets.add(addConfigValue);
111+
if(header instanceof ScriptFunction) {
112+
widgets.add(addFunctionArgument);
113+
}
101114
}
102115

103116
@Override
104117
public void close() {
105-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
118+
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script, header));
106119
}
107120
}

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,22 @@
88
import io.github.techstreet.dfscript.script.ScriptPart;
99
import io.github.techstreet.dfscript.script.action.ScriptAction;
1010
import io.github.techstreet.dfscript.script.argument.ScriptClientValueArgument;
11+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
1112

1213
public class ScriptAddClientValueScreen extends CScreen {
1314

1415
private final Script script;
16+
17+
private final ScriptHeader header;
1518
private final ScriptParametrizedPart action;
1619
private final int insertIndex;
1720
private static final int WIDTH = 58;
1821

19-
public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, String overwrite) {
22+
public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, ScriptHeader header, String overwrite) {
2023
super(WIDTH, 58);
2124
this.script = script;
2225
this.action = action;
26+
this.header = header;
2327
this.insertIndex = insertIndex;
2428

2529
int x = 5;
@@ -29,7 +33,7 @@ public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script,
2933
item.setClickListener((btn) -> {
3034
if(overwrite != null) action.getArguments().remove(insertIndex);
3135
action.getArguments().add(insertIndex, arg);
32-
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script));
36+
DFScript.MC.setScreen(new ScriptEditPartScreen(action, script, header));
3337
});
3438
widgets.add(item);
3539
x += 10;
@@ -42,6 +46,6 @@ public ScriptAddClientValueScreen(ScriptParametrizedPart action, Script script,
4246

4347
@Override
4448
public void close() {
45-
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex));
49+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex, header));
4650
}
4751
}

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,36 @@
99
import io.github.techstreet.dfscript.script.ScriptPart;
1010
import io.github.techstreet.dfscript.script.action.ScriptAction;
1111
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
12+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
1213
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
1314

1415
public class ScriptAddConfigValueScreen extends CScreen {
1516
private final Script script;
17+
18+
private final ScriptHeader header;
1619
private final ScriptParametrizedPart action;
1720
private final int insertIndex;
1821

1922
private static int WIDTH = 200;
2023
private static int HEIGHT = 94;
2124

22-
public ScriptAddConfigValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, String overwrite) {
25+
public ScriptAddConfigValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, ScriptHeader header, String overwrite) {
2326
super(WIDTH, HEIGHT);
2427
this.script = script;
2528
this.action = action;
29+
this.header = header;
2630
this.insertIndex = insertIndex;
2731

2832
CScrollPanel panel = new CScrollPanel(0, 0, WIDTH, HEIGHT);
2933

3034
int x = 5;
3135
int y = 5;
3236
for (ScriptNamedOption arg : script.getOptions()) {
33-
if(overwrite != null) action.getArguments().remove(insertIndex);
3437
CItem item = new CItem(x, y, arg.getIcon());
3538
item.setClickListener((btn) -> {
39+
if(overwrite != null) action.getArguments().remove(insertIndex);
3640
this.action.getArguments().add(insertIndex, new ScriptConfigArgument(arg.getName(), this.script));
37-
DFScript.MC.setScreen(new ScriptEditPartScreen(this.action, this.script));
41+
DFScript.MC.setScreen(new ScriptEditPartScreen(this.action, this.script, this.header));
3842
});
3943
panel.add(item);
4044
x += 10;
@@ -49,6 +53,6 @@ public ScriptAddConfigValueScreen(ScriptParametrizedPart action, Script script,
4953

5054
@Override
5155
public void close() {
52-
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex));
56+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex, header));
5357
}
5458
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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.ScriptParametrizedPart;
9+
import io.github.techstreet.dfscript.script.action.ScriptActionArgument;
10+
import io.github.techstreet.dfscript.script.argument.ScriptConfigArgument;
11+
import io.github.techstreet.dfscript.script.argument.ScriptFunctionArgument;
12+
import io.github.techstreet.dfscript.script.event.ScriptFunction;
13+
import io.github.techstreet.dfscript.script.event.ScriptHeader;
14+
15+
public class ScriptAddFunctionArgValueScreen extends CScreen {
16+
private final Script script;
17+
18+
private final ScriptHeader header;
19+
private final ScriptParametrizedPart action;
20+
private final int insertIndex;
21+
22+
private static int WIDTH = 200;
23+
private static int HEIGHT = 94;
24+
25+
public ScriptAddFunctionArgValueScreen(ScriptParametrizedPart action, Script script, int insertIndex, ScriptHeader header, String overwrite) {
26+
super(WIDTH, HEIGHT);
27+
this.script = script;
28+
this.action = action;
29+
this.header = header;
30+
this.insertIndex = insertIndex;
31+
32+
CScrollPanel panel = new CScrollPanel(0, 0, WIDTH, HEIGHT);
33+
34+
if(header instanceof ScriptFunction f)
35+
{
36+
int x = 5;
37+
int y = 5;
38+
for (ScriptActionArgument arg : f.argList()) {
39+
CItem item = new CItem(x, y, arg.getIcon());
40+
item.setClickListener((btn) -> {
41+
if(overwrite != null) action.getArguments().remove(insertIndex);
42+
this.action.getArguments().add(insertIndex, new ScriptFunctionArgument(arg.name(), header));
43+
DFScript.MC.setScreen(new ScriptEditPartScreen(this.action, this.script, this.header));
44+
});
45+
panel.add(item);
46+
x += 10;
47+
if (x > WIDTH-10) {
48+
x = 5;
49+
y += 10;
50+
}
51+
}
52+
53+
widgets.add(panel);
54+
}
55+
}
56+
57+
@Override
58+
public void close() {
59+
DFScript.MC.setScreen(new ScriptAddArgumentScreen(script, action, insertIndex, header));
60+
}
61+
}

0 commit comments

Comments
 (0)