aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormsg-programs <msgdoesstuff@gmail.com>2023-08-06 15:20:53 +0200
committermsg-programs <msgdoesstuff@gmail.com>2023-08-06 15:20:53 +0200
commitf8c6e9454cc1354714bf46f7763ff7faf7669ddf (patch)
treeaa4e20705a3e9ce8b0edac4aacacab9f757647f8
parenta3e6f2854e8c254be303ace9a01f4c195adf3e16 (diff)
downloadSkyblocker-f8c6e9454cc1354714bf46f7763ff7faf7669ddf.tar.gz
Skyblocker-f8c6e9454cc1354714bf46f7763ff7faf7669ddf.tar.bz2
Skyblocker-f8c6e9454cc1354714bf46f7763ff7faf7669ddf.zip
Add error handling, rename EmptyWidget to ErrorWidget and allow custom string.
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java79
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java37
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java57
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java36
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java72
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ErrorWidget.java (renamed from src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java)16
-rw-r--r--src/main/resources/assets/skyblocker/tabhud/readme.md2
-rw-r--r--src/main/resources/assets/skyblocker/tabhud/screen_a/unknown.json2
-rw-r--r--src/main/resources/assets/skyblocker/tabhud/screen_b/unknown.json2
-rw-r--r--src/main/resources/assets/skyblocker/tabhud/standard/unknown.json2
-rw-r--r--src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_a/unknown.json2
-rw-r--r--src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_b/unknown.json2
-rw-r--r--src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/standard/unknown.json2
15 files changed, 237 insertions, 106 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java
index d4ddef8e..f570f6db 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java
@@ -6,6 +6,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.NoSuchElementException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,7 +22,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PipelineSta
import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PlaceStage;
import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.StackStage;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ErrorWidget;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
import net.minecraft.client.MinecraftClient;
@@ -30,9 +31,6 @@ import net.minecraft.util.Identifier;
public class ScreenBuilder {
- // TODO: Let EmptyWidget contain an error message
-
- private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker");
// layout pipeline
private ArrayList<PipelineStage> layoutPipeline = new ArrayList<>();
@@ -46,34 +44,34 @@ public class ScreenBuilder {
/**
* Create a ScreenBuilder from a json.
*/
- public ScreenBuilder(Identifier ident) throws IOException {
+ public ScreenBuilder(Identifier ident) {
- this.builderName = ident.getPath();
+ try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident);) {
+ this.builderName = ident.getPath();
- BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident);
- JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
- reader.close();
+ JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
- JsonArray widgets = json.getAsJsonArray("widgets");
- JsonArray layout = json.getAsJsonArray("layout");
+ JsonArray widgets = json.getAsJsonArray("widgets");
+ JsonArray layout = json.getAsJsonArray("layout");
- for (JsonElement w : widgets) {
- JsonObject widget = w.getAsJsonObject();
- String name = widget.get("name").getAsString();
- String alias = widget.get("alias").getAsString();
+ for (JsonElement w : widgets) {
+ JsonObject widget = w.getAsJsonObject();
+ String name = widget.get("name").getAsString();
+ String alias = widget.get("alias").getAsString();
- Widget wid = instanceFrom(name, widget);
- objectMap.put(alias, wid);
- instances.add(wid);
- }
+ Widget wid = instanceFrom(name, widget);
+ objectMap.put(alias, wid);
+ instances.add(wid);
+ }
- for (JsonElement l : layout) {
- PipelineStage ps = createStage(l.getAsJsonObject());
- if (ps != null) {
+ for (JsonElement l : layout) {
+ PipelineStage ps = createStage(l.getAsJsonObject());
layoutPipeline.add(ps);
}
+ } catch (Exception ex) {
+ // rethrow as unchecked exception so that I don't have to catch anything in the ScreenMaster
+ throw new IllegalStateException("Failed to load file " + ident + "Reason: " + ex.getMessage());
}
-
}
/**
@@ -83,15 +81,25 @@ public class ScreenBuilder {
public Widget instanceFrom(String name, JsonObject widget) {
// do widgets that require args the normal way
+ JsonElement arg;
switch (name) {
case "EventWidget":
return new EventWidget(widget.get("inGarden").getAsBoolean());
+
case "DungeonPlayerWidget":
return new DungeonPlayerWidget(widget.get("player").getAsInt());
+
+ case "ErrorWidget":
+ arg = widget.get("text");
+ if (arg == null) {
+ return new ErrorWidget();
+ } else {
+ return new ErrorWidget(arg.getAsString());
+ }
+
case "Widget":
// clown case sanity check. don't instantiate the superclass >:|
- LOGGER.error("Couldn't find class \"{}\"!", name);
- return new EmptyWidget();
+ throw new NoSuchElementException(builderName + "[ERROR]: No such Widget type \"Widget\"!");
}
// reflect something together for the "normal" ones.
@@ -100,11 +108,11 @@ public class ScreenBuilder {
// list all packages that might contain widget classes
// using Package isn't reliable, as some classes might not be loaded yet,
- // causing the packages not to show.
+ // causing the packages not to show.
String packbase = "me.xmrvizzy.skyblocker.skyblock.tabhud.widget";
String[] packnames = {
- packbase,
- packbase + ".rift"
+ packbase,
+ packbase + ".rift"
};
// construct the full class name and try to load.
@@ -119,8 +127,7 @@ public class ScreenBuilder {
// load failed.
if (clazz == null) {
- LOGGER.error("Couldn't find class \"{}\"!", name);
- return new EmptyWidget();
+ throw new NoSuchElementException(builderName + "/[ERROR]: No such Widget type \"" + name + "\"!");
}
// return instance of that class.
@@ -129,15 +136,14 @@ public class ScreenBuilder {
return (Widget) ctor.newInstance();
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException | SecurityException ex) {
- LOGGER.error("Failed to create instance of class {}!", clazz.getSimpleName());
- return new EmptyWidget();
+ throw new IllegalStateException(builderName + "/" + name + ": Internal error...");
}
}
/**
* Create a PipelineStage from a json object.
*/
- public PipelineStage createStage(JsonObject descr) {
+ public PipelineStage createStage(JsonObject descr) throws NoSuchElementException {
String op = descr.get("op").getAsString();
@@ -151,8 +157,7 @@ public class ScreenBuilder {
case "collideAgainst":
return new CollideStage(this, descr);
default:
- LOGGER.error("No such op \"{}\" as requested by {}", op, this.builderName);
- return null;
+ throw new NoSuchElementException("No such op " + op + " as requested by " + this.builderName);
}
}
@@ -160,7 +165,9 @@ public class ScreenBuilder {
* Lookup Widget instance from alias name
*/
public Widget getInstance(String name) {
- // TODO: filter null here or in stage classes
+ if (!this.objectMap.containsKey(name)) {
+ throw new NoSuchElementException("No widget with alias " + name + " in screen " + builderName);
+ }
return this.objectMap.get(name);
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java
index 114aa0cb..64ec4289 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder;
-import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -28,7 +28,7 @@ public class ScreenMaster {
private static HashMap<String, ScreenBuilder> screenBMap = new HashMap<>();
/**
- * Load a screen mapping from
+ * Load a screen mapping from an identifier
*/
public static void load(Identifier ident) {
@@ -38,20 +38,14 @@ public class ScreenMaster {
String location = parts[parts.length - 1];
location = location.replace(".json", "");
- try {
-
- if (screenType.equals("standard")) {
- standardMap.put(location, new ScreenBuilder(ident));
- } else if (screenType.equals("screen_a")) {
- screenAMap.put(location, new ScreenBuilder(ident));
- } else if (screenType.equals("screen_b")) {
- screenBMap.put(location, new ScreenBuilder(ident));
- }
-
- } catch (IOException ioex) {
- LOGGER.error("Can't load screen definition from {}", path);
+ ScreenBuilder sb = new ScreenBuilder(ident);
+ if (screenType.equals("standard")) {
+ standardMap.put(location, sb);
+ } else if (screenType.equals("screen_a")) {
+ screenAMap.put(location, sb);
+ } else if (screenType.equals("screen_b")) {
+ screenBMap.put(location, sb);
}
-
}
/**
@@ -106,10 +100,21 @@ public class ScreenMaster {
screenAMap.clear();
screenBMap.clear();
+ int ex = 0;
+
for (Map.Entry<Identifier, Resource> entry : manager
.findResources("tabhud", path -> path.getPath().endsWith(".json"))
.entrySet()) {
- load(entry.getKey());
+ try {
+
+ load(entry.getKey());
+ } catch (Exception e) {
+ LOGGER.error(e.getMessage());
+ ex++;
+ }
+ }
+ if (ex > 0) {
+ throw new IllegalStateException("This screen definition isn't valid, see above");
}
}
});
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java
index 4d5a90be..93a11190 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
-import java.security.InvalidParameterException;
import java.util.ArrayList;
+import java.util.NoSuchElementException;
import com.google.gson.JsonObject;
@@ -10,13 +10,38 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
public class AlignStage extends PipelineStage {
- private String reference;
+ private enum AlignReference {
+ HORICENT("horizontalCenter"),
+ VERTCENT("verticalCenter"),
+ LEFTCENT("leftOfCenter"),
+ RIGHTCENT("rightOfCenter"),
+ TOPCENT("topOfCenter"),
+ BOTCENT("botOfCenter"),
+ TOP("top"),
+ BOT("bot"),
+ LEFT("left"),
+ RIGHT("right");
- public AlignStage(ScreenBuilder builder, JsonObject descr) {
- if (!descr.has("reference")) {
- throw new InvalidParameterException("no reference in " + descr);
+ private String str;
+
+ private AlignReference(String d) {
+ this.str = d;
+ }
+
+ public static AlignReference parse(String s) throws NoSuchElementException {
+ for (AlignReference d : AlignReference.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid reference for an align op!");
}
- this.reference = descr.get("reference").getAsString();
+ }
+
+ private AlignReference reference;
+
+ public AlignStage(ScreenBuilder builder, JsonObject descr) {
+ this.reference = AlignReference.parse(descr.get("reference").getAsString());
this.primary = new ArrayList<Widget>(descr.getAsJsonArray("apply_to")
.asList()
.stream()
@@ -28,38 +53,38 @@ public class AlignStage extends PipelineStage {
int wHalf, hHalf;
for (Widget wid : primary) {
switch (this.reference) {
- case "horizontalCenter":
+ case HORICENT:
wid.setX((screenW - wid.getWidth()) / 2);
break;
- case "verticalCenter":
+ case VERTCENT:
wid.setY((screenH - wid.getHeight()) / 2);
break;
- case "leftOfCenter":
+ case LEFTCENT:
wHalf = screenW / 2;
wid.setX(wHalf - 3 - wid.getWidth());
break;
- case "rightOfCenter":
+ case RIGHTCENT:
wHalf = screenW / 2;
wid.setX(wHalf + 3);
break;
- case "topOfCenter":
+ case TOPCENT:
hHalf = screenH / 2;
wid.setY(hHalf - 3 - wid.getHeight());
break;
- case "botOfCenter":
+ case BOTCENT:
hHalf = screenH / 2;
wid.setY(hHalf + 3);
break;
- case "top":
+ case TOP:
wid.setY(5);
break;
- case "bot":
+ case BOT:
wid.setY(screenH - wid.getHeight() - 5);
break;
- case "left":
+ case LEFT:
wid.setX(5);
break;
- case "right":
+ case RIGHT:
wid.setX(screenW - wid.getWidth() - 5);
break;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java
index 8275e842..837d1da4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/CollideStage.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
import java.util.ArrayList;
+import java.util.NoSuchElementException;
import com.google.gson.JsonObject;
@@ -9,10 +10,30 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
public class CollideStage extends PipelineStage {
- private String direction;
+ private enum CollideDirection {
+ LEFT("left"),
+ RIGHT("right");
+
+ private String str;
+
+ private CollideDirection(String d) {
+ this.str = d;
+ }
+
+ public static CollideDirection parse(String s) throws NoSuchElementException {
+ for (CollideDirection d : CollideDirection.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid direction for a collide op!");
+ }
+ }
+
+ private CollideDirection direction;
public CollideStage(ScreenBuilder builder, JsonObject descr) {
- this.direction = descr.get("direction").getAsString();
+ this.direction = CollideDirection.parse(descr.get("direction").getAsString());
this.primary = new ArrayList<Widget>(descr.getAsJsonArray("widgets")
.asList()
.stream()
@@ -26,10 +47,13 @@ public class CollideStage extends PipelineStage {
}
public void run(int screenW, int screenH) {
- if (this.direction.equals("left")) {
- primary.forEach(w -> collideAgainstL(screenW, w));
- } else if (this.direction.equals("right")) {
- primary.forEach(w -> collideAgainstR(screenW, w));
+ switch (this.direction) {
+ case LEFT:
+ primary.forEach(w -> collideAgainstL(screenW, w));
+ break;
+ case RIGHT:
+ primary.forEach(w -> collideAgainstR(screenW, w));
+ break;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java
index 47b9e96e..e560058c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PipelineStage.java
@@ -6,8 +6,6 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
public abstract class PipelineStage {
- // TODO for all subclasses: error checking, use enums instead of strings
-
protected ArrayList<Widget> primary = null;
protected ArrayList<Widget> secondary = null;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java
index c6b72999..94e0ac07 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
import java.util.ArrayList;
+import java.util.NoSuchElementException;
import com.google.gson.JsonObject;
@@ -9,10 +10,31 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
public class PlaceStage extends PipelineStage {
- private String where;
+ private enum PlaceLocation {
+ CENTER("center"),
+ TOPCENT("centerTop");
+
+ private String str;
+
+ private PlaceLocation(String d) {
+ this.str = d;
+ }
+
+ public static PlaceLocation parse(String s) throws NoSuchElementException {
+ for (PlaceLocation d : PlaceLocation.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid location for a place op!");
+ }
+ }
+
+
+ private PlaceLocation where;
public PlaceStage(ScreenBuilder builder, JsonObject descr) {
- this.where = descr.get("where").getAsString();
+ this.where = PlaceLocation.parse(descr.get("where").getAsString());
this.primary = new ArrayList<Widget>(descr.getAsJsonArray("apply_to")
.asList()
.stream()
@@ -24,11 +46,11 @@ public class PlaceStage extends PipelineStage {
public void run(int screenW, int screenH) {
Widget wid = primary.get(0);
switch (where) {
- case "center":
+ case CENTER:
wid.setY((screenH - wid.getHeight()) / 2);
wid.setX((screenW - wid.getWidth()) / 2);
break;
- case "centerTop":
+ case TOPCENT:
wid.setX((screenW - wid.getWidth()) / 2);
wid.setY(5);
break;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java
index d144c67b..9fe83601 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/StackStage.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
import java.util.ArrayList;
+import java.util.NoSuchElementException;
import com.google.gson.JsonObject;
@@ -9,12 +10,55 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
public class StackStage extends PipelineStage {
- private String direction;
- private String align;
+ private enum StackDirection {
+ HORIZONTAL("horizontal"),
+ VERTICAL("vertical");
+
+ private String str;
+
+ private StackDirection(String d) {
+ this.str = d;
+ }
+
+ public static StackDirection parse(String s) throws NoSuchElementException {
+ for (StackDirection d : StackDirection.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid direction for a stack op!");
+ }
+ }
+
+ private enum StackAlign {
+ TOP("top"),
+ BOT("bot"),
+ LEFT("left"),
+ RIGHT("right"),
+ CENTER("center");
+
+ private String str;
+
+ private StackAlign(String d) {
+ this.str = d;
+ }
+
+ public static StackAlign parse(String s) throws NoSuchElementException {
+ for (StackAlign d : StackAlign.values()) {
+ if (d.str.equals(s)) {
+ return d;
+ }
+ }
+ throw new NoSuchElementException("\"" + s + "\" is not a valid alignment for a stack op!");
+ }
+ }
+
+ private StackDirection direction;
+ private StackAlign align;
public StackStage(ScreenBuilder builder, JsonObject descr) {
- this.direction = descr.get("direction").getAsString();
- this.align = descr.get("align").getAsString();
+ this.direction = StackDirection.parse(descr.get("direction").getAsString());
+ this.align = StackAlign.parse(descr.get("align").getAsString());
this.primary = new ArrayList<Widget>(descr.getAsJsonArray("apply_to")
.asList()
.stream()
@@ -24,16 +68,16 @@ public class StackStage extends PipelineStage {
public void run(int screenW, int screenH) {
switch (this.direction) {
- case "horizontal":
+ case HORIZONTAL:
stackWidgetsHoriz(screenW);
break;
- case "vertical":
+ case VERTICAL:
stackWidgetsVert(screenH);
break;
}
}
- public void stackWidgetsVert( int screenH) {
+ public void stackWidgetsVert(int screenH) {
int compHeight = -5;
for (Widget wid : primary) {
compHeight += wid.getHeight() + 5;
@@ -41,9 +85,9 @@ public class StackStage extends PipelineStage {
int y = switch (this.align) {
- case "top" -> y = 5;
- case "bot" -> y = (screenH-compHeight) - 5;
- default -> y = (screenH-compHeight)/2;
+ case TOP -> y = 5;
+ case BOT -> y = (screenH - compHeight) - 5;
+ default -> y = (screenH - compHeight) / 2;
};
for (Widget wid : primary) {
@@ -53,7 +97,7 @@ public class StackStage extends PipelineStage {
}
public void stackWidgetsHoriz(int screenW) {
- // TODO not centered
+ // TODO not centered (?)
int compWidth = -5;
for (Widget wid : primary) {
compWidth += wid.getWidth() + 5;
@@ -61,9 +105,9 @@ public class StackStage extends PipelineStage {
int x = switch (this.align) {
- case "left" -> x = 5;
- case "right" -> x = (screenW-compWidth) - 5;
- default -> x = (screenW-compWidth)/2;
+ case LEFT-> x = 5;
+ case RIGHT -> x = (screenW - compWidth) - 5;
+ default -> x = (screenW - compWidth) / 2;
};
for (Widget wid : primary) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ErrorWidget.java
index 0e85003f..7f53fde7 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ErrorWidget.java
@@ -8,18 +8,24 @@ import net.minecraft.util.Formatting;
// empty widget for when nothing can be shown
-public class EmptyWidget extends Widget {
- private static final MutableText TITLE = Text.literal("Empty").formatted(Formatting.RED,
+public class ErrorWidget extends Widget {
+ private static final MutableText TITLE = Text.literal("Error").formatted(Formatting.RED,
Formatting.BOLD);
- public EmptyWidget() {
+ Text error = Text.of("No info available!");
+
+ public ErrorWidget() {
+ super(TITLE, Formatting.RED.getColorValue());
+ }
+
+ public ErrorWidget(String error) {
super(TITLE, Formatting.RED.getColorValue());
+ this.error = Text.of(error);
}
@Override
public void updateContent() {
- Text info = Text.of("No info for this area!");
- PlainTextComponent inf = new PlainTextComponent(info);
+ PlainTextComponent inf = new PlainTextComponent(this.error);
this.addComponent(inf);
}
diff --git a/src/main/resources/assets/skyblocker/tabhud/readme.md b/src/main/resources/assets/skyblocker/tabhud/readme.md
index 1f294cb4..f8394c3e 100644
--- a/src/main/resources/assets/skyblocker/tabhud/readme.md
+++ b/src/main/resources/assets/skyblocker/tabhud/readme.md
@@ -57,7 +57,7 @@ Grouped by themes (roughly)
- EffectWidget: Currently active effects.
- ElectionWidget: The current mayor election.
- EssenceWidget: Your dungeon essences.
-- EmptyWidget: Generic "No data available" display.
+- ErrorWidget: Displays an error message, "No data available" by default. Optional arg `text`: The error to be displayed.
- EventWidget: Current events. Arg `inGarden: true|false`: Is this widget displayed in the garden area?
- FireSaleWidget: Ongoing fire sales.
- MinionWidget: The minions on your island.
diff --git a/src/main/resources/assets/skyblocker/tabhud/screen_a/unknown.json b/src/main/resources/assets/skyblocker/tabhud/screen_a/unknown.json
index 0252940a..b682cc3d 100644
--- a/src/main/resources/assets/skyblocker/tabhud/screen_a/unknown.json
+++ b/src/main/resources/assets/skyblocker/tabhud/screen_a/unknown.json
@@ -1,7 +1,7 @@
{
"widgets": [
{
- "name": "EmptyWidget",
+ "name": "ErrorWidget",
"alias": "ew"
}
],
diff --git a/src/main/resources/assets/skyblocker/tabhud/screen_b/unknown.json b/src/main/resources/assets/skyblocker/tabhud/screen_b/unknown.json
index 0252940a..b682cc3d 100644
--- a/src/main/resources/assets/skyblocker/tabhud/screen_b/unknown.json
+++ b/src/main/resources/assets/skyblocker/tabhud/screen_b/unknown.json
@@ -1,7 +1,7 @@
{
"widgets": [
{
- "name": "EmptyWidget",
+ "name": "ErrorWidget",
"alias": "ew"
}
],
diff --git a/src/main/resources/assets/skyblocker/tabhud/standard/unknown.json b/src/main/resources/assets/skyblocker/tabhud/standard/unknown.json
index 0252940a..b682cc3d 100644
--- a/src/main/resources/assets/skyblocker/tabhud/standard/unknown.json
+++ b/src/main/resources/assets/skyblocker/tabhud/standard/unknown.json
@@ -1,7 +1,7 @@
{
"widgets": [
{
- "name": "EmptyWidget",
+ "name": "ErrorWidget",
"alias": "ew"
}
],
diff --git a/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_a/unknown.json b/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_a/unknown.json
index 1b204adf..280a46a8 100644
--- a/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_a/unknown.json
+++ b/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_a/unknown.json
@@ -1,7 +1,7 @@
{
"widgets": [
{
- "name": "EmptyWidget",
+ "name": "ErrorWidget",
"alias": "ew"
}
],
diff --git a/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_b/unknown.json b/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_b/unknown.json
index 1b204adf..280a46a8 100644
--- a/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_b/unknown.json
+++ b/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/screen_b/unknown.json
@@ -1,7 +1,7 @@
{
"widgets": [
{
- "name": "EmptyWidget",
+ "name": "ErrorWidget",
"alias": "ew"
}
],
diff --git a/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/standard/unknown.json b/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/standard/unknown.json
index 1b204adf..280a46a8 100644
--- a/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/standard/unknown.json
+++ b/src/main/resources/resourcepacks/default_top/assets/skyblocker/tabhud/standard/unknown.json
@@ -1,7 +1,7 @@
{
"widgets": [
{
- "name": "EmptyWidget",
+ "name": "ErrorWidget",
"alias": "ew"
}
],