From b5df47ce6de807a25b472641937d3bc1ad8036c1 Mon Sep 17 00:00:00 2001 From: BluSpring Date: Mon, 20 Jul 2026 02:57:39 +0800 Subject: [PATCH] Update to 26.1.2 --- build.gradle.kts | 23 ++++------ gradle.properties | 4 +- gradle/libs.versions.toml | 8 ++-- gradle/wrapper/gradle-wrapper.properties | 2 +- .../asodev/islandutils/IslandUtilsClient.java | 14 ++++--- .../islandutils/mixins/BossUIMixin.java | 17 +++++--- .../mixins/cosmetics/ChestScreenMixin.java | 42 ++++++++++--------- .../islandutils/mixins/cosmetics/UIMixin.java | 33 ++++++++------- .../crafting/RemnantHighlightMixin.java | 19 +++++---- .../crafting/ScavengingScreenMixin.java | 17 ++++---- .../mixins/network/PacketListenerMixin.java | 31 ++++++++------ .../mixins/notif/ServerSelectionMixin.java | 29 ++++++------- .../mixins/plobby/PlobbyChestMixin.java | 15 +++---- .../mixins/ui/ChatScreenMixin.java | 29 ++++++------- .../ui/FishingUpgradeHighlightMixin.java | 11 ++--- .../modules/FishingUpgradeIcon.java | 9 ++-- .../modules/cosmetics/CosmeticUI.java | 11 ++--- .../modules/crafting/CraftingToast.java | 27 ++++++------ .../crafting/state/CraftingNotifier.java | 20 +++++---- .../modules/scavenging/Scavenging.java | 11 ++--- .../scavenging/ScavengingItemHandler.java | 15 +++---- .../modules/splits/ui/DojoSplitUI.java | 23 +++++----- .../modules/splits/ui/SplitUI.java | 13 +++--- .../net/asodev/islandutils/state/Game.java | 9 ++-- .../islandutils/state/MccIslandState.java | 7 ++-- .../asodev/islandutils/util/ChatUtils.java | 20 +++++---- .../islandutils/util/IslandUtilsCommand.java | 8 ++-- .../util/PlainTextButtonNoShadow.java | 9 ++-- .../islandutils/util/debug/GameOverride.java | 7 ++-- src/main/resources/fabric.mod.json | 8 ++-- src/main/resources/islandutils.accesswidener | 2 +- src/main/resources/islandutils.mixins.json | 3 +- 32 files changed, 269 insertions(+), 227 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index fa011322..9e99cb98 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,11 +1,11 @@ plugins { - id("fabric-loom") version "1.14-SNAPSHOT" + id("net.fabricmc.fabric-loom") version "1.17-SNAPSHOT" id("maven-publish") } version = "${properties["mod_version"]!!}${extraVersion()}" group = properties["maven_group"]!! -val targetJavaVersion = 21 +val targetJavaVersion = 25 repositories { mavenCentral() @@ -33,26 +33,25 @@ repositories { dependencies { // Minecraft minecraft("com.mojang:minecraft:${properties["minecraft_version"]!!}") - mappings(loom.officialMojangMappings()) // Fabric - modImplementation("net.fabricmc:fabric-loader:${properties["loader_version"]!!}") - modImplementation(libs.fabric.api) + implementation("net.fabricmc:fabric-loader:${properties["loader_version"]!!}") + implementation(libs.fabric.api) // Libraries - modApi(libs.yacl) { + api(libs.yacl) { exclude(group = "com.twelvemonkeys.common") exclude(group = "com.twelvemonkeys.imageio") } - modApi(libs.modmenu) - modApi(libs.noxesium.fabric) + api(libs.modmenu) + api(libs.noxesium.fabric) include(libs.discord.game.sdk4j) implementation(libs.discord.game.sdk4j) } java { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 } tasks.jar { @@ -72,10 +71,6 @@ tasks.processResources { loom { accessWidenerPath.set(file("src/main/resources/islandutils.accesswidener")) - - mixin { - defaultRefmapName.set("islandutils.refmap.json") - } } fun extraVersion(): String { diff --git a/gradle.properties b/gradle.properties index 3037e05c..1b1727fc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,8 +4,8 @@ org.gradle.parallel=true # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.11 -loader_version=0.18.3 +minecraft_version=26.1.2 +loader_version=0.19.2 # Mod Properties mod_version=1.7.4 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f0eb1430..3a07140c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,8 @@ [versions] -fabric-api = "0.140.2+1.21.11" -yacl = "3.8.1+1.21.11-fabric" -modmenu = "17.0.0-beta.1" -noxesium = "3.0.0" +fabric-api = "0.155.2+26.1.2" +yacl = "3.9.5+26.1-fabric" +modmenu = "18.0.0" +noxesium = "3.1.1" discord-game-sdk4j = "v1.0.0" [libraries] diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bad7c246..a351597e 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-9.2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/net/asodev/islandutils/IslandUtilsClient.java b/src/main/java/net/asodev/islandutils/IslandUtilsClient.java index ffca4a05..e6a78c10 100644 --- a/src/main/java/net/asodev/islandutils/IslandUtilsClient.java +++ b/src/main/java/net/asodev/islandutils/IslandUtilsClient.java @@ -14,13 +14,15 @@ import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.IslandUtilsCommand; import net.asodev.islandutils.util.Utils; +import org.lwjgl.glfw.GLFW; + +import net.minecraft.client.KeyMapping; +import net.minecraft.resources.Identifier; + import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.minecraft.client.KeyMapping; -import net.minecraft.resources.Identifier; -import org.lwjgl.glfw.GLFW; +import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper; @Environment(EnvType.CLIENT) public class IslandUtilsClient implements ClientModInitializer { @@ -30,13 +32,13 @@ public class IslandUtilsClient implements ClientModInitializer { @Override public void onInitializeClient() { - openPlobbyKey = KeyBindingHelper.registerKeyBinding(new KeyMapping( + openPlobbyKey = KeyMappingHelper.registerKeyMapping(new KeyMapping( "key.islandutils.plobbymenu", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_K, keyCategory )); - disguiseKeyBind = KeyBindingHelper.registerKeyBinding(new KeyMapping( + disguiseKeyBind = KeyMappingHelper.registerKeyMapping(new KeyMapping( "key.islandutils.disguise", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_N, diff --git a/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java b/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java index 2ec4c9a9..26d448a2 100644 --- a/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java @@ -1,10 +1,13 @@ package net.asodev.islandutils.mixins; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; + import net.asodev.islandutils.modules.splits.ui.SplitUI; import net.asodev.islandutils.state.MccIslandState; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.BossHealthOverlay; -import net.minecraft.client.gui.components.LerpingBossEvent; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -13,7 +16,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.*; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.components.BossHealthOverlay; +import net.minecraft.client.gui.components.LerpingBossEvent; /** * We're using a mixin rather than HudRenderCallback because @@ -30,8 +35,8 @@ public class BossUIMixin { @Unique private static final List QUEUE_BOSSBAR_PATTERNS = List.of("(((((", "TELEPORTING (", "TELEPORTED!"); - @Inject(method = "render", at = @At("HEAD")) - private void render(GuiGraphics guiGraphics, CallbackInfo ci) { + @Inject(method = "extractRenderState", at = @At("HEAD")) + private void render(GuiGraphicsExtractor guiGraphics, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; List list = new ArrayList<>(events.values()); diff --git a/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java b/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java index c7be10e2..53527dc2 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java @@ -1,5 +1,9 @@ package net.asodev.islandutils.mixins.cosmetics; +import static net.asodev.islandutils.util.Utils.getCustomItemID; + +import java.util.Objects; + import com.mojang.blaze3d.platform.InputConstants; import net.asodev.islandutils.modules.cosmetics.Cosmetic; import net.asodev.islandutils.modules.cosmetics.CosmeticSlot; @@ -8,9 +12,17 @@ import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.IslandSoundEvents; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.input.KeyEvent; @@ -23,22 +35,12 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.ContainerInput; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.Objects; - -import static net.asodev.islandutils.util.Utils.getCustomItemID; +import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper; @Mixin(AbstractContainerScreen.class) @@ -60,8 +62,8 @@ private void onInit(AbstractContainerMenu abstractContainerMenu, Inventory inven CosmeticState.accessorySlot.setOriginal(new CosmeticSlot(player.getInventory().getItem(40))); } - @Inject(method = "renderSlot", at = @At("TAIL")) - private void renderSlot(GuiGraphics guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { + @Inject(method = "extractSlot", at = @At("TAIL")) + private void renderSlot(GuiGraphicsExtractor guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { if (!CosmeticState.shouldShowCosmeticPreview()) return; if (!slot.hasItem()) return; @@ -76,8 +78,8 @@ private void renderSlot(GuiGraphics guiGraphics, Slot slot, int i, int j, Callba } } - @Inject(method = "render", at = @At("TAIL")) - private void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo ci) { + @Inject(method = "extractRenderState", at = @At("TAIL")) + private void render(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a, CallbackInfo ci) { if (hoveredSlot != null && hoveredSlot.hasItem()) { ItemStack hoveredItem = hoveredSlot.getItem(); if (IslandOptions.getCosmetics().isShowOnHover()) { @@ -130,7 +132,7 @@ private void mouseReleased(MouseButtonEvent mouseButtonEvent, CallbackInfoReturn } @Inject(method = "slotClicked", at = @At("HEAD")) - private void slotClicked(Slot slot, int i, int j, ClickType clickType, CallbackInfo ci) { + private void slotClicked(Slot slot, int slotId, int buttonNum, ContainerInput containerInput, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; if (!MccIslandState.getGame().isHubGame()) return; @@ -150,7 +152,7 @@ private void slotClicked(Slot slot, int i, int j, ClickType clickType, CallbackI private void triggerPreviewClicked(int keyCode) { if (!CosmeticState.shouldShowCosmeticPreview()) return; if (hoveredSlot == null || !hoveredSlot.hasItem()) return; - InputConstants.Key previewBind = KeyBindingHelper.getBoundKeyOf(minecraft.options.keyPickItem); + InputConstants.Key previewBind = KeyMappingHelper.getBoundKeyOf(minecraft.options.keyPickItem); if (keyCode == previewBind.getValue()) { ItemStack item = hoveredSlot.getItem(); if (item.is(Items.GHAST_TEAR) || item.is(Items.AIR)) return; diff --git a/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java b/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java index 0b382ab2..c11cdc6e 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java @@ -1,5 +1,7 @@ package net.asodev.islandutils.mixins.cosmetics; +import static net.asodev.islandutils.modules.cosmetics.CosmeticState.applyColor; + import net.asodev.islandutils.mixins.accessors.WalkAnimStateAccessor; import net.asodev.islandutils.modules.cosmetics.CosmeticState; import net.asodev.islandutils.modules.cosmetics.CosmeticType; @@ -7,8 +9,13 @@ import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.options.categories.CosmeticsOptions; import net.asodev.islandutils.util.FontUtils; +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 net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.network.chat.Component; @@ -17,12 +24,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ChestMenu; import net.minecraft.world.item.ItemStack; -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 static net.asodev.islandutils.modules.cosmetics.CosmeticState.applyColor; @Mixin(ContainerScreen.class) public abstract class UIMixin extends AbstractContainerScreen { @@ -30,8 +31,8 @@ public UIMixin(ChestMenu abstractContainerMenu, Inventory inventory, Component c super(abstractContainerMenu, inventory, component); } - @Inject(method = "render", at = @At("TAIL")) - public void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo ci) { + @Inject(method = "extractBackground", at = @At("TAIL")) + public void render(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a, CallbackInfo ci) { if (!CosmeticState.shouldShowCosmeticPreview()) return; CosmeticsOptions options = IslandOptions.getCosmetics(); @@ -92,7 +93,7 @@ public void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo int y = (this.height / 2) + size; CosmeticUI.renderPlayerInInventory( - guiGraphics, + graphics, x - bounds, // x0 (this.height / 2) - bounds, // y0 x + bounds, // x1 @@ -113,14 +114,14 @@ public void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo y += 8; int backgroundColor = 0x60000000; - guiGraphics.fill(x-(size / 2) - 2, y, x+(size / 2)+2, y + 19, backgroundColor); - guiGraphics.drawString(this.font, FontUtils.TOOLTIP_HAT, x-(size / 2) + 4, y + 6, 16777215 | 255 << 24); - guiGraphics.renderItem(this.minecraft.player, hatSlot, itemPos, y+2, x + y * this.imageWidth); + graphics.fill(x-(size / 2) - 2, y, x+(size / 2)+2, y + 19, backgroundColor); + graphics.text(this.font, FontUtils.TOOLTIP_HAT, x-(size / 2) + 4, y + 6, 16777215 | 255 << 24); + graphics.item(this.minecraft.player, hatSlot, itemPos, y+2, x + y * this.imageWidth); y += 19 + 4; - guiGraphics.fill(x-(size / 2) - 2, y, x+(size / 2)+2, y + 19, backgroundColor); - guiGraphics.drawString(this.font, FontUtils.TOOLTIP_ACCESSORY, x-(size / 2) + 4, y + 6, 16777215 | 255 << 24); - guiGraphics.renderItem(this.minecraft.player, accSlot, itemPos, y+2, x + y * this.imageWidth); + graphics.fill(x-(size / 2) - 2, y, x+(size / 2)+2, y + 19, backgroundColor); + graphics.text(this.font, FontUtils.TOOLTIP_ACCESSORY, x-(size / 2) + 4, y + 6, 16777215 | 255 << 24); + graphics.item(this.minecraft.player, accSlot, itemPos, y+2, x + y * this.imageWidth); } private void checkInspect() { diff --git a/src/main/java/net/asodev/islandutils/mixins/crafting/RemnantHighlightMixin.java b/src/main/java/net/asodev/islandutils/mixins/crafting/RemnantHighlightMixin.java index 9f64bd76..d8916bb5 100644 --- a/src/main/java/net/asodev/islandutils/mixins/crafting/RemnantHighlightMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/crafting/RemnantHighlightMixin.java @@ -1,25 +1,26 @@ package net.asodev.islandutils.mixins.crafting; +import java.util.List; + import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.Utils; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.network.chat.Component; -import net.minecraft.util.ARGB; -import net.minecraft.world.inventory.Slot; 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 java.util.List; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.network.chat.Component; +import net.minecraft.util.ARGB; +import net.minecraft.world.inventory.Slot; @Mixin(AbstractContainerScreen.class) public class RemnantHighlightMixin { - @Inject(method = "renderSlot", at = @At("HEAD")) - private void renderSlot(GuiGraphics guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { + @Inject(method = "extractSlot", at = @At("HEAD")) + private void renderSlot(GuiGraphicsExtractor guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; if (!slot.hasItem()) return; diff --git a/src/main/java/net/asodev/islandutils/mixins/crafting/ScavengingScreenMixin.java b/src/main/java/net/asodev/islandutils/mixins/crafting/ScavengingScreenMixin.java index 46ba0941..f3414d06 100644 --- a/src/main/java/net/asodev/islandutils/mixins/crafting/ScavengingScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/crafting/ScavengingScreenMixin.java @@ -3,16 +3,17 @@ import net.asodev.islandutils.modules.scavenging.Scavenging; import net.asodev.islandutils.modules.scavenging.ScavengingTotalList; import net.asodev.islandutils.state.MccIslandState; -import net.minecraft.client.gui.GuiGraphics; +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 net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.ChestMenu; -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; @Mixin(ContainerScreen.class) public abstract class ScavengingScreenMixin extends AbstractContainerScreen { @@ -20,11 +21,11 @@ public ScavengingScreenMixin(ChestMenu abstractContainerMenu, Inventory inventor super(abstractContainerMenu, inventory, component); } - @Inject(method = "renderBg", at = @At("TAIL")) - public void renderBg(GuiGraphics guiGraphics, float f, int i, int j, CallbackInfo ci) { + @Inject(method = "extractBackground", at = @At("TAIL")) + public void renderBg(GuiGraphicsExtractor graphics, int mouseX, int mouseY, float a, CallbackInfo ci) { if (!MccIslandState.isOnline() || !Scavenging.isScavengingMenuOrDisabled(this)) return; ScavengingTotalList silverTotal = Scavenging.getSilverTotal(this.menu); - Scavenging.renderSilverTotal(silverTotal, guiGraphics); + Scavenging.renderSilverTotal(silverTotal, graphics); } } diff --git a/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java b/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java index 1889eeb1..154e58a1 100644 --- a/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java @@ -1,5 +1,9 @@ package net.asodev.islandutils.mixins.network; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import com.mojang.brigadier.CommandDispatcher; import net.asodev.islandutils.IslandUtilsEvents; import net.asodev.islandutils.discord.DiscordPresenceUpdator; @@ -14,6 +18,13 @@ import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.IslandSoundEvents; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; import net.minecraft.client.multiplayer.ClientPacketListener; @@ -22,20 +33,16 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.*; +import net.minecraft.network.protocol.game.ClientboundBossEventPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket; +import net.minecraft.network.protocol.game.ClientboundSetTitleTextPacket; +import net.minecraft.network.protocol.game.ClientboundSoundPacket; +import net.minecraft.network.protocol.game.ClientboundStopSoundPacket; +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket; import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.UUID; -import java.util.regex.Matcher; -import java.util.regex.Pattern; @Mixin(ClientPacketListener.class) public abstract class PacketListenerMixin extends ClientCommonPacketListenerImpl { @@ -168,7 +175,7 @@ private void onChat(ClientboundSystemChatPacket clientboundSystemChatPacket, Cal ci.cancel(); this.minecraft.execute(()->{ try { - this.minecraft.gui.getChat().addMessage(replacement); + this.minecraft.gui.getChat().addServerSystemMessage(replacement); } catch (IndexOutOfBoundsException exception) { exception.printStackTrace(); } diff --git a/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java b/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java index 27b5c365..a8d5b189 100644 --- a/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java @@ -1,14 +1,10 @@ package net.asodev.islandutils.mixins.notif; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + import net.asodev.islandutils.state.MccIslandNotifs; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList.OnlineServerEntry; -import net.minecraft.client.multiplayer.ServerData; -import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; -import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -17,9 +13,14 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList.OnlineServerEntry; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.Identifier; @Mixin(OnlineServerEntry.class) public class ServerSelectionMixin { @@ -33,14 +34,14 @@ public class ServerSelectionMixin { private static final Component NOTIF_TITLE = Component.translatable("islandutils.message.core.notifTitle").withStyle(Style.EMPTY.withUnderlined(true)); @Inject( - method = "renderContent", + method = "extractContent", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/gui/screens/multiplayer/ServerSelectionList$OnlineServerEntry;drawIcon(Lnet/minecraft/client/gui/GuiGraphics;IILnet/minecraft/resources/Identifier;)V", + target = "Lnet/minecraft/client/gui/screens/multiplayer/ServerSelectionList$OnlineServerEntry;extractIcon(Lnet/minecraft/client/gui/GuiGraphicsExtractor;IILnet/minecraft/resources/Identifier;)V", shift = At.Shift.AFTER ) ) - private void render(GuiGraphics guiGraphics, int i, int j, boolean bl, float f, CallbackInfo ci) { + private void render(GuiGraphicsExtractor guiGraphics, int i, int j, boolean bl, float f, CallbackInfo ci) { if (!this.serverData.ip.toLowerCase().contains("mccisland.net")) return; List notifs = MccIslandNotifs.getNotifLines(); if (notifs.isEmpty()) return; diff --git a/src/main/java/net/asodev/islandutils/mixins/plobby/PlobbyChestMixin.java b/src/main/java/net/asodev/islandutils/mixins/plobby/PlobbyChestMixin.java index a50b8638..2ad73647 100644 --- a/src/main/java/net/asodev/islandutils/mixins/plobby/PlobbyChestMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/plobby/PlobbyChestMixin.java @@ -3,17 +3,18 @@ import net.asodev.islandutils.modules.plobby.PlobbyJoinCodeCopy; import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.Utils; +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 net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; -import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.ContainerInput; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -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; @Mixin(AbstractContainerScreen.class) public class PlobbyChestMixin extends Screen { @@ -22,10 +23,10 @@ protected PlobbyChestMixin(Component component) { } @Inject(method = "slotClicked", at = @At("HEAD")) - private void slotClicked(Slot slot, int index, int j, ClickType clickType, CallbackInfo ci) { + private void slotClicked(Slot slot, int slotId, int buttonNum, ContainerInput containerInput, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; if (slot == null) return; - if (index != 8 && slot.hasItem()) return; + if (slotId != 8 && slot.hasItem()) return; ItemStack item = slot.getItem(); Identifier customItemID = Utils.getCustomItemID(item); diff --git a/src/main/java/net/asodev/islandutils/mixins/ui/ChatScreenMixin.java b/src/main/java/net/asodev/islandutils/mixins/ui/ChatScreenMixin.java index 222f506d..54b470c7 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ui/ChatScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ui/ChatScreenMixin.java @@ -1,15 +1,13 @@ package net.asodev.islandutils.mixins.ui; +import static net.asodev.islandutils.state.MccIslandState.isOnline; + +import java.util.ArrayList; +import java.util.List; + import net.asodev.islandutils.modules.ChatChannelButton; import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.util.PlainTextButtonNoShadow; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.CommandSuggestions; -import net.minecraft.client.gui.screens.ChatScreen; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.input.MouseButtonEvent; -import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -18,10 +16,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.ArrayList; -import java.util.List; - -import static net.asodev.islandutils.state.MccIslandState.isOnline; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.network.chat.Component; @Mixin(ChatScreen.class) public abstract class ChatScreenMixin extends Screen { @@ -67,11 +68,11 @@ private void init(CallbackInfo ci) { } } - @Inject(method = "render", at = @At("TAIL")) - private void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo ci) { + @Inject(method = "extractRenderState", at = @At("TAIL")) + private void render(GuiGraphicsExtractor guiGraphics, int i, int j, float f, CallbackInfo ci) { CommandSuggestionsAccessor suggestionsAccessor = ((CommandSuggestionsAccessor) commandSuggestions); if (suggestionsAccessor.suggestions() == null && suggestionsAccessor.commandUsage().isEmpty()) { - buttons.forEach(btn -> btn.render(guiGraphics, i, j, f)); + buttons.forEach(btn -> btn.extractRenderState(guiGraphics, i, j, f)); } } diff --git a/src/main/java/net/asodev/islandutils/mixins/ui/FishingUpgradeHighlightMixin.java b/src/main/java/net/asodev/islandutils/mixins/ui/FishingUpgradeHighlightMixin.java index a5a8e81b..13776f09 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ui/FishingUpgradeHighlightMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ui/FishingUpgradeHighlightMixin.java @@ -4,18 +4,19 @@ import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.state.Game; import net.asodev.islandutils.state.MccIslandState; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.world.inventory.Slot; 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 net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.world.inventory.Slot; + @Mixin(AbstractContainerScreen.class) public class FishingUpgradeHighlightMixin { - @Inject(method = "renderSlot", at = @At(value = "TAIL")) - private void renderSlot(GuiGraphics guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { + @Inject(method = "extractSlot", at = @At(value = "TAIL")) + private void renderSlot(GuiGraphicsExtractor guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { if (!slot.hasItem() || !IslandOptions.getMisc().isShowFishingUpgradeIcon()) return; if (MccIslandState.getGame() != Game.FISHING) return; FishingUpgradeIcon.render(slot, guiGraphics); diff --git a/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java b/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java index 95d6ac71..17b4b78a 100644 --- a/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java +++ b/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java @@ -1,18 +1,19 @@ package net.asodev.islandutils.modules; +import java.util.List; + import net.asodev.islandutils.util.Utils; -import net.minecraft.client.gui.GuiGraphics; + +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; import net.minecraft.world.inventory.Slot; -import java.util.List; - public class FishingUpgradeIcon { private static final Identifier UPGRADE_ICON_LOCATION = Identifier.fromNamespaceAndPath("island", "upgrade"); - public static void render(Slot slot, GuiGraphics guiGraphics) { + public static void render(Slot slot, GuiGraphicsExtractor guiGraphics) { List lore = Utils.getTooltipLines(slot.getItem()); if (lore == null) return; boolean canUpgrade = lore.stream().anyMatch(c -> c.getString().contains("Left-Click to Upgrade")); diff --git a/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java b/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java index 61431fca..c11abede 100644 --- a/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java +++ b/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java @@ -1,15 +1,16 @@ package net.asodev.islandutils.modules.cosmetics; -import net.minecraft.client.gui.GuiGraphics; +import org.joml.Quaternionf; +import org.joml.Vector3f; + +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.InventoryScreen; import net.minecraft.client.renderer.entity.state.EntityRenderState; import net.minecraft.world.entity.LivingEntity; -import org.joml.Quaternionf; -import org.joml.Vector3f; public class CosmeticUI { - public static void renderPlayerInInventory(GuiGraphics guiGraphics, int x0, int y0, int x1, int y1, int size, LivingEntity livingEntity) { + public static void renderPlayerInInventory(GuiGraphicsExtractor guiGraphics, int x0, int y0, int x1, int y1, int size, LivingEntity livingEntity) { float yRot = CosmeticState.yRot; float xRot = (float) Math.atan(CosmeticState.xRot / 40.0f); @@ -38,7 +39,7 @@ public static void renderPlayerInInventory(GuiGraphics guiGraphics, int x0, int quaternionf.mul(quaternionf2); Vector3f vector3f = new Vector3f(0.0F, livingEntity.getBbHeight() / 2.0F + f * livingEntityScale, 0.0F); EntityRenderState renderState = InventoryScreen.extractRenderState(livingEntity); - guiGraphics.submitEntityRenderState(renderState, (float) size, vector3f, quaternionf, quaternionf2, x0, y0, x1, y1); + guiGraphics.entity(renderState, (float) size, vector3f, quaternionf, quaternionf2, x0, y0, x1, y1); // restore rotations livingEntity.yBodyRot = preYBodyRot; diff --git a/src/main/java/net/asodev/islandutils/modules/crafting/CraftingToast.java b/src/main/java/net/asodev/islandutils/modules/crafting/CraftingToast.java index 80e89cc8..ef8ed9fd 100644 --- a/src/main/java/net/asodev/islandutils/modules/crafting/CraftingToast.java +++ b/src/main/java/net/asodev/islandutils/modules/crafting/CraftingToast.java @@ -1,10 +1,17 @@ package net.asodev.islandutils.modules.crafting; +import static net.asodev.islandutils.util.Utils.MCC_HUD_FONT; + +import java.util.Iterator; +import java.util.List; +import java.util.Objects; + import net.asodev.islandutils.modules.crafting.state.CraftingItem; import net.asodev.islandutils.util.ChatUtils; + import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastManager; import net.minecraft.client.renderer.RenderPipelines; @@ -15,12 +22,6 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; - -import static net.asodev.islandutils.util.Utils.MCC_HUD_FONT; - public class CraftingToast implements Toast { private static final Identifier ISLAND_TOASTS_TEXTURE = Identifier.fromNamespaceAndPath("island", "toasts"); private static final long DISPLAY_TIME = 5000; // 5s @@ -46,7 +47,7 @@ public void update(ToastManager toastManager, long l) { } @Override - public void render(GuiGraphics guiGraphics, Font font, long l) { + public void extractRenderState(GuiGraphicsExtractor guiGraphics, Font font, long l) { // If mcc:hub font can't render all the symbols in the string // use the default font. Used for localization. Component description = ChatUtils.checkForHudUnsupportedSymbols(I18n.get("islandutils.message.crafting.toastNotif")) ? @@ -59,13 +60,13 @@ public void render(GuiGraphics guiGraphics, Font font, long l) { List sequences = font.split(displayName, 125); if (sequences.size() == 1) { int y = 7; - guiGraphics.drawString(font, description, 30, y, -16777216, false); + guiGraphics.text(font, description, 30, y, -16777216, false); y += 5 + 4; - guiGraphics.drawString(font, displayName, 30, y, -11534256, false); + guiGraphics.text(font, displayName, 30, y, -11534256, false); } else { float fadeDuration = 300.0f; if(l < 1500L){ - guiGraphics.drawString(font, description, 30, 11, 1 | (Mth.floor(Mth.clamp((float) (1500L - l) / fadeDuration, 0.0f, 1.0f) * 255.0f) << 24 | 67108864), false); + guiGraphics.text(font, description, 30, 11, 1 | (Mth.floor(Mth.clamp((float) (1500L - l) / fadeDuration, 0.0f, 1.0f) * 255.0f) << 24 | 67108864), false); } else { int rows = this.height() / 2; int sequenceSize = sequences.size(); @@ -74,12 +75,12 @@ public void render(GuiGraphics guiGraphics, Font font, long l) { for (Iterator sequenceIterator = sequences.iterator(); sequenceIterator.hasNext(); row += 9){ FormattedCharSequence sequence = sequenceIterator.next(); - guiGraphics.drawString(font, sequence, 30, row, 16777215 | (Mth.floor(Mth.clamp((float)(l - 1500L) / fadeDuration, 0.0F, 1.0F) * 252.0F) << 24 | 67108864), false); + guiGraphics.text(font, sequence, 30, row, 16777215 | (Mth.floor(Mth.clamp((float)(l - 1500L) / fadeDuration, 0.0F, 1.0F) * 252.0F) << 24 | 67108864), false); Objects.requireNonNull(font); } } } - guiGraphics.renderFakeItem(itemStack, 8, 8); + guiGraphics.fakeItem(itemStack, 8, 8); } } diff --git a/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingNotifier.java b/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingNotifier.java index d11f3308..f0c2d7e0 100644 --- a/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingNotifier.java +++ b/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingNotifier.java @@ -1,5 +1,12 @@ package net.asodev.islandutils.modules.crafting.state; +import static net.asodev.islandutils.util.IslandUtilsCommand.cantUseDebugError; +import static net.asodev.islandutils.util.Utils.MCC_HUD_FONT; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.literal; + +import java.util.List; + import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; @@ -10,8 +17,8 @@ import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.IslandSoundEvents; import net.asodev.islandutils.util.Scheduler; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import org.apache.commons.lang3.time.DurationFormatUtils; + import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.LoadingOverlay; @@ -21,14 +28,9 @@ import net.minecraft.network.chat.FontDescription; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; -import org.apache.commons.lang3.time.DurationFormatUtils; - -import java.util.List; -import static net.asodev.islandutils.util.IslandUtilsCommand.cantUseDebugError; -import static net.asodev.islandutils.util.Utils.MCC_HUD_FONT; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; public class CraftingNotifier implements ClientTickEvents.EndTick { private int tick = 0; diff --git a/src/main/java/net/asodev/islandutils/modules/scavenging/Scavenging.java b/src/main/java/net/asodev/islandutils/modules/scavenging/Scavenging.java index 2f5200c3..01d5bf50 100644 --- a/src/main/java/net/asodev/islandutils/modules/scavenging/Scavenging.java +++ b/src/main/java/net/asodev/islandutils/modules/scavenging/Scavenging.java @@ -1,10 +1,14 @@ package net.asodev.islandutils.modules.scavenging; +import java.util.Collection; +import java.util.List; + import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.util.Utils; + import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.network.chat.Component; @@ -16,9 +20,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import java.util.Collection; -import java.util.List; - public class Scavenging { // the total width of the island menu private static final int GUI_TOTAL_WIDTH = 176; @@ -37,7 +38,7 @@ public static boolean isScavengingMenuOrDisabled(AbstractContainerScreen scre if (titleComponent == null) return false; return screen.getTitle().contains(titleComponent); } - public static void renderSilverTotal(ScavengingTotalList silverTotal, GuiGraphics guiGraphics) { + public static void renderSilverTotal(ScavengingTotalList silverTotal, GuiGraphicsExtractor guiGraphics) { Minecraft minecraft = Minecraft.getInstance(); if (!(minecraft.screen instanceof ContainerScreen screen)) return; diff --git a/src/main/java/net/asodev/islandutils/modules/scavenging/ScavengingItemHandler.java b/src/main/java/net/asodev/islandutils/modules/scavenging/ScavengingItemHandler.java index 1e16bd3d..4b3d60f5 100644 --- a/src/main/java/net/asodev/islandutils/modules/scavenging/ScavengingItemHandler.java +++ b/src/main/java/net/asodev/islandutils/modules/scavenging/ScavengingItemHandler.java @@ -1,16 +1,17 @@ package net.asodev.islandutils.modules.scavenging; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import net.asodev.islandutils.util.FontUtils; + import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.network.chat.Component; -import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class ScavengingItemHandler { private static final int MENU_WIDTH = 176; private static final int CHEST_MENU_HEIGHT = 222; @@ -31,7 +32,7 @@ public ScavengingItemHandler(String item, String character, String detectString) this.name = item; } - public int renderTotal(GuiGraphics guiGraphics, Long total, int x) { + public int renderTotal(GuiGraphicsExtractor guiGraphics, Long total, int x) { Minecraft minecraft = Minecraft.getInstance(); Font font = minecraft.font; if (!(minecraft.screen instanceof ContainerScreen screen)) return 0; @@ -49,7 +50,7 @@ public int renderTotal(GuiGraphics guiGraphics, Long total, int x) { // 20 = y pos from top of footer to top of button // 5 = bottom padding int y = topPos + 152 + 20 - 5; - guiGraphics.drawString(font, silverComponent, x, y, 16777215, false); + guiGraphics.text(font, silverComponent, x, y, -1, false); return width; } diff --git a/src/main/java/net/asodev/islandutils/modules/splits/ui/DojoSplitUI.java b/src/main/java/net/asodev/islandutils/modules/splits/ui/DojoSplitUI.java index c80bcd1c..303b765f 100644 --- a/src/main/java/net/asodev/islandutils/modules/splits/ui/DojoSplitUI.java +++ b/src/main/java/net/asodev/islandutils/modules/splits/ui/DojoSplitUI.java @@ -1,16 +1,19 @@ package net.asodev.islandutils.modules.splits.ui; +import static net.asodev.islandutils.util.FontUtils.CUSTOM_SPLIT_STYLE; +import static net.asodev.islandutils.util.FontUtils.MCC_HUD_STYLE; +import static net.asodev.islandutils.util.FontUtils.getMinecraftFont; + import net.asodev.islandutils.modules.splits.LevelTimer; + import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; -import static net.asodev.islandutils.util.FontUtils.*; - public class DojoSplitUI implements SplitUI { private static final Identifier BAR_TEXTURE = Identifier.fromNamespaceAndPath("island", "pkw_splits"); private static final int MCC_BAR_WIDTH = 130; @@ -23,7 +26,7 @@ public DojoSplitUI(LevelTimer timer) { } @Override - public void render(GuiGraphics guiGraphics, int bossBars) { + public void render(GuiGraphicsExtractor guiGraphics, int bossBars) { int x = Math.round(((float)guiGraphics.guiWidth() / 2.0f) - ((float)MCC_BAR_WIDTH / 2.0f) - 1.0f); int y = Double.valueOf((bossBars * 18.5)).intValue() + 1; guiGraphics.blitSprite(RenderPipelines.GUI_TEXTURED, BAR_TEXTURE, x, y, this.width(), this.height()); @@ -35,26 +38,26 @@ public void render(GuiGraphics guiGraphics, int bossBars) { } } - public void renderLevelName(GuiGraphics guiGraphics, int x, int y) { + public void renderLevelName(GuiGraphicsExtractor guiGraphics, int x, int y) { final int LEVEL_NAME_WIDTH = 25; // Width of the dark area for the level name Component levelName = Component.literal(timer.getLevelName()).withStyle(MCC_HUD_STYLE); int txoff = (LEVEL_NAME_WIDTH / 2) - (getMinecraftFont().width(levelName) / 2); // Offset needed to center the level name int tx = x + txoff + 1; // The X coordinate to render the level name int ty = y + 2; // The Y coordinate to render the level name - guiGraphics.drawString(getMinecraftFont(), levelName, tx, ty, 16777215 | 255 << 24, true); + guiGraphics.text(getMinecraftFont(), levelName, tx, ty, 16777215 | 255 << 24, true); } - public void renderSplitTime(GuiGraphics guiGraphics, int x, int y) { + public void renderSplitTime(GuiGraphicsExtractor guiGraphics, int x, int y) { String formattedTime = String.format("%.3f", timer.getCurrentSplitTime()); Component splitTime = Component.literal(formattedTime); timerWidth = getMinecraftFont().width(splitTime); int tx = x + this.width() - timerWidth - 2; int ty = y + 2; - guiGraphics.drawString(getMinecraftFont(), splitTime, tx, ty, 16777215 | 255 << 24, true); + guiGraphics.text(getMinecraftFont(), splitTime, tx, ty, 16777215 | 255 << 24, true); } - public void renderSplitImprovement(GuiGraphics guiGraphics, int x, int y) { + public void renderSplitImprovement(GuiGraphicsExtractor guiGraphics, int x, int y) { if (timer.isBetween()) return; Double splitImprovement = timer.getSplitImprovement(); @@ -72,7 +75,7 @@ public void renderSplitImprovement(GuiGraphics guiGraphics, int x, int y) { Component improvementTime = Component.literal(formattedTime).withStyle(CUSTOM_SPLIT_STYLE.withColor(color)); int tx = x + this.width() - timerWidth - 2 - font.width(improvementTime) - 8; int ty = y + 2; - guiGraphics.drawString(font, improvementTime, tx, ty, 16777215 | 255 << 24, true); + guiGraphics.text(font, improvementTime, tx, ty, 16777215 | 255 << 24, true); } private int width() { diff --git a/src/main/java/net/asodev/islandutils/modules/splits/ui/SplitUI.java b/src/main/java/net/asodev/islandutils/modules/splits/ui/SplitUI.java index 5422b9f5..073b7f0a 100644 --- a/src/main/java/net/asodev/islandutils/modules/splits/ui/SplitUI.java +++ b/src/main/java/net/asodev/islandutils/modules/splits/ui/SplitUI.java @@ -2,20 +2,23 @@ import net.asodev.islandutils.modules.splits.LevelTimer; import net.asodev.islandutils.util.ChatUtils; -import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; -import net.minecraft.client.gui.GuiGraphics; + +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.resources.Identifier; + +import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; public interface SplitUI { - void render(GuiGraphics guiGraphics, int bossBars); + void render(GuiGraphicsExtractor guiGraphics, int bossBars); - public static void renderInstance(GuiGraphics guiGraphics, int bossBars) { + public static void renderInstance(GuiGraphicsExtractor guiGraphics, int bossBars) { LevelTimer instance = LevelTimer.getInstance(); if (instance != null && instance.getUI() != null) instance.getUI().render(guiGraphics, bossBars); } static void setupFallbackRenderer() { ChatUtils.debug("Setup fallback renderer for SplitUI"); - HudRenderCallback.EVENT.register((drawContext, tickDelta) -> { + HudElementRegistry.addLast(Identifier.fromNamespaceAndPath("islandutils", "split_ui"), (drawContext, tickDelta) -> { renderInstance(drawContext, 1); }); } diff --git a/src/main/java/net/asodev/islandutils/state/Game.java b/src/main/java/net/asodev/islandutils/state/Game.java index 60caff88..11208fcf 100644 --- a/src/main/java/net/asodev/islandutils/state/Game.java +++ b/src/main/java/net/asodev/islandutils/state/Game.java @@ -1,13 +1,14 @@ package net.asodev.islandutils.state; -import com.noxcrew.noxesium.core.mcc.ClientboundMccServerPacket; -import net.minecraft.resources.Identifier; - -import javax.annotation.Nullable; import java.util.HashSet; import java.util.List; import java.util.NoSuchElementException; +import com.noxcrew.noxesium.core.mcc.ClientboundMccServerPacket; +import org.jspecify.annotations.Nullable; + +import net.minecraft.resources.Identifier; + public enum Game { HUB("Hub", null, null), diff --git a/src/main/java/net/asodev/islandutils/state/MccIslandState.java b/src/main/java/net/asodev/islandutils/state/MccIslandState.java index f1bdc137..986313fb 100644 --- a/src/main/java/net/asodev/islandutils/state/MccIslandState.java +++ b/src/main/java/net/asodev/islandutils/state/MccIslandState.java @@ -1,13 +1,14 @@ package net.asodev.islandutils.state; +import java.util.List; + import net.asodev.islandutils.IslandUtilsEvents; import net.asodev.islandutils.util.ChatUtils; +import org.jspecify.annotations.Nullable; + import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ServerData; -import javax.annotation.Nullable; -import java.util.List; - public class MccIslandState { private static Game game = Game.HUB; diff --git a/src/main/java/net/asodev/islandutils/util/ChatUtils.java b/src/main/java/net/asodev/islandutils/util/ChatUtils.java index b540dde8..3ee1d11c 100644 --- a/src/main/java/net/asodev/islandutils/util/ChatUtils.java +++ b/src/main/java/net/asodev/islandutils/util/ChatUtils.java @@ -1,18 +1,24 @@ package net.asodev.islandutils.util; +import java.net.URI; +import java.util.Optional; +import java.util.regex.Pattern; + import net.asodev.islandutils.IslandUtils; import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.util.updater.schema.AvailableUpdate; -import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.network.chat.*; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.URI; -import java.util.Optional; -import java.util.regex.Pattern; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +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 net.minecraft.network.chat.Style; +import net.minecraft.network.chat.TextColor; public class ChatUtils { @@ -104,7 +110,7 @@ public static void sendWithPrefix(Component component) { public static void send(Component component) { Minecraft.getInstance().execute(() -> { try { - Minecraft.getInstance().gui.getChat().addMessage(component); + Minecraft.getInstance().gui.getChat().addClientSystemMessage(component); } catch (IndexOutOfBoundsException e) { e.printStackTrace(); } diff --git a/src/main/java/net/asodev/islandutils/util/IslandUtilsCommand.java b/src/main/java/net/asodev/islandutils/util/IslandUtilsCommand.java index af18809f..5a0c6b2d 100644 --- a/src/main/java/net/asodev/islandutils/util/IslandUtilsCommand.java +++ b/src/main/java/net/asodev/islandutils/util/IslandUtilsCommand.java @@ -1,14 +1,16 @@ package net.asodev.islandutils.util; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.literal; + import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.asodev.islandutils.IslandUtils; import net.asodev.islandutils.modules.crafting.state.CraftingNotifier; import net.asodev.islandutils.util.debug.GameOverride; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; + import net.minecraft.network.chat.Component; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; public class IslandUtilsCommand { public static final Component cantUseDebugError = diff --git a/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java b/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java index 093a5480..9b78c76b 100644 --- a/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java +++ b/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java @@ -1,15 +1,16 @@ package net.asodev.islandutils.util; +import org.jetbrains.annotations.Nullable; + import net.minecraft.client.gui.ComponentPath; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.navigation.FocusNavigationEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentUtils; import net.minecraft.network.chat.Style; import net.minecraft.util.Mth; -import org.jetbrains.annotations.Nullable; public class PlainTextButtonNoShadow extends Button { private final Font font; @@ -24,9 +25,9 @@ public PlainTextButtonNoShadow(int i, int j, int k, int l, Component component, } @Override - public void renderContents(GuiGraphics guiGraphics, int i, int j, float f) { + public void extractContents(GuiGraphicsExtractor guiGraphics, int i, int j, float f) { Component component = this.isHoveredOrFocused() ? this.underlinedMessage : this.message; - guiGraphics.drawString(this.font, component, getX(), getY(), 0xFFFFFF | Mth.ceil(this.alpha * 255.0f) << 24, false); + guiGraphics.text(this.font, component, getX(), getY(), 0xFFFFFF | Mth.ceil(this.alpha * 255.0f) << 24, false); } @Nullable diff --git a/src/main/java/net/asodev/islandutils/util/debug/GameOverride.java b/src/main/java/net/asodev/islandutils/util/debug/GameOverride.java index ac21a26d..3b74c688 100644 --- a/src/main/java/net/asodev/islandutils/util/debug/GameOverride.java +++ b/src/main/java/net/asodev/islandutils/util/debug/GameOverride.java @@ -1,13 +1,14 @@ package net.asodev.islandutils.util.debug; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.literal; + import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.asodev.islandutils.state.Game; import net.asodev.islandutils.state.MccIslandState; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; public class GameOverride { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 050204d0..b36adb89 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -31,10 +31,10 @@ } }, "depends": { - "noxesium": ">=3.0", - "fabricloader": ">=0.16", - "fabric": "*", - "minecraft": ">=1.21.11", + "noxesium": ">=3.1", + "fabricloader": ">=0.19", + "fabric-api": "*", + "minecraft": ">=26.1", "yet_another_config_lib_v3": "*" } } diff --git a/src/main/resources/islandutils.accesswidener b/src/main/resources/islandutils.accesswidener index 2a4614e9..703ef3e9 100644 --- a/src/main/resources/islandutils.accesswidener +++ b/src/main/resources/islandutils.accesswidener @@ -1,4 +1,4 @@ -accessWidener v1 named +accessWidener v1 official #accessible method net/minecraft/server/packs/FilePackResources (Ljava/lang/String;Lnet/minecraft/server/packs/FilePackResources$SharedZipFileAccess;ZLjava/lang/String;)V #accessible method net/minecraft/server/packs/FilePackResources$SharedZipFileAccess (Ljava/io/File;)V diff --git a/src/main/resources/islandutils.mixins.json b/src/main/resources/islandutils.mixins.json index f586508d..711faf1f 100644 --- a/src/main/resources/islandutils.mixins.json +++ b/src/main/resources/islandutils.mixins.json @@ -2,8 +2,7 @@ "required": true, "minVersion": "0.8", "package": "net.asodev.islandutils.mixins", - "compatibilityLevel": "JAVA_17", - "refmap": "islandutils.refmap.json", + "compatibilityLevel": "JAVA_25", "mixins": [ "ItemIDMixin", "accessors.WalkAnimStateAccessor",