aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me
diff options
context:
space:
mode:
authormsg-programs <msgdoesstuff@gmail.com>2023-04-02 14:58:42 +0200
committermsg-programs <msgdoesstuff@gmail.com>2023-04-02 14:58:42 +0200
commit9cbce39d68c1c766e20819101fbb803ad05e8fdc (patch)
tree164b9f11c4c572bdd632aa16b53fc8a9634f7331 /src/main/java/me
parent3074075c1561163606f441f1a8f582b79082c311 (diff)
downloadSkyblocker-9cbce39d68c1c766e20819101fbb803ad05e8fdc.tar.gz
Skyblocker-9cbce39d68c1c766e20819101fbb803ad05e8fdc.tar.bz2
Skyblocker-9cbce39d68c1c766e20819101fbb803ad05e8fdc.zip
Merging SkyHyTab into Skyblocker: Initial commit
Needs cleanup
Diffstat (limited to 'src/main/java/me')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java2
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java18
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java70
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java37
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java51
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericServerScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestPlayerScreen.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GuestServerScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomePlayerScreen.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HomeServerScreen.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/HubServerScreen.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/MineServerScreen.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/ParkServerScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/PlayerListScreen.java19
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java250
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java50
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/StrMan.java64
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CommsWidget.java53
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ComposterWidget.java44
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/CookieWidget.java33
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDeathWidget.java53
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonDownedWidget.java42
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPlayerWidget.java83
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonPuzzleWidget.java51
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java35
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/DungeonServerWidget.java56
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EffectWidget.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ElectionWidget.java97
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EmptyWidget.java27
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EssenceWidget.java48
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java33
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/FireSaleWidget.java56
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ForgeWidget.java60
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java59
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GuestServerWidget.java41
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandGuestsWidget.java44
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandOwnersWidget.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandSelfWidget.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/IslandServerWidget.java47
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/MinionWidget.java135
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ParkServerWidget.java42
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java61
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PowderWidget.java35
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ProfileWidget.java42
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ServerWidget.java40
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/SkillsWidget.java63
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/TrapperWidget.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/UpgradeWidget.java38
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java183
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java29
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java30
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java26
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java22
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java33
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java49
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java53
63 files changed, 2900 insertions, 0 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
index 3d713727..c866ea01 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java
@@ -9,6 +9,7 @@ import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud;
import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup;
import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
import me.xmrvizzy.skyblocker.utils.UpdateChecker;
import net.fabricmc.api.ClientModInitializer;
@@ -25,5 +26,6 @@ public class SkyblockerInitializer implements ClientModInitializer {
ChatMessageListener.init();
UpdateChecker.init();
DiscordRPCManager.init();
+ TabHud.init();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 21322c81..41ac7f2d 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -125,6 +125,8 @@ public class SkyblockerConfig implements ConfigData {
public final boolean enableUpdateNotification = true;
public final boolean backpackPreviewWithoutShift = false;
+ public boolean tabHudEnabled = true;
+
@ConfigEntry.Gui.Excluded
public String apiKey;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java
new file mode 100644
index 00000000..e96e4ede
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudAccessor.java
@@ -0,0 +1,18 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import java.util.Comparator;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+
+import net.minecraft.client.gui.hud.PlayerListHud;
+import net.minecraft.client.network.PlayerListEntry;
+
+@Mixin(PlayerListHud.class)
+public interface PlayerListHudAccessor {
+
+ @Accessor("ENTRY_ORDERING")
+ public static Comparator<PlayerListEntry> getOrdering() {
+ throw new AssertionError();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
new file mode 100644
index 00000000..36d4a375
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
@@ -0,0 +1,70 @@
+package me.xmrvizzy.skyblocker.mixin;
+
+import java.util.List;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.hud.PlayerListHud;
+import net.minecraft.client.network.ClientPlayNetworkHandler;
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.scoreboard.Scoreboard;
+import net.minecraft.scoreboard.ScoreboardObjective;
+import net.minecraft.text.Text;
+
+@Environment(EnvType.CLIENT)
+@Mixin(PlayerListHud.class)
+public class PlayerListHudMixin {
+
+ @Shadow
+ private Text footer;
+
+ boolean ok = true;
+ @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true)
+ public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) {
+
+ if (!Utils.isOnSkyblock) {
+ return;
+ }
+
+ if (TabHud.defaultTgl.isPressed()) {
+ return;
+ }
+
+ MinecraftClient client = MinecraftClient.getInstance();
+ ClientPlayNetworkHandler nwH = client.getNetworkHandler();
+ if (nwH == null) {
+ return;
+ }
+
+ List<PlayerListEntry> list = nwH.getListedPlayerListEntries().stream().sorted(PlayerListHudAccessor.getOrdering()).toList();
+ int w = scaledW;
+ int h = MinecraftClient.getInstance().getWindow().getScaledHeight();
+
+ try {
+
+ Screen screen = Screen.getCorrect(w, h, list, footer);
+ if (screen != null) {
+ screen.render(ms);
+ info.cancel();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ SkyblockerConfig.get().general.tabHudEnabled = false;
+ MinecraftClient.getInstance().player.sendMessage(Text.of("The tab HUD has crashed due to some unexpected text, see log! :("));
+ }
+
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java
new file mode 100644
index 00000000..3cc75e00
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java
@@ -0,0 +1,40 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud;
+
+import org.lwjgl.glfw.GLFW;
+
+import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
+import net.minecraft.client.option.KeyBinding;
+import net.minecraft.client.util.InputUtil;
+
+public class TabHud {
+
+ public static KeyBinding playerTgl;
+ public static KeyBinding genericTgl;
+ // public static KeyBinding mapTgl;
+ public static KeyBinding defaultTgl;
+
+ public static void init() {
+
+ playerTgl = KeyBindingHelper.registerKeyBinding(
+ new KeyBinding("key.skyhytab.playerTgl",
+ InputUtil.Type.KEYSYM,
+ GLFW.GLFW_KEY_LEFT_SHIFT,
+ "key.categories.skyblocker"));
+ genericTgl = KeyBindingHelper.registerKeyBinding(
+ new KeyBinding("key.tabhud.genericTgl",
+ InputUtil.Type.KEYSYM,
+ GLFW.GLFW_KEY_LEFT_ALT,
+ "key.categories.skyblocker"));
+ // mapTgl = KeyBindingHelper.registerKeyBinding(
+ // new KeyBinding("key.tabhud.mapTgl",
+ // InputUtil.Type.KEYSYM,
+ // GLFW.GLFW_KEY_LEFT_ALT,
+ // "key.categories.skyblocker"));
+ defaultTgl = KeyBindingHelper.registerKeyBinding(
+ new KeyBinding("key.tabhud.defaultTgl",
+ InputUtil.Type.KEYSYM,
+ GLFW.GLFW_KEY_B,
+ "key.categories.skyblocker"));
+
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java
new file mode 100644
index 00000000..4bd48f89
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonHubScreen.java
@@ -0,0 +1,24 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EssenceWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget;
+
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.Text;
+
+public class DungeonHubScreen extends Screen{
+
+ public DungeonHubScreen(int w, int h, List<PlayerListEntry> list, Text footer) {
+ super(w, h);
+ ServerWidget sw = new ServerWidget(list);
+ EssenceWidget ew = new EssenceWidget(list);
+ centerW(sw);
+ centerW(ew);
+ stackWidgetsH(sw, ew);
+ this.addWidget(ew);
+ this.addWidget(sw);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java
new file mode 100644
index 00000000..ce87a035
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonPlayerScreen.java
@@ -0,0 +1,30 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPlayerWidget;
+
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.Text;
+
+public class DungeonPlayerScreen extends Screen {
+
+ public DungeonPlayerScreen(int w, int h, List<PlayerListEntry> ple, Text footer) {
+ super(w, h);
+ DungeonPlayerWidget dpw1 = new DungeonPlayerWidget(ple, 1);
+ DungeonPlayerWidget dpw2 = new DungeonPlayerWidget(ple, 2);
+ DungeonPlayerWidget dpw3 = new DungeonPlayerWidget(ple, 3);
+ DungeonPlayerWidget dpw4 = new DungeonPlayerWidget(ple, 4);
+ DungeonPlayerWidget dpw5 = new DungeonPlayerWidget(ple, 5);
+
+ offCenterL(dpw1);
+ offCenterL(dpw2);
+ offCenterL(dpw3);
+ offCenterR(dpw4);
+ offCenterR(dpw5);
+ stackWidgetsH(dpw1, dpw2, dpw3);
+ stackWidgetsH(dpw4, dpw5);
+ addWidgets(dpw1, dpw2, dpw3, dpw4, dpw5);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java
new file mode 100644
index 00000000..bb80b01b
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/DungeonScreen.java
@@ -0,0 +1,37 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDeathWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonDownedWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonPuzzleWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonSecretWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.DungeonServerWidget;
+
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.Text;
+
+public class DungeonScreen extends Screen {
+
+ public DungeonScreen(int w, int h, List<PlayerListEntry> ple, Text footer) {
+ super(w, h);
+ DungeonDownedWidget ddow = new DungeonDownedWidget(ple);
+ DungeonDeathWidget ddew = new DungeonDeathWidget(ple);
+ DungeonSecretWidget dscw = new DungeonSecretWidget(ple);
+ DungeonServerWidget dsrw = new DungeonServerWidget(ple);
+ DungeonPuzzleWidget dpuw = new DungeonPuzzleWidget(ple);
+
+ offCenterL(ddow);
+ offCenterL(ddew);
+ offCenterL(dscw);
+ offCenterR(dsrw);
+ offCenterR(dpuw);
+
+ stackWidgetsH(ddow, ddew, dscw);
+ stackWidgetsH(dsrw, dpuw);
+
+ addWidgets(ddow, ddew, dscw, dsrw, dpuw);
+
+ }
+
+}
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
new file mode 100644
index 00000000..07162834
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java
@@ -0,0 +1,19 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget;
+
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.Text;
+
+public class EmptyScreen extends Screen {
+
+ public EmptyScreen(int w, int h, List<PlayerListEntry> ple, Text footer) {
+ super(w, h);
+ EmptyWidget ew = new EmptyWidget(ple);
+ this.center(ew);
+ this.addWidget(ew);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java
new file mode 100644
index 00000000..f66638a9
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/FarmingServerScreen.java
@@ -0,0 +1,23 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ServerWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.TrapperWidget;
+
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.Text;
+
+public class FarmingServerScreen extends Screen{
+
+ public FarmingServerScreen(int w, int h, List<PlayerListEntry> list, Text footer) {
+ super(w, h);
+ ServerWidget sw = new ServerWidget(list);
+ TrapperWidget tw = new TrapperWidget(list);
+ centerW(sw);
+ centerW(tw);
+ stackWidgetsH(sw, tw);
+ this.addWidgets(tw, sw);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java
new file mode 100644
index 00000000..30f4bbc3
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenScreen.java
@@ -0,0 +1,23 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ComposterWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenServerWidget;
+import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.text.Text;
+
+public class GardenScreen extends Screen{
+
+ public GardenScreen(int w, int h, List<PlayerListEntry> ple, Text footer) {
+ super(w, h);
+ GardenServerWidget gsw = new GardenServerWidget(ple);
+ ComposterWidget cw = new ComposterWidget(ple);
+
+ this.stackWidgetsH(gsw, cw);
+ this.centerW(gsw);
+ this.centerW(cw);
+ this.addWidgets(gsw, cw);
+ }
+
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java
new file mode 100644
index 00000000..01b159e2
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java
@@ -0,0 +1,51 @@
+package me.xmrvizzy.skyblocker.skyblock.tabhud.screens;
+
+import java.util.List;
+
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ElectionWidget;
+import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget;
+im