Skip to content

Commit 3b2073f

Browse files
committed
Non-Owned Script Config Modification
Yep, it's here. You can now modify the value of the settings for a script you haven't created. Also made renaming an option rename all the references (config arguments) to it
1 parent 79ee10d commit 3b2073f

File tree

8 files changed

+141
-95
lines changed

8 files changed

+141
-95
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public ScriptAddSettingScreen(Script script, int pos) {
3434
ChatUtil.error(String.valueOf(e.getCause()));
3535
}
3636

37-
DFScript.MC.setScreen(new ScriptSettingsScreen(script));
37+
DFScript.MC.setScreen(new ScriptSettingsScreen(script, true));
3838
});
3939

4040
widgets.add(citem);
@@ -49,6 +49,6 @@ public ScriptAddSettingScreen(Script script, int pos) {
4949

5050
@Override
5151
public void close() {
52-
DFScript.MC.setScreen(new ScriptSettingsScreen(script));
52+
DFScript.MC.setScreen(new ScriptSettingsScreen(script, true));
5353
}
5454
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public ScriptEditScreen(Script script) {
4848
int indent = 0;
4949

5050
CButton settings = new CButton(37, y, 46, 8, "Settings", () -> {
51-
DFScript.MC.setScreen(new ScriptSettingsScreen(this.script));
51+
DFScript.MC.setScreen(new ScriptSettingsScreen(this.script, true));
5252
});
5353

5454
panel.add(settings);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public ScriptEditSettingScreen(Script script, ScriptNamedOption o) {
2727
if(script.optionExists(input.getText())) {
2828
input.textColor = 0xFF3333;
2929
} else {
30+
script.replaceOption(option.getName(), input.getText());
3031
option.setName(input.getText());
3132
close();
3233
}
@@ -44,6 +45,6 @@ public ScriptEditSettingScreen(Script script, ScriptNamedOption o) {
4445

4546
@Override
4647
public void close() {
47-
DFScript.MC.setScreen(new ScriptSettingsScreen(script));
48+
DFScript.MC.setScreen(new ScriptSettingsScreen(script, true));
4849
}
4950
}

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

Lines changed: 85 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -109,71 +109,30 @@ public boolean mouseClicked(double x, double y, int button) {
109109

110110
panel.add(enableDisable);
111111

112-
if (s.getOwner() != null && s.getOwner().equals(DFScript.PLAYER_UUID) && allowEditAndUpload) {
113-
// Edit Button
114-
CButton edit = new CTexturedButton(addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":wrench.png", () -> {
115-
DFScript.MC.setScreen(new ScriptEditScreen(s));
116-
}, 0,0,1,0.5f,0,0.5f);
117-
118-
panel.add(edit);
119-
120-
// Upload or Remove Button
121-
CButton upload = new CTexturedButton(10 + addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":upload.png", () -> {
122-
try {
123-
// Encode the script JSON to GZIP Base64
124-
byte[] bytes = Files.readAllBytes(s.getFile().toPath());
125-
126-
ByteArrayOutputStream rstBao = new ByteArrayOutputStream();
127-
GZIPOutputStream zos = new GZIPOutputStream(rstBao);
128-
zos.write(bytes);
129-
zos.close();
112+
if(allowEditAndUpload) {
113+
if (s.getOwner() != null && s.getOwner().equals(DFScript.PLAYER_UUID)) {
114+
// Edit Button
115+
CButton edit = new CTexturedButton(addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":wrench.png", () -> {
116+
DFScript.MC.setScreen(new ScriptEditScreen(s));
117+
}, 0, 0, 1, 0.5f, 0, 0.5f);
130118

131-
String scriptData = Base64.encodeBase64String(rstBao.toByteArray());
132-
133-
// Upload the script to the server
134-
URL url = new URL("https://DFScript-Server.techstreetdev.repl.co/scripts/upload");
135-
HttpURLConnection con = (HttpURLConnection) url.openConnection();
136-
con.setRequestMethod("POST");
137-
con.setRequestProperty("Content-Type", "application/json");
138-
con.setRequestProperty("Accept", "application/json");
139-
con.setRequestProperty("authorization", AuthHandler.getAuthCode());
140-
con.setDoOutput(true);
141-
142-
JsonObject obj = new JsonObject();
143-
obj.addProperty("data", scriptData);
144-
145-
try (OutputStream os = con.getOutputStream()) {
146-
byte[] input = obj.toString().getBytes("utf-8");
147-
os.write(input, 0, input.length);
148-
}
119+
panel.add(edit);
149120

150-
// Parse the response and get the scripts ID
151-
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
152-
StringBuilder response = new StringBuilder();
153-
String responseLine;
121+
// Upload or Remove Button
122+
CButton upload = new CTexturedButton(10 + addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":upload.png", () -> {
123+
try {
124+
// Encode the script JSON to GZIP Base64
125+
byte[] bytes = Files.readAllBytes(s.getFile().toPath());
154126

155-
while ((responseLine = br.readLine()) != null) {
156-
response.append(responseLine.trim());
157-
}
127+
ByteArrayOutputStream rstBao = new ByteArrayOutputStream();
128+
GZIPOutputStream zos = new GZIPOutputStream(rstBao);
129+
zos.write(bytes);
130+
zos.close();
158131

159-
UploadResponse uploadResponse = DFScript.GSON.fromJson(response.toString(), UploadResponse.class);
160-
System.out.println(uploadResponse.getId());
161-
s.setServer(uploadResponse.getId());
132+
String scriptData = Base64.encodeBase64String(rstBao.toByteArray());
162133

163-
ScriptManager.getInstance().saveScript(s);
164-
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Successfully uploaded the script to the server!"));
165-
}
166-
} catch (Exception e) {
167-
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Failed to upload script to the server, please report this to a DFScript developer!"));
168-
e.printStackTrace();
169-
}
170-
}, 0,0,1,0.5f,0,0.5f);
171-
172-
if (!Objects.equals(s.getServer(), "None")) {
173-
upload = new CTexturedButton(10 + addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":unupload.png", () -> {
174-
try {
175-
// Remove the script to the server
176-
URL url = new URL("https://DFScript-Server.techstreetdev.repl.co/scripts/remove/");
134+
// Upload the script to the server
135+
URL url = new URL("https://DFScript-Server.techstreetdev.repl.co/scripts/upload");
177136
HttpURLConnection con = (HttpURLConnection) url.openConnection();
178137
con.setRequestMethod("POST");
179138
con.setRequestProperty("Content-Type", "application/json");
@@ -182,34 +141,85 @@ public boolean mouseClicked(double x, double y, int button) {
182141
con.setDoOutput(true);
183142

184143
JsonObject obj = new JsonObject();
185-
obj.addProperty("id", s.getServer());
144+
obj.addProperty("data", scriptData);
186145

187146
try (OutputStream os = con.getOutputStream()) {
188147
byte[] input = obj.toString().getBytes("utf-8");
189148
os.write(input, 0, input.length);
190149
}
191150

192-
try {
193-
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
194-
s.setServer("None");
195-
ScriptManager.getInstance().saveScript(s);
196-
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Successfully removed the script from the server!"));
197-
}
198-
} catch (IOException e) {
199-
if (e.getMessage().contains("401")) {
200-
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "You don't have permission to delete this script!"));
201-
} else {
202-
e.printStackTrace();
151+
// Parse the response and get the scripts ID
152+
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
153+
StringBuilder response = new StringBuilder();
154+
String responseLine;
155+
156+
while ((responseLine = br.readLine()) != null) {
157+
response.append(responseLine.trim());
203158
}
159+
160+
UploadResponse uploadResponse = DFScript.GSON.fromJson(response.toString(), UploadResponse.class);
161+
System.out.println(uploadResponse.getId());
162+
s.setServer(uploadResponse.getId());
163+
164+
ScriptManager.getInstance().saveScript(s);
165+
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Successfully uploaded the script to the server!"));
204166
}
205167
} catch (Exception e) {
206-
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Failed to remove the script from the server, please try again!"));
168+
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Failed to upload script to the server, please report this to a DFScript developer!"));
207169
e.printStackTrace();
208170
}
209-
}, 0,0,1,0.5f,0,0.5f);
171+
}, 0, 0, 1, 0.5f, 0, 0.5f);
172+
173+
if (!Objects.equals(s.getServer(), "None")) {
174+
upload = new CTexturedButton(10 + addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":unupload.png", () -> {
175+
try {
176+
// Remove the script to the server
177+
URL url = new URL("https://DFScript-Server.techstreetdev.repl.co/scripts/remove/");
178+
HttpURLConnection con = (HttpURLConnection) url.openConnection();
179+
con.setRequestMethod("POST");
180+
con.setRequestProperty("Content-Type", "application/json");
181+
con.setRequestProperty("Accept", "application/json");
182+
con.setRequestProperty("authorization", AuthHandler.getAuthCode());
183+
con.setDoOutput(true);
184+
185+
JsonObject obj = new JsonObject();
186+
obj.addProperty("id", s.getServer());
187+
188+
try (OutputStream os = con.getOutputStream()) {
189+
byte[] input = obj.toString().getBytes("utf-8");
190+
os.write(input, 0, input.length);
191+
}
192+
193+
try {
194+
try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
195+
s.setServer("None");
196+
ScriptManager.getInstance().saveScript(s);
197+
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Successfully removed the script from the server!"));
198+
}
199+
} catch (IOException e) {
200+
if (e.getMessage().contains("401")) {
201+
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "You don't have permission to delete this script!"));
202+
} else {
203+
e.printStackTrace();
204+
}
205+
}
206+
} catch (Exception e) {
207+
DFScript.MC.setScreen(new ScriptMessageScreen(new ScriptListScreen(allowEditAndUpload), "Failed to remove the script from the server, please try again!"));
208+
e.printStackTrace();
209+
}
210+
}, 0, 0, 1, 0.5f, 0, 0.5f);
211+
}
212+
213+
panel.add(upload);
210214
}
215+
else {
216+
//Script Settings Button
217+
CButton settings = new CTexturedButton(10 + addedX, y + addedY, 8, 8, DFScript.MOD_ID + ":wrench.png", () -> {
218+
DFScript.MC.setScreen(new ScriptSettingsScreen(s, false));
219+
}, 0, 0, 1, 0.5f, 0, 0.5f);
211220

212-
panel.add(upload);
221+
panel.add(settings);
222+
}
213223
}
214224

215225
y += 12;

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

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,30 +24,40 @@ public class ScriptSettingsScreen extends CScreen {
2424

2525
private static int scroll = 0;
2626

27+
private boolean owned;
28+
2729
private final CScrollPanel panel;
2830

2931
private final List<CWidget> contextMenu = new ArrayList<>();
3032

31-
public ScriptSettingsScreen(Script script) {
33+
public ScriptSettingsScreen(Script script, boolean owned) {
3234
super(125, 100);
3335
this.script = script;
36+
this.owned = owned;
3437
panel = new CScrollPanel(0, 3, 120, 94);
3538

3639
widgets.add(panel);
3740

3841
int y = 3;
3942
int index = 0;
4043

41-
CText descriptionText = new CText(5, y, Text.of("Description:"));
42-
panel.add(descriptionText);
44+
String descriptionString = owned ? "Description:" : script.getDescription();
45+
46+
Text descriptionText = Text.of(descriptionString);
4347

44-
y += 5;
48+
CWrappedText descriptionCText = new CWrappedText(5, y, 110*2, descriptionText);
49+
panel.add(descriptionCText);
4550

46-
CTextField description = new CTextField(script.getDescription(), 5, y, 110, 20, true);
47-
description.setChangedListener(() -> script.setDescription(description.getText()));
48-
panel.add(description);
51+
y += DFScript.MC.textRenderer.getWrappedLinesHeight(descriptionString, 110*2) / 2;
52+
y++;
4953

50-
y += 22;
54+
if(owned) {
55+
CTextField description = new CTextField(script.getDescription(), 5, y, 110, 20, true);
56+
description.setChangedListener(() -> script.setDescription(description.getText()));
57+
panel.add(description);
58+
59+
y += 22;
60+
}
5161

5262
for(ScriptNamedOption option : script.getOptions())
5363
{
@@ -61,7 +71,7 @@ public ScriptSettingsScreen(Script script) {
6171

6272
int height = DFScript.MC.textRenderer.getWrappedLinesHeight(name, 110*2) / 2;
6373
int finalIndex = index;
64-
panel.add(new CButton(5, y, 115, height, "",() -> {}) {
74+
if(owned) panel.add(new CButton(5, y, 115, height, "",() -> {}) {
6575
@Override
6676
public void render(MatrixStack stack, int mouseX, int mouseY, float tickDelta) {
6777
Rectangle b = getBounds();
@@ -85,7 +95,7 @@ public boolean mouseClicked(double x, double y, int button) {
8595
CButton delete = new CButton((int) x, (int) y+16, 40, 8, "Delete", () -> {
8696
script.getOptions().remove(finalIndex);
8797
scroll = panel.getScroll();
88-
DFScript.MC.setScreen(new ScriptSettingsScreen(script));
98+
DFScript.MC.setScreen(new ScriptSettingsScreen(script, true));
8999
});
90100
DFScript.MC.send(() -> {
91101
panel.add(insertBefore);
@@ -114,18 +124,20 @@ public boolean mouseClicked(double x, double y, int button) {
114124
index++;
115125
}
116126

117-
CButton add = new CButton(37, y, 46, 8, "Add", () -> {
118-
DFScript.MC.setScreen(new ScriptAddSettingScreen(script, script.getOptions().size()));
119-
});
120-
121-
panel.add(add);
127+
if(owned)
128+
{
129+
CButton add = new CButton(37, y, 46, 8, "Add", () -> {
130+
DFScript.MC.setScreen(new ScriptAddSettingScreen(script, script.getOptions().size()));
131+
});
132+
panel.add(add);
133+
}
122134

123135
panel.setScroll(scroll);
124136
}
125137

126138
@Override
127139
public void close() {
128-
DFScript.MC.setScreen(new ScriptEditScreen(script));
140+
DFScript.MC.setScreen(owned ? new ScriptEditScreen(script) : new ScriptListScreen(true));
129141
}
130142

131143
public boolean mouseClicked(double mouseX, double mouseY, int button) {

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,14 @@ private void updateScriptReferences() {
322322
}
323323
}
324324

325+
public void replaceOption(String oldOption, String newOption) {
326+
for(ScriptPart part : getParts()) {
327+
if(part instanceof ScriptAction a) {
328+
a.updateConfigArguments(oldOption, newOption);
329+
}
330+
}
331+
}
332+
325333
public static class Serializer implements JsonSerializer<Script>, JsonDeserializer<Script> {
326334
@Override
327335
public Script deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,17 @@ public void updateScriptReferences(Script script) {
6262
}
6363
}
6464

65+
public void updateConfigArguments(String oldOption, String newOption) {
66+
for(ScriptArgument arg : getArguments()) {
67+
if (arg instanceof ScriptConfigArgument carg) {
68+
if(carg.getName() == oldOption)
69+
{
70+
carg.setOption(newOption);
71+
}
72+
}
73+
}
74+
}
75+
6576
public static class Serializer implements JsonSerializer<ScriptAction> {
6677

6778
@Override

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ public String getName() {
4646
return option;
4747
}
4848

49+
public void setOption(String newOption) {
50+
option = newOption;
51+
}
52+
4953
public static class Serializer implements JsonSerializer<ScriptConfigArgument> {
5054

5155
@Override

0 commit comments

Comments
 (0)