diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 21e5dcc..22de069 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -30,10 +30,10 @@ jobs: - name: download fallback repo run: ./gradlew updateFallbackRepo - name: build - run: ./gradlew chiseledBuild + run: ./gradlew build - name: capture build artifacts if: ${{ matrix.java == '21' }} # Only upload artifacts built from latest java uses: actions/upload-artifact@v4 with: name: Artifacts - path: versions/**/build/libs/*.jar \ No newline at end of file + path: build/libs/*.jar \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 17d5fa1..2135472 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ import java.nio.channels.Channels import java.nio.channels.ReadableByteChannel plugins { - id("fabric-loom") version "1.10-SNAPSHOT" + id("fabric-loom") version "1.14-SNAPSHOT" } version = property("mod_version")!! as String + "+mc" + property("minecraft_version")!! @@ -17,9 +17,14 @@ base { } loom { - accessWidenerPath = project.file("src/main/resources/skyblocktweaks.accesswidener") -} + accessWidenerPath = project.file("src/main/resources/skyblocktweaks.accesswidener") + +// runConfigs.all { +// ideConfigGenerated(stonecutter.current.isActive) +// } + runConfigs.remove(runConfigs["server"]) +} repositories { maven("https://maven.isxander.dev/releases") @@ -40,24 +45,39 @@ repositories { } maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") maven("https://repo.hypixel.net/repository/Hypixel/") + maven("https://maven.parchmentmc.org") + maven("https://maven.gegy.dev/releases") } dependencies { minecraft("com.mojang:minecraft:${property("minecraft_version")}") - mappings("net.fabricmc:yarn:${property("yarn_mappings")}:v2") +// mappings(loom.layered { +// officialMojangMappings() +// optionalProp("parchment_version") { +// parchment("org.parchmentmc.data:parchment-${property("minecraft_version")}:$it@zip") +// } +// optionalProp("yalmm_version") { +// mappings("dev.lambdaurora:yalmm-mojbackward:${property("minecraft_version")}+build.$it}") +// } +// }) + mappings(loom.layered { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${property("minecraft_version")}:${property("parchment_version")}@zip") + //mappings("dev.lambdaurora:yalmm-mojbackward:1.21.8+build.${property("yalmm_version")}") + // ^ Disabled as of 1/11 due to causing issues with decomp + }) modImplementation ("net.fabricmc:fabric-loader:${property("loader_version")}") modImplementation ("net.fabricmc.fabric-api:fabric-api:${property("fabric_version")}") modImplementation ("dev.isxander:yet-another-config-lib:${property("yacl_version")}") - //modImplementation ("com.terraformersmc:modmenu:${property("modmenu_version")}") - modCompileOnly("com.terraformersmc:modmenu:${property("modmenu_version")}") + modImplementation ("com.terraformersmc:modmenu:${property("modmenu_version")}") + //modCompileOnly("com.terraformersmc:modmenu:${property("modmenu_version")}") modCompileOnly("me.shedaniel:RoughlyEnoughItems-api-fabric:${property("rei_version")}") //modRuntimeOnly("me.shedaniel:RoughlyEnoughItems-fabric:${property("rei_version")}") implementation("net.hypixel:mod-api:${property("modapi_version")}") include(modImplementation("maven.modrinth:hypixel-mod-api:${property("modapi_fabric_version")}") as Any) - modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:1.2.1") - - + modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:1.2.1") } + tasks.processResources { inputs.property("version", project.version) @@ -86,6 +106,10 @@ tasks.named("jar") { } } +fun optionalProp(property: String, block: (String) -> T?): T? = + findProperty(property)?.toString()?.takeUnless { it.isBlank() }?.let(block) + + diff --git a/gradle.properties b/gradle.properties index 29c5189..dd0e39a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,12 +3,23 @@ org.gradle.jvmargs=-Xmx3G org.gradle.parallel=true maven_group=wtf.cheeze.sbt archives_base_name=SkyblockTweaks -loader_version=0.16.14 +loader_version=0.18.4 modapi_version=1.0.1 - mod_version=0.1.0-Alpha.17 #mod_version=Unstable +# Fix YALMM +fabric.loom.dropNonIntermediateRootMethods=true + +minecraft_version=1.21.10 +parchment_version=2025.10.12 +yalmm_version=3 +fabric_version=0.138.4+1.21.10 +modapi_fabric_version=1.0.1+build.1+mc1.21 +modmenu_version=16.0.0 +yacl_version=3.8.2+1.21.10-fabric +rei_version=21.9.812 +support_range=1.21.10 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e18bc25..23449a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 9aa308c..3bd6dd8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,20 +6,21 @@ pluginManagement { } mavenCentral() gradlePluginPortal() - maven("https://maven.kikugie.dev/snapshots") +// maven("https://maven.kikugie.dev/releases") +// maven("https://maven.kikugie.dev/snapshots") } } -plugins { - id("dev.kikugie.stonecutter") version "0.6-alpha.13" -} - -stonecutter { - kotlinController = true - centralScript = "build.gradle.kts" +//plugins { +// id("dev.kikugie.stonecutter") version "0.7.10" +//} - create(rootProject) { - versions( "1.21.5", "1.21.6") - vcsVersion = "1.21.5" - } -} +//stonecutter { +// kotlinController = true +// centralScript = "build.gradle.kts" +// +// create(rootProject) { +// versions("1.21.8") +// vcsVersion = "1.21.8" +// } +//} diff --git a/src/main/java/wtf/cheeze/sbt/SkyblockTweaks.java b/src/main/java/wtf/cheeze/sbt/SkyblockTweaks.java index 82e3f7b..541b8f7 100644 --- a/src/main/java/wtf/cheeze/sbt/SkyblockTweaks.java +++ b/src/main/java/wtf/cheeze/sbt/SkyblockTweaks.java @@ -57,7 +57,6 @@ public class SkyblockTweaks implements ModInitializer { @Override public void onInitialize() { - SBTConfig.load(); PersistentData.registerEvents(); @@ -79,12 +78,7 @@ public void onInitialize() { MiningTitles.registerEvents(); FetchurFeatures.registerEvents(); ReforgeOverlay.registerEvents(); - - //? if >1.21.5 - /*HudRenderEvents.registerEvents();*/ - - - + HudRenderEvents.registerEvents(); UpdateChecker.checkForUpdates(); } } \ No newline at end of file diff --git a/src/main/java/wtf/cheeze/sbt/command/CommandUtils.java b/src/main/java/wtf/cheeze/sbt/command/CommandUtils.java index d8243e1..7a8d254 100644 --- a/src/main/java/wtf/cheeze/sbt/command/CommandUtils.java +++ b/src/main/java/wtf/cheeze/sbt/command/CommandUtils.java @@ -23,9 +23,9 @@ import com.mojang.brigadier.suggestion.SuggestionProvider; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.text.MessageManager; import wtf.cheeze.sbt.utils.NumberUtils; import wtf.cheeze.sbt.utils.text.TextUtils; @@ -36,11 +36,10 @@ import java.util.function.Supplier; public class CommandUtils { - public static LiteralArgumentBuilder getScreenOpeningCommand(String name, Supplier screenFactory) { return ClientCommandManager.literal(name).executes(context -> { - MinecraftClient mc = context.getSource().getClient(); - mc.send(() -> mc.setScreen(screenFactory.get())); + Minecraft mc = context.getSource().getClient(); + mc.schedule(() -> mc.setScreen(screenFactory.get())); return 1; }); } @@ -54,7 +53,6 @@ public static SuggestionProvider getArrayAsSuggestion }; } - static int[] getCalcPetTable(Rarity rarity) { return switch (rarity) { case COMMON -> Constants.pets().levelsCommon(); @@ -66,41 +64,46 @@ static int[] getCalcPetTable(Rarity rarity) { }; } - - static Text getDebugText(String name, boolean value) { + static Component getDebugText(String name, boolean value) { return getDebugText(name, String.valueOf(value), value ? Colors.LIME : Colors.RED); } - static Text getDebugText(String name, int value) { + + static Component getDebugText(String name, int value) { return getDebugText(name, String.valueOf(value), Colors.YELLOW); } - static Text getDebugText(String name, float value) { + + static Component getDebugText(String name, float value) { return getDebugText(name, String.valueOf(value), Colors.YELLOW); } - static Text getDebugText(String name, String value, int color) { + static Component getDebugText(String name, String value, int color) { return TextUtils.join( TextUtils.withColor(name + ": ", Colors.CYAN), TextUtils.withColor(value, color) ); } - static Text getDebugText(String name, String value) { + + static Component getDebugText(String name, String value) { return TextUtils.join( TextUtils.withColor(name + ": ", Colors.CYAN), TextUtils.withColor(value, Colors.YELLOW) ); } - public static void send(CommandContext context, Text text) { + public static void send(CommandContext context, Component text) { context.getSource().sendFeedback(TextUtils.join(MessageManager.PREFIX, TextUtils.SPACE, text)); } + public static void send(CommandContext context, String text) { - context.getSource().sendFeedback(TextUtils.join(MessageManager.PREFIX, TextUtils.SPACE, Text.of(text))); + context.getSource().sendFeedback(TextUtils.join(MessageManager.PREFIX, TextUtils.SPACE, Component.nullToEmpty(text))); } - public static void sendRaw(CommandContext context, Text text) { + + public static void sendRaw(CommandContext context, Component text) { context.getSource().sendFeedback(text); } + public static void sendRaw(CommandContext context, String text) { - context.getSource().sendFeedback(Text.of(text)); + context.getSource().sendFeedback(Component.nullToEmpty(text)); } public static void calcSend(CommandContext context, String type, int number) { diff --git a/src/main/java/wtf/cheeze/sbt/command/SBTCommand.java b/src/main/java/wtf/cheeze/sbt/command/SBTCommand.java index 5d6d6ed..292c909 100644 --- a/src/main/java/wtf/cheeze/sbt/command/SBTCommand.java +++ b/src/main/java/wtf/cheeze/sbt/command/SBTCommand.java @@ -24,10 +24,10 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.config.SkyblockTweaksScreenMain; @@ -36,7 +36,7 @@ import wtf.cheeze.sbt.features.chat.PartyFeatures; import wtf.cheeze.sbt.hud.HudManager; import wtf.cheeze.sbt.hud.screen.HudScreen; -import wtf.cheeze.sbt.mixin.accessors.BossBarHudAccessor; +import wtf.cheeze.sbt.mixin.accessors.BossHealthOverlayAccessor; import wtf.cheeze.sbt.utils.skyblock.ItemUtils; import wtf.cheeze.sbt.utils.text.MessageManager; import wtf.cheeze.sbt.utils.NumberUtils; @@ -64,11 +64,8 @@ public class SBTCommand { - //public static String PREFIX = "§7[§aSkyblockTweaks§f§7]"; - - - private static final Text INVALID = TextUtils.withColor("Invalid arguments", Colors.RED); + private static final Component INVALID = TextUtils.withColor("Invalid arguments", Colors.RED); private static final LiteralArgumentBuilder calc = literal("calc") .then(literal("skill") .then(argument("level-start", IntegerArgumentType.integer()) @@ -147,7 +144,6 @@ public class SBTCommand { send(context, INVALID); return 0; }) - ) .then(literal("pet") .then(argument("rarity", StringArgumentType.string()).suggests(CommandUtils.getArrayAsSuggestions("common", "uncommon", "rare", "epic", "legendary", "mythic")) @@ -202,8 +198,6 @@ public class SBTCommand { return 1; } ) - - )) .executes(context -> { send(context, INVALID); @@ -302,7 +296,6 @@ public class SBTCommand { send(context, INVALID); return 0; }) - ); public static void registerEvents() { @@ -311,21 +304,21 @@ public static void registerEvents() { .then(literal("config") .then(literal("search") .executes(context -> { - MinecraftClient mc = context.getSource().getClient(); + Minecraft mc = context.getSource().getClient(); Screen screen = SBTConfig.getGlobalSearchScreen(null); - mc.send(() -> mc.setScreen(screen)); + mc.schedule(() -> mc.setScreen(screen)); return 1; }) ) .executes(context -> { - MinecraftClient mc = context.getSource().getClient(); + Minecraft mc = context.getSource().getClient(); Screen screen = SBTConfig.getScreen(null); - mc.send(() -> mc.setScreen(screen)); + mc.schedule(() -> mc.setScreen(screen)); return 1; })) - .then(CommandUtils.getScreenOpeningCommand("hud", () -> new HudScreen(Text.literal("SkyBlockTweaks"), HudManager.HUDS, null))) - .then(CommandUtils.getScreenOpeningCommand("gui", () -> new HudScreen(Text.literal("SkyBlockTweaks"), HudManager.HUDS, null))) - .then(CommandUtils.getScreenOpeningCommand("edit", () -> new HudScreen(Text.literal("SkyBlockTweaks"), HudManager.HUDS, null))) + .then(CommandUtils.getScreenOpeningCommand("hud", () -> new HudScreen(Component.literal("SkyBlockTweaks"), HudManager.HUDS, null))) + .then(CommandUtils.getScreenOpeningCommand("gui", () -> new HudScreen(Component.literal("SkyBlockTweaks"), HudManager.HUDS, null))) + .then(CommandUtils.getScreenOpeningCommand("edit", () -> new HudScreen(Component.literal("SkyBlockTweaks"), HudManager.HUDS, null))) .then(literal("mouselock").executes(context -> { MouseLock.toggle(); return 1; @@ -367,12 +360,10 @@ public static void registerEvents() { return 1; }) ) - ) - ) .then(literal("dumpBossbars").executes(context -> { - for (var bar : ((BossBarHudAccessor) context.getSource().getClient().inGameHud.getBossBarHud()).getBossBars().values()) { + for (var bar : ((BossHealthOverlayAccessor) context.getSource().getClient().gui.getBossOverlay()).getEvents().values()) { SkyblockTweaks.LOGGER.info(bar.getName().getString()); } send(context, TextUtils.withColor("Dumped Bossbar Text to Logs", Colors.CYAN)); @@ -389,7 +380,6 @@ public static void registerEvents() { } return 1; })) - .then(literal("sysInfo").executes(context -> { var source = context.getSource(); send(context, TextUtils.withColor("System Information", Colors.CYAN)); @@ -402,25 +392,19 @@ public static void registerEvents() { return 1; })) - .then(literal("dumpComponents") .then(literal("hand") .executes(context -> { - var components = context.getSource().getClient().player.getMainHandStack().getComponents(); - components.forEach((component) -> { - send(context, TextUtils.withColor(component.toString(), Colors.CYAN)); - }); + var components = context.getSource().getClient().player.getMainHandItem().getComponents(); + components.forEach((component) -> send(context, TextUtils.withColor(component.toString(), Colors.CYAN))); return 1; })) .then(literal("inventory") .then(argument("number", IntegerArgumentType.integer()) .executes(context -> { - var components = context.getSource().getClient().player.getInventory().getStack(IntegerArgumentType.getInteger(context, "number")).getComponents(); - components.forEach((component) -> { - send(context, TextUtils.withColor(component.toString(), Colors.CYAN)); - - }); + var components = context.getSource().getClient().player.getInventory().getItem(IntegerArgumentType.getInteger(context, "number")).getComponents(); + components.forEach((component) -> send(context, TextUtils.withColor(component.toString(), Colors.CYAN))); return 1; }) @@ -431,11 +415,9 @@ public static void registerEvents() { new Thread(() -> { try { Thread.sleep(1500); - var screen = (GenericContainerScreen) context.getSource().getClient().currentScreen; - var components = screen.getScreenHandler().getSlot(IntegerArgumentType.getInteger(context, "number")).getStack().getComponents(); - components.forEach((component) -> { - send(context, TextUtils.withColor(component.toString(), Colors.CYAN)); - }); + var screen = (ContainerScreen) context.getSource().getClient().screen; + var components = screen.getMenu().getSlot(IntegerArgumentType.getInteger(context, "number")).getItem().getComponents(); + components.forEach((component) -> send(context, TextUtils.withColor(component.toString(), Colors.CYAN))); } catch (Exception e) { ErrorHandler.handle(e, "Thread Sleep Error in Dump Components", ErrorLevel.WARNING); } @@ -453,14 +435,13 @@ public static void registerEvents() { })) ) .then(literal("pickaxe").executes(context -> { - if (ItemUtils.isPickaxe(context.getSource().getClient().player.getMainHandStack().getItem())) { + if (ItemUtils.isPickaxe(context.getSource().getClient().player.getMainHandItem().getItem())) { send(context, TextUtils.withColor("You are holding a pickaxe", Colors.LIME)); } else { send(context, TextUtils.withColor("You are not holding a pickaxe", Colors.RED)); } return 1; })) - .then(literal("compareVersions").then(argument("a", StringArgumentType.string()).then(argument("b", StringArgumentType.string()) .executes(context -> { Version a = new Version(StringArgumentType.getString(context, "a")); @@ -490,7 +471,6 @@ public static void registerEvents() { source.sendFeedback(CommandUtils.getDebugText("Armor Stack", Stats.armorStack)); source.sendFeedback(CommandUtils.getDebugText("Stack String", Stats.stackString)); - return 1; })) .then(literal("repo") @@ -503,7 +483,6 @@ public static void registerEvents() { } return 1; } - )) .executes(context -> { var manifest = ConstantLoader.getLocalManifestSafe(); @@ -522,26 +501,22 @@ public static void registerEvents() { return 0; }) ) - .then(literal("fetchur").executes(context -> { MessageManager.send(TextUtils.join(TextUtils.withColor("Today Fetchur wants: ", Colors.CYAN), FetchurFeatures.FetchurItem.forToday().display)); return 1; })) -// .then(literal("dumpTablist").executes(context -> { SkyblockTweaks.LOGGER.info(TabListParser.parseTabList().serialize()); MessageManager.send("Tablist data dumped to logs", Colors.CYAN); return 1; }) - - ).executes(context -> { var source = context.getSource(); -// ModAPI.requestPartyInfo(); + // ModAPI.requestPartyInfo(); send(context, TextUtils.withColor("Debug Information", Colors.CYAN)); source.sendFeedback(CommandUtils.getDebugText("Version", SkyblockTweaks.VERSION.getVersionString())); source.sendFeedback(CommandUtils.getDebugText("In Skyblock", SkyblockData.inSB)); - //source.sendFeedback(CommandUtils.getDebugText("Mode", SkyblockData.Stats.mode)); + // source.sendFeedback(CommandUtils.getDebugText("Mode", SkyblockData.Stats.mode)); source.sendFeedback(CommandUtils.getDebugText("Location", SkyblockData.location.getName())); source.sendFeedback(CommandUtils.getDebugText("On Alpha Network", SkyblockData.alphaNetwork)); source.sendFeedback(CommandUtils.getDebugText("In Party", SkyblockData.Party.inParty)); @@ -557,15 +532,13 @@ public static void registerEvents() { send(context, INVALID); return 0; }) - .executes(context -> { - MinecraftClient mc = context.getSource().getClient(); + Minecraft mc = context.getSource().getClient(); Screen screen = new SkyblockTweaksScreenMain(null); - mc.send(() -> mc.setScreen(screen)); + mc.schedule(() -> mc.setScreen(screen)); return 1; } ) )); } } - diff --git a/src/main/java/wtf/cheeze/sbt/compat/rei/ExclusionZoneProvider.java b/src/main/java/wtf/cheeze/sbt/compat/rei/ExclusionZoneProvider.java index 1aeb500..4e98ac0 100644 --- a/src/main/java/wtf/cheeze/sbt/compat/rei/ExclusionZoneProvider.java +++ b/src/main/java/wtf/cheeze/sbt/compat/rei/ExclusionZoneProvider.java @@ -20,18 +20,18 @@ import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.registry.screen.ExclusionZonesProvider; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; import wtf.cheeze.sbt.hud.bounds.Bounds; -import wtf.cheeze.sbt.utils.injected.SBTHandledScreen; +import wtf.cheeze.sbt.utils.injected.SBTAbstractContainerScreen; import wtf.cheeze.sbt.utils.render.Popup; import java.util.Collection; import java.util.List; -public class ExclusionZoneProvider implements ExclusionZonesProvider { +public class ExclusionZoneProvider implements ExclusionZonesProvider { @Override - public Collection provide(GenericContainerScreen screen) { - Popup popup = ((SBTHandledScreen) screen).sbt$getPopup(); + public Collection provide(ContainerScreen screen) { + Popup popup = ((SBTAbstractContainerScreen) screen).sbt$getPopup(); if (popup != null) { Bounds bounds = popup.getBounds(); return List.of(new Rectangle(bounds.x, bounds.y , bounds.width, bounds.height)); diff --git a/src/main/java/wtf/cheeze/sbt/compat/rei/ReiPlugin.java b/src/main/java/wtf/cheeze/sbt/compat/rei/ReiPlugin.java index 4f02b2c..f8456f9 100644 --- a/src/main/java/wtf/cheeze/sbt/compat/rei/ReiPlugin.java +++ b/src/main/java/wtf/cheeze/sbt/compat/rei/ReiPlugin.java @@ -20,12 +20,11 @@ import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.screen.ExclusionZones; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; public class ReiPlugin implements REIClientPlugin { - @Override public void registerExclusionZones(ExclusionZones zones) { - zones.register(GenericContainerScreen.class, new ExclusionZoneProvider()); + zones.register(ContainerScreen.class, new ExclusionZoneProvider()); } } diff --git a/src/main/java/wtf/cheeze/sbt/config/ConfigImpl.java b/src/main/java/wtf/cheeze/sbt/config/ConfigImpl.java index 87f5972..c638062 100644 --- a/src/main/java/wtf/cheeze/sbt/config/ConfigImpl.java +++ b/src/main/java/wtf/cheeze/sbt/config/ConfigImpl.java @@ -81,6 +81,4 @@ public class ConfigImpl extends VersionedObject { @SerialEntry public Mining mining = new Mining(); - - } diff --git a/src/main/java/wtf/cheeze/sbt/config/GlobalSearchYaclScreen.java b/src/main/java/wtf/cheeze/sbt/config/GlobalSearchYaclScreen.java index b13f669..9a99bdd 100644 --- a/src/main/java/wtf/cheeze/sbt/config/GlobalSearchYaclScreen.java +++ b/src/main/java/wtf/cheeze/sbt/config/GlobalSearchYaclScreen.java @@ -20,12 +20,11 @@ import dev.isxander.yacl3.api.YetAnotherConfigLib; import dev.isxander.yacl3.gui.YACLScreen; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screens.Screen; import java.util.function.Supplier; public class GlobalSearchYaclScreen extends YACLScreen { - private final Supplier parentSupplier; public GlobalSearchYaclScreen(YetAnotherConfigLib config, Supplier parent) { @@ -34,7 +33,7 @@ public GlobalSearchYaclScreen(YetAnotherConfigLib config, Supplier paren } @Override - public void close() { - this.client.setScreen(parentSupplier.get()); + public void onClose() { + this.minecraft.setScreen(parentSupplier.get()); } } diff --git a/src/main/java/wtf/cheeze/sbt/config/SBTConfig.java b/src/main/java/wtf/cheeze/sbt/config/SBTConfig.java index 0b05687..77787eb 100644 --- a/src/main/java/wtf/cheeze/sbt/config/SBTConfig.java +++ b/src/main/java/wtf/cheeze/sbt/config/SBTConfig.java @@ -18,7 +18,6 @@ */ package wtf.cheeze.sbt.config; - import com.google.gson.FieldNamingPolicy; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.*; @@ -26,9 +25,9 @@ import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.config.categories.*; import wtf.cheeze.sbt.config.migration.BarColorTransformation; import wtf.cheeze.sbt.config.migration.MigrationManager; @@ -40,13 +39,11 @@ import java.nio.file.Path; - public class SBTConfig { - public static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve("skyblocktweaks-config.json"); private static final ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(ConfigImpl.class) - .id(Identifier.of("skyblocktweaks", "config")) + .id(ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "config")) .serializer(config -> GsonConfigSerializerBuilder.create(config).appendGsonBuilder(builder -> builder.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)) .setPath(PATH) .build()) @@ -78,13 +75,10 @@ public static void load() { } public static void save() { - HANDLER.save(); CONFIG_SAVE.invoker().run(); - } - public static Screen getGlobalSearchScreen(Screen parent) { return baseBuilder().category(GlobalSearchCategory.getCategory(HANDLER.defaults(), HANDLER.instance())).build().generateScreen(parent); } @@ -103,7 +97,7 @@ public static Mining mining() { } private static YetAnotherConfigLib.Builder baseBuilder() { - return YetAnotherConfigLib.createBuilder().title(Text.literal("SkyblockTweaks")).save( + return YetAnotherConfigLib.createBuilder().title(Component.literal("SkyblockTweaks")).save( SBTConfig::save ); } @@ -111,6 +105,7 @@ private static YetAnotherConfigLib.Builder baseBuilder() { public static BooleanControllerBuilder generateBooleanController(Option opt) { return BooleanControllerBuilder.create(opt).coloured(true); } + public static FloatSliderControllerBuilder generateScaleController(Option opt) { return FloatSliderControllerBuilder.create(opt) .range(HUD.MIN_SCALE, HUD.MAX_SCALE) @@ -124,5 +119,4 @@ public static EnumControllerBuilder generateDrawModeController(Option< public static EnumControllerBuilder generateSideController(Option opt) { return EnumControllerBuilder.create(opt).enumClass(Side.class); } - } diff --git a/src/main/java/wtf/cheeze/sbt/config/SkyblockTweaksScreenMain.java b/src/main/java/wtf/cheeze/sbt/config/SkyblockTweaksScreenMain.java index 50712e6..dcab902 100644 --- a/src/main/java/wtf/cheeze/sbt/config/SkyblockTweaksScreenMain.java +++ b/src/main/java/wtf/cheeze/sbt/config/SkyblockTweaksScreenMain.java @@ -18,14 +18,14 @@ */ package wtf.cheeze.sbt.config; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ConfirmLinkScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.ConfirmLinkScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.hud.HudManager; import wtf.cheeze.sbt.utils.render.Colors; @@ -33,69 +33,52 @@ import wtf.cheeze.sbt.hud.screen.HudScreen; public class SkyblockTweaksScreenMain extends Screen { - public static final Identifier ICON = Identifier.of("skyblocktweaks", "icon.png"); + public static final ResourceLocation ICON = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "icon.png"); private final Screen parent; - private ButtonWidget hudButton; public SkyblockTweaksScreenMain(Screen parent) { - super(Text.literal("SkyBlockTweaks")); + super(Component.literal("SkyBlockTweaks")); this.parent = parent; } @Override @SuppressWarnings("MagicNumber") public void init() { - MinecraftClient mc = MinecraftClient.getInstance(); - var centerx = mc.getWindow().getScaledWidth() / 2; + Minecraft mc = Minecraft.getInstance(); + var centerx = mc.getWindow().getGuiScaledWidth() / 2; var leftColumn = centerx - 100; var rightColumn = centerx + 5; - ButtonWidget configButton = ButtonWidget.builder(Text.literal("Open Config"), button -> { - mc.send(() -> mc.setScreen(SBTConfig.getScreen(this))); - }).dimensions(centerx - 100, 55, 200, 20).build(); - hudButton = ButtonWidget.builder(Text.literal("Edit HUD Positions"), button -> { - mc.send(() -> mc.setScreen(new HudScreen(Text.literal("SkyBlockTweaks"), HudManager.HUDS, this))); - }).dimensions(centerx - 100, 85, 200, 20).build(); - ButtonWidget modrinthButton = ButtonWidget.builder(Text.literal("Modrinth"), button -> { - ConfirmLinkScreen.open(this, "https://modrinth.com/mod/sbt", true); - }).dimensions(leftColumn, 115, 95, 20).build(); - ButtonWidget githubButton = ButtonWidget.builder(Text.literal("GitHub"), button -> { - ConfirmLinkScreen.open(this, "https://github.com/MisterCheezeCake/SkyblockTweaks", true); - }).dimensions(rightColumn, 115, 95, 20).build(); - ButtonWidget discordButton = ButtonWidget.builder(Text.literal("Discord"), button -> { - ConfirmLinkScreen.open(this, "https://discord.gg/YH3hw926hz", true); - }).dimensions(leftColumn, 145, 95, 20).build(); - ButtonWidget legalButton = ButtonWidget.builder(Text.literal("Legal"), button -> { - ConfirmLinkScreen.open(this, "https://github.com/MisterCheezeCake/SkyblockTweaks/blob/main/OPENSOURCE.md", true); - }).dimensions(rightColumn, 145, 95, 20).build(); - ButtonWidget closeButton = ButtonWidget.builder(Text.literal("Close"), button -> { - mc.send(() -> mc.setScreen(parent)); - }).dimensions(centerx - 100, 175, 200, 20).build(); - this.addDrawableChild(configButton); - this.addDrawableChild(hudButton); - this.addDrawableChild(modrinthButton); - this.addDrawableChild(githubButton); - this.addDrawableChild(discordButton); - this.addDrawableChild(legalButton); - this.addDrawableChild(closeButton); - if (MinecraftClient.getInstance().world == null) { + Button configButton = Button.builder(Component.literal("Open Config"), button -> mc.schedule(() -> mc.setScreen(SBTConfig.getScreen(this)))).bounds(centerx - 100, 55, 200, 20).build(); + Button hudButton = Button.builder(Component.literal("Edit HUD Positions"), button -> mc.schedule(() -> mc.setScreen(new HudScreen(Component.literal("SkyBlockTweaks"), HudManager.HUDS, this)))).bounds(centerx - 100, 85, 200, 20).build(); + Button modrinthButton = Button.builder(Component.literal("Modrinth"), button -> ConfirmLinkScreen.confirmLinkNow(this, "https://modrinth.com/mod/sbt", true)).bounds(leftColumn, 115, 95, 20).build(); + Button githubButton = Button.builder(Component.literal("GitHub"), button -> ConfirmLinkScreen.confirmLinkNow(this, "https://github.com/MisterCheezeCake/SkyblockTweaks", true)).bounds(rightColumn, 115, 95, 20).build(); + Button discordButton = Button.builder(Component.literal("Discord"), button -> ConfirmLinkScreen.confirmLinkNow(this, "https://discord.gg/YH3hw926hz", true)).bounds(leftColumn, 145, 95, 20).build(); + Button legalButton = Button.builder(Component.literal("Legal"), button -> ConfirmLinkScreen.confirmLinkNow(this, "https://github.com/MisterCheezeCake/SkyblockTweaks/blob/main/OPENSOURCE.md", true)).bounds(rightColumn, 145, 95, 20).build(); + Button closeButton = Button.builder(Component.literal("Close"), button -> mc.schedule(() -> mc.setScreen(parent))).bounds(centerx - 100, 175, 200, 20).build(); + this.addRenderableWidget(configButton); + this.addRenderableWidget(hudButton); + this.addRenderableWidget(modrinthButton); + this.addRenderableWidget(githubButton); + this.addRenderableWidget(discordButton); + this.addRenderableWidget(legalButton); + this.addRenderableWidget(closeButton); + if (Minecraft.getInstance().level == null) { hudButton.active = false; - hudButton.setTooltip(Tooltip.of(Text.literal("Join a world/server to edit HUD Positions"))); + hudButton.setTooltip(Tooltip.create(Component.literal("Join a world/server to edit HUD Positions"))); } - - - } + @Override - public void close() { - MinecraftClient.getInstance().setScreen(parent); + public void onClose() { + Minecraft.getInstance().setScreen(parent); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - MinecraftClient mc = MinecraftClient.getInstance(); - var centerX = mc.getWindow().getScaledWidth() / 2; - super.render(context, mouseX, mouseY, delta); - RenderUtils.drawCenteredText(context, Text.literal("SkyblockTweaks"), centerX, 3, Colors.SBT_GREEN, true, 2.5f); - RenderUtils.drawCenteredText(context, Text.literal("v" + SkyblockTweaks.VERSION.getVersionString()), centerX, 25, Colors.WHITE, true); - RenderUtils.drawCenteredText(context, Text.literal("By MisterCheezeCake"), centerX, 36, Colors.RED, true); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + Minecraft mc = Minecraft.getInstance(); + var centerX = mc.getWindow().getGuiScaledWidth() / 2; + super.render(guiGraphics, mouseX, mouseY, delta); + RenderUtils.drawCenteredText(guiGraphics, Component.literal("SkyblockTweaks"), centerX, 3, Colors.SBT_GREEN, true, 2.5f); + RenderUtils.drawCenteredText(guiGraphics, Component.literal("v" + SkyblockTweaks.VERSION.getVersionString()), centerX, 25, Colors.WHITE, true); + RenderUtils.drawCenteredText(guiGraphics, Component.literal("By MisterCheezeCake"), centerX, 36, Colors.RED, true); } } diff --git a/src/main/java/wtf/cheeze/sbt/config/categories/Chat.java b/src/main/java/wtf/cheeze/sbt/config/categories/Chat.java index b96a28e..92ac60b 100644 --- a/src/main/java/wtf/cheeze/sbt/config/categories/Chat.java +++ b/src/main/java/wtf/cheeze/sbt/config/categories/Chat.java @@ -2,17 +2,16 @@ import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.OptionDescription; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.features.chat.ChatProtections; import wtf.cheeze.sbt.features.chat.PartyFeatures; public class Chat { - public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) { return ConfigCategory.createBuilder() - .name(Text.translatable("sbt.config.chat")) - .tooltip(Text.translatable("sbt.config.chat.desc")) + .name(Component.translatable("sbt.config.chat")) + .tooltip(Component.translatable("sbt.config.chat.desc")) .group(PartyFeatures.Config.getGroup(defaults, config)) .group(PartyFeatures.Config.getBlackList(defaults, config)) .group(ChatProtections.Config.getGroup(defaults, config)) @@ -21,10 +20,10 @@ public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) public static final String BASE_KEY = "sbt.config.chat."; - public static Text key(String key) { - return Text.translatable(BASE_KEY + key); + public static Component key(String key) { + return Component.translatable(BASE_KEY + key); } public static OptionDescription keyD(String key) { - return OptionDescription.of(Text.translatable(BASE_KEY + key + ".desc")); + return OptionDescription.of(Component.translatable(BASE_KEY + key + ".desc")); } } diff --git a/src/main/java/wtf/cheeze/sbt/config/categories/General.java b/src/main/java/wtf/cheeze/sbt/config/categories/General.java index abbcd65..a11ccec 100644 --- a/src/main/java/wtf/cheeze/sbt/config/categories/General.java +++ b/src/main/java/wtf/cheeze/sbt/config/categories/General.java @@ -5,7 +5,7 @@ import dev.isxander.yacl3.api.OptionDescription; import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.features.overlay.BrewingStandOverlay; @@ -21,8 +21,8 @@ public class General { public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) { return ConfigCategory.createBuilder() - .name(Text.translatable("sbt.config.general")) - .tooltip(Text.translatable("sbt.config.general.desc")) + .name(Component.translatable("sbt.config.general")) + .tooltip(Component.translatable("sbt.config.general.desc")) .option(GlobalSearchCategory.getOpenGlobalSearchButton(defaults, config)) .option(UpdateChecker.getStreamOption(defaults, config)) .option(ErrorHandler.getChatAll(defaults, config)) @@ -40,11 +40,12 @@ public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) public static final String BASE_KEY = "sbt.config.general."; - public static Text key(String key) { - return Text.translatable(BASE_KEY + key); + public static Component key(String key) { + return Component.translatable(BASE_KEY + key); } + public static OptionDescription keyD(String key) { - return OptionDescription.of(Text.translatable(BASE_KEY + key + ".desc")); + return OptionDescription.of(Component.translatable(BASE_KEY + key + ".desc")); } // These are subclassed because their features live in mixins and so can't control their own config @@ -55,7 +56,6 @@ public static class InventoryTweaks { @SerialEntry public boolean noRenderPotionHud = true; - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var noRenderPotionHud = Option.createBuilder() .name(key("inventory.noRenderPotionHud")) @@ -67,6 +67,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.inventory.noRenderPotionHud = value ) .build(); + var redirectRecipeBook = Option.createBuilder() .name(key("inventory.redirectRecipeBook")) .description(keyD("inventory.redirectRecipeBook")) @@ -78,7 +79,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - return OptionGroup.createBuilder() .name(key("inventory")) .description(keyD("inventory")) @@ -136,7 +136,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - var showHearsInRift = Option.createBuilder() .name(key("hudTweaks.showHeartsInRift")) .description(keyD("hudTweaks.showHeartsInRift")) @@ -162,7 +161,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - var noRenderArmor = Option.createBuilder() .name(key("hudTweaks.noRenderArmor")) .description(keyD("hudTweaks.noRenderArmor")) @@ -184,6 +182,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.hudTweaks.noRenderHunger = value ) .build(); + var noRenderMountHealth = Option.createBuilder() .name(key("hudTweaks.noRenderMountHealth")) .description(keyD("hudTweaks.noRenderMountHealth")) @@ -206,7 +205,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - return OptionGroup.createBuilder() .name(key("hudTweaks")) .description(keyD("hudTweaks")) diff --git a/src/main/java/wtf/cheeze/sbt/config/categories/GlobalSearchCategory.java b/src/main/java/wtf/cheeze/sbt/config/categories/GlobalSearchCategory.java index 2238134..a712768 100644 --- a/src/main/java/wtf/cheeze/sbt/config/categories/GlobalSearchCategory.java +++ b/src/main/java/wtf/cheeze/sbt/config/categories/GlobalSearchCategory.java @@ -21,8 +21,8 @@ import dev.isxander.yacl3.api.ButtonOption; import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.OptionDescription; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.features.mining.FetchurFeatures; @@ -45,11 +45,10 @@ public class GlobalSearchCategory { - public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) { return ConfigCategory.createBuilder() - .name(Text.translatable("sbt.config.globalSearch")) - .tooltip(Text.translatable("sbt.config.globalSearch.desc")) + .name(Component.translatable("sbt.config.globalSearch")) + .tooltip(Component.translatable("sbt.config.globalSearch.desc")) .option(UpdateChecker.getStreamOption(defaults, config)) .option(ErrorHandler.getChatAll(defaults, config)) .option(ModAPI.getShowErrors(defaults, config)) @@ -96,20 +95,15 @@ public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) public static ButtonOption getOpenGlobalSearchButton(ConfigImpl defaults, ConfigImpl config) { return ButtonOption.createBuilder() - .name(Text.translatable("sbt.config.globalSearch.open")) - .description(OptionDescription.of(Text.translatable("sbt.config.globalSearch.open.desc"))) - .text(Text.translatable("sbt.config.globalSearch.open.text")) + .name(Component.translatable("sbt.config.globalSearch.open")) + .description(OptionDescription.of(Component.translatable("sbt.config.globalSearch.open.desc"))) + .text(Component.translatable("sbt.config.globalSearch.open.text")) .action((y, o) -> { - if (y.pendingChanges()) { y.finishOrSave(); } - MinecraftClient.getInstance().setScreen(SBTConfig.getSpecialGlobalSearchScreen(((YACLScreenAccessor) y).sbt$getParent())); - - + Minecraft.getInstance().setScreen(SBTConfig.getSpecialGlobalSearchScreen(((YACLScreenAccessor) y).sbt$getParent())); }) .build(); } - - } diff --git a/src/main/java/wtf/cheeze/sbt/config/categories/Huds.java b/src/main/java/wtf/cheeze/sbt/config/categories/Huds.java index 6bd34b8..1b5858d 100644 --- a/src/main/java/wtf/cheeze/sbt/config/categories/Huds.java +++ b/src/main/java/wtf/cheeze/sbt/config/categories/Huds.java @@ -20,13 +20,11 @@ import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.features.huds.*; public class Huds { - - @SerialEntry public ManaHud.Config mana = new ManaHud.Config(); @@ -96,12 +94,10 @@ public class Huds { @SerialEntry public PressureHud.Config pressure = new PressureHud.Config(); - - public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl config) { return ConfigCategory.createBuilder() - .name(Text.translatable("sbt.config.huds")) - .tooltip(Text.translatable("sbt.config.huds.desc")) + .name(Component.translatable("sbt.config.huds")) + .tooltip(Component.translatable("sbt.config.huds.desc")) .group(SkillHudManager.SkillHud.Config.getGroup(defaults, config)) .group(SkillHudManager.SkillBar.Config.getGroup(defaults, config)) .group(HealthHud.Config.getGroup(defaults, config)) diff --git a/src/main/java/wtf/cheeze/sbt/config/categories/Mining.java b/src/main/java/wtf/cheeze/sbt/config/categories/Mining.java index 38fee37..d6bd311 100644 --- a/src/main/java/wtf/cheeze/sbt/config/categories/Mining.java +++ b/src/main/java/wtf/cheeze/sbt/config/categories/Mining.java @@ -21,7 +21,7 @@ import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.OptionDescription; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.features.mining.EventTimerHud; import wtf.cheeze.sbt.features.mining.FetchurFeatures; @@ -29,7 +29,6 @@ import wtf.cheeze.sbt.features.mining.MiningTitles; public class Mining { - @SerialEntry public MiningHud.Config hud = new MiningHud.Config(); @@ -45,8 +44,8 @@ public class Mining { public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl configThing) { return ConfigCategory.createBuilder() - .name(Text.translatable("sbt.config.mining")) - .tooltip(Text.translatable("sbt.config.mining.desc")) + .name(Component.translatable("sbt.config.mining")) + .tooltip(Component.translatable("sbt.config.mining.desc")) .group(MiningHud.Config.getGroup(defaults, configThing)) .group(EventTimerHud.Config.getGroup(defaults, configThing)) .group(MiningTitles.Config.getGroup(defaults, configThing)) @@ -54,12 +53,11 @@ public static ConfigCategory getCategory(ConfigImpl defaults, ConfigImpl configT .build(); } - private static final String BASE_KEY = "sbt.config.mining."; - public static Text key(String key) { - return Text.translatable(BASE_KEY + key); + public static Component key(String key) { + return Component.translatable(BASE_KEY + key); } public static OptionDescription keyD(String key) { - return OptionDescription.of(Text.translatable(BASE_KEY + key + ".desc")); + return OptionDescription.of(Component.translatable(BASE_KEY + key + ".desc")); } } diff --git a/src/main/java/wtf/cheeze/sbt/config/migration/BarColorTransformation.java b/src/main/java/wtf/cheeze/sbt/config/migration/BarColorTransformation.java index a20364a..fd459cf 100644 --- a/src/main/java/wtf/cheeze/sbt/config/migration/BarColorTransformation.java +++ b/src/main/java/wtf/cheeze/sbt/config/migration/BarColorTransformation.java @@ -1,22 +1,19 @@ package wtf.cheeze.sbt.config.migration; -import net.minecraft.util.Identifier; +import com.mojang.blaze3d.pipeline.RenderPipeline; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.utils.render.Colors; -import java.util.function.Function; - - /** * In mod versions prior to 0.1.0-Alpha.8, bar colors (all colors actually), defaulted to RGB ints. * This was fine pre 1.21.2 since the shader system was used, which was fine with RGB ints - * However, in 1.21.2, the shader system was tweaked, and we moved to the color parameter in {@link net.minecraft.client.gui.DrawContext#drawTexture(Function, Identifier, int, int, float, float, int, int, int, int, int)} + * However, in 1.21.2, the shader system was tweaked, and we moved to the color parameter in {@link net.minecraft.client.gui.GuiGraphics#blit(RenderPipeline, ResourceLocation, int, int, float, float, int, int, int, int)} * This method interprets ints as ARGB, not RGB, which resulted in the bars not rendering with default settings due to the alpha value being 0. * YACL always treated the color as ARGB, so this issue only affects users who never modified the settings. * This transformation checks for the old defaults and updates them to the new defaults. */ public class BarColorTransformation implements ConfigTransformation { - private static final int OLD_HEALTH = 16733525; private static final int OLD_HEALTH_ABSORB = 16755200; private static final int OLD_MANA = 5592575; @@ -51,6 +48,4 @@ public boolean isApplicable(ConfigImpl config) { public boolean isApplicable(int configVersion) { return configVersion == 1; } - - } diff --git a/src/main/java/wtf/cheeze/sbt/config/migration/ConfigTransformation.java b/src/main/java/wtf/cheeze/sbt/config/migration/ConfigTransformation.java index 76a03df..5cb4768 100644 --- a/src/main/java/wtf/cheeze/sbt/config/migration/ConfigTransformation.java +++ b/src/main/java/wtf/cheeze/sbt/config/migration/ConfigTransformation.java @@ -4,7 +4,6 @@ * A ConfigTransformation transforms a single version of a config, rather than migrating from one version to another. */ public interface ConfigTransformation{ - T tranform(T config); boolean isApplicable(T config); diff --git a/src/main/java/wtf/cheeze/sbt/config/migration/MigrationManager.java b/src/main/java/wtf/cheeze/sbt/config/migration/MigrationManager.java index b10e5a6..9faf94b 100644 --- a/src/main/java/wtf/cheeze/sbt/config/migration/MigrationManager.java +++ b/src/main/java/wtf/cheeze/sbt/config/migration/MigrationManager.java @@ -17,15 +17,12 @@ * Manages config migrations and transformations */ public class MigrationManager { - private static final ArrayList migrations = new ArrayList<>(); public static void registerMigration(ConfigMigration migration) { migrations.add(migration); } - - /** * Checks all registered migrations and runs any needed ones. * This MUST be called BEFORE config is initialized @@ -77,4 +74,3 @@ public static boolean runTransformation(ConfigTransformat return true; } } - diff --git a/src/main/java/wtf/cheeze/sbt/config/migration/TextColorTransformation.java b/src/main/java/wtf/cheeze/sbt/config/migration/TextColorTransformation.java index da360f2..3b60067 100644 --- a/src/main/java/wtf/cheeze/sbt/config/migration/TextColorTransformation.java +++ b/src/main/java/wtf/cheeze/sbt/config/migration/TextColorTransformation.java @@ -15,7 +15,6 @@ * were present. This transformation also handles colors for any other HUDs present prior to 0.1.0-Alpha.8, to be safe if someone has an old config. */ public class TextColorTransformation implements ConfigTransformation { - private static final int OLD_RED = 16733525; private static final int OLD_ORANGE = 16755200; private static final int OLD_BLUE = 5592575; @@ -25,12 +24,10 @@ public class TextColorTransformation implements ConfigTransformation private static final int OLD_WHITE = 0xFFFFFF; private static final int OLD_BLACK = 0; - private TextColorTransformation() {} public static final TextColorTransformation INSTANCE = new TextColorTransformation(); - @Override public ConfigImpl tranform(ConfigImpl config) { if (config.huds.coordinates.color == OLD_WHITE) config.huds.coordinates.color = Colors.WHITE; diff --git a/src/main/java/wtf/cheeze/sbt/config/persistent/PersistentData.java b/src/main/java/wtf/cheeze/sbt/config/persistent/PersistentData.java index a1763d9..dbcf564 100644 --- a/src/main/java/wtf/cheeze/sbt/config/persistent/PersistentData.java +++ b/src/main/java/wtf/cheeze/sbt/config/persistent/PersistentData.java @@ -24,20 +24,18 @@ import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.gui.screen.ChatScreen; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.utils.skyblock.SkyblockData; import java.nio.file.Path; import java.util.HashMap; - /** * This class stores non user-configurable data that needs to be saved between sessions. Almost everything is stored by profile id, which are v4 UUIDs. * We use these instead of the cute names so that profiles, even across accounts, will never inherit the persistent data of another */ public class PersistentData { - @SerialEntry public HashMap profiles = new HashMap<>(); @@ -45,10 +43,9 @@ public ProfileData currentProfile() { return profiles.getOrDefault(SkyblockData.getCurrentProfileUnique(), new ProfileData()); } - private static final Path pdPath = FabricLoader.getInstance().getConfigDir().resolve("skyblocktweaks-persistent.json"); private static final ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(PersistentData.class) - .id(Identifier.of("skyblocktweaks", "persistent")) + .id(ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "persistent")) .serializer(config -> GsonConfigSerializerBuilder.create(config).appendGsonBuilder(builder -> builder.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)) .setPath(pdPath) .build()) @@ -68,13 +65,12 @@ private static void save() { HANDLER.save(); } - public static void registerEvents() { HANDLER.load(); ClientTickEvents.END_CLIENT_TICK.register(client -> { if (!get().needsSave) return; - if (client.world != null) { - if (client.currentScreen != null && !(client.currentScreen instanceof ChatScreen)) return; // Don't save while in a screen, but allow the ChatScreen + if (client.level != null) { + if (client.screen != null && !(client.screen instanceof ChatScreen)) return; // Don't save while in a screen, but allow the ChatScreen save(); } else { save(); diff --git a/src/main/java/wtf/cheeze/sbt/events/CacheUpdateEvents.java b/src/main/java/wtf/cheeze/sbt/events/CacheUpdateEvents.java index 8b61173..cc66598 100644 --- a/src/main/java/wtf/cheeze/sbt/events/CacheUpdateEvents.java +++ b/src/main/java/wtf/cheeze/sbt/events/CacheUpdateEvents.java @@ -29,10 +29,8 @@ public class CacheUpdateEvents { public static final Event HALF_SECOND = EventUtils.getRunnableBackedEvent(); public static final Event QUARTER_SECOND = EventUtils.getRunnableBackedEvent(); - private static final Timer timer = new Timer(); - static { timer.scheduleAtFixedRate(new java.util.TimerTask() { @Override @@ -53,6 +51,4 @@ public void run() { } }, 0, 1000); } - - } diff --git a/src/main/java/wtf/cheeze/sbt/events/ChatEvents.java b/src/main/java/wtf/cheeze/sbt/events/ChatEvents.java index 3d717c5..aabb8a0 100644 --- a/src/main/java/wtf/cheeze/sbt/events/ChatEvents.java +++ b/src/main/java/wtf/cheeze/sbt/events/ChatEvents.java @@ -20,7 +20,7 @@ import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; /** * Custom chat events which get us the message before Fabric API has @@ -29,7 +29,6 @@ * when information needs to be extracted. */ public class ChatEvents { - public static final Event ON_GAME = EventFactory.createArrayBacked(OnMessage.class, listeners -> (message) -> { for (OnMessage listener : listeners) { listener.onMessage(message); @@ -42,9 +41,8 @@ public class ChatEvents { } }); - @FunctionalInterface public interface OnMessage { - void onMessage(Text message); + void onMessage(Component message); } } diff --git a/src/main/java/wtf/cheeze/sbt/events/DrawSlotEvents.java b/src/main/java/wtf/cheeze/sbt/events/DrawSlotEvents.java index d7e8ee4..f328f5b 100644 --- a/src/main/java/wtf/cheeze/sbt/events/DrawSlotEvents.java +++ b/src/main/java/wtf/cheeze/sbt/events/DrawSlotEvents.java @@ -20,24 +20,19 @@ import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.inventory.Slot; +import net.minecraft.network.chat.Component; public class DrawSlotEvents { - - public static Event BEFORE_ITEM = EventFactory.createArrayBacked(OnDrawSlot.class, listeners -> (screenTitle, context, slot) -> { + public static Event BEFORE_ITEM = EventFactory.createArrayBacked(OnDrawSlot.class, listeners -> (screenTitle, guiGraphics, slot) -> { for (OnDrawSlot listener : listeners) { - listener.onDrawSlot(screenTitle, context, slot); + listener.onDrawSlot(screenTitle, guiGraphics, slot); } }); - - - - @FunctionalInterface public interface OnDrawSlot { - void onDrawSlot(Text screenTitle, DrawContext context, Slot slot); + void onDrawSlot(Component screenTitle, GuiGraphics guiGraphics, Slot slot); } } diff --git a/src/main/java/wtf/cheeze/sbt/events/HudRenderEvents.java b/src/main/java/wtf/cheeze/sbt/events/HudRenderEvents.java index b49c9d2..e4a5fed 100644 --- a/src/main/java/wtf/cheeze/sbt/events/HudRenderEvents.java +++ b/src/main/java/wtf/cheeze/sbt/events/HudRenderEvents.java @@ -18,15 +18,13 @@ */ package wtf.cheeze.sbt.events; -//? if > 1.21.5 { -/*import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; import net.fabricmc.fabric.api.client.rendering.v1.hud.VanillaHudElements; -*///?} import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderTickCounter; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.DeltaTracker; +import net.minecraft.resources.ResourceLocation; /** @@ -42,7 +40,7 @@ public class HudRenderEvents { public static final Event AFTER_MAIN_HUD = createEventForStage(); /** - * Called before the {@link net.minecraft.client.gui.hud.ChatHud} is rendered. + * Called before the {@link net.minecraft.client.gui.components.ChatComponent} is rendered. */ public static final Event BEFORE_CHAT = createEventForStage(); @@ -52,19 +50,18 @@ public class HudRenderEvents { public static final Event LAST = createEventForStage(); private static Event createEventForStage() { - return EventFactory.createArrayBacked(HudRenderStage.class, listeners -> (context, tickDelta) -> { + return EventFactory.createArrayBacked(HudRenderStage.class, listeners -> (guiGraphics, tickDelta) -> { for (HudRenderStage listener : listeners) { - listener.onRender(context, tickDelta); + listener.onRender(guiGraphics, tickDelta); } }); } public static void registerEvents() { - //? if >1.21.5 { - /*HudElementRegistry.attachElementAfter(VanillaHudElements.EXPERIENCE_LEVEL, Identifier.of("skyblocktweaks", "after_main_hud"), AFTER_MAIN_HUD.invoker()::onRender); - HudElementRegistry.attachElementBefore(VanillaHudElements.CHAT, Identifier.of("skyblocktweaks", "before_chat"), BEFORE_CHAT.invoker()::onRender); - HudElementRegistry.addLast(Identifier.of("skyblocktweaks", "last"), LAST.invoker()::onRender); - *///?} + // TODO: skyblocker doesnt have this issue of rendering breaking if the vanilla hud element is missing + HudElementRegistry.attachElementBefore(VanillaHudElements.HOTBAR, ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "after_main_hud"), AFTER_MAIN_HUD.invoker()::onRender); + HudElementRegistry.attachElementBefore(VanillaHudElements.CHAT, ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "before_chat"), BEFORE_CHAT.invoker()::onRender); + HudElementRegistry.addLast(ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "last"), LAST.invoker()::onRender); } /** @@ -75,11 +72,9 @@ public interface HudRenderStage { /** * Called sometime during a specific HUD render stage. * - * @param context The {@link DrawContext} instance - * @param tickCounter The {@link RenderTickCounter} instance + * @param guiGraphics The {@link GuiGraphics} instance + * @param tickCounter The {@link DeltaTracker} instance */ - void onRender(DrawContext context, RenderTickCounter tickCounter); + void onRender(GuiGraphics guiGraphics, DeltaTracker tickCounter); } - - -} \ No newline at end of file +} diff --git a/src/main/java/wtf/cheeze/sbt/events/WorldLoadEvents.java b/src/main/java/wtf/cheeze/sbt/events/WorldLoadEvents.java index 0437207..8055226 100644 --- a/src/main/java/wtf/cheeze/sbt/events/WorldLoadEvents.java +++ b/src/main/java/wtf/cheeze/sbt/events/WorldLoadEvents.java @@ -20,19 +20,17 @@ import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; -import net.minecraft.client.gui.screen.DownloadingTerrainScreen.WorldEntryReason; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.multiplayer.ClientLevel; public class WorldLoadEvents { - - public static Event WORLD_LOAD = EventFactory.createArrayBacked(OnWorldLoad.class, listeners -> (world, worldEntryReason) -> { + public static Event WORLD_LOAD = EventFactory.createArrayBacked(OnWorldLoad.class, listeners -> world -> { for (OnWorldLoad listener : listeners) { - listener.onWorldLoad(world, worldEntryReason); + listener.onWorldLoad(world); } }); @FunctionalInterface public interface OnWorldLoad { - void onWorldLoad(ClientWorld world, WorldEntryReason worldEntryReason); + void onWorldLoad(ClientLevel world); } } diff --git a/src/main/java/wtf/cheeze/sbt/features/chat/ChatProtections.java b/src/main/java/wtf/cheeze/sbt/features/chat/ChatProtections.java index d0e4bf6..a874ce5 100644 --- a/src/main/java/wtf/cheeze/sbt/features/chat/ChatProtections.java +++ b/src/main/java/wtf/cheeze/sbt/features/chat/ChatProtections.java @@ -22,7 +22,6 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents; -import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.utils.KillSwitch; @@ -36,12 +35,10 @@ import java.util.regex.Pattern; public class ChatProtections { - private static final String COOP_ID = "chat_protections_coop"; private static final String IP_ID = "chat_protections_ip"; private static final String GUILD_LEAVE_ID = "chat_protections_guild_leave"; - private static TimedValue lastMessageCoop = TimedValue.of(null); private static TimedValue lastMessageIp = TimedValue.of(null); private static TimedValue lastMessageGuildLeave = TimedValue.of(null); @@ -49,7 +46,6 @@ public class ChatProtections { private static final String BASE_COOP_MESSAGE = "§cAre you sure you want to invite §e%s §cto your island? They will have complete access and you may not be able to remove them! Run the command again to add them."; private static final Pattern IP_PATTERN = Pattern.compile("(?:[0-9]{1,3}\\.){3}[0-9]{1,3}"); - public static void registerEvents() { ClientSendMessageEvents.ALLOW_COMMAND.register((message) -> { String trimmed = message.trim(); @@ -141,7 +137,6 @@ public static class Config { @SerialEntry public boolean ip = true; - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var coop = Option.createBuilder() diff --git a/src/main/java/wtf/cheeze/sbt/features/chat/PartyFeatures.java b/src/main/java/wtf/cheeze/sbt/features/chat/PartyFeatures.java index 64e5d35..819a5a9 100644 --- a/src/main/java/wtf/cheeze/sbt/features/chat/PartyFeatures.java +++ b/src/main/java/wtf/cheeze/sbt/features/chat/PartyFeatures.java @@ -24,8 +24,8 @@ import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -44,7 +44,6 @@ import static wtf.cheeze.sbt.config.categories.Chat.keyD; public class PartyFeatures { - private static final String FEATURE_ID = "party_commands"; public static final Pattern PARTY_PATTERN = Pattern.compile("Party > ([^:]+): !(.+)"); @@ -54,7 +53,7 @@ public class PartyFeatures { public static boolean verboseDebug = false; public static long lastPartyCommand = 0; - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final Minecraft client = Minecraft.getInstance(); public static void registerEvents() { ChatEvents.ON_GAME.register(message -> { @@ -98,7 +97,7 @@ public static void registerEvents() { return; } if (verboseDebug) sendDebugMessage("Sending '/p transfer " + name + "'"); - client.getNetworkHandler().sendChatCommand("p transfer " + name); + client.getConnection().sendCommand("p transfer " + name); } case "allinv", "allinvite" -> { if (!SkyblockData.Party.leader) { @@ -106,7 +105,7 @@ public static void registerEvents() { return; } if (verboseDebug) sendDebugMessage("Sending '/p settings allinvite'"); - client.getNetworkHandler().sendChatCommand("p settings allinvite"); + client.getConnection().sendCommand("p settings allinvite"); } case "warp" -> { if (!SkyblockData.Party.leader) { @@ -114,7 +113,7 @@ public static void registerEvents() { return; } if (verboseDebug) sendDebugMessage("Sending '/p warp'"); - client.getNetworkHandler().sendChatCommand("p warp"); + client.getConnection().sendCommand("p warp"); } case "help" -> { if ((name.equals(client.player.getName().getString()))) { @@ -122,7 +121,7 @@ public static void registerEvents() { return; } if (verboseDebug) sendDebugMessage("Sending help message"); - client.getNetworkHandler().sendChatCommand("pc [SkyblockTweaks] Available party commands: !ptme, !allinvite, !warp, !help"); + client.getConnection().sendCommand("pc [SkyblockTweaks] Available party commands: !ptme, !allinvite, !warp, !help"); } } } else if (s.startsWith("The party was transferred to")) { @@ -140,7 +139,7 @@ public static void registerEvents() { if (!matcher.matches()) return; var n = matcher.group(1); var name = n.contains(" ") ? n.split(" ")[1] : n; - client.send(() -> MessageManager.send(getInviteMessage(name))); + client.schedule(() -> MessageManager.send(getInviteMessage(name))); } }); } @@ -152,13 +151,9 @@ public static class Config { public List blockedUsers = new ArrayList<>(); @SerialEntry public int cooldown = 750; - @SerialEntry public boolean boopInvites = true; - - - public static ListOption getBlackList(ConfigImpl defaults, ConfigImpl config) { return ListOption.createBuilder() .name(key("partyFeatures.blockedUsers")) @@ -173,8 +168,8 @@ public static ListOption getBlackList(ConfigImpl defaults, ConfigImpl co .collapsed(true) .build(); } - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { + public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var enabled = Option.createBuilder() .name(key("partyFeatures.enabled")) .description(keyD("partyFeatures.enabled")) @@ -185,6 +180,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.partyCommands.enabled = value ) .build(); + var cooldown = Option.createBuilder() .name(key("partyFeatures.cooldown")) .description(keyD("partyFeatures.cooldown")) @@ -207,7 +203,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - return OptionGroup.createBuilder() .name(key("partyFeatures")) .description(keyD("partyFeatures")) @@ -215,12 +210,10 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .option(cooldown) .option(inviteBoop) .build(); - } - } - private static Text getInviteMessage(String name) { + private static Component getInviteMessage(String name) { //TODO: Switch this from legacy formatting return TextUtils.getTextThatRunsCommand( TextUtils.join( @@ -236,15 +229,13 @@ private static Text getInviteMessage(String name) { ); } - - private static final Text DEBUG_PREFIX = TextUtils.join( + private static final Component DEBUG_PREFIX = TextUtils.join( TextUtils.withColor("[", Colors.DARK_GRAY), TextUtils.withColor("SBT Party Debugger", Colors.GREEN), TextUtils.withColor("]", Colors.DARK_GRAY) ); + private static void sendDebugMessage(String message) { - client.player.sendMessage(TextUtils.join(DEBUG_PREFIX, TextUtils.SPACE, TextUtils.withColor(message, Colors.CYAN)), false); + client.player.displayClientMessage(TextUtils.join(DEBUG_PREFIX, TextUtils.SPACE, TextUtils.withColor(message, Colors.CYAN)), false); } - - } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/ArmorStackHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/ArmorStackHud.java index 1021da4..40888e9 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/ArmorStackHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/ArmorStackHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -38,7 +38,6 @@ import java.awt.Color; public class ArmorStackHud extends TextHud { - public static final ArmorStackHud INSTANCE = new ArmorStackHud(); private ArmorStackHud() { @@ -56,7 +55,7 @@ private ArmorStackHud() { () -> SBTConfig.huds().armorStack.color, () -> SBTConfig.huds().armorStack.outlineColor, () -> SBTConfig.huds().armorStack.mode, - () -> SkyblockData.Stats.stackString != null ? Text.literal(SkyblockData.Stats.armorStack + SkyblockData.Stats.stackString) : Text.literal("0ᝐ") + () -> SkyblockData.Stats.stackString != null ? Component.literal(SkyblockData.Stats.armorStack + SkyblockData.Stats.stackString) : Component.literal("0ᝐ") ); } @@ -120,6 +119,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("armorStack.outlineColor")) .description(keyD("armorStack.outlineColor")) @@ -132,6 +132,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("armorStack.mode")) .description(keyD("armorStack.mode")) @@ -145,6 +146,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("armorStack.scale")) .description(keyD("armorStack.scale")) @@ -169,4 +171,3 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } } } - diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/CoordinatesHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/CoordinatesHud.java index 32c2f38..f73dda7 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/CoordinatesHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/CoordinatesHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -40,7 +40,6 @@ import java.awt.Color; public class CoordinatesHud extends TextHud { - public static final CoordinatesHud INSTANCE = new CoordinatesHud(); private CoordinatesHud() { @@ -58,9 +57,10 @@ private CoordinatesHud() { () -> SBTConfig.huds().coordinates.color, () -> SBTConfig.huds().coordinates.outlineColor, () -> SBTConfig.huds().coordinates.mode, - () -> Text.literal(String.format("X: %s Y: %s Z: %s" , NumberUtils.formattedRound(client.player.getX(), SBTConfig.huds().coordinates.decimalPlaces), NumberUtils.formattedRound(client.player.getY(), SBTConfig.huds().coordinates.decimalPlaces), NumberUtils.formattedRound(client.player.getZ(), SBTConfig.huds().coordinates.decimalPlaces))) + () -> Component.literal(String.format("X: %s Y: %s Z: %s" , NumberUtils.formattedRound(client.player.getX(), SBTConfig.huds().coordinates.decimalPlaces), NumberUtils.formattedRound(client.player.getY(), SBTConfig.huds().coordinates.decimalPlaces), NumberUtils.formattedRound(client.player.getZ(), SBTConfig.huds().coordinates.decimalPlaces))) ); } + @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; @@ -125,6 +125,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.coordinates.showOutside = value ) .build(); + var decimalPlaces = Option.createBuilder() .name(key("coordinates.decimalPlaces")) .description(keyD("coordinates.decimalPlaces")) @@ -152,6 +153,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("coordinates.outlineColor")) .description(keyD("coordinates.outlineColor")) @@ -164,6 +166,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("coordinates.mode")) .description(keyD("coordinates.mode")) @@ -177,6 +180,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("coordinates.scale")) .description(keyD("coordinates.scale")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/DamageReductionHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/DamageReductionHud.java index 6ab4eff..f0c71d7 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/DamageReductionHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/DamageReductionHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -39,7 +39,6 @@ import java.awt.Color; public class DamageReductionHud extends TextHud { - public static final DamageReductionHud INSTANCE = new DamageReductionHud(); private DamageReductionHud() { @@ -57,10 +56,10 @@ private DamageReductionHud() { () -> SBTConfig.huds().dr.color, () -> SBTConfig.huds().dr.outlineColor, () -> SBTConfig.huds().dr.mode, - () -> Text.literal(NumberUtils.round(SkyblockData.Stats.damageReduction(), 1) + "%") + () -> Component.literal(NumberUtils.round(SkyblockData.Stats.damageReduction(), 1) + "%") ); - } + @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; @@ -72,9 +71,7 @@ public boolean shouldRender(boolean fromHudScreen) { return new HudName("Damage Reduction Percentage HUD", "DR % HUD",Colors.LIME); } - public static class Config { - @SerialEntry public boolean enabled = false; @@ -99,8 +96,6 @@ public static class Config { @SerialEntry public float scale = 1.0f; - - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var enabled = Option.createBuilder() .name(key("dr.enabled")) @@ -112,6 +107,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.dr.enabled = value ) .build(); + var color = Option.createBuilder() .name(key("dr.color")) .description(keyD("dr.color")) @@ -123,6 +119,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("dr.outlineColor")) .description(keyD("dr.outlineColor")) @@ -135,6 +132,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("dr.mode")) .description(keyD("dr.mode")) @@ -148,6 +146,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("dr.scale")) .description(keyD("dr.scale")) @@ -170,6 +169,5 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .collapsed(true) .build(); } - } } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/DefenseHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/DefenseHud.java index 27ebd8c..d4304e7 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/DefenseHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/DefenseHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -40,7 +40,6 @@ import java.awt.Color; public class DefenseHud extends TextHud { - public static final DefenseHud INSTANCE = new DefenseHud(); private DefenseHud() { @@ -54,12 +53,11 @@ private DefenseHud() { scale -> SBTConfig.huds().defense.scale = scale, anchor -> SBTConfig.huds().defense.anchor = anchor ); - line = new SingleHudLine( () -> SBTConfig.huds().defense.color, () -> SBTConfig.huds().defense.outlineColor, () -> SBTConfig.huds().defense.mode, - () -> Text.literal(NumberUtils.formatNumber(SkyblockData.Stats.defense, SBTConfig.huds().defense.separator) + (SBTConfig.huds().defense.icon ? "❈" : "")) + () -> Component.literal(NumberUtils.formatNumber(SkyblockData.Stats.defense, SBTConfig.huds().defense.separator) + (SBTConfig.huds().defense.icon ? "❈" : "")) ); } @Override @@ -68,8 +66,6 @@ public boolean shouldRender(boolean fromHudScreen) { return (SkyblockData.inSB && SBTConfig.huds().defense.enabled) || fromHudScreen; } - - @Override public @NotNull HudName getName() { return new HudName("Defense HUD", "Def HUD", Colors.LIME); @@ -117,6 +113,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.defense.enabled = value ) .build(); + var color = Option.createBuilder() .name(key("defense.color")) .description(keyD("defense.color")) @@ -128,6 +125,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("defense.outlineColor")) .description(keyD("defense.outlineColor")) @@ -140,6 +138,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("defense.mode")) .description(keyD("defense.mode")) @@ -153,6 +152,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var icon = Option.createBuilder() .name(key("defense.icon")) .description(keyD("defense.icon")) @@ -163,6 +163,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.defense.icon = value ) .build(); + var separator = Option.createBuilder() .name(key("defense.separator")) .description(keyD("defense.separator")) @@ -173,6 +174,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.defense.separator = value ) .build(); + var scale = Option.createBuilder() .name(key("defense.scale")) .description(keyD("defense.scale")) @@ -199,5 +201,3 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } } } - - diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelBar.java b/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelBar.java index 2b458c4..33a724f 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelBar.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelBar.java @@ -36,11 +36,8 @@ import java.awt.Color; public class DrillFuelBar extends BarHud { - public static final DrillFuelBar INSTANCE = new DrillFuelBar(); - - private DrillFuelBar() { INFO = new HudInformation( () -> SBTConfig.huds().drillFuelBar.x, @@ -67,18 +64,15 @@ public float getFill() { @Override public @NotNull HudName getName() { - return new HudName("Drill Fuel Bar", "Fuel Bar", Colors.GREEN); } - @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; return (SkyblockData.inSB && SBTConfig.huds().drillFuelBar.enabled) && SkyblockUtils.isThePlayerHoldingADrill() || fromHudScreen; } - public static class Config { @SerialEntry public boolean enabled = false; @@ -121,6 +115,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var scale = Option.createBuilder() .name(key("drillFuelBar.scale")) .description(keyD("drillFuelBar.scale")) @@ -131,6 +126,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.drillFuelBar.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("drillFuelBar")) .description(keyD("drillFuelBar")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelHud.java index 8bfa377..e0fab2b 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/DrillFuelHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -41,7 +41,6 @@ import java.awt.Color; public class DrillFuelHud extends TextHud { - public static final DrillFuelHud INSTANCE = new DrillFuelHud(); private DrillFuelHud() { @@ -60,18 +59,18 @@ private DrillFuelHud() { () -> SBTConfig.huds().drillFuel.outlineColor, () -> SBTConfig.huds().drillFuel.mode, () -> - Text.literal((NumberUtils.formatNumber((int) SkyblockData.Stats.drillFuel, SBTConfig.huds().drillFuel.separator)) + Component.literal((NumberUtils.formatNumber((int) SkyblockData.Stats.drillFuel, SBTConfig.huds().drillFuel.separator)) + "/" + (SBTConfig.huds().drillFuel.abridgeSecondNumber ? NumberUtils.addKOrM((int) SkyblockData.Stats.maxDrillFuel, SBTConfig.huds().drillFuel.separator) : NumberUtils.formatNumber((int) SkyblockData.Stats.maxDrillFuel, SBTConfig.huds().drillFuel.separator))) ); } + @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; return (SkyblockData.inSB && SBTConfig.huds().drillFuel.enabled) && SkyblockUtils.isThePlayerHoldingADrill() || fromHudScreen; } - @Override public @NotNull HudName getName() { @@ -120,6 +119,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.drillFuel.enabled = value ) .build(); + var secondNo = Option.createBuilder() .name(key("drillFuel.abridgeSecondNumber")) .description(keyD("drillFuel.abridgeSecondNumber")) @@ -130,6 +130,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.drillFuel.abridgeSecondNumber = value ) .build(); + var color = Option.createBuilder() .name(key("drillFuel.color")) .description(keyD("drillFuel.color")) @@ -141,6 +142,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("drillFuel.outlineColor")) .description(keyD("drillFuel.outlineColor")) @@ -152,6 +154,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.drillFuel.outlineColor = value.getRGB() ) .build(); + var mode = Option.createBuilder() .name(key("drillFuel.mode")) .description(keyD("drillFuel.mode")) @@ -165,6 +168,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var separator = Option.createBuilder() .name(key("drillFuel.separator")) .description(keyD("drillFuel.separator")) @@ -175,6 +179,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.drillFuel.separator = value ) .build(); + var scale = Option.createBuilder() .name(key("drillFuel.scale")) .description(keyD("drillFuel.scale")) @@ -200,8 +205,4 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .build(); } } - - } - - diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/EhpHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/EhpHud.java index 287fee1..a0c526b 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/EhpHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/EhpHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -40,7 +40,6 @@ import java.awt.Color; public class EhpHud extends TextHud { - public static final EhpHud INSTANCE = new EhpHud(); private EhpHud() { @@ -58,10 +57,11 @@ private EhpHud() { () -> SBTConfig.huds().ehp.color, () -> SBTConfig.huds().ehp.outlineColor, () -> SBTConfig.huds().ehp.mode, - () -> Text.literal(NumberUtils.formatNumber((int) SkyblockData.Stats.effectiveHealth(), SBTConfig.huds().ehp.separator) + (SBTConfig.huds().ehp.icon ? "❤" : "")) + () -> Component.literal(NumberUtils.formatNumber((int) SkyblockData.Stats.effectiveHealth(), SBTConfig.huds().ehp.separator) + (SBTConfig.huds().ehp.icon ? "❤" : "")) ); } + @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; @@ -70,7 +70,6 @@ public boolean shouldRender(boolean fromHudScreen) { @Override public @NotNull HudName getName() { - return new HudName("Effective Health HUD", "EHP HUD", Colors.GREEN); } @@ -116,6 +115,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.ehp.enabled = value ) .build(); + var outline = Option.createBuilder() .name(key("ehp.outlineColor")) .description(keyD("ehp.outlineColor")) @@ -130,6 +130,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("ehp.mode")) .description(keyD("ehp.mode")) @@ -155,6 +156,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var icon = Option.createBuilder() .name(key("ehp.icon")) .description(keyD("ehp.icon")) @@ -165,6 +167,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.ehp.icon = value ) .build(); + var separator = Option.createBuilder() .name(key("ehp.separator")) .description(keyD("ehp.separator")) @@ -175,6 +178,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.ehp.separator = value ) .build(); + var scale = Option.createBuilder() .name(key("ehp.scale")) .description(keyD("ehp.scale")) @@ -186,7 +190,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - return OptionGroup.createBuilder() .name(key("ehp")) .description(keyD("ehp")) @@ -199,13 +202,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .option(scale) .collapsed(true) .build(); - } - - } - } - - - diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/FpsHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/FpsHud.java index 5e28e71..33287e1 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/FpsHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/FpsHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -38,7 +38,6 @@ import java.awt.Color; public class FpsHud extends TextHud { - public static final FpsHud INSTANCE = new FpsHud(); private FpsHud() { @@ -56,7 +55,7 @@ private FpsHud() { () -> SBTConfig.huds().fps.color, () -> SBTConfig.huds().fps.outlineColor, () -> SBTConfig.huds().fps.mode, - () -> Text.literal(SBTConfig.huds().fps.reverse ? "FPS: " + client.getCurrentFps() : client.getCurrentFps() + " FPS") + () -> Component.literal(SBTConfig.huds().fps.reverse ? "FPS: " + client.getFps() : client.getFps() + " FPS") ); } @@ -71,7 +70,6 @@ public boolean shouldRender(boolean fromHudScreen) { return new HudName("FPS HUD", Colors.LIGHT_BLUE); } - public static class Config { @SerialEntry public boolean enabled = false; @@ -136,6 +134,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.fps.reverse = value ) .build(); + var color = Option.createBuilder() .name(key("fps.color")) .description(keyD("fps.color")) @@ -147,6 +146,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("fps.outlineColor")) .description(keyD("fps.outlineColor")) @@ -159,6 +159,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("fps.mode")) .description(keyD("fps.mode")) @@ -172,6 +173,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("fps.scale")) .description(keyD("fps.scale")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/HealthBar.java b/src/main/java/wtf/cheeze/sbt/features/huds/HealthBar.java index 1920a8b..70dccc5 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/HealthBar.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/HealthBar.java @@ -36,7 +36,6 @@ import java.awt.Color; public class HealthBar extends BarHud { - public static final HealthBar INSTANCE = new HealthBar(); private HealthBar() { @@ -68,14 +67,12 @@ public float getFill() { return new HudName("Health Bar", "HP Bar", Colors.RED); } - @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; return (SkyblockData.inSB && SBTConfig.huds().healthBar.enabled && (SkyblockData.location != Location.RIFT || !SBTConfig.huds().healthBar.hideInRift)) || fromHudScreen; } - public static class Config { @SerialEntry public boolean enabled = false; @@ -112,6 +109,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.healthBar.enabled = value ) .build(); + var color = Option.createBuilder() .name(key("healthBar.color")) .description(keyD("healthBar.color")) @@ -123,6 +121,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var absorbColor = Option.createBuilder() .name(key("healthBar.colorAbsorption")) .description(keyD("healthBar.colorAbsorption")) @@ -134,6 +133,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var rift = Option.createBuilder() .name(key("healthBar.hideInRift")) .description(keyD("healthBar.hideInRift")) @@ -144,6 +144,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.healthBar.hideInRift = value ) .build(); + var scale = Option.createBuilder() .name(key("healthBar.scale")) .description(keyD("healthBar.scale")) @@ -154,6 +155,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.healthBar.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("healthBar")) .description(keyD("healthBar")) @@ -164,8 +166,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .option(scale) .collapsed(true) .build(); - - } } } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/HealthHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/HealthHud.java index a018e70..4bf6a68 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/HealthHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/HealthHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -41,7 +41,6 @@ import java.awt.Color; public class HealthHud extends TextHud { - public static final HealthHud INSTANCE = new HealthHud(); private HealthHud() { @@ -59,7 +58,7 @@ private HealthHud() { () -> SkyblockData.Stats.health > SkyblockData.Stats.maxHealth ? SBTConfig.huds().health.colorAbsorption : SBTConfig.huds().health.color, () -> SBTConfig.huds().health.outlineColor, () -> SBTConfig.huds().health.mode, - () -> Text.literal(NumberUtils.formatNumber((int)SkyblockData.Stats.health, SBTConfig.huds().health.separator) + "/" + NumberUtils.formatNumber((int) SkyblockData.Stats.maxHealth, SBTConfig.huds().health.separator) + (SBTConfig.huds().health.icon ? "❤" : "")) + () -> Component.literal(NumberUtils.formatNumber((int)SkyblockData.Stats.health, SBTConfig.huds().health.separator) + "/" + NumberUtils.formatNumber((int) SkyblockData.Stats.maxHealth, SBTConfig.huds().health.separator) + (SBTConfig.huds().health.icon ? "❤" : "")) ); } @Override @@ -120,6 +119,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.health.enabled = value ) .build(); + var color = Option.createBuilder() .name(key("health.color")) .description(keyD("health.color")) @@ -131,6 +131,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var colorAbsorption = Option.createBuilder() .name(key("health.colorAbsorption")) .description(keyD("health.colorAbsorption")) @@ -142,6 +143,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("health.outlineColor")) .description(keyD("health.outlineColor")) @@ -154,6 +156,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("health.mode")) .description(keyD("health.mode")) @@ -167,6 +170,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var icon = Option.createBuilder() .name(key("health.icon")) .description(keyD("health.icon")) @@ -177,6 +181,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.health.icon = value ) .build(); + var separator = Option.createBuilder() .name(key("health.separator")) .description(keyD("health.separator")) @@ -187,6 +192,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.health.separator = value ) .build(); + var rift = Option.createBuilder() .name(key("health.hideInRift")) .description(keyD("health.hideInRift")) @@ -197,6 +203,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.healthBar.hideInRift = value ) .build(); + var scale = Option.createBuilder() .name(key("health.scale")) .description(keyD("health.scale")) @@ -207,6 +214,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.health.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("health")) .description(keyD("health")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/IconTestHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/IconTestHud.java index def6e85..7e6d866 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/IconTestHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/IconTestHud.java @@ -18,7 +18,7 @@ */ package wtf.cheeze.sbt.features.huds; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.hud.bases.MultilineTextHud; import wtf.cheeze.sbt.hud.icon.HudIcon; @@ -57,8 +57,6 @@ public IconTestHud() { y -> this.y = y, scale -> this.scale = scale ); - - } private List getLines() { @@ -84,7 +82,7 @@ private SingleHudLine genLine(HudIcon icon) { () -> Colors.WHITE, DataUtils.ALWAYS_WHITE, () -> DrawMode.PURE, - () -> Text.literal("Test"), + () -> Component.literal("Test"), () -> icon, DataUtils.ALWAYS_TRUE ); diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/ManaBar.java b/src/main/java/wtf/cheeze/sbt/features/huds/ManaBar.java index 1143c73..a6f3f98 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/ManaBar.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/ManaBar.java @@ -35,7 +35,6 @@ import java.awt.Color; public class ManaBar extends BarHud { - public static final ManaBar INSTANCE = new ManaBar(); private ManaBar() { @@ -66,7 +65,6 @@ public float getFill() { return new HudName("Mana Bar", Colors.BLUE); } - @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; @@ -92,7 +90,6 @@ public static class Config { @SerialEntry public AnchorPoint anchor = AnchorPoint.LEFT; - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var enabled = Option.createBuilder() .name(key("manaBar.enabled")) @@ -116,6 +113,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var scale = Option.createBuilder() .name(key("manaBar.scale")) .description(keyD("manaBar.scale")) @@ -126,6 +124,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.manaBar.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("manaBar")) .description(keyD("manaBar")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/ManaHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/ManaHud.java index da013dd..2769948 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/ManaHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/ManaHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -41,7 +41,6 @@ import java.awt.*; public class ManaHud extends TextHud { - public static final ManaHud INSTANCE = new ManaHud(); private ManaHud() { @@ -59,9 +58,10 @@ private ManaHud() { () -> SBTConfig.huds().mana.color, () -> SBTConfig.huds().mana.outlineColor, () -> SBTConfig.huds().mana.mode, - () -> Text.literal(NumberUtils.formatNumber((int) SkyblockData.Stats.mana, SBTConfig.huds().mana.separator) + "/" + NumberUtils.formatNumber((int) SkyblockData.Stats.maxMana, SBTConfig.huds().mana.separator) + (SBTConfig.huds().mana.icon ? "✎" : "")) + () -> Component.literal(NumberUtils.formatNumber((int) SkyblockData.Stats.mana, SBTConfig.huds().mana.separator) + "/" + NumberUtils.formatNumber((int) SkyblockData.Stats.maxMana, SBTConfig.huds().mana.separator) + (SBTConfig.huds().mana.icon ? "✎" : "")) ); } + @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; @@ -73,7 +73,6 @@ public boolean shouldRender(boolean fromHudScreen) { return new HudName("Mana HUD", Colors.BLUE); } public static class Config { - @SerialEntry public boolean enabled = false; @@ -118,6 +117,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.mana.enabled = value ) .build(); + var color = Option.createBuilder() .name(key("mana.color")) .description(keyD("mana.color")) @@ -129,6 +129,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("mana.outlineColor")) .description(keyD("mana.outlineColor")) @@ -141,6 +142,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("mana.mode")) .description(keyD("mana.mode")) @@ -154,6 +156,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var icon = Option.createBuilder() .name(key("mana.icon")) .description(keyD("mana.icon")) @@ -164,6 +167,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.mana.icon = value ) .build(); + var separator = Option.createBuilder() .name(key("mana.separator")) .description(keyD("mana.separator")) @@ -174,6 +178,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.mana.separator = value ) .build(); + var scale = Option.createBuilder() .name(key("mana.scale")) .description(keyD("mana.scale")) @@ -184,6 +189,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.mana.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("mana")) .description(keyD("mana")) @@ -197,6 +203,5 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .collapsed(true) .build(); } - } } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/OverflowManaHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/OverflowManaHud.java index e76ec04..d3c85a4 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/OverflowManaHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/OverflowManaHud.java @@ -23,7 +23,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -40,7 +40,6 @@ import java.awt.*; public class OverflowManaHud extends TextHud { - public static final OverflowManaHud INSTANCE = new OverflowManaHud(); private OverflowManaHud() { @@ -58,7 +57,7 @@ private OverflowManaHud() { () -> SBTConfig.huds().overflowMana.color, () -> SBTConfig.huds().overflowMana.outlineColor, () -> SBTConfig.huds().overflowMana.mode, - () -> Text.literal(NumberUtils.formatNumber((int) SkyblockData.Stats.overflowMana, SBTConfig.huds().overflowMana.separator) + (SBTConfig.huds().overflowMana.icon ? "ʬ" : "")) + () -> Component.literal(NumberUtils.formatNumber((int) SkyblockData.Stats.overflowMana, SBTConfig.huds().overflowMana.separator) + (SBTConfig.huds().overflowMana.icon ? "ʬ" : "")) ); } @@ -72,13 +71,12 @@ public boolean shouldRender(boolean fromHudScreen) { // public String getName() { // return TextUtils.SECTION + "3Oveflow Mana HUD"; // } - public @NotNull HudName getName() { + public @NotNull HudName getName() { return new HudName("Overflow Mana HUD", "OF Mana HUD", Colors.CYAN); } public static class Config { - @SerialEntry public boolean enabled = false; @@ -123,6 +121,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.overflowMana.enabled = value ) .build(); + var hideWhenZero = Option.createBuilder() .name(key("overflowMana.hideWhenZero")) .description(keyD("overflowMana.hideWhenZero")) @@ -133,6 +132,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.overflowMana.hideWhenZero = value ) .build(); + var color = Option.createBuilder() .name(key("overflowMana.color")) .description(keyD("overflowMana.color")) @@ -144,6 +144,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("overflowMana.outlineColor")) .description(keyD("overflowMana.outlineColor")) @@ -156,6 +157,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("overflowMana.mode")) .description(keyD("overflowMana.mode")) @@ -169,6 +171,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var icon = Option.createBuilder() .name(key("overflowMana.icon")) .description(keyD("overflowMana.icon")) @@ -179,6 +182,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.overflowMana.icon = value ) .build(); + var separator = Option.createBuilder() .name(key("overflowMana.separator")) .description(keyD("overflowMana.separator")) @@ -189,6 +193,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.overflowMana.separator = value ) .build(); + var scale = Option.createBuilder() .name(key("overflowMana.scale")) .description(keyD("overflowMana.scale")) @@ -199,6 +204,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.overflowMana.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("overflowMana")) .description(keyD("overflowMana")) @@ -213,6 +219,5 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .collapsed(true) .build(); } - } } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/PressureHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/PressureHud.java index 8614b58..6451f09 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/PressureHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/PressureHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -62,9 +62,8 @@ private PressureHud() { () -> SBTConfig.huds().pressure.color, () -> SBTConfig.huds().pressure.outlineColor, () -> SBTConfig.huds().pressure.mode, - () -> Text.literal(getFormatString().formatted(SkyblockData.Stats.pressure)) + () -> Component.literal(getFormatString().formatted(SkyblockData.Stats.pressure)) ); - } private String getFormatString() { @@ -79,7 +78,6 @@ private String getFormatString() { } } - @Override public @NotNull HudName getName() { return new HudName("Pressure HUD", "Pressure", Colors.BLUE); @@ -92,7 +90,6 @@ public boolean shouldRender(boolean fromHudScreen) { } public static class Config { - @SerialEntry public boolean enabled = false; @@ -120,7 +117,6 @@ public static class Config { @SerialEntry public boolean percent = true; - @SerialEntry public AnchorPoint anchor = AnchorPoint.LEFT; @@ -147,6 +143,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("pressure.outlineColor")) .description(keyD("pressure.outlineColor")) @@ -172,6 +169,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var icon = Option.createBuilder() .name(key("pressure.icon")) .description(keyD("pressure.icon")) @@ -182,6 +180,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.pressure.icon = value ) .build(); + var percent = Option.createBuilder() .name(key("pressure.percent")) .description(keyD("pressure.percent")) @@ -203,6 +202,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.pressure.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("pressure")) .description(keyD("pressure")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/QuiverHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/QuiverHud.java index 1fec7e8..086261e 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/QuiverHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/QuiverHud.java @@ -70,7 +70,6 @@ private QuiverHud() { () -> Icons.ARROW, () -> SBTConfig.huds().quiver.icon ); - } @Override @@ -122,6 +121,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.quiver.enabled = value ) .build(); + var icon = Option.createBuilder() .name(key("quiver.icon")) .description(keyD("quiver.icon")) @@ -133,8 +133,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - - var outline = Option.createBuilder() .name(key("quiver.outlineColor")) .description(keyD("quiver.outlineColor")) @@ -173,5 +171,4 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .build(); } } - } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/RainmakerHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/RainmakerHud.java index 7ec43a5..10f02b7 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/RainmakerHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/RainmakerHud.java @@ -4,9 +4,9 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -48,9 +48,7 @@ private RainmakerHud() { () -> SBTConfig.huds().rainmaker.color, () -> SBTConfig.huds().rainmaker.outlineColor, () -> SBTConfig.huds().rainmaker.mode, - () -> { - return Text.literal(TimeUtils.formatTime(calcTime(), false)); - }, + () -> Component.literal(TimeUtils.formatTime(calcTime(), false)), () -> Icons.WATER_BUCKET, () -> SBTConfig.huds().rainmaker.icon ); @@ -63,12 +61,12 @@ public void registerEvents() { if (!screenTitle.getString().equals("Vanessa")) { return; } - if (slot.id != 13) { + if (slot.index != 13) { return; } // SkyblockTweaks.LOGGER.info("Rainmaker HUD: Slot ID: " + slot.id); - if (slot.getStack() != null && !slot.getStack().getName().getString().equals("The Rainmaker")) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + if (slot.getItem() != null && !slot.getItem().getHoverName().getString().equals("The Rainmaker")) return; + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); for (var line: lines) { // SkyblockTweaks.LOGGER.info("Rainmaker HUD: " + line.getString()); var matcher = RAINMAKER_PATTERN.matcher(line.getString()); diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/RealTimeHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/RealTimeHud.java index 7a23f89..47094bb 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/RealTimeHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/RealTimeHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -39,7 +39,6 @@ import java.time.LocalDateTime; public class RealTimeHud extends TextHud { - public static final RealTimeHud INSTANCE = new RealTimeHud(); private RealTimeHud() { @@ -76,9 +75,9 @@ private RealTimeHud() { amPM = SBTConfig.huds().time.amPM ? "AM" : ""; if (hour == 0) hour = 12; } - return Text.literal(String.format("%d:%02d%s %s", hour, minute, secondString, amPM)); + return Component.literal(String.format("%d:%02d%s %s", hour, minute, secondString, amPM)); } else { - return Text.literal(String.format("%02d:%02d%s", hour, minute, secondString)); + return Component.literal(String.format("%02d:%02d%s", hour, minute, secondString)); } } ); @@ -89,7 +88,6 @@ public boolean shouldRender(boolean fromHudScreen) { return ((SkyblockData.inSB || SBTConfig.huds().time.showOutside) && SBTConfig.huds().time.enabled) || fromHudScreen; } - @Override public @NotNull HudName getName() { return new HudName("Real Time HUD", "Time HUD", Colors.LIGHT_BLUE); @@ -177,6 +175,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .available(config.huds.time.twelveHour) .build(); + var twelveHour = Option.createBuilder() .name(key("time.twelveHour")) .description(keyD("time.twelveHour")) @@ -202,6 +201,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("time.outlineColor")) .description(keyD("time.outlineColor")) @@ -214,6 +214,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("time.mode")) .description(keyD("time.mode")) @@ -227,6 +228,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("time.scale")) .description(keyD("time.scale")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/RiftTimeHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/RiftTimeHud.java index dd0d385..cb22716 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/RiftTimeHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/RiftTimeHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -40,7 +40,6 @@ import java.awt.*; public class RiftTimeHud extends TextHud { - public static final RiftTimeHud INSTANCE = new RiftTimeHud(); private RiftTimeHud() { @@ -58,10 +57,10 @@ private RiftTimeHud() { () -> SkyblockData.Stats.riftTicking ? SBTConfig.huds().riftTime.color : SBTConfig.huds().riftTime.inactiveColor, () -> SBTConfig.huds().riftTime.outlineColor, () -> SBTConfig.huds().riftTime.mode, - () -> Text.literal(TimeUtils.toDuration(SkyblockData.Stats.riftSeconds) + (SBTConfig.huds().riftTime.icon ? "ф" : "") + (SBTConfig.huds().riftTime.showLeftText ? " Left" : "")) + () -> Component.literal(TimeUtils.toDuration(SkyblockData.Stats.riftSeconds) + (SBTConfig.huds().riftTime.icon ? "ф" : "") + (SBTConfig.huds().riftTime.showLeftText ? " Left" : "")) ); - } + @Override public boolean shouldRender(boolean fromHudScreen) { if (!super.shouldRender(fromHudScreen)) return false; @@ -78,10 +77,7 @@ public boolean shouldRender(boolean fromHudScreen) { return new HudName("Rift Time HUD", "Rift HUD", Colors.LIME); } - - public static class Config { - @SerialEntry public boolean enabled = false; @@ -138,6 +134,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var inactiveColor = Option.createBuilder() .name(key("riftTime.inactiveColor")) .description(keyD("riftTime.inactiveColor")) @@ -149,6 +146,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("riftTime.outlineColor")) .description(keyD("riftTime.outlineColor")) @@ -161,6 +159,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("riftTime.mode")) .description(keyD("riftTime.mode")) @@ -174,6 +173,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var icon = Option.createBuilder() .name(key("riftTime.icon")) .description(keyD("riftTime.icon")) @@ -206,6 +206,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.riftTime.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("riftTime")) .description(keyD("riftTime")) @@ -219,6 +220,5 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .collapsed(true) .build(); } - } } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/SecretsHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/SecretsHud.java index dd93844..0e2ff9e 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/SecretsHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/SecretsHud.java @@ -4,7 +4,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -42,20 +42,17 @@ private SecretsHud() { DataUtils.ALWAYS_WHITE, () -> SBTConfig.huds().time.outlineColor, () -> SBTConfig.huds().time.mode, - () -> { - return SBTConfig.huds().secrets.label ? - TextUtils.join( - TextUtils.withColor("Secrets: ", SBTConfig.huds().secrets.labelColor), - getNumText() - ) : getNumText(); - - }, + () -> SBTConfig.huds().secrets.label ? + TextUtils.join( + TextUtils.withColor("Secrets: ", SBTConfig.huds().secrets.labelColor), + getNumText() + ) : getNumText(), () -> Icons.CHEST, () -> SBTConfig.huds().secrets.icon ); } - private Text getNumText() { + private Component getNumText() { return TextUtils.withColor(SkyblockData.Stats.secretsFound + "/" + SkyblockData.Stats.secretsTotal, SBTConfig.huds().secrets.numberColor); } diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/SkillHudManager.java b/src/main/java/wtf/cheeze/sbt/features/huds/SkillHudManager.java index 0b620cf..d0bbe7d 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/SkillHudManager.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/SkillHudManager.java @@ -25,7 +25,7 @@ import dev.isxander.yacl3.api.controller.EnumControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -53,7 +53,6 @@ * Manages the Skill HUD and Skill Bar, storing data and common functions, Singleton */ public class SkillHudManager { - public static final SkillHudManager INSTANCE = new SkillHudManager(); private SkillHudManager() { @@ -114,24 +113,24 @@ public SkillHud() { () -> SBTConfig.huds().skills.mode, () -> { try { - if (timeLeft <= 0) return Text.literal("Skill HUD Placeholder Text"); + if (timeLeft <= 0) return Component.literal("Skill HUD Placeholder Text"); if (percent == -1) { if (total == 0) { - return Text.literal("+" + gained + " (" + NumberUtils.formatNumber((long) progress, ",") + ")"); + return Component.literal("+" + gained + " (" + NumberUtils.formatNumber((long) progress, ",") + ")"); } else { if (SBTConfig.huds().skills.skillMode == Mode.PERCENT) { var base = "+" + gained + " (" + NumberUtils.formatPercent(progress, total) + ")"; if (SBTConfig.huds().skills.actionsLeft) { - return Text.literal(base + " - " + actionsLeft(gained, progress, total) + " Left"); + return Component.literal(base + " - " + actionsLeft(gained, progress, total) + " Left"); } else { - return Text.literal(base); + return Component.literal(base); } } else { var base = "+" + gained + " (" + NumberUtils.formatNumber((int) progress, ",") + "/" + (SBTConfig.huds().skills.abridgeDenominator ? NumberUtils.addKOrM((int) total, ",") : NumberUtils.formatNumber((int) total, ",")) + ")"; if (SBTConfig.huds().skills.actionsLeft) { - return Text.literal(base + " - " + actionsLeft(gained, progress, total) + " Left"); + return Component.literal(base + " - " + actionsLeft(gained, progress, total) + " Left"); } else { - return Text.literal(base); + return Component.literal(base); } } } @@ -140,15 +139,15 @@ public SkillHud() { var level = tryAndGetSkillLevel(currentSkill); int highestLevel = getSkillTable(currentSkill).length - 1; if (level == -1 || level > highestLevel) - return Text.literal("+" + gained + " (" + percent + "%)"); + return Component.literal("+" + gained + " (" + percent + "%)"); var table = getSkillTable(currentSkill); var nextLevel = table[level]; var progressLevel = (percent / 100) * nextLevel; var base = "+" + gained + " (" + NumberUtils.formatNumber((int) progressLevel, ",") + "/" + (SBTConfig.huds().skills.abridgeDenominator ? NumberUtils.addKOrM(nextLevel, ",") : NumberUtils.formatNumber(nextLevel, ",")) + ")"; if (SBTConfig.huds().skills.actionsLeft && percent < 100) { - return Text.literal(base + " - " + actionsLeft(gained, progressLevel, nextLevel) + " Left"); + return Component.literal(base + " - " + actionsLeft(gained, progressLevel, nextLevel) + " Left"); } else { - return Text.literal(base); + return Component.literal(base); } } else { @@ -156,19 +155,19 @@ public SkillHud() { if (SBTConfig.huds().skills.actionsLeft && percent < 100) { var level = tryAndGetSkillLevel(currentSkill); int highestLevel = getSkillTable(currentSkill).length - 1; - if (level == -1 || level > highestLevel) return Text.literal(base); + if (level == -1 || level > highestLevel) return Component.literal(base); var table = getSkillTable(currentSkill); var nextLevel = table[level]; var progressLevel = (percent / 100) * nextLevel; - return Text.literal(base + " - " + actionsLeft(gained, progressLevel, nextLevel) + " Left"); + return Component.literal(base + " - " + actionsLeft(gained, progressLevel, nextLevel) + " Left"); } else { - return Text.literal(base); + return Component.literal(base); } } } } catch (Exception e) { ErrorHandler.handle(e, "Error Creating Skill HUD Text", ErrorLevel.WARNING); - return Text.literal("+" + gained + " (" + percent + "%)"); + return Component.literal("+" + gained + " (" + percent + "%)"); } }, () -> { @@ -205,7 +204,6 @@ private static int actionsLeft(float gain, float prog, float tot) { return Math.round(remain / gain); } - public @NotNull HudName getName() { return new HudName("Skill Progress HUD", "Skill HUD", Colors.CYAN); } @@ -223,11 +221,11 @@ public enum Mode implements NameableEnum { PERCENT; @Override - public Text getDisplayName() { + public Component getDisplayName() { return switch (this) { - case HYPIXEL -> Text.literal("Default"); - case NUMBER -> Text.literal("All Numbers"); - case PERCENT -> Text.literal("All Percent"); + case HYPIXEL -> Component.literal("Default"); + case NUMBER -> Component.literal("All Numbers"); + case PERCENT -> Component.literal("All Percent"); }; } } @@ -299,6 +297,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.skills.actionsLeft = value ) .build(); + var abridgeDenominator = Option.createBuilder() .name(key("skills.abridgeDenominator")) .description(keyD("skills.abridgeDenominator")) @@ -321,6 +320,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("skills.outlineColor")) .description(keyD("skills.outlineColor")) @@ -333,6 +333,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("skills.mode")) .description(keyD("skills.mode")) @@ -346,6 +347,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("skills.scale")) .description(keyD("skills.scale")) @@ -372,8 +374,8 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .build(); } } - } + public class SkillBar extends BarHud { public SkillBar() { INFO = new HudInformation( @@ -385,7 +387,6 @@ public SkillBar() { y -> SBTConfig.huds().skillBar.y = y, scale -> SBTConfig.huds().skillBar.scale = scale, anchor -> SBTConfig.huds().skillBar.anchor = anchor - ); } @@ -463,6 +464,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var scale = Option.createBuilder() .name(key("skillBar.scale")) .description(keyD("skillBar.scale")) @@ -473,6 +475,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.skillBar.scale = value ) .build(); + return OptionGroup.createBuilder() .name(key("skillBar")) .description(keyD("skillBar")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/SpeedHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/SpeedHud.java index a1348df..a367d9d 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/SpeedHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/SpeedHud.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -39,7 +39,6 @@ import java.awt.Color; public class SpeedHud extends TextHud { - public static final SpeedHud INSTANCE = new SpeedHud(); private SpeedHud() { @@ -57,7 +56,7 @@ private SpeedHud() { () -> SBTConfig.huds().speed.color, () -> SBTConfig.huds().speed.outlineColor, () -> SBTConfig.huds().speed.mode, - () -> Text.literal((SkyblockUtils.getSpeed()+"").split("\\.")[0] + "%") + () -> Component.literal((SkyblockUtils.getSpeed()+"").split("\\.")[0] + "%") ); } @@ -72,8 +71,6 @@ public boolean shouldRender(boolean fromHudScreen) { return (SkyblockData.inSB && SBTConfig.huds().speed.enabled) || fromHudScreen; } - - public static class Config { @SerialEntry public boolean enabled = false; @@ -122,6 +119,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var outline = Option.createBuilder() .name(key("speed.outlineColor")) .description(keyD("speed.outlineColor")) @@ -134,6 +132,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); + var mode = Option.createBuilder() .name(key("speed.mode")) .description(keyD("speed.mode")) @@ -147,6 +146,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(key("speed.scale")) .description(keyD("speed.scale")) diff --git a/src/main/java/wtf/cheeze/sbt/features/huds/TickerHud.java b/src/main/java/wtf/cheeze/sbt/features/huds/TickerHud.java index 6a9f6a0..8095f08 100644 --- a/src/main/java/wtf/cheeze/sbt/features/huds/TickerHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/huds/TickerHud.java @@ -32,7 +32,6 @@ import wtf.cheeze.sbt.utils.skyblock.SkyblockData; public class TickerHud extends AbstractTickerHud { - public static final TickerHud INSTANCE = new TickerHud(); private TickerHud() { @@ -48,7 +47,6 @@ private TickerHud() { ); } - @Override public @NotNull HudName getName() { return new HudName("Ticker/Charges HUD", "Ticker HUD", Colors.YELLOW); @@ -60,7 +58,6 @@ public boolean shouldRender(boolean fromHudScreen) { return (SkyblockData.inSB && SBTConfig.huds().ticker.enabled && SkyblockData.Stats.tickerActive) || fromHudScreen; } - @Override public int getMax(boolean fromHudScreen) { if (!fromHudScreen) return SkyblockData.Stats.maxTickers; @@ -103,6 +100,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.huds.ticker.enabled = value ) .build(); + var scale = Option.createBuilder() .name(key("ticker.scale")) .description(keyD("ticker.scale")) @@ -123,5 +121,4 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .build(); } } - } diff --git a/src/main/java/wtf/cheeze/sbt/features/mining/FetchurFeatures.java b/src/main/java/wtf/cheeze/sbt/features/mining/FetchurFeatures.java index 730fcc9..16f4a1a 100644 --- a/src/main/java/wtf/cheeze/sbt/features/mining/FetchurFeatures.java +++ b/src/main/java/wtf/cheeze/sbt/features/mining/FetchurFeatures.java @@ -23,11 +23,11 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -67,11 +67,11 @@ public class FetchurFeatures { private static final String SUCCESS_MESSAGE = "thanks thats probably what i needed"; private static final String ALREADY_DONE_MESSAGE = "come back another time, maybe tmrw"; - private static Text waitingToSend; + private static Component waitingToSend; private static boolean isWaitingToSend = false; public static void registerEvents() { - ChatEvents.ON_GAME.register(message -> {; + ChatEvents.ON_GAME.register(message -> { var str = TextUtils.removeFormatting(message.getString()); var matcher = FETCHUR_PATTERN.matcher(str); if (!matcher.matches()) return; @@ -83,7 +83,7 @@ public static void registerEvents() { if (!SBTConfig.mining().fetchur.chatSolver) return; if (isWaitingToSend) { isWaitingToSend = false; - MinecraftClient.getInstance().send(() -> { + Minecraft.getInstance().schedule(() -> { MessageManager.send(waitingToSend); waitingToSend = null; }); @@ -164,12 +164,9 @@ private CheezePair[] getComponents() { } return list.toArray(CheezePair[]::new); - } } - - private static boolean hasFetchuredToday() { return TimeUtils.isInSameDayET(System.currentTimeMillis() - 1, PersistentData.get().currentProfile().lastGaveFetchurItem); } @@ -193,22 +190,22 @@ public enum FetchurItem { EMERALD(Items.EMERALD, 50, TextUtils.withColor("50 Emeralds", Colors.WHITE), "theyre green and some dudes trade stuff for it"), RDD_WOOL(Items.RED_WOOL, 50, TextUtils.withColor("50 Red Wool", Colors.WHITE), "theyre red and soft"),; public final ItemStack stack; - public final Text display; + public final Component display; public final String hisDescription; - FetchurItem(Item item, Text display, String hisDescription) { + FetchurItem(Item item, Component display, String hisDescription) { this.stack = new ItemStack(item); this.display = display; this.hisDescription = hisDescription; } - FetchurItem(Item item, int count, Text display, String hisDescription) { + FetchurItem(Item item, int count, Component display, String hisDescription) { this.stack = new ItemStack(item, count); this.display = display; this.hisDescription = hisDescription; } - FetchurItem(ItemStack stack, Text display, String hisDescription) { + FetchurItem(ItemStack stack, Component display, String hisDescription) { this.stack = stack; this.display = display; this.hisDescription = hisDescription; diff --git a/src/main/java/wtf/cheeze/sbt/features/mining/MiningHud.java b/src/main/java/wtf/cheeze/sbt/features/mining/MiningHud.java index 2018d3e..886b6ed 100644 --- a/src/main/java/wtf/cheeze/sbt/features/mining/MiningHud.java +++ b/src/main/java/wtf/cheeze/sbt/features/mining/MiningHud.java @@ -21,8 +21,8 @@ import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -55,9 +55,7 @@ import java.util.List; import java.util.function.Supplier; - public class MiningHud extends MultilineTextHud { - public static final MiningHud INSTANCE = new MiningHud(); private MiningHud() { @@ -77,7 +75,6 @@ private MiningHud() { private static final String COOLDOWN_FORMAT = "%ds"; @Override public @NotNull HudName getName() { - return new HudName("Mining HUD", Colors.CYAN); } @@ -93,8 +90,6 @@ public void refreshComposition() { this.lines = genLines(); } - - private HudComponent[] genLines() { List lines = new ArrayList<>(); for (Entry entry : SBTConfig.mining().hud.composition) { @@ -165,8 +160,7 @@ private HudComponent[] genLines() { return lines.toArray(new HudComponent[0]); } - - private final ArrayList> comCache = new ArrayList<>(); + private final ArrayList> comCache = new ArrayList<>(); private FlexibleHudLine.Part[] getComParts() { var arr = new FlexibleHudLine.Part[SkyblockData.miningData.comNo]; @@ -189,8 +183,7 @@ private FlexibleHudLine.Part[] getComParts() { return arr; } - private CheezePair, Supplier> genComSuppliers(int i) { - + private CheezePair, Supplier> genComSuppliers(int i) { return new CheezePair<>( () -> { var com = SkyblockData.miningData.coms[i]; @@ -203,10 +196,8 @@ private CheezePair, Supplier> genComSuppliers(int i) { ); }, () -> MiningData.getComIcon(SkyblockData.miningData.coms[i].key())); - } - public enum Entry implements NameableEnum, CompositionEntry { COMMISSIONS(TextUtils.withColor("Commissions", Colors.CYAN), TextUtils.join(TextUtils.withColor("Mithril Miner: ", Colors.CYAN), TextUtils.withColor("0/350", Colors.RED)), false), MITHRIL_POWDER(TextUtils.withColor("Mithril Powder", Colors.GREEN), TextUtils.join(TextUtils.withColor("Mithril Powder: ", Colors.CYAN), TextUtils.withColor("2M", Colors.GREEN)), false), @@ -214,20 +205,18 @@ public enum Entry implements NameableEnum, CompositionEntry { GLACITE_POWER(TextUtils.withColor("Glacite Power", Colors.LIGHT_BLUE), TextUtils.join(TextUtils.withColor("Glacite Powder: ", Colors.CYAN), TextUtils.withColor("50K", Colors.LIGHT_BLUE)), false), COOLDOWN(TextUtils.withColor("Pickaxe Cooldown", Colors.LIME), TextUtils.join(TextUtils.withColor("Pickaxe CD: ", Colors.CYAN), TextUtils.withColor("Ready", Colors.LIME)),false); - - - private final Text name; - private final Text preview; + private final Component name; + private final Component preview; private final boolean repeatable; - Entry(Text name, Text preview, boolean repeatable) { + Entry(Component name, Component preview, boolean repeatable) { this.name = name; this.preview = preview; this.repeatable = repeatable; } @Override - public Text getDisplayName() { + public Component getDisplayName() { return name; } @@ -237,7 +226,7 @@ public boolean isRepeatable() { } @Override - public Text getPreviewText() { + public Component getPreviewText() { return preview; } } @@ -280,10 +269,10 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var composition = ButtonOption.createBuilder() .name(Mining.key("hud.composition")) .description(Mining.keyD("hud.composition")) - .text(Text.translatable("sbt.gui.config.composition.open")) + .text(Component.translatable("sbt.gui.config.composition.open")) .action((yaclScreen, buttonOption) -> { var screen = new CompositionPopupScreen<>( - TextUtils.join(TextUtils.withColor(Text.translatable("sbt.gui.config.composition"), Colors.CYAN), TextUtils.SPACE, INSTANCE.getName().primaryName()), + TextUtils.join(TextUtils.withColor(Component.translatable("sbt.gui.config.composition"), Colors.CYAN), TextUtils.SPACE, INSTANCE.getName().primaryName()), yaclScreen, Binding.generic( defaults.mining.hud.composition, @@ -291,7 +280,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { it -> config.mining.hud.composition = it ), Entry.values()); - MinecraftClient.getInstance().setScreen(screen); + Minecraft.getInstance().setScreen(screen); }) .build(); var enabled = Option.createBuilder() @@ -316,7 +305,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - var abbreviatePowder = Option.createBuilder() .name(Mining.key("hud.abbreviatePowder")) .description(Mining.keyD("hud.abbreviatePowder")) @@ -338,6 +326,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.mining.hud.icons = value ) .build(); + var color = Option.createBuilder() .name(Mining.key("hud.color")) .description(Mining.keyD("hud.color")) @@ -348,6 +337,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { value -> config.mining.hud.color = value.getRGB() ) .build(); + var outlineColor = Option.createBuilder() .name(Mining.key("hud.outlineColor")) .description(Mining.keyD("hud.outlineColor")) @@ -359,7 +349,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { ) .build(); - var drawMode = Option.createBuilder() .name(Mining.key("hud.mode")) .description(Mining.keyD("hud.mode")) @@ -373,6 +362,7 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } ) .build(); + var scale = Option.createBuilder() .name(Mining.key("hud.scale")) .description(Mining.keyD("hud.scale")) @@ -401,6 +391,3 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } } } - - - diff --git a/src/main/java/wtf/cheeze/sbt/features/mining/MiningTitles.java b/src/main/java/wtf/cheeze/sbt/features/mining/MiningTitles.java index 925005f..78f9972 100644 --- a/src/main/java/wtf/cheeze/sbt/features/mining/MiningTitles.java +++ b/src/main/java/wtf/cheeze/sbt/features/mining/MiningTitles.java @@ -5,7 +5,7 @@ import dev.isxander.yacl3.api.controller.ColorControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.events.ChatEvents; @@ -24,12 +24,12 @@ public static void registerEvents() { if (!SBTConfig.mining().titles.goblinTitles) return; var content = TextUtils.removeFormatting(message.getString()).trim(); if (content.equals("A Golden Goblin has spawned!")) { - MinecraftClient.getInstance().inGameHud.setTitle(TextUtils.withColor( + Minecraft.getInstance().gui.setTitle(TextUtils.withColor( SBTConfig.mining().titles.goldenText, SBTConfig.mining().titles.goldenColor )); } else if (content.equals("A Diamond Goblin has spawned!")) { - MinecraftClient.getInstance().inGameHud.setTitle(TextUtils.withColor( + Minecraft.getInstance().gui.setTitle(TextUtils.withColor( SBTConfig.mining().titles.diamondText, SBTConfig.mining().titles.diamondColor )); diff --git a/src/main/java/wtf/cheeze/sbt/features/misc/MouseLock.java b/src/main/java/wtf/cheeze/sbt/features/misc/MouseLock.java index 356292b..75d3f7a 100644 --- a/src/main/java/wtf/cheeze/sbt/features/misc/MouseLock.java +++ b/src/main/java/wtf/cheeze/sbt/features/misc/MouseLock.java @@ -31,7 +31,7 @@ public class MouseLock { public static boolean locked = false; public static void registerEvents() { - WorldLoadEvents.WORLD_LOAD.register((world, wer) -> { + WorldLoadEvents.WORLD_LOAD.register((world) -> { if (locked) { locked = false; MessageManager.send("Disabled Mouse Lock due to world change", Colors.RED); diff --git a/src/main/java/wtf/cheeze/sbt/features/overlay/BrewingStandOverlay.java b/src/main/java/wtf/cheeze/sbt/features/overlay/BrewingStandOverlay.java index a8979dc..725197a 100644 --- a/src/main/java/wtf/cheeze/sbt/features/overlay/BrewingStandOverlay.java +++ b/src/main/java/wtf/cheeze/sbt/features/overlay/BrewingStandOverlay.java @@ -21,10 +21,9 @@ import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.screen.slot.Slot; -import net.minecraft.util.collection.DefaultedList; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.inventory.Slot; +import net.minecraft.core.NonNullList; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.config.categories.General; @@ -32,54 +31,45 @@ import wtf.cheeze.sbt.utils.render.RenderUtils; public class BrewingStandOverlay { - private static final int DRAW_OFFSET_X = 20; private static final int DRAW_OFFSET_Y = 4; - public static final float Z_OFFSET = 251; private static final int INPUT_SLOT = 13; private static final int TIMER_SLOT = 24; private static final int RIGHT_OUTPUT_SLOT = 42; - - public static void render(DefaultedList slots, DrawContext context) { + public static void render(NonNullList slots, GuiGraphics guiGraphics) { if (!SBTConfig.get().brewingStandOverlay.enabled) return; var input = slots.get(INPUT_SLOT); var timer = slots.get(TIMER_SLOT); var output = slots.get(RIGHT_OUTPUT_SLOT); - RenderUtils.drawWithZ(context, Z_OFFSET, () -> { - if (input.hasStack()) { - drawName(input, context); - } - if (!timer.getStack().getName().getString().startsWith("Place Water Bottles")) { - drawName(timer, context); - } - if (output.hasStack()) { - drawName(output, context); - } - }); - + if (input.hasItem()) { + drawName(input, guiGraphics); + } + if (!timer.getItem().getHoverName().getString().startsWith("Place Water Bottles")) { + drawName(timer, guiGraphics); + } + if (output.hasItem()) { + drawName(output, guiGraphics); + } } - - private static void drawName(Slot slot, DrawContext context) { - var name = slot.getStack().getName(); + private static void drawName(Slot slot, GuiGraphics guiGraphics) { + var name = slot.getItem().getHoverName(); var color = name.getStyle().getColor(); int rcolor; if (color == null) { rcolor = Colors.WHITE; } else { - rcolor = color.getRgb(); + rcolor = color.getValue(); } - RenderUtils.drawText(context, name, slot.x + DRAW_OFFSET_X, slot.y + DRAW_OFFSET_Y, rcolor, false); + RenderUtils.drawText(guiGraphics, name, slot.x + DRAW_OFFSET_X, slot.y + DRAW_OFFSET_Y, rcolor, false); } public static class Config { @SerialEntry public boolean enabled = true; - - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var enabled = Option.createBuilder() .name(General.key("brewingStandOverlay.enabled")) @@ -100,7 +90,5 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { } - } - } diff --git a/src/main/java/wtf/cheeze/sbt/features/overlay/MenuHighlights.java b/src/main/java/wtf/cheeze/sbt/features/overlay/MenuHighlights.java index 5a905e0..c1d9d14 100644 --- a/src/main/java/wtf/cheeze/sbt/features/overlay/MenuHighlights.java +++ b/src/main/java/wtf/cheeze/sbt/features/overlay/MenuHighlights.java @@ -21,22 +21,20 @@ import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.inventory.Slot; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.events.DrawSlotEvents; -import wtf.cheeze.sbt.hud.icon.Icons; import java.util.regex.Pattern; import static wtf.cheeze.sbt.config.categories.General.key; import static wtf.cheeze.sbt.config.categories.General.keyD; public class MenuHighlights { - // Players: n/80 public static final Pattern PLAYER_COUNT_PATTERN = Pattern.compile("Players: (\\d\\d?)/(\\d\\d?)"); @@ -55,43 +53,40 @@ public static void registerEvents() { DrawSlotEvents.BEFORE_ITEM.register(MenuHighlights::onDrawSlot); } - - public static void onDrawSlot(Text screenTitle, DrawContext context, Slot slot) { + public static void onDrawSlot(Component screenTitle, GuiGraphics guiGraphics, Slot slot) { var title = screenTitle.getString(); switch (title) { - case "SkyBlock Hub Selector" -> tryDrawHighlight(context, slot); - case "Dungeon Hub Selector" -> tryDrawHighlightDH(context, slot); - case "Heart of the Mountain" -> tryDrawHighlightHOTM(context, slot); - case "Heart of the Forest" -> tryDrawHighlightHOTF(context, slot); - case "Commissions" -> tryDrawHighlightComs(context, slot); - case "Your Contests" -> tryDrawHighlightContests(context, slot); + case "SkyBlock Hub Selector" -> tryDrawHighlight(guiGraphics, slot); + case "Dungeon Hub Selector" -> tryDrawHighlightDH(guiGraphics, slot); + case "Heart of the Mountain" -> tryDrawHighlightHOTM(guiGraphics, slot); + case "Heart of the Forest" -> tryDrawHighlightHOTF(guiGraphics, slot); + case "Commissions" -> tryDrawHighlightComs(guiGraphics, slot); + case "Your Contests" -> tryDrawHighlightContests(guiGraphics, slot); } if (title.contains("Widget") || title.contains("Setting")) { - tryDrawHighlightWidget(context, slot); + tryDrawHighlightWidget(guiGraphics, slot); } else if (title.equals("Ways to Level Up") || title.equals("Skill Related Tasks") ||title.contains(" ➜ ")) { - tryDrawHighlightTasks(context, slot); + tryDrawHighlightTasks(guiGraphics, slot); } else if (title.startsWith("Toggle Potion Effects")) { - tryDrawHighlightEffects(context, slot); + tryDrawHighlightEffects(guiGraphics, slot); } } - - - private static void tryDrawHighlight(DrawContext context, Slot slot) { + private static void tryDrawHighlight(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.enabledRegular) return; - if (!slot.getStack().getName().getString().contains("SkyBlock Hub #")) return; - sharedHighlight(context, slot); + if (!slot.getItem().getHoverName().getString().contains("SkyBlock Hub #")) return; + sharedHighlight(guiGraphics, slot); } - private static void tryDrawHighlightDH(DrawContext context, Slot slot) { + private static void tryDrawHighlightDH(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.enabledDungeon) return; - if (!slot.getStack().getName().getString().contains("Dungeon Hub #")) return; - sharedHighlight(context, slot); + if (!slot.getItem().getHoverName().getString().contains("Dungeon Hub #")) return; + sharedHighlight(guiGraphics, slot); } - private static void sharedHighlight(DrawContext context, Slot slot) { - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + private static void sharedHighlight(GuiGraphics guiGraphics, Slot slot) { + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); var matcher = PLAYER_COUNT_PATTERN.matcher(lines.getFirst().getString()); if (!matcher.matches()) return; var playerCount = Integer.parseInt(matcher.group(1)); @@ -100,122 +95,120 @@ private static void sharedHighlight(DrawContext context, Slot slot) { var threshold2 = max * 2 / 4; var threshold3 = max / 4; - if (playerCount >= threshold1) highlight(context, slot, HIGHLIGHT_RED); - else if (playerCount >= threshold2) highlight(context, slot, HIGHLIGHT_ORANGE); - else if (playerCount >= threshold3) highlight(context, slot, HIGHLIGHT_YELLOW); - else highlight(context, slot, HIGHLIGHT_GREEN); + if (playerCount >= threshold1) highlight(guiGraphics, slot, HIGHLIGHT_RED); + else if (playerCount >= threshold2) highlight(guiGraphics, slot, HIGHLIGHT_ORANGE); + else if (playerCount >= threshold3) highlight(guiGraphics, slot, HIGHLIGHT_YELLOW); + else highlight(guiGraphics, slot, HIGHLIGHT_GREEN); } - private static void tryDrawHighlightHOTM(DrawContext context, Slot slot) { + private static void tryDrawHighlightHOTM(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.hotmHighlight) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); for (var line: lines) { switch (line.getString()) { case "ENABLED", "SELECTED" -> { - highlight(context, slot, HIGHLIGHT_GREEN2); + highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); return; } case "DISABLED", "Click to select!" -> { - highlight(context, slot, HIGHLIGHT_RED2); + highlight(guiGraphics, slot, HIGHLIGHT_RED2); return; } case "1 Token of the Mountain" -> { - highlight(context, slot, HIGHLIGHT_GREY); + highlight(guiGraphics, slot, HIGHLIGHT_GREY); return; } } } } - private static void tryDrawHighlightHOTF(DrawContext context, Slot slot) { + private static void tryDrawHighlightHOTF(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.hotfHighlight) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); for (var line: lines) { switch (line.getString()) { case "ENABLED", "SELECTED" -> { - highlight(context, slot, HIGHLIGHT_GREEN2); + highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); return; } case "DISABLED", "Click to select!" -> { - highlight(context, slot, HIGHLIGHT_RED2); + highlight(guiGraphics, slot, HIGHLIGHT_RED2); return; } case "1 Token of the Forest" -> { - highlight(context, slot, HIGHLIGHT_GREY); + highlight(guiGraphics, slot, HIGHLIGHT_GREY); return; } } } } - - - private static void tryDrawHighlightWidget(DrawContext context, Slot slot) { + private static void tryDrawHighlightWidget(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.widgetHighlight) return; - var name = slot.getStack().getName().getString(); + var name = slot.getItem().getHoverName().getString(); if (!name.contains("✔") && !name.contains("✖")) { if (name.equals("Third Column")) { - var fistLine = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines().getFirst().getString(); - if (fistLine.equals("Currently: ENABLED")) highlight(context, slot, HIGHLIGHT_GREEN2); - else highlight(context, slot, HIGHLIGHT_RED2); + var fistLine = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines().getFirst().getString(); + if (fistLine.equals("Currently: ENABLED")) highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); + else highlight(guiGraphics, slot, HIGHLIGHT_RED2); } return; } - if (name.contains("✔")) highlight(context, slot, HIGHLIGHT_GREEN2); - else highlight(context, slot, HIGHLIGHT_RED2); + if (name.contains("✔")) highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); + else highlight(guiGraphics, slot, HIGHLIGHT_RED2); } - private static void tryDrawHighlightTasks(DrawContext context, Slot slot) { + private static void tryDrawHighlightTasks(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.sblevelHighlight) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); for (var line: lines) { var s = line.getString(); - if (s.equals("Total Progress: 100%")) highlight(context, slot, HIGHLIGHT_GREEN2); - else if (s.contains("Total Progress: ")) highlight(context, slot, HIGHLIGHT_RED2); - else if (s.equals("You have completed this task!")) highlight(context, slot, HIGHLIGHT_GREEN2); - else if (s.equals("This task can only be completed once!")) highlight(context, slot, HIGHLIGHT_RED2); - else if (s.equals("Progress to Complete Category: 100%")) highlight(context, slot, HIGHLIGHT_GREEN2); - else if (s.contains("Progress to Complete Category: ")) highlight(context, slot, HIGHLIGHT_RED2); + if (s.equals("Total Progress: 100%")) highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); + else if (s.contains("Total Progress: ")) highlight(guiGraphics, slot, HIGHLIGHT_RED2); + else if (s.equals("You have completed this task!")) highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); + else if (s.equals("This task can only be completed once!")) highlight(guiGraphics, slot, HIGHLIGHT_RED2); + else if (s.equals("Progress to Complete Category: 100%")) highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); + else if (s.contains("Progress to Complete Category: ")) highlight(guiGraphics, slot, HIGHLIGHT_RED2); } } - private static void tryDrawHighlightComs(DrawContext context, Slot slot) { + private static void tryDrawHighlightComs(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.unclaimedCommissionHighlight) return; - if (slot.getStack().isEmpty()) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + if (slot.getItem().isEmpty()) return; + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); if (lines.isEmpty()) return; if (lines.getLast().getString().equals("Click to claim rewards!")) { - highlight(context, slot, HIGHLIGHT_GREEN2); + highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); } } - private static void tryDrawHighlightContests(DrawContext context, Slot slot) { + private static void tryDrawHighlightContests(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.unclaimedContestHighlight) return; - if (slot.getStack().isEmpty()) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + if (slot.getItem().isEmpty()) return; + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); if (lines.isEmpty()) return; if (lines.getLast().getString().equals("Click to claim reward!")) { - highlight(context, slot, HIGHLIGHT_GREEN2); + highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); } } - private static void tryDrawHighlightEffects(DrawContext context, Slot slot) { + private static void tryDrawHighlightEffects(GuiGraphics guiGraphics, Slot slot) { if (!SBTConfig.get().hubSelectorHighlight.toggleEffectHighlight) return; - if (slot.getStack().isEmpty()) return; - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + if (slot.getItem().isEmpty()) return; + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); if (lines.isEmpty()) return; var lastStr = lines.getLast().getString(); if (lastStr.equals("Click to disable!")) { - highlight(context, slot, HIGHLIGHT_GREEN2); + highlight(guiGraphics, slot, HIGHLIGHT_GREEN2); } else if (lastStr.equals("Click to enable!")) { - highlight(context, slot, HIGHLIGHT_RED2); + highlight(guiGraphics, slot, HIGHLIGHT_RED2); } } - private static void highlight(DrawContext context, Slot slot, int color) { - context.fill(slot.x, slot.y, slot.x + SLOT_DIMENSION, slot.y + SLOT_DIMENSION, color); + private static void highlight(GuiGraphics guiGraphics, Slot slot, int color) { + guiGraphics.fill(slot.x, slot.y, slot.x + SLOT_DIMENSION, slot.y + SLOT_DIMENSION, color); } public static class Config { @@ -246,37 +239,37 @@ public static class Config { @SerialEntry public boolean toggleEffectHighlight = true; - - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var enabled = Option.createBuilder() .name(key("menuHighlights.enabledRegular")) .description(keyD("menuHighlights.enabledRegular")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.enabledRegular, - () -> config.hubSelectorHighlight.enabledRegular, - value -> config.hubSelectorHighlight.enabledRegular = value + defaults.hubSelectorHighlight.enabledRegular, + () -> config.hubSelectorHighlight.enabledRegular, + value -> config.hubSelectorHighlight.enabledRegular = value ) .build(); + var enabledDungeon = Option.createBuilder() .name(key("menuHighlights.enabledDungeon")) .description(keyD("menuHighlights.enabledDungeon")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.enabledDungeon, - () -> config.hubSelectorHighlight.enabledDungeon, - value -> config.hubSelectorHighlight.enabledDungeon = value + defaults.hubSelectorHighlight.enabledDungeon, + () -> config.hubSelectorHighlight.enabledDungeon, + value -> config.hubSelectorHighlight.enabledDungeon = value ) .build(); + var hotmHighlight = Option.createBuilder() .name(key("menuHighlights.hotmHighlight")) .description(keyD("menuHighlights.hotmHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.hotmHighlight, - () -> config.hubSelectorHighlight.hotmHighlight, - value -> config.hubSelectorHighlight.hotmHighlight = value + defaults.hubSelectorHighlight.hotmHighlight, + () -> config.hubSelectorHighlight.hotmHighlight, + value -> config.hubSelectorHighlight.hotmHighlight = value ) .build(); @@ -285,9 +278,9 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .description(keyD("menuHighlights.hotfHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.hotfHighlight, - () -> config.hubSelectorHighlight.hotfHighlight, - value -> config.hubSelectorHighlight.hotfHighlight = value + defaults.hubSelectorHighlight.hotfHighlight, + () -> config.hubSelectorHighlight.hotfHighlight, + value -> config.hubSelectorHighlight.hotfHighlight = value ) .build(); @@ -296,19 +289,20 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .description(keyD("menuHighlights.widgetHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.widgetHighlight, - () -> config.hubSelectorHighlight.widgetHighlight, - value -> config.hubSelectorHighlight.widgetHighlight = value + defaults.hubSelectorHighlight.widgetHighlight, + () -> config.hubSelectorHighlight.widgetHighlight, + value -> config.hubSelectorHighlight.widgetHighlight = value ) .build(); + var sblevelHighlight = Option.createBuilder() .name(key("menuHighlights.sblevelHighlight")) .description(keyD("menuHighlights.sblevelHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.sblevelHighlight, - () -> config.hubSelectorHighlight.sblevelHighlight, - value -> config.hubSelectorHighlight.sblevelHighlight = value + defaults.hubSelectorHighlight.sblevelHighlight, + () -> config.hubSelectorHighlight.sblevelHighlight, + value -> config.hubSelectorHighlight.sblevelHighlight = value ) .build(); @@ -317,34 +311,34 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .description(keyD("menuHighlights.unclaimedCommissionHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.unclaimedCommissionHighlight, - () -> config.hubSelectorHighlight.unclaimedCommissionHighlight, - value -> config.hubSelectorHighlight.unclaimedCommissionHighlight = value + defaults.hubSelectorHighlight.unclaimedCommissionHighlight, + () -> config.hubSelectorHighlight.unclaimedCommissionHighlight, + value -> config.hubSelectorHighlight.unclaimedCommissionHighlight = value ) .build(); + var unclaimedContestHighlight = Option.createBuilder() .name(key("menuHighlights.unclaimedContestHighlight")) .description(keyD("menuHighlights.unclaimedContestHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.unclaimedContestHighlight, - () -> config.hubSelectorHighlight.unclaimedContestHighlight, - value -> config.hubSelectorHighlight.unclaimedContestHighlight = value + defaults.hubSelectorHighlight.unclaimedContestHighlight, + () -> config.hubSelectorHighlight.unclaimedContestHighlight, + value -> config.hubSelectorHighlight.unclaimedContestHighlight = value ) .build(); + var toggleEffectHighlight = Option.createBuilder() .name(key("menuHighlights.toggleEffectHighlight")) .description(keyD("menuHighlights.toggleEffectHighlight")) .controller(SBTConfig::generateBooleanController) .binding( - defaults.hubSelectorHighlight.toggleEffectHighlight, - () -> config.hubSelectorHighlight.toggleEffectHighlight, - value -> config.hubSelectorHighlight.toggleEffectHighlight = value + defaults.hubSelectorHighlight.toggleEffectHighlight, + () -> config.hubSelectorHighlight.toggleEffectHighlight, + value -> config.hubSelectorHighlight.toggleEffectHighlight = value ) .build(); - - return OptionGroup.createBuilder() .name(key("menuHighlights")) .description(keyD("menuHighlights")) diff --git a/src/main/java/wtf/cheeze/sbt/features/overlay/MinionExp.java b/src/main/java/wtf/cheeze/sbt/features/overlay/MinionExp.java index 6ad388d..3491542 100644 --- a/src/main/java/wtf/cheeze/sbt/features/overlay/MinionExp.java +++ b/src/main/java/wtf/cheeze/sbt/features/overlay/MinionExp.java @@ -22,14 +22,14 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.world.inventory.Slot; +import net.minecraft.network.chat.Component; import org.intellij.lang.annotations.Language; import org.lwjgl.glfw.GLFW; import wtf.cheeze.sbt.SkyblockTweaks; @@ -46,7 +46,7 @@ import wtf.cheeze.sbt.utils.enums.Skill; import wtf.cheeze.sbt.utils.errors.ErrorHandler; import wtf.cheeze.sbt.utils.errors.ErrorLevel; -import wtf.cheeze.sbt.utils.injected.SBTHandledScreen; +import wtf.cheeze.sbt.utils.injected.SBTAbstractContainerScreen; import wtf.cheeze.sbt.utils.render.Colors; import wtf.cheeze.sbt.utils.render.Popup; import wtf.cheeze.sbt.utils.render.RenderUtils; @@ -67,8 +67,8 @@ public class MinionExp { public static void registerEvents() { ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - if (screen instanceof HandledScreen handledScreen && handledScreen.getTitle().getString().matches(MINION_EXP_SCREEN_REGEX) && SBTConfig.get().minionExp.enabled && !KillSwitch.shouldKill(FEATURE_ID)) { - ((SBTHandledScreen)handledScreen).sbt$setPopup(new MinionExpPopup(handledScreen)); + if (screen instanceof AbstractContainerScreen handledScreen && handledScreen.getTitle().getString().matches(MINION_EXP_SCREEN_REGEX) && SBTConfig.get().minionExp.enabled && !KillSwitch.shouldKill(FEATURE_ID)) { + ((SBTAbstractContainerScreen)handledScreen).sbt$setPopup(new MinionExpPopup(handledScreen)); } }); } @@ -78,24 +78,24 @@ public static class MinionExpPopup implements Popup { private static final int CHEST_LAST_SLOT = 27; private final int x; private final int y; - private final HandledScreen screen; + private final AbstractContainerScreen screen; private final boolean isChest; - private final List children; + private final List children; - public MinionExpPopup(HandledScreen screen) { - this.x = SBTConfig.get().minionExp.side.positionPopup(screen.x); - this.y = screen.y; + public MinionExpPopup(AbstractContainerScreen screen) { + this.x = SBTConfig.get().minionExp.side.positionPopup(screen.leftPos); + this.y = screen.topPos; this.screen = screen; this.isChest = screen.getTitle().getString().equals("Minion Chest"); - var textWidget = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, x + 10, y + 95, 60, 15, Text.empty()); - textWidget.setTextPredicate(Predicates.INT); + var textWidget = new EditBox(Minecraft.getInstance().font, x + 10, y + 95, 60, 15, Component.empty()); + textWidget.setFilter(Predicates.INT); textWidget.setMaxLength(4); - textWidget.setText(contents); + textWidget.setValue(contents); this.children = List.of(textWidget); - screen.drawables.add(this); - screen.addDrawableChild(textWidget); + screen.renderables.add(this); + screen.addRenderableWidget(textWidget); } @@ -111,7 +111,7 @@ public int y() { } @Override - public List childrenList() { + public List childrenList() { return children; } @@ -123,24 +123,24 @@ public Screen screen() { //TODO: Switch to text widgets @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { boolean shadow = SBTConfig.get().minionExp.shadowText; try { - Popup.super.renderBackground(context); - Popup.super.drawSBTFooter(context, shadow); - RenderUtils.drawCenteredText(context, TextUtils.withBold("Skill EXP"), x + WIDTH / 2, y + 5, Colors.WHITE, shadow); - RenderUtils.drawCenteredText(context, Text.literal("☯ Wisdom"), x + WIDTH / 2, y + 85, Colors.CYAN, shadow); + Popup.super.renderBackground(guiGraphics); + Popup.super.drawSBTFooter(guiGraphics, shadow); + RenderUtils.drawCenteredText(guiGraphics, TextUtils.withBold("Skill EXP"), x + WIDTH / 2, y + 5, Colors.WHITE, shadow); + RenderUtils.drawCenteredText(guiGraphics, Component.literal("☯ Wisdom"), x + WIDTH / 2, y + 85, Colors.CYAN, shadow); var renderY = y + 20; var minionExp = getMinionExp(); - if (this.children.getFirst().getText().equals("____")) { + if (this.children.getFirst().getValue().equals("____")) { var primarySkill = getPrimarySkill(minionExp.keySet()); - this.children.getFirst().setText(PersistentData.get().currentProfile().skillWisdom.getOrDefault(primarySkill, 0) + ""); + this.children.getFirst().setValue(PersistentData.get().currentProfile().skillWisdom.getOrDefault(primarySkill, 0) + ""); } for (var entry : minionExp.entrySet()) { - RenderUtils.drawCenteredText(context, Text.literal(entry.getKey().getName() + ":"), x + WIDTH / 2, renderY, Colors.CYAN, shadow); + RenderUtils.drawCenteredText(guiGraphics, Component.literal(entry.getKey().getName() + ":"), x + WIDTH / 2, renderY, Colors.CYAN, shadow); var exp = entry.getValue(); - RenderUtils.drawCenteredText(context, Text.literal(NumberUtils.addKOrM((int) (exp * getMult()), ",") + " XP"), x + WIDTH / 2, renderY + 10, Colors.WHITE, shadow); + RenderUtils.drawCenteredText(guiGraphics, Component.literal(NumberUtils.addKOrM((int) (exp * getMult()), ",") + " XP"), x + WIDTH / 2, renderY + 10, Colors.WHITE, shadow); renderY += 30; } } catch (Exception e) { @@ -164,7 +164,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { this.children.getFirst().setFocused(false); return true; } - if (keyCode == MinecraftClient.getInstance().options.inventoryKey.boundKey.getCode()) { + if (keyCode == Minecraft.getInstance().options.keyInventory.key.getValue()) { return true; // Prevents closing the popup when pressing the inventory key while typing in the text field } } @@ -172,19 +172,19 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } private List getRelevantSlots() { - return isChest ? screen.getScreenHandler().slots.stream().filter(slot -> slot.id < CHEST_LAST_SLOT).toList() : Arrays.stream(MINION_SLOTS).mapToObj(slotId -> screen.getScreenHandler().slots.get(slotId)).toList(); + return isChest ? screen.getMenu().slots.stream().filter(slot -> slot.index < CHEST_LAST_SLOT).toList() : Arrays.stream(MINION_SLOTS).mapToObj(slotId -> screen.getMenu().slots.get(slotId)).toList(); } private Map getMinionExp() { var exp = Constants.minions().minionExp(); var map = new EnumMap(Skill.class); for (var slot: getRelevantSlots()) { - var id = ItemUtils.getSkyblockId(slot.getStack()); + var id = ItemUtils.getSkyblockId(slot.getItem()); if (id.isEmpty()) continue; var entry = exp.get(id); if (entry == null) continue; map.putIfAbsent(entry.skill(), 0d); - var xpFromThisStack = entry.exp() * slot.getStack().getCount() * getMult(); + var xpFromThisStack = entry.exp() * slot.getItem().getCount() * getMult(); map.put(entry.skill(), map.get(entry.skill()) + xpFromThisStack); SkyblockTweaks.LOGGER.debug("Adding {} XP to {} from {}", xpFromThisStack, entry.skill(), id); } @@ -192,7 +192,7 @@ private Map getMinionExp() { } private float getMult() { - var text = this.children.getFirst().getText(); + var text = this.children.getFirst().getValue(); contents = text; return text.isEmpty() || text.equals("____") ? 1f : 1f + Float.parseFloat(text) / 100f; } diff --git a/src/main/java/wtf/cheeze/sbt/features/overlay/ReforgeOverlay.java b/src/main/java/wtf/cheeze/sbt/features/overlay/ReforgeOverlay.java index 4a5e7f5..70b3a1a 100644 --- a/src/main/java/wtf/cheeze/sbt/features/overlay/ReforgeOverlay.java +++ b/src/main/java/wtf/cheeze/sbt/features/overlay/ReforgeOverlay.java @@ -22,14 +22,15 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.network.chat.Component; import org.lwjgl.glfw.GLFW; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -38,7 +39,7 @@ import wtf.cheeze.sbt.utils.KillSwitch; import wtf.cheeze.sbt.utils.constants.loader.Constants; import wtf.cheeze.sbt.utils.enums.Side; -import wtf.cheeze.sbt.utils.injected.SBTHandledScreen; +import wtf.cheeze.sbt.utils.injected.SBTAbstractContainerScreen; import wtf.cheeze.sbt.utils.render.Colors; import wtf.cheeze.sbt.utils.render.Popup; import wtf.cheeze.sbt.utils.render.RenderUtils; @@ -50,81 +51,70 @@ //TODO: make this work in the hex public class ReforgeOverlay { - private static final int REFORGE_ITEM_SLOT = 13; private static final int REFORGE_BUTTON_SLOT = 22; - private static final float Z_TRANSLATE = 300; private static final int X_LABEL_OFFSET = 20 ; private static final String SCREEN_TITLE = "Reforge Item"; private static final String FILTER_FEATURE_ID = "reforge_filters"; - private static final Text QUESTION_MARK = TextUtils.withUnderlined(TextUtils.withBold("?")).withColor(Colors.GRAY); - private static final Text MATCHES_TEXT = TextUtils.withColor("Matches ", Colors.CYAN); - private static final Text EXCLUSIONS_TEXT = TextUtils.withColor("Exclusions ", Colors.CYAN); + private static final Component QUESTION_MARK = TextUtils.withUnderlined(TextUtils.withBold("?")).withColor(Colors.GRAY); + private static final Component MATCHES_TEXT = TextUtils.withColor("Matches ", Colors.CYAN); + private static final Component EXCLUSIONS_TEXT = TextUtils.withColor("Exclusions ", Colors.CYAN); - private static final List MATCH_HELP_LINES = Stream.of( + private static final List MATCH_HELP_LINES = Stream.of( "Enter a comma seperated list of", "reforges to match. You will be", "prevented from accidentally", "re-rolling any reforge which", "contains one of the substrings." - ).map(Text::of).toList(); + ).map(Component::nullToEmpty).toList(); - private static final List EXLCUSION_HELP_LINES = Stream.of( + private static final List EXLCUSION_HELP_LINES = Stream.of( "Enter a comma seperated list of", "reforges to exclude. Even if", "it matches on of the above strings", "a reforge will not be considered a", "match if it contains any of the", "exclusion substrings below" - ).map(Text::of).toList(); - + ).map(Component::nullToEmpty).toList(); public static void registerEvents() { DrawSlotEvents.BEFORE_ITEM.register((screenTitle, context, slot) -> { if (!SBTConfig.get().reforgeOverlay.nameTooltip) return; if (!screenTitle.getString().equals(SCREEN_TITLE)) return; - if (slot.id != REFORGE_ITEM_SLOT || slot.getStack().isEmpty()) return; - var reforge = ItemUtils.getReforge(slot.getStack()); + if (slot.index != REFORGE_ITEM_SLOT || slot.getItem().isEmpty()) return; + var reforge = ItemUtils.getReforge(slot.getItem()); if (reforge.isEmpty()) return; var text = TextUtils.withColor(Constants.reforges().specialModifiers().getOrDefault(reforge, TextUtils.firstLetterUppercase(reforge.toLowerCase())), Colors.YELLOW); var x = slot.x - X_LABEL_OFFSET - RenderUtils.getStringWidth(text); - RenderUtils.drawWithZ(context, Z_TRANSLATE, () -> RenderUtils.drawNonBlockingTooltip(context, text, x, slot.y + 16)); + RenderUtils.drawNonBlockingTooltip(context, text, x, slot.y + 16); }); ScreenEvents.AFTER_INIT.register((client, screen, width, height) -> { - if (screen instanceof HandledScreen handledScreen && handledScreen.getTitle().getString().equals(SCREEN_TITLE) && SBTConfig.get().reforgeOverlay.filterOverlay && !KillSwitch.shouldKill(FILTER_FEATURE_ID)) { - ((SBTHandledScreen)handledScreen).sbt$setPopup(new FilterOverlayPopup(handledScreen)); + if (screen instanceof AbstractContainerScreen handledScreen && handledScreen.getTitle().getString().equals(SCREEN_TITLE) && SBTConfig.get().reforgeOverlay.filterOverlay && !KillSwitch.shouldKill(FILTER_FEATURE_ID)) { + ((SBTAbstractContainerScreen)handledScreen).sbt$setPopup(new FilterOverlayPopup(handledScreen)); } }); - } - - - public static class FilterOverlayPopup implements Popup { - - - - private final HandledScreen screen; + private final AbstractContainerScreen screen; private final int x; private final int y; - private final Text matchLabel; - private final Text exclusionLabel; + private final Component matchLabel; + private final Component exclusionLabel; - private final TextFieldWidget matchWidget; - private final TextFieldWidget exclusionWidget; + private final EditBox matchWidget; + private final EditBox exclusionWidget; - public FilterOverlayPopup(HandledScreen screen) { - this.x = SBTConfig.get().reforgeOverlay.filterOverlaySide.positionPopup(screen.x); - this.y = screen.y; + public FilterOverlayPopup(AbstractContainerScreen screen) { + this.x = SBTConfig.get().reforgeOverlay.filterOverlaySide.positionPopup(screen.leftPos); + this.y = screen.topPos; this.screen = screen; - screen.drawables.add(this); - + screen.renderables.add(this); this.matchLabel = TextUtils.join( MATCHES_TEXT, @@ -136,22 +126,19 @@ public FilterOverlayPopup(HandledScreen screen) { ); - this.matchWidget = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, x + 10, y + 30, 60, 15, Text.empty()); + this.matchWidget = new EditBox(Minecraft.getInstance().font, x + 10, y + 30, 60, 15, Component.empty()); this.matchWidget.setMaxLength(70); - this.matchWidget.setPlaceholder(TextUtils.withColor("e.g. \"a, b\"", Colors.GRAY)); - this.exclusionWidget = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, x + 10, y + 60, 60, 15, Text.empty()); + this.matchWidget.setHint(TextUtils.withColor("e.g. \"a, b\"", Colors.GRAY)); + this.exclusionWidget = new EditBox(Minecraft.getInstance().font, x + 10, y + 60, 60, 15, Component.empty()); this.exclusionWidget.setMaxLength(70); - this.exclusionWidget.setPlaceholder(TextUtils.withColor("e.g. \"c, d\"", Colors.GRAY)); - - - screen.addDrawableChild(this.matchWidget); - screen.addDrawableChild(this.exclusionWidget); + this.exclusionWidget.setHint(TextUtils.withColor("e.g. \"c, d\"", Colors.GRAY)); + screen.addRenderableWidget(this.matchWidget); + screen.addRenderableWidget(this.exclusionWidget); } - @Override - public int x() { return x; }; + public int x() { return x; } @Override public int y() { return y;} @@ -160,7 +147,7 @@ public FilterOverlayPopup(HandledScreen screen) { public Screen screen() { return screen;} @Override - public List childrenList() { + public List childrenList() { return List.of(this.matchWidget, this.exclusionWidget); } @@ -193,10 +180,10 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } var shouldStop = shouldStopReforge(); - var slot = screen.getSlotAt(mouseX, mouseY); - var id = slot == null ? -1 : slot.id; + var slot = screen.getHoveredSlot(mouseX, mouseY); + var id = slot == null ? -1 : slot.index; if (id == REFORGE_BUTTON_SLOT && shouldStop) { - MinecraftClient.getInstance().player.playSound(SoundEvents.BLOCK_BELL_USE); + Minecraft.getInstance().player.makeSound(SoundEvents.BELL_BLOCK); return true; } @@ -206,15 +193,15 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { boolean escape = keyCode == GLFW.GLFW_KEY_ESCAPE; - boolean inv = keyCode == MinecraftClient.getInstance().options.inventoryKey.boundKey.getCode(); + boolean inv = keyCode == Minecraft.getInstance().options.keyInventory.key.getValue(); if (matchWidget.isFocused()) { if (escape) { matchWidget.setFocused(false); return true; } - if (!inv) return matchWidget.keyPressed(keyCode, scanCode, modifiers); + if (!inv) return matchWidget.keyPressed(new KeyEvent(keyCode, scanCode, modifiers)); else { - matchWidget.keyPressed(keyCode, scanCode, modifiers); + matchWidget.keyPressed(new KeyEvent(keyCode, scanCode, modifiers)); return true; } } @@ -223,9 +210,9 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { exclusionWidget.setFocused(false); return true; } - if (!inv) return exclusionWidget.keyPressed(keyCode, scanCode, modifiers); + if (!inv) return exclusionWidget.keyPressed(new KeyEvent(keyCode, scanCode, modifiers)); else { - exclusionWidget.keyPressed(keyCode, scanCode, modifiers); + exclusionWidget.keyPressed(new KeyEvent(keyCode, scanCode, modifiers)); return true; } } @@ -234,19 +221,19 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { private boolean shouldStopReforge() { boolean tentativeBlock = false; - for (var unformatted: matchWidget.getText().split(",")) { + for (var unformatted: matchWidget.getValue().split(",")) { var formatted = unformatted.trim().toLowerCase(); if (formatted.isEmpty()) continue; - if (ItemUtils.getReforge(screen.getScreenHandler().slots.get(REFORGE_ITEM_SLOT).getStack()).toLowerCase().contains(formatted)) { + if (ItemUtils.getReforge(screen.getMenu().slots.get(REFORGE_ITEM_SLOT).getItem()).toLowerCase().contains(formatted)) { tentativeBlock = true; break; } } if (!tentativeBlock) return false; - for (var unformatted: exclusionWidget.getText().split(",")) { + for (var unformatted: exclusionWidget.getValue().split(",")) { var formatted = unformatted.trim().toLowerCase(); if (formatted.isEmpty()) continue; - if (ItemUtils.getReforge(screen.getScreenHandler().slots.get(REFORGE_ITEM_SLOT).getStack()).toLowerCase().contains(formatted)) { + if (ItemUtils.getReforge(screen.getMenu().slots.get(REFORGE_ITEM_SLOT).getItem()).toLowerCase().contains(formatted)) { return false; // if it matches an exclusion, we can reforge } } @@ -254,23 +241,21 @@ private boolean shouldStopReforge() { } @Override - public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float deltaTicks) { boolean shadow = SBTConfig.get().reforgeOverlay.filterOverlayShadow; - Popup.super.renderBackground(context); - Popup.super.drawSBTFooter(context, shadow); - RenderUtils.drawCenteredText(context, TextUtils.withBold("Filters"), x + WIDTH / 2, y + 5, Colors.WHITE, shadow); - RenderUtils.drawCenteredText(context, matchLabel, x + WIDTH / 2, y + 20, Colors.WHITE, shadow); - RenderUtils.drawCenteredText(context, exclusionLabel, x + WIDTH / 2, y + 50, Colors.WHITE, shadow); + Popup.super.renderBackground(guiGraphics); + Popup.super.drawSBTFooter(guiGraphics, shadow); + RenderUtils.drawCenteredText(guiGraphics, TextUtils.withBold("Filters"), x + WIDTH / 2, y + 5, Colors.WHITE, shadow); + RenderUtils.drawCenteredText(guiGraphics, matchLabel, x + WIDTH / 2, y + 20, Colors.WHITE, shadow); + RenderUtils.drawCenteredText(guiGraphics, exclusionLabel, x + WIDTH / 2, y + 50, Colors.WHITE, shadow); switch (whichHovering(mouseX, mouseY)) { - case 1 -> context.drawTooltip(MinecraftClient.getInstance().textRenderer, MATCH_HELP_LINES, mouseX, mouseY); - case 2 -> context.drawTooltip(MinecraftClient.getInstance().textRenderer, EXLCUSION_HELP_LINES, mouseX, mouseY); + case 1 -> guiGraphics.setComponentTooltipForNextFrame(Minecraft.getInstance().font, MATCH_HELP_LINES, mouseX, mouseY); + case 2 -> guiGraphics.setComponentTooltipForNextFrame(Minecraft.getInstance().font, EXLCUSION_HELP_LINES, mouseX, mouseY); } } } - public static class Config { - @SerialEntry public boolean filterOverlay = true; @@ -283,9 +268,6 @@ public static class Config { @SerialEntry public boolean nameTooltip = true; - - - public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { var overlay = Option.createBuilder() .name(General.key("reforgeOverlay.filterOverlay")) @@ -341,8 +323,6 @@ public static OptionGroup getGroup(ConfigImpl defaults, ConfigImpl config) { .option(shadow) .option(toolTip) .build(); - - } } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/HUD.java b/src/main/java/wtf/cheeze/sbt/hud/HUD.java index 6c0e744..9c9bea0 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/HUD.java +++ b/src/main/java/wtf/cheeze/sbt/hud/HUD.java @@ -19,9 +19,9 @@ package wtf.cheeze.sbt.hud; import dev.isxander.yacl3.api.OptionDescription; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.hud.bounds.Bounds; import wtf.cheeze.sbt.hud.bounds.BoundsRelative; @@ -34,8 +34,7 @@ * TODO: Figure out narration */ public abstract class HUD { - - public static final MinecraftClient client = MinecraftClient.getInstance(); + public static final Minecraft client = Minecraft.getInstance(); public HudInformation INFO; @@ -56,23 +55,23 @@ public abstract class HUD { public boolean shouldRender(boolean fromHudScreen) { // We let the HUD screen handle rendering when it is open - if (!fromHudScreen && MinecraftClient.getInstance().currentScreen instanceof HudScreen) return false; - return fromHudScreen || !MinecraftClient.getInstance().options.hudHidden; + if (!fromHudScreen && Minecraft.getInstance().screen instanceof HudScreen) return false; + return fromHudScreen || !Minecraft.getInstance().options.hideGui; } /** * Draws the HUD to the screen - * @param context the DrawContext + * @param guiGraphics the DrawContext * @param fromHudScreen whether the HUD is being drawn in the context of the edit screen * @param hovered whether the HUD is hovered while being drawn in the context of the edit screen */ - public abstract void render(DrawContext context, boolean fromHudScreen, boolean hovered); + public abstract void render(GuiGraphics guiGraphics, boolean fromHudScreen, boolean hovered); /** * Calls the render method with hovered set to false */ - public void render(DrawContext context, boolean fromHudScreen) { - render(context, fromHudScreen, false); + public void render(GuiGraphics guiGraphics, boolean fromHudScreen) { + render(guiGraphics, fromHudScreen, false); } @@ -98,13 +97,14 @@ public void updateScale(float scale) { INFO.setScale.accept(scale); } - public void drawBackground(DrawContext context, int color, boolean hasOutline) { + public void drawBackground(GuiGraphics guiGraphics, int color, boolean hasOutline) { var bounds = getCurrentBounds(); int i = (int) (1 * bounds.scale); - context.fill(bounds.x - i, bounds.y - i, (int) (bounds.x + bounds.width + i), (int) (bounds.y + bounds.height + i - 1), color); + guiGraphics.fill(bounds.x - i, bounds.y - i, (int) (bounds.x + bounds.width + i), (int) (bounds.y + bounds.height + i - 1), color); } - public void drawBackground(DrawContext context, int color) { - drawBackground(context, color, false); + + public void drawBackground(GuiGraphics guiGraphics, int color) { + drawBackground(guiGraphics, color, false); } public static final float MIN_SCALE = 0.1f; @@ -115,31 +115,34 @@ public void drawBackground(DrawContext context, int color) { public static final int BACKGROUND_HOVERED = -1761607681; public static int getActualX(float x) { - return (int) (x * MinecraftClient.getInstance().getWindow().getScaledWidth()); + return (int) (x * Minecraft.getInstance().getWindow().getGuiScaledWidth()); } + public static int getActualY(float y) { - return (int) (y * MinecraftClient.getInstance().getWindow().getScaledHeight()); + return (int) (y * Minecraft.getInstance().getWindow().getGuiScaledHeight()); } + public static float getRelativeX(double x) { - return (float) (x / MinecraftClient.getInstance().getWindow().getScaledWidth()); + return (float) (x / Minecraft.getInstance().getWindow().getGuiScaledWidth()); } + public static float getRelativeX(int x) { - return (float) (x / MinecraftClient.getInstance().getWindow().getScaledWidth()); + return (float) (x / Minecraft.getInstance().getWindow().getGuiScaledWidth()); } + public static float getRelativeY(double y) { - return (float) (y / MinecraftClient.getInstance().getWindow().getScaledHeight()); + return (float) (y / Minecraft.getInstance().getWindow().getGuiScaledHeight()); } + public static float getRelativeY(int y) { - return (float) (y / MinecraftClient.getInstance().getWindow().getScaledHeight()); + return (float) (y / Minecraft.getInstance().getWindow().getGuiScaledHeight()); } private static final String BASE_KEY = "sbt.config.huds."; - public static Text key(String key) { - return Text.translatable(BASE_KEY + key); + public static Component key(String key) { + return Component.translatable(BASE_KEY + key); } public static OptionDescription keyD(String key) { - return OptionDescription.of(Text.translatable(BASE_KEY + key + ".desc")); + return OptionDescription.of(Component.translatable(BASE_KEY + key + ".desc")); } - - } diff --git a/src/main/java/wtf/cheeze/sbt/hud/bases/AbstractTickerHud.java b/src/main/java/wtf/cheeze/sbt/hud/bases/AbstractTickerHud.java index 37c420a..7c35119 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/bases/AbstractTickerHud.java +++ b/src/main/java/wtf/cheeze/sbt/hud/bases/AbstractTickerHud.java @@ -18,8 +18,8 @@ */ package wtf.cheeze.sbt.hud.bases; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.features.huds.TickerHud; import wtf.cheeze.sbt.hud.bounds.Bounds; @@ -31,8 +31,8 @@ * The abstract representation of the ticker HUD, for the implementation, see {@link TickerHud} */ public abstract class AbstractTickerHud extends HUD { - private static final Identifier FULL = Identifier.of("skyblocktweaks", "tickers/full.png"); - private static final Identifier BLANK = Identifier.of("skyblocktweaks", "tickers/blank.png"); + private static final ResourceLocation FULL = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "tickers/full.png"); + private static final ResourceLocation BLANK = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "tickers/blank.png"); private static final int DIMENSION = 9; /** @@ -44,30 +44,30 @@ public abstract class AbstractTickerHud extends HUD { public abstract int getUsable(boolean fromHudScreen); @Override - public void render(DrawContext context, boolean fromHudScreen, boolean hovered) { + public void render(GuiGraphics guiGraphics, boolean fromHudScreen, boolean hovered) { if (!shouldRender(fromHudScreen)) return; var bounds = getCurrentBounds(); if (fromHudScreen) { - drawBackground(context, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); + drawBackground(guiGraphics, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); fhs = true; } else { fhs = false; } if (bounds.scale != 1.0f) { - RenderUtils.beginScale(context, bounds.scale); + RenderUtils.beginScale(guiGraphics, bounds.scale); } - var x2 = drawTickers(context, getUsable(fromHudScreen), bounds.x, bounds.y, bounds.scale, true); - drawTickers(context, getMax(fromHudScreen) - getUsable(fromHudScreen), x2, bounds.y, bounds.scale, false); + var x2 = drawTickers(guiGraphics, getUsable(fromHudScreen), bounds.x, bounds.y, bounds.scale, true); + drawTickers(guiGraphics, getMax(fromHudScreen) - getUsable(fromHudScreen), x2, bounds.y, bounds.scale, false); if (bounds.scale != 1.0f) { - RenderUtils.popMatrix(context); + RenderUtils.popMatrix(guiGraphics); } } - private static float drawTickers(DrawContext context, int number, float x, int y, float scale, boolean filled) { + private static float drawTickers(GuiGraphics guiGraphics, int number, float x, int y, float scale, boolean filled) { float drawX = x; for (int i = 0; i < number; i++) { - RenderUtils.drawTexture(context, filled ? FULL : BLANK, (int) (drawX / scale), (int) (y / scale), DIMENSION, DIMENSION, DIMENSION , DIMENSION); + RenderUtils.drawTexture(guiGraphics, filled ? FULL : BLANK, (int) (drawX / scale), (int) (y / scale), DIMENSION, DIMENSION, DIMENSION , DIMENSION); drawX = (2 + drawX + (DIMENSION * scale)); } return drawX; @@ -78,7 +78,7 @@ private int getWidth() { } private int getRelativeWidth() { - return getWidth() / client.getWindow().getWidth(); + return getWidth() / client.getWindow().getScreenWidth(); } @Override diff --git a/src/main/java/wtf/cheeze/sbt/hud/bases/BarHud.java b/src/main/java/wtf/cheeze/sbt/hud/bases/BarHud.java index 8fab596..181d380 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/bases/BarHud.java +++ b/src/main/java/wtf/cheeze/sbt/hud/bases/BarHud.java @@ -18,11 +18,8 @@ */ package wtf.cheeze.sbt.hud.bases; -//? if > 1.21.5 -/*import net.minecraft.client.gl.RenderPipelines;*/ -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.hud.bounds.Bounds; import wtf.cheeze.sbt.hud.bounds.BoundsRelative; @@ -33,8 +30,8 @@ * A HUD that displays a bar, code liberally inspired by SBA, but way simpler thanks to modern mc, bar textures taken directly from SBA */ public abstract class BarHud extends HUD { - public static final Identifier UNFILLED = Identifier.of("skyblocktweaks", "bars/unfilled.png"); - public static final Identifier FILLED = Identifier.of("skyblocktweaks", "bars/filled.png"); + public static final ResourceLocation UNFILLED = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "bars/unfilled.png"); + public static final ResourceLocation FILLED = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "bars/filled.png"); public abstract int getColor(); public abstract float getFill(); @@ -43,22 +40,22 @@ public abstract class BarHud extends HUD { public static final int BAR_HEIGHT = 5; @Override - public void render(DrawContext context, boolean fromHudScreen, boolean hovered) { + public void render(GuiGraphics guiGraphics, boolean fromHudScreen, boolean hovered) { if (!shouldRender(fromHudScreen)) return; var bounds = getCurrentBounds(); if (fromHudScreen) { - drawBackground(context, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); + drawBackground(guiGraphics, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); } var color = getColor(); if (bounds.scale == 1.0f) { - RenderUtils.drawBar(context, UNFILLED, bounds.x, bounds.y, BAR_WIDTH, color); - RenderUtils.drawBar(context, FILLED, bounds.x, bounds.y, calculateFill(getFill()), color); + RenderUtils.drawBar(guiGraphics, UNFILLED, bounds.x, bounds.y, BAR_WIDTH, color); + RenderUtils.drawBar(guiGraphics, FILLED, bounds.x, bounds.y, calculateFill(getFill()), color); } else { - RenderUtils.beginScale(context, bounds.scale); - RenderUtils.drawBar(context, UNFILLED, (int) (bounds.x / bounds.scale), (int) (bounds.y / bounds.scale), BAR_WIDTH, color); - RenderUtils.drawBar(context, FILLED, (int) (bounds.x / bounds.scale), (int) (bounds.y / bounds.scale), calculateFill(getFill()), color); - RenderUtils.popMatrix(context); + RenderUtils.beginScale(guiGraphics, bounds.scale); + RenderUtils.drawBar(guiGraphics, UNFILLED, (int) (bounds.x / bounds.scale), (int) (bounds.y / bounds.scale), BAR_WIDTH, color); + RenderUtils.drawBar(guiGraphics, FILLED, (int) (bounds.x / bounds.scale), (int) (bounds.y / bounds.scale), calculateFill(getFill()), color); + RenderUtils.popMatrix(guiGraphics); } } @@ -97,12 +94,11 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) } private static int calculateFill(float percent) { if (percent >= 1.0f) return BAR_WIDTH; - var i = (int) (percent * BAR_WIDTH); - return i; + return (int) (percent * BAR_WIDTH); } private static float getRelativeBarWidth(){ - return BAR_WIDTH / client.getWindow().getWidth(); + return (float) BAR_WIDTH / client.getWindow().getScreenWidth(); } } \ No newline at end of file diff --git a/src/main/java/wtf/cheeze/sbt/hud/bases/MultilineTextHud.java b/src/main/java/wtf/cheeze/sbt/hud/bases/MultilineTextHud.java index 120c1a5..4775376 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/bases/MultilineTextHud.java +++ b/src/main/java/wtf/cheeze/sbt/hud/bases/MultilineTextHud.java @@ -1,7 +1,7 @@ package wtf.cheeze.sbt.hud.bases; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.hud.bounds.Bounds; import wtf.cheeze.sbt.hud.bounds.BoundsRelative; @@ -10,8 +10,7 @@ import wtf.cheeze.sbt.utils.render.RenderUtils; public abstract class MultilineTextHud extends HUD { - - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final Minecraft client = Minecraft.getInstance(); protected MultilineTextHud() { this.supportsNonLeftAnchors = false; @@ -42,26 +41,26 @@ private int getLineNo(){ var scale = (float) INFO.getScale.get(); var w = getLongestLineWidth(); var h = getLineNo(); - return new Bounds(getActualX(INFO.getX.get()), getActualY(INFO.getY.get()), w * scale, h * client.textRenderer.fontHeight * scale, scale); + return new Bounds(getActualX(INFO.getX.get()), getActualY(INFO.getY.get()), w * scale, h * client.font.lineHeight * scale, scale); } @Override public @NotNull BoundsRelative getCurrentBoundsRelative() { var scale = (float) INFO.getScale.get(); var w = getLongestLineWidth(); var h = getLineNo(); - return new BoundsRelative(INFO.getX.get(), INFO.getY.get(), w * scale, h * client.textRenderer.fontHeight * scale, scale); + return new BoundsRelative(INFO.getX.get(), INFO.getY.get(), w * scale, h * client.font.lineHeight * scale, scale); } @Override - public void render(DrawContext context, boolean fromHudScreen, boolean hovered) { + public void render(GuiGraphics guiGraphics, boolean fromHudScreen, boolean hovered) { if (!shouldRender(fromHudScreen)) return; var bounds = getCurrentBounds(); var lineHeight = (int) (9 * bounds.scale); if (fromHudScreen) { - drawBackground(context, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); + drawBackground(guiGraphics, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); } - RenderUtils.beginScale(context, bounds.scale); + RenderUtils.beginScale(guiGraphics, bounds.scale); // // for(int i = 0; i < lines.length; i++){ // var line = lines[i]; @@ -71,10 +70,10 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) int i = 0; for (var line : lines) { var y = bounds.y + lineHeight * i; - i+=line.render(context, bounds.x, y, bounds.scale); + i+=line.render(guiGraphics, bounds.x, y, bounds.scale); //i+=line.render(context, bounds.x, y, bounds.scale); } - RenderUtils.popMatrix(context); + RenderUtils.popMatrix(guiGraphics); } diff --git a/src/main/java/wtf/cheeze/sbt/hud/bases/SingleLineHybridHud.java b/src/main/java/wtf/cheeze/sbt/hud/bases/SingleLineHybridHud.java index 4735f74..14d6a20 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/bases/SingleLineHybridHud.java +++ b/src/main/java/wtf/cheeze/sbt/hud/bases/SingleLineHybridHud.java @@ -18,7 +18,7 @@ */ package wtf.cheeze.sbt.hud.bases; -import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.hud.HUD; import wtf.cheeze.sbt.hud.bounds.Bounds; @@ -32,27 +32,26 @@ public abstract class SingleLineHybridHud extends HUD { private int width = 0; protected CheezePair[] components; - //TODO: Scale is not perfect here @Override - public void render(DrawContext context, boolean fromHudScreen, boolean hovered) { + public void render(GuiGraphics guiGraphics, boolean fromHudScreen, boolean hovered) { if (!shouldRender(fromHudScreen)) return; var bounds = getCurrentBounds(); if (fromHudScreen) { - drawBackground(context, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); + drawBackground(guiGraphics, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED); } - RenderUtils.beginScale(context, bounds.scale); + RenderUtils.beginScale(guiGraphics, bounds.scale); int renderX = bounds.x; int tallest = 0; for (var pair: components) { var component = pair.key(); - component.render(context, renderX, bounds.y + (int) (pair.val()*bounds.scale), bounds.scale); + component.render(guiGraphics, renderX, bounds.y + (int) (pair.val()*bounds.scale), bounds.scale); renderX += (int) (bounds.scale * component.getWidth()); if (component.getHeight() > tallest) { tallest = component.getHeight(); } } - RenderUtils.popMatrix(context); + RenderUtils.popMatrix(guiGraphics); this.height = (int) (tallest * bounds.scale); this.width = renderX - bounds.x; } @@ -65,10 +64,10 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) return new Bounds(getActualX(INFO.getX.get()), getActualY(INFO.getY.get()), width, height , scale); } case RIGHT -> { - return new Bounds((int) (getActualX(INFO.getX.get()) - width ), getActualY(INFO.getY.get()), width , height , scale); + return new Bounds(getActualX(INFO.getX.get()) - width, getActualY(INFO.getY.get()), width , height , scale); } case CENTER -> { - return new Bounds((int) (getActualX(INFO.getX.get()) - width / 2), getActualY(INFO.getY.get()), width , height , scale); + return new Bounds(getActualX(INFO.getX.get()) - width / 2, getActualY(INFO.getY.get()), width , height , scale); } default -> throw new IllegalStateException("Unexpected value: " + INFO.getAnchorPoint.get()); } @@ -92,9 +91,9 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) } @Override - public void drawBackground(DrawContext context, int color) { + public void drawBackground(GuiGraphics guiGraphics, int color) { var bounds = getCurrentBounds(); int i = (int) (1 * bounds.scale); - context.fill(bounds.x - i, bounds.y - i, (int) (bounds.x + bounds.width + i), (int) (bounds.y + bounds.height + i - 1), color); + guiGraphics.fill(bounds.x - i, bounds.y - i, (int) (bounds.x + bounds.width + i), (int) (bounds.y + bounds.height + i - 1), color); } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/bases/TextHud.java b/src/main/java/wtf/cheeze/sbt/hud/bases/TextHud.java index eb05fa2..dca3e01 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/bases/TextHud.java +++ b/src/main/java/wtf/cheeze/sbt/hud/bases/TextHud.java @@ -18,7 +18,7 @@ */ package wtf.cheeze.sbt.hud.bases; -import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.GuiGraphics; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.hud.utils.DrawMode; import wtf.cheeze.sbt.hud.bounds.Bounds; @@ -30,20 +30,18 @@ public abstract class TextHud extends HUD { //public abstract String getText(); - public SingleHudLine line; - @Override - public void render(DrawContext context, boolean fromHudScreen, boolean hovered) { + public void render(GuiGraphics guiGraphics, boolean fromHudScreen, boolean hovered) { if (!shouldRender(fromHudScreen)) return; var bounds = getCurrentBounds(); if (fromHudScreen) { - drawBackground(context, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED, line.mode.get() == DrawMode.OUTLINE); + drawBackground(guiGraphics, hovered ? BACKGROUND_HOVERED : BACKGROUND_NOT_HOVERED, line.mode.get() == DrawMode.OUTLINE); } - RenderUtils.beginScale(context, bounds.scale); - line.render(context, bounds.x, bounds.y, bounds.scale); - RenderUtils.popMatrix(context); + RenderUtils.beginScale(guiGraphics, bounds.scale); + line.render(guiGraphics, bounds.x, bounds.y, bounds.scale); + RenderUtils.popMatrix(guiGraphics); } public @NotNull Bounds getCurrentBounds() { @@ -54,7 +52,7 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) getActualX(INFO.getX.get()), getActualY(INFO.getY.get()), (RenderUtils.getStringWidth(line.text.get()) + (line.useIcon.get() ? 10: 0)) * scale, - client.textRenderer.fontHeight * scale, + client.font.lineHeight * scale, scale); } case RIGHT -> { @@ -62,7 +60,7 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) (int) (getActualX(INFO.getX.get()) - (RenderUtils.getStringWidth(line.text.get()) + (line.useIcon.get() ? 10: 0)) * scale), getActualY(INFO.getY.get()), (RenderUtils.getStringWidth(line.text.get()) + (line.useIcon.get() ? 10: 0)) * scale, - client.textRenderer.fontHeight * scale, + client.font.lineHeight * scale, scale); } case CENTER -> { @@ -70,7 +68,7 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) (int) (getActualX(INFO.getX.get()) - (RenderUtils.getStringWidth(line.text.get()) + (line.useIcon.get() ? 10: 0)) * scale / 2), getActualY(INFO.getY.get()), (RenderUtils.getStringWidth(line.text.get()) + (line.useIcon.get() ? 10: 0)) * scale, - client.textRenderer.fontHeight * scale, + client.font.lineHeight * scale, scale); } default -> throw new IllegalStateException("Unexpected value: " + INFO.getAnchorPoint.get()); @@ -81,13 +79,13 @@ public void render(DrawContext context, boolean fromHudScreen, boolean hovered) var scale = (float) INFO.getScale.get(); switch (INFO.getAnchorPoint.get()) { case LEFT -> { - return new BoundsRelative(INFO.getX.get(), INFO.getY.get(), RenderUtils.getStringWidth(line.text.get()) * scale, client.textRenderer.fontHeight * scale, scale); + return new BoundsRelative(INFO.getX.get(), INFO.getY.get(), RenderUtils.getStringWidth(line.text.get()) * scale, client.font.lineHeight * scale, scale); } case RIGHT -> { - return new BoundsRelative(INFO.getX.get() - RenderUtils.getRelativeStringWidth(line.text.get()) * scale, INFO.getY.get(), RenderUtils.getStringWidth(line.text.get()) * scale, client.textRenderer.fontHeight * scale, scale); + return new BoundsRelative(INFO.getX.get() - RenderUtils.getRelativeStringWidth(line.text.get()) * scale, INFO.getY.get(), RenderUtils.getStringWidth(line.text.get()) * scale, client.font.lineHeight * scale, scale); } case CENTER -> { - return new BoundsRelative(INFO.getX.get() - RenderUtils.getRelativeStringWidth(line.text.get()) * scale / 2, INFO.getY.get(), RenderUtils.getStringWidth(line.text.get()) * scale, client.textRenderer.fontHeight * scale, scale); + return new BoundsRelative(INFO.getX.get() - RenderUtils.getRelativeStringWidth(line.text.get()) * scale / 2, INFO.getY.get(), RenderUtils.getStringWidth(line.text.get()) * scale, client.font.lineHeight * scale, scale); } default -> throw new IllegalStateException("Unexpected value: " + INFO.getAnchorPoint.get()); } diff --git a/src/main/java/wtf/cheeze/sbt/hud/cache/Cache.java b/src/main/java/wtf/cheeze/sbt/hud/cache/Cache.java index 8d95de9..44c3aee 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/cache/Cache.java +++ b/src/main/java/wtf/cheeze/sbt/hud/cache/Cache.java @@ -54,7 +54,6 @@ public void update() { } } - public Cache(UpdateTiming timing, Supplier supplier, T errorValue) { this.timing = timing; this.errorValue = errorValue; diff --git a/src/main/java/wtf/cheeze/sbt/hud/components/FlexibleHudLine.java b/src/main/java/wtf/cheeze/sbt/hud/components/FlexibleHudLine.java index 5364140..70c1bfa 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/components/FlexibleHudLine.java +++ b/src/main/java/wtf/cheeze/sbt/hud/components/FlexibleHudLine.java @@ -18,8 +18,8 @@ */ package wtf.cheeze.sbt.hud.components; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import wtf.cheeze.sbt.hud.icon.HudIcon; import wtf.cheeze.sbt.hud.cache.Cache; @@ -32,15 +32,12 @@ import java.util.function.Supplier; public class FlexibleHudLine implements HudComponent { - - public Supplier parts; private final UpdateTiming timing; private final Cache partCache; - private int width = 1; private int lines = 1; @@ -58,7 +55,7 @@ public FlexibleHudLine(Supplier parts) { } @Override - public int render(DrawContext context, int x, int y, float scale) { + public int render(GuiGraphics guiGraphics, int x, int y, float scale) { if (timing == UpdateTiming.FRAME || partCache.isDueForUpdate()) { partCache.update(); } @@ -73,9 +70,9 @@ public int render(DrawContext context, int x, int y, float scale) { var w = RenderUtils.getStringWidth(text); if (part.useIcon.get()) { w += 10; - renderLine(context, text, part.icon.get(), x, y, scale, part.mode.get(), part.color.get(), part.outlineColor.get()); + renderLine(guiGraphics, text, part.icon.get(), x, y, scale, part.mode.get(), part.color.get(), part.outlineColor.get()); } else { - renderLine(context, text, x, y, scale, part.mode.get(), part.color.get(), part.outlineColor.get()); + renderLine(guiGraphics, text, x, y, scale, part.mode.get(), part.color.get(), part.outlineColor.get()); } if (w > longest) { longest = w; @@ -89,7 +86,6 @@ public int render(DrawContext context, int x, int y, float scale) { } - @Override public int getWidth() { return width; @@ -101,31 +97,32 @@ public int getlines() { } -// private static void renderLine(DrawContext context, Text text, HudIcon icon, int x, int y, float scale, DrawMode mode, int color) { -// renderLine(context, text, icon, x, y, scale, mode, color, -1); +// private static void renderLine(DrawContext guiGraphics, Text text, HudIcon icon, int x, int y, float scale, DrawMode mode, int color) { +// renderLine(guiGraphics, text, icon, x, y, scale, mode, color, -1); // } -// private static void renderLine(DrawContext context, Text text, int x, int y, float scale, DrawMode mode, int color) { -// renderLine(context, text, x, y, scale, mode, color, -1); +// private static void renderLine(DrawContext guiGraphics, Text text, int x, int y, float scale, DrawMode mode, int color) { +// renderLine(guiGraphics, text, x, y, scale, mode, color, -1); // } - private static void renderLine(DrawContext context, Text text, int x, int y, float scale, DrawMode mode, int color, int outlineColor) { + private static void renderLine(GuiGraphics guiGraphics, Component text, int x, int y, float scale, DrawMode mode, int color, int outlineColor) { switch (mode) { - case PURE -> RenderUtils.drawText(context, text, x, y, color, false, scale, true); - case SHADOW -> RenderUtils.drawText(context, text, x, y, color, true, scale, true); - case OUTLINE -> RenderUtils.drawTextWithOutline(context, text, x, y, color, outlineColor, scale, true); + case PURE -> RenderUtils.drawText(guiGraphics, text, x, y, color, false, scale); + case SHADOW -> RenderUtils.drawText(guiGraphics, text, x, y, color, true, scale); + case OUTLINE -> RenderUtils.drawTextWithOutline(guiGraphics, text, x, y, color, outlineColor, scale); } } - private static void renderLine(DrawContext context, Text text, HudIcon icon, int x, int y, float scale, DrawMode mode, int color, int outlineColor) { - icon.render(context, x, y, scale); + + private static void renderLine(GuiGraphics guiGraphics, Component text, HudIcon icon, int x, int y, float scale, DrawMode mode, int color, int outlineColor) { + icon.render(guiGraphics, x, y, scale); switch (mode) { - case PURE -> RenderUtils.drawText(context, text, x + (int) (10 * scale), y, color, false, scale, true); - case SHADOW -> RenderUtils.drawText(context, text, x + (int) (10 * scale), y, color, true, scale, true); - case OUTLINE -> RenderUtils.drawTextWithOutline(context, text, x + (int) (10 * scale), y, color, outlineColor, scale, true); + case PURE -> RenderUtils.drawText(guiGraphics, text, x + (int) (10 * scale), y, color, false, scale); + case SHADOW -> RenderUtils.drawText(guiGraphics, text, x + (int) (10 * scale), y, color, true, scale); + case OUTLINE -> RenderUtils.drawTextWithOutline(guiGraphics, text, x + (int) (10 * scale), y, color, outlineColor, scale); } } public static class Part { - public final Supplier text; + public final Supplier text; public final Supplier useIcon; @Nullable public Supplier icon; @@ -133,23 +130,23 @@ public static class Part { public final Supplier color; public final Supplier outlineColor; - private final Cache cache; + private final Cache cache; - public Part (Supplier text, Supplier mode, Supplier color, Supplier outlineColor) { + public Part (Supplier text, Supplier mode, Supplier color, Supplier outlineColor) { this(text, mode, color, outlineColor, null, DataUtils.ALWAYS_FALSE, new Cache<>(UpdateTiming.FRAME, text, ERROR)); } - public Part(Supplier text, Supplier mode, Supplier color, Supplier outlineColor, Supplier icon, Supplier useIcon) { + public Part(Supplier text, Supplier mode, Supplier color, Supplier outlineColor, Supplier icon, Supplier useIcon) { this(text, mode, color, outlineColor, icon, useIcon, new Cache<>(UpdateTiming.FRAME, text, ERROR)); } - public Part(Supplier text, Supplier mode, Supplier color, Supplier outlineColor, Cache cache) { + public Part(Supplier text, Supplier mode, Supplier color, Supplier outlineColor, Cache cache) { this(text, mode, color, outlineColor, null, DataUtils.ALWAYS_FALSE, cache); } - public Part(Supplier text, Supplier mode, Supplier color, Supplier outlineColor, Supplier icon, Supplier useIcon, Cache cache) { + public Part(Supplier text, Supplier mode, Supplier color, Supplier outlineColor, Supplier icon, Supplier useIcon, Cache cache) { this.text = text; this.mode = mode; this.color = color; diff --git a/src/main/java/wtf/cheeze/sbt/hud/components/GapComponent.java b/src/main/java/wtf/cheeze/sbt/hud/components/GapComponent.java index 175948c..83a9abd 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/components/GapComponent.java +++ b/src/main/java/wtf/cheeze/sbt/hud/components/GapComponent.java @@ -18,11 +18,9 @@ */ package wtf.cheeze.sbt.hud.components; -import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.GuiGraphics; public class GapComponent implements HudComponent{ - - public static final GapComponent TWO = new GapComponent(2); private final int width; @@ -31,9 +29,8 @@ public GapComponent(int width) { this.width = width; } - @Override - public int render(DrawContext context, int x, int y, float scale) { + public int render(GuiGraphics guiGraphics, int x, int y, float scale) { // This component is used to create a gap in the HUD, so it doesn't need to render anything. return 1; } diff --git a/src/main/java/wtf/cheeze/sbt/hud/components/HudComponent.java b/src/main/java/wtf/cheeze/sbt/hud/components/HudComponent.java index 125bd6a..beb1299 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/components/HudComponent.java +++ b/src/main/java/wtf/cheeze/sbt/hud/components/HudComponent.java @@ -18,16 +18,15 @@ */ package wtf.cheeze.sbt.hud.components; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.text.TextUtils; import wtf.cheeze.sbt.utils.render.Colors; public interface HudComponent { + Component ERROR = TextUtils.withColor("ERROR", Colors.RED); - Text ERROR = TextUtils.withColor("ERROR", Colors.RED); - - int render(DrawContext context, int x, int y, float scale); + int render(GuiGraphics guiGraphics, int x, int y, float scale); int getWidth(); int getHeight(); int getlines(); diff --git a/src/main/java/wtf/cheeze/sbt/hud/components/ItemStackComponent.java b/src/main/java/wtf/cheeze/sbt/hud/components/ItemStackComponent.java index a85e8ac..19232fc 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/components/ItemStackComponent.java +++ b/src/main/java/wtf/cheeze/sbt/hud/components/ItemStackComponent.java @@ -18,26 +18,23 @@ */ package wtf.cheeze.sbt.hud.components; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import wtf.cheeze.sbt.hud.cache.Cache; import wtf.cheeze.sbt.hud.cache.UpdateTiming; import java.util.function.Supplier; public class ItemStackComponent implements HudComponent { - private static final int BASE_WIDTH = 16; private static final int BASE_HEIGHT = 16; - private final Cache cache; private final Supplier itemStack; private static final ItemStack ITEM_ERROR = new ItemStack(Items.BARRIER); - public ItemStackComponent(UpdateTiming updateTiming, Supplier itemStack) { this.cache = new Cache<>(updateTiming, itemStack, ITEM_ERROR); this.itemStack = itemStack; @@ -47,14 +44,13 @@ public ItemStackComponent(Supplier itemStack) { this( UpdateTiming.FRAME, itemStack); } - @Override - public int render(DrawContext context, int x, int y, float scale) { + public int render(GuiGraphics guiGraphics, int x, int y, float scale) { if (cache.timing == UpdateTiming.FRAME || cache.isDueForUpdate()) { cache.update(); } - context.drawItem(cache.get(), (int) (x / scale), (int) (y / scale)); - context.drawStackOverlay(MinecraftClient.getInstance().textRenderer, cache.get(), (int) (x / scale), (int) (y / scale)); + guiGraphics.renderItem(cache.get(), (int) (x / scale), (int) (y / scale)); + guiGraphics.renderItemDecorations(Minecraft.getInstance().font, cache.get(), (int) (x / scale), (int) (y / scale)); return 1; } diff --git a/src/main/java/wtf/cheeze/sbt/hud/components/SingleHudLine.java b/src/main/java/wtf/cheeze/sbt/hud/components/SingleHudLine.java index 0133851..dd48b40 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/components/SingleHudLine.java +++ b/src/main/java/wtf/cheeze/sbt/hud/components/SingleHudLine.java @@ -18,8 +18,8 @@ */ package wtf.cheeze.sbt.hud.components; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import wtf.cheeze.sbt.hud.icon.HudIcon; import wtf.cheeze.sbt.hud.cache.Cache; @@ -31,17 +31,15 @@ import java.util.function.Supplier; public class SingleHudLine implements HudComponent { - public Supplier color; public Supplier outlineColor; public Supplier mode; - public Supplier text; + public Supplier text; public Supplier useIcon; private final UpdateTiming timing; - private final Cache cache; - + private final Cache cache; private static final int LINE_COUNT = 1; private static final int LINE_HEIGHT = 9; @@ -50,18 +48,19 @@ public class SingleHudLine implements HudComponent { // Make sure not to create a new instance of HudIcon every time you call this public Supplier icon; - public SingleHudLine(Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText) { + public SingleHudLine(Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText) { this(UpdateTiming.FRAME, getColor, getOutlineColor, getMode, getText, null, DataUtils.ALWAYS_FALSE); } - public SingleHudLine(UpdateTiming timing, Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText) { + + public SingleHudLine(UpdateTiming timing, Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText) { this(timing, getColor, getOutlineColor, getMode, getText, null, DataUtils.ALWAYS_FALSE); } - public SingleHudLine(Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText, Supplier icon, Supplier useIcon) { + public SingleHudLine(Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText, Supplier icon, Supplier useIcon) { this(UpdateTiming.FRAME, getColor, getOutlineColor, getMode, getText, icon, useIcon); } - public SingleHudLine(UpdateTiming timing, Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText, Supplier icon, Supplier useIcon) { + public SingleHudLine(UpdateTiming timing, Supplier getColor, Supplier getOutlineColor, Supplier getMode, Supplier getText, Supplier icon, Supplier useIcon) { this.timing = timing; this.color = getColor; this.outlineColor = getOutlineColor; @@ -72,40 +71,34 @@ public SingleHudLine(UpdateTiming timing, Supplier getColor, Supplier(timing, text, ERROR); } - - - @Override - public int render(DrawContext context, int x, int y, float scale) { + public int render(GuiGraphics guiGraphics, int x, int y, float scale) { if (timing == UpdateTiming.FRAME || cache.isDueForUpdate()) { cache.update(); } switch (mode.get()) { - case PURE -> render(context, x, y, scale, false); - case SHADOW -> render(context, x, y, scale, true); + case PURE -> render(guiGraphics, x, y, scale, false); + case SHADOW -> render(guiGraphics, x, y, scale, true); case OUTLINE -> { if (useIcon.get()) { - icon.get().render(context, x, y, scale); + icon.get().render(guiGraphics, x, y, scale); - RenderUtils.drawTextWithOutline(context, cache.get(), x + (int) (10 * scale), y, color.get(), outlineColor.get(), scale, true); + RenderUtils.drawTextWithOutline(guiGraphics, cache.get(), x + (int) (10 * scale), y, color.get(), outlineColor.get(), scale); } else { - RenderUtils.drawTextWithOutline(context, cache.get(), x, y, color.get(), outlineColor.get(), scale, true); + RenderUtils.drawTextWithOutline(guiGraphics, cache.get(), x, y, color.get(), outlineColor.get(), scale); } } } return 1; } - - - private void render(DrawContext context, int x, int y, float scale, boolean shadow) { - + private void render(GuiGraphics guiGraphics, int x, int y, float scale, boolean shadow) { if (useIcon.get()) { - icon.get().render(context, x, y, scale); - RenderUtils.drawText(context, cache.get(), x + (int) (10 * scale), y, color.get(), shadow, scale, true); + icon.get().render(guiGraphics, x, y, scale); + RenderUtils.drawText(guiGraphics, cache.get(), x + (int) (10 * scale), y, color.get(), shadow, scale); } else { - RenderUtils.drawText(context, cache.get(), x, y, color.get(), shadow, scale, true); + RenderUtils.drawText(guiGraphics, cache.get(), x, y, color.get(), shadow, scale); } } @@ -123,4 +116,4 @@ public int getlines() { return public int getHeight() { return LINE_HEIGHT; } -} \ No newline at end of file +} diff --git a/src/main/java/wtf/cheeze/sbt/hud/icon/HudIcon.java b/src/main/java/wtf/cheeze/sbt/hud/icon/HudIcon.java index bb94927..13060e0 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/icon/HudIcon.java +++ b/src/main/java/wtf/cheeze/sbt/hud/icon/HudIcon.java @@ -18,20 +18,18 @@ */ package wtf.cheeze.sbt.hud.icon; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; +import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; - public interface HudIcon { - - void render(DrawContext context, int x, int y, float scale); + void render(GuiGraphics guiGraphics, int x, int y, float scale); static HudIcon of(@NotNull ItemStack stack) { return new ItemStackIcon(stack); } - static HudIcon of(@NotNull Identifier texture) { + static HudIcon of(@NotNull ResourceLocation texture) { return new TextureIcon(texture); } diff --git a/src/main/java/wtf/cheeze/sbt/hud/icon/Icons.java b/src/main/java/wtf/cheeze/sbt/hud/icon/Icons.java index 6bff8ee..dd27607 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/icon/Icons.java +++ b/src/main/java/wtf/cheeze/sbt/hud/icon/Icons.java @@ -18,7 +18,7 @@ */ package wtf.cheeze.sbt.hud.icon; -import net.minecraft.util.Identifier; +import net.minecraft.resources.ResourceLocation; import java.util.Map; @@ -28,7 +28,6 @@ import static java.util.Map.entry; public class Icons { - public static final HudIcon ARROW = itemID("arrow"); public static final HudIcon CHEST_MINECART = itemID("chest_minecart"); public static final HudIcon CHEST = itemStack("chest"); @@ -41,7 +40,7 @@ public class Icons { public static final HudIcon WATER_BUCKET = itemID("water_bucket"); public static final HudIcon DEFAULT_HEAD = itemStack("player_head"); - public static final HudIcon DEFAULT_ICON = HudIcon.of(Identifier.of("skyblocktweaks", "missing.png")); + public static final HudIcon DEFAULT_ICON = HudIcon.of(ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "missing.png")); public static final Map SKILL_ICONS = Map.ofEntries( entry(Skill.COMBAT, IRON_SWORD), entry(Skill.FARMING, itemID("golden_hoe")), @@ -111,11 +110,11 @@ public class Icons { private static HudIcon itemID(String name) { - return HudIcon.of(Identifier.ofVanilla("textures/item/" + name + ".png")); + return HudIcon.of(ResourceLocation.withDefaultNamespace("textures/item/" + name + ".png")); } private static HudIcon blockID(String name) { - return HudIcon.of(Identifier.ofVanilla("textures/block/" + name + ".png")); + return HudIcon.of(ResourceLocation.withDefaultNamespace("textures/block/" + name + ".png")); } private static HudIcon itemStack(String name) { diff --git a/src/main/java/wtf/cheeze/sbt/hud/icon/ItemStackIcon.java b/src/main/java/wtf/cheeze/sbt/hud/icon/ItemStackIcon.java index f86db6f..0405270 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/icon/ItemStackIcon.java +++ b/src/main/java/wtf/cheeze/sbt/hud/icon/ItemStackIcon.java @@ -18,8 +18,8 @@ */ package wtf.cheeze.sbt.hud.icon; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.item.ItemStack; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.utils.render.RenderUtils; @@ -31,9 +31,9 @@ public ItemStackIcon(@NotNull ItemStack stack) { } @Override - public void render(DrawContext context, int x, int y, float scale) { - RenderUtils.beginScale(context, 0.5f); - context.drawItem(iconStack, (int) (x / (0.5f *scale)) , (int) (y / (0.5f *scale))); - RenderUtils.popMatrix(context); + public void render(GuiGraphics guiGraphics, int x, int y, float scale) { + RenderUtils.beginScale(guiGraphics, 0.5f); + guiGraphics.renderItem(iconStack, (int) (x / (0.5f *scale)) , (int) (y / (0.5f *scale))); + RenderUtils.popMatrix(guiGraphics); } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/icon/TextureIcon.java b/src/main/java/wtf/cheeze/sbt/hud/icon/TextureIcon.java index 6e22753..d88abfb 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/icon/TextureIcon.java +++ b/src/main/java/wtf/cheeze/sbt/hud/icon/TextureIcon.java @@ -18,21 +18,20 @@ */ package wtf.cheeze.sbt.hud.icon; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import wtf.cheeze.sbt.utils.render.RenderUtils; public class TextureIcon implements HudIcon { + private final ResourceLocation iconTexture; - private final Identifier iconTexture; - - public TextureIcon(@NotNull Identifier texture) { + public TextureIcon(@NotNull ResourceLocation texture) { this.iconTexture = texture; } @Override - public void render(DrawContext context, int x, int y, float scale) { - RenderUtils.drawTexture(context, iconTexture, (int) (x /scale) , (int) (y / scale), 8, 8, 8, 8); + public void render(GuiGraphics guiGraphics, int x, int y, float scale) { + RenderUtils.drawTexture(guiGraphics, iconTexture, (int) (x /scale) , (int) (y / scale), 8, 8, 8, 8); } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/screen/CompositionPopupScreen.java b/src/main/java/wtf/cheeze/sbt/hud/screen/CompositionPopupScreen.java index d990fd3..e896db3 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/screen/CompositionPopupScreen.java +++ b/src/main/java/wtf/cheeze/sbt/hud/screen/CompositionPopupScreen.java @@ -19,22 +19,25 @@ package wtf.cheeze.sbt.hud.screen; import dev.isxander.yacl3.api.Binding; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Renderable; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.ObjectSelectionList; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.StringWidget; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.hud.utils.CompositionEntry; import wtf.cheeze.sbt.utils.errors.ErrorHandler; import wtf.cheeze.sbt.utils.errors.ErrorLevel; import wtf.cheeze.sbt.utils.render.Colors; import wtf.cheeze.sbt.utils.render.RenderUtils; +import wtf.cheeze.sbt.utils.render.ScreenListener; import wtf.cheeze.sbt.utils.text.Symbols; import wtf.cheeze.sbt.utils.text.TextUtils; @@ -46,9 +49,8 @@ * TODO: Reset only works the first time its used */ public class CompositionPopupScreen extends Screen { - - private static final Identifier BACKGROUND = Identifier.of("skyblocktweaks", "gui/panel_super_wide.png"); - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final ResourceLocation BACKGROUND = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "gui/panel_super_wide.png"); + private static final Minecraft client = Minecraft.getInstance(); private static final int WIDTH = 300; private static final int HEIGHT = 150; private static final int CLICK_CLOSE_BUFFER = 5; @@ -58,12 +60,9 @@ public class CompositionPopupScreen extends Screen { private NewItemList newItemList; private ModifyItemList modifyItemList; - private ButtonWidget previewButton; - - + private Button previewButton; - - public CompositionPopupScreen(Text title, Screen parent, Binding> binding, T[] values) { + public CompositionPopupScreen(Component title, Screen parent, Binding> binding, T[] values) { super(title); this.parent = parent; this.binding = binding; @@ -71,43 +70,34 @@ public CompositionPopupScreen(Text title, Screen parent, Binding> bindin } - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (mouseX < popupX - CLICK_CLOSE_BUFFER || mouseX > rightEdge + CLICK_CLOSE_BUFFER || mouseY < popupY - CLICK_CLOSE_BUFFER || mouseY > popupY + HEIGHT + CLICK_CLOSE_BUFFER) { - close(); - return true; - } - return super.mouseClicked(mouseX, mouseY, button); - } private int popupX; private int rightEdge; private int popupY; private int centerX; - private static final Text ADD_ITEMS_TITLE = Text.translatable("sbt.gui.config.composition.add_items"); - private static final Text ADD_ITEM_BUTTON = Text.translatable("sbt.gui.config.composition.add_item"); - private static final Text MODIFY_ITEMS_TITLE = Text.translatable("sbt.gui.config.composition.modify_items"); - private static final Text DELETE_ITEM_BUTTON = Text.translatable("sbt.gui.config.composition.delete_item"); - - private static final Tooltip PREVIEW_INACTIVE = Tooltip.of(Text.translatable("sbt.gui.config.composition.preview.disabled")); + private static final Component ADD_ITEMS_TITLE = Component.translatable("sbt.gui.config.composition.add_items"); + private static final Component ADD_ITEM_BUTTON = Component.translatable("sbt.gui.config.composition.add_item"); + private static final Component MODIFY_ITEMS_TITLE = Component.translatable("sbt.gui.config.composition.modify_items"); + private static final Component DELETE_ITEM_BUTTON = Component.translatable("sbt.gui.config.composition.delete_item"); + private static final Tooltip PREVIEW_INACTIVE = Tooltip.create(Component.translatable("sbt.gui.config.composition.preview.disabled")); @Override protected void init() { - centerX = client.getWindow().getScaledWidth() / 2; + centerX = client.getWindow().getGuiScaledWidth() / 2; popupX = centerX - WIDTH /2; - popupY = (client.getWindow().getScaledHeight() / 2) - HEIGHT /2; + popupY = (client.getWindow().getGuiScaledHeight() / 2) - HEIGHT /2; rightEdge = popupX + WIDTH; newItemList = new NewItemList(client); newItemList.reload(); - this.addDrawableChild(newItemList); - var title = new TextWidget(centerX - RenderUtils.getStringWidth(getTitle()) / 2, popupY + 6, RenderUtils.getStringWidth(getTitle()), textRenderer.fontHeight, getTitle(), textRenderer); - this.addDrawableChild(title); - var addItemsTitle = new TextWidget(popupX + 6 + newItemList.getWidthForBorder() / 2 - RenderUtils.getStringWidth(ADD_ITEMS_TITLE) / 2, popupY + 19, RenderUtils.getStringWidth(ADD_ITEMS_TITLE), textRenderer.fontHeight, ADD_ITEMS_TITLE, textRenderer); - this.addDrawableChild(addItemsTitle); - var addItemButton = ButtonWidget.builder(ADD_ITEM_BUTTON, button -> { - var selected = newItemList.getSelectedOrNull(); + this.addRenderableWidget(newItemList); + var title = new StringWidget(centerX - RenderUtils.getStringWidth(getTitle()) / 2, popupY + 6, RenderUtils.getStringWidth(getTitle()), font.lineHeight, getTitle(), font); + this.addRenderableWidget(title); + var addItemsTitle = new StringWidget(popupX + 6 + newItemList.getWidthForBorder() / 2 - RenderUtils.getStringWidth(ADD_ITEMS_TITLE) / 2, popupY + 19, RenderUtils.getStringWidth(ADD_ITEMS_TITLE), font.lineHeight, ADD_ITEMS_TITLE, font); + this.addRenderableWidget(addItemsTitle); + var addItemButton = Button.builder(ADD_ITEM_BUTTON, button -> { + var selected = newItemList.getSelected(); if (selected == null) return; var selectedItem = selected.item; var list = binding.getValue(); @@ -115,13 +105,13 @@ protected void init() { binding.setValue(list); newItemList.reload(); modifyItemList.reload(); - }).dimensions(popupX + 6 + newItemList.getWidthForBorder() / 2 - 45, popupY + TOP_OFFSET + NewItemList.HEIGHT + 5, 90, 20).build(); - this.addDrawableChild(addItemButton); + }).bounds(popupX + 6 + newItemList.getWidthForBorder() / 2 - 45, popupY + TOP_OFFSET + NewItemList.HEIGHT + 5, 90, 20).build(); + this.addRenderableWidget(addItemButton); - var modifyItemsTitle = new TextWidget(rightEdge - 6 - ModifyItemList.WIDTH / 2 - ModifyItemListEntry.BUTTON_DIMENSION - RenderUtils.getStringWidth(MODIFY_ITEMS_TITLE) / 2, popupY + 19, RenderUtils.getStringWidth(MODIFY_ITEMS_TITLE), textRenderer.fontHeight, MODIFY_ITEMS_TITLE, textRenderer); - this.addDrawableChild(modifyItemsTitle); - var deleteItemButton = ButtonWidget.builder(DELETE_ITEM_BUTTON, button -> { - var selected = modifyItemList.getSelectedOrNull(); + var modifyItemsTitle = new StringWidget(rightEdge - 6 - ModifyItemList.WIDTH / 2 - ModifyItemListEntry.BUTTON_DIMENSION - RenderUtils.getStringWidth(MODIFY_ITEMS_TITLE) / 2, popupY + 19, RenderUtils.getStringWidth(MODIFY_ITEMS_TITLE), font.lineHeight, MODIFY_ITEMS_TITLE, font); + this.addRenderableWidget(modifyItemsTitle); + var deleteItemButton = Button.builder(DELETE_ITEM_BUTTON, button -> { + var selected = modifyItemList.getSelected(); if (selected == null) return; var selectedItem = selected.item; var list = binding.getValue(); @@ -129,60 +119,56 @@ protected void init() { binding.setValue(list); newItemList.reload(); modifyItemList.reload(); - }).dimensions(rightEdge - 6 - ModifyItemList.WIDTH / 2 - ModifyItemListEntry.BUTTON_DIMENSION - 45, popupY + TOP_OFFSET + ModifyItemList.HEIGHT + 5, 90, 20).build(); - this.addDrawableChild(deleteItemButton); + }).bounds(rightEdge - 6 - ModifyItemList.WIDTH / 2 - ModifyItemListEntry.BUTTON_DIMENSION - 45, popupY + TOP_OFFSET + ModifyItemList.HEIGHT + 5, 90, 20).build(); + this.addRenderableWidget(deleteItemButton); modifyItemList = new ModifyItemList(client); modifyItemList.reload(); - this.addDrawableChild(modifyItemList); + this.addRenderableWidget(modifyItemList); int centralButtonOffset = popupX + 6 + NewItemList.WIDTH + 8 ; - var resetCompositionButton = ButtonWidget.builder(Text.translatable("sbt.gui.config.composition.reset"), button -> { + var resetCompositionButton = Button.builder(Component.translatable("sbt.gui.config.composition.reset"), button -> { binding.setValue(binding.defaultValue()); newItemList.reload(); modifyItemList.reload(); - }).dimensions(centralButtonOffset, popupY + TOP_OFFSET + 6, 70, 20).build(); + }).bounds(centralButtonOffset, popupY + TOP_OFFSET + 6, 70, 20).build(); - this.previewButton = ButtonWidget.builder(Text.translatable("sbt.gui.config.composition.preview"), button -> { + this.previewButton = Button.builder(Component.translatable("sbt.gui.config.composition.preview"), button -> { - }) .dimensions(centralButtonOffset, popupY + TOP_OFFSET + 6 + 40, 70, 20).build(); + }) .bounds(centralButtonOffset, popupY + TOP_OFFSET + 6 + 40, 70, 20).build(); previewButton.active = false; previewButton.setTooltip(PREVIEW_INACTIVE); - this.addDrawableChild(previewButton); + this.addRenderableWidget(previewButton); - var doneButton = ButtonWidget.builder(Text.translatable("gui.done"), button -> { - close(); - }).dimensions(centralButtonOffset, popupY + TOP_OFFSET + ModifyItemList.HEIGHT + 5, 70, 20).build(); + var doneButton = Button.builder(Component.translatable("gui.done"), button -> onClose()).bounds(centralButtonOffset, popupY + TOP_OFFSET + ModifyItemList.HEIGHT + 5, 70, 20).build(); - this.addDrawableChild(doneButton); + this.addRenderableWidget(doneButton); + this.addRenderableWidget(resetCompositionButton); - - this.addDrawableChild(resetCompositionButton); + // this.addWidget(new EventListener()); } @Override - public void close() { + public void onClose() { //client.setScreen(parent); - client.currentScreen = parent; + client.screen = parent; SBTConfig.save(); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - parent.render(context, -1, -1, delta); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + parent.render(guiGraphics, -1, -1, delta); - RenderUtils.drawWithZ(context, 10, () -> { - RenderUtils.drawTexture(context, BACKGROUND, popupX, popupY, WIDTH, HEIGHT, WIDTH, HEIGHT); - for (Drawable drawable : this.drawables) { - drawable.render(context, mouseX, mouseY, delta); - } - }); - if (hasShiftDown()) { + RenderUtils.drawTexture(guiGraphics, BACKGROUND, popupX, popupY, WIDTH, HEIGHT, WIDTH, HEIGHT); + for (Renderable drawable : this.renderables) { + drawable.render(guiGraphics, mouseX, mouseY, delta); + } - var base = Text.empty(); + if (Minecraft.getInstance().hasShiftDown()) { + var base = Component.empty(); boolean first = true; for (var item: binding.getValue()) { @@ -191,30 +177,24 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { first = false; } - previewButton.setTooltip(Tooltip.of(base)); - - - + previewButton.setTooltip(Tooltip.create(base)); } else { previewButton.setTooltip(PREVIEW_INACTIVE); - } - - + for (var entry: newItemList.children()) guiGraphics.drawCenteredString(client.font, entry.item.getDisplayName(), entry.getX() + 90 / 2, entry.getY() + 2, Colors.WHITE); + for (var entry: modifyItemList.children()) guiGraphics.drawCenteredString(client.font, entry.item.getDisplayName(), entry.getX() + 90 / 2, entry.getY() + 2, Colors.WHITE); } private class NewItemList extends AbstractList { private static final int WIDTH = 90; private static final int HEIGHT = 90; - public NewItemList(MinecraftClient client) { + public NewItemList(Minecraft client) { super(client, WIDTH, HEIGHT, popupX + 6, popupY + TOP_OFFSET, ENTRY_HEIGHT - - ); } @@ -224,14 +204,12 @@ protected void setupEntries() { addEntry(new NewItemListEntry(item)); } } - } @Override - protected void drawHeaderAndFooterSeparators(DrawContext context) { - RenderUtils.drawBorder(context, 1, Colors.GRAY, x, getY(), getWidthForBorder() , getHeight()); + protected void renderListSeparators(GuiGraphics guiGraphics) { + RenderUtils.drawBorder(guiGraphics, 1, Colors.GRAY, x, getY(), getWidthForBorder() , getHeight()); } - } private static final int HIGHLIGHT_1 = -2131561742; @@ -239,33 +217,35 @@ protected void drawHeaderAndFooterSeparators(DrawContext context) { private static final int ENTRY_HEIGHT = 15; private static final int TOP_OFFSET = 30; - private class NewItemListEntry extends AbstractEntry { public NewItemListEntry(T item) { super(item); } + + + @Override - public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - context.fill(x -1 , y - 2, x + entryWidth , y + entryHeight + 2, index % 2 == 0 ? HIGHLIGHT_1: HIGHLIGHT_2); - context.drawCenteredTextWithShadow(client.textRenderer, item.getDisplayName(), x + entryWidth / 2, y + 2, Colors.WHITE); + public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean isHovering, float partialTick) { + guiGraphics.fill(CompositionPopupScreen.this.popupX -1 , getY() - 2, getX() + WIDTH , getY() + ENTRY_HEIGHT + 2, CompositionPopupScreen.this.children().indexOf(this) % 2 == 0 ? HIGHLIGHT_1: HIGHLIGHT_2); + // TODO: Why is it not rendering here and I had to move it up? + // guiGraphics.drawCenteredString(client.font, item.getDisplayName(), getX() + WIDTH / 2, getY() + 2, Colors.WHITE); + //guiGraphics.drawString(client.font, TextUtils.withBold("Hi"), 1, 1, Colors.WHITE); } } - private static final Text MOVE_UP = Text.translatable("sbt.gui.config.move_up"); - private static final Text MOVE_DOWN = Text.translatable("sbt.gui.config.move_down"); - private static final Text UP_SYMBOL = Text.literal(Symbols.BUTTON_UP); - private static final Text DOWN_SYMBOL = Text.literal(Symbols.BUTTON_DOWN); + private static final Component MOVE_UP = Component.translatable("sbt.gui.config.move_up"); + private static final Component MOVE_DOWN = Component.translatable("sbt.gui.config.move_down"); + private static final Component UP_SYMBOL = Component.literal(Symbols.BUTTON_UP); + private static final Component DOWN_SYMBOL = Component.literal(Symbols.BUTTON_DOWN); private class ModifyItemList extends AbstractList { private static final int HEIGHT = 90; private static final int WIDTH = 90; - - public ModifyItemList(MinecraftClient minecraftClient) { + public ModifyItemList(Minecraft minecraftClient) { super(minecraftClient, WIDTH, HEIGHT, rightEdge - 6 - WIDTH, popupY + TOP_OFFSET, ENTRY_HEIGHT); - } @Override @@ -279,8 +259,6 @@ protected void setupEntries() { } else { this.x = rightEdge - 6 - WIDTH; } - - } //TODO: This may not properly work with repeatable items @@ -292,9 +270,10 @@ public boolean moveUp(ModifyItemListEntry entry) { var before = getEntry(listI - 1); list.set(listI - 1, entry.item); list.set(listI, before.item); - this.children().set(listI - 1, entry); - this.children().set(listI, before); + this.children.set(listI - 1, entry); + this.children.set(listI, before); binding.setValue(list); + CompositionPopupScreen.this.modifyItemList.reload(); return true; } catch (Exception e) { ErrorHandler.handle(e, "Failed to move item up", ErrorLevel.WARNING); @@ -310,12 +289,13 @@ public boolean moveDown(ModifyItemListEntry entry) { var after = getEntry(listI + 1); list.set(listI + 1, entry.item); list.set(listI, after.item); - this.children().set(listI + 1, entry); - this.children().set(listI, after); + this.children.set(listI + 1, entry); + this.children.set(listI, after); binding.setValue(list); + CompositionPopupScreen.this.modifyItemList.reload(); return true; } catch (Exception e) { - ErrorHandler.handle(e, "Failed to move item up", ErrorLevel.WARNING); + ErrorHandler.handle(e, "Failed to move item down", ErrorLevel.WARNING); return false; } } @@ -329,16 +309,16 @@ protected void clearEntries() { } @Override - public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { try { - super.renderWidget(context, mouseX, mouseY, delta); - context.enableScissor(popupX, this.getY(), rightEdge, this.getBottom()); + super.renderWidget(guiGraphics, mouseX, mouseY, delta); + guiGraphics.enableScissor(popupX, this.getY(), rightEdge, this.getBottom()); for (var entry : this.children()) { int i = this.children().indexOf(entry); boolean isFirst = i == 0; boolean isLast = i == this.children().size() - 1; - entry.moveUp.render(context, mouseX, mouseY, delta); - entry.moveDown.render(context, mouseX, mouseY, delta); + entry.moveUp.render(guiGraphics, mouseX, mouseY, delta); + entry.moveDown.render(guiGraphics, mouseX, mouseY, delta); if (entry.moveUp.getY() + ModifyItemListEntry.BUTTON_DIMENSION < this.getY() || entry.moveUp.getY() > this.getBottom()) { if (!isFirst) entry.moveUp.active = false; if (!isLast) entry.moveDown.active = false; @@ -353,54 +333,49 @@ public void renderWidget(DrawContext context, int mouseX, int mouseY, float delt } - context.disableScissor(); + guiGraphics.disableScissor(); } catch (Exception e) { ErrorHandler.handle(e, "Failed to render modify item list", ErrorLevel.WARNING); - context.disableScissor(); + guiGraphics.disableScissor(); } } @Override - protected void drawHeaderAndFooterSeparators(DrawContext context) { - RenderUtils.drawBorder(context, 1, Colors.GRAY, x - ModifyItemListEntry.BUTTON_DIMENSION*2, getY(), getWidthForBorder() + ModifyItemListEntry.BUTTON_DIMENSION*2 , getHeight()); + protected void renderListSeparators(GuiGraphics guiGraphics) { + RenderUtils.drawBorder(guiGraphics, 1, Colors.GRAY, x - ModifyItemListEntry.BUTTON_DIMENSION*2, getY(), getWidthForBorder() + ModifyItemListEntry.BUTTON_DIMENSION*2 , getHeight()); } } private class ModifyItemListEntry extends AbstractEntry { - public final TooltipButton moveUp, moveDown; private static final int BUTTON_DIMENSION = 15; - public ModifyItemListEntry(T item) { super(item); - moveUp = new TooltipButton(CompositionPopupScreen.this, 0, 0, BUTTON_DIMENSION, BUTTON_DIMENSION, UP_SYMBOL, MOVE_UP, button -> { - modifyItemList.moveUp(this); - }); - moveDown = new TooltipButton(CompositionPopupScreen.this, 0, 0, BUTTON_DIMENSION, BUTTON_DIMENSION, DOWN_SYMBOL, MOVE_DOWN, button -> { - modifyItemList.moveDown(this); - }); - CompositionPopupScreen.this.addSelectableChild(moveUp); - CompositionPopupScreen.this.addSelectableChild(moveDown); + moveUp = new TooltipButton(CompositionPopupScreen.this, 0, 0, BUTTON_DIMENSION, BUTTON_DIMENSION, UP_SYMBOL, MOVE_UP, button -> modifyItemList.moveUp(this)); + moveDown = new TooltipButton(CompositionPopupScreen.this, 0, 0, BUTTON_DIMENSION, BUTTON_DIMENSION, DOWN_SYMBOL, MOVE_DOWN, button -> modifyItemList.moveDown(this)); + CompositionPopupScreen.this.addWidget(moveUp); + CompositionPopupScreen.this.addWidget(moveDown); } public void cleanup() { - CompositionPopupScreen.this.remove(moveUp); - CompositionPopupScreen.this.remove(moveDown); + CompositionPopupScreen.this.removeWidget(moveUp); + CompositionPopupScreen.this.removeWidget(moveDown); } @Override - public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - moveUp.setPosition(x - 1 - 2*BUTTON_DIMENSION, y - 2); - moveDown.setPosition(x - 1 - BUTTON_DIMENSION, y - 2); - context.fill(x, y - 2, x + entryWidth , y + entryHeight + 2, index % 2 == 0 ? HIGHLIGHT_1: HIGHLIGHT_2); - context.drawCenteredTextWithShadow(client.textRenderer, item.getDisplayName(), x + entryWidth / 2, y + 2, Colors.WHITE); + public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean isHovering, float partialTick) { + moveUp.setPosition(getX() - 1 - 2*BUTTON_DIMENSION, getY() - 2); + moveDown.setPosition(getX() - 1 - BUTTON_DIMENSION, getY() - 2); + + guiGraphics.fill(getX(), getY() - 2, getX() + width , getY() + ENTRY_HEIGHT + 2, CompositionPopupScreen.this.children().indexOf(this) % 2 == 0 ? HIGHLIGHT_1: HIGHLIGHT_2); + // TODO: Why is it not rendering here and I had to move it up? + // guiGraphics.drawCenteredString(client.font, item.getDisplayName(), getX() + WIDTH / 2, getY() + 2, Colors.WHITE); + // RenderUtils.drawText(guiGraphics, Component.literal("Test"), 0, 0, Colors.WHITE, true); } - } - private abstract static class AbstractList> extends AlwaysSelectedEntryListWidget { - + private abstract static class AbstractList> extends ObjectSelectionList { public static final int SCROLLBAR_WIDTH = 6; protected int x; @@ -409,19 +384,23 @@ private abstract static class AbstractList> extends AlwaysSelectedEntryListWidget.Entry { + private abstract class AbstractEntry> extends ObjectSelectionList.Entry { public final T item; private AbstractEntry(T item) { @@ -473,9 +452,18 @@ private AbstractEntry(T item) { } @Override - public Text getNarration() { + public Component getNarration() { return item.getDisplayName(); } } + @Override + public boolean mouseClicked(MouseButtonEvent event, boolean isDoubleClicked) { + if (event.x() < this.popupX - CLICK_CLOSE_BUFFER || event.x() > this.rightEdge + CLICK_CLOSE_BUFFER || event.y() < CompositionPopupScreen.this.popupY - CLICK_CLOSE_BUFFER || event.y() > popupY + HEIGHT + CLICK_CLOSE_BUFFER) { + onClose(); + return true; + } + return super.mouseClicked(event, isDoubleClicked); + } + } diff --git a/src/main/java/wtf/cheeze/sbt/hud/screen/ConstructableButton.java b/src/main/java/wtf/cheeze/sbt/hud/screen/ConstructableButton.java index 42af32c..f84ae68 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/screen/ConstructableButton.java +++ b/src/main/java/wtf/cheeze/sbt/hud/screen/ConstructableButton.java @@ -18,27 +18,22 @@ */ package wtf.cheeze.sbt.hud.screen; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.Text; - -import java.util.function.Consumer; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; /** * This used to be a MatrixConsumingButton */ -public class ConstructableButton extends ButtonWidget { - - public ConstructableButton(Text message, PressAction onPress, int x, int y, int width, int height) { - super(x, y, width, height, message, onPress, ButtonWidget.DEFAULT_NARRATION_SUPPLIER); +public class ConstructableButton extends Button { + public ConstructableButton(Component message, OnPress onPress, int x, int y, int width, int height) { + super(x, y, width, height, message, onPress, Button.DEFAULT_NARRATION); } - public ConstructableButton(Text message, PressAction onPress, int x, int y) { + public ConstructableButton(Component message, OnPress onPress, int x, int y) { this(message, onPress, x, y, 80, 20); } - public ConstructableButton(Text message, PressAction onPress) { + public ConstructableButton(Component message, OnPress onPress) { this(message, onPress, 0, 0); } // diff --git a/src/main/java/wtf/cheeze/sbt/hud/screen/DecimalSlider.java b/src/main/java/wtf/cheeze/sbt/hud/screen/DecimalSlider.java index 73fb0b4..7c75a36 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/screen/DecimalSlider.java +++ b/src/main/java/wtf/cheeze/sbt/hud/screen/DecimalSlider.java @@ -18,13 +18,12 @@ */ package wtf.cheeze.sbt.hud.screen; -import net.minecraft.client.gui.widget.SliderWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.AbstractSliderButton; +import net.minecraft.network.chat.Component; import java.util.function.Consumer; -public class DecimalSlider extends SliderWidget { - +public class DecimalSlider extends AbstractSliderButton { private final double min; private final double max; private final double step; @@ -34,7 +33,7 @@ public double actualValue() { return Math.round((min + (max - min) * this.value) / step) * step; } - public DecimalSlider(int x, int y, int width, int height, Text text, double value, double min, double max, double step, Consumer valueConsumer) { + public DecimalSlider(int x, int y, int width, int height, Component text, double value, double min, double max, double step, Consumer valueConsumer) { super(x, y, width, height, text, value); this.min = min; this.max = max; @@ -46,7 +45,7 @@ public DecimalSlider(int x, int y, int width, int height, Text text, double valu @Override protected void updateMessage() { - this.setMessage(Text.literal(String.format("%.1f", actualValue()))); + this.setMessage(Component.literal(String.format("%.1f", actualValue()))); } @Override diff --git a/src/main/java/wtf/cheeze/sbt/hud/screen/EditorPopup.java b/src/main/java/wtf/cheeze/sbt/hud/screen/EditorPopup.java index 65c2115..b87d585 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/screen/EditorPopup.java +++ b/src/main/java/wtf/cheeze/sbt/hud/screen/EditorPopup.java @@ -18,11 +18,11 @@ */ package wtf.cheeze.sbt.hud.screen; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Renderable; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.CheezePair; import wtf.cheeze.sbt.utils.render.Colors; import wtf.cheeze.sbt.utils.render.Popup; @@ -30,44 +30,35 @@ import java.util.List; -public record EditorPopup(Screen screen, int x, int y, Text title, List> children) implements Drawable, Popup { - - public static final int POPUP_Z = 300; - - - +public record EditorPopup(Screen screen, int x, int y, Component title, List> children) implements Renderable, Popup { @Override - public List childrenList() { + public List childrenList() { return children.stream().map(CheezePair::val).toList(); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - RenderUtils.drawWithZ(context, 10 , () -> { - Popup.super.renderBackground(context); - RenderUtils.drawCenteredText(context, title, x + 40, y + 5, Colors.WHITE, false); - var renderY = y + 15; - for (var entry : children) { - entry.val().render(context, mouseX, mouseY, delta); - RenderUtils.drawCenteredText(context, Text.literal(entry.key()), centerX(), renderY, Colors.WHITE, false); - renderY+= 10; - var widget = entry.val(); - widget.setX(centerX() - 35); - widget.setY(renderY); - widget.setWidth(70); - widget.setHeight(15); - renderY += 18; - } - }); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + Popup.super.renderBackground(guiGraphics); + RenderUtils.drawCenteredText(guiGraphics, title, x + 40, y + 5, Colors.WHITE, false); + var renderY = y + 15; + for (var entry : children) { + entry.val().render(guiGraphics, mouseX, mouseY, delta); + RenderUtils.drawCenteredText(guiGraphics, Component.literal(entry.key()), centerX(), renderY, Colors.WHITE, false); + renderY+= 10; + var widget = entry.val(); + widget.setX(centerX() - 35); + widget.setY(renderY); + widget.setWidth(70); + widget.setHeight(15); + renderY += 18; + } } - public EditorPopup { + public EditorPopup { //screen.drawables.add(this); for (var entry : children) { // screen.addDrawableChild(entry.val()); - screen.addSelectableChild(entry.val()); + screen.addWidget(entry.val()); } } - - } diff --git a/src/main/java/wtf/cheeze/sbt/hud/screen/HudScreen.java b/src/main/java/wtf/cheeze/sbt/hud/screen/HudScreen.java index 9c5c491..f497367 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/screen/HudScreen.java +++ b/src/main/java/wtf/cheeze/sbt/hud/screen/HudScreen.java @@ -18,16 +18,20 @@ */ package wtf.cheeze.sbt.hud.screen; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.ScreenRect; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.tooltip.HoveredTooltipPositioner; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import dev.isxander.yacl3.gui.utils.KeyUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.narration.NarratableEntry; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.gui.navigation.ScreenRectangle; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; import wtf.cheeze.sbt.SkyblockTweaks; @@ -36,6 +40,7 @@ import wtf.cheeze.sbt.hud.bounds.Bounds; import wtf.cheeze.sbt.hud.utils.AnchorPoint; import wtf.cheeze.sbt.utils.CheezePair; +import wtf.cheeze.sbt.utils.render.ScreenListener; import wtf.cheeze.sbt.utils.text.Predicates; import wtf.cheeze.sbt.utils.render.Colors; import wtf.cheeze.sbt.utils.render.RenderUtils; @@ -43,12 +48,8 @@ import java.util.ArrayList; import java.util.List; -import static wtf.cheeze.sbt.hud.screen.EditorPopup.POPUP_Z; - public class HudScreen extends Screen { - private static final float RELATIVE_MOVE_AMOUNT = 2.0f; - private static final float BUTTON_Z = 100; private final List huds; private final Screen parent; @Nullable @@ -57,9 +58,9 @@ public class HudScreen extends Screen { private HUD hoveredElement = null; @Nullable private HUD selectedViaTheKeyboard = null; - private ButtonWidget resetModeButton; - private ButtonWidget cancelButton; - private ButtonWidget resetButton; + private Button resetModeButton; + private Button cancelButton; + private Button resetButton; private Mode mode = Mode.DRAG; private int resetModeIndex = 0; private float offsetX = 0; @@ -68,7 +69,7 @@ public class HudScreen extends Screen { @Nullable private EditorPopup popup = null; - public HudScreen(Text title, ArrayList huds, Screen parent) { + public HudScreen(Component title, ArrayList huds, Screen parent) { super(title); this.huds = huds.stream().filter(it -> it.shouldRender(true)).toList(); this.parent = parent; @@ -87,7 +88,7 @@ public static boolean clickInBounds(Bounds bounds, double mouseX, double mouseY) } private static float getMoveAmount() { - return RELATIVE_MOVE_AMOUNT / MinecraftClient.getInstance().getWindow().getScaledWidth(); + return RELATIVE_MOVE_AMOUNT / Minecraft.getInstance().getWindow().getGuiScaledWidth(); } private static void moveHorizontal(HUD hud, float amount) { @@ -104,18 +105,15 @@ private static void moveVertical(HUD hud, float amount) { @SuppressWarnings("MagicNumber") protected void init() { super.init(); - MinecraftClient mc = MinecraftClient.getInstance(); - var centerX = (mc.getWindow().getScaledWidth() / 2) - 50; + Minecraft mc = Minecraft.getInstance(); + var centerX = (mc.getWindow().getGuiScaledWidth() / 2) - 50; - cancelButton = new ConstructableButton(Text.literal("Exit"), button -> { + cancelButton = new ConstructableButton(Component.literal("Exit"), button -> { this.selectedElement = null; setMode(Mode.DRAG); }, centerX - 25, 95, 150, 20); - resetButton = new ConstructableButton(Text.literal("Reset"), button -> { - this.huds.get(this.resetModeIndex).updatePosition(0.1f, 0.f); - - }, centerX - 25, 65, 150, 20); + resetButton = new ConstructableButton(Component.literal("Reset"), button -> this.huds.get(this.resetModeIndex).updatePosition(0.1f, 0.f), centerX - 25, 65, 150, 20); resetModeButton = new ConstructableButton(this.huds.getFirst().getName().primaryName(), button -> { this.resetModeIndex++; if (this.resetModeIndex >= this.huds.size()) { @@ -126,26 +124,27 @@ protected void init() { }, centerX - 25, 35, 150, 20); setMode(Mode.DRAG); - this.addDrawableChild(cancelButton); - this.addDrawableChild(resetButton); - this.addDrawableChild(resetModeButton); - + this.addRenderableWidget(cancelButton); + this.addRenderableWidget(resetButton); + this.addRenderableWidget(resetModeButton); + //this.addWidget(new EventListener()); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - super.render(context, mouseX, mouseY, delta); + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta) { + super.render(guiGraphics, mouseX, mouseY, delta); HUD hovered = null; boolean drawnTooltip = false; for (HUD hud : huds) { boolean inBounds = clickInBounds(hud, mouseX, mouseY); - hud.render(context, true, inBounds); + hud.render(guiGraphics, true, inBounds); if (inBounds) { hovered = hud; - if (hasShiftDown()) { + // TODO: Reduce Reliance on YAc + if (KeyUtils.hasShiftDown()) { // context.drawTooltip(hud.getName().primaryName(),); - if (!drawnTooltip) context.drawTooltip(MinecraftClient.getInstance().textRenderer, hud.getName().primaryName(), mouseX, mouseY ); + if (!drawnTooltip) guiGraphics.setTooltipForNextFrame(Minecraft.getInstance().font, hud.getName().primaryName(), mouseX, mouseY ); drawnTooltip = true; //this.setTooltip(Tooltip.of(hud.getName().primaryName()), HoveredTooltipPositioner.INSTANCE.getPosition(), false); } @@ -156,63 +155,18 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { // this.clearTooltip(); // } - drawInstructions(context); + drawInstructions(guiGraphics); if (this.popup != null) { - this.popup.render(context, mouseX, mouseY, delta); + this.popup.render(guiGraphics, mouseX, mouseY, delta); } } @Override - public void close() { - MinecraftClient.getInstance().setScreen(parent); + public void onClose() { + Minecraft.getInstance().setScreen(parent); SBTConfig.save(); } - @Override - public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - boolean b = super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY); - if (this.mode != Mode.DRAG) return b; - if (selectedElement != null) { - selectedElement.updatePosition(HUD.getRelativeX(mouseX - offsetX), HUD.getRelativeY(mouseY - offsetY)); - } - return b; - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - boolean b = super.mouseClicked(mouseX, mouseY, button); - selectedViaTheKeyboard = null; - for (HUD hud : huds) { - if (clickInBounds(hud, mouseX, mouseY)) { -// if (hasControlDown() || this.mode == Mode.TEXT) { -// enableTextMode(hud); -// return b; -// } - if (this.mode == Mode.DRAG) { - selectedElement = hud; - updateOffset(hud, mouseX, mouseY); - } - if (hasControlDown() || (this.mode == Mode.TEXT && !clickInBounds(popup.getBounds(), mouseX, mouseY))) { - this.addPopup(hud.getName().name(EditorPopup.WIDTH), (int) mouseX, (int) mouseY, getPopupWidgets(hud)); - return b; - } - } - } - if (this.popup != null && !clickInBounds(this.popup.getBounds(), mouseX, mouseY)) { - this.popup.remove(); - this.popup = null; - this.setMode(Mode.DRAG); - } - return b; - } - - @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { - boolean x = super.mouseReleased(mouseX, mouseY, button); - if (this.mode == Mode.DRAG) selectedElement = null; - return x; - } - @Override public boolean mouseScrolled(double mouseX, double mouseY, double horizontal, double vertical) { boolean b = super.mouseScrolled(mouseX, mouseY, horizontal, vertical); @@ -223,18 +177,18 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontal, do } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyEvent event) { - if (hasAltDown() && hasControlDown()) { + if (Minecraft.getInstance().hasAltDown() && Minecraft.getInstance().hasControlDown()) { textToggledOff = !textToggledOff; } - if (keyCode == GLFW.GLFW_KEY_R && hasControlDown()) { + if (event.key() == GLFW.GLFW_KEY_R && Minecraft.getInstance().hasControlDown()) { setMode(Mode.RESET); } if (this.mode == Mode.DRAG) { if (this.hoveredElement != null) { - switch (keyCode) { + switch (event.key()) { case GLFW.GLFW_KEY_UP -> { moveVertical(hoveredElement, -getMoveAmount()); selectedViaTheKeyboard = hoveredElement; @@ -262,7 +216,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } } } else if (this.selectedViaTheKeyboard != null) { - switch (keyCode) { + switch (event.key()) { case GLFW.GLFW_KEY_UP -> moveVertical(selectedViaTheKeyboard, -getMoveAmount()); case GLFW.GLFW_KEY_DOWN -> moveVertical(selectedViaTheKeyboard, getMoveAmount()); case GLFW.GLFW_KEY_LEFT -> moveHorizontal(selectedViaTheKeyboard, -getMoveAmount()); @@ -274,7 +228,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } } } - if (keyCode == GLFW.GLFW_KEY_ESCAPE) { + if (event.key() == GLFW.GLFW_KEY_ESCAPE) { if (this.popup != null) { this.popup.remove(); this.popup = null; @@ -286,7 +240,7 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { return true; } } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(event); } private void setMode(Mode newMode) { @@ -308,33 +262,30 @@ private void setMode(Mode newMode) { } private boolean shouldShowText() { - if (hasAltDown()) return false; + if (Minecraft.getInstance().hasAltDown()) return false; return !textToggledOff; } - private void drawInstructions(DrawContext context) { - var centerX = client.getWindow().getScaledWidth() / 2; -// context.getMatrices().push(); -// context.getMatrices().translate(0, 0, 100); + private void drawInstructions(GuiGraphics guiGraphics) { + var centerX = minecraft.getWindow().getGuiScaledWidth() / 2; if (shouldShowText() && this.mode == Mode.DRAG) { - context.drawCenteredTextWithShadow(client.textRenderer, "Drag or use the arrow keys to move items", centerX, 5, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Scroll or use the + and - keys to scale items", centerX, 15, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Press shift and hover to see the name of the item", centerX, 25, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, (macOS() ? "Command" : "Control") + " click for text mode/to edit anchor points", centerX, 35, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, (macOS() ? "Command" : "Control") + "+ R to enter Reset Mode", centerX, 45, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Hold " + (macOS() ? "option" : "alt") + " to hide this text or " + (macOS() ? "Cmd+Opt" : "Ctrl+Alt") + " to toggle it", centerX, 55, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Drag or use the arrow keys to move items", centerX, 5, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Scroll or use the + and - keys to scale items", centerX, 15, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Press shift and hover to see the name of the item", centerX, 25, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, (macOS() ? "Command" : "Control") + " click for text mode/to edit anchor points", centerX, 35, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, (macOS() ? "Command" : "Control") + "+ R to enter Reset Mode", centerX, 45, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Hold " + (macOS() ? "option" : "alt") + " to hide this text or " + (macOS() ? "Cmd+Opt" : "Ctrl+Alt") + " to toggle it", centerX, 55, Colors.WHITE); } else if (shouldShowText() && this.mode == Mode.TEXT) { - context.drawCenteredTextWithShadow(client.textRenderer, "You are now in exact positioning mode", centerX, 5, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Enter the x and y positions in the text fields below", centerX, 15, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "The number is relative, so 0 is fully up/left and 1 is fully down/right", centerX, 25, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Press the anchor button to change where the hud anchors itself", centerX, 35, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Hold " + (macOS() ? "option" : "alt") + " to hide this text or " + (macOS() ? "Cmd+Opt" : "Ctrl+Alt") + " to toggle it", centerX, 45, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "You are now in exact positioning mode", centerX, 5, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Enter the x and y positions in the text fields below", centerX, 15, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "The number is relative, so 0 is fully up/left and 1 is fully down/right", centerX, 25, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Press the anchor button to change where the hud anchors itself", centerX, 35, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Hold " + (macOS() ? "option" : "alt") + " to hide this text or " + (macOS() ? "Cmd+Opt" : "Ctrl+Alt") + " to toggle it", centerX, 45, Colors.WHITE); } else if (this.mode == Mode.RESET) { - context.drawCenteredTextWithShadow(client.textRenderer, "You are now in reset mode", centerX, 5, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Press the reset button to reset the selected item to the default position", centerX, 15, Colors.WHITE); - context.drawCenteredTextWithShadow(client.textRenderer, "Press the first button to cycle between elements", centerX, 25, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "You are now in reset mode", centerX, 5, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Press the reset button to reset the selected item to the default position", centerX, 15, Colors.WHITE); + guiGraphics.drawCenteredString(minecraft.font, "Press the first button to cycle between elements", centerX, 25, Colors.WHITE); } -// context.getMatrices().pop(); } private void updateOffset(HUD hud, double mouseX, double mouseY) { @@ -350,28 +301,28 @@ private void updateOffset(HUD hud, double mouseX, double mouseY) { offsetY = (float) (mouseY - bounds.y); } - private List> getPopupWidgets(HUD hud) { - var x = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, 0, 0, 70, 15, Text.literal("")); - var y = new TextFieldWidget(MinecraftClient.getInstance().textRenderer, 0, 0, 70, 15, Text.literal("")); - x.setTextPredicate(Predicates.ZERO_TO_ONE); - y.setTextPredicate(Predicates.ZERO_TO_ONE); - x.setChangedListener(s -> { + private List> getPopupWidgets(HUD hud) { + var x = new EditBox(Minecraft.getInstance().font, 0, 0, 70, 15, Component.literal("")); + var y = new EditBox(Minecraft.getInstance().font, 0, 0, 70, 15, Component.literal("")); + x.setFilter(Predicates.ZERO_TO_ONE); + y.setFilter(Predicates.ZERO_TO_ONE); + x.setResponder(s -> { if (s.isEmpty()) return; hud.updatePosition(Float.parseFloat(s), hud.getCurrentBoundsRelative().y); }); - y.setChangedListener(s -> { + y.setResponder(s -> { if (s.isEmpty()) return; hud.updatePosition(hud.getCurrentBoundsRelative().x, Float.parseFloat(s)); }); var bounds = hud.getCurrentBoundsRelative(); - x.setText("" + bounds.x); - y.setText("" + bounds.y); + x.setValue("" + bounds.x); + y.setValue("" + bounds.y); - SkyblockTweaks.LOGGER.info("X text: " + x.getText() + " Y text: " + y.getText()); + SkyblockTweaks.LOGGER.info("X text: " + x.getValue() + " Y text: " + y.getValue()); - var scale = new DecimalSlider(0, 0, 0, 0, Text.literal(hud.INFO.getScale.get().toString().formatted("%.1f")), hud.INFO.getScale.get() / 3.0, 0.1, 3.0, 0.1, (val) -> hud.INFO.setScale.accept((float) (double) val)); - var anchor = new ConstructableButton(Text.literal(hud.INFO.getAnchorPoint.get().name()), button -> { + var scale = new DecimalSlider(0, 0, 0, 0, Component.literal(hud.INFO.getScale.get().toString().formatted("%.1f")), hud.INFO.getScale.get() / 3.0, 0.1, 3.0, 0.1, (val) -> hud.INFO.setScale.accept((float) (double) val)); + var anchor = new ConstructableButton(Component.literal(hud.INFO.getAnchorPoint.get().name()), button -> { var anchorPoint = hud.INFO.getAnchorPoint.get(); if (anchorPoint == AnchorPoint.LEFT) { hud.INFO.setAnchorPoint.accept(AnchorPoint.CENTER); @@ -380,7 +331,7 @@ private void updateOffset(HUD hud, double mouseX, double mouseY) { } else if (anchorPoint == AnchorPoint.RIGHT) { hud.INFO.setAnchorPoint.accept(AnchorPoint.LEFT); } - button.setMessage(Text.literal(hud.INFO.getAnchorPoint.get().name())); + button.setMessage(Component.literal(hud.INFO.getAnchorPoint.get().name())); }); if (!hud.supportsNonLeftAnchors) anchor.active = false; @@ -392,12 +343,13 @@ private void updateOffset(HUD hud, double mouseX, double mouseY) { } - public void addPopup(Text title, int desiredX, int desiredY, List> widgets) { + //TODO: Popup button is blinking + public void addPopup(Component title, int desiredX, int desiredY, List> widgets) { this.setMode(Mode.TEXT); - ScreenRect bounds; + ScreenRectangle bounds; int i = 0; while (i < 1E6) { // prevent infinite loops if something goes wrong - bounds = new ScreenRect(desiredX, desiredY, EditorPopup.WIDTH, EditorPopup.HEIGHT); + bounds = new ScreenRectangle(desiredX, desiredY, EditorPopup.WIDTH, EditorPopup.HEIGHT); RenderUtils.BreachResult breachResult = RenderUtils.isOffscreen(bounds); if (breachResult.breachesAll()) { break; @@ -425,4 +377,48 @@ private enum Mode { DRAG, TEXT, RESET } + @Override + public boolean mouseReleased(MouseButtonEvent event) { + if (this.mode == Mode.DRAG) selectedElement = null; + return super.mouseReleased(event); + } + + @Override + public boolean mouseClicked(MouseButtonEvent event, boolean isDoubleClick) { + this.selectedViaTheKeyboard = null; + for (HUD hud : huds) { + if (clickInBounds(hud, event.x(), event.y())) { + if (this.mode == Mode.DRAG) { + selectedElement = hud; + updateOffset(hud, event.x(), event.y()); + } + if (Minecraft.getInstance().hasControlDown() || (this.mode == Mode.TEXT && !clickInBounds(popup.getBounds(), event.x(), event.y()))) { + this.addPopup(hud.getName().name(EditorPopup.WIDTH), (int) event.x(), (int) event.y(), getPopupWidgets(hud)); + return super.mouseClicked(event, isDoubleClick); + } + } + } + if (this.popup != null && !clickInBounds(this.popup.getBounds(), event.x(), event.y())) { + this.popup.remove(); + this.popup = null; + this.setMode(Mode.DRAG); + } + return super.mouseClicked(event, isDoubleClick); + } + + @Override + public boolean mouseDragged(MouseButtonEvent event, double mouseX, double mouseY) { + // TODO: What are these parameters? + if (this.mode != Mode.DRAG) return super.mouseDragged(event, mouseX, mouseY); + if (this.selectedElement != null) { + this.selectedElement.updatePosition(HUD.getRelativeX(event.x() - this.offsetX), HUD.getRelativeY(event.y()- this.offsetY)); + } + return super.mouseDragged(event, mouseX, mouseY); + } + } + + + + + diff --git a/src/main/java/wtf/cheeze/sbt/hud/screen/TooltipButton.java b/src/main/java/wtf/cheeze/sbt/hud/screen/TooltipButton.java index e435e20..32dd035 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/screen/TooltipButton.java +++ b/src/main/java/wtf/cheeze/sbt/hud/screen/TooltipButton.java @@ -18,22 +18,20 @@ */ package wtf.cheeze.sbt.hud.screen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; - +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; /** * Adapted from YACL} */ -public class TooltipButton extends ButtonWidget { - +public class TooltipButton extends Button { protected final Screen screen; - public TooltipButton(Screen screen, int x, int y, int width, int height, Text message, Text tooltip, PressAction onPress) { - super(x, y, width, height, message, onPress, DEFAULT_NARRATION_SUPPLIER); + public TooltipButton(Screen screen, int x, int y, int width, int height, Component message, Component tooltip, OnPress onPress) { + super(x, y, width, height, message, onPress, DEFAULT_NARRATION); this.screen = screen; - if (tooltip != null) setTooltip(Tooltip.of(tooltip)); + if (tooltip != null) setTooltip(Tooltip.create(tooltip)); } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/utils/AnchorPoint.java b/src/main/java/wtf/cheeze/sbt/hud/utils/AnchorPoint.java index ca89fe5..f282e21 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/utils/AnchorPoint.java +++ b/src/main/java/wtf/cheeze/sbt/hud/utils/AnchorPoint.java @@ -19,13 +19,13 @@ package wtf.cheeze.sbt.hud.utils; import dev.isxander.yacl3.api.NameableEnum; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public enum AnchorPoint implements NameableEnum { LEFT, CENTER, RIGHT; @Override - public Text getDisplayName() { - return Text.literal(name()); + public Component getDisplayName() { + return Component.literal(name()); } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/utils/CompositionEntry.java b/src/main/java/wtf/cheeze/sbt/hud/utils/CompositionEntry.java index bd6158e..343f4f2 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/utils/CompositionEntry.java +++ b/src/main/java/wtf/cheeze/sbt/hud/utils/CompositionEntry.java @@ -18,10 +18,10 @@ */ package wtf.cheeze.sbt.hud.utils; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public interface CompositionEntry { - Text getDisplayName(); + Component getDisplayName(); boolean isRepeatable(); - Text getPreviewText(); + Component getPreviewText(); } diff --git a/src/main/java/wtf/cheeze/sbt/hud/utils/DrawMode.java b/src/main/java/wtf/cheeze/sbt/hud/utils/DrawMode.java index 1821c15..412a3cb 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/utils/DrawMode.java +++ b/src/main/java/wtf/cheeze/sbt/hud/utils/DrawMode.java @@ -19,7 +19,7 @@ package wtf.cheeze.sbt.hud.utils; import dev.isxander.yacl3.api.NameableEnum; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.text.TextUtils; public enum DrawMode implements NameableEnum { @@ -28,7 +28,7 @@ public enum DrawMode implements NameableEnum { OUTLINE; @Override - public Text getDisplayName() { - return Text.literal(TextUtils.firstLetterUppercase(name().toLowerCase())); + public Component getDisplayName() { + return Component.literal(TextUtils.firstLetterUppercase(name().toLowerCase())); } } diff --git a/src/main/java/wtf/cheeze/sbt/hud/utils/HudInformation.java b/src/main/java/wtf/cheeze/sbt/hud/utils/HudInformation.java index 90c411f..299f497 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/utils/HudInformation.java +++ b/src/main/java/wtf/cheeze/sbt/hud/utils/HudInformation.java @@ -24,13 +24,11 @@ import java.util.function.Supplier; public class HudInformation { - public Supplier getX; public Supplier getY; public Supplier getScale; public Supplier getAnchorPoint; - public Consumer setX; public Consumer setY; public Consumer setScale; @@ -51,7 +49,6 @@ public HudInformation(Supplier xSupplier, Supplier ySupplier, Supp this.setAnchorPoint = anchorPointConsumer; } - /** * This constructor is used for Multi Line Text HUDs */ diff --git a/src/main/java/wtf/cheeze/sbt/hud/utils/HudName.java b/src/main/java/wtf/cheeze/sbt/hud/utils/HudName.java index 3df8684..1135440 100644 --- a/src/main/java/wtf/cheeze/sbt/hud/utils/HudName.java +++ b/src/main/java/wtf/cheeze/sbt/hud/utils/HudName.java @@ -1,6 +1,6 @@ package wtf.cheeze.sbt.hud.utils; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.text.TextUtils; import wtf.cheeze.sbt.utils.render.RenderUtils; @@ -9,15 +9,15 @@ public HudName(String pName, int color) { this(pName, pName, color); } - public Text primaryName() { + public Component primaryName() { return TextUtils.withColor(pName, color); } - public Text shortName() { + public Component shortName() { return TextUtils.withColor(sName, color); } - public Text name(int width) { + public Component name(int width) { if (RenderUtils.getStringWidth(primaryName()) > width) { return shortName(); } else { diff --git a/src/main/java/wtf/cheeze/sbt/mixin/accessors/BossBarHudAccessor.java b/src/main/java/wtf/cheeze/sbt/mixin/accessors/BossHealthOverlayAccessor.java similarity index 77% rename from src/main/java/wtf/cheeze/sbt/mixin/accessors/BossBarHudAccessor.java rename to src/main/java/wtf/cheeze/sbt/mixin/accessors/BossHealthOverlayAccessor.java index bcf0567..e074a99 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/accessors/BossBarHudAccessor.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/accessors/BossHealthOverlayAccessor.java @@ -18,17 +18,16 @@ */ package wtf.cheeze.sbt.mixin.accessors; - -import net.minecraft.client.gui.hud.BossBarHud; -import net.minecraft.client.gui.hud.ClientBossBar; +import net.minecraft.client.gui.components.BossHealthOverlay; +import net.minecraft.client.gui.components.LerpingBossEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Map; import java.util.UUID; -@Mixin(BossBarHud.class) -public interface BossBarHudAccessor { - @Accessor("bossBars") - Map getBossBars(); +@Mixin(BossHealthOverlay.class) +public interface BossHealthOverlayAccessor { + @Accessor("events") + Map getEvents(); } diff --git a/src/main/java/wtf/cheeze/sbt/mixin/accessors/PlayerListHudAccessor.java b/src/main/java/wtf/cheeze/sbt/mixin/accessors/PlayerTabOverlayAccessor.java similarity index 74% rename from src/main/java/wtf/cheeze/sbt/mixin/accessors/PlayerListHudAccessor.java rename to src/main/java/wtf/cheeze/sbt/mixin/accessors/PlayerTabOverlayAccessor.java index 9b8ff3f..42a7dd7 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/accessors/PlayerListHudAccessor.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/accessors/PlayerTabOverlayAccessor.java @@ -19,15 +19,15 @@ package wtf.cheeze.sbt.mixin.accessors; -import net.minecraft.client.gui.hud.PlayerListHud; -import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.gui.components.PlayerTabOverlay; +import net.minecraft.client.multiplayer.PlayerInfo; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Comparator; -@Mixin(PlayerListHud.class) -public interface PlayerListHudAccessor { - @Accessor("ENTRY_ORDERING") - static Comparator getEntryOrdering() { throw new IllegalStateException();} +@Mixin(PlayerTabOverlay.class) +public interface PlayerTabOverlayAccessor { + @Accessor("PLAYER_COMPARATOR") + static Comparator getEntryOrdering() { throw new IllegalStateException();} } diff --git a/src/main/java/wtf/cheeze/sbt/mixin/accessors/YACLScreenAccessor.java b/src/main/java/wtf/cheeze/sbt/mixin/accessors/YACLScreenAccessor.java index b9e3859..a995706 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/accessors/YACLScreenAccessor.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/accessors/YACLScreenAccessor.java @@ -19,7 +19,7 @@ package wtf.cheeze.sbt.mixin.accessors; import dev.isxander.yacl3.gui.YACLScreen; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screens.Screen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; diff --git a/src/main/java/wtf/cheeze/sbt/mixin/features/BossBarHiderMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/features/BossBarHiderMixin.java index 8f78692..412fd72 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/features/BossBarHiderMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/features/BossBarHiderMixin.java @@ -18,18 +18,18 @@ */ package wtf.cheeze.sbt.mixin.features; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.hud.BossBarHud; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.BossHealthOverlay; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import wtf.cheeze.sbt.config.SBTConfig; -@Mixin(BossBarHud.class) +@Mixin(BossHealthOverlay.class) public abstract class BossBarHiderMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void sbt$onRender(DrawContext context, CallbackInfo ci) { + private void sbt$onRender(GuiGraphics guiGraphics, CallbackInfo ci) { if (SBTConfig.get().hudTweaks.noRenderBossBar) { ci.cancel(); } diff --git a/src/main/java/wtf/cheeze/sbt/mixin/features/HudElementHiderMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/features/HudElementHiderMixin.java index 7845e14..8c670f4 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/features/HudElementHiderMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/features/HudElementHiderMixin.java @@ -18,7 +18,7 @@ */ package wtf.cheeze.sbt.mixin.features; -import net.minecraft.client.gui.hud.InGameHud; +import net.minecraft.client.gui.Gui; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -27,38 +27,37 @@ import wtf.cheeze.sbt.utils.enums.Location; import wtf.cheeze.sbt.utils.skyblock.SkyblockData; -@Mixin(InGameHud.class) +@Mixin(Gui.class) public abstract class HudElementHiderMixin { - @Inject(method = "renderArmor" , at = @At("HEAD"), cancellable = true) + @Inject(method = "renderArmor", at = @At("HEAD"), cancellable = true) private static void sbt$onRenderArmor(CallbackInfo ci) { if (SBTConfig.get().hudTweaks.noRenderArmor && SkyblockData.inSB) { ci.cancel(); } } - @Inject(method = "renderHealthBar" , at = @At("HEAD"), cancellable = true) + @Inject(method = "renderHearts", at = @At("HEAD"), cancellable = true) private void sbt$onRenderHealth(CallbackInfo ci) { - if (SBTConfig.get().hudTweaks.noRenderHearts && SkyblockData.inSB && (!SBTConfig.get().hudTweaks.showHearsInRift || SkyblockData.location != Location.RIFT)) { ci.cancel(); } } - @Inject(method = "renderFood" , at = @At("HEAD"), cancellable = true) + @Inject(method = "renderFood", at = @At("HEAD"), cancellable = true) private void sbt$onRenderFood(CallbackInfo ci) { if (SBTConfig.get().hudTweaks.noRenderHunger && SkyblockData.inSB) { ci.cancel(); } } - @Inject(method = "renderStatusEffectOverlay" , at = @At("HEAD"), cancellable = true) + @Inject(method = "renderEffects", at = @At("HEAD"), cancellable = true) private void sbt$onRenderStatusEffectOverlay(CallbackInfo ci) { if (SBTConfig.get().hudTweaks.noRenderPotionOverlay && SkyblockData.inSB) { ci.cancel(); } } - @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderVehicleHealth", at = @At("HEAD"), cancellable = true) private void sbt$onRenderMountHealth(CallbackInfo ci) { if (SBTConfig.get().hudTweaks.noRenderMountHealth && SkyblockData.inSB) { ci.cancel(); diff --git a/src/main/java/wtf/cheeze/sbt/mixin/features/MouseLockMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/features/MouseHandlerLockMixin.java similarity index 72% rename from src/main/java/wtf/cheeze/sbt/mixin/features/MouseLockMixin.java rename to src/main/java/wtf/cheeze/sbt/mixin/features/MouseHandlerLockMixin.java index 3d4a298..b92cc4a 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/features/MouseLockMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/features/MouseHandlerLockMixin.java @@ -18,18 +18,17 @@ */ package wtf.cheeze.sbt.mixin.features; - import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import net.minecraft.client.Mouse; -import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.MouseHandler; +import net.minecraft.client.player.LocalPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import wtf.cheeze.sbt.features.misc.MouseLock; -@Mixin(Mouse.class) -public abstract class MouseLockMixin { - @WrapWithCondition(method = "updateMouse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;changeLookDirection(DD)V")) - private boolean sbt$allowMouseMove(ClientPlayerEntity instance, double v, double v2) { +@Mixin(MouseHandler.class) +public abstract class MouseHandlerLockMixin { + @WrapWithCondition(method = "turnPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;turn(DD)V")) + private boolean sbt$allowMouseMove(LocalPlayer instance, double v, double v2) { return !MouseLock.locked; } } diff --git a/src/main/java/wtf/cheeze/sbt/mixin/features/NoShadowActionBarMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/features/NoShadowActionBarMixin.java index c61b6e9..670bd57 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/features/NoShadowActionBarMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/features/NoShadowActionBarMixin.java @@ -20,40 +20,23 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.text.Text; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.Gui; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import wtf.cheeze.sbt.config.SBTConfig; -import wtf.cheeze.sbt.utils.injected.SBTDrawContext; +import wtf.cheeze.sbt.utils.injected.SBTGuiGraphics; -@Mixin(InGameHud.class) +@Mixin(Gui.class) public abstract class NoShadowActionBarMixin { - //? if <=1.21.5 { - @WrapOperation(method = "renderOverlayMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithBackground(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIII)I")) - private int sbt$drawTextWithBackgroundNoShadowWrap(DrawContext instance, TextRenderer textRenderer, Text text, int x, int y, int width, int color, Operation original) { + @WrapOperation(method = "renderOverlayMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;drawStringWithBackdrop(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIII)V")) + private void sbt$drawTextWithBackgroundNoShadowWrap(GuiGraphics instance, Font textRenderer, Component text, int x, int y, int width, int color, Operation original) { if (SBTConfig.get().hudTweaks.noShadowActionBar) { - return ((SBTDrawContext) instance).sbt$drawTextWithBackgroundNoShadow(textRenderer, text, x, y, width, color); - } else { - return original.call(instance, textRenderer, text, x, y, width, color); - } - } - - - //?} else { - /*@WrapOperation(method = "renderOverlayMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithBackground(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIII)V")) - private void sbt$drawTextWithBackgroundNoShadowWrap(DrawContext instance, TextRenderer textRenderer, Text text, int x, int y, int width, int color, Operation original) { - if (SBTConfig.get().hudTweaks.noShadowActionBar) { - ((SBTDrawContext) instance).sbt$drawTextWithBackgroundNoShadow(textRenderer, text, x, y, width, color); + ((SBTGuiGraphics) instance).sbt$drawTextWithBackgroundNoShadow(textRenderer, text, x, y, width, color); } else { original.call(instance, textRenderer, text, x, y, width, color); } } - - *///?} - } - - diff --git a/src/main/java/wtf/cheeze/sbt/mixin/features/RecipeBookRedirectorMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/features/RecipeBookRedirectorMixin.java index 417fac4..849f7d3 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/features/RecipeBookRedirectorMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/features/RecipeBookRedirectorMixin.java @@ -18,11 +18,9 @@ */ package wtf.cheeze.sbt.mixin.features; -import net.minecraft.client.MinecraftClient; - -import net.minecraft.client.gui.screen.ingame.*; - -import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.screens.inventory.AbstractRecipeBookScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -32,19 +30,18 @@ import wtf.cheeze.sbt.utils.KillSwitch; import wtf.cheeze.sbt.utils.skyblock.SkyblockData; -@Mixin(RecipeBookScreen.class) +@Mixin(AbstractRecipeBookScreen.class) public abstract class RecipeBookRedirectorMixin { - @Unique private static final String FEATURE_ID = "recipe_book_redirect"; + @Inject(method = "method_64513", at = @At("HEAD"), cancellable = true) - private void sbt$onPressRBook(ButtonWidget button, CallbackInfo ci) { + private void sbt$onPressRBook(Button button, CallbackInfo ci) { if (SBTConfig.get().inventory.redirectRecipeBook && SkyblockData.inSB) { if (KillSwitch.shouldKill(FEATURE_ID)) { return; } ci.cancel(); - MinecraftClient.getInstance().getNetworkHandler().sendChatCommand("recipebook"); + Minecraft.getInstance().getConnection().sendCommand("recipebook"); } } } - diff --git a/src/main/java/wtf/cheeze/sbt/mixin/features/StatusEffectHiderMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/features/StatusEffectHiderMixin.java index b37e761..713307d 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/features/StatusEffectHiderMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/features/StatusEffectHiderMixin.java @@ -19,9 +19,9 @@ package wtf.cheeze.sbt.mixin.features; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.InventoryScreen; -import net.minecraft.client.gui.screen.ingame.StatusEffectsDisplay; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.InventoryScreen; +import net.minecraft.client.gui.screens.inventory.EffectsInInventory; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import wtf.cheeze.sbt.config.SBTConfig; @@ -29,17 +29,8 @@ @Mixin(InventoryScreen.class) public abstract class StatusEffectHiderMixin { - @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = - //? if <=1.21.5 { - "Lnet/minecraft/client/gui/screen/ingame/StatusEffectsDisplay;drawStatusEffects(Lnet/minecraft/client/gui/DrawContext;IIF)V" - //?} else { - /*"Lnet/minecraft/client/gui/screen/ingame/StatusEffectsDisplay;drawStatusEffects(Lnet/minecraft/client/gui/DrawContext;II)V" - *///?} - )) - private boolean sbt$onDrawStatusEffects(StatusEffectsDisplay instance, DrawContext context, int mouseX, int mouseY - //? if <=1.21.5 - , float tickDelta - ) { + @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/EffectsInInventory;renderEffects(Lnet/minecraft/client/gui/GuiGraphics;II)V")) + private boolean sbt$onDrawStatusEffects(EffectsInInventory instance, GuiGraphics guiGraphics, int mouseX, int mouseY) { return !SBTConfig.get().inventory.noRenderPotionHud || !SkyblockData.inSB; } -} \ No newline at end of file +} diff --git a/src/main/java/wtf/cheeze/sbt/mixin/hooks/HandledScreenMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/hooks/AbstractContainerScreenMixin.java similarity index 56% rename from src/main/java/wtf/cheeze/sbt/mixin/hooks/HandledScreenMixin.java rename to src/main/java/wtf/cheeze/sbt/mixin/hooks/AbstractContainerScreenMixin.java index 90104c7..a82fe90 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/hooks/HandledScreenMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/hooks/AbstractContainerScreenMixin.java @@ -18,14 +18,15 @@ */ package wtf.cheeze.sbt.mixin.hooks; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.gui.screen.ingame.InventoryScreen; -import net.minecraft.screen.BrewingStandScreenHandler; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.Slot; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.world.inventory.BrewingStandMenu; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -35,24 +36,22 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.events.DrawSlotEvents; import wtf.cheeze.sbt.features.overlay.BrewingStandOverlay; import wtf.cheeze.sbt.utils.KillSwitch; -import wtf.cheeze.sbt.utils.injected.SBTHandledScreen; +import wtf.cheeze.sbt.utils.injected.SBTAbstractContainerScreen; import wtf.cheeze.sbt.utils.render.Popup; -import java.util.Optional; - -@Mixin(HandledScreen.class) -public abstract class HandledScreenMixin extends Screen implements SBTHandledScreen { +import java.awt.event.MouseEvent; +@Mixin(AbstractContainerScreen.class) +public abstract class AbstractContainerScreenMixin extends Screen implements SBTAbstractContainerScreen { @Unique private static final String SBT$FEATURE_ID_POPUP = "handled_screen_popups"; @Shadow @Final - protected T handler; + protected T menu; @Unique @Nullable private Popup sbt$popup; @@ -61,6 +60,7 @@ public abstract class HandledScreenMixin extends Screen public @Nullable Popup sbt$getPopup() { return sbt$popup; } + @Unique @Override public void sbt$setPopup(@Nullable Popup popup) { if (KillSwitch.shouldKill(SBT$FEATURE_ID_POPUP)) { @@ -73,32 +73,31 @@ public abstract class HandledScreenMixin extends Screen this.sbt$popup = popup; } - @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/item/ItemStack;III)V")) - protected void sbt$beforeDrawItem(DrawContext context, Slot slot, CallbackInfo ci) { - DrawSlotEvents.BEFORE_ITEM.invoker().onDrawSlot(getTitle(), context, slot); + @Inject(method = "renderSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;renderItem(Lnet/minecraft/world/item/ItemStack;III)V")) + protected void sbt$beforeDrawItem(GuiGraphics guiGraphics, Slot slot, CallbackInfo ci) { + DrawSlotEvents.BEFORE_ITEM.invoker().onDrawSlot(getTitle(), guiGraphics, slot); } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - public void sbt$onMouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { + public void sbt$onMouseClicked(MouseButtonEvent event, boolean isDoubleClick, CallbackInfoReturnable cir) { if (this.sbt$popup != null) { - if (this.sbt$popup.mouseClicked(mouseX, mouseY, button)) { + if (this.sbt$popup.mouseClicked(event.x(), event.y(), event.button())) { cir.setReturnValue(true); } } } - @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - public void sbt$onKeyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { + public void sbt$onKeyPressed(KeyEvent event, CallbackInfoReturnable cir) { if (this.sbt$popup != null) { - if (this.sbt$popup.keyPressed(keyCode, scanCode, modifiers)) { + if (this.sbt$popup.keyPressed(event.key(), event.scancode(), event.modifiers())) { cir.setReturnValue(true); } } } // @Inject( -// method = /*? if <=1.21.5 {*//*"render"*//*?} else {*/ "renderMain"/*?}*/, +// method = "renderMain", // at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawSlots(Lnet/minecraft/client/gui/DrawContext;)V") // ) // protected void sbtBeforeDrawSlots(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { @@ -108,26 +107,15 @@ public abstract class HandledScreenMixin extends Screen // } // } - //? if <=1.21.5 { - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawSlots(Lnet/minecraft/client/gui/DrawContext;)V")) - protected void sbtBeforeDrawSlots(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + @Inject(method = "renderContents", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix3x2fStack;popMatrix()Lorg/joml/Matrix3x2fStack;")) + protected void sbt$endRenderMain(GuiGraphics guiGraphics, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (getTitle().getString().equals("Brewing Stand")) { - if (this.handler instanceof BrewingStandScreenHandler) return; - BrewingStandOverlay.render(handler.slots, context); + if (this.menu instanceof BrewingStandMenu) return; + BrewingStandOverlay.render(menu.slots, guiGraphics); } } - //?} else { - /*@Inject(method = "renderMain", at = @At(value = "INVOKE", target = "Lorg/joml/Matrix3x2fStack;popMatrix()Lorg/joml/Matrix3x2fStack;")) - protected void sbt$endRenderMain(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (getTitle().getString().equals("Brewing Stand")) { - if (this.handler instanceof BrewingStandScreenHandler) return; - BrewingStandOverlay.render(handler.slots, context); - } - } - *///?} - - private HandledScreenMixin(Text t) { + private AbstractContainerScreenMixin(Component t) { super(t); } } diff --git a/src/main/java/wtf/cheeze/sbt/mixin/hooks/MessageHandlerMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/hooks/ChatListenerMixin.java similarity index 78% rename from src/main/java/wtf/cheeze/sbt/mixin/hooks/MessageHandlerMixin.java rename to src/main/java/wtf/cheeze/sbt/mixin/hooks/ChatListenerMixin.java index 45a56cb..8f69f7a 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/hooks/MessageHandlerMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/hooks/ChatListenerMixin.java @@ -18,22 +18,21 @@ */ package wtf.cheeze.sbt.mixin.hooks; - -import net.minecraft.client.network.message.MessageHandler; -import net.minecraft.text.Text; +import net.minecraft.client.multiplayer.chat.ChatListener; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import wtf.cheeze.sbt.events.ChatEvents; -@Mixin(value = MessageHandler.class, priority = 100) -public abstract class MessageHandlerMixin { +@Mixin(value = ChatListener.class, priority = 100) +public abstract class ChatListenerMixin { /** * Powers {@link ChatEvents} */ - @Inject(order = 500, method = "onGameMessage", at = @At("HEAD")) - private void sbt$onGameMessage(Text message, boolean overlay, CallbackInfo ci) { + @Inject(order = 500, method = "handleSystemMessage", at = @At("HEAD")) + private void sbt$onGameMessage(Component message, boolean overlay, CallbackInfo ci) { if (overlay) { ChatEvents.ON_ACTION_BAR.invoker().onMessage(message); } else { diff --git a/src/main/java/wtf/cheeze/sbt/mixin/hooks/DrawContextMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/hooks/DrawContextMixin.java deleted file mode 100644 index 5b7bcce..0000000 --- a/src/main/java/wtf/cheeze/sbt/mixin/hooks/DrawContextMixin.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2024 MisterCheezeCake - * - * This file is part of SkyblockTweaks. - * - * SkyblockTweaks is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * SkyblockTweaks is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with SkyblockTweaks. If not, see . - */ -package wtf.cheeze.sbt.mixin.hooks; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.text.Text; -import net.minecraft.util.math.ColorHelper; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import wtf.cheeze.sbt.utils.injected.SBTDrawContext; - -import java.util.Objects; - -@Mixin(DrawContext.class) -public abstract class DrawContextMixin implements SBTDrawContext { - @Final - @Shadow - private MinecraftClient client; - - @Shadow - public abstract void fill(int x1, int y1, int x2, int y2, int color); - - //? if <=1.21.5 { - @Shadow - public abstract int drawText(TextRenderer textRenderer, Text text, int x, int y, int color, boolean shadow); - //?} else { - /*@Shadow - public abstract void drawText(TextRenderer textRenderer, Text text, int x, int y, int color, boolean shadow); - *///?} - - - @Override - public - //? if <=1.21.5 { - int - //?} else { - /*void - *///?} - - - sbt$drawTextWithBackgroundNoShadow(TextRenderer textRenderer, Text text, int x, int y, int width, int color) { - int i = this.client.options.getTextBackgroundColor(0.0F); - if (i != 0) { - Objects.requireNonNull(textRenderer); - this.fill(x -2, y-2 , x + width + 2, y + 9 + 2, ColorHelper./*? if >=1.21.3 {*/mix/*?} else {*//*Argb.mixColor*//*?}*/(i, color)); - } - //? if <=1.21.5 { - return - //?} - this.drawText(textRenderer, text, x, y, color, false); - } - - /** - * You may ask yourself, "Why is this not an accessor?" The answer is that I really did not want to deal with mixins only existing on one version, and this works fine - */ - //? if <=1.21.5 { - - @Shadow @Final private VertexConsumerProvider.Immediate vertexConsumers; - - @Override - public VertexConsumerProvider.Immediate sbt$getVertexConsumers() { - return this.vertexConsumers; - } - //?} -} diff --git a/src/main/java/wtf/cheeze/sbt/mixin/hooks/GuiGraphicsMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/hooks/GuiGraphicsMixin.java new file mode 100644 index 0000000..da9dcfc --- /dev/null +++ b/src/main/java/wtf/cheeze/sbt/mixin/hooks/GuiGraphicsMixin.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2024 MisterCheezeCake + * + * This file is part of SkyblockTweaks. + * + * SkyblockTweaks is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * SkyblockTweaks is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with SkyblockTweaks. If not, see . + */ +package wtf.cheeze.sbt.mixin.hooks; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.util.ARGB; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import wtf.cheeze.sbt.utils.injected.SBTGuiGraphics; + +import java.util.Objects; + +@Mixin(GuiGraphics.class) +public abstract class GuiGraphicsMixin implements SBTGuiGraphics { + @Final + @Shadow + private Minecraft minecraft; + + @Shadow + public abstract void fill(int x1, int y1, int x2, int y2, int color); + + @Shadow + public abstract void drawString(Font textRenderer, Component text, int x, int y, int color, boolean shadow); + + @Override + public void sbt$drawTextWithBackgroundNoShadow(Font textRenderer, Component text, int x, int y, int width, int color) { + int i = this.minecraft.options.getBackgroundColor(0.0F); + if (i != 0) { + Objects.requireNonNull(textRenderer); + this.fill(x -2, y-2 , x + width + 2, y + 9 + 2, ARGB./*? if >=1.21.3 {*/multiply/*?} else {*//*Argb.mixColor*//*?}*/(i, color)); + } + this.drawString(textRenderer, text, x, y, color, false); + } +} diff --git a/src/main/java/wtf/cheeze/sbt/mixin/hooks/InGameHudMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/hooks/InGameHudMixin.java deleted file mode 100644 index 04de5f2..0000000 --- a/src/main/java/wtf/cheeze/sbt/mixin/hooks/InGameHudMixin.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2024 MisterCheezeCake - * - * This file is part of SkyblockTweaks. - * - * SkyblockTweaks is free software: you can redistribute it - * and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either - * version 3 of the License, or (at your option) any later version. - * - * SkyblockTweaks is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with SkyblockTweaks. If not, see . - */ -package wtf.cheeze.sbt.mixin.hooks; - -import org.spongepowered.asm.mixin.Mixin; -import net.minecraft.client.gui.hud.InGameHud; - -//? if <=1.21.5 { -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.LayeredDrawer; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Final; -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.Slice; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import wtf.cheeze.sbt.config.SBTConfig; -import wtf.cheeze.sbt.events.HudRenderEvents; -import wtf.cheeze.sbt.utils.enums.Location; -import wtf.cheeze.sbt.utils.injected.SBTDrawContext; -import wtf.cheeze.sbt.utils.skyblock.SkyblockData; -//?} - -@Mixin(InGameHud.class) -public abstract class InGameHudMixin { - //? if <=1.21.5 { - @Final @Shadow - private LayeredDrawer layeredDrawer; - - // The following injectors power HudRenderEvents and were likewise taken from Skyblocker - @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 2)) - private LayeredDrawer.Layer sbt$afterMainHud(LayeredDrawer.Layer mainHudLayer) { - return (context, tickCounter) -> { - mainHudLayer.render(context, tickCounter); - HudRenderEvents.AFTER_MAIN_HUD.invoker().onRender(context, tickCounter); - }; - } - - @ModifyArg(method = "", slice = @Slice(from = @At(value = "NEW", target = "Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 2)), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/LayeredDrawer;addLayer(Lnet/minecraft/client/gui/LayeredDrawer$Layer;)Lnet/minecraft/client/gui/LayeredDrawer;", ordinal = 5)) - private LayeredDrawer.Layer sbt$beforeChat(LayeredDrawer.Layer beforeChatLayer) { - return (context, tickCounter) -> { - HudRenderEvents.BEFORE_CHAT.invoker().onRender(context, tickCounter); - beforeChatLayer.render(context, tickCounter); - }; - } - - @Inject(method = "", at = @At("TAIL")) - private void sbt$afterDrawersInitialized(CallbackInfo ci) { - this.layeredDrawer.addLayer(HudRenderEvents.LAST.invoker()::onRender); - } - //?} - - -} diff --git a/src/main/java/wtf/cheeze/sbt/mixin/hooks/MinecraftClientMixin.java b/src/main/java/wtf/cheeze/sbt/mixin/hooks/MinecraftMixin.java similarity index 68% rename from src/main/java/wtf/cheeze/sbt/mixin/hooks/MinecraftClientMixin.java rename to src/main/java/wtf/cheeze/sbt/mixin/hooks/MinecraftMixin.java index bee1d28..ef50065 100644 --- a/src/main/java/wtf/cheeze/sbt/mixin/hooks/MinecraftClientMixin.java +++ b/src/main/java/wtf/cheeze/sbt/mixin/hooks/MinecraftMixin.java @@ -18,20 +18,18 @@ */ package wtf.cheeze.sbt.mixin.hooks; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.DownloadingTerrainScreen; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import wtf.cheeze.sbt.events.WorldLoadEvents; - -@Mixin(MinecraftClient.class) -public abstract class MinecraftClientMixin { - @Inject(method = "joinWorld", at = @At("TAIL")) - private void sbt$onJoinWorld(ClientWorld world, DownloadingTerrainScreen.WorldEntryReason worldEntryReason, CallbackInfo ci) { - WorldLoadEvents.WORLD_LOAD.invoker().onWorldLoad(world, worldEntryReason); +@Mixin(Minecraft.class) +public abstract class MinecraftMixin { + @Inject(method = "setLevel", at = @At("TAIL")) + private void sbt$onJoinWorld(ClientLevel world, CallbackInfo ci) { + WorldLoadEvents.WORLD_LOAD.invoker().onWorldLoad(world); } } diff --git a/src/main/java/wtf/cheeze/sbt/utils/actionbar/ActionBarTransformer.java b/src/main/java/wtf/cheeze/sbt/utils/actionbar/ActionBarTransformer.java index e2a85ed..793b8c6 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/actionbar/ActionBarTransformer.java +++ b/src/main/java/wtf/cheeze/sbt/utils/actionbar/ActionBarTransformer.java @@ -22,7 +22,7 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.config.v2.api.SerialEntry; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.intellij.lang.annotations.Language; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -239,7 +239,7 @@ public static ActionBarData extractData(String actionBarText) { } - public static Text runTransformations(Text actionBarText) { + public static Component runTransformations(Component actionBarText) { try { String[] unmodifiedParts = actionBarText.getString().split(SEPERATOR3); StringBuilder newText = new StringBuilder(); @@ -347,7 +347,7 @@ public static Text runTransformations(Text actionBarText) { } } - return Text.of(newText.toString()); + return Component.nullToEmpty(newText.toString()); } catch (Exception e) { ErrorHandler.handle(e, "Error Parsing transforming bar text/*LOGONLY {}*/", ErrorLevel.WARNING, false, actionBarText.getString()); return actionBarText; diff --git a/src/main/java/wtf/cheeze/sbt/utils/enums/Location.java b/src/main/java/wtf/cheeze/sbt/utils/enums/Location.java index 59c8813..09f57d8 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/enums/Location.java +++ b/src/main/java/wtf/cheeze/sbt/utils/enums/Location.java @@ -18,12 +18,6 @@ */ package wtf.cheeze.sbt.utils.enums; - -import com.google.common.collect.ImmutableMap; -import com.ibm.icu.impl.locale.XCldrStub; -import net.minecraft.item.Items; - -import java.util.Collections; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/wtf/cheeze/sbt/utils/enums/Side.java b/src/main/java/wtf/cheeze/sbt/utils/enums/Side.java index fd2ebec..8c71c5d 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/enums/Side.java +++ b/src/main/java/wtf/cheeze/sbt/utils/enums/Side.java @@ -1,7 +1,7 @@ package wtf.cheeze.sbt.utils.enums; import dev.isxander.yacl3.api.NameableEnum; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.text.TextUtils; public enum Side implements NameableEnum { @@ -19,7 +19,7 @@ public int positionPopup(int screenX) { } @Override - public Text getDisplayName() { - return Text.literal(TextUtils.firstLetterUppercase(this.name().toLowerCase())); + public Component getDisplayName() { + return Component.literal(TextUtils.firstLetterUppercase(this.name().toLowerCase())); } } diff --git a/src/main/java/wtf/cheeze/sbt/utils/errors/ErrorHandler.java b/src/main/java/wtf/cheeze/sbt/utils/errors/ErrorHandler.java index 13d1945..30f9079 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/errors/ErrorHandler.java +++ b/src/main/java/wtf/cheeze/sbt/utils/errors/ErrorHandler.java @@ -20,7 +20,7 @@ import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.OptionDescription; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import wtf.cheeze.sbt.config.ConfigImpl; @@ -58,7 +58,7 @@ public static void handle(Exception e, String message, ErrorLevel level, boolean if (errorSet.contains(message)) return; errorSet.add(message); //LOGGER.info(String.valueOf(e.hashCode())); - var msg = Text.literal("Error: " + chatMessage + ". Click to copy the stack trace.").withColor(Colors.RED).styled(it -> it.withClickEvent(TextUtils.copyEvent(Arrays.toString(e.getStackTrace()))).withHoverEvent(TextUtils.showTextEvent(TextUtils.withColor("Click to copy the stack trace", Colors.CYAN)))); + var msg = Component.literal("Error: " + chatMessage + ". Click to copy the stack trace.").withColor(Colors.RED).withStyle(it -> it.withClickEvent(TextUtils.copyEvent(Arrays.toString(e.getStackTrace()))).withHoverEvent(TextUtils.showTextEvent(TextUtils.withColor("Click to copy the stack trace", Colors.CYAN)))); if (MessageManager.checkPlayer()) { MessageManager.send(msg); } else { @@ -97,8 +97,8 @@ private static CheezePair getMessages(String message) { public static Option getChatAll(ConfigImpl defaults, ConfigImpl config) { return Option.createBuilder() - .name(Text.translatable("sbt.config.general.errors.chatAll")) - .description(OptionDescription.of(Text.translatable("sbt.config.general.errors.chatAll.desc"))) + .name(Component.translatable("sbt.config.general.errors.chatAll")) + .description(OptionDescription.of(Component.translatable("sbt.config.general.errors.chatAll.desc"))) .controller(SBTConfig::generateBooleanController) .binding( defaults.chatAllErrors, diff --git a/src/main/java/wtf/cheeze/sbt/utils/injected/SBTHandledScreen.java b/src/main/java/wtf/cheeze/sbt/utils/injected/SBTAbstractContainerScreen.java similarity index 95% rename from src/main/java/wtf/cheeze/sbt/utils/injected/SBTHandledScreen.java rename to src/main/java/wtf/cheeze/sbt/utils/injected/SBTAbstractContainerScreen.java index b55166b..70085fc 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/injected/SBTHandledScreen.java +++ b/src/main/java/wtf/cheeze/sbt/utils/injected/SBTAbstractContainerScreen.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable; import wtf.cheeze.sbt.utils.render.Popup; -public interface SBTHandledScreen { + public interface SBTAbstractContainerScreen { @Nullable Popup sbt$getPopup(); void sbt$setPopup(@Nullable Popup popup); } diff --git a/src/main/java/wtf/cheeze/sbt/utils/injected/SBTDrawContext.java b/src/main/java/wtf/cheeze/sbt/utils/injected/SBTGuiGraphics.java similarity index 56% rename from src/main/java/wtf/cheeze/sbt/utils/injected/SBTDrawContext.java rename to src/main/java/wtf/cheeze/sbt/utils/injected/SBTGuiGraphics.java index 7943824..399e6ab 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/injected/SBTDrawContext.java +++ b/src/main/java/wtf/cheeze/sbt/utils/injected/SBTGuiGraphics.java @@ -18,21 +18,9 @@ */ package wtf.cheeze.sbt.utils.injected; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.text.Text; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; -public interface SBTDrawContext { - //? if <=1.21.5 { - int - //?} else { - /*void - *///?} - sbt$drawTextWithBackgroundNoShadow(TextRenderer textRenderer, Text text, int x, int y, int width, int color); - - /** - * You may ask yourself, "Why is this not an accessor?" The answer is that I really did not want to deal with mixins only existing on one version, and this works fine - */ - //? if <=1.21.5 - VertexConsumerProvider.Immediate sbt$getVertexConsumers(); +public interface SBTGuiGraphics { + void sbt$drawTextWithBackgroundNoShadow(Font textRenderer, Component text, int x, int y, int width, int color); } diff --git a/src/main/java/wtf/cheeze/sbt/utils/render/Popup.java b/src/main/java/wtf/cheeze/sbt/utils/render/Popup.java index 3d137c2..5f85ec5 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/render/Popup.java +++ b/src/main/java/wtf/cheeze/sbt/utils/render/Popup.java @@ -18,20 +18,20 @@ */ package wtf.cheeze.sbt.utils.render; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Renderable; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.hud.bounds.Bounds; import wtf.cheeze.sbt.utils.text.TextUtils; import java.util.List; -public interface Popup extends Drawable { - Identifier BACKGROUND = Identifier.of("skyblocktweaks", "gui/panel.png"); - Text SBT_FOOTER = TextUtils.withColor("SBT", Colors.SBT_GREEN); +public interface Popup extends Renderable { + ResourceLocation BACKGROUND = ResourceLocation.fromNamespaceAndPath("skyblocktweaks", "gui/panel.png"); + Component SBT_FOOTER = TextUtils.withColor("SBT", Colors.SBT_GREEN); int WIDTH = 80; int HEIGHT = 130; @@ -40,21 +40,21 @@ public interface Popup extends Drawable { int x(); int y(); - List childrenList(); + List childrenList(); Screen screen(); - default void renderBackground(DrawContext context) { - RenderUtils.drawTexture(context, BACKGROUND, x(), y(), WIDTH, HEIGHT, WIDTH, HEIGHT); + default void renderBackground(GuiGraphics guiGraphics) { + RenderUtils.drawTexture(guiGraphics, BACKGROUND, x(), y(), WIDTH, HEIGHT, WIDTH, HEIGHT); } - default void drawSBTFooter(DrawContext context, boolean shadow) { - RenderUtils.drawText(context, SBT_FOOTER, x() + WIDTH - 3 - RenderUtils.getStringWidth(SBT_FOOTER.getString()), y() + HEIGHT - 12, Colors.WHITE, shadow); + default void drawSBTFooter(GuiGraphics guiGraphics, boolean shadow) { + RenderUtils.drawText(guiGraphics, SBT_FOOTER, x() + WIDTH - 3 - RenderUtils.getStringWidth(SBT_FOOTER.getString()), y() + HEIGHT - 12, Colors.WHITE, shadow); } default void remove() { - screen().drawables.remove(this); + screen().renderables.remove(this); for (var child : childrenList()) { - screen().remove(child); + screen().removeWidget(child); } } default int centerX() { diff --git a/src/main/java/wtf/cheeze/sbt/utils/render/RenderUtils.java b/src/main/java/wtf/cheeze/sbt/utils/render/RenderUtils.java index 8fdaa0e..9684ace 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/render/RenderUtils.java +++ b/src/main/java/wtf/cheeze/sbt/utils/render/RenderUtils.java @@ -18,92 +18,37 @@ */ package wtf.cheeze.sbt.utils.render; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.ScreenRect; - - -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.navigation.ScreenRectangle; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.hud.bases.BarHud; - -//? if <=1.21.5 { -import net.minecraft.client.render.RenderLayer; -import wtf.cheeze.sbt.utils.injected.SBTDrawContext; -import net.minecraft.client.render.VertexConsumerProvider; -//?} - - -//? if >1.21.5 { -/*import net.minecraft.client.gl.RenderPipelines; -import net.minecraft.client.gui.tooltip.OrderedTextTooltipComponent; -import net.minecraft.client.gui.tooltip.HoveredTooltipPositioner; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTextTooltip; +import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; import java.util.stream.Collectors; -*///?} - import java.util.List; public class RenderUtils { - - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final Minecraft client = Minecraft.getInstance(); private static final int OUTLINE_LIGHT = 15728880; - public static void pushMatrix(DrawContext context) { - //? if <=1.21.5 { - context.getMatrices().push(); - //?} else { - /*context.getMatrices().pushMatrix(); - *///?} - } - - public static void beginScale(DrawContext context, float scale) { - pushMatrix(context); - //? if <=1.21.5 { - context.getMatrices().scale(scale, scale, 1.0f); - //?} else { - /*context.getMatrices().scale(scale, scale); - *///?} - } - public static void popMatrix(DrawContext context) { - //? if <=1.21.5 { - context.getMatrices().pop(); - //?} else { - /*context.getMatrices().popMatrix(); - *///?} + public static void pushMatrix(GuiGraphics guiGraphics) { + guiGraphics.pose().pushMatrix(); } - public static void drawTranslated(DrawContext context, float z, int layers, Runnable runnable) { - pushMatrix(context); - //? if <=1.21.5 { - context.getMatrices().translate(0, 0, z); - runnable.run(); - //?} else { -/*// for (int i = 0; i < layers; i++) { -// context.state.goUpLayer(); -// } - runnable.run(); -// for (int i = 0; i < layers; i++) { -// context.state.goDownLayer(); -// } - *///?} - popMatrix(context); + public static void beginScale(GuiGraphics guiGraphics, float scale) { + pushMatrix(guiGraphics); + guiGraphics.pose().scale(scale, scale); } - - public static void drawWithZ(DrawContext context, float z, Runnable runnable) { - //? if <=1.21.5 { - - pushMatrix(context); - context.getMatrices().translate(0, 0, z); - runnable.run(); - popMatrix(context); - //?} else { - /*runnable.run(); - *///?} + public static void popMatrix(GuiGraphics guiGraphics) { + guiGraphics.pose().popMatrix(); } - public static void drawNonBlockingTooltip(DrawContext context, Text text, int x, int y) { - drawNonBlockingTooltip(context, List.of(text), x, y); + public static void drawNonBlockingTooltip(GuiGraphics guiGraphics, Component text, int x, int y) { + drawNonBlockingTooltip(guiGraphics, List.of(text), x, y); } /** @@ -111,103 +56,90 @@ public static void drawNonBlockingTooltip(DrawContext context, Text text, int x, * a tooltip drawer, of which a context can have only one, is used. This method should be used * where a tooltip needs to be rendered without interfering with other tooltips. */ - public static void drawNonBlockingTooltip(DrawContext context, List text, int x, int y) { - //? if <=1.21.5 { - context.drawTooltip(client.textRenderer, text, x, y); - //?} else { - /*context.drawTooltipImmediately(client.textRenderer, text.stream().map(it -> new OrderedTextTooltipComponent(it.asOrderedText()) ).collect(Collectors.toList()), x, y, HoveredTooltipPositioner.INSTANCE, null); - *///?} + public static void drawNonBlockingTooltip(GuiGraphics guiGraphics, List text, int x, int y) { + guiGraphics.renderTooltip(client.font, text.stream().map(it -> new ClientTextTooltip(it.getVisualOrderText()) ).collect(Collectors.toList()), x, y, DefaultTooltipPositioner.INSTANCE, null); } - - - - public static void drawText(DrawContext context, Text text, int x, int y, int color, boolean shadow, float scale) { - beginScale(context, scale); - drawText(context, text, (int) (x/scale), (int) (y/scale), color, shadow); - popMatrix(context); + public static void drawScaledText(GuiGraphics guiGraphics, Component text, int x, int y, int color, boolean shadow, float scale) { + beginScale(guiGraphics, scale); + drawText(guiGraphics, text, (int) (x/scale), (int) (y/scale), color, shadow); + popMatrix(guiGraphics); } - public static void drawText(DrawContext context, Text text, int x, int y, int color, boolean shadow, float scale, boolean imHandlingTheScaleMyself) { - drawText(context, text, (int) (x/scale), (int) (y/scale), color, shadow); + + public static void drawText(GuiGraphics guiGraphics, Component text, int x, int y, int color, boolean shadow, float scale) { + drawText(guiGraphics, text, (int) (x/scale), (int) (y/scale), color, shadow); } - public static void drawText(DrawContext context, Text text, int x, int y, int color, boolean shadow) { - context.drawText(client.textRenderer, text, x, y, color, shadow); + + public static void drawText(GuiGraphics guiGraphics, Component text, int x, int y, int color, boolean shadow) { + guiGraphics.drawString(client.font, text, x, y, color, shadow); } - public static void drawTextWithOutline(DrawContext context, Text text, int x, int y, int color, int outlineColor) { - //? if <=1.21.5 { - client.textRenderer.drawWithOutline( - text.asOrderedText(), - x, y, color, outlineColor, - context.getMatrices().peek().getPositionMatrix(), - getVertexConsumers(context), - OUTLINE_LIGHT - ); - //?} else { - /*// We reimplement it ourselves post 1.21.6 because it's more annoying to make the vanilla method work with rendering changes - //TODO: Check if this works well and explore replacing it if possible - context.drawText(client.textRenderer, text, x -1, y -1, outlineColor, false); - context.drawText(client.textRenderer, text, x, y -1, outlineColor, false); - context.drawText(client.textRenderer, text, x + 1, y -1, outlineColor, false); - context.drawText(client.textRenderer, text, x + 1, y, outlineColor, false); - context.drawText(client.textRenderer, text, x + 1, y + 1, outlineColor, false); - context.drawText(client.textRenderer, text, x, y + 1, outlineColor, false); - context.drawText(client.textRenderer, text, x - 1, y + 1, outlineColor, false); - context.drawText(client.textRenderer, text, x - 1, y, outlineColor, false); - context.drawText(client.textRenderer, text, x, y, color, false); - *///?} + public static void drawTextWithOutline(GuiGraphics guiGraphics, Component text, int x, int y, int color, int outlineColor) { + // We reimplement it ourselves post 1.21.6 because it's more annoying to make the vanilla method work with rendering changes + //TODO: Check if this works well and explore replacing it if possible + guiGraphics.drawString(client.font, text, x -1, y -1, outlineColor, false); + guiGraphics.drawString(client.font, text, x, y -1, outlineColor, false); + guiGraphics.drawString(client.font, text, x + 1, y -1, outlineColor, false); + guiGraphics.drawString(client.font, text, x + 1, y, outlineColor, false); + guiGraphics.drawString(client.font, text, x + 1, y + 1, outlineColor, false); + guiGraphics.drawString(client.font, text, x, y + 1, outlineColor, false); + guiGraphics.drawString(client.font, text, x - 1, y + 1, outlineColor, false); + guiGraphics.drawString(client.font, text, x - 1, y, outlineColor, false); + guiGraphics.drawString(client.font, text, x, y, color, false); } - public static void drawTextWithOutline(DrawContext context, Text text, int x, int y, int color, int outlineColor, float scale) { - beginScale(context, scale); - drawTextWithOutline(context, text, (int) (x/scale), (int) (y/scale), color, outlineColor); - popMatrix(context); + + public static void drawScaledTextWithOutline(GuiGraphics guiGraphics, Component text, int x, int y, int color, int outlineColor, float scale) { + beginScale(guiGraphics, scale); + drawTextWithOutline(guiGraphics, text, (int) (x/scale), (int) (y/scale), color, outlineColor); + popMatrix(guiGraphics); } - public static void drawTextWithOutline(DrawContext context, Text text, int x, int y, int color, int outlineColor, float scale, boolean imHandlingTheScaleMyself) { - drawTextWithOutline(context, text, (int) (x/scale), (int) (y/scale), color, outlineColor); + + public static void drawTextWithOutline(GuiGraphics guiGraphics, Component text, int x, int y, int color, int outlineColor, float scale) { + drawTextWithOutline(guiGraphics, text, (int) (x/scale), (int) (y/scale), color, outlineColor); } - public static void drawCenteredText(DrawContext context, Text text, int x, int y, int color, boolean shadow, float scale) { + public static void drawCenteredText(GuiGraphics guiGraphics, Component text, int x, int y, int color, boolean shadow, float scale) { int width = (int) (getStringWidth(text) * scale); - drawText(context, text, x - width / 2, y, color, shadow, scale); + drawScaledText(guiGraphics, text, x - width / 2, y, color, shadow, scale); } - public static void drawCenteredText(DrawContext context, Text text, int x, int y, int color, boolean shadow) { + + public static void drawCenteredText(GuiGraphics guiGraphics, Component text, int x, int y, int color, boolean shadow) { int width = getStringWidth(text); - drawText(context, text, x - width / 2, y, color, shadow); + drawText(guiGraphics, text, x - width / 2, y, color, shadow); } - public static int getStringWidth(Text text) { - return client.textRenderer.getWidth(text); + public static int getStringWidth(Component text) { + return client.font.width(text); } + public static int getStringWidth(String text) { - return client.textRenderer.getWidth(text); + return client.font.width(text); } public static int getRelativeStringWidth(String text) { - return client.textRenderer.getWidth(text) / MinecraftClient.getInstance().getWindow().getScaledWidth(); + return client.font.width(text) / Minecraft.getInstance().getWindow().getGuiScaledWidth(); } + //TODO: Is this correct? - public static int getRelativeStringWidth(Text text) { - return client.textRenderer.getWidth(text) / MinecraftClient.getInstance().getWindow().getScaledWidth(); + public static int getRelativeStringWidth(Component text) { + return client.font.width(text) / Minecraft.getInstance().getWindow().getGuiScaledWidth(); } - public static void drawBorder(DrawContext context, int borderWidth, int color, int x, int y, int rectWidth, int rectHeight) { + public static void drawBorder(GuiGraphics guiGraphics, int borderWidth, int color, int x, int y, int rectWidth, int rectHeight) { // Top border - context.fill(x - borderWidth, y - borderWidth, x + rectWidth + borderWidth, y, color); + guiGraphics.fill(x - borderWidth, y - borderWidth, x + rectWidth + borderWidth, y, color); // Bottom border - context.fill(x - borderWidth, y + rectHeight, x + rectWidth + borderWidth, y + rectHeight + borderWidth, color); + guiGraphics.fill(x - borderWidth, y + rectHeight, x + rectWidth + borderWidth, y + rectHeight + borderWidth, color); // Left border - context.fill(x - borderWidth, y, x, y + rectHeight, color); + guiGraphics.fill(x - borderWidth, y, x, y + rectHeight, color); // Right border - context.fill(x + rectWidth, y, x + rectWidth + borderWidth, y + rectHeight, color); + guiGraphics.fill(x + rectWidth, y, x + rectWidth + borderWidth, y + rectHeight, color); } - - - - public static BreachResult isOffscreen(ScreenRect rect) { + public static BreachResult isOffscreen(ScreenRectangle rect) { var screenBounds = getScreenBounds(); return new BreachResult( rect.position().x() < 0, @@ -217,10 +149,9 @@ public static BreachResult isOffscreen(ScreenRect rect) { } public static float getRelativeWidth(int width) { - return width / MinecraftClient.getInstance().getWindow().getScaledWidth(); + return width / Minecraft.getInstance().getWindow().getGuiScaledWidth(); } - public record BreachResult(boolean left, boolean top, boolean right, boolean bottom) { public boolean breachesAll() { @@ -229,44 +160,15 @@ public boolean breachesAll() { } - - public static void drawTexture(DrawContext context, Identifier texture, int x, int y, int width, int height, int textureWidth, int textureHeight) { - //? if <=1.21.5 { - context.drawTexture(RenderLayer::getGuiTextured, texture, x, y, 0, 0, width, height, textureWidth, textureHeight); - //?} else { - /*context.drawTexture(RenderPipelines.GUI_TEXTURED, texture, x, y, 0, 0, width, height, textureWidth, textureHeight); - *///?} + public static void drawTexture(GuiGraphics guiGraphics, ResourceLocation texture, int x, int y, int width, int height, int textureWidth, int textureHeight) { + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, 0, 0, width, height, textureWidth, textureHeight); } - public static void drawBar(DrawContext context, Identifier texture, int x, int y, int width, int color) { - context.drawTexture( - //? if <=1.21.5 { - RenderLayer::getGuiTextured, - //?} else { - /*RenderPipelines.GUI_TEXTURED, - *///?} - texture, - x, - y, - 0, - 0, - width, - BarHud.BAR_HEIGHT, - BarHud.BAR_WIDTH, - BarHud.BAR_HEIGHT, - color - ); + public static void drawBar(GuiGraphics guiGraphics, ResourceLocation texture, int x, int y, int width, int color) { + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, texture, x, y, 0, 0, width, BarHud.BAR_HEIGHT, BarHud.BAR_WIDTH, BarHud.BAR_HEIGHT, color); } - //? if <=1.21.5 { - public static VertexConsumerProvider.Immediate getVertexConsumers(DrawContext context) { - return ((SBTDrawContext) context).sbt$getVertexConsumers(); - } - //?} - - public static ScreenBounds getScreenBounds() { return new ScreenBounds(); } - } diff --git a/src/main/java/wtf/cheeze/sbt/utils/render/ScreenBounds.java b/src/main/java/wtf/cheeze/sbt/utils/render/ScreenBounds.java index 9833494..cb64faa 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/render/ScreenBounds.java +++ b/src/main/java/wtf/cheeze/sbt/utils/render/ScreenBounds.java @@ -18,17 +18,17 @@ */ package wtf.cheeze.sbt.utils.render; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.util.Window; +import net.minecraft.client.Minecraft; +import com.mojang.blaze3d.platform.Window; public class ScreenBounds { public int width; public int height; ScreenBounds() { - Window window = MinecraftClient.getInstance().getWindow(); - this.width = window.getScaledWidth(); - this.height = window.getScaledHeight(); + Window window = Minecraft.getInstance().getWindow(); + this.width = window.getGuiScaledWidth(); + this.height = window.getGuiScaledHeight(); } } diff --git a/src/main/java/wtf/cheeze/sbt/utils/render/ScreenListener.java b/src/main/java/wtf/cheeze/sbt/utils/render/ScreenListener.java new file mode 100644 index 0000000..39f2d05 --- /dev/null +++ b/src/main/java/wtf/cheeze/sbt/utils/render/ScreenListener.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2026 MisterCheezeCake + * + * This file is part of SkyblockTweaks. + * + * SkyblockTweaks is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * SkyblockTweaks is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with SkyblockTweaks. If not, see . + */ +package wtf.cheeze.sbt.utils.render; + +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.narration.NarratableEntry; +import net.minecraft.client.gui.narration.NarrationElementOutput; + +/** + * An abstract blueprint for screen event listeners + */ +public abstract class ScreenListener implements GuiEventListener, NarratableEntry { + @Override + public void setFocused(boolean focused) { + // Do Nothing + } + + @Override + public boolean isFocused() { + return false; + } + + @Override + public NarrationPriority narrationPriority() { + return NarrationPriority.NONE; + } + + @Override + public void updateNarration(NarrationElementOutput narrationElementOutput) { + // Do Nothing + } +} diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/ItemUtils.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/ItemUtils.java index d18c56e..847c201 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/ItemUtils.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/ItemUtils.java @@ -18,19 +18,22 @@ */ package wtf.cheeze.sbt.utils.skyblock; -import com.mojang.authlib.properties.Property; +import com.google.gson.JsonParser; +import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.PropertyMap; -import net.minecraft.component.ComponentChanges; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.NbtComponent; -import net.minecraft.component.type.ProfileComponent; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.registry.Registries; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.Identifier; +import com.mojang.serialization.JsonOps; +import net.minecraft.core.component.DataComponentPatch; +import net.minecraft.core.component.DataComponents; +import net.minecraft.util.ExtraCodecs; +import net.minecraft.world.item.component.CustomData; +import net.minecraft.world.item.component.ResolvableProfile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.utils.errors.ErrorHandler; import wtf.cheeze.sbt.utils.errors.ErrorLevel; @@ -40,6 +43,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.UUID; public class ItemUtils { @@ -53,18 +57,18 @@ public static boolean isPickaxe(Item item) { } public static String getSkyblockId(ItemStack stack) { - var data = stack.get(DataComponentTypes.CUSTOM_DATA); + var data = stack.get(DataComponents.CUSTOM_DATA); if (data == null) return ""; - var customId = data.nbt.get("id"); + var customId = data.tag.get("id"); if (customId == null) return ""; return customId.asString().orElse(""); } public static String getReforge(ItemStack stack) { - var data = stack.get(DataComponentTypes.CUSTOM_DATA); + var data = stack.get(DataComponents.CUSTOM_DATA); if (data == null) return ""; - var reforge = data.nbt.get("modifier"); + var reforge = data.tag.get("modifier"); if (reforge == null) return ""; return reforge.asString().orElse(""); @@ -104,9 +108,9 @@ public static ItemStack getSkyblock(String minecraftID, String skyblockID, boole return new ItemStack( getRegistryEntry(minecraftID), count, - ComponentChanges.builder() - .add(DataComponentTypes.CUSTOM_DATA, getSkyblockItemNBT(skyblockID)) - .add(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, enchanted) + DataComponentPatch.builder() + .set(DataComponents.CUSTOM_DATA, getSkyblockItemNBT(skyblockID)) + .set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, enchanted) .build()); } @@ -121,10 +125,10 @@ public static ItemStack getHead(String skyblockID, boolean enchanted, String sku return new ItemStack( getRegistryEntry("player_head"), 1, - ComponentChanges.builder() - .add(DataComponentTypes.PROFILE, new ProfileComponent(Optional.empty(), Optional.empty(), headProps(SkullMap.get(skullName)))) - .add(DataComponentTypes.CUSTOM_DATA, getSkyblockItemNBT(skyblockID)) - .add(DataComponentTypes.ENCHANTMENT_GLINT_OVERRIDE, enchanted) + DataComponentPatch.builder() + .set(DataComponents.PROFILE, ResolvableProfile.createResolved(new GameProfile(UUID.randomUUID(), "sbt-skull", headProps(SkullMap.get(skullName))))) + .set(DataComponents.CUSTOM_DATA, getSkyblockItemNBT(skyblockID)) + .set(DataComponents.ENCHANTMENT_GLINT_OVERRIDE, enchanted) .build() ); } @@ -140,35 +144,36 @@ public static ItemStack justHead(String skullName) { return new ItemStack( getRegistryEntry("player_head"), 1, - ComponentChanges.builder() - .add(DataComponentTypes.PROFILE, new ProfileComponent(Optional.empty(), Optional.empty(), headProps(SkullMap.get(skullName)))) + DataComponentPatch.builder() + .set(DataComponents.PROFILE, ResolvableProfile.createResolved(new GameProfile(UUID.randomUUID(), "sbt-skull", headProps(SkullMap.get(skullName))))) .build() ); } + + private static PropertyMap headProps(String texture) { if (texture == null) { - return new PropertyMap(); + return PropertyMap.EMPTY; } try { - var props = new PropertyMap(); - props.put("textures", new Property("textures", texture)); - return props; + // Taken from Skyblocker + return ExtraCodecs.PROPERTY_MAP.parse(JsonOps.INSTANCE, JsonParser.parseString("[{\"name\":\"textures\",\"value\":\"" + texture + "\"}]")).getOrThrow(); } catch (Exception e) { ErrorHandler.handle(e, "Error while creating skull texture", ErrorLevel.WARNING); - return new PropertyMap(); + return PropertyMap.EMPTY; } } - private static NbtComponent getSkyblockItemNBT(String skyblockID) { - var tag = new NbtCompound(); + private static CustomData getSkyblockItemNBT(String skyblockID) { + var tag = new CompoundTag(); tag.putString("id", skyblockID); - return NbtComponent.of(tag); + return CustomData.of(tag); } - private static RegistryEntry getRegistryEntry(String minecraftID) { - return RegistryEntry.of(Registries.ITEM.get(Identifier.of(minecraftID))); + private static Holder getRegistryEntry(String minecraftID) { + return Holder.direct(BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(minecraftID))); } public static class SkullMap { diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/MiningData.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/MiningData.java index 1db92fc..0b04ac4 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/MiningData.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/MiningData.java @@ -18,11 +18,11 @@ */ package wtf.cheeze.sbt.utils.skyblock; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.hud.icon.HudIcon; import wtf.cheeze.sbt.hud.icon.Icons; -import wtf.cheeze.sbt.mixin.accessors.BossBarHudAccessor; +import wtf.cheeze.sbt.mixin.accessors.BossHealthOverlayAccessor; import wtf.cheeze.sbt.utils.CheezePair; import wtf.cheeze.sbt.utils.NumberUtils; import wtf.cheeze.sbt.utils.text.TextUtils; @@ -38,7 +38,7 @@ public class MiningData { - public static final MinecraftClient client = MinecraftClient.getInstance(); + public static final Minecraft client = Minecraft.getInstance(); private static final Pattern ACTIVE_EVENT = Pattern.compile("EVENT (?.+) ACTIVE IN (?.+) for (?\\d\\d):(?\\d\\d)"); private static final Pattern PASSIVE_EVENT = Pattern.compile("PASSIVE EVENT (?.+) RUNNING FOR (?\\d\\d):(?\\d\\d)"); @@ -180,7 +180,7 @@ public MiningData(TabListData data) { } } - var bossBars = ((BossBarHudAccessor) client.inGameHud.getBossBarHud()).getBossBars(); + var bossBars = ((BossHealthOverlayAccessor) client.gui.getBossOverlay()).getEvents(); for (var bar: bossBars.values()) { var name = TextUtils.removeFormatting(bar.getName().getString()); var passive = PASSIVE_EVENT.matcher(name); diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/ModAPI.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/ModAPI.java index c34ce70..aad2425 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/ModAPI.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/ModAPI.java @@ -21,20 +21,16 @@ import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.OptionDescription; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.hypixel.modapi.HypixelModAPI; import net.hypixel.modapi.fabric.event.HypixelModAPICallback; import net.hypixel.modapi.fabric.event.HypixelModAPIErrorCallback; import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; import net.hypixel.modapi.packet.impl.serverbound.ServerboundPartyInfoPacket; -import net.minecraft.text.Text; -import net.minecraft.util.Util; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; public class ModAPI { - - public static void registerEvents() { HypixelModAPI.getInstance().subscribeToEventPacket(ClientboundLocationPacket.class); HypixelModAPICallback.EVENT.register(SkyblockData::handlePacket); @@ -49,8 +45,8 @@ public static void requestPartyInfo() { public static Option getShowErrors(ConfigImpl defaults, ConfigImpl config) { return Option.createBuilder() - .name(Text.translatable("sbt.config.general.errors.modApi")) - .description(OptionDescription.of(Text.translatable("sbt.config.general.errors.modApi.desc"))) + .name(Component.translatable("sbt.config.general.errors.modApi")) + .description(OptionDescription.of(Component.translatable("sbt.config.general.errors.modApi.desc"))) .controller(SBTConfig::generateBooleanController) .binding( defaults.chatModApiErrors, @@ -58,8 +54,5 @@ public static Option getShowErrors(ConfigImpl defaults, ConfigImpl conf value -> config.chatModApiErrors = value ) .build(); - } - - } diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/ProfileManager.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/ProfileManager.java index 9e75e19..5f66094 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/ProfileManager.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/ProfileManager.java @@ -18,8 +18,8 @@ */ package wtf.cheeze.sbt.utils.skyblock; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; import wtf.cheeze.sbt.config.persistent.PersistentData; import wtf.cheeze.sbt.config.persistent.ProfileData; import wtf.cheeze.sbt.events.ChatEvents; @@ -64,7 +64,7 @@ public static void registerEvents() { //TODO: Switch to public API DrawSlotEvents.BEFORE_ITEM.register(((screenTitle, context, slot) -> { if (screenTitle.getString().equals("Your Skills")) { - var name = slot.getStack().getName().getString(); + var name = slot.getItem().getHoverName().getString(); var matcher = SKILL_PATTERN.matcher(name); if (matcher.matches()) { var skill = SkyblockUtils.strictCastStringToSkill(matcher.group(1)); @@ -75,8 +75,8 @@ public static void registerEvents() { profile.skillLevels.put(skill, level); } PersistentData.get().requestSave(); - } else if (screenTitle.getString().equals("Your Equipment and Stats") && slot.getStack() != null && slot.getStack().getName().getString().equals("Wisdom Stats")) { - var lines = slot.getStack().getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + } else if (screenTitle.getString().equals("Your Equipment and Stats") && slot.getItem() != null && slot.getItem().getHoverName().getString().equals("Wisdom Stats")) { + var lines = slot.getItem().getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); for (var line: lines) { var matcher = WISDOM_PATTERN.matcher(line.getString()); if (matcher.find()) { diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/QuiverData.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/QuiverData.java index 1bf8a24..b5e3206 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/QuiverData.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/QuiverData.java @@ -18,27 +18,27 @@ */ package wtf.cheeze.sbt.utils.skyblock; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.chat.Component; import java.util.regex.Pattern; public class QuiverData { private static final Pattern QUIVER_PATTERN = Pattern.compile("Active Arrow: (.+) \\((\\d+)\\)"); - public final Text arrowName; + public final Component arrowName; public final int arrowCount; - public static QuiverData DEFAULT = new QuiverData(Text.of("Placeholder Arrow"), 0); + public static QuiverData DEFAULT = new QuiverData(Component.nullToEmpty("Placeholder Arrow"), 0); QuiverData (ItemStack stack) { - var lines = stack.getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + var lines = stack.getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); if (lines.size() < 5) { arrowCount = 0; - arrowName = Text.of("Placeholder Arrow"); + arrowName = Component.nullToEmpty("Placeholder Arrow"); return; } var line = lines.get(4); @@ -46,15 +46,15 @@ public class QuiverData { if (matcher.matches()) { arrowCount = Integer.parseInt(matcher.group(2)); var type = line.getSiblings().get(1); - arrowName = Text.literal(type.getString().trim()).setStyle(type.getStyle()); + arrowName = Component.literal(type.getString().trim()).setStyle(type.getStyle()); } else { arrowCount = 0; - arrowName = Text.of("Placeholder Arrow"); + arrowName = Component.nullToEmpty("Placeholder Arrow"); } } - private QuiverData(Text arrowName, int arrowCount) { + private QuiverData(Component arrowName, int arrowCount) { this.arrowName = arrowName; this.arrowCount = arrowCount; } diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockData.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockData.java index aae4072..3e14d13 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockData.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockData.java @@ -25,10 +25,10 @@ import net.hypixel.modapi.packet.impl.clientbound.ClientboundHelloPacket; import net.hypixel.modapi.packet.impl.clientbound.ClientboundPartyInfoPacket; import net.hypixel.modapi.packet.impl.clientbound.event.ClientboundLocationPacket; -import net.minecraft.client.MinecraftClient; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.config.SBTConfig; import wtf.cheeze.sbt.events.ChatEvents; @@ -47,7 +47,7 @@ public class SkyblockData { - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final Minecraft client = Minecraft.getInstance(); private static final Pattern COOLDOWN_PATTERN = Pattern.compile("Cooldown: (\\d+)s"); private static final Pattern PICK_USED_PATTERN = Pattern.compile("You used your .* Pickaxe Ability!"); @@ -58,13 +58,13 @@ public static void registerEvents() { if (!inSB) return; if (client.player == null) return; for (int i = 0; i < 36; i++) { - var stack = client.player.getInventory().getStack(i); + var stack = client.player.getInventory().getItem(i); if (stack.isEmpty()) continue; - if (ItemUtils.isPickaxe(stack.getItem()) || stack.getName().getString().contains("Drill")) { - var lines = stack.getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT).lines(); + if (ItemUtils.isPickaxe(stack.getItem()) || stack.getHoverName().getString().contains("Drill")) { + var lines = stack.getOrDefault(DataComponents.LORE, ItemLore.EMPTY).lines(); if (lines.isEmpty()) continue; boolean shouldBreak = false; - for (Text line: lines) { + for (Component line: lines) { var matcher = COOLDOWN_PATTERN.matcher(line.getString()); if (!matcher.matches()) continue; try { @@ -213,7 +213,7 @@ public static void update(ActionBarData data) { Stats.pressure = data.pressure; Stats.pressureActive = true; } else { - if (!client.player.isInFluid()) { // This stops pressure from disappearing if an ability is used + if (!client.player.isInLiquid()) { // This stops pressure from disappearing if an ability is used Stats.pressure = 0; Stats.pressureActive = false; } @@ -235,7 +235,7 @@ public static void handlePacket(ClientboundHypixelPacket packet) { } case ClientboundPartyInfoPacket partyPacket -> { Party.inParty = partyPacket.isInParty(); - var myUUID = client.player.getUuid(); + var myUUID = client.player.getUUID(); if (myUUID == null || partyPacket.getMemberMap() == null || partyPacket.getMemberMap().get(myUUID) == null) { Party.leader = false; return; diff --git a/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockUtils.java b/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockUtils.java index 4abdd85..fdf0e1e 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockUtils.java +++ b/src/main/java/wtf/cheeze/sbt/utils/skyblock/SkyblockUtils.java @@ -18,12 +18,12 @@ */ package wtf.cheeze.sbt.utils.skyblock; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import wtf.cheeze.sbt.utils.enums.*; public class SkyblockUtils { - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final Minecraft client = Minecraft.getInstance(); private static final float SPRINT_MULT = 1.3f; public static Rarity castStringToRarity(String input) { @@ -89,11 +89,11 @@ public static Skill strictCastStringToSkill(String skill) { } public static boolean isThePlayerHoldingADrill() { - return MinecraftClient.getInstance().player.getMainHandStack().getName().getString().contains("Drill"); + return Minecraft.getInstance().player.getMainHandItem().getHoverName().getString().contains("Drill"); } public static boolean quiverActive() { - return client.player.getInventory().getStack(8).getName().getString().startsWith("Quiver"); + return client.player.getInventory().getItem(8).getHoverName().getString().startsWith("Quiver"); } @@ -102,7 +102,7 @@ public static boolean quiverActive() { */ public static QuiverData getQuiverData() { try { - if (quiverActive()) return new QuiverData(client.player.getInventory().getStack(8)); + if (quiverActive()) return new QuiverData(client.player.getInventory().getItem(8)); return QuiverData.DEFAULT; } catch (Exception e) { return QuiverData.DEFAULT; @@ -111,9 +111,9 @@ public static QuiverData getQuiverData() { public static float getSpeed() { - MinecraftClient mc = MinecraftClient.getInstance(); + Minecraft mc = Minecraft.getInstance(); // sprint = 1.3 x base speed - return mc.player.isSprinting() ? (mc.player.getMovementSpeed() / SPRINT_MULT) * 1000 : mc.player.getMovementSpeed() * 1000; + return mc.player.isSprinting() ? (mc.player.getSpeed() / SPRINT_MULT) * 1000 : mc.player.getSpeed() * 1000; } public static boolean inMiningIsland() { diff --git a/src/main/java/wtf/cheeze/sbt/utils/tablist/TabListParser.java b/src/main/java/wtf/cheeze/sbt/utils/tablist/TabListParser.java index b4df209..8809931 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/tablist/TabListParser.java +++ b/src/main/java/wtf/cheeze/sbt/utils/tablist/TabListParser.java @@ -19,9 +19,9 @@ package wtf.cheeze.sbt.utils.tablist; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.PlayerListEntry; -import wtf.cheeze.sbt.mixin.accessors.PlayerListHudAccessor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.PlayerInfo; +import wtf.cheeze.sbt.mixin.accessors.PlayerTabOverlayAccessor; import wtf.cheeze.sbt.utils.errors.ErrorHandler; import wtf.cheeze.sbt.utils.errors.ErrorLevel; import wtf.cheeze.sbt.utils.skyblock.SkyblockData; @@ -33,7 +33,7 @@ public class TabListParser { - private static final Comparator ORDER = PlayerListHudAccessor.getEntryOrdering(); + private static final Comparator ORDER = PlayerTabOverlayAccessor.getEntryOrdering(); /** @@ -45,13 +45,13 @@ public static TabListData parseTabList() { var data = new TabListData(); boolean inInfoColumn = false; WidgetType currentWidget = null; - var network = MinecraftClient.getInstance().getNetworkHandler(); + var network = Minecraft.getInstance().getConnection(); if (network == null) return TabListData.EMPTY; - for (PlayerListEntry entry : network.getPlayerList().stream().sorted(ORDER).toList()) { - var displayName = entry.getDisplayName(); + for (PlayerInfo entry : network.getOnlinePlayers().stream().sorted(ORDER).toList()) { + var displayName = entry.getTabListDisplayName(); if (displayName == null) continue; var content = displayName.getString(); - var profileName = entry.getProfile().getName(); + var profileName = entry.getProfile().name(); if (profileName.endsWith("a")) { // Column headers if (content.trim().equals("Info")) { inInfoColumn = true; @@ -71,7 +71,6 @@ public static TabListData parseTabList() { currentWidget = widget; data.widgetLines.putIfAbsent(currentWidget, new ArrayList<>()); data.widgetLines.get(currentWidget).add(content); - continue; } else { currentWidget = null; } diff --git a/src/main/java/wtf/cheeze/sbt/utils/text/MessageManager.java b/src/main/java/wtf/cheeze/sbt/utils/text/MessageManager.java index 6e50fc0..c10e41b 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/text/MessageManager.java +++ b/src/main/java/wtf/cheeze/sbt/utils/text/MessageManager.java @@ -1,33 +1,33 @@ package wtf.cheeze.sbt.utils.text; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.utils.render.Colors; public class MessageManager { - private static final MinecraftClient client = MinecraftClient.getInstance(); + private static final Minecraft client = Minecraft.getInstance(); - public static final Text PREFIX = TextUtils.join( + public static final Component PREFIX = TextUtils.join( TextUtils.withColor("[", Colors.GRAY), TextUtils.withColor("SkyblockTweaks", Colors.SBT_GREEN), TextUtils.withColor("] ", Colors.GRAY) ); - public static void send(Text message) { + public static void send(Component message) { if (!checkPlayer()) { SkyblockTweaks.LOGGER.info("Message Manager tried to send a message but the player was null"); return; } - client.player.sendMessage(TextUtils.join(PREFIX, message), false); + client.player.displayClientMessage(TextUtils.join(PREFIX, message), false); } public static void send(String message) { - send(Text.literal(message)); + send(Component.literal(message)); } public static void send(String message, int color) { - send(Text.literal(message).withColor(color)); + send(Component.literal(message).withColor(color)); } public static boolean checkPlayer() { diff --git a/src/main/java/wtf/cheeze/sbt/utils/text/NotificationHandler.java b/src/main/java/wtf/cheeze/sbt/utils/text/NotificationHandler.java index b357a98..e19a349 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/text/NotificationHandler.java +++ b/src/main/java/wtf/cheeze/sbt/utils/text/NotificationHandler.java @@ -19,15 +19,15 @@ package wtf.cheeze.sbt.utils.text; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.utils.errors.ErrorHandler; import wtf.cheeze.sbt.utils.errors.ErrorLevel; import java.util.ArrayList; public class NotificationHandler { - private static final ArrayList NOTIFICATION_QUEUE = new ArrayList(); + private static final ArrayList NOTIFICATION_QUEUE = new ArrayList<>(); public static void registerEvents() { ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> { @@ -40,18 +40,18 @@ public static void registerEvents() { ErrorHandler.handle(e, "Notification manager failed to sleep thread", ErrorLevel.WARNING); } client.execute(() -> { - for (Text message : NOTIFICATION_QUEUE) { - client.player.sendMessage(message, false); + for (Component message : NOTIFICATION_QUEUE) { + client.player.displayClientMessage(message, false); } NOTIFICATION_QUEUE.clear(); }); }).start(); }); } - public static void pushChat(Text message) { - if (MinecraftClient.getInstance().player == null) NOTIFICATION_QUEUE.add(message); + public static void pushChat(Component message) { + if (Minecraft.getInstance().player == null) NOTIFICATION_QUEUE.add(message); else { - MinecraftClient.getInstance().player.sendMessage(message, false); + Minecraft.getInstance().player.displayClientMessage(message, false); } } } diff --git a/src/main/java/wtf/cheeze/sbt/utils/text/TextUtils.java b/src/main/java/wtf/cheeze/sbt/utils/text/TextUtils.java index bdc98dd..1c42b8f 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/text/TextUtils.java +++ b/src/main/java/wtf/cheeze/sbt/utils/text/TextUtils.java @@ -18,7 +18,10 @@ */ package wtf.cheeze.sbt.utils.text; -import net.minecraft.text.*; +import net.minecraft.network.chat.ClickEvent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.HoverEvent; +import net.minecraft.network.chat.MutableComponent; import java.util.Arrays; @@ -28,58 +31,63 @@ public class TextUtils { public static String removeFormatting(String text) { return text.replaceAll("§[a-f0-9k-oA-FK-O]", ""); } - public static final Text SPACE = Text.literal(" "); - public static final Text NEW_LINE = Text.literal("\n"); + public static final Component SPACE = Component.literal(" "); + public static final Component NEW_LINE = Component.literal("\n"); - public static MutableText getTextThatLinksToURL(MutableText text, Text hovered, String url) { - return text.styled(style -> { + public static MutableComponent getTextThatLinksToURL(MutableComponent text, Component hovered, String url) { + return text.withStyle(style -> { style = style.withHoverEvent(showTextEvent(hovered)); style = style.withClickEvent(openURIEvent(url)); return style; }); } - public static Text getTextThatLinksToURL(String text, String hovered, String url) { - return getTextThatLinksToURL(Text.literal(text), Text.literal(hovered), url); + public static Component getTextThatLinksToURL(String text, String hovered, String url) { + return getTextThatLinksToURL(Component.literal(text), Component.literal(hovered), url); } - public static Text getTextThatRunsCommand(MutableText text, Text hovered, String command) { - return text.styled(style -> { + public static Component getTextThatRunsCommand(MutableComponent text, Component hovered, String command) { + return text.withStyle(style -> { style = style.withHoverEvent(showTextEvent(hovered)); style = style.withClickEvent(runCommandEvent(command)); return style; }); } - - public static Text getTextThatRunsCommand(String text, String hovered, String command) { - return getTextThatRunsCommand(Text.literal(text), Text.literal(hovered), command); + public static Component getTextThatRunsCommand(String text, String hovered, String command) { + return getTextThatRunsCommand(Component.literal(text), Component.literal(hovered), command); } - - public static MutableText withColor(String text, int color) { - return withColor(Text.literal(text), color); + public static MutableComponent withColor(String text, int color) { + return withColor(Component.literal(text), color); } - public static MutableText withColor(MutableText text, int color) { - return text.styled(style -> style.withColor(color)); + + public static MutableComponent withColor(MutableComponent text, int color) { + return text.withStyle(style -> style.withColor(color)); } - public static MutableText withBold(String text) { - return withBold(Text.literal(text)); + + public static MutableComponent withBold(String text) { + return withBold(Component.literal(text)); } - public static MutableText withBold(MutableText text) { - return text.styled(style -> style.withBold(true)); + + public static MutableComponent withBold(MutableComponent text) { + return text.withStyle(style -> style.withBold(true)); } - public static MutableText withItalic(MutableText text) { - return text.styled(style -> style.withItalic(true)); + + public static MutableComponent withItalic(MutableComponent text) { + return text.withStyle(style -> style.withItalic(true)); } - public static MutableText withUnderlined(MutableText text) { - return text.styled(style -> style.withUnderline(true)); + + public static MutableComponent withUnderlined(MutableComponent text) { + return text.withStyle(style -> style.withUnderlined(true)); } - public static MutableText withStrikethrough(MutableText text) { - return text.styled(style -> style.withStrikethrough(true)); + + public static MutableComponent withStrikethrough(MutableComponent text) { + return text.withStyle(style -> style.withStrikethrough(true)); } - public static MutableText withObfuscated(MutableText text) { - return text.styled(style -> style.withObfuscated(true)); + + public static MutableComponent withObfuscated(MutableComponent text) { + return text.withStyle(style -> style.withObfuscated(true)); } public static String firstLetterUppercase(String text) { @@ -96,20 +104,20 @@ public static String pascalCase(String text) { return result.toString().trim(); } - public static MutableText join(Text... texts) { - var result = Text.empty(); + public static MutableComponent join(Component... texts) { + var result = Component.empty(); for (var text : texts) { result = result.append(text); } return result; } - public static MutableText join(String... strings) { - return join(Arrays.stream(strings).map(Text::literal).toArray(Text[]::new)); + public static MutableComponent join(String... strings) { + return join(Arrays.stream(strings).map(Component::literal).toArray(Component[]::new)); } - public static MutableText joinLines(Text... lines) { - var result = Text.empty(); + public static MutableComponent joinLines(Component... lines) { + var result = Component.empty(); boolean first = true; for (var line : lines) { if (!first) { @@ -122,12 +130,10 @@ public static MutableText joinLines(Text... lines) { return result; } - public static MutableText joinLines(String... lines) { - return joinLines(Arrays.stream(lines).map(Text::literal).toArray(Text[]::new)); + public static MutableComponent joinLines(String... lines) { + return joinLines(Arrays.stream(lines).map(Component::literal).toArray(Component[]::new)); } - - public static ClickEvent copyEvent(String text) { return new ClickEvent.CopyToClipboard(text); } @@ -140,7 +146,7 @@ public static ClickEvent runCommandEvent(String command) { return new ClickEvent.RunCommand(command); } - public static HoverEvent showTextEvent(Text text) { + public static HoverEvent showTextEvent(Component text) { return new HoverEvent.ShowText(text); } } diff --git a/src/main/java/wtf/cheeze/sbt/utils/version/UpdateChecker.java b/src/main/java/wtf/cheeze/sbt/utils/version/UpdateChecker.java index c2c0b62..c0c5998 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/version/UpdateChecker.java +++ b/src/main/java/wtf/cheeze/sbt/utils/version/UpdateChecker.java @@ -21,8 +21,8 @@ import dev.isxander.yacl3.api.NameableEnum; import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.controller.EnumControllerBuilder; -import net.minecraft.MinecraftVersion; -import net.minecraft.text.Text; +import net.minecraft.DetectedVersion; +import net.minecraft.network.chat.Component; import wtf.cheeze.sbt.SkyblockTweaks; import wtf.cheeze.sbt.config.ConfigImpl; import wtf.cheeze.sbt.config.SBTConfig; @@ -85,11 +85,7 @@ public static void checkForUpdates() { } public static String mcVersionName() { - //? if <=1.21.5 { - return MinecraftVersion.CURRENT.getName(); - //?} else { - /*return MinecraftVersion.CURRENT.name(); - *///?} + return DetectedVersion.BUILT_IN.name(); } private static void internalRun(Map map) { @@ -163,8 +159,8 @@ public enum NotificationStream implements NameableEnum { NONE; @Override - public Text getDisplayName() { - return Text.literal(name()); + public Component getDisplayName() { + return Component.literal(name()); } } } diff --git a/src/main/java/wtf/cheeze/sbt/utils/version/Version.java b/src/main/java/wtf/cheeze/sbt/utils/version/Version.java index fac9dab..f30539c 100644 --- a/src/main/java/wtf/cheeze/sbt/utils/version/Version.java +++ b/src/main/java/wtf/cheeze/sbt/utils/version/Version.java @@ -79,11 +79,7 @@ public Version (String versionString) { } public static String getBuildMCVersion() { - //? if =1.21.5 { - return "1.21.5"; - //?} else if >1.21.5 { - /*return "1.21.6"; - *///?} + return "1.21.8"; // TODO: 1.21.10 } public String getVersionString() { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fb57d6e..2d7005f 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -36,16 +36,10 @@ ] }, "depends": { - "fabricloader": ">=0.15.11", + "fabricloader": ">=0.18.4", "minecraft": "${support_range}", "java": ">=21", "fabric-api": "*", "yet_another_config_lib_v3": "*" - }, - "custom": { - "loom:injected_interfaces": { - "net/minecraft/class_332": ["wtf/cheeze/sbt/utils/injected/SBTDrawContext"], - "net/minecraft/class_465": ["wtf/cheeze/sbt/utils/injected/SBTHandledScreen"] - } } } \ No newline at end of file diff --git a/src/main/resources/skyblocktweaks.accesswidener b/src/main/resources/skyblocktweaks.accesswidener new file mode 100644 index 0000000..d9155df --- /dev/null +++ b/src/main/resources/skyblocktweaks.accesswidener @@ -0,0 +1,21 @@ +accessWidener v2 named + +# Allowing certain screen methods to be accessed outside the screens for usage by the Popup system +accessible method net/minecraft/client/gui/screens/Screen addRenderableWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener; +accessible method net/minecraft/client/gui/screens/Screen addWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener; +accessible method net/minecraft/client/gui/screens/Screen removeWidget (Lnet/minecraft/client/gui/components/events/GuiEventListener;)V +accessible method net/minecraft/client/gui/screens/inventory/AbstractContainerScreen getHoveredSlot (DD)Lnet/minecraft/world/inventory/Slot; +accessible field net/minecraft/client/gui/screens/Screen renderables Ljava/util/List; +accessible field net/minecraft/client/gui/screens/inventory/AbstractContainerScreen leftPos I +accessible field net/minecraft/client/gui/screens/inventory/AbstractContainerScreen topPos I + +# Allows us to check the inventory key binding code to prevent popups from closing from text field presses +accessible field net/minecraft/client/KeyMapping key Lcom/mojang/blaze3d/platform/InputConstants$Key; + +# This field has a getter, but it's marked as deprecated, so this feels marginally safer +accessible field net/minecraft/world/item/component/CustomData tag Lnet/minecraft/nbt/CompoundTag; + +accessible field net/minecraft/client/gui/GuiGraphics guiRenderState Lnet/minecraft/client/gui/render/state/GuiRenderState; + +# For CompositionPopupScreen +accessible field net/minecraft/client/gui/components/AbstractSelectionList children Ljava/util/List; diff --git a/src/main/resources/skyblocktweaks.mixins.json b/src/main/resources/skyblocktweaks.mixins.json index 111b349..9d39a34 100644 --- a/src/main/resources/skyblocktweaks.mixins.json +++ b/src/main/resources/skyblocktweaks.mixins.json @@ -3,20 +3,19 @@ "package": "wtf.cheeze.sbt.mixin", "compatibilityLevel": "JAVA_21", "client": [ - "accessors.BossBarHudAccessor", - "accessors.PlayerListHudAccessor", + "accessors.BossHealthOverlayAccessor", + "accessors.PlayerTabOverlayAccessor", "accessors.YACLScreenAccessor", "features.BossBarHiderMixin", "features.HudElementHiderMixin", - "features.MouseLockMixin", + "features.MouseHandlerLockMixin", "features.NoShadowActionBarMixin", "features.RecipeBookRedirectorMixin", "features.StatusEffectHiderMixin", - "hooks.DrawContextMixin", - "hooks.HandledScreenMixin", - "hooks.InGameHudMixin", - "hooks.MessageHandlerMixin", - "hooks.MinecraftClientMixin" + "hooks.GuiGraphicsMixin", + "hooks.AbstractContainerScreenMixin", + "hooks.ChatListenerMixin", + "hooks.MinecraftMixin" ], "injectors": { "defaultRequire": 1 diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index f5fda46..3b24dad 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -1,14 +1,4 @@ -plugins { - id("dev.kikugie.stonecutter") -} -stonecutter active "1.21.5" /* [SC] DO NOT EDIT */ - -stonecutter registerChiseled tasks.register("chiseledBuild", stonecutter.chiseled) { - group = "chiseled" - ofTask("build") -} - -stonecutter registerChiseled tasks.register("chiseledRunClient", stonecutter.chiseled) { - group = "chiseled" - ofTask("runClient") -} +//plugins { +// id("dev.kikugie.stonecutter") +//} +//stonecutter active "1.21.8" /* [SC] DO NOT EDIT */ diff --git a/versions/1.21.5/gradle.properties b/versions/1.21.5/gradle.properties deleted file mode 100644 index 5b5d0b6..0000000 --- a/versions/1.21.5/gradle.properties +++ /dev/null @@ -1,11 +0,0 @@ - -loader_version=0.16.10 -fabric_version=0.128.0+1.21.5 -modmenu_version=14.0.0-rc.2 -modapi_fabric_version=1.0.1+build.1+mc1.21 -yacl_version=3.7.1+1.21.5-fabric - -minecraft_version=1.21.5 -yarn_mappings=1.21.5+build.1 -rei_version=19.0.806 -support_range=1.21.5 diff --git a/versions/1.21.5/src/main/resources/skyblocktweaks.accesswidener b/versions/1.21.5/src/main/resources/skyblocktweaks.accesswidener deleted file mode 100644 index c93f10f..0000000 --- a/versions/1.21.5/src/main/resources/skyblocktweaks.accesswidener +++ /dev/null @@ -1,16 +0,0 @@ -accessWidener v2 named - -# Allowing certain screen methods to be accessed outside the screens for usage by the Popup system -accessible method net/minecraft/client/gui/screen/Screen addDrawableChild (Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element; -accessible method net/minecraft/client/gui/screen/Screen addSelectableChild (Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element; -accessible method net/minecraft/client/gui/screen/Screen remove (Lnet/minecraft/client/gui/Element;)V -accessible method net/minecraft/client/gui/screen/ingame/HandledScreen getSlotAt (DD)Lnet/minecraft/screen/slot/Slot; -accessible field net/minecraft/client/gui/screen/Screen drawables Ljava/util/List; -accessible field net/minecraft/client/gui/screen/ingame/HandledScreen x I -accessible field net/minecraft/client/gui/screen/ingame/HandledScreen y I - -# Allows us to check the inventory key binding code to prevent popups from closing from text field presses -accessible field net/minecraft/client/option/KeyBinding boundKey Lnet/minecraft/client/util/InputUtil$Key; - -# This field has a getter, but it's marked as deprecated, so this feels marginally safer -accessible field net/minecraft/component/type/NbtComponent nbt Lnet/minecraft/nbt/NbtCompound; \ No newline at end of file diff --git a/versions/1.21.6/gradle.properties b/versions/1.21.6/gradle.properties deleted file mode 100644 index 39606bf..0000000 --- a/versions/1.21.6/gradle.properties +++ /dev/null @@ -1,9 +0,0 @@ -minecraft_version=1.21.6 -yarn_mappings=1.21.6+build.1 -fabric_version=0.128.0+1.21.6 - -modapi_fabric_version=1.0.1+build.1+mc1.21 -modmenu_version=15.0.0-beta.3 -yacl_version=3.7.1+1.21.6-fabric -rei_version=19.0.806 -support_range=>=1.21.6 \ No newline at end of file diff --git a/versions/1.21.6/src/main/resources/skyblocktweaks.accesswidener b/versions/1.21.6/src/main/resources/skyblocktweaks.accesswidener deleted file mode 100644 index 98273a2..0000000 --- a/versions/1.21.6/src/main/resources/skyblocktweaks.accesswidener +++ /dev/null @@ -1,18 +0,0 @@ -accessWidener v2 named - -# Allowing certain screen methods to be accessed outside the screens for usage by the Popup system -accessible method net/minecraft/client/gui/screen/Screen addDrawableChild (Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element; -accessible method net/minecraft/client/gui/screen/Screen addSelectableChild (Lnet/minecraft/client/gui/Element;)Lnet/minecraft/client/gui/Element; -accessible method net/minecraft/client/gui/screen/Screen remove (Lnet/minecraft/client/gui/Element;)V -accessible method net/minecraft/client/gui/screen/ingame/HandledScreen getSlotAt (DD)Lnet/minecraft/screen/slot/Slot; -accessible field net/minecraft/client/gui/screen/Screen drawables Ljava/util/List; -accessible field net/minecraft/client/gui/screen/ingame/HandledScreen x I -accessible field net/minecraft/client/gui/screen/ingame/HandledScreen y I - -# Allows us to check the inventory key binding code to prevent popups from closing from text field presses -accessible field net/minecraft/client/option/KeyBinding boundKey Lnet/minecraft/client/util/InputUtil$Key; - -# This field has a getter, but it's marked as deprecated, so this feels marginally safer -accessible field net/minecraft/component/type/NbtComponent nbt Lnet/minecraft/nbt/NbtCompound; - -accessible field net/minecraft/client/gui/DrawContext state Lnet/minecraft/client/gui/render/state/GuiRenderState;