aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authormsg-programs <msgdoesstuff@gmail.com>2023-07-27 22:14:54 +0200
committermsg-programs <msgdoesstuff@gmail.com>2023-07-27 22:15:42 +0200
commit393ec5f59d16296248fe1994d02ced699a725fcb (patch)
tree65647782e6ca80cc36838058500c5aa77812fa50 /src/main/java
parentc2f5155391482368425b61517848f4a11080dcf7 (diff)
downloadSkyblocker-393ec5f59d16296248fe1994d02ced699a725fcb.tar.gz
Skyblocker-393ec5f59d16296248fe1994d02ced699a725fcb.tar.bz2
Skyblocker-393ec5f59d16296248fe1994d02ced699a725fcb.zip
Load layout from resoure packs, see details.
Use resource pack logic to load the layouts. Finally delete the old screen defs, replace with builtin layout JSON files. Include a top-aligned layout as a builtin resource pack. Implement more possibilites for the layout to support said pack.
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenBuilder.java46
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/ScreenMaster.java137
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/AlignStage.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java16
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java230
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java51
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericInfoScreen.java48
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/CrimsonIsleScreen.java32
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonHubScreen.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/DungeonScreen.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/FarmingServerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GardenScreen.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GenericServerScreen.java21
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/GuestServerScreen.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HomeServerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/HubServerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/MineServerScreen.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/ParkServerScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java28
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/DungeonPlayerScreen.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/GuestPlayerScreen.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/HomePlayerScreen.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/playerList/PlayerListScreen.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java48
27 files changed, 173 insertions, 888 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index b6f11790..91ae3740 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -84,6 +84,7 @@ public class SkyblockerMod implements ClientModInitializer {
DungeonMap.init();
TheRift.init();
TitleContainer.init();
+ ScreenMaster.init();
containerSolverManager.init();
scheduler.scheduleCyclic(Utils::update, 20);
scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100);
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 1197ca2d..4c317a57 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
@@ -5,9 +5,10 @@ import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
-import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@@ -20,6 +21,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.CollideStag
import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline.PipelineStage;
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.EventWidget;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
@@ -29,6 +31,9 @@ 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<>();
@@ -37,12 +42,15 @@ public class ScreenBuilder {
// maps alias -> widget instance
private HashMap<String, Widget> objectMap = new HashMap<>();
+ private String builderName;
+
/**
* Create a ScreenBuilder from a json.
*/
- public ScreenBuilder(String jsonfile) throws IOException {
+ public ScreenBuilder(Identifier ident) throws IOException {
+
+ this.builderName = ident.getPath();
- Identifier ident = new Identifier(SkyblockerMod.NAMESPACE, "tabhud/" + jsonfile + ".json");
BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ident);
JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
reader.close();
@@ -61,7 +69,10 @@ public class ScreenBuilder {
}
for (JsonElement l : layout) {
- layoutPipeline.add(createStage(l.getAsJsonObject()));
+ PipelineStage ps = createStage(l.getAsJsonObject());
+ if (ps != null) {
+ layoutPipeline.add(ps);
+ }
}
}
@@ -76,8 +87,11 @@ public class ScreenBuilder {
switch (name) {
case "EventWidget":
return new EventWidget(widget.get("inGarden").getAsBoolean());
+ case "DungeonPlayerWidget":
+ return new DungeonPlayerWidget(widget.get("player").getAsInt());
case "Widget":
// clown case sanity check. don't instantiate the superclass >:|
+ LOGGER.error("Couldn't find class \"{}\"!", name);
return new EmptyWidget();
}
@@ -85,13 +99,14 @@ public class ScreenBuilder {
// TODO don't get package list for every widget; do it once and cache.
// fine for now, as this would only shorten the load time anyways
- // find all packages that might contain widget classes
- Package[] packs = Package.getPackages();
-
- List<String> packnames = Arrays.stream(packs)
- .map(pack -> pack.getName())
- .filter(s -> s.startsWith("me.xmrvizzy.skyblocker.skyblock.tabhud.widget"))
- .toList();
+ // 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.
+ String packbase = "me.xmrvizzy.skyblocker.skyblock.tabhud.widget";
+ String[] packnames = {
+ packbase,
+ packbase + ".rift"
+ };
// construct the full class name and try to load.
Class<?> clazz = null;
@@ -105,6 +120,7 @@ public class ScreenBuilder {
// load failed.
if (clazz == null) {
+ LOGGER.error("Couldn't find class \"{}\"!", name);
return new EmptyWidget();
}
@@ -114,6 +130,7 @@ 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();
}
}
@@ -134,14 +151,17 @@ public class ScreenBuilder {
return new AlignStage(this, descr);
case "collideAgainst":
return new CollideStage(this, descr);
+ default:
+ LOGGER.error("No such op \"{}\" as requested by {}", op, this.builderName);
+ return null;
}
- return null;
}
/**
* Lookup Widget instance from alias name
*/
public Widget getInstance(String name) {
+ // TODO: filter null here or in stage classes
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 97969503..997bd5a9 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,51 +1,56 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder;
-import java.io.BufferedReader;
import java.io.IOException;
import java.util.HashMap;
-import java.util.Map.Entry;
+import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-
-import me.xmrvizzy.skyblocker.SkyblockerMod;
-import net.minecraft.client.MinecraftClient;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator;
+import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
+import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
+import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
+import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.resource.Resource;
+import net.minecraft.resource.ResourceManager;
+import net.minecraft.resource.ResourceType;
import net.minecraft.util.Identifier;
public class ScreenMaster {
- private static final Identifier ASSIGNMENT_JSON = new Identifier(SkyblockerMod.NAMESPACE, "tabhud/assignment.json");
private static final Logger LOGGER = LoggerFactory.getLogger("skyblocker");
private static HashMap<String, ScreenBuilder> standardMap = new HashMap<>();
- // private static HashMap<String, ScreenBuilder> screenAMap = new HashMap<>();
- // private static HashMap<String, ScreenBuilder> screenBMap = new HashMap<>();
-
- static {
- init();
- }
+ private static HashMap<String, ScreenBuilder> screenAMap = new HashMap<>();
+ private static HashMap<String, ScreenBuilder> screenBMap = new HashMap<>();
/**
- * Load the assignment json and construct the screen mapping
+ * Load a screen mapping from
*/
- public static void init() {
- try (BufferedReader reader = MinecraftClient.getInstance().getResourceManager().openAsReader(ASSIGNMENT_JSON)) {
-
- JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
- JsonObject standard = json.getAsJsonObject("standard");
- for (Entry<String, JsonElement> entry : standard.entrySet()) {
- standardMap.put(entry.getKey(), new ScreenBuilder(entry.getValue().getAsString()));
+ public static void load(Identifier ident) {
+
+ String path = ident.getPath();
+ String[] parts = path.split("/");
+ String screenType = parts[parts.length - 2];
+ 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("screenA")) {
+ screenAMap.put(location, new ScreenBuilder(ident));
+ } else if (screenType.equals("screenB")) {
+ screenBMap.put(location, new ScreenBuilder(ident));
}
-
} catch (IOException ioex) {
- LOGGER.info("[Skyblocker] Couldn't load tabhud config!");
- ioex.printStackTrace();
+ LOGGER.error("Can't load screen definition from {}", path);
}
+
}
/**
@@ -53,30 +58,60 @@ public class ScreenMaster {
* Calls the appropriate ScreenBuilder with the screen's dimensions
*/
public static void render(DrawContext context, int w, int h) {
- standardMap.get("default").run(context, w, h);
+ String location = PlayerLocator.getPlayerLocation().internal;
+ HashMap<String, ScreenBuilder> lookup;
+ if (TabHud.toggleA.isPressed()) {
+ lookup = screenAMap;
+ } else if (TabHud.toggleB.isPressed()) {
+ lookup = screenBMap;
+ } else {
+ lookup = standardMap;
+ }
+
+ ScreenBuilder sb = lookup.get(location);
+ // seems suboptimal, maybe load the default first into all possible values
+ // and then override?
+ if (sb == null) {
+ sb = lookup.get("default");
+ }
+
+ sb.run(context, w, h);
+
}
-}
-/*
- *
- * stackWidgetsH
-stackWidgetsW
---> stack (direction?) horiz/vert (align?) center/top/bottom/left/right
-
-centerH
-centerW
-center
---> center (center/horiz/vert)
-----> place (one) (where?) center/top/bot/left/right/[corners]
-
-offCenterL
-offCenterR
---> offCenter left/right/top/bot
-----> offsetPlace (where?) center/left/right/top/bot (offset to where?) left/right/top/bot
-
-----> align (any) (reference?) left, leftOfCenter, horizontalCenter, rightOfCenter, right, top, topOfCenter, verticalCenter, botOfCenter, bot
-
-collideAgainstL
-collideAgainstR
---> collideAgainst (from where?) left/right/top/bot
- */ \ No newline at end of file
+ public static void init() {
+
+ // WHY MUST IT ALWAYS BE SUCH NESTED GARBAGE MINECRAFT KEEP THAT IN DFU FFS
+
+ FabricLoader.getInstance()
+ .getModContainer("skyblocker")
+ .ifPresent(container -> ResourceManagerHelper.registerBuiltinResourcePack(
+ new Identifier("skyblocker", "default_top"),
+ container,
+ ResourcePackActivationType.NORMAL));
+
+ ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(
+ // ...why are we instantiating an interface again?
+ new SimpleSynchronousResourceReloadListener() {
+ @Override
+ public Identifier getFabricId() {
+ return new Identifier("skyblocker", "tabhud");
+ }
+
+ @Override
+ public void reload(ResourceManager manager) {
+
+ standardMap.clear();
+ screenAMap.clear();
+ screenBMap.clear();
+
+ for (Map.Entry<Identifier, Resource> entry : manager
+ .findResources("tabhud", path -> path.getPath().endsWith(".json"))
+ .entrySet()) {
+ load(entry.getKey());
+ }
+ }
+ });
+ }
+
+}
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 87638c33..4d5a90be 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,5 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.pipeline;
+import java.security.InvalidParameterException;
import java.util.ArrayList;
import com.google.gson.JsonObject;
@@ -12,6 +13,9 @@ public class AlignStage extends PipelineStage {
private String reference;
public AlignStage(ScreenBuilder builder, JsonObject descr) {
+ if (!descr.has("reference")) {
+ throw new InvalidParameterException("no reference in " + descr);
+ }
this.reference = descr.get("reference").getAsString();
this.primary = new ArrayList<Widget>(descr.getAsJsonArray("apply_to")
.asList()
@@ -46,6 +50,18 @@ public class AlignStage extends PipelineStage {
hHalf = screenH / 2;
wid.setY(hHalf + 3);
break;
+ case "top":
+ wid.setY(5);
+ break;
+ case "bot":
+ wid.setY(screenH - wid.getHeight() - 5);
+ break;
+ case "left":
+ wid.setX(5);
+ break;
+ case "right":
+ wid.setX(screenW - wid.getWidth() - 5);
+ break;
}
}
}
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 3ed89fda..c6b72999 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
@@ -23,9 +23,15 @@ public class PlaceStage extends PipelineStage {
public void run(int screenW, int screenH) {
Widget wid = primary.get(0);
- if (where.equals("center")) {
- wid.setY((screenH - wid.getHeight()) / 2);
- wid.setX((screenW - wid.getWidth()) / 2);
+ switch (where) {
+ case "center":
+ wid.setY((screenH - wid.getHeight()) / 2);
+ wid.setX((screenW - wid.getWidth()) / 2);
+ break;
+ case "centerTop":
+ wid.setX((screenW - wid.getWidth()) / 2);
+ wid.setY(5);
+ break;
}
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java
deleted file mode 100644
index 5c302eb3..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget;
-
-import net.minecraft.text.Text;
-
-public class EmptyScreen extends Screen {
-
- public EmptyScreen(int w, int h, Text footer) {
- super(w, h);
- EmptyWidget ew = new EmptyWidget();
- this.center(ew);
- this.addWidget(ew);
- }
-
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java
deleted file mode 100644
index 3d6ce64d..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
-
-import java.util.ArrayList;
-
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GardenInfoScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericInfoScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericRiftInfoScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.CrimsonIsleScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonHubScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.FarmingServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GardenScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GenericServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GuestServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HomeServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HubServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.MineServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.ParkServerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.RiftScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.DungeonPlayerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.GuestPlayerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget;
-import net.minecraft.client.gui.DrawContext;
-import net.minecraft.text.Text;
-
-public class Screen {
-
- private ArrayList<Widget> widgets = new ArrayList<>();
- public int w, h;
-
- public Screen(int w, int h) {
- float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f;
- this.w = (int) (w / scale);
- this.h = (int) (h / scale);
- }
-
- public static Screen getCorrect(int w, int h, Text footer) {
-
- if (TabHud.toggleA.isPressed()) {
- return Screen.correctGenericScrn(w, h, footer);
- } else if (TabHud.toggleB.isPressed()) {
- return Screen.correctPlayerScrn(w, h, footer);
- } else {
- return Screen.correctMainScrn(w, h, footer);
- }
- }
-
- private static Screen correctGenericScrn(int w, int h, Text footer) {
- return switch (PlayerLocator.getPlayerLocation()) {
- case GARDEN -> new GardenInfoScreen(w, h, footer); // ok
- case THE_RIFT -> new GenericRiftInfoScreen(w, h, footer);
- case UNKNOWN -> new EmptyScreen(w, h, footer); // ok
- default -> new GenericInfoScreen(w, h, footer); // ok
- };
- }
-
- private static Screen correctPlayerScrn(int w, int h, Text footer) {
- return switch (PlayerLocator.getPlayerLocation()) {
- case GUEST_ISLAND -> new GuestPlayerScreen(w, h, footer); // ok
- case HOME_ISLAND, GARDEN -> new HomePlayerScreen(w, h, footer); // ok for 1 player
- case DUNGEON -> new DungeonPlayerScreen(w, h, footer);
- case UNKNOWN -> new EmptyScreen(w, h, footer); // ok
- default -> new PlayerListScreen(w, h, footer); // ok
- };
- }
-
- private static Screen correctMainScrn(int w, int h, Text footer) {
- return switch (PlayerLocator.getPlayerLocation()) {
- case PARK -> new ParkServerScreen(w, h, footer); // ok
- case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming
- case HOME_ISLAND -> new HomeServerScreen(w, h, footer); // ok
- case GUEST_ISLAND -> new GuestServerScreen(w, h, footer); // ok
- case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, footer); // ok, TODO active forge
- case FARMING_ISLAND -> new FarmingServerScreen(w, h, footer);
- case DUNGEON_HUB -> new DungeonHubScreen(w, h, footer); // ok
- case DUNGEON -> new DungeonScreen(w, h, footer); // ok
- case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, footer);
- case GARDEN -> new GardenScreen(w, h, footer); // ok
- case THE_RIFT -> new RiftScreen(w, h, footer);
- case UNKNOWN -> new EmptyScreen(w, h, footer); // ok
- default -> new GenericServerScreen(w, h, footer); // ok
- };
- }
-
- /**
- * Add a widget to this screen
- */
- public void addWidget(Widget w) {
- widgets.add(w);
- }
-
- /**
- * Add many widgets to this screen
- */
- public void addWidgets(Widget... ws) {
- for (Widget w : ws) {
- widgets.add(w);
- }
- }
-
- public void render(DrawContext context) {
- for (Widget w : widgets) {
- w.render(context);
- }
- }
-
- /**
- * Stack these widgets on top of each other as determined by the lists's order
- */
- public void stackWidgetsH(Widget... list) {
- int compHeight = -5;
- for (Widget wid : list) {
- compHeight += wid.getHeight() + 5;
- }
-
- int y = (h - compHeight) / 2;
- for (Widget wid : list) {
- wid.setY(y);
- y += wid.getHeight() + 5;
- }
- }
-
- /**
- * Arrange these widgets next to each other as determined by the lists's order
- */
- public void stackWidgetsW(Widget... list) {
- // TODO not centered
- int compWidth = -5;
- for (Widget wid : list) {
- compWidth += wid.getWidth() + 5;
- }
-
- int x = (w - compWidth) / 2;
- for (Widget wid : list) {
- wid.setX(x);
- x += wid.getWidth() + 5;
- }
- }
-
- /**
- * Center a widget vertically, keeping X pos
- */
- public void centerH(Widget wid) {
- wid.setY((h - wid.getHeight()) / 2);
- }
-
- /**
- * Center a widget horizontally, keeping Y pos
- */
- public void centerW(Widget wid) {
- wid.setX((w - wid.getWidth()) / 2);
- }
-
- /**
- * Center a widget vertically and horizontally
- */
- public void center(Widget wid) {
- this.centerH(wid);
- this.centerW(wid);
- }
-
- /**
- * Let a widget's left border be on the screen's center, keeping Y pos
- */
- public void offCenterL(Widget wid) {
- int wHalf = this.w / 2;
- wid.setX(wHalf - 3 - wid.getWidth());
- }
-
- /**
- * Let a widget's right border be on the screen's center, keeping Y pos
- */
- public void offCenterR(Widget wid) {
- int wHalf = this.w / 2;
- wid.setX(wHalf + 3);
- }
-
- public void collideAgainstL(Widget w, Widget... others) {
- int yMin = w.getY();
- int yMax = w.getY() + w.getHeight();
-
- int xCor = this.w / 2;
-
- // assume others to be sorted top-bottom.
- for (Widget other : others) {
- if (other.getY() + other.getHeight() + 5 < yMin) {
- // too high, next one
- continue;
- }
-
- if (other.getY() - 5 > yMax) {
- // too low, no more collisions possible
- break;
- }
-
- int xPos = other.getX() - 5 - w.getWidth();
- xCor = Math.min(xCor, xPos);
- }
- w.setX(xCor);
- }
-
- public void collideAgainstR(Widget w, Widget... others) {
- int yMin = w.getY();
- int yMax = w.getY() + w.getHeight();
-
- int xCor = this.w / 2;
-
- // assume others to be sorted top-bottom.
- for (Widget other : others) {
- if (other.getY() + other.getHeight() + 5 < yMin) {
- // too high, next one
- continue;
- }
-
- if (other.getY() - 5 > yMax) {
- // too low, no more collisions possible
- break;
- }
-
- int xPos = other.getX() + other.getWidth() + 5;
- xCor = Math.max(xCor, xPos);
- }
- w.setX(xCor);
- }
-}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java
deleted file mode 100644
index 587c2274..00000000
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GardenInfoScreen.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo;
-
-
-
-import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget;
-import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget;
-
-import net.minecraft.text.Text;
-
-public class GardenInfoScreen extends Screen {
-
- public GardenInfoScreen(int w, int h, Text footer) {
- super(w, h);
-
- String f = footer.getString();
-
- // GardenSkillsWidget gsw = new GardenSkillsWidget();
- // EventWidget evw = new EventWidget(true);
- // // UpgradeWidget uw = new UpgradeWidget(f);
-
- // ProfileWidget pw = new ProfileWidget();
- // EffectWidget efw = new EffectWidget(f);
-
- // JacobsContestWidget jcw = new JacobsContestWidget();