From c93a04a001b0f66b2724d46b04b6d1ed49a08d07 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Mon, 17 Nov 2025 19:55:02 +0100 Subject: refactor: port to mojmaps --- .../moe/nea/firmament/init/HandledScreenRiser.java | 22 +++--- .../nea/firmament/init/SectionBuilderRiser.java | 16 ++-- .../firmament/mixins/AppendRepoAsResourcePack.java | 4 +- .../firmament/mixins/BandAidResourcePackPatch.java | 10 +-- .../moe/nea/firmament/mixins/ChatPeekingPatch.java | 6 +- .../moe/nea/firmament/mixins/CopyChatPatch.java | 32 ++++---- .../firmament/mixins/CustomDurabilityBarPatch.java | 30 ++++---- .../nea/firmament/mixins/DFUEntityIdFixPatch.java | 8 +- .../moe/nea/firmament/mixins/DisableHurtCam.java | 4 +- .../mixins/DispatchMouseInputEventsPatch.java | 10 +-- .../firmament/mixins/EarlyResourceReloadPatch.java | 14 ++-- .../nea/firmament/mixins/EntityDespawnPatch.java | 6 +- .../firmament/mixins/EntityInteractEventPatch.java | 28 +++---- .../mixins/EntityUpdateEventListener.java | 48 ++++++------ .../mixins/FirmKeybindsInVanillaControlsPatch.java | 32 ++++---- .../firmament/mixins/HideStatusEffectsPatch.java | 14 ++-- .../nea/firmament/mixins/HudRenderEventsPatch.java | 20 ++--- .../mixins/IncomingPacketListenerPatches.java | 24 +++--- .../mixins/KeyPressInWorldEventPatch.java | 12 +-- .../firmament/mixins/MainWindowFirstLoadPatch.java | 8 +- .../mixins/MaintainKeyboardStatePatch.java | 10 +-- .../mixins/MinecraftInitLevelListener.java | 6 +- .../nea/firmament/mixins/MixinHandledScreen.java | 72 ++++++++--------- .../firmament/mixins/MixinPlayerScreenHandler.java | 14 ++-- .../firmament/mixins/MixinRecipeBookScreen.java | 6 +- .../mixins/MousePressInWorldEventPatch.java | 12 +-- .../firmament/mixins/OutgoingPacketEventPatch.java | 8 +- .../nea/firmament/mixins/PlayerDropEventPatch.java | 16 ++-- .../mixins/ResourceReloaderRegistrationPatch.java | 14 ++-- .../firmament/mixins/SaveCursorPositionPatch.java | 24 +++--- .../mixins/SaveOriginalCommandTreePacket.java | 10 +-- .../firmament/mixins/ScreenChangeEventPatch.java | 10 +-- .../nea/firmament/mixins/SlotClickEventPatch.java | 22 +++--- .../nea/firmament/mixins/SlotUpdateListener.java | 48 ++++++------ .../firmament/mixins/SoundReceiveEventPatch.java | 22 +++--- .../nea/firmament/mixins/ToggleSprintPatch.java | 8 +- .../TolerateFirmamentTolerateRegistryOwners.java | 8 +- .../nea/firmament/mixins/WorldReadyEventPatch.java | 6 +- .../mixins/WorldRenderLastEventPatch.java | 41 +++++----- .../AccessorAbstractClientPlayerEntity.java | 10 +-- .../firmament/mixins/accessor/AccessorChatHud.java | 18 ++--- .../mixins/accessor/AccessorHandledScreen.java | 26 +++---- .../mixins/accessor/AccessorNbtComponent.java | 10 +-- .../mixins/accessor/AccessorPlayerListHud.java | 20 ++--- .../mixins/accessor/AccessorScreenHandler.java | 10 +-- .../mixins/accessor/AccessorWorldRenderer.java | 10 +-- .../mixins/customgui/OriginalSlotCoords.java | 2 +- .../mixins/customgui/PatchHandledScreen.java | 90 +++++++++++----------- .../mixins/devenv/DisableCommonPacketWarnings.java | 20 ++--- .../mixins/devenv/DisableInvalidFishingHook.java | 6 +- .../devenv/EarlyInstantiateTranslations.java | 8 +- .../firmament/mixins/devenv/IdentifyCloser.java | 2 +- .../mixins/devenv/IdentifyStopperPatch.java | 6 +- .../nea/firmament/mixins/devenv/MixinKeyboard.java | 10 +-- .../firmament/mixins/devenv/MixinScoreboard.java | 5 +- .../devenv/WarnForUnknownCustomPayloadSends.java | 8 +- .../mixins/devenv/WarnOnMissingTranslations.java | 14 ++-- .../mixins/feature/DisableSlotHighlights.java | 12 +-- .../devcosmetics/CustomCapeFeatureRenderer.java | 40 +++++----- .../feature/devcosmetics/CustomCapeStorage.java | 4 +- .../IncreaseStackLimitSizeInDrawContext.java | 6 +- .../entitytints/ChangeColorOfLivingEntities.java | 30 ++++---- .../render/entitytints/EntityRenderStateTint.java | 2 +- .../render/entitytints/InjectIntoRenderState.java | 8 +- .../render/entitytints/ReplaceOverlayTexture.java | 8 +- .../UseOverlayableEquipmentRenderer.java | 26 +++---- .../UseOverlayableHeadFeatureRenderer.java | 16 ++-- .../entitytints/UseOverlayableItemRenderer.java | 20 ++--- .../UseOverlayableSkullBlockEntityRenderer.java | 16 ++-- .../renderer/MultipleSpecialGuiRenderStates.java | 24 +++--- .../moe/nea/firmament/util/data/ManagedConfig.kt | 28 +++---- 71 files changed, 608 insertions(+), 612 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java b/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java index 605e7ac..881990c 100644 --- a/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java +++ b/src/main/java/moe/nea/firmament/init/HandledScreenRiser.java @@ -2,11 +2,11 @@ package moe.nea.firmament.init; import me.shedaniel.mm.api.ClassTinkerers; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.input.CharInput; -import net.minecraft.client.input.KeyInput; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.CharacterEvent; +import net.minecraft.client.input.KeyEvent; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.tree.ClassNode; @@ -24,11 +24,11 @@ import java.util.function.Consumer; public class HandledScreenRiser extends RiserUtils { Intermediary.InterClass Screen = Intermediary.intermediaryClass(); - Intermediary.InterClass KeyInput = Intermediary.intermediaryClass(); - Intermediary.InterClass CharInput = Intermediary.intermediaryClass(); - Intermediary.InterClass HandledScreen = Intermediary.intermediaryClass(); + Intermediary.InterClass KeyInput = Intermediary.intermediaryClass(); + Intermediary.InterClass CharInput = Intermediary.intermediaryClass(); + Intermediary.InterClass HandledScreen = Intermediary.intermediaryClass(); Intermediary.InterMethod mouseScrolled = Intermediary.intermediaryMethod( - Element::mouseScrolled, + GuiEventListener::mouseScrolled, Intermediary.ofClass(boolean.class), Intermediary.ofClass(double.class), Intermediary.ofClass(double.class), @@ -36,12 +36,12 @@ public class HandledScreenRiser extends RiserUtils { Intermediary.ofClass(double.class) ); Intermediary.InterMethod keyReleased = Intermediary.intermediaryMethod( - Element::keyReleased, + GuiEventListener::keyReleased, Intermediary.ofClass(boolean.class), KeyInput ); Intermediary.InterMethod charTyped = Intermediary.intermediaryMethod( - Element::charTyped, + GuiEventListener::charTyped, Intermediary.ofClass(boolean.class), CharInput ); diff --git a/src/main/java/moe/nea/firmament/init/SectionBuilderRiser.java b/src/main/java/moe/nea/firmament/init/SectionBuilderRiser.java index 03c63b3..a5d5c1d 100644 --- a/src/main/java/moe/nea/firmament/init/SectionBuilderRiser.java +++ b/src/main/java/moe/nea/firmament/init/SectionBuilderRiser.java @@ -1,11 +1,11 @@ package moe.nea.firmament.init; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.block.BlockState; -import net.minecraft.client.render.block.BlockRenderManager; -import net.minecraft.client.render.chunk.SectionBuilder; -import net.minecraft.client.render.model.BlockStateModel; -import net.minecraft.util.math.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.chunk.SectionCompiler; +import net.minecraft.client.renderer.block.model.BlockStateModel; +import net.minecraft.core.BlockPos; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.tree.AbstractInsnNode; @@ -18,16 +18,16 @@ import org.objectweb.asm.tree.VarInsnNode; public class SectionBuilderRiser extends RiserUtils { - Intermediary.InterClass SectionBuilder = Intermediary.intermediaryClass(); + Intermediary.InterClass SectionBuilder = Intermediary.intermediaryClass(); Intermediary.InterClass BlockPos = Intermediary.intermediaryClass(); - Intermediary.InterClass BlockRenderManager = Intermediary.intermediaryClass(); + Intermediary.InterClass BlockRenderManager = Intermediary.intermediaryClass(); Intermediary.InterClass BlockState = Intermediary.intermediaryClass(); Intermediary.InterClass BlockStateModel = Intermediary.intermediaryClass(); String CustomBlockTextures = "moe.nea.firmament.features.texturepack.CustomBlockTextures"; Intermediary.InterMethod getModel = Intermediary.intermediaryMethod( - net.minecraft.client.render.block.BlockRenderManager::getModel, + net.minecraft.client.renderer.block.BlockRenderDispatcher::getBlockModel, BlockStateModel, BlockState ); diff --git a/src/main/java/moe/nea/firmament/mixins/AppendRepoAsResourcePack.java b/src/main/java/moe/nea/firmament/mixins/AppendRepoAsResourcePack.java index d8e35d7..30b5020 100644 --- a/src/main/java/moe/nea/firmament/mixins/AppendRepoAsResourcePack.java +++ b/src/main/java/moe/nea/firmament/mixins/AppendRepoAsResourcePack.java @@ -7,7 +7,7 @@ import net.fabricmc.fabric.api.resource.ModResourcePack; import net.fabricmc.fabric.impl.resource.loader.ModResourcePackSorter; import net.fabricmc.fabric.impl.resource.loader.ModResourcePackUtil; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.resource.ResourceType; +import net.minecraft.server.packs.PackType; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -25,7 +25,7 @@ public class AppendRepoAsResourcePack { require = 0 ) private static void onAppendModResourcePack( - FabricLoader fabricLoader, ResourceType type, @Nullable String subPath, CallbackInfoReturnable> cir, + FabricLoader fabricLoader, PackType type, @Nullable String subPath, CallbackInfoReturnable> cir, @Local ModResourcePackSorter sorter ) { RepoModResourcePack.Companion.append(sorter); diff --git a/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java b/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java index d898c44..8e591bd 100644 --- a/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java @@ -4,22 +4,22 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.sugar.Local; import moe.nea.firmament.repo.RepoModResourcePack; -import net.minecraft.resource.ReloadableResourceManagerImpl; -import net.minecraft.resource.Resource; -import net.minecraft.util.Identifier; +import net.minecraft.server.packs.resources.ReloadableResourceManager; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import java.util.Optional; -@Mixin(ReloadableResourceManagerImpl.class) +@Mixin(ReloadableResourceManager.class) public class BandAidResourcePackPatch { @ModifyReturnValue( method = "getResource", at = @At("RETURN") ) - private Optional injectOurCustomResourcesInCaseExistingMethodsFailed(Optional original, @Local Identifier identifier) { + private Optional injectOurCustomResourcesInCaseExistingMethodsFailed(Optional original, @Local ResourceLocation identifier) { return original.or(() -> RepoModResourcePack.Companion.createResourceDirectly(identifier)); } } diff --git a/src/main/java/moe/nea/firmament/mixins/ChatPeekingPatch.java b/src/main/java/moe/nea/firmament/mixins/ChatPeekingPatch.java index 9f6fb4d..2bc1374 100644 --- a/src/main/java/moe/nea/firmament/mixins/ChatPeekingPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/ChatPeekingPatch.java @@ -4,12 +4,12 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import moe.nea.firmament.features.fixes.Fixes; -import net.minecraft.client.gui.hud.ChatHud; +import net.minecraft.client.gui.components.ChatComponent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Mixin(ChatHud.class) +@Mixin(ChatComponent.class) public class ChatPeekingPatch { @ModifyVariable(method = "render", at = @At(value = "HEAD"), index = 5, argsOnly = true) @@ -17,7 +17,7 @@ public class ChatPeekingPatch { return old || Fixes.INSTANCE.shouldPeekChat(); } - @ModifyExpressionValue(method = "getHeight()I", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;isChatFocused()Z")) + @ModifyExpressionValue(method = "getHeight()I", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/ChatComponent;isChatFocused()Z")) public boolean onGetChatHudHeight(boolean old) { return old || Fixes.INSTANCE.shouldPeekChat(); } diff --git a/src/main/java/moe/nea/firmament/mixins/CopyChatPatch.java b/src/main/java/moe/nea/firmament/mixins/CopyChatPatch.java index ba337da..9079fc9 100644 --- a/src/main/java/moe/nea/firmament/mixins/CopyChatPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/CopyChatPatch.java @@ -3,14 +3,14 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.features.chat.CopyChat; import moe.nea.firmament.mixins.accessor.AccessorChatHud; import moe.nea.firmament.util.ClipboardUtils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.hud.ChatHud; -import net.minecraft.client.gui.hud.ChatHudLine; -import net.minecraft.client.gui.screen.ChatScreen; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.gui.components.ChatComponent; +import net.minecraft.client.GuiMessage; +import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -21,25 +21,25 @@ import java.util.List; @Mixin(ChatScreen.class) public class CopyChatPatch { @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onRightClick(Click click, boolean doubled, CallbackInfoReturnable cir) throws NoSuchFieldException, IllegalAccessException { + private void onRightClick(MouseButtonEvent click, boolean doubled, CallbackInfoReturnable cir) throws NoSuchFieldException, IllegalAccessException { if (click.button() != 1 || !CopyChat.TConfig.INSTANCE.getCopyChat()) return; - MinecraftClient client = MinecraftClient.getInstance(); - ChatHud chatHud = client.inGameHud.getChatHud(); + Minecraft client = Minecraft.getInstance(); + ChatComponent chatHud = client.gui.getChat(); int lineIndex = getChatLineIndex(chatHud, click.y()); if (lineIndex < 0) return; - List visible = ((AccessorChatHud) chatHud).getVisibleMessages_firmament(); + List visible = ((AccessorChatHud) chatHud).getVisibleMessages_firmament(); if (lineIndex >= visible.size()) return; - ChatHudLine.Visible line = visible.get(lineIndex); + GuiMessage.Line line = visible.get(lineIndex); String text = CopyChat.INSTANCE.orderedTextToString(line.content()); ClipboardUtils.INSTANCE.setTextContent(text); - chatHud.addMessage(Text.literal("Copied: ").append(text).formatted(Formatting.GRAY)); + chatHud.addMessage(Component.literal("Copied: ").append(text).withStyle(ChatFormatting.GRAY)); cir.setReturnValue(true); cir.cancel(); } @Unique - private int getChatLineIndex(ChatHud chatHud, double mouseY) { + private int getChatLineIndex(ChatComponent chatHud, double mouseY) { double chatLineY = ((AccessorChatHud) chatHud).toChatLineY_firmament(mouseY); - return MathHelper.floor(chatLineY + ((AccessorChatHud) chatHud).getScrolledLines_firmament()); + return Mth.floor(chatLineY + ((AccessorChatHud) chatHud).getScrolledLines_firmament()); } } diff --git a/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java b/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java index fde3580..2299068 100644 --- a/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/CustomDurabilityBarPatch.java @@ -6,20 +6,20 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Share; import com.llamalad7.mixinextras.sugar.ref.LocalRef; import moe.nea.firmament.util.DurabilityBarEvent; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.item.ItemStack; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(DrawContext.class) +@Mixin(GuiGraphics.class) public class CustomDurabilityBarPatch { @WrapOperation( - method = "drawItemBar", - at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isItemBarVisible()Z") + method = "renderItemBar", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;isBarVisible()Z") ) private boolean onIsItemBarVisible( - ItemStack instance, Operation original, - @Share("barOverride") LocalRef barOverride + ItemStack instance, Operation original, + @Share("barOverride") LocalRef barOverride ) { if (original.call(instance)) return true; @@ -29,22 +29,22 @@ public class CustomDurabilityBarPatch { return barOverride.get() != null; } - @WrapOperation(method = "drawItemBar", - at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItemBarStep()I")) + @WrapOperation(method = "renderItemBar", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getBarWidth()I")) private int overrideItemStep( - ItemStack instance, Operation original, - @Share("barOverride") LocalRef barOverride + ItemStack instance, Operation original, + @Share("barOverride") LocalRef barOverride ) { if (barOverride.get() != null) return Math.round(barOverride.get().getPercentage() * 13); return original.call(instance); } - @WrapOperation(method = "drawItemBar", - at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItemBarColor()I")) + @WrapOperation(method = "renderItemBar", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getBarColor()I")) private int overrideItemColor( - ItemStack instance, Operation original, - @Share("barOverride") LocalRef barOverride + ItemStack instance, Operation original, + @Share("barOverride") LocalRef barOverride ) { if (barOverride.get() != null) return barOverride.get().getColor().getColor(); diff --git a/src/main/java/moe/nea/firmament/mixins/DFUEntityIdFixPatch.java b/src/main/java/moe/nea/firmament/mixins/DFUEntityIdFixPatch.java index 717d404..8503411 100644 --- a/src/main/java/moe/nea/firmament/mixins/DFUEntityIdFixPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/DFUEntityIdFixPatch.java @@ -6,8 +6,8 @@ import com.mojang.datafixers.DataFix; import com.mojang.datafixers.TypeRewriteRule; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.util.Pair; -import net.minecraft.datafixer.TypeReferences; -import net.minecraft.datafixer.fix.EntityIdFix; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.fixes.EntityIdFix; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -22,7 +22,7 @@ import java.util.Map; public abstract class DFUEntityIdFixPatch extends DataFix { @Shadow @Final - private static Map RENAMED_ENTITIES; + private static Map ID_MAP; public DFUEntityIdFixPatch(Schema outputSchema, boolean changesType) { super(outputSchema, changesType); @@ -30,6 +30,6 @@ public abstract class DFUEntityIdFixPatch extends DataFix { @Inject(method = "makeRule", at = @At("RETURN"), cancellable = true) public void onMakeRule(CallbackInfoReturnable cir) { - cir.setReturnValue(TypeRewriteRule.seq(fixTypeEverywhere("EntityIdFix", getInputSchema().findChoiceType(TypeReferences.ENTITY), getOutputSchema().findChoiceType(TypeReferences.ENTITY), dynamicOps -> pair -> ((Pair) pair).mapFirst(string -> RENAMED_ENTITIES.getOrDefault(string, (String) string))), convertUnchecked("Fix Type", getInputSchema().getType(TypeReferences.ITEM_STACK), getOutputSchema().getType(TypeReferences.ITEM_STACK)))); + cir.setReturnValue(TypeRewriteRule.seq(fixTypeEverywhere("EntityIdFix", getInputSchema().findChoiceType(References.ENTITY), getOutputSchema().findChoiceType(References.ENTITY), dynamicOps -> pair -> ((Pair) pair).mapFirst(string -> ID_MAP.getOrDefault(string, (String) string))), convertUnchecked("Fix Type", getInputSchema().getType(References.ITEM_STACK), getOutputSchema().getType(References.ITEM_STACK)))); } } diff --git a/src/main/java/moe/nea/firmament/mixins/DisableHurtCam.java b/src/main/java/moe/nea/firmament/mixins/DisableHurtCam.java index ed7a2d4..3a53ab1 100644 --- a/src/main/java/moe/nea/firmament/mixins/DisableHurtCam.java +++ b/src/main/java/moe/nea/firmament/mixins/DisableHurtCam.java @@ -2,14 +2,14 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import moe.nea.firmament.features.fixes.Fixes; -import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.renderer.GameRenderer; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(GameRenderer.class) public class DisableHurtCam { - @ModifyExpressionValue(method = "tiltViewWhenHurt", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/LivingEntity;hurtTime:I", opcode = Opcodes.GETFIELD)) + @ModifyExpressionValue(method = "bobHurt", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/LivingEntity;hurtTime:I", opcode = Opcodes.GETFIELD)) private int replaceHurtTime(int original) { if (Fixes.TConfig.INSTANCE.getNoHurtCam()) return 0; diff --git a/src/main/java/moe/nea/firmament/mixins/DispatchMouseInputEventsPatch.java b/src/main/java/moe/nea/firmament/mixins/DispatchMouseInputEventsPatch.java index f1b07bb..8b9a28c 100644 --- a/src/main/java/moe/nea/firmament/mixins/DispatchMouseInputEventsPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/DispatchMouseInputEventsPatch.java @@ -2,15 +2,15 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import moe.nea.firmament.events.WorldMouseMoveEvent; -import net.minecraft.client.Mouse; -import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.MouseHandler; +import net.minecraft.client.player.LocalPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(Mouse.class) +@Mixin(MouseHandler.class) public class DispatchMouseInputEventsPatch { - @WrapWithCondition(method = "updateMouse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;changeLookDirection(DD)V")) - public boolean onRotatePlayer(ClientPlayerEntity instance, double deltaX, double deltaY) { + @WrapWithCondition(method = "turnPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;changeLookDirection(DD)V")) + public boolean onRotatePlayer(LocalPlayer instance, double deltaX, double deltaY) { var event = WorldMouseMoveEvent.Companion.publish(new WorldMouseMoveEvent(deltaX, deltaY)); return !event.getCancelled(); } diff --git a/src/main/java/moe/nea/firmament/mixins/EarlyResourceReloadPatch.java b/src/main/java/moe/nea/firmament/mixins/EarlyResourceReloadPatch.java index e98faf6..b8460a7 100644 --- a/src/main/java/moe/nea/firmament/mixins/EarlyResourceReloadPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/EarlyResourceReloadPatch.java @@ -2,10 +2,10 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.events.EarlyResourceReloadEvent; -import net.minecraft.resource.ReloadableResourceManagerImpl; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.ResourcePack; -import net.minecraft.resource.ResourceReload; +import net.minecraft.server.packs.resources.ReloadableResourceManager; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.server.packs.PackResources; +import net.minecraft.server.packs.resources.ReloadInstance; import net.minecraft.util.Unit; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -16,10 +16,10 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -@Mixin(ReloadableResourceManagerImpl.class) +@Mixin(ReloadableResourceManager.class) public abstract class EarlyResourceReloadPatch implements ResourceManager { - @Inject(method = "reload", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/SimpleResourceReload;start(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Z)Lnet/minecraft/resource/ResourceReload;", shift = At.Shift.BEFORE)) - public void onResourceReload(Executor prepareExecutor, Executor applyExecutor, CompletableFuture initialStage, List packs, CallbackInfoReturnable cir) { + @Inject(method = "createReload", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/packs/resources/SimpleReloadInstance;create(Lnet/minecraft/server/packs/resources/ResourceManager;Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Z)Lnet/minecraft/server/packs/resources/ReloadInstance;", shift = At.Shift.BEFORE)) + public void onResourceReload(Executor prepareExecutor, Executor applyExecutor, CompletableFuture initialStage, List packs, CallbackInfoReturnable cir) { EarlyResourceReloadEvent.Companion.publish(new EarlyResourceReloadEvent(this, prepareExecutor)); } } diff --git a/src/main/java/moe/nea/firmament/mixins/EntityDespawnPatch.java b/src/main/java/moe/nea/firmament/mixins/EntityDespawnPatch.java index 22bebec..c286226 100644 --- a/src/main/java/moe/nea/firmament/mixins/EntityDespawnPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/EntityDespawnPatch.java @@ -3,15 +3,15 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.sugar.Local; import moe.nea.firmament.events.EntityDespawnEvent; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientWorld.class) +@Mixin(ClientLevel.class) public class EntityDespawnPatch { @Inject(method = "removeEntity", at = @At(value = "TAIL")) private void onRemoved(int entityId, Entity.RemovalReason removalReason, CallbackInfo ci, @Local @Nullable Entity entity) { diff --git a/src/main/java/moe/nea/firmament/mixins/EntityInteractEventPatch.java b/src/main/java/moe/nea/firmament/mixins/EntityInteractEventPatch.java index 8ade59b..4138389 100644 --- a/src/main/java/moe/nea/firmament/mixins/EntityInteractEventPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/EntityInteractEventPatch.java @@ -2,32 +2,32 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.events.EntityInteractionEvent; -import net.minecraft.client.network.ClientPlayerInteractionManager; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.EntityHitResult; 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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ClientPlayerInteractionManager.class) +@Mixin(MultiPlayerGameMode.class) public class EntityInteractEventPatch { - @Inject(method = "attackEntity", at = @At("HEAD")) - private void onAttack(PlayerEntity player, Entity target, CallbackInfo ci) { - EntityInteractionEvent.Companion.publish(new EntityInteractionEvent(EntityInteractionEvent.InteractionKind.ATTACK, target, Hand.MAIN_HAND)); + @Inject(method = "attack", at = @At("HEAD")) + private void onAttack(Player player, Entity target, CallbackInfo ci) { + EntityInteractionEvent.Companion.publish(new EntityInteractionEvent(EntityInteractionEvent.InteractionKind.ATTACK, target, InteractionHand.MAIN_HAND)); } - @Inject(method = "interactEntity", at = @At("HEAD")) - private void onInteract(PlayerEntity player, Entity entity, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "interact", at = @At("HEAD")) + private void onInteract(Player player, Entity entity, InteractionHand hand, CallbackInfoReturnable cir) { EntityInteractionEvent.Companion.publish(new EntityInteractionEvent(EntityInteractionEvent.InteractionKind.INTERACT, entity, hand)); } - @Inject(method = "interactEntityAtLocation", at = @At("HEAD")) - private void onInteractAtLocation(PlayerEntity player, Entity entity, EntityHitResult hitResult, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "interactAt", at = @At("HEAD")) + private void onInteractAtLocation(Player player, Entity entity, EntityHitResult hitResult, InteractionHand hand, CallbackInfoReturnable cir) { EntityInteractionEvent.Companion.publish(new EntityInteractionEvent(EntityInteractionEvent.InteractionKind.INTERACT_AT_LOCATION, entity, hand)); } diff --git a/src/main/java/moe/nea/firmament/mixins/EntityUpdateEventListener.java b/src/main/java/moe/nea/firmament/mixins/EntityUpdateEventListener.java index d956da9..0021099 100644 --- a/src/main/java/moe/nea/firmament/mixins/EntityUpdateEventListener.java +++ b/src/main/java/moe/nea/firmament/mixins/EntityUpdateEventListener.java @@ -3,46 +3,46 @@ package moe.nea.firmament.mixins; import com.llamalad7.mixinextras.sugar.Local; import moe.nea.firmament.events.EntityUpdateEvent; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.client.network.ClientConnectionState; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.packet.s2c.play.EntityAttributesS2CPacket; -import net.minecraft.network.packet.s2c.play.EntityEquipmentUpdateS2CPacket; -import net.minecraft.network.packet.s2c.play.EntityTrackerUpdateS2CPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.client.multiplayer.CommonListenerCookie; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.game.ClientboundUpdateAttributesPacket; +import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket; +import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayNetworkHandler.class) -public abstract class EntityUpdateEventListener extends ClientCommonNetworkHandler { +@Mixin(ClientPacketListener.class) +public abstract class EntityUpdateEventListener extends ClientCommonPacketListenerImpl { @Shadow - private ClientWorld world; + private ClientLevel level; - protected EntityUpdateEventListener(MinecraftClient client, ClientConnection connection, ClientConnectionState connectionState) { + protected EntityUpdateEventListener(Minecraft client, Connection connection, CommonListenerCookie connectionState) { super(client, connection, connectionState); } - @Inject(method = "onEntityEquipmentUpdate", at = @At(value = "INVOKE", target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V", shift = At.Shift.AFTER)) - private void onEquipmentUpdate(EntityEquipmentUpdateS2CPacket packet, CallbackInfo ci, @Local LivingEntity entity) { - EntityUpdateEvent.Companion.publish(new EntityUpdateEvent.EquipmentUpdate(entity, packet.getEquipmentList())); + @Inject(method = "handleSetEquipment", at = @At(value = "INVOKE", target = "Ljava/util/List;forEach(Ljava/util/function/Consumer;)V", shift = At.Shift.AFTER)) + private void onEquipmentUpdate(ClientboundSetEquipmentPacket packet, CallbackInfo ci, @Local LivingEntity entity) { + EntityUpdateEvent.Companion.publish(new EntityUpdateEvent.EquipmentUpdate(entity, packet.getSlots())); } - @Inject(method = "onEntityAttributes", at = @At("TAIL")) - private void onAttributeUpdate(EntityAttributesS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleUpdateAttributes", at = @At("TAIL")) + private void onAttributeUpdate(ClientboundUpdateAttributesPacket packet, CallbackInfo ci) { EntityUpdateEvent.Companion.publish(new EntityUpdateEvent.AttributeUpdate( - (LivingEntity) world.getEntityById(packet.getEntityId()), packet.getEntries())); + (LivingEntity) level.getEntity(packet.getEntityId()), packet.getValues())); } - @Inject(method = "onEntityTrackerUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/data/DataTracker;writeUpdatedEntries(Ljava/util/List;)V", shift = At.Shift.AFTER)) - private void onEntityTracker(EntityTrackerUpdateS2CPacket packet, CallbackInfo ci, @Local Entity entity) { - EntityUpdateEvent.Companion.publish(new EntityUpdateEvent.TrackedDataUpdate(entity, packet.trackedValues())); + @Inject(method = "handleSetEntityData", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/syncher/SynchedEntityData;assignValues(Ljava/util/List;)V", shift = At.Shift.AFTER)) + private void onEntityTracker(ClientboundSetEntityDataPacket packet, CallbackInfo ci, @Local Entity entity) { + EntityUpdateEvent.Companion.publish(new EntityUpdateEvent.TrackedDataUpdate(entity, packet.packedItems())); } } diff --git a/src/main/java/moe/nea/firmament/mixins/FirmKeybindsInVanillaControlsPatch.java b/src/main/java/moe/nea/firmament/mixins/FirmKeybindsInVanillaControlsPatch.java index 4c9f925..5d8484f 100644 --- a/src/main/java/moe/nea/firmament/mixins/FirmKeybindsInVanillaControlsPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/FirmKeybindsInVanillaControlsPatch.java @@ -4,11 +4,11 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.gui.config.KeyBindingHandler; import moe.nea.firmament.keybindings.FirmamentKeyBindings; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.option.ControlsListWidget; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.options.controls.KeyBindsList; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.KeyMapping; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -18,39 +18,39 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ControlsListWidget.KeyBindingEntry.class) +@Mixin(KeyBindsList.KeyEntry.class) public class FirmKeybindsInVanillaControlsPatch { @Mutable @Shadow @Final - private ButtonWidget editButton; + private Button changeButton; @Shadow @Final - private KeyBinding binding; + private KeyMapping key; @Shadow @Final - private ButtonWidget resetButton; + private Button resetButton; - @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/ButtonWidget;builder(Lnet/minecraft/text/Text;Lnet/minecraft/client/gui/widget/ButtonWidget$PressAction;)Lnet/minecraft/client/gui/widget/ButtonWidget$Builder;")) - public ButtonWidget.PressAction onInit(ButtonWidget.PressAction action) { - var config = FirmamentKeyBindings.INSTANCE.getKeyBindings().get(binding); + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/Button;builder(Lnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/components/Button$OnPress;)Lnet/minecraft/client/gui/components/Button$Builder;")) + public Button.OnPress onInit(Button.OnPress action) { + var config = FirmamentKeyBindings.INSTANCE.getKeyBindings().get(key); if (config == null) return action; return button -> { ((KeyBindingHandler) config.getHandler()) .getManagedConfig() - .showConfigEditor(MinecraftClient.getInstance().currentScreen); + .showConfigEditor(Minecraft.getInstance().screen); }; } - @Inject(method = "update", at = @At("HEAD"), cancellable = true) + @Inject(method = "refreshEntry", at = @At("HEAD"), cancellable = true) public void onUpdate(CallbackInfo ci) { - var config = FirmamentKeyBindings.INSTANCE.getKeyBindings().get(binding); + var config = FirmamentKeyBindings.INSTANCE.getKeyBindings().get(key); if (config == null) return; resetButton.active = false; - editButton.setMessage(Text.translatable("firmament.keybinding.external", config.getValue().format())); + changeButton.setMessage(Component.translatable("firmament.keybinding.external", config.getValue().format())); ci.cancel(); } diff --git a/src/main/java/moe/nea/firmament/mixins/HideStatusEffectsPatch.java b/src/main/java/moe/nea/firmament/mixins/HideStatusEffectsPatch.java index 58f52f4..b2884cd 100644 --- a/src/main/java/moe/nea/firmament/mixins/HideStatusEffectsPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/HideStatusEffectsPatch.java @@ -2,8 +2,8 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.features.fixes.Fixes; import moe.nea.firmament.util.SBData; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.StatusEffectsDisplay; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.EffectsInInventory; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -11,20 +11,20 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(StatusEffectsDisplay.class) +@Mixin(EffectsInInventory.class) public abstract class HideStatusEffectsPatch { @Shadow - public abstract boolean shouldHideStatusEffectHud(); + public abstract boolean canSeeEffects(); - @Inject(method = "shouldHideStatusEffectHud", at = @At("HEAD"), cancellable = true) + @Inject(method = "canSeeEffects", at = @At("HEAD"), cancellable = true) private void hideStatusEffects(CallbackInfoReturnable cir) { if (Fixes.TConfig.INSTANCE.getHidePotionEffects()) { cir.setReturnValue(false); } } - @Inject(method = "drawStatusEffects", at = @At("HEAD"), cancellable = true) - private void conditionalRenderStatuses(DrawContext context, int mouseX, int mouseY, CallbackInfo ci) { + @Inject(method = "renderEffects", at = @At("HEAD"), cancellable = true) + private void conditionalRenderStatuses(GuiGraphics context, int mouseX, int mouseY, CallbackInfo ci) { if (Fixes.TConfig.INSTANCE.getHidePotionEffects()) { ci.cancel(); } diff --git a/src/main/java/moe/nea/firmament/mixins/HudRenderEventsPatch.java b/src/main/java/moe/nea/firmament/mixins/HudRenderEventsPatch.java index 3ec5a0e..1f7e07a 100644 --- a/src/main/java/moe/nea/firmament/mixins/HudRenderEventsPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/HudRenderEventsPatch.java @@ -6,30 +6,30 @@ import moe.nea.firmament.events.HotbarItemRenderEvent; import moe.nea.firmament.events.HudRenderEvent; import moe.nea.firmament.features.fixes.Fixes; import moe.nea.firmament.util.SBData; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.render.RenderTickCounter; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.DeltaTracker; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(InGameHud.class) +@Mixin(Gui.class) public class HudRenderEventsPatch { @Inject(method = "renderSleepOverlay", at = @At(value = "HEAD")) - public void renderCallBack(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) { + public void renderCallBack(GuiGraphics context, DeltaTracker tickCounter, CallbackInfo ci) { HudRenderEvent.Companion.publish(new HudRenderEvent(context, tickCounter)); } - @Inject(method = "renderHotbarItem", at = @At("HEAD")) - public void onRenderHotbarItem(DrawContext context, int x, int y, RenderTickCounter tickCounter, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { + @Inject(method = "renderSlot", at = @At("HEAD")) + public void onRenderHotbarItem(GuiGraphics context, int x, int y, DeltaTracker tickCounter, Player player, ItemStack stack, int seed, CallbackInfo ci) { if (stack != null && !stack.isEmpty()) HotbarItemRenderEvent.Companion.publish(new HotbarItemRenderEvent(stack, context, x, y, tickCounter)); } - @Inject(method = "renderStatusEffectOverlay", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderEffects", at = @At("HEAD"), cancellable = true) public void hideStatusEffects(CallbackInfo ci) { if (Fixes.TConfig.INSTANCE.getHidePotionEffectsHud() && SBData.INSTANCE.isOnSkyblock()) ci.cancel(); } diff --git a/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java b/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java index 5ba38c7..9f338f5 100644 --- a/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java +++ b/src/main/java/moe/nea/firmament/mixins/IncomingPacketListenerPatches.java @@ -6,33 +6,33 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.mojang.brigadier.CommandDispatcher; import moe.nea.firmament.events.MaskCommands; import moe.nea.firmament.events.ParticleSpawnEvent; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; -import net.minecraft.util.math.Vec3d; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket; +import net.minecraft.world.phys.Vec3; import org.joml.Vector3f; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayNetworkHandler.class) +@Mixin(ClientPacketListener.class) public abstract class IncomingPacketListenerPatches { - @ModifyExpressionValue(method = "onCommandTree", at = @At(value = "NEW", target = "(Lcom/mojang/brigadier/tree/RootCommandNode;)Lcom/mojang/brigadier/CommandDispatcher;", remap = false)) + @ModifyExpressionValue(method = "handleCommands", at = @At(value = "NEW", target = "(Lcom/mojang/brigadier/tree/RootCommandNode;)Lcom/mojang/brigadier/CommandDispatcher;", remap = false)) public CommandDispatcher onOnCommandTree(CommandDispatcher dispatcher) { MaskCommands.Companion.publish(new MaskCommands(dispatcher)); return dispatcher; } - @Inject(method = "onParticle", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/network/PacketApplyBatcher;)V", shift = At.Shift.AFTER), cancellable = true) - public void onParticleSpawn(ParticleS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleParticleEvent", 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 onParticleSpawn(ClientboundLevelParticlesPacket packet, CallbackInfo ci) { var event = new ParticleSpawnEvent( - packet.getParameters(), - new Vec3d(packet.getX(), packet.getY(), packet.getZ()), - new Vector3f(packet.getOffsetX(), packet.getOffsetY(), packet.getOffsetZ()), - packet.isImportant(), + packet.getParticle(), + new Vec3(packet.getX(), packet.getY(), packet.getZ()), + new Vector3f(packet.getXDist(), packet.getYDist(), packet.getZDist()), + packet.alwaysShow(), packet.getCount(), - packet.getSpeed() + packet.getMaxSpeed() ); ParticleSpawnEvent.Companion.publish(event); if (event.getCancelled()) diff --git a/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java b/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java index 836aee8..ee7f570 100644 --- a/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/KeyPressInWorldEventPatch.java @@ -7,17 +7,17 @@ import com.llamalad7.mixinextras.sugar.Local; import moe.nea.firmament.events.WorldKeyboardEvent; import moe.nea.firmament.keybindings.GenericInputAction; import moe.nea.firmament.keybindings.InputModifiers; -import net.minecraft.client.Keyboard; -import net.minecraft.client.input.KeyInput; -import net.minecraft.client.util.InputUtil; +import net.minecraft.client.KeyboardHandler; +import net.minecraft.client.input.KeyEvent; +import com.mojang.blaze3d.platform.InputConstants; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(Keyboard.class) +@Mixin(KeyboardHandler.class) public class KeyPressInWorldEventPatch { - @WrapWithCondition(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$Key;)V")) - public boolean onKeyBoardInWorld(InputUtil.Key key, @Local(argsOnly = true) KeyInput keyInput) { + @WrapWithCondition(method = "keyPress", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyMapping;click(Lcom/mojang/blaze3d/platform/InputConstants$Key;)V")) + public boolean onKeyBoardInWorld(InputConstants.Key key, @Local(argsOnly = true) KeyEvent keyInput) { var event = WorldKeyboardEvent.Companion.publish(new WorldKeyboardEvent(GenericInputAction.of(keyInput), InputModifiers.of(keyInput))); return !event.getCancelled(); } diff --git a/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java b/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java index 9e42b20..2f82fd9 100644 --- a/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java +++ b/src/main/java/moe/nea/firmament/mixins/MainWindowFirstLoadPatch.java @@ -2,8 +2,8 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.Firmament; import moe.nea.firmament.events.DebugInstantiateEvent; -import net.minecraft.client.gui.LogoDrawer; -import net.minecraft.client.gui.screen.TitleScreen; +import net.minecraft.client.gui.components.LogoRenderer; +import net.minecraft.client.gui.screens.TitleScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -15,8 +15,8 @@ public class MainWindowFirstLoadPatch { @Unique private static boolean hasInited = false; - @Inject(method = "(ZLnet/minecraft/client/gui/LogoDrawer;)V", at = @At("RETURN")) - private void onCreate(boolean doBackgroundFade, LogoDrawer logoDrawer, CallbackInfo ci) { + @Inject(method = "(ZLnet/minecraft/client/gui/components/LogoRenderer;)V", at = @At("RETURN")) + private void onCreate(boolean doBackgroundFade, LogoRenderer logoDrawer, CallbackInfo ci) { if (!hasInited && Firmament.INSTANCE.getDEBUG()) { try { DebugInstantiateEvent.Companion.publish(new DebugInstantiateEvent()); diff --git a/src/main/java/moe/nea/firmament/mixins/MaintainKeyboardStatePatch.java b/src/main/java/moe/nea/firmament/mixins/MaintainKeyboardStatePatch.java index 15fc5df..97d524a 100644 --- a/src/main/java/moe/nea/firmament/mixins/MaintainKeyboardStatePatch.java +++ b/src/main/java/moe/nea/firmament/mixins/MaintainKeyboardStatePatch.java @@ -1,17 +1,17 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.keybindings.FirmamentKeyboardState; -import net.minecraft.client.Keyboard; -import net.minecraft.client.input.KeyInput; +import net.minecraft.client.KeyboardHandler; +import net.minecraft.client.input.KeyEvent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(Keyboard.class) +@Mixin(KeyboardHandler.class) public class MaintainKeyboardStatePatch { - @Inject(method = "onKey", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/InactivityFpsLimiter;onInput()V")) - private void onKeyInput(long window, int action, KeyInput input, CallbackInfo ci) { + @Inject(method = "keyPress", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/FramerateLimitTracker;onInputReceived()V")) + private void onKeyInput(long window, int action, KeyEvent input, CallbackInfo ci) { FirmamentKeyboardState.INSTANCE.maintainState(input, action); } } diff --git a/src/main/java/moe/nea/firmament/mixins/MinecraftInitLevelListener.java b/src/main/java/moe/nea/firmament/mixins/MinecraftInitLevelListener.java index 1673987..7c1189b 100644 --- a/src/main/java/moe/nea/firmament/mixins/MinecraftInitLevelListener.java +++ b/src/main/java/moe/nea/firmament/mixins/MinecraftInitLevelListener.java @@ -1,15 +1,15 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.util.mc.InitLevel; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(MinecraftClient.class) +@Mixin(Minecraft.class) public class MinecraftInitLevelListener { - @Inject(method = "", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;initBackendSystem()Lnet/minecraft/util/TimeSupplier$Nanoseconds;")) + @Inject(method = "", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;initBackendSystem()Lnet/minecraft/util/TimeSource$NanoTimeSource;")) private void onInitRenderBackend(CallbackInfo ci) { InitLevel.bump(InitLevel.RENDER_INIT); } diff --git a/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java b/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java index 409fb6b..bd2b594 100644 --- a/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java +++ b/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java @@ -8,16 +8,16 @@ import moe.nea.firmament.events.*; import moe.nea.firmament.events.HandledScreenClickEvent; import moe.nea.firmament.keybindings.GenericInputAction; import moe.nea.firmament.keybindings.InputModifiers; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.input.KeyInput; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.text.Text; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -27,32 +27,32 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(value = HandledScreen.class, priority = 990) -public abstract class MixinHandledScreen { +@Mixin(value = AbstractContainerScreen.class, priority = 990) +public abstract class MixinHandledScreen { @Shadow @Final - protected T handler; + protected T menu; @Shadow - public abstract T getScreenHandler(); + public abstract T getMenu(); @Shadow - protected int y; + protected int topPos; @Shadow - protected int x; + protected int leftPos; @Unique - PlayerInventory playerInventory; + Inventory playerInventory; @Inject(method = "", at = @At("TAIL")) - public void savePlayerInventory(ScreenHandler handler, PlayerInventory inventory, Text title, CallbackInfo ci) { + public void savePlayerInventory(AbstractContainerMenu handler, Inventory inventory, Component title, CallbackInfo ci) { this.playerInventory = inventory; } - @Inject(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;keyPressed(Lnet/minecraft/client/input/KeyInput;)Z", shift = At.Shift.BEFORE), cancellable = true) - public void onKeyPressed(KeyInput input, CallbackInfoReturnable cir) { + @Inject(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;keyPressed(Lnet/minecraft/client/input/KeyEvent;)Z", shift = At.Shift.BEFORE), cancellable = true) + public void onKeyPressed(KeyEvent input, CallbackInfoReturnable cir) { if (HandledScreenKeyPressedEvent.Companion.publish(new HandledScreenKeyPressedEvent( - (HandledScreen) (Object) this, + (AbstractContainerScreen) (Object) this, GenericInputAction.of(input), InputModifiers.of(input))).getCancelled()) { cir.setReturnValue(true); @@ -60,16 +60,16 @@ public abstract class MixinHandledScreen { } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - public void onMouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { - if (HandledScreenKeyPressedEvent.Companion.publish(new HandledScreenKeyPressedEvent((HandledScreen) (Object) this, + public void onMouseClicked(MouseButtonEvent click, boolean doubled, CallbackInfoReturnable cir) { + if (HandledScreenKeyPressedEvent.Companion.publish(new HandledScreenKeyPressedEvent((AbstractContainerScreen) (Object) this, GenericInputAction.mouse(click), InputModifiers.current())).getCancelled()) { cir.setReturnValue(true); } } @Inject(method = "mouseReleased", at = @At("HEAD"), cancellable = true) - private void onMouseReleased(Click click, CallbackInfoReturnable cir) { - var self = (HandledScreen) (Object) this; + private void onMouseReleased(MouseButtonEvent click, CallbackInfoReturnable cir) { + var self = (AbstractContainerScreen) (Object) this; var clickEvent = new HandledScreenClickEvent(self, click.x(), click.y(), click.button()); var keyEvent = new HandledScreenKeyReleasedEvent(self, GenericInputAction.mouse(click), InputModifiers.current()); if (HandledScreenClickEvent.Companion.publish(clickEvent).getCancelled() @@ -78,16 +78,16 @@ public abstract class MixinHandledScreen { } } - @Inject(method = "renderMain", at = @At("HEAD")) - public void onAfterRenderForeground(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { - HandledScreenForegroundEvent.Companion.publish(new HandledScreenForegroundEvent((HandledScreen) (Object) this, context, mouseX, mouseY, delta)); + @Inject(method = "renderContents", at = @At("HEAD")) + public void onAfterRenderForeground(GuiGraphics context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + HandledScreenForegroundEvent.Companion.publish(new HandledScreenForegroundEvent((AbstractContainerScreen) (Object) this, context, mouseX, mouseY, delta)); } - @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At("HEAD"), cancellable = true) - public void onMouseClickedSlot(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { - if (slotId == -999 && getScreenHandler() != null && actionType == SlotActionType.PICKUP) { // -999 is code for "clicked outside the main window" - ItemStack cursorStack = getScreenHandler().getCursorStack(); - if (cursorStack != null && IsSlotProtectedEvent.shouldBlockInteraction(slot, SlotActionType.THROW, IsSlotProtectedEvent.MoveOrigin.INVENTORY_MOVE, cursorStack)) { + @Inject(method = "slotClicked(Lnet/minecraft/world/inventory/Slot;IILnet/minecraft/world/inventory/ClickType;)V", at = @At("HEAD"), cancellable = true) + public void onMouseClickedSlot(Slot slot, int slotId, int button, ClickType actionType, CallbackInfo ci) { + if (slotId == -999 && getMenu() != null && actionType == ClickType.PICKUP) { // -999 is code for "clicked outside the main window" + ItemStack cursorStack = getMenu().getCarried(); + if (cursorStack != null && IsSlotProtectedEvent.shouldBlockInteraction(slot, ClickType.THROW, IsSlotProtectedEvent.MoveOrigin.INVENTORY_MOVE, cursorStack)) { ci.cancel(); return; } @@ -96,7 +96,7 @@ public abstract class MixinHandledScreen { ci.cancel(); return; } - if (actionType == SlotActionType.SWAP && 0 <= button && button < 9) { + if (actionType == ClickType.SWAP && 0 <= button && button < 9) { if (IsSlotProtectedEvent.shouldBlockInteraction(new Slot(playerInventory, button, 0, 0), actionType, IsSlotProtectedEvent.MoveOrigin.INVENTORY_MOVE)) { ci.cancel(); } @@ -104,8 +104,8 @@ public abstract class MixinHandledScreen { } - @WrapOperation(method = "drawSlots", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawSlot(Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/screen/slot/Slot;)V")) - public void onDrawSlots(HandledScreen instance, DrawContext context, Slot slot, Operation original) { + @WrapOperation(method = "renderSlots", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/AbstractContainerScreen;renderSlot(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/world/inventory/Slot;)V")) + public void onDrawSlots(AbstractContainerScreen instance, GuiGraphics context, Slot slot, Operation original) { var before = new SlotRenderEvents.Before(context, slot); SlotRenderEvents.Before.Companion.publish(before); original.call(instance, context, slot); diff --git a/src/main/java/moe/nea/firmament/mixins/MixinPlayerScreenHandler.java b/src/main/java/moe/nea/firmament/mixins/MixinPlayerScreenHandler.java index 12455f4..2210c9e 100644 --- a/src/main/java/moe/nea/firmament/mixins/MixinPlayerScreenHandler.java +++ b/src/main/java/moe/nea/firmament/mixins/MixinPlayerScreenHandler.java @@ -1,27 +1,27 @@ package moe.nea.firmament.mixins; import moe.nea.firmament.features.fixes.Fixes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.screen.PlayerScreenHandler; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.InventoryMenu; 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; -@Mixin(PlayerScreenHandler.class) +@Mixin(InventoryMenu.class) public class MixinPlayerScreenHandler { @Unique private static final int OFF_HAND_SLOT = 40; @Inject(method = "", at = @At("TAIL")) - private void moveOffHandSlot(PlayerInventory inventory, boolean onServer, PlayerEntity owner, CallbackInfo ci) { + private void moveOffHandSlot(Inventory inventory, boolean onServer, Player owner, CallbackInfo ci) { if (Fixes.TConfig.INSTANCE.getHideOffHand()) { - PlayerScreenHandler self = (PlayerScreenHandler) (Object) this; + InventoryMenu self = (InventoryMenu) (Object) this; self.slots.stream() - .filter(slot -> slot.getIndex() == OFF_HAND_SLOT) + .filter(slot -> slot.getContainerSlot() == OFF_HAND_SLOT) .forEach(slot -> { slot.x = -1000; slot.y = -1000; diff --git a/src/main/java/moe/nea/firmament/mixins/MixinRecipeBookScreen.java b/src/main/java/moe/nea/firmament/mixins/MixinRecipeBookScreen.java index 2dbe738..d0ec17c 100644 --- a/src/main/java/moe/nea/fi