From b067c810e4ed8d56cb19974445b8c51700d0d1c2 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 20 Jan 2026 21:56:09 +0300 Subject: [PATCH 01/11] chore: Update dependencies --- build.gradle.kts | 2 +- gradle.properties | 13 ++++++------- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1db0d5cf..4b945981 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.10-SNAPSHOT" + id("fabric-loom") version "1.14-SNAPSHOT" id("maven-publish") } diff --git a/gradle.properties b/gradle.properties index e9f1fcd5..9a2fd67d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,9 +4,8 @@ org.gradle.parallel=true # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.8 -yarn_mappings=1.21.8+build.1 -loader_version=0.16.14 +minecraft_version=1.21.11 +loader_version=0.18.3 # Mod Properties mod_version=1.7.3 @@ -14,7 +13,7 @@ maven_group=net.asodev archives_base_name=islandutils # Dependencies -fabric_version=0.130.0+1.21.8 -yacl_version=3.7.1+1.21.6-fabric -mod_menu_version=15.0.0-beta.3 -noxesium_version=2.7.7 \ No newline at end of file +fabric_version=0.140.2+1.21.11 +yacl_version=3.8.1+1.21.11-fabric +mod_menu_version=17.0.0-beta.1 +noxesium_version=3.0.0 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a793..bad7c246 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-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From dafa31b4e55f29501a7bc9177d1d0b1a72faa846 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 20 Jan 2026 22:27:33 +0300 Subject: [PATCH 02/11] chore: Update to 1.21.11 --- .../asodev/islandutils/IslandUtilsClient.java | 6 +++-- .../fontloader/FontLoaderManager.java | 4 +-- .../islandutils/mixins/ItemIDMixin.java | 6 ++--- .../mixins/cosmetics/ChestScreenMixin.java | 8 +++--- .../cosmetics/PreviewTutorialMixin.java | 7 ++--- .../mixins/fontloader/FontLoaderMixin.java | 4 +-- .../mixins/network/PacketListenerMixin.java | 6 ++--- .../mixins/notif/ServerSelectionMixin.java | 6 ++--- .../mixins/plobby/PlobbyChestMixin.java | 4 +-- .../mixins/ui/ChatScreenMixin.java | 7 ++--- .../ui/FishingUpgradeHighlightMixin.java | 8 +----- .../mixins/ui/PauseScreenMixin.java | 13 +++++---- .../islandutils/mixins/ui/SlotMixin.java | 4 +-- .../islandutils/modules/ClassicAnnouncer.java | 4 +-- .../modules/FishingUpgradeIcon.java | 4 +-- .../islandutils/modules/FriendsInGame.java | 2 +- .../modules/cosmetics/CosmeticState.java | 10 +++---- .../modules/cosmetics/CosmeticUI.java | 27 ++++++++++--------- .../modules/crafting/CraftingToast.java | 6 ++--- .../modules/crafting/CraftingUI.java | 7 ++--- .../modules/crafting/state/CraftingItem.java | 12 ++++----- .../modules/crafting/state/CraftingItems.java | 4 +-- .../crafting/state/CraftingNotifier.java | 3 ++- .../islandutils/modules/music/HubMusic.java | 20 +++++++------- .../modules/music/MusicManager.java | 12 ++++----- .../modules/music/MusicModifier.java | 5 ++-- .../islandutils/modules/music/SoundInfo.java | 8 +++--- .../modules/music/TrackMusicModifier.java | 6 ++--- .../music/modifiers/ClassicHitwMusic.java | 4 +-- .../music/modifiers/HighQualityMusic.java | 8 +++--- .../modifiers/PreviousDynaballMusic.java | 2 +- .../music/modifiers/TgttosDomeModifier.java | 6 ++--- .../music/modifiers/TgttosDoubleTime.java | 4 +-- .../modules/scavenging/Scavenging.java | 5 ++-- .../modules/splits/LevelTimer.java | 4 +-- .../modules/splits/ui/DojoSplitUI.java | 4 +-- .../net/asodev/islandutils/state/Game.java | 16 +++++------ .../asodev/islandutils/util/FontUtils.java | 19 ++++++------- .../islandutils/util/IslandSoundEvents.java | 8 +++--- .../islandutils/util/MCCSoundInstance.java | 6 ++--- .../util/PlainTextButtonNoShadow.java | 3 ++- .../net/asodev/islandutils/util/Utils.java | 9 ++++--- .../resourcepack/ResourcePackUpdater.java | 2 +- src/main/resources/islandutils.accesswidener | 3 ++- 44 files changed, 161 insertions(+), 155 deletions(-) diff --git a/src/main/java/net/asodev/islandutils/IslandUtilsClient.java b/src/main/java/net/asodev/islandutils/IslandUtilsClient.java index e1d754a4..07ee21a5 100644 --- a/src/main/java/net/asodev/islandutils/IslandUtilsClient.java +++ b/src/main/java/net/asodev/islandutils/IslandUtilsClient.java @@ -20,12 +20,14 @@ 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; @Environment(EnvType.CLIENT) public class IslandUtilsClient implements ClientModInitializer { public static KeyMapping openPlobbyKey; public static KeyMapping disguiseKeyBind; + public static KeyMapping.Category keyCategory = new KeyMapping.Category(Identifier.fromNamespaceAndPath("island", "category.islandutils.keys")); @Override public void onInitializeClient() { @@ -33,13 +35,13 @@ public void onInitializeClient() { "key.islandutils.plobbymenu", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_K, - "category.islandutils.keys" + keyCategory )); disguiseKeyBind = KeyBindingHelper.registerKeyBinding(new KeyMapping( "key.islandutils.disguise", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_N, - "category.islandutils.keys" + keyCategory )); SplitManager.init(); DisguiseKeybind.registerDisguiseInput(); diff --git a/src/main/java/net/asodev/islandutils/fontloader/FontLoaderManager.java b/src/main/java/net/asodev/islandutils/fontloader/FontLoaderManager.java index 8e03d73f..6f8817f2 100644 --- a/src/main/java/net/asodev/islandutils/fontloader/FontLoaderManager.java +++ b/src/main/java/net/asodev/islandutils/fontloader/FontLoaderManager.java @@ -7,7 +7,7 @@ import net.asodev.islandutils.util.FontUtils; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.ArrayList; import java.util.Collections; @@ -47,7 +47,7 @@ public static void warnAboutUnfulfilledAssets() { }); } - public static void tryFulfillAsset(ResourceLocation resourceLocation, String character) { + public static void tryFulfillAsset(Identifier resourceLocation, String character) { Component component = Component.literal(character).setStyle(FontUtils.MCC_ICONS_STYLE); String path = resourceLocation.getPath(); diff --git a/src/main/java/net/asodev/islandutils/mixins/ItemIDMixin.java b/src/main/java/net/asodev/islandutils/mixins/ItemIDMixin.java index 86cbf971..cc1f5803 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ItemIDMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ItemIDMixin.java @@ -14,7 +14,7 @@ import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.Item; @@ -42,7 +42,7 @@ public abstract class ItemIDMixin implements DataComponentHolder { ) private void addTooltipLines(Item.TooltipContext tooltipContext, @Nullable Player player, TooltipFlag tooltipFlag, CallbackInfoReturnable> cir, @Local List list) { if (!MccIslandState.isOnline() || !IslandOptions.getMisc().isDebugMode()) return; - if (!InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), InputConstants.KEY_LCONTROL)) + if (!InputConstants.isKeyDown(Minecraft.getInstance().getWindow(), InputConstants.KEY_LCONTROL)) return; MutableComponent toAppend = Component.empty(); @@ -56,7 +56,7 @@ private void addTooltipLines(Item.TooltipContext tooltipContext, @Nullable Playe @Unique private void tryAddCustomItemID(MutableComponent toAppend) { - ResourceLocation customItemID = Utils.getCustomItemID((ItemStack) (Object) this); + Identifier customItemID = Utils.getCustomItemID((ItemStack) (Object) this); if (customItemID == null) return; toAppend.append(Component.literal(customItemID.toString()).withStyle(ChatFormatting.AQUA)); } 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 f2076f79..b61e07fd 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java @@ -18,7 +18,7 @@ import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -42,7 +42,7 @@ @Mixin(AbstractContainerScreen.class) public abstract class ChestScreenMixin extends Screen { - @Unique private static final ResourceLocation PREVIEW = ResourceLocation.fromNamespaceAndPath("island", "preview"); + @Unique private static final Identifier PREVIEW = Identifier.fromNamespaceAndPath("island", "preview"); @Shadow protected Slot hoveredSlot; @@ -161,14 +161,14 @@ private void triggerPreviewClicked(int keyCode) { @Unique private void setPreview(ItemStack item) { CosmeticType type = CosmeticState.getType(item); - ResourceLocation hoverCMD = getCustomItemID(item); + Identifier hoverCMD = getCustomItemID(item); if (type == CosmeticType.HAT) setOrNotSet(CosmeticState.hatSlot, hoverCMD); else if (type == CosmeticType.ACCESSORY) setOrNotSet(CosmeticState.accessorySlot, hoverCMD); else if (type == CosmeticType.MAIN_HAND) setOrNotSet(CosmeticState.mainHandSlot, hoverCMD); } @Unique - private void setOrNotSet(Cosmetic cosmetic, ResourceLocation itemCMD) { + private void setOrNotSet(Cosmetic cosmetic, Identifier itemCMD) { if (cosmetic.preview != null && Objects.equals(getCustomItemID(cosmetic.preview.item), itemCMD)) { cosmetic.preview = null; } else { diff --git a/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java b/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java index dec6e2f7..e688ed46 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java @@ -8,6 +8,7 @@ import net.asodev.islandutils.util.FontUtils; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FontDescription; import net.minecraft.network.chat.Style; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -26,11 +27,11 @@ @Mixin(ItemStack.class) public class PreviewTutorialMixin { @Unique - private static final Style style0 = Style.EMPTY.withColor(ChatFormatting.DARK_GRAY).withFont(Style.DEFAULT_FONT); + private static final Style style0 = Style.EMPTY.withColor(ChatFormatting.DARK_GRAY).withFont(FontDescription.DEFAULT); @Unique - private static final Style style1 = Style.EMPTY.withColor(ChatUtils.parseColor("#e9d282")).withFont(Style.DEFAULT_FONT); + private static final Style style1 = Style.EMPTY.withColor(ChatUtils.parseColor("#e9d282")).withFont(FontDescription.DEFAULT); @Unique - private static final Style style2 = Style.EMPTY.withColor(ChatUtils.parseColor("#fbe460")).withFont(Style.DEFAULT_FONT); + private static final Style style2 = Style.EMPTY.withColor(ChatUtils.parseColor("#fbe460")).withFont(FontDescription.DEFAULT); @Unique private static final Component previewComponent = Component.empty() diff --git a/src/main/java/net/asodev/islandutils/mixins/fontloader/FontLoaderMixin.java b/src/main/java/net/asodev/islandutils/mixins/fontloader/FontLoaderMixin.java index 7a7d3325..791dfb18 100644 --- a/src/main/java/net/asodev/islandutils/mixins/fontloader/FontLoaderMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/fontloader/FontLoaderMixin.java @@ -2,7 +2,7 @@ import net.asodev.islandutils.fontloader.FontLoaderManager; import net.minecraft.client.gui.font.providers.BitmapProvider; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -12,7 +12,7 @@ public class FontLoaderMixin { @Inject(method = "", at = @At("TAIL")) - private void init(ResourceLocation resourceLocation, int i, int j, int[][] chars, CallbackInfo ci) { + private void init(Identifier resourceLocation, int i, int j, int[][] chars, CallbackInfo ci) { if (chars.length == 1) { int[] c = chars[0]; 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 72bdcad9..01ba5cd0 100644 --- a/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java @@ -25,7 +25,7 @@ import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; import net.minecraft.network.protocol.game.*; -import net.minecraft.resources.ResourceLocation; +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; @@ -54,7 +54,7 @@ protected PacketListenerMixin(Minecraft minecraft, Connection connection, Common public void handleCustomSoundEvent(ClientboundSoundPacket clientboundCustomSoundPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; - ResourceLocation soundLoc = clientboundCustomSoundPacket.getSound().value().location(); + Identifier soundLoc = clientboundCustomSoundPacket.getSound().value().location(); if (!soundLoc.getNamespace().equals("mcc")) return; if (soundLoc.getPath().startsWith("music.")) { @@ -70,7 +70,7 @@ public void handleCustomSoundEvent(ClientboundSoundPacket clientboundCustomSound @Inject(method = "handleStopSoundEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/util/thread/BlockableEventLoop;)V", shift = At.Shift.AFTER), cancellable = true) public void handleStopSoundEvent(ClientboundStopSoundPacket clientboundStopSoundPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; - ResourceLocation soundLoc = clientboundStopSoundPacket.getName(); + Identifier soundLoc = clientboundStopSoundPacket.getName(); if (soundLoc == null || !soundLoc.getNamespace().equals("mcc")) return; if (soundLoc.getPath().startsWith("music.")) { 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 108766d4..d33b4c13 100644 --- a/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java @@ -8,7 +8,7 @@ import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -28,7 +28,7 @@ public class ServerSelectionMixin { private ServerData serverData; @Unique - private static final ResourceLocation NOTIF_TEXTURE = ResourceLocation.withDefaultNamespace("textures/gui/sprites/icon/unseen_notification.png"); + private static final Identifier NOTIF_TEXTURE = Identifier.withDefaultNamespace("textures/gui/sprites/icon/unseen_notification.png"); @Unique private static final Component NOTIF_TITLE = Component.translatable("islandutils.message.core.notifTitle").withStyle(Style.EMPTY.withUnderlined(true)); @@ -36,7 +36,7 @@ public class ServerSelectionMixin { method = "render", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/gui/screens/multiplayer/ServerSelectionList$OnlineServerEntry;drawIcon(Lnet/minecraft/client/gui/GuiGraphics;IILnet/minecraft/resources/ResourceLocation;)V", + target = "Lnet/minecraft/client/gui/screens/multiplayer/ServerSelectionList$OnlineServerEntry;drawIcon(Lnet/minecraft/client/gui/GuiGraphics;IILnet/minecraft/resources/Identifier;)V", shift = At.Shift.AFTER ) ) 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 230ebad9..a50b8638 100644 --- a/src/main/java/net/asodev/islandutils/mixins/plobby/PlobbyChestMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/plobby/PlobbyChestMixin.java @@ -6,7 +6,7 @@ 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.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; @@ -28,7 +28,7 @@ private void slotClicked(Slot slot, int index, int j, ClickType clickType, Callb if (index != 8 && slot.hasItem()) return; ItemStack item = slot.getItem(); - ResourceLocation customItemID = Utils.getCustomItemID(item); + Identifier customItemID = Utils.getCustomItemID(item); if (customItemID != null && !customItemID.getPath().equals(Utils.BLANK_ITEM_ID)) return; String code = PlobbyJoinCodeCopy.getJoinCodeFromItem(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 58f93557..222f506d 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ui/ChatScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ui/ChatScreenMixin.java @@ -8,6 +8,7 @@ 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; @@ -69,18 +70,18 @@ private void init(CallbackInfo ci) { @Inject(method = "render", at = @At("TAIL")) private void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo ci) { CommandSuggestionsAccessor suggestionsAccessor = ((CommandSuggestionsAccessor) commandSuggestions); - if (suggestionsAccessor.suggestions() == null && suggestionsAccessor.commandUsage().size() == 0) { + if (suggestionsAccessor.suggestions() == null && suggestionsAccessor.commandUsage().isEmpty()) { buttons.forEach(btn -> btn.render(guiGraphics, i, j, f)); } } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(double d, double e, int i, CallbackInfoReturnable cir) { + private void mouseClicked(MouseButtonEvent mouseButtonEvent, boolean bl, CallbackInfoReturnable cir) { long timeNow = System.currentTimeMillis(); if ((timeNow - lastPress) < 1000) return; for (PlainTextButtonNoShadow button : buttons) { if (button.isHoveredOrFocused()) { - button.onPress(); + button.onPress(mouseButtonEvent.buttonInfo()); lastPress = System.currentTimeMillis(); cir.setReturnValue(true); return; 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 82dac229..a5a8e81b 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ui/FishingUpgradeHighlightMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ui/FishingUpgradeHighlightMixin.java @@ -4,24 +4,18 @@ import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.state.Game; 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.RenderType; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; 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; - @Mixin(AbstractContainerScreen.class) public class FishingUpgradeHighlightMixin { @Inject(method = "renderSlot", at = @At(value = "TAIL")) - private void renderSlot(GuiGraphics guiGraphics, Slot slot, CallbackInfo ci) { + private void renderSlot(GuiGraphics 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/mixins/ui/PauseScreenMixin.java b/src/main/java/net/asodev/islandutils/mixins/ui/PauseScreenMixin.java index 1fc48c21..f0aacc20 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ui/PauseScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ui/PauseScreenMixin.java @@ -12,13 +12,10 @@ import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -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.Redirect; -import static net.minecraft.client.gui.screens.PauseScreen.disconnectFromWorld; - @Mixin(PauseScreen.class) public class PauseScreenMixin extends Screen { @@ -49,13 +46,15 @@ private Button.Builder createPause(Component component, Button.OnPress onPress) return Button.builder(component, onPress); } - void callback(boolean confirm, Button buttonx) { - if (confirm) disconnect(buttonx); + @Unique + void callback(boolean confirm, Button button) { + if (confirm) disconnect(button); else { Minecraft.getInstance().setScreen(new PauseScreen(true)); } } + @Unique void disconnect(Button button) { button.active = false; - this.minecraft.getReportingContext().draftReportHandled(this.minecraft, this, () -> disconnectFromWorld(this.minecraft, ClientLevel.DEFAULT_QUIT_MESSAGE), true); + this.minecraft.getReportingContext().draftReportHandled(this.minecraft, this, () -> minecraft.disconnectFromWorld(ClientLevel.DEFAULT_QUIT_MESSAGE), true); } } diff --git a/src/main/java/net/asodev/islandutils/mixins/ui/SlotMixin.java b/src/main/java/net/asodev/islandutils/mixins/ui/SlotMixin.java index 37ad2de7..31ca7659 100644 --- a/src/main/java/net/asodev/islandutils/mixins/ui/SlotMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/ui/SlotMixin.java @@ -3,7 +3,7 @@ import net.asodev.islandutils.state.Game; import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.Utils; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; @@ -24,7 +24,7 @@ public abstract class SlotMixin { @Inject(method = "isHighlightable", at = @At("HEAD"), cancellable = true) private void isHighlightable(CallbackInfoReturnable cir) { if (MccIslandState.isOnline() && MccIslandState.getGame().equals(Game.HUB)) { - ResourceLocation itemID = Utils.getCustomItemID(this.getItem()); + Identifier itemID = Utils.getCustomItemID(this.getItem()); if (itemID == null) { cir.setReturnValue(this.hasItem()); } else if (itemID.getPath().equals("island_interface.generic.blank")) { diff --git a/src/main/java/net/asodev/islandutils/modules/ClassicAnnouncer.java b/src/main/java/net/asodev/islandutils/modules/ClassicAnnouncer.java index df481711..a09f924e 100644 --- a/src/main/java/net/asodev/islandutils/modules/ClassicAnnouncer.java +++ b/src/main/java/net/asodev/islandutils/modules/ClassicAnnouncer.java @@ -9,7 +9,7 @@ import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -48,7 +48,7 @@ public static void handleTrap(ClientboundSetSubtitleTextPacket clientboundSetSub try { ClassicAnnouncer.trap = trap; // Set the trap to the one we just found - ResourceLocation sound = ResourceLocation.fromNamespaceAndPath("island", "announcer." + trap); // island:announcer.(trap) -> The sound location + Identifier sound = Identifier.fromNamespaceAndPath("island", "announcer." + trap); // island:announcer.(trap) -> The sound location SoundInstance soundInstance = SimpleSoundInstance.forUI(SoundEvent.createVariableRangeEvent(sound), 1f, 1f); Minecraft.getInstance().getSoundManager().play(soundInstance); // Play the sound!! } catch (Exception e) { diff --git a/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java b/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java index 4b399d1c..95d6ac71 100644 --- a/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java +++ b/src/main/java/net/asodev/islandutils/modules/FishingUpgradeIcon.java @@ -4,13 +4,13 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.inventory.Slot; import java.util.List; public class FishingUpgradeIcon { - private static final ResourceLocation UPGRADE_ICON_LOCATION = ResourceLocation.fromNamespaceAndPath("island", "upgrade"); + private static final Identifier UPGRADE_ICON_LOCATION = Identifier.fromNamespaceAndPath("island", "upgrade"); public static void render(Slot slot, GuiGraphics guiGraphics) { List lore = Utils.getTooltipLines(slot.getItem()); diff --git a/src/main/java/net/asodev/islandutils/modules/FriendsInGame.java b/src/main/java/net/asodev/islandutils/modules/FriendsInGame.java index 01293ecd..14ad51d3 100644 --- a/src/main/java/net/asodev/islandutils/modules/FriendsInGame.java +++ b/src/main/java/net/asodev/islandutils/modules/FriendsInGame.java @@ -94,7 +94,7 @@ public static void sendFriendsInGame(Minecraft client) { ClientPacketListener connection = client.getConnection(); if (connection == null) return; for (PlayerInfo p : connection.getOnlinePlayers()) { - String name = p.getProfile().getName(); + String name = p.getProfile().name(); if (friends.contains(name)) { hasFriends = true; friendsInThisGame.append(", ").append(name); diff --git a/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticState.java b/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticState.java index 50d65aa7..34b60859 100644 --- a/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticState.java +++ b/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticState.java @@ -7,7 +7,7 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ChestMenu; import net.minecraft.world.inventory.Slot; @@ -60,7 +60,7 @@ public static boolean canBeEquipped(ItemStack stack) { public static boolean isColoredItem(ItemStack item) { if (!item.is(Items.LEATHER_HORSE_ARMOR)) return false; - ResourceLocation customItemID = Utils.getCustomItemID(item); + Identifier customItemID = Utils.getCustomItemID(item); if (customItemID == null) return false; return customItemID.getPath().equals("island_interface.misc.color"); } @@ -78,7 +78,7 @@ public static ItemStack applyColor(ItemStack itemStack) { } public static CosmeticType getType(ItemStack item) { - ResourceLocation itemId = Utils.getCustomItemID(item); + Identifier itemId = Utils.getCustomItemID(item); if (itemId == null) return null; String path = itemId.getPath(); if (path.endsWith(".icon_empty") || path.endsWith(".icon")) return null; @@ -115,8 +115,8 @@ public static boolean itemsMatch(ItemStack item, ItemStack compare) { ItemStack item1 = item != null ? item : ItemStack.EMPTY; ItemStack item2 = compare != null ? compare : ItemStack.EMPTY; - ResourceLocation item1ID = Utils.getCustomItemID(item1); - ResourceLocation item2ID = Utils.getCustomItemID(item2); + Identifier item1ID = Utils.getCustomItemID(item1); + Identifier item2ID = Utils.getCustomItemID(item2); return Objects.equals(item1ID, item2ID); } 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 1c8f9f11..f1d4b924 100644 --- a/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java +++ b/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java @@ -2,6 +2,7 @@ import net.minecraft.client.gui.GuiGraphics; 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; @@ -10,7 +11,7 @@ public class CosmeticUI { public static void renderPlayerInInventory(GuiGraphics 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); + float xRot = (float) Math.atan(CosmeticState.xRot / 40.0f); // save rotations float preYBodyRot = livingEntity.yBodyRot; @@ -32,19 +33,21 @@ public static void renderPlayerInInventory(GuiGraphics guiGraphics, int x0, int // here we make some quaternions and do some math with them // idfk this is just what the inventory code does :sob: // magic values - InventoryScreen#renderEntityInInventoryFollowsMouse - Quaternionf quaternionf = (new Quaternionf()).rotateZ(3.1415927F); - Quaternionf quaternionf2 = (new Quaternionf()).rotateX(xRot * 20.0F * 0.017453292F); + Quaternionf quaternionf = (new Quaternionf()).rotateZ((float) Math.PI); + Quaternionf quaternionf2 = (new Quaternionf()).rotateX(xRot * 20.0F * ((float) Math.PI / 180.0F)); quaternionf.mul(quaternionf2); Vector3f vector3f = new Vector3f(0.0F, livingEntity.getBbHeight() / 2.0F + f * livingEntityScale, 0.0F); - InventoryScreen.renderEntityInInventory( - guiGraphics, - x0, y0, x1, y1, - size / livingEntityScale, - vector3f, - quaternionf, - quaternionf2, - livingEntity - ); +// InventoryScreen.renderEntityInInventoryFollowsMouse( +// guiGraphics, +// x0, y0, x1, y1, +// size / livingEntityScale, +// vector3f, +// quaternionf, +// quaternionf2, +// livingEntity +// ); + EntityRenderState renderState = InventoryScreen.extractRenderState(livingEntity); + guiGraphics.submitEntityRenderState(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 c5a500ff..80e89cc8 100644 --- a/src/main/java/net/asodev/islandutils/modules/crafting/CraftingToast.java +++ b/src/main/java/net/asodev/islandutils/modules/crafting/CraftingToast.java @@ -6,11 +6,11 @@ import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.Toast; -import net.minecraft.client.resources.language.I18n; import net.minecraft.client.gui.components.toasts.ToastManager; import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.util.FormattedCharSequence; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; @@ -22,7 +22,7 @@ import static net.asodev.islandutils.util.Utils.MCC_HUD_FONT; public class CraftingToast implements Toast { - private static final ResourceLocation ISLAND_TOASTS_TEXTURE = ResourceLocation.fromNamespaceAndPath("island", "toasts"); + private static final Identifier ISLAND_TOASTS_TEXTURE = Identifier.fromNamespaceAndPath("island", "toasts"); private static final long DISPLAY_TIME = 5000; // 5s ItemStack itemStack; diff --git a/src/main/java/net/asodev/islandutils/modules/crafting/CraftingUI.java b/src/main/java/net/asodev/islandutils/modules/crafting/CraftingUI.java index 576c2810..4152ba35 100644 --- a/src/main/java/net/asodev/islandutils/modules/crafting/CraftingUI.java +++ b/src/main/java/net/asodev/islandutils/modules/crafting/CraftingUI.java @@ -8,15 +8,16 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FontDescription; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import java.util.List; import java.util.stream.Collectors; public class CraftingUI { - public static Style CHEST_BACKGROUND_STYLE = Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(ResourceLocation.fromNamespaceAndPath("mcc", "chest_backgrounds")); + public static Style CHEST_BACKGROUND_STYLE = Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(new FontDescription.Resource(Identifier.fromNamespaceAndPath("mcc", "chest_backgrounds"))); private static Component assemblerComponent; private static Component forgeComponent; @@ -55,7 +56,7 @@ public static void analyseCraftingItem(CraftingMenuType type, ItemStack item, in craftingItem.setSlot(slot); craftingItem.setType(item.getItem()); craftingItem.setTitle(item.getHoverName()); - craftingItem.setItemModel(item.getOrDefault(DataComponents.ITEM_MODEL, ResourceLocation.withDefaultNamespace("missingno"))); + craftingItem.setItemModel(item.getOrDefault(DataComponents.ITEM_MODEL, Identifier.withDefaultNamespace("missingno"))); CraftingItems.addItem(craftingItem); ChatUtils.debug("[#" + slot + " " + type.name() + "] Found active craft: " + item.getDisplayName().getString() + " (" + timeLeft + ")"); diff --git a/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItem.java b/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItem.java index 6277d826..710e6e0e 100644 --- a/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItem.java +++ b/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItem.java @@ -10,7 +10,7 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentSerialization; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -18,7 +18,7 @@ public class CraftingItem { private Component title; private Item type; - private ResourceLocation itemModel; + private Identifier itemModel; private long finishesCrafting; private CraftingMenuType craftingMenuType; @@ -44,12 +44,12 @@ public static CraftingItem fromJson(JsonElement element) { JsonElement jsonTitle = object.get("title"); item.setTitle(ComponentSerialization.CODEC.decode(JsonOps.INSTANCE, jsonTitle).getOrThrow().getFirst()); - ResourceLocation typeKey = ResourceLocation.parse(object.get("type").getAsString()); + Identifier typeKey = Identifier.parse(object.get("type").getAsString()); Holder.Reference itemType = BuiltInRegistries.ITEM.get(typeKey) .orElseThrow(() -> new IllegalStateException("Item with type " + typeKey + " does not exist.")); item.setType(itemType.value()); - item.setItemModel(ResourceLocation.parse(object.get("itemModel").getAsString())); + item.setItemModel(Identifier.parse(object.get("itemModel").getAsString())); String craftingTypeString = object.get("craftingMenuType").getAsString(); item.setCraftingMenuType(CraftingMenuType.valueOf(craftingTypeString.toUpperCase())); @@ -91,11 +91,11 @@ public void setType(Item type) { this.type = type; } - public ResourceLocation getItemModel() { + public Identifier getItemModel() { return itemModel; } - public void setItemModel(ResourceLocation itemModel) { + public void setItemModel(Identifier itemModel) { this.itemModel = itemModel; } diff --git a/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItems.java b/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItems.java index f8d2fd0e..fcdcd984 100644 --- a/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItems.java +++ b/src/main/java/net/asodev/islandutils/modules/crafting/state/CraftingItems.java @@ -9,7 +9,7 @@ import net.asodev.islandutils.util.Utils; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Items; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -124,7 +124,7 @@ public static void addDebugItem(String color, Integer slot, Integer delay) { // Legendary = #FF8000 // Mythic = #F94242 - item.setItemModel(ResourceLocation.parse("mcc:island_interface/style_perks/arcane_quests")); + item.setItemModel(Identifier.parse("mcc:island_interface/style_perks/arcane_quests")); item.setFinishesCrafting(System.currentTimeMillis() + delay * 1000); item.setHasSentNotif(false); item.setSlot(slot); 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 07ca8476..d11f3308 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 @@ -18,6 +18,7 @@ import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.network.chat.Component; +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; @@ -110,7 +111,7 @@ public static Component activeCraftsMessage() { timeColor = ChatFormatting.DARK_GREEN; } - Component itemComponent = Component.literal(" ").withStyle(Style.EMPTY.withFont(Style.DEFAULT_FONT)) + Component itemComponent = Component.literal(" ").withStyle(Style.EMPTY.withFont(FontDescription.DEFAULT)) .append(item.getTypeIcon()) .append(" ") .append(item.getTitle()) diff --git a/src/main/java/net/asodev/islandutils/modules/music/HubMusic.java b/src/main/java/net/asodev/islandutils/modules/music/HubMusic.java index a1156caf..23f3aa41 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/HubMusic.java +++ b/src/main/java/net/asodev/islandutils/modules/music/HubMusic.java @@ -1,17 +1,17 @@ package net.asodev.islandutils.modules.music; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public class HubMusic { - public static ResourceLocation HUB_CLASSIC = get("hub_classic"); - public static ResourceLocation HUB_LIKE = get("hub_like"); - public static ResourceLocation HUBBIN = get("hubbin"); - public static ResourceLocation ISLAND = get("island"); - public static ResourceLocation OUR_HUB = get("our_hub"); - public static ResourceLocation RELAX_HUB = get("relax_hub"); - public static ResourceLocation WE_ARE = get("we_are"); + public static Identifier HUB_CLASSIC = get("hub_classic"); + public static Identifier HUB_LIKE = get("hub_like"); + public static Identifier HUBBIN = get("hubbin"); + public static Identifier ISLAND = get("island"); + public static Identifier OUR_HUB = get("our_hub"); + public static Identifier RELAX_HUB = get("relax_hub"); + public static Identifier WE_ARE = get("we_are"); - private static ResourceLocation get(String name) { - return ResourceLocation.fromNamespaceAndPath("island", "island.music." + name); + private static Identifier get(String name) { + return Identifier.fromNamespaceAndPath("island", "island.music." + name); } } diff --git a/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java b/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java index ad109cce..e4db2dff 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java +++ b/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java @@ -20,7 +20,7 @@ import net.minecraft.client.sounds.SoundManager; import net.minecraft.network.protocol.game.ClientboundSoundPacket; import net.minecraft.network.protocol.game.ClientboundStopSoundPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.ArrayList; import java.util.List; @@ -96,17 +96,17 @@ public static void startMusic(SoundInfo info) { MCCSoundInstance instance = newSoundInfo.toSoundInstance(); currentlyPlaying = instance; - ChatUtils.debug("Starting music: " + instance.getLocation()); + ChatUtils.debug("Starting music: " + instance.getIdentifier()); Minecraft.getInstance().getSoundManager().play(instance); } public static void onMusicStopPacket(ClientboundStopSoundPacket packet, Minecraft minecraft) { - ResourceLocation name = packet.getName(); - ResourceLocation modifiedName = applyModifiers(SoundInfo.fromLocation(name)).path(); + Identifier name = packet.getName(); + Identifier modifiedName = applyModifiers(SoundInfo.fromLocation(name)).path(); SoundManager soundManager = Minecraft.getInstance().getSoundManager(); for (SoundInstance instance : getActiveSoundInstances()) { - if (instance.getLocation().equals(name) || instance.getLocation().equals(modifiedName)) { + if (instance.getIdentifier().equals(name) || instance.getIdentifier().equals(modifiedName)) { if (instance instanceof MCCSoundInstance mccSound) { mccSound.fade(FADE_DURATION); } else { @@ -114,7 +114,7 @@ public static void onMusicStopPacket(ClientboundStopSoundPacket packet, Minecraf } } } - if (currentlyPlaying != null && currentlyPlaying.getLocation().equals(name)) { + if (currentlyPlaying != null && currentlyPlaying.getIdentifier().equals(name)) { currentlyPlaying = null; } } diff --git a/src/main/java/net/asodev/islandutils/modules/music/MusicModifier.java b/src/main/java/net/asodev/islandutils/modules/music/MusicModifier.java index 24ec6a0b..8ad9c87a 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/MusicModifier.java +++ b/src/main/java/net/asodev/islandutils/modules/music/MusicModifier.java @@ -1,14 +1,13 @@ package net.asodev.islandutils.modules.music; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public abstract class MusicModifier { private boolean isEnabled = defaultOption(); private final String identifier; private final Component name; private final Component desc; - public MusicModifier(String identifier) { this.identifier = identifier; this.name = Component.translatable("islandutils.music_modifier." + identifier); @@ -21,7 +20,7 @@ public String toString() { } public abstract SoundInfo apply(SoundInfo info); - public abstract boolean shouldApply(ResourceLocation soundLocation); + public abstract boolean shouldApply(Identifier soundLocation); public boolean hasOption() { return true; diff --git a/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java b/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java index 8f675e67..772a7857 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java +++ b/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java @@ -3,13 +3,13 @@ import net.asodev.islandutils.util.MCCSoundInstance; import net.minecraft.core.Holder; import net.minecraft.network.protocol.game.ClientboundSoundPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; -public record SoundInfo(ResourceLocation path, SoundSource category, double x, double y, double z, float volume, float pitch, long seed, boolean looping) { +public record SoundInfo(Identifier path, SoundSource category, double x, double y, double z, float volume, float pitch, long seed, boolean looping) { - public SoundInfo withPath(ResourceLocation path) { + public SoundInfo withPath(Identifier path) { return new SoundInfo(path, category, x, y, z, volume, pitch, seed, looping); } @@ -25,7 +25,7 @@ public SoundInfo withLooping(boolean looping) { return new SoundInfo(path, category, x, y, z, volume, pitch, seed, looping); } - public static SoundInfo fromLocation(ResourceLocation location) { + public static SoundInfo fromLocation(Identifier location) { return new SoundInfo(location, SoundSource.MASTER, 0.0, 0.0, 0.0, 1f, 1f, 0L, false); } public static SoundInfo fromPacket(ClientboundSoundPacket soundPacket) { diff --git a/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java b/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java index 23611fdf..0fde328b 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java +++ b/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java @@ -2,7 +2,7 @@ import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public abstract class TrackMusicModifier extends MusicModifier { private String trackPath; @@ -13,11 +13,11 @@ public TrackMusicModifier(String trackPath, String identifier) { } @Override - public boolean shouldApply(ResourceLocation soundLocation) { + public boolean shouldApply(Identifier soundLocation) { return soundLocation.getPath().equals(trackPath) && shouldApply1(soundLocation); } - public boolean shouldApply1(ResourceLocation soundLocation) { + public boolean shouldApply1(Identifier soundLocation) { return true; } } diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java index fd0561a9..f5f6e716 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java @@ -8,7 +8,7 @@ import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.IslandSoundEvents; import net.minecraft.ChatFormatting; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import static net.minecraft.network.chat.Component.literal; import static net.minecraft.network.chat.Component.translatable; @@ -32,7 +32,7 @@ public boolean hasOption() { } @Override - public boolean shouldApply1(ResourceLocation soundLocation) { + public boolean shouldApply1(Identifier soundLocation) { return IslandOptions.getClassicHITW().isClassicHITWMusic(); } } diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/HighQualityMusic.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/HighQualityMusic.java index 176709ed..067d489c 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/HighQualityMusic.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/HighQualityMusic.java @@ -5,13 +5,13 @@ import net.asodev.islandutils.modules.music.SoundInfo; import net.asodev.islandutils.state.Game; import net.asodev.islandutils.util.ChatUtils; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.HashMap; import java.util.Map; public class HighQualityMusic extends MusicModifier { - Map replacements = new HashMap<>(); + Map replacements = new HashMap<>(); public HighQualityMusic() { super("global.hq"); @@ -35,7 +35,7 @@ public HighQualityMusic() { @Override public SoundInfo apply(SoundInfo info) { - ResourceLocation replacementPath = replacements.get(info.path().getPath()); + Identifier replacementPath = replacements.get(info.path().getPath()); ChatUtils.debug("High Quality music => " + replacementPath); return replacementPath != null ? info.withPath(replacementPath) : info; } @@ -46,7 +46,7 @@ public boolean defaultOption() { } @Override - public boolean shouldApply(ResourceLocation soundLocation) { + public boolean shouldApply(Identifier soundLocation) { return true; } } diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java index 87ef42fa..2ad28f70 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java @@ -4,7 +4,7 @@ import net.asodev.islandutils.modules.music.TrackMusicModifier; import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.IslandSoundEvents; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public class PreviousDynaballMusic extends TrackMusicModifier { public PreviousDynaballMusic(){ diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java index fde68276..f7af557c 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java @@ -4,7 +4,7 @@ import net.asodev.islandutils.modules.music.TrackMusicModifier; import net.asodev.islandutils.state.MccIslandState; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public class TgttosDomeModifier extends TrackMusicModifier { public TgttosDomeModifier(){ @@ -13,11 +13,11 @@ public TgttosDomeModifier(){ @Override public SoundInfo apply(SoundInfo info) { - return info.withPath(ResourceLocation.fromNamespaceAndPath("island", "island.music.to_the_dome")); + return info.withPath(Identifier.fromNamespaceAndPath("island", "island.music.to_the_dome")); } @Override - public boolean shouldApply1(ResourceLocation soundLocation) { + public boolean shouldApply1(Identifier soundLocation) { return MccIslandState.getModifier().equals("TO THE DOME"); } } diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java index d399317f..e8c1023d 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java @@ -7,7 +7,7 @@ import net.asodev.islandutils.util.MCCSoundInstance; import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; public class TgttosDoubleTime extends TrackMusicModifier { public TgttosDoubleTime(){ @@ -20,7 +20,7 @@ public SoundInfo apply(SoundInfo info) { } @Override - public boolean shouldApply1(ResourceLocation soundLocation) { + public boolean shouldApply1(Identifier soundLocation) { return MccIslandState.getModifier().equals("DOUBLE TIME"); } } 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 481c9f6e..2f5200c3 100644 --- a/src/main/java/net/asodev/islandutils/modules/scavenging/Scavenging.java +++ b/src/main/java/net/asodev/islandutils/modules/scavenging/Scavenging.java @@ -8,8 +8,9 @@ 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.network.chat.FontDescription; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.Container; import net.minecraft.world.inventory.ChestMenu; import net.minecraft.world.item.ItemStack; @@ -91,7 +92,7 @@ public static void setCoinCharacter(String coinCharacter) { public static void setTitleCharacter(String titleCharacter) { Scavenging.titleComponent = Component.literal(titleCharacter).withStyle( - Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(ResourceLocation.fromNamespaceAndPath("mcc", "chest_backgrounds")) + Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(new FontDescription.Resource(Identifier.fromNamespaceAndPath("mcc", "chest_backgrounds"))) ); } } diff --git a/src/main/java/net/asodev/islandutils/modules/splits/LevelTimer.java b/src/main/java/net/asodev/islandutils/modules/splits/LevelTimer.java index daa9a4ad..7195c6c2 100644 --- a/src/main/java/net/asodev/islandutils/modules/splits/LevelTimer.java +++ b/src/main/java/net/asodev/islandutils/modules/splits/LevelTimer.java @@ -16,7 +16,7 @@ import net.minecraft.network.chat.TextColor; import net.minecraft.network.protocol.game.ClientboundSetSubtitleTextPacket; import net.minecraft.network.protocol.game.ClientboundSoundPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.regex.Matcher; @@ -150,7 +150,7 @@ public Double getSplitImprovement() { public static void onSound(ClientboundSoundPacket clientboundSoundPacket) { if (!IslandOptions.getSplits().isEnablePkwSplits()) return; - ResourceLocation soundLoc = clientboundSoundPacket.getSound().value().location(); + Identifier soundLoc = clientboundSoundPacket.getSound().value().location(); String path = soundLoc.getPath(); boolean isRoundEnd = path.equals("games.global.timer.round_end"); if (path.contains("games.parkour_warrior.mode_swap") || 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 91a0ce4e..c80bcd1c 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 @@ -7,12 +7,12 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import static net.asodev.islandutils.util.FontUtils.*; public class DojoSplitUI implements SplitUI { - private static final ResourceLocation BAR_TEXTURE = ResourceLocation.fromNamespaceAndPath("island", "pkw_splits"); + private static final Identifier BAR_TEXTURE = Identifier.fromNamespaceAndPath("island", "pkw_splits"); private static final int MCC_BAR_WIDTH = 130; private final LevelTimer timer; diff --git a/src/main/java/net/asodev/islandutils/state/Game.java b/src/main/java/net/asodev/islandutils/state/Game.java index e7f44872..3aa2e512 100644 --- a/src/main/java/net/asodev/islandutils/state/Game.java +++ b/src/main/java/net/asodev/islandutils/state/Game.java @@ -1,7 +1,7 @@ package net.asodev.islandutils.state; import com.noxcrew.noxesium.network.clientbound.ClientboundMccServerPacket; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.NoSuchElementException; @@ -22,19 +22,19 @@ public enum Game { final private String name; final private String islandId; final private String subType; - final private ResourceLocation musicLocation; + final private Identifier musicLocation; private boolean hasTeamChat = false; - Game(String name, String islandId, ResourceLocation location) { + Game(String name, String islandId, Identifier location) { this.name = name; this.islandId = islandId; this.subType = null; this.musicLocation = location; } - Game(String name, String islandId, ResourceLocation location, boolean hasTeamChat) { + Game(String name, String islandId, Identifier location, boolean hasTeamChat) { this(name, islandId, location); this.hasTeamChat = hasTeamChat; } - Game(String name, String islandId, String subType, ResourceLocation location) { + Game(String name, String islandId, String subType, Identifier location) { this.name = name; this.islandId = islandId; this.subType = subType; @@ -44,7 +44,7 @@ public enum Game { public String getName() { return name; } - public ResourceLocation getMusicLocation() { + public Identifier getMusicLocation() { return musicLocation; } public boolean hasTeamChat() { @@ -54,8 +54,8 @@ public boolean isHubGame() { return this == FISHING || this == HUB; } - public static ResourceLocation getMusicLocation(String name) { - return ResourceLocation.fromNamespaceAndPath("island", "island.music." + name); + public static Identifier getMusicLocation(String name) { + return Identifier.fromNamespaceAndPath("island", "island.music." + name); } public static Game fromPacket(ClientboundMccServerPacket packet) throws NoSuchElementException { diff --git a/src/main/java/net/asodev/islandutils/util/FontUtils.java b/src/main/java/net/asodev/islandutils/util/FontUtils.java index 4b14b53e..5ff80927 100644 --- a/src/main/java/net/asodev/islandutils/util/FontUtils.java +++ b/src/main/java/net/asodev/islandutils/util/FontUtils.java @@ -4,21 +4,22 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FontDescription; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.jetbrains.annotations.Nullable; public class FontUtils { - public static final ResourceLocation MCC_HUD_FONT = ResourceLocation.fromNamespaceAndPath("mcc", "hud"); - public static final ResourceLocation MCC_ICONS_FONT = ResourceLocation.fromNamespaceAndPath("island", "mcc_icons"); - public static final ResourceLocation CUSTOM_ICONS_FONT = ResourceLocation.fromNamespaceAndPath("island", "custom_icons"); - public static final ResourceLocation CUSTOM_SPLIT_FONT = ResourceLocation.fromNamespaceAndPath("island", "split"); + public static final Identifier MCC_HUD_FONT = Identifier.fromNamespaceAndPath("mcc", "hud"); + public static final Identifier MCC_ICONS_FONT = Identifier.fromNamespaceAndPath("island", "mcc_icons"); + public static final Identifier CUSTOM_ICONS_FONT = Identifier.fromNamespaceAndPath("island", "custom_icons"); + public static final Identifier CUSTOM_SPLIT_FONT = Identifier.fromNamespaceAndPath("island", "split"); - public static final Style MCC_HUD_STYLE = Style.EMPTY.withFont(MCC_HUD_FONT); - public static final Style MCC_ICONS_STYLE = Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(MCC_ICONS_FONT); - public static final Style CUSTOM_ICONS_STYLE = Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(CUSTOM_ICONS_FONT); - public static final Style CUSTOM_SPLIT_STYLE = Style.EMPTY.withFont(CUSTOM_SPLIT_FONT); + public static final Style MCC_HUD_STYLE = Style.EMPTY.withFont(new FontDescription.Resource(MCC_HUD_FONT)); + public static final Style MCC_ICONS_STYLE = Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(new FontDescription.Resource(MCC_ICONS_FONT)); + public static final Style CUSTOM_ICONS_STYLE = Style.EMPTY.withColor(ChatFormatting.WHITE).withFont(new FontDescription.Resource(CUSTOM_ICONS_FONT)); + public static final Style CUSTOM_SPLIT_STYLE = Style.EMPTY.withFont(new FontDescription.Resource(CUSTOM_SPLIT_FONT)); public static Component CRAFTING = Component.literal("\ue003").withStyle(MCC_ICONS_STYLE); public static Component FUSION_CRAFTING = Component.literal("\ue002").withStyle(MCC_ICONS_STYLE); diff --git a/src/main/java/net/asodev/islandutils/util/IslandSoundEvents.java b/src/main/java/net/asodev/islandutils/util/IslandSoundEvents.java index dc1ae970..b5af604f 100644 --- a/src/main/java/net/asodev/islandutils/util/IslandSoundEvents.java +++ b/src/main/java/net/asodev/islandutils/util/IslandSoundEvents.java @@ -1,6 +1,6 @@ package net.asodev.islandutils.util; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; public class IslandSoundEvents { @@ -9,14 +9,14 @@ public class IslandSoundEvents { public static final SoundEvent ANNOUNCER_GAME_OVER = islandUtilsEvent("announcer.gameover"); private static SoundEvent soundEvent(String path) { - return SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath("mcc", path)); + return SoundEvent.createVariableRangeEvent(Identifier.fromNamespaceAndPath("mcc", path)); } private static SoundEvent islandUtilsEvent(String path) { return SoundEvent.createVariableRangeEvent(islandSound(path)); } - public static ResourceLocation islandSound(String path) { - return ResourceLocation.fromNamespaceAndPath("island", path); + public static Identifier islandSound(String path) { + return Identifier.fromNamespaceAndPath("island", path); } } diff --git a/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java b/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java index c1521fac..192c7293 100644 --- a/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java +++ b/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java @@ -3,7 +3,7 @@ import net.asodev.islandutils.modules.music.SoundInfo; import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; @@ -12,14 +12,14 @@ public class MCCSoundInstance extends AbstractTickableSoundInstance { - public ResourceLocation location; + public Identifier location; public float totalVolume; public float totalFadeTicks = 20f; public float fadeTicks = 0f; public boolean isFading = false; - public MCCSoundInstance(ResourceLocation location, SoundSource soundSource, float volume,float pitch, RandomSource randomSource, double x, double y, double z) { + public MCCSoundInstance(Identifier location, SoundSource soundSource, float volume,float pitch, RandomSource randomSource, double x, double y, double z) { super(SoundEvent.createVariableRangeEvent(location), soundSource, randomSource); this.location = location; this.volume = volume; diff --git a/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java b/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java index 76e74d4a..7e98799e 100644 --- a/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java +++ b/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java @@ -10,6 +10,7 @@ import net.minecraft.network.chat.Style; import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.NonNull; public class PlainTextButtonNoShadow extends Button { private final Font font; @@ -24,7 +25,7 @@ public PlainTextButtonNoShadow(int i, int j, int k, int l, Component component, } @Override - public void renderWidget(GuiGraphics guiGraphics, int i, int j, float f) { + public void renderContents(GuiGraphics 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); } diff --git a/src/main/java/net/asodev/islandutils/util/Utils.java b/src/main/java/net/asodev/islandutils/util/Utils.java index 26881ee9..b0de35b0 100644 --- a/src/main/java/net/asodev/islandutils/util/Utils.java +++ b/src/main/java/net/asodev/islandutils/util/Utils.java @@ -6,8 +6,9 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.FontDescription; import net.minecraft.network.chat.Style; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -31,7 +32,7 @@ public class Utils { private static final Logger logger = LoggerFactory.getLogger(Utils.class); public static final ExecutorService savingQueue = Executors.newFixedThreadPool(2); - public static final Style MCC_HUD_FONT = Style.EMPTY.withFont(ResourceLocation.fromNamespaceAndPath("mcc", "hud")); + public static final Style MCC_HUD_FONT = Style.EMPTY.withFont(new FontDescription.Resource(Identifier.fromNamespaceAndPath("mcc", "hud"))); public static final String BLANK_ITEM_ID = "island_interface.generic.blank"; private static final List NON_PROD_IP_HASHES = List.of( "e927084bb931f83eece6780afd9046f121a798bf3ff3c78a9399b08c1dfb1aec", // bigrat.mccisland.net easteregg/test ip @@ -68,9 +69,9 @@ public static void assertIslandFolder() { if (!folder.exists()) folder.mkdir(); } - public static ResourceLocation getCustomItemID(ItemStack item) { + public static Identifier getCustomItemID(ItemStack item) { var base = item.get(DataComponents.ITEM_MODEL); - return base == null ? null : ResourceLocation.fromNamespaceAndPath(base.getNamespace(), base.getPath().replace("/", ".")); + return base == null ? null : Identifier.fromNamespaceAndPath(base.getNamespace(), base.getPath().replace("/", ".")); } public static boolean isProdMCCI(String hostname) { diff --git a/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java b/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java index b3e572a6..98ff0442 100644 --- a/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java +++ b/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java @@ -3,7 +3,7 @@ import com.google.gson.Gson; import net.asodev.islandutils.IslandUtils; import net.asodev.islandutils.util.resourcepack.schema.ResourcePack; -import net.minecraft.FileUtil; +import net.minecraft.util.FileUtil; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.server.packs.FilePackResources; diff --git a/src/main/resources/islandutils.accesswidener b/src/main/resources/islandutils.accesswidener index d0a4af01..2a4614e9 100644 --- a/src/main/resources/islandutils.accesswidener +++ b/src/main/resources/islandutils.accesswidener @@ -3,4 +3,5 @@ accessWidener v1 named #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 #accessible method net/minecraft/util/HttpUtil downloadAndHash (Lcom/google/common/hash/HashFunction;ILnet/minecraft/util/HttpUtil$DownloadProgressListener;Ljava/io/InputStream;Ljava/nio/file/Path;)Lcom/google/common/hash/HashCode; -#accessible method net/minecraft/client/resources/server/DownloadedPackSource createDownloadNotifier (I)Lnet/minecraft/util/HttpUtil$DownloadProgressListener; \ No newline at end of file +#accessible method net/minecraft/client/resources/server/DownloadedPackSource createDownloadNotifier (I)Lnet/minecraft/util/HttpUtil$DownloadProgressListener; +accessible method net/minecraft/client/gui/screens/inventory/InventoryScreen extractRenderState (Lnet/minecraft/world/entity/LivingEntity;)Lnet/minecraft/client/renderer/entity/state/EntityRenderState; \ No newline at end of file From 8095d0787f0d63b93ef52bc6c8bd492ffcfe215f Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 20 Jan 2026 22:28:31 +0300 Subject: [PATCH 03/11] chore: Removed unused imports --- .../islandutils/discord/DiscordPresenceUpdator.java | 2 +- .../islandutils/discord/FishingPresenceUpdator.java | 3 --- .../net/asodev/islandutils/mixins/BossUIMixin.java | 6 +----- .../islandutils/mixins/cosmetics/ChestScreenMixin.java | 1 - .../mixins/cosmetics/PreviewTutorialMixin.java | 3 --- .../asodev/islandutils/mixins/cosmetics/UIMixin.java | 2 -- .../mixins/crafting/CraftingPacketMixin.java | 1 - .../asodev/islandutils/modules/music/MusicManager.java | 8 +------- .../asodev/islandutils/modules/music/SoundInfo.java | 2 -- .../islandutils/modules/music/TrackMusicModifier.java | 2 -- .../modules/music/modifiers/ClassicHitwMusic.java | 2 -- .../modules/music/modifiers/PreviousDynaballMusic.java | 2 -- .../modules/music/modifiers/TgttosDomeModifier.java | 1 - .../modules/music/modifiers/TgttosDoubleTime.java | 4 ---- .../modules/scavenging/ScavengingItemHandler.java | 1 - .../asodev/islandutils/modules/splits/LevelSplits.java | 6 +----- .../net/asodev/islandutils/options/IslandOptions.java | 10 +--------- .../net/asodev/islandutils/util/MCCSoundInstance.java | 3 --- .../islandutils/util/PlainTextButtonNoShadow.java | 1 - src/main/java/net/asodev/islandutils/util/Sidebar.java | 1 - src/main/java/net/asodev/islandutils/util/Utils.java | 1 - .../util/resourcepack/ResourcePackUpdater.java | 2 +- 22 files changed, 6 insertions(+), 58 deletions(-) diff --git a/src/main/java/net/asodev/islandutils/discord/DiscordPresenceUpdator.java b/src/main/java/net/asodev/islandutils/discord/DiscordPresenceUpdator.java index 71fac84b..b0000927 100644 --- a/src/main/java/net/asodev/islandutils/discord/DiscordPresenceUpdator.java +++ b/src/main/java/net/asodev/islandutils/discord/DiscordPresenceUpdator.java @@ -7,8 +7,8 @@ import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.options.categories.DiscordOptions; import net.asodev.islandutils.state.Game; -import net.minecraft.client.resources.language.I18n; import net.asodev.islandutils.state.MccIslandState; +import net.minecraft.client.resources.language.I18n; import org.jetbrains.annotations.Nullable; import java.time.Instant; diff --git a/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java b/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java index 3993d856..a36fd254 100644 --- a/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java +++ b/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java @@ -1,11 +1,8 @@ package net.asodev.islandutils.discord; -import net.asodev.islandutils.IslandUtilsEvents; -import net.asodev.islandutils.state.Game; import net.asodev.islandutils.state.MccIslandState; import net.minecraft.client.resources.language.I18n; -import java.time.Instant; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java b/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java index 90e264fe..2ec4c9a9 100644 --- a/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/BossUIMixin.java @@ -13,11 +13,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * We're using a mixin rather than HudRenderCallback because 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 b61e07fd..b44e64dc 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java @@ -6,7 +6,6 @@ import net.asodev.islandutils.modules.cosmetics.CosmeticState; import net.asodev.islandutils.modules.cosmetics.CosmeticType; import net.asodev.islandutils.options.IslandOptions; -import net.asodev.islandutils.state.Game; import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.IslandSoundEvents; import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; diff --git a/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java b/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java index e688ed46..c959bf3a 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/PreviewTutorialMixin.java @@ -1,9 +1,6 @@ package net.asodev.islandutils.mixins.cosmetics; import net.asodev.islandutils.modules.cosmetics.CosmeticState; -import net.asodev.islandutils.options.IslandOptions; -import net.asodev.islandutils.state.Game; -import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.FontUtils; import net.minecraft.ChatFormatting; 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 9895e48d..af120c88 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java @@ -6,8 +6,6 @@ import net.asodev.islandutils.modules.cosmetics.CosmeticUI; import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.options.categories.CosmeticsOptions; -import net.asodev.islandutils.state.Game; -import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.FontUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; diff --git a/src/main/java/net/asodev/islandutils/mixins/crafting/CraftingPacketMixin.java b/src/main/java/net/asodev/islandutils/mixins/crafting/CraftingPacketMixin.java index 3ce97c14..935a1ffe 100644 --- a/src/main/java/net/asodev/islandutils/mixins/crafting/CraftingPacketMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/crafting/CraftingPacketMixin.java @@ -3,7 +3,6 @@ import net.asodev.islandutils.modules.crafting.CraftingMenuType; import net.asodev.islandutils.modules.crafting.CraftingUI; import net.asodev.islandutils.state.MccIslandState; -import net.asodev.islandutils.util.ChatUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.network.chat.Component; diff --git a/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java b/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java index e4db2dff..c4db1593 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java +++ b/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java @@ -1,15 +1,9 @@ package net.asodev.islandutils.modules.music; -import net.asodev.islandutils.IslandUtilsClient; import net.asodev.islandutils.mixins.accessors.SoundEngineAccessor; import net.asodev.islandutils.mixins.accessors.SoundManagerAccessor; -import net.asodev.islandutils.modules.music.modifiers.ClassicHitwMusic; -import net.asodev.islandutils.modules.music.modifiers.HighQualityMusic; -import net.asodev.islandutils.modules.music.modifiers.PreviousDynaballMusic; -import net.asodev.islandutils.modules.music.modifiers.TgttosDomeModifier; -import net.asodev.islandutils.modules.music.modifiers.TgttosDoubleTime; +import net.asodev.islandutils.modules.music.modifiers.*; import net.asodev.islandutils.options.IslandOptions; -import net.asodev.islandutils.options.saving.IslandUtilsSaveHandler; import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.MCCSoundInstance; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; diff --git a/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java b/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java index 772a7857..289c9040 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java +++ b/src/main/java/net/asodev/islandutils/modules/music/SoundInfo.java @@ -1,10 +1,8 @@ package net.asodev.islandutils.modules.music; import net.asodev.islandutils.util.MCCSoundInstance; -import net.minecraft.core.Holder; import net.minecraft.network.protocol.game.ClientboundSoundPacket; import net.minecraft.resources.Identifier; -import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; public record SoundInfo(Identifier path, SoundSource category, double x, double y, double z, float volume, float pitch, long seed, boolean looping) { diff --git a/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java b/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java index 0fde328b..37935877 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java +++ b/src/main/java/net/asodev/islandutils/modules/music/TrackMusicModifier.java @@ -1,7 +1,5 @@ package net.asodev.islandutils.modules.music; -import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; public abstract class TrackMusicModifier extends MusicModifier { diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java index f5f6e716..21a4b352 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/ClassicHitwMusic.java @@ -1,10 +1,8 @@ package net.asodev.islandutils.modules.music.modifiers; -import net.asodev.islandutils.IslandUtils; import net.asodev.islandutils.modules.music.SoundInfo; import net.asodev.islandutils.modules.music.TrackMusicModifier; import net.asodev.islandutils.options.IslandOptions; -import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.ChatUtils; import net.asodev.islandutils.util.IslandSoundEvents; import net.minecraft.ChatFormatting; diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java index 2ad28f70..dbd751f5 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/PreviousDynaballMusic.java @@ -2,9 +2,7 @@ import net.asodev.islandutils.modules.music.SoundInfo; import net.asodev.islandutils.modules.music.TrackMusicModifier; -import net.asodev.islandutils.state.MccIslandState; import net.asodev.islandutils.util.IslandSoundEvents; -import net.minecraft.resources.Identifier; public class PreviousDynaballMusic extends TrackMusicModifier { public PreviousDynaballMusic(){ diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java index f7af557c..56b352fd 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDomeModifier.java @@ -3,7 +3,6 @@ import net.asodev.islandutils.modules.music.SoundInfo; import net.asodev.islandutils.modules.music.TrackMusicModifier; import net.asodev.islandutils.state.MccIslandState; -import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; public class TgttosDomeModifier extends TrackMusicModifier { diff --git a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java index e8c1023d..cb00def1 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java +++ b/src/main/java/net/asodev/islandutils/modules/music/modifiers/TgttosDoubleTime.java @@ -1,12 +1,8 @@ package net.asodev.islandutils.modules.music.modifiers; -import net.asodev.islandutils.modules.music.MusicModifier; import net.asodev.islandutils.modules.music.SoundInfo; import net.asodev.islandutils.modules.music.TrackMusicModifier; import net.asodev.islandutils.state.MccIslandState; -import net.asodev.islandutils.util.MCCSoundInstance; -import net.minecraft.client.resources.sounds.SoundInstance; -import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; public class TgttosDoubleTime extends TrackMusicModifier { 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 055ec550..1e16bd3d 100644 --- a/src/main/java/net/asodev/islandutils/modules/scavenging/ScavengingItemHandler.java +++ b/src/main/java/net/asodev/islandutils/modules/scavenging/ScavengingItemHandler.java @@ -6,7 +6,6 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.ContainerScreen; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; import java.util.Objects; import java.util.regex.Matcher; diff --git a/src/main/java/net/asodev/islandutils/modules/splits/LevelSplits.java b/src/main/java/net/asodev/islandutils/modules/splits/LevelSplits.java index cfcd24a4..1296aff2 100644 --- a/src/main/java/net/asodev/islandutils/modules/splits/LevelSplits.java +++ b/src/main/java/net/asodev/islandutils/modules/splits/LevelSplits.java @@ -6,11 +6,7 @@ import net.asodev.islandutils.options.IslandOptions; import net.asodev.islandutils.util.ChatUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class LevelSplits { diff --git a/src/main/java/net/asodev/islandutils/options/IslandOptions.java b/src/main/java/net/asodev/islandutils/options/IslandOptions.java index 3c3d8261..2629d48d 100644 --- a/src/main/java/net/asodev/islandutils/options/IslandOptions.java +++ b/src/main/java/net/asodev/islandutils/options/IslandOptions.java @@ -6,15 +6,7 @@ import dev.isxander.yacl3.api.YetAnotherConfigLib; import net.asodev.islandutils.discord.DiscordPresenceUpdator; import net.asodev.islandutils.modules.splits.LevelTimer; -import net.asodev.islandutils.options.categories.ClassicOptions; -import net.asodev.islandutils.options.categories.CosmeticsOptions; -import net.asodev.islandutils.options.categories.CraftingOptions; -import net.asodev.islandutils.options.categories.DiscordOptions; -import net.asodev.islandutils.options.categories.MiscOptions; -import net.asodev.islandutils.options.categories.MusicOptions; -import net.asodev.islandutils.options.categories.OptionsCategory; -import net.asodev.islandutils.options.categories.PlobbyOptions; -import net.asodev.islandutils.options.categories.SplitsCategory; +import net.asodev.islandutils.options.categories.*; import net.asodev.islandutils.options.saving.IslandUtilsSaveHandler; import net.asodev.islandutils.util.Utils; import net.fabricmc.loader.api.FabricLoader; diff --git a/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java b/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java index 192c7293..9d8cf1d4 100644 --- a/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java +++ b/src/main/java/net/asodev/islandutils/util/MCCSoundInstance.java @@ -2,14 +2,11 @@ import net.asodev.islandutils.modules.music.SoundInfo; import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance; -import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; -import java.util.List; - public class MCCSoundInstance extends AbstractTickableSoundInstance { public Identifier location; diff --git a/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java b/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java index 7e98799e..093a5480 100644 --- a/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java +++ b/src/main/java/net/asodev/islandutils/util/PlainTextButtonNoShadow.java @@ -10,7 +10,6 @@ import net.minecraft.network.chat.Style; import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; -import org.jspecify.annotations.NonNull; public class PlainTextButtonNoShadow extends Button { private final Font font; diff --git a/src/main/java/net/asodev/islandutils/util/Sidebar.java b/src/main/java/net/asodev/islandutils/util/Sidebar.java index 277d8429..6dc5197f 100644 --- a/src/main/java/net/asodev/islandutils/util/Sidebar.java +++ b/src/main/java/net/asodev/islandutils/util/Sidebar.java @@ -5,7 +5,6 @@ import net.minecraft.world.scores.DisplaySlot; import net.minecraft.world.scores.Objective; import net.minecraft.world.scores.PlayerScoreEntry; -import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Scoreboard; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/net/asodev/islandutils/util/Utils.java b/src/main/java/net/asodev/islandutils/util/Utils.java index b0de35b0..03a36665 100644 --- a/src/main/java/net/asodev/islandutils/util/Utils.java +++ b/src/main/java/net/asodev/islandutils/util/Utils.java @@ -12,7 +12,6 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java b/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java index 98ff0442..4b422c27 100644 --- a/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java +++ b/src/main/java/net/asodev/islandutils/util/resourcepack/ResourcePackUpdater.java @@ -3,7 +3,6 @@ import com.google.gson.Gson; import net.asodev.islandutils.IslandUtils; import net.asodev.islandutils.util.resourcepack.schema.ResourcePack; -import net.minecraft.util.FileUtil; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.server.packs.FilePackResources; @@ -12,6 +11,7 @@ import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackCompatibility; import net.minecraft.server.packs.repository.PackSource; +import net.minecraft.util.FileUtil; import net.minecraft.util.HttpUtil; import net.minecraft.world.flag.FeatureFlagSet; import org.slf4j.Logger; From 4c2ce8055a7ba5b07aaad2af5948c6daf258ff51 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 20 Jan 2026 23:58:49 +0300 Subject: [PATCH 04/11] chore: Update to Noxesium 3.0 --- .../asodev/islandutils/IslandUtilsClient.java | 3 +- .../discord/FishingPresenceUpdator.java | 4 +- .../modules/NoxesiumEntrypoint.java | 10 ++++ .../modules/NoxesiumIntegration.java | 10 ++-- .../net/asodev/islandutils/state/Game.java | 59 ++++++++++--------- src/main/resources/fabric.mod.json | 5 +- 6 files changed, 50 insertions(+), 41 deletions(-) create mode 100644 src/main/java/net/asodev/islandutils/modules/NoxesiumEntrypoint.java diff --git a/src/main/java/net/asodev/islandutils/IslandUtilsClient.java b/src/main/java/net/asodev/islandutils/IslandUtilsClient.java index 07ee21a5..bae0b629 100644 --- a/src/main/java/net/asodev/islandutils/IslandUtilsClient.java +++ b/src/main/java/net/asodev/islandutils/IslandUtilsClient.java @@ -27,7 +27,7 @@ public class IslandUtilsClient implements ClientModInitializer { public static KeyMapping openPlobbyKey; public static KeyMapping disguiseKeyBind; - public static KeyMapping.Category keyCategory = new KeyMapping.Category(Identifier.fromNamespaceAndPath("island", "category.islandutils.keys")); + public static KeyMapping.Category keyCategory = new KeyMapping.Category(Identifier.fromNamespaceAndPath("islandutils", "keys")); @Override public void onInitializeClient() { @@ -53,7 +53,6 @@ public void onInitializeClient() { if (Utils.isLunarClient()) { SplitUI.setupFallbackRenderer(); } - new NoxesiumIntegration().init(); MusicManager.init(); IslandUtilsEvents.PACK_FINAL_RESULT.register((uuid, finalResult) -> FontLoaderManager.warnAboutUnfulfilledAssets()); diff --git a/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java b/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java index a36fd254..36f4d236 100644 --- a/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java +++ b/src/main/java/net/asodev/islandutils/discord/FishingPresenceUpdator.java @@ -36,10 +36,10 @@ public static void init() { public static void updateFishingPlace() { if (activity == null) return; - String place = islandNames.get(MccIslandState.getSubType()); + String place = islandNames.get(MccIslandState.getFishingIsland()); if (place != null) { activity.setDetails(I18n.get("islandutils.discordPresence.details.inThePlace",place)); - activity.assets().setLargeImage(MccIslandState.getSubType().toLowerCase()); + activity.assets().setLargeImage(MccIslandState.getFishingIsland()); activity.assets().setLargeText(place); activity.assets().setSmallImage("fishing"); diff --git a/src/main/java/net/asodev/islandutils/modules/NoxesiumEntrypoint.java b/src/main/java/net/asodev/islandutils/modules/NoxesiumEntrypoint.java new file mode 100644 index 00000000..8456c05d --- /dev/null +++ b/src/main/java/net/asodev/islandutils/modules/NoxesiumEntrypoint.java @@ -0,0 +1,10 @@ +package net.asodev.islandutils.modules; + +import com.noxcrew.noxesium.core.fabric.mcc.MccNoxesiumEntrypoint; + +public class NoxesiumEntrypoint extends MccNoxesiumEntrypoint { + @Override + public void initialize() { + new NoxesiumIntegration().init(); + } +} diff --git a/src/main/java/net/asodev/islandutils/modules/NoxesiumIntegration.java b/src/main/java/net/asodev/islandutils/modules/NoxesiumIntegration.java index 8de17c63..fe44fecd 100644 --- a/src/main/java/net/asodev/islandutils/modules/NoxesiumIntegration.java +++ b/src/main/java/net/asodev/islandutils/modules/NoxesiumIntegration.java @@ -1,8 +1,7 @@ package net.asodev.islandutils.modules; -import com.noxcrew.noxesium.NoxesiumFabricMod; -import com.noxcrew.noxesium.network.NoxesiumPackets; -import com.noxcrew.noxesium.network.clientbound.ClientboundMccServerPacket; +import com.noxcrew.noxesium.core.mcc.ClientboundMccServerPacket; +import com.noxcrew.noxesium.core.mcc.MccPackets; import net.asodev.islandutils.state.Game; import net.asodev.islandutils.state.MccIslandState; import org.slf4j.Logger; @@ -12,12 +11,11 @@ public class NoxesiumIntegration { private static final Logger LOGGER = LoggerFactory.getLogger(NoxesiumIntegration.class); public void init() { - NoxesiumFabricMod.initialize(); - NoxesiumPackets.CLIENT_MCC_SERVER.addListener(this, (any, packet, ctx) -> handleServerPacket(packet)); + MccPackets.CLIENTBOUND_MCC_SERVER.addListener(this, ClientboundMccServerPacket.class, (any, packet, ctx) -> handleServerPacket(packet)); } private void handleServerPacket(ClientboundMccServerPacket packet) { - MccIslandState.setSubType(packet.subType()); + MccIslandState.setTypes(packet.types()); try { MccIslandState.setGame(Game.fromPacket(packet)); } catch (Exception e) { diff --git a/src/main/java/net/asodev/islandutils/state/Game.java b/src/main/java/net/asodev/islandutils/state/Game.java index 3aa2e512..60caff88 100644 --- a/src/main/java/net/asodev/islandutils/state/Game.java +++ b/src/main/java/net/asodev/islandutils/state/Game.java @@ -1,45 +1,42 @@ package net.asodev.islandutils.state; -import com.noxcrew.noxesium.network.clientbound.ClientboundMccServerPacket; +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; public enum Game { - HUB("Hub", "", null), - FISHING("Hub", "", null), + HUB("Hub", null, null), + FISHING("Hub", null, null), - TGTTOS("TGTTOS", "tgttos", getMusicLocation("tgttos")), - HITW("Hole in the Wall", "hole_in_the_wall", getMusicLocation("hitw")), - BATTLE_BOX("Battle Box", "battle_box", getMusicLocation("battle_box"), true), - PARKOUR_WARRIOR_SURVIVOR("Parkour Warrior Survivor", "parkour_warrior", "survival", getMusicLocation("parkour_warrior")), - PARKOUR_WARRIOR_DOJO("Parkour Warrior Dojo", "parkour_warrior", getMusicLocation("parkour_warrior")), - DYNABALL("Dynaball", "dynaball", getMusicLocation("dynaball"), true), - ROCKET_SPLEEF_RUSH("Rocket Spleef Rush", "rocket_spleef", getMusicLocation("rsr")), - SKY_BATTLE("Sky Battle", "sky_battle", getMusicLocation("sky_battle"), true); + TGTTOS("TGTTOS", List.of("tgttos", "solo"), getMusicLocation("tgttos")), + HITW("Hole in the Wall", List.of("hole_in_the_wall", "solo"), getMusicLocation("hitw")), + BATTLE_BOX("Battle Box", List.of("battle_box", "team"), getMusicLocation("battle_box"), true), + BATTLE_BOX_ARENA("Battle Box Arena", List.of("battle_box", "team", "arena"), getMusicLocation("battle_box"), true), + PARKOUR_WARRIOR_SURVIVOR("Parkour Warrior Survivor", List.of("parkour_warrior", "solo", "survival"), getMusicLocation("parkour_warrior")), + PARKOUR_WARRIOR_DOJO("Parkour Warrior Dojo", null, getMusicLocation("parkour_warrior")), + DYNABALL("Dynaball", List.of("dynaball", "team"), getMusicLocation("dynaball"), true), + ROCKET_SPLEEF_RUSH("Rocket Spleef Rush", List.of("rocket_spleef", "solo"), getMusicLocation("rsr")), + SKY_BATTLE("Sky Battle", List.of("sky_battle", "team", "quad"), getMusicLocation("sky_battle"), true); final private String name; - final private String islandId; - final private String subType; + final private @Nullable List islandTypes; final private Identifier musicLocation; private boolean hasTeamChat = false; - Game(String name, String islandId, Identifier location) { + + Game(String name, @Nullable List islandTypes, Identifier location) { this.name = name; - this.islandId = islandId; - this.subType = null; + this.islandTypes = islandTypes; this.musicLocation = location; } - Game(String name, String islandId, Identifier location, boolean hasTeamChat) { - this(name, islandId, location); + Game(String name, @Nullable List islandTypes, Identifier location, boolean hasTeamChat) { + this(name, islandTypes, location); this.hasTeamChat = hasTeamChat; } - Game(String name, String islandId, String subType, Identifier location) { - this.name = name; - this.islandId = islandId; - this.subType = subType; - this.musicLocation = location; - } public String getName() { return name; @@ -59,7 +56,7 @@ public static Identifier getMusicLocation(String name) { } public static Game fromPacket(ClientboundMccServerPacket packet) throws NoSuchElementException { - switch (packet.serverType()) { + switch (packet.server()) { case "fishing" -> { return FISHING; } @@ -72,12 +69,16 @@ public static Game fromPacket(ClientboundMccServerPacket packet) throws NoSuchEl } for (Game game : values()) { - if (game.islandId.equals(packet.associatedGame())) { - if (game.subType != null && !game.subType.equals(packet.subType())) - continue; + if (game.islandTypes == null) continue; + if (new HashSet<>(packet.types()).containsAll(game.islandTypes)) { + // Handle an edge case for the Battle Box arena + if ((game == BATTLE_BOX || game == BATTLE_BOX_ARENA)) { + if (packet.types().contains("arena")) return BATTLE_BOX_ARENA; + return BATTLE_BOX; + } return game; } } - throw new NoSuchElementException("Game could not be found from '" + packet.associatedGame() + "' (" + packet.subType() + ")"); + throw new NoSuchElementException("Game could not be found from '" + packet.server() + "' (" + packet.types().toString() + ")"); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 01d3edd1..547db9d5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,6 +13,7 @@ "icon": "assets/island/icon.png", "environment": "client", "entrypoints": { + "noxesium": ["net.asodev.islandutils.modules.NoxesiumEntrypoint"], "client": [ "net.asodev.islandutils.IslandUtilsClient" ], "main": [ "net.asodev.islandutils.IslandUtils" ], "modmenu": [ "net.asodev.islandutils.options.ModMenuIntegration" ] @@ -28,10 +29,10 @@ } }, "depends": { - "noxesium": ">=2.7", + "noxesium": ">=3.0", "fabricloader": ">=0.16", "fabric": "*", - "minecraft": ">=1.21.7", + "minecraft": ">=1.21.11", "yet_another_config_lib_v3": "*" } } From 9f091ea5a9a6b59b2575b3f065091abac3e18a60 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 20 Jan 2026 23:59:34 +0300 Subject: [PATCH 05/11] fix: Fix Mixins --- .../asodev/islandutils/IslandUtilsEvents.java | 4 ++-- .../mixins/cosmetics/ChestScreenMixin.java | 18 ++++++++++-------- .../islandutils/mixins/cosmetics/UIMixin.java | 4 ++-- .../mixins/crafting/RemnantHighlightMixin.java | 2 +- .../mixins/discord/JoinMCCIMixin.java | 12 +++++++++--- .../mixins/network/PacketListenerMixin.java | 12 ++++++------ .../mixins/notif/ServerSelectionMixin.java | 18 +++++++++--------- .../mixins/resources/MultiplayerJoinMixin.java | 2 ++ .../mixins/splits/HologramMixin.java | 2 +- .../islandutils/state/MccIslandState.java | 18 +++++++++++++----- 10 files changed, 55 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/asodev/islandutils/IslandUtilsEvents.java b/src/main/java/net/asodev/islandutils/IslandUtilsEvents.java index 68db0475..d9351d2b 100644 --- a/src/main/java/net/asodev/islandutils/IslandUtilsEvents.java +++ b/src/main/java/net/asodev/islandutils/IslandUtilsEvents.java @@ -1,6 +1,6 @@ package net.asodev.islandutils; -import com.noxcrew.noxesium.network.clientbound.ClientboundMccGameStatePacket; +import com.noxcrew.noxesium.core.mcc.ClientboundMccServerPacket; import net.asodev.islandutils.state.Game; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; @@ -84,7 +84,7 @@ public interface GameUpdateCallback { @FunctionalInterface public interface GameStateChange { - void onGameUpdate(ClientboundMccGameStatePacket state); + void onGameUpdate(ClientboundMccServerPacket state); } @FunctionalInterface 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 b44e64dc..c7be10e2 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/ChestScreenMixin.java @@ -13,6 +13,8 @@ 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.client.player.LocalPlayer; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.resources.sounds.SimpleSoundInstance; @@ -59,7 +61,7 @@ private void onInit(AbstractContainerMenu abstractContainerMenu, Inventory inven } @Inject(method = "renderSlot", at = @At("TAIL")) - private void renderSlot(GuiGraphics guiGraphics, Slot slot, CallbackInfo ci) { + private void renderSlot(GuiGraphics guiGraphics, Slot slot, int i, int j, CallbackInfo ci) { if (!CosmeticState.shouldShowCosmeticPreview()) return; if (!slot.hasItem()) return; @@ -111,20 +113,20 @@ private CosmeticType setHovered(ItemStack item) { } @Inject(method = "mouseDragged", at = @At("HEAD")) - private void mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY, CallbackInfoReturnable cir) { + private void mouseDragged(MouseButtonEvent mouseButtonEvent, double d, double e, CallbackInfoReturnable cir) { if (!CosmeticState.shouldShowCosmeticPreview()) return; - CosmeticState.yRot = CosmeticState.yRot - Double.valueOf(deltaX).floatValue(); - CosmeticState.xRot = CosmeticState.xRot - Double.valueOf(deltaY).floatValue(); + CosmeticState.yRot = CosmeticState.yRot - Double.valueOf(d).floatValue(); + CosmeticState.xRot = CosmeticState.xRot - Double.valueOf(e).floatValue(); } @Inject(method = "keyPressed", at = @At("HEAD")) - private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { - triggerPreviewClicked(keyCode); + private void keyPressed(KeyEvent keyEvent, CallbackInfoReturnable cir) { + triggerPreviewClicked(keyEvent.key()); } @Inject(method = "mouseReleased", at = @At("HEAD")) - private void mouseReleased(double d, double e, int keyCode, CallbackInfoReturnable cir) { - triggerPreviewClicked(keyCode); + private void mouseReleased(MouseButtonEvent mouseButtonEvent, CallbackInfoReturnable cir) { + triggerPreviewClicked(mouseButtonEvent.button()); } @Inject(method = "slotClicked", at = @At("HEAD")) 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 af120c88..0b382ab2 100644 --- a/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/cosmetics/UIMixin.java @@ -30,8 +30,8 @@ public UIMixin(ChestMenu abstractContainerMenu, Inventory inventory, Component c 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 = "render", at = @At("TAIL")) + public void render(GuiGraphics guiGraphics, int i, int j, float f, CallbackInfo ci) { if (!CosmeticState.shouldShowCosmeticPreview()) return; CosmeticsOptions options = IslandOptions.getCosmetics(); 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 95172c11..9f64bd76 100644 --- a/src/main/java/net/asodev/islandutils/mixins/crafting/RemnantHighlightMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/crafting/RemnantHighlightMixin.java @@ -19,7 +19,7 @@ public class RemnantHighlightMixin { @Inject(method = "renderSlot", at = @At("HEAD")) - private void renderSlot(GuiGraphics guiGraphics, Slot slot, CallbackInfo ci) { + private void renderSlot(GuiGraphics 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/discord/JoinMCCIMixin.java b/src/main/java/net/asodev/islandutils/mixins/discord/JoinMCCIMixin.java index d647817e..258f2fb4 100644 --- a/src/main/java/net/asodev/islandutils/mixins/discord/JoinMCCIMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/discord/JoinMCCIMixin.java @@ -1,5 +1,6 @@ package net.asodev.islandutils.mixins.discord; +import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientHandshakePacketListenerImpl; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.network.protocol.login.ClientboundLoginFinishedPacket; @@ -16,14 +17,19 @@ @Mixin(ClientHandshakePacketListenerImpl.class) public class JoinMCCIMixin { - @Shadow @Final private @Nullable ServerData serverData; + @Shadow + @Final + private @Nullable ServerData serverData; + + @Shadow + @Final + private Minecraft minecraft; @Inject(method = "handleLoginFinished", at = @At("HEAD")) private void handleGameProfile(ClientboundLoginFinishedPacket clientboundLoginFinishedPacket, CallbackInfo ci) { if (this.serverData == null) return; if (!this.serverData.ip.toLowerCase().contains("mccisland")) return; - - onJoinMCCI(isProdMCCI(this.serverData.ip.toLowerCase())); + minecraft.execute(() -> onJoinMCCI(isProdMCCI(this.serverData.ip.toLowerCase()))); } } 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 01ba5cd0..80703ad7 100644 --- a/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java @@ -50,7 +50,7 @@ protected PacketListenerMixin(Minecraft minecraft, Connection connection, Common super(minecraft, connection, commonListenerCookie); } - @Inject(method = "handleSoundEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/util/thread/BlockableEventLoop;)V", shift = At.Shift.AFTER), cancellable = true) + @Inject(method = "handleSoundEvent", at = @At("TAIL"), cancellable = true) public void handleCustomSoundEvent(ClientboundSoundPacket clientboundCustomSoundPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; @@ -67,7 +67,7 @@ public void handleCustomSoundEvent(ClientboundSoundPacket clientboundCustomSound } } - @Inject(method = "handleStopSoundEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/util/thread/BlockableEventLoop;)V", shift = At.Shift.AFTER), cancellable = true) + @Inject(method = "handleStopSoundEvent", at = @At("TAIL"), cancellable = true) public void handleStopSoundEvent(ClientboundStopSoundPacket clientboundStopSoundPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; Identifier soundLoc = clientboundStopSoundPacket.getName(); @@ -95,7 +95,7 @@ private void containerContent(ClientboundContainerSetContentPacket clientboundCo private static Pattern timerPattern = Pattern.compile("(\\d+:\\d+)"); - @Inject(method = "handleBossUpdate", at = @At("HEAD")) // Discord presence, time left + @Inject(method = "handleBossUpdate", at = @At("TAIL")) // Discord presence, time left private void handleBossUpdate(ClientboundBossEventPacket clientboundBossEventPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; // Create a handler for the bossbar @@ -136,7 +136,7 @@ public void remove(UUID uUID) { // tbf, i don't this is ever called, but y'know, TextColor textColor = ChatUtils.parseColor("#FFA800"); // Trap Title Text Color Style style = Style.EMPTY.withColor(textColor); // Style for the trap color - @Inject(method = "setSubtitleText", at = @At("HEAD"), cancellable = true) + @Inject(method = "setSubtitleText", at = @At("TAIL"), cancellable = true) private void titleText(ClientboundSetSubtitleTextPacket clientboundSetSubtitleTextPacket, CallbackInfo ci) { if (MccIslandState.getGame() == Game.HITW) { ClassicAnnouncer.handleTrap(clientboundSetSubtitleTextPacket, ci); @@ -147,7 +147,7 @@ private void titleText(ClientboundSetSubtitleTextPacket clientboundSetSubtitleTe } } - @Inject(method = "setTitleText", at = @At("HEAD")) // Game Over Sound Effect + @Inject(method = "setTitleText", at = @At("TAIL")) // Game Over Sound Effect private void gameOver(ClientboundSetTitleTextPacket clientboundSetTitleTextPacket, CallbackInfo ci) { if (MccIslandState.getGame() != Game.HITW) return; // Make sure we're playing HITW if (!IslandOptions.getClassicHITW().isClassicHITW()) return; // Requires isClassicHITW @@ -158,7 +158,7 @@ private void gameOver(ClientboundSetTitleTextPacket clientboundSetTitleTextPacke } } - @Inject(method = "handleSystemChat", at = @At("HEAD"), cancellable = true) + @Inject(method = "handleSystemChat", at = @At("TAIL"), cancellable = true) private void onChat(ClientboundSystemChatPacket clientboundSystemChatPacket, CallbackInfo ci) { if (clientboundSystemChatPacket.overlay() || !MccIslandState.isOnline()) return; 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 d33b4c13..27b5c365 100644 --- a/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/notif/ServerSelectionMixin.java @@ -3,7 +3,7 @@ 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; +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; @@ -21,7 +21,7 @@ import java.util.List; import java.util.Optional; -@Mixin(ServerSelectionList.OnlineServerEntry.class) +@Mixin(OnlineServerEntry.class) public class ServerSelectionMixin { @Shadow @Final @@ -33,14 +33,14 @@ public class ServerSelectionMixin { private static final Component NOTIF_TITLE = Component.translatable("islandutils.message.core.notifTitle").withStyle(Style.EMPTY.withUnderlined(true)); @Inject( - method = "render", + method = "renderContent", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/multiplayer/ServerSelectionList$OnlineServerEntry;drawIcon(Lnet/minecraft/client/gui/GuiGraphics;IILnet/minecraft/resources/Identifier;)V", shift = At.Shift.AFTER ) ) - private void render(GuiGraphics guiGraphics, int index, int y, int x, int ew, int eh, int mouseX, int mouseY, boolean hovered, float d, CallbackInfo ci) { + private void render(GuiGraphics 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; @@ -49,12 +49,12 @@ private void render(GuiGraphics guiGraphics, int index, int y, int x, int ew, in tooltip.add(NOTIF_TITLE); tooltip.add(Component.empty()); tooltip.addAll(notifs); + OnlineServerEntry thisEntry = (OnlineServerEntry)(Object) this; + int nx = thisEntry.getContentX() - 10 - 2; + int ny = thisEntry.getContentY() + 8 + 2; - int nx = x - 10 - 2; - int ny = y + 8 + 2; - - if (mouseX >= nx && mouseY >= ny && mouseX < nx + 10 && mouseY < ny + 10) { - guiGraphics.setTooltipForNextFrame(Minecraft.getInstance().font, tooltip, Optional.empty(), mouseX, mouseY); + if (i >= nx && j >= ny && i < nx + 10 && j < ny + 10) { + guiGraphics.setTooltipForNextFrame(Minecraft.getInstance().font, tooltip, Optional.empty(), i, j); } guiGraphics.blit(RenderPipelines.GUI_TEXTURED, NOTIF_TEXTURE, nx, ny, 0, 0, 10, 10, 10, 10); diff --git a/src/main/java/net/asodev/islandutils/mixins/resources/MultiplayerJoinMixin.java b/src/main/java/net/asodev/islandutils/mixins/resources/MultiplayerJoinMixin.java index 42132c1d..43a816a6 100644 --- a/src/main/java/net/asodev/islandutils/mixins/resources/MultiplayerJoinMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/resources/MultiplayerJoinMixin.java @@ -11,6 +11,7 @@ import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; +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; @@ -35,6 +36,7 @@ private void join(ServerData serverData, CallbackInfo ci) { } } + @Unique void confirm(boolean bool, ServerData serverData) { if (bool) { IslandUtils.packUpdater.accepted = true; diff --git a/src/main/java/net/asodev/islandutils/mixins/splits/HologramMixin.java b/src/main/java/net/asodev/islandutils/mixins/splits/HologramMixin.java index 8c11bcee..4de8ca1a 100644 --- a/src/main/java/net/asodev/islandutils/mixins/splits/HologramMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/splits/HologramMixin.java @@ -25,7 +25,7 @@ public class HologramMixin { @Final private static Logger LOGGER; - @Inject(method = "handleSetEntityData", at = @At("RETURN")) + @Inject(method = "handleSetEntityData", at = @At("TAIL")) private void handleEntityData(ClientboundSetEntityDataPacket clientboundSetEntityDataPacket, CallbackInfo ci, @Local Entity entity) { if (!(entity instanceof Display.TextDisplay hologram)) return; if (!MccIslandState.isOnline() || MccIslandState.getGame() != Game.PARKOUR_WARRIOR_DOJO) return; diff --git a/src/main/java/net/asodev/islandutils/state/MccIslandState.java b/src/main/java/net/asodev/islandutils/state/MccIslandState.java index 16c75140..05a30bec 100644 --- a/src/main/java/net/asodev/islandutils/state/MccIslandState.java +++ b/src/main/java/net/asodev/islandutils/state/MccIslandState.java @@ -8,12 +8,15 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextColor; +import javax.annotation.Nullable; +import java.util.List; + public class MccIslandState { private static Game game = Game.HUB; private static String modifier = "INACTIVE"; private static String map = "UNKNOWN"; - private static String subType = ""; + private static List types = List.of(); public static String getModifier() { return modifier; @@ -35,6 +38,11 @@ public static void setGame(Game game) { IslandUtilsEvents.GAME_UPDATE.invoker().onGameUpdate(game); } + public static @Nullable String getFishingIsland() { + if (game != Game.FISHING) return null; + return types.get(2); + } + public static void updateGame(Component displayName, String tablistTitle) { String title = displayName.getString(); @@ -79,11 +87,11 @@ public static String getMap() { return map; } - public static String getSubType() { - return subType; + public static List getTypes() { + return types; } - public static void setSubType(String subType) { - MccIslandState.subType = subType; + public static void setTypes(List types) { + MccIslandState.types = types; } public static boolean isOnline() { From 1e92a9c8b889044c0e536908ab96c232354a53c1 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 20 Jan 2026 23:59:41 +0300 Subject: [PATCH 06/11] fix: Update lang files --- src/main/resources/assets/island/lang/en_us.json | 3 +-- src/main/resources/assets/island/lang/fi_fi.json | 3 +-- src/main/resources/assets/island/lang/hu_hu.json | 3 +-- src/main/resources/assets/island/lang/uk_ua.json | 3 +-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/resources/assets/island/lang/en_us.json b/src/main/resources/assets/island/lang/en_us.json index 787772d8..8f226987 100644 --- a/src/main/resources/assets/island/lang/en_us.json +++ b/src/main/resources/assets/island/lang/en_us.json @@ -7,8 +7,7 @@ "key.islandutils.plobbymenu": "Open Plobby Menu", "key.islandutils.disguise": "Toggle Disguise", - "category.islandutils.keys": "IslandUtils", - "category.islandutils": "Island Utils", + "key.category.islandutils.keys": "IslandUtils", "text.autoconfig.islandutils.title": "Island Utils Options", "text.autoconfig.islandutils.category.music": "Music", diff --git a/src/main/resources/assets/island/lang/fi_fi.json b/src/main/resources/assets/island/lang/fi_fi.json index 1ad47431..c386dca2 100644 --- a/src/main/resources/assets/island/lang/fi_fi.json +++ b/src/main/resources/assets/island/lang/fi_fi.json @@ -6,8 +6,7 @@ "soundCategory.sound_effects": "§aMCCI: Äänitehosteet", "key.islandutils.preview": "Esikatsele Kosmetiikka", - "category.islandutils.keys": "IslandUtils", - "category.islandutils": "Island Utils", + "key.category.islandutils.keys": "IslandUtils", "text.autoconfig.islandutils.title": "Island Utils- Asetukset", "text.autoconfig.islandutils.category.music": "Musiikki", diff --git a/src/main/resources/assets/island/lang/hu_hu.json b/src/main/resources/assets/island/lang/hu_hu.json index 497b4dea..6d442ff1 100644 --- a/src/main/resources/assets/island/lang/hu_hu.json +++ b/src/main/resources/assets/island/lang/hu_hu.json @@ -6,8 +6,7 @@ "soundCategory.sound_effects": "§aMCCI: Hangeffektek", "key.islandutils.preview": "Kozmetikai Előnézet", - "category.islandutils.keys": "IslandUtils", - "category.islandutils": "Island Utils", + "key.category.islandutils.keys": "IslandUtils", "text.autoconfig.islandutils.title": "Island Utils Beállítások", "text.autoconfig.islandutils.category.music": "Zene", diff --git a/src/main/resources/assets/island/lang/uk_ua.json b/src/main/resources/assets/island/lang/uk_ua.json index d7e51d02..5ec0483c 100644 --- a/src/main/resources/assets/island/lang/uk_ua.json +++ b/src/main/resources/assets/island/lang/uk_ua.json @@ -7,8 +7,7 @@ "key.islandutils.plobbymenu": "Вікрити меню приватного лобі", "key.islandutils.disguise": "Перемкнути маскування", - "category.islandutils.keys": "IslandUtils", - "category.islandutils": "Island Utils", + "key.category.islandutils.keys": "IslandUtils", "text.autoconfig.islandutils.title": "Налаштування Island Utils", "text.autoconfig.islandutils.category.music": "Музика", From 86b59b7f4acea95b1b7d650f2ddaf4197d7bde48 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 21 Jan 2026 00:19:12 +0300 Subject: [PATCH 07/11] docs: Remove commented-out code --- .../asodev/islandutils/modules/cosmetics/CosmeticUI.java | 9 --------- 1 file changed, 9 deletions(-) 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 f1d4b924..61431fca 100644 --- a/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java +++ b/src/main/java/net/asodev/islandutils/modules/cosmetics/CosmeticUI.java @@ -37,15 +37,6 @@ public static void renderPlayerInInventory(GuiGraphics guiGraphics, int x0, int Quaternionf quaternionf2 = (new Quaternionf()).rotateX(xRot * 20.0F * ((float) Math.PI / 180.0F)); quaternionf.mul(quaternionf2); Vector3f vector3f = new Vector3f(0.0F, livingEntity.getBbHeight() / 2.0F + f * livingEntityScale, 0.0F); -// InventoryScreen.renderEntityInInventoryFollowsMouse( -// guiGraphics, -// x0, y0, x1, y1, -// size / livingEntityScale, -// vector3f, -// quaternionf, -// quaternionf2, -// livingEntity -// ); EntityRenderState renderState = InventoryScreen.extractRenderState(livingEntity); guiGraphics.submitEntityRenderState(renderState, (float) size, vector3f, quaternionf, quaternionf2, x0, y0, x1, y1); From 118f67afd638e5b35fedd74c48b62d1d973ac47d Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 21 Jan 2026 03:09:55 +0300 Subject: [PATCH 08/11] docs: Add self to the contributors list --- src/main/resources/fabric.mod.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 547db9d5..e2bcebe5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -5,6 +5,7 @@ "name": "IslandUtils", "description": "A Utility mod for MCC Island", "authors": ["Aso"], + "contributors": ["Pe3ep"], "contact": { "sources": "https://github.com/AsoDesu/IslandUtils", "homepage": "https://modrinth.com/mod/island-utils" From bfc3fdca9708ab077966570d79c878f6e49e8f99 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 22 Jan 2026 02:25:21 +0300 Subject: [PATCH 09/11] fix: fix music playing twice and not starting properly --- .../mixins/network/PacketListenerMixin.java | 21 ++++++++----------- .../modules/music/MusicManager.java | 7 ++++--- 2 files changed, 13 insertions(+), 15 deletions(-) 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 80703ad7..b8f5845d 100644 --- a/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java +++ b/src/main/java/net/asodev/islandutils/mixins/network/PacketListenerMixin.java @@ -22,14 +22,13 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.Connection; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; -import net.minecraft.network.chat.TextColor; import net.minecraft.network.protocol.game.*; 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; @@ -50,7 +49,7 @@ protected PacketListenerMixin(Minecraft minecraft, Connection connection, Common super(minecraft, connection, commonListenerCookie); } - @Inject(method = "handleSoundEvent", at = @At("TAIL"), cancellable = true) + @Inject(method = "handleSoundEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER), cancellable = true) public void handleCustomSoundEvent(ClientboundSoundPacket clientboundCustomSoundPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; @@ -67,7 +66,7 @@ public void handleCustomSoundEvent(ClientboundSoundPacket clientboundCustomSound } } - @Inject(method = "handleStopSoundEvent", at = @At("TAIL"), cancellable = true) + @Inject(method = "handleStopSoundEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER), cancellable = true) public void handleStopSoundEvent(ClientboundStopSoundPacket clientboundStopSoundPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; Identifier soundLoc = clientboundStopSoundPacket.getName(); @@ -80,7 +79,7 @@ public void handleStopSoundEvent(ClientboundStopSoundPacket clientboundStopSound } } - @Inject(method = "handleContainerContent", at = @At("TAIL")) + @Inject(method = "handleContainerContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER)) // Cosmetic previews, whenever we get our cosmetics back after closing menu private void containerContent(ClientboundContainerSetContentPacket clientboundContainerSetContentPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; @@ -93,9 +92,10 @@ private void containerContent(ClientboundContainerSetContentPacket clientboundCo CosmeticState.accessorySlot.setOriginal(new CosmeticSlot(CosmeticType.ACCESSORY.getItem(inventory))); } + @Unique private static Pattern timerPattern = Pattern.compile("(\\d+:\\d+)"); - @Inject(method = "handleBossUpdate", at = @At("TAIL")) // Discord presence, time left + @Inject(method = "handleBossUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER)) // Discord presence, time left private void handleBossUpdate(ClientboundBossEventPacket clientboundBossEventPacket, CallbackInfo ci) { if (!MccIslandState.isOnline()) return; // Create a handler for the bossbar @@ -133,10 +133,7 @@ public void remove(UUID uUID) { // tbf, i don't this is ever called, but y'know, clientboundBossEventPacket.dispatch(bossbarHandler); // Execute the handler! } - TextColor textColor = ChatUtils.parseColor("#FFA800"); // Trap Title Text Color - Style style = Style.EMPTY.withColor(textColor); // Style for the trap color - - @Inject(method = "setSubtitleText", at = @At("TAIL"), cancellable = true) + @Inject(method = "setSubtitleText", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER), cancellable = true) private void titleText(ClientboundSetSubtitleTextPacket clientboundSetSubtitleTextPacket, CallbackInfo ci) { if (MccIslandState.getGame() == Game.HITW) { ClassicAnnouncer.handleTrap(clientboundSetSubtitleTextPacket, ci); @@ -147,7 +144,7 @@ private void titleText(ClientboundSetSubtitleTextPacket clientboundSetSubtitleTe } } - @Inject(method = "setTitleText", at = @At("TAIL")) // Game Over Sound Effect + @Inject(method = "setTitleText", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER)) // Game Over Sound Effect private void gameOver(ClientboundSetTitleTextPacket clientboundSetTitleTextPacket, CallbackInfo ci) { if (MccIslandState.getGame() != Game.HITW) return; // Make sure we're playing HITW if (!IslandOptions.getClassicHITW().isClassicHITW()) return; // Requires isClassicHITW @@ -158,7 +155,7 @@ private void gameOver(ClientboundSetTitleTextPacket clientboundSetTitleTextPacke } } - @Inject(method = "handleSystemChat", at = @At("TAIL"), cancellable = true) + @Inject(method = "handleSystemChat", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/PacketUtils;ensureRunningOnSameThread(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketListener;Lnet/minecraft/network/PacketProcessor;)V", shift = At.Shift.AFTER), cancellable = true) private void onChat(ClientboundSystemChatPacket clientboundSystemChatPacket, CallbackInfo ci) { if (clientboundSystemChatPacket.overlay() || !MccIslandState.isOnline()) return; diff --git a/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java b/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java index c4db1593..7640f6ce 100644 --- a/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java +++ b/src/main/java/net/asodev/islandutils/modules/music/MusicManager.java @@ -1,5 +1,6 @@ package net.asodev.islandutils.modules.music; +import net.asodev.islandutils.IslandUtilsEvents; import net.asodev.islandutils.mixins.accessors.SoundEngineAccessor; import net.asodev.islandutils.mixins.accessors.SoundManagerAccessor; import net.asodev.islandutils.modules.music.modifiers.*; @@ -51,6 +52,8 @@ public static void init() { addModifier(new PreviousDynaballMusic()); addModifier(new HighQualityMusic()); + IslandUtilsEvents.GAME_CHANGE.register((game) -> currentlyPlaying = null); + ClientTickEvents.START_CLIENT_TICK.register((client) -> { if (currentlyPlaying == null) return; if (currentlyPlaying.isStopped()) { @@ -106,11 +109,9 @@ public static void onMusicStopPacket(ClientboundStopSoundPacket packet, Minecraf } else { soundManager.stop(instance); } + currentlyPlaying = null; } } - if (currentlyPlaying != null && currentlyPlaying.getIdentifier().equals(name)) { - currentlyPlaying = null; - } } public static SoundInfo applyModifiers(SoundInfo info) { From 3699dc24e122962e2066615f8845c005b2a5d34a Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 22 Jan 2026 02:27:29 +0300 Subject: [PATCH 10/11] refactor: Removed unused PlobbyOptions category --- .../java/net/asodev/islandutils/options/IslandOptions.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/net/asodev/islandutils/options/IslandOptions.java b/src/main/java/net/asodev/islandutils/options/IslandOptions.java index 2629d48d..39f9c274 100644 --- a/src/main/java/net/asodev/islandutils/options/IslandOptions.java +++ b/src/main/java/net/asodev/islandutils/options/IslandOptions.java @@ -31,7 +31,6 @@ public class IslandOptions { private static final ClassicOptions classicHITW = new ClassicOptions(); private static final CraftingOptions crafting = new CraftingOptions(); private static final SplitsCategory splits = new SplitsCategory(); - private static final PlobbyOptions plobby = new PlobbyOptions(); private static final MiscOptions misc = new MiscOptions(); public static void init() { @@ -41,7 +40,6 @@ public static void init() { categories.add(classicHITW); categories.add(crafting); categories.add(splits); - categories.add(plobby); categories.add(misc); load(); } @@ -102,9 +100,6 @@ public static CraftingOptions getCrafting() { public static SplitsCategory getSplits() { return splits; } - public static PlobbyOptions getPlobby() { - return plobby; - } public static MiscOptions getMisc() { return misc; } From adbd1c9fad8718a7986cc79c8145cde478fd4b32 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 22 Jan 2026 02:35:45 +0300 Subject: [PATCH 11/11] refactor: Completely remove PlobbyOptions category (im stupih) --- .../options/categories/PlobbyOptions.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 src/main/java/net/asodev/islandutils/options/categories/PlobbyOptions.java diff --git a/src/main/java/net/asodev/islandutils/options/categories/PlobbyOptions.java b/src/main/java/net/asodev/islandutils/options/categories/PlobbyOptions.java deleted file mode 100644 index 712a4a61..00000000 --- a/src/main/java/net/asodev/islandutils/options/categories/PlobbyOptions.java +++ /dev/null @@ -1,17 +0,0 @@ -package net.asodev.islandutils.options.categories; - -import dev.isxander.yacl3.api.ConfigCategory; -import net.asodev.islandutils.options.saving.Ignore; -import net.minecraft.network.chat.Component; - -public class PlobbyOptions implements OptionsCategory { - @Ignore - private static final PlobbyOptions defaults = new PlobbyOptions(); - - @Override - public ConfigCategory getCategory() { - return ConfigCategory.createBuilder() - .name(Component.translatable("text.autoconfig.islandutils.category.plobbyIntegration")) - .build(); - } -}