From b5fe80b9a10facbadf6ba9b78a62bdead3810d50 Mon Sep 17 00:00:00 2001 From: Ryan <87820585+SprainedSpark89@users.noreply.github.com> Date: Sat, 8 Nov 2025 09:31:57 -0800 Subject: [PATCH 1/9] may i introduce the worst fork ever! probably the least known version of copyright hell --- .../MixinLivingEntityRenderer.java | 53 +++++++++++++++++++ .../viafabricplus-visuals.mixins.json | 1 + 2 files changed, 54 insertions(+) create mode 100644 viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java new file mode 100644 index 000000000..1d6c09f49 --- /dev/null +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java @@ -0,0 +1,53 @@ +// going to go crazy with comments, with enough i'll make it work %100, right? +package com.viaversion.viafabricplus.visuals.injection.mixin.classic.walking_animation; // declares the current package + +import org.spongepowered.asm.mixin.Mixin; // imports the mixin class +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.viaversion.viafabricplus.visuals.settings.VisualSettings; + +import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.entity.LivingEntityRenderer; // imports the target class +import net.minecraft.client.render.entity.state.LivingEntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.MathHelper; + +@Mixin(LivingEntityRenderer.class) // class target for the mixin +// Nostalgic tweaks was a reference while making this code, i don't really don't do modern modding, so it was quite a good reference to help do this! +// check it out!: https://github.com/Nostalgica-Reverie/Nostalgic-Tweaks/blob/1.21/common/src/main/java/mod/adrenix/nostalgic/mixin/tweak/animation/player/LivingEntityRendererMixin.java +// https://github.com/Nostalgica-Reverie/Nostalgic-Tweaks/blob/1.21/common/src/main/java/mod/adrenix/nostalgic/helper/animation/ClassicWalkHelper.java +// this code also takes a bit from c0.30 and birevan's port they made for me, thx if i haven't said that before again +public class MixinLivingEntityRenderer { // beginning of the mixin class + + float prevLimbYaw = 0.0F; // Jank that allows the previous limb yaw to be recorded + @Inject( // start of the method injection + method = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", // targets the render method + at = @At( // start of where it'll put the code + ordinal = 1, // instance number? + value = "INVOKE", // add method below to be called + target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V" // instance to place after + ) + ) + public void oldBobbing(S livingEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo callback) { // method begins + if (VisualSettings.INSTANCE.oldWalkingAnimation.isEnabled()) { // checks if the classic walking animation is enabled + float var15; // ctrl c + float var16; // ctrl v + float var14 = 0.0625F; // another one + //matrixStack.translate(0.0F, -24.0F * var14 - 0.0078125F, 0.0F); + // from the port to a1.1.2_01 by birevan, modified to work + var15 = prevLimbYaw + (livingEntityRenderState.limbSwingAmplitude - prevLimbYaw) * livingEntityRenderState.pitch; + var16 = livingEntityRenderState.limbSwingAnimationProgress - livingEntityRenderState.limbSwingAmplitude/* * (1.0F - livingEntityRenderState.pitch)*/; + if(var15 > 1.0F) { + var15 = 1.0F; + } + + float var1 = var16; // laziness + float var2 = var15; // even more + prevLimbYaw = livingEntityRenderState.limbSwingAmplitude; // the jank in question + matrixStack.translate(0F, -Math.abs(Math.cos(var1 * 0.6662F)) * 0.5F * var2, 0F); // some math was stolen from nostalgic tweaks, sue me ;-), please actually don't, i don't know how copyright works + } + } +} diff --git a/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json b/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json index 7633cfd07..c4881935e 100644 --- a/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json +++ b/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json @@ -6,6 +6,7 @@ "client": [ "classic.creative_menu.MixinCreativeInventoryScreen", "classic.walking_animation.MixinBipedEntityModel", + "classic.walking_animation.MixinLivingEntityRenderer", "filter_game_mode_selections.MixinGameModeSwitcherScreen", "filter_game_mode_selections.MixinGameModeSwitcherScreen_GameModeSelection", "force_unicode_font.MixinLanguageManager", From 30610df3782387b8188c0688ca90df11bada3a7b Mon Sep 17 00:00:00 2001 From: Ryan <87820585+SprainedSpark89@users.noreply.github.com> Date: Sat, 8 Nov 2025 10:01:49 -0800 Subject: [PATCH 2/9] stripped some comments --- .../MixinLivingEntityRenderer.java | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java index 1d6c09f49..020bc6fad 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java @@ -1,7 +1,6 @@ -// going to go crazy with comments, with enough i'll make it work %100, right? package com.viaversion.viafabricplus.visuals.injection.mixin.classic.walking_animation; // declares the current package -import org.spongepowered.asm.mixin.Mixin; // imports the mixin class +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; @@ -9,33 +8,32 @@ import com.viaversion.viafabricplus.visuals.settings.VisualSettings; import net.minecraft.client.render.command.OrderedRenderCommandQueue; -import net.minecraft.client.render.entity.LivingEntityRenderer; // imports the target class +import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.MathHelper; -@Mixin(LivingEntityRenderer.class) // class target for the mixin +@Mixin(LivingEntityRenderer.class) // Nostalgic tweaks was a reference while making this code, i don't really don't do modern modding, so it was quite a good reference to help do this! // check it out!: https://github.com/Nostalgica-Reverie/Nostalgic-Tweaks/blob/1.21/common/src/main/java/mod/adrenix/nostalgic/mixin/tweak/animation/player/LivingEntityRendererMixin.java // https://github.com/Nostalgica-Reverie/Nostalgic-Tweaks/blob/1.21/common/src/main/java/mod/adrenix/nostalgic/helper/animation/ClassicWalkHelper.java // this code also takes a bit from c0.30 and birevan's port they made for me, thx if i haven't said that before again -public class MixinLivingEntityRenderer { // beginning of the mixin class +public class MixinLivingEntityRenderer { - float prevLimbYaw = 0.0F; // Jank that allows the previous limb yaw to be recorded - @Inject( // start of the method injection + float prevLimbYaw = 0.0F; + @Inject( method = "Lnet/minecraft/client/render/entity/LivingEntityRenderer;render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", // targets the render method - at = @At( // start of where it'll put the code - ordinal = 1, // instance number? - value = "INVOKE", // add method below to be called - target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V" // instance to place after + at = @At( + ordinal = 1, + value = "INVOKE", + target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V" ) ) - public void oldBobbing(S livingEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo callback) { // method begins - if (VisualSettings.INSTANCE.oldWalkingAnimation.isEnabled()) { // checks if the classic walking animation is enabled - float var15; // ctrl c - float var16; // ctrl v - float var14 = 0.0625F; // another one + public void oldBobbing(S livingEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo callback) { + if (VisualSettings.INSTANCE.oldWalkingAnimation.isEnabled()) { + float var15; + float var16; + float var14 = 0.0625F; //matrixStack.translate(0.0F, -24.0F * var14 - 0.0078125F, 0.0F); // from the port to a1.1.2_01 by birevan, modified to work var15 = prevLimbYaw + (livingEntityRenderState.limbSwingAmplitude - prevLimbYaw) * livingEntityRenderState.pitch; @@ -44,9 +42,9 @@ public void oldBobbing(S livingEntityRenderS var15 = 1.0F; } - float var1 = var16; // laziness - float var2 = var15; // even more - prevLimbYaw = livingEntityRenderState.limbSwingAmplitude; // the jank in question + float var1 = var16; + float var2 = var15; + prevLimbYaw = livingEntityRenderState.limbSwingAmplitude; matrixStack.translate(0F, -Math.abs(Math.cos(var1 * 0.6662F)) * 0.5F * var2, 0F); // some math was stolen from nostalgic tweaks, sue me ;-), please actually don't, i don't know how copyright works } } From 4d34a1ff721d6182c9fe07dff9bd5ff36a963344 Mon Sep 17 00:00:00 2001 From: Ryan <87820585+SprainedSpark89@users.noreply.github.com> Date: Sat, 8 Nov 2025 10:03:34 -0800 Subject: [PATCH 3/9] even less comments wasn't expecting someone to look --- .../classic/walking_animation/MixinLivingEntityRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java index 020bc6fad..04b0a79fe 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java @@ -1,4 +1,4 @@ -package com.viaversion.viafabricplus.visuals.injection.mixin.classic.walking_animation; // declares the current package +package com.viaversion.viafabricplus.visuals.injection.mixin.classic.walking_animation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; From 501af866936e136345e2616d273d0f2f675f6ae3 Mon Sep 17 00:00:00 2001 From: FlorianMichael Date: Mon, 8 Dec 2025 17:50:16 +0100 Subject: [PATCH 4/9] Move to Mojang (official) mappings Co-authored-by: lowercasebtw <126462578+lowercasebtw@users.noreply.github.com> --- build.gradle.kts | 2 +- docs/MAINTAINING.md | 7 +- gradle.properties | 1 - settings.gradle.kts | 2 +- .../viafabricplus/ViaFabricPlusImpl.java | 44 +-- .../viafabricplus/base/VFPDebugHudEntry.java | 24 +- .../base/sync_tasks/DataCustomPayload.java | 16 +- .../base/sync_tasks/SyncTasks.java | 20 +- .../features/FeaturesLoading.java | 6 +- .../features/block/interaction/Block1_14.java | 14 +- .../features/block/shape/CollisionShapes.java | 66 ++-- .../classic/cpe_extension/CPEAdditions.java | 4 +- .../features/entity/EntityDimensionDiff.java | 14 +- .../EnchantmentAttributesEmulation1_20_6.java | 52 +-- .../WolfHealthTracker1_14_4.java | 2 +- .../entity/r1_8_boat/BoatModel1_8.java | 44 +-- .../entity/r1_8_boat/BoatRenderer1_8.java | 54 ++-- .../r1_8_boat/PositionInterpolator1_8.java | 48 +-- .../EntityRidingOffsetsPre1_20_2.java | 200 ++++++------ .../font/BuiltinEmptyGlyph1_12_2.java | 20 +- .../features/font/FontCacheReload.java | 10 +- .../FootStepParticle1_12_2.java | 60 ++-- .../ClientPlayerInteractionManager1_18_2.java | 50 +-- .../ActionResultException1_12_2.java | 8 +- .../VersionedRegistries.java | 94 +++--- .../negative_item_count/NegativeItemUtil.java | 8 +- .../Enchantments1_14_4.java | 10 +- .../max_chat_length/MaxChatLength.java | 12 +- .../armor_hud/ArmorHudEmulation1_8.java | 16 +- .../SignedCommands1_21_6.java | 14 +- .../ResourcePackHeaderDiff.java | 30 +- .../recipe/AddBannerPatternRecipe.java | 80 ++--- .../features/recipe/BannerPattern_1_13_2.java | 38 +-- .../features/recipe/RecipeManager1_11_2.java | 34 +- .../features/recipe/Recipes1_11_2.java | 164 +++++----- .../recipe/ShulkerBoxColoringRecipe.java | 44 +-- .../PendingUpdateManager1_18_2.java | 28 +- .../world/item_picking/ItemPick1_21_3.java | 78 ++--- .../injection/ViaFabricPlusMixinPlugin.java | 4 +- ...ClientConnection.java => IConnection.java} | 2 +- .../{ITextFieldWidget.java => IEditBox.java} | 2 +- ...leLogImpl.java => ILocalSampleLogger.java} | 2 +- .../{IServerInfo.java => IServerData.java} | 2 +- .../access/base/bedrock/IConfirmScreen.java | 4 +- ...ngBlock.java => ICrossCollisionBlock.java} | 4 +- ...ractBoatEntity.java => IAbstractBoat.java} | 8 +- ...board.java => IMouseKeyboardHandlers.java} | 2 +- ...ndler.java => IAbstractContainerMenu.java} | 2 +- ...Manager.java => IMultiPlayerGameMode.java} | 2 +- .../item/attack_damage/IDisplayDefault.java | 4 +- ...orage.java => IProfilePublicKey_Data.java} | 2 +- ...a => IGameTestBlockHighlightRenderer.java} | 4 +- .../injection/mixin/base/MixinMain.java | 2 +- ...gImpl.java => MixinLocalSampleLogger.java} | 8 +- ...xinClientHandshakePacketListenerImpl.java} | 20 +- .../base/connection/MixinConnectScreen_1.java | 2 +- ...ntConnection.java => MixinConnection.java} | 64 ++-- ...nnection_1.java => MixinConnection_1.java} | 10 +- ...necraftClient.java => MixinMinecraft.java} | 18 +- ...ixinGameOptions.java => MixinOptions.java} | 8 +- ...nger.java => MixinServerStatusPinger.java} | 26 +- ...ntConnection.java => MixinConnection.java} | 6 +- ...ries.java => MixinDebugScreenEntries.java} | 30 +- ...inServerInfo.java => MixinServerData.java} | 28 +- ..._1.java => MixinServerStatusPinger_1.java} | 36 +-- .../bedrock/MixinConfirmScreen.java | 20 +- .../bedrock/MixinConnectScreen_1.java | 10 +- ...nger.java => MixinServerStatusPinger.java} | 18 +- ...necraftClient.java => MixinMinecraft.java} | 10 +- ... MixinClientCommonPacketListenerImpl.java} | 16 +- .../mixin/base/ui/MixinConnectScreen_1.java | 40 +-- ....java => MixinDirectJoinServerScreen.java} | 20 +- ...n.java => MixinJoinMultiplayerScreen.java} | 42 +-- .../base/ui/MixinLevelLoadingScreen.java | 16 +- ...reen.java => MixinManageServerScreen.java} | 44 +-- ...ltiplayerServerListWidget_ServerEntry.java | 28 +- .../MixinCCAuthenticationResponse.java | 12 +- ...TextFieldWidget.java => MixinEditBox.java} | 22 +- .../mixin/compat/lithium/MixinEntity.java | 2 +- ...StaticSound.java => MixinSoundBuffer.java} | 6 +- .../bedrock/allow_new_line/MixinFont.java | 102 ++++++ .../allow_new_line/MixinTextRenderer.java | 102 ------ .../bedrock/block/MixinCactusBlock.java | 18 +- .../bedrock/block/MixinCandleCakeBlock.java | 26 +- .../bedrock/block/MixinConduitBlock.java | 28 +- .../bedrock/block/MixinDoorBlock.java | 36 +-- .../bedrock/block/MixinDragonEggBlock.java | 28 +- .../bedrock/block/MixinHoneyBlock.java | 18 +- .../bedrock/block/MixinLanternBlock.java | 40 +-- .../bedrock/block/MixinLecternBlock.java | 18 +- .../bedrock/block/MixinSeaPickleBlock.java | 54 ++-- ...doorBlock.java => MixinTrapDoorBlock.java} | 50 +-- .../bedrock/movement/MixinEntity.java | 2 +- .../bedrock/movement/MixinLivingEntity.java | 24 +- ...layerEntity.java => MixinLocalPlayer.java} | 14 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 42 +-- .../MixinGameRenderer.java | 30 +- ...ava => MixinClientSuggestionProvider.java} | 12 +- .../interaction/MixinCanPlaceAt1_14.java | 20 +- .../interaction/MixinDecoratedPotBlock.java | 32 +- .../block/interaction/MixinFenceBlock.java | 34 +- .../interaction/MixinFlowerPotBlock.java | 18 +- ...PaneBlock.java => MixinIronBarsBlock.java} | 24 +- .../block/interaction/MixinNoteBlock.java | 10 +- ...ractSignBlock.java => MixinSignBlock.java} | 42 +-- ...MixinAbstractBlock_AbstractBlockState.java | 26 +- ...actBlock.java => MixinBlockBehaviour.java} | 24 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 50 +-- .../features/block/shape/MixinAnvilBlock.java | 36 +-- ...RailBlock.java => MixinBaseRailBlock.java} | 26 +- .../features/block/shape/MixinBedBlock.java | 30 +- .../block/shape/MixinBrewingStandBlock.java | 26 +- .../block/shape/MixinCarpetBlock.java | 20 +- .../block/shape/MixinCauldronBlock.java | 52 +-- .../features/block/shape/MixinChestBlock.java | 66 ++-- .../features/block/shape/MixinCropBlocks.java | 16 +- ...ock.java => MixinCrossCollisionBlock.java} | 28 +- .../block/shape/MixinEndPortalBlock.java | 28 +- .../block/shape/MixinEndPortalFrameBlock.java | 46 +-- .../block/shape/MixinEnderChestBlock.java | 32 +- ...FarmlandBlock.java => MixinFarmBlock.java} | 40 +-- .../features/block/shape/MixinFenceBlock.java | 88 ++--- .../block/shape/MixinFenceGateBlock.java | 36 +-- .../features/block/shape/MixinFireBlock.java | 20 +- ...bedBlock.java => MixinFlowerBedBlock.java} | 24 +- .../block/shape/MixinHopperBlock.java | 40 +-- .../block/shape/MixinIronBarsBlock.java | 130 ++++++++ .../block/shape/MixinLadderBlock.java | 44 +-- .../block/shape/MixinLeavesBlock.java | 20 +- .../features/block/shape/MixinPaneBlock.java | 130 -------- ...onBlock.java => MixinPistonBaseBlock.java} | 42 +-- .../block/shape/MixinPistonHeadBlock.java | 70 ++-- .../block/shape/MixinPitcherCropBlock.java | 56 ++-- ...nowBlock.java => MixinSnowLayerBlock.java} | 44 +-- .../block/shape/MixinSoulSandBlock.java | 18 +- .../features/block/shape/MixinWallBlock.java | 122 +++---- ...PadBlock.java => MixinWaterlilyBlock.java} | 24 +- ...g.java => MixinWeatherEffectRenderer.java} | 16 +- ...emFrameEntity.java => MixinItemFrame.java} | 12 +- ...ntityIndex.java => MixinEntityLookup.java} | 14 +- .../entity/attribute/MixinLivingEntity.java | 4 +- ...BoatEntity.java => MixinAbstractBoat.java} | 26 +- ...ntity.java => MixinAbstractChestBoat.java} | 20 +- ...ctCowEntity.java => MixinAbstractCow.java} | 28 +- ...rseEntity.java => MixinAbstractHorse.java} | 18 +- ...ixinAnimalEntity.java => MixinAnimal.java} | 24 +- ...madilloEntity.java => MixinArmadillo.java} | 12 +- ...inAxolotlEntity.java => MixinAxolotl.java} | 18 +- .../{MixinBeeEntity.java => MixinBee.java} | 26 +- .../{MixinCatEntity.java => MixinCat.java} | 34 +- ...inCreeperEntity.java => MixinCreeper.java} | 16 +- .../entity/interaction/MixinEntity.java | 28 +- .../{MixinMobEntity.java => MixinMob.java} | 30 +- ...hroomEntity.java => MixinMushroomCow.java} | 44 +-- ...{MixinSquidEntity.java => MixinSquid.java} | 6 +- .../entity/interaction/MixinWolf.java | 106 +++++++ .../entity/interaction/MixinWolfEntity.java | 106 ------- ...erEntity.java => MixinZombieVillager.java} | 16 +- .../{MixinWolfEntity.java => MixinWolf.java} | 20 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 40 +-- ...ayerEntity.java => MixinRemotePlayer.java} | 16 +- ...BoatEntity.java => MixinAbstractBoat.java} | 200 ++++++------ ....java => MixinEntityRenderDispatcher.java} | 24 +- ...Models.java => MixinLayerDefinitions.java} | 14 +- ...BoatEntity.java => MixinAbstractBoat.java} | 24 +- ...{MixinCamelEntity.java => MixinCamel.java} | 38 +-- .../entity/riding_offset/MixinEntity.java | 24 +- .../riding_offset/MixinLivingEntity.java | 22 +- ...eyboard.java => MixinKeyboardHandler.java} | 18 +- ...necraftClient.java => MixinMinecraft.java} | 26 +- ...MixinMouse.java => MixinMouseHandler.java} | 18 +- ...ixinFontStorage.java => MixinFontSet.java} | 48 +-- .../MixinRegistrySyncManager.java | 10 +- .../interaction/MixinLivingEntity.java | 18 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 14 +- ...r.java => MixinAbstractContainerMenu.java} | 18 +- ...ler.java => MixinAbstractFurnaceMenu.java} | 20 +- ...eenHandler.java => MixinCraftingMenu.java} | 20 +- .../container_clicking/MixinMerchantMenu.java | 132 ++++++++ .../MixinMerchantScreenHandler.java | 132 -------- ...ger.java => MixinMultiPlayerGameMode.java} | 94 +++--- ...wnManager.java => MixinItemCooldowns.java} | 8 +- ...necraftClient.java => MixinMinecraft.java} | 26 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 8 +- ...ger.java => MixinMultiPlayerGameMode.java} | 32 +- .../MixinWorldPacketRewriter1_19.java | 14 +- ...va => MixinBrewingStandMenu_FuelSlot.java} | 14 +- ...enHandler.java => MixinInventoryMenu.java} | 20 +- ...ntext.java => MixinBlockPlaceContext.java} | 36 +-- .../MixinClientPlayerInteractionManager.java | 254 --------------- ...necraftClient.java => MixinMinecraft.java} | 10 +- .../MixinMultiPlayerGameMode.java | 254 +++++++++++++++ ...uteModifiersComponent_Display_Default.java | 28 +- .../item/attack_damage/MixinItemStack.java | 20 +- ...inCreativeModeTab_ItemDisplayBuilder.java} | 28 +- ...Groups.java => MixinCreativeModeTabs.java} | 24 +- .../item/interaction/MixinAxeItem.java | 20 +- .../item/interaction/MixinBlockItem.java | 32 +- .../item/interaction/MixinBowItem.java | 32 +- .../item/interaction/MixinBrushItem.java | 10 +- .../item/interaction/MixinBucketItem.java | 14 +- .../item/interaction/MixinBundleItem.java | 26 +- ...bleComponent.java => MixinConsumable.java} | 22 +- ...earlItem.java => MixinEnderpearlItem.java} | 20 +- ...bleComponent.java => MixinEquippable.java} | 28 +- .../item/interaction/MixinFireChargeItem.java | 14 +- .../interaction/MixinFireworkRocketItem.java | 12 +- .../item/interaction/MixinFishingRodItem.java | 14 +- .../interaction/MixinKnowledgeBookItem.java | 18 +- .../item/interaction/MixinLeadItem.java | 16 +- .../item/interaction/MixinNameTagItem.java | 22 +- .../item/interaction/MixinShovelItem.java | 4 +- ...DrawContext.java => MixinGuiGraphics.java} | 16 +- .../features/item/tooltip/MixinItemStack.java | 72 ++--- .../MixinItemPacketRewriter1_14.java | 24 +- ... MixinAbstractCommandBlockEditScreen.java} | 14 +- .../MixinChatScreen.java | 30 +- ...stor.java => MixinCommandSuggestions.java} | 50 +-- ...tance.java => MixinMobEffectInstance.java} | 12 +- .../book_edit/MixinBookEditScreen.java | 4 +- .../max_chat_length/MixinChatScreen.java | 10 +- ...t.java => MixinServerboundChatPacket.java} | 6 +- ...StringHelper.java => MixinStringUtil.java} | 8 +- ...MixinMouse.java => MixinMouseHandler.java} | 12 +- ...een.java => MixinMouseSettingsScreen.java} | 24 +- ...BoatEntity.java => MixinAbstractBoat.java} | 18 +- .../movement/collision/MixinBedBlock.java | 14 +- .../movement/collision/MixinEntity.java | 118 +++---- .../movement/collision/MixinHoneyBlock.java | 58 ++-- .../movement/collision/MixinLivingEntity.java | 46 +-- ...layerEntity.java => MixinLocalPlayer.java} | 12 +- ...MixinVoxelShapes.java => MixinShapes.java} | 24 +- .../collision/MixinSoulSandBlock.java | 24 +- ...PlayerLikeEntity.java => MixinAvatar.java} | 30 +- ...Renderer.java => MixinAvatarRenderer.java} | 34 +- .../movement/constants/MixinEntity.java | 8 +- .../movement/constants/MixinLivingEntity.java | 6 +- ...layerEntity.java => MixinLocalPlayer.java} | 12 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 28 +- .../elytra/MixinFireworkRocketItem.java | 10 +- .../movement/elytra/MixinLivingEntity.java | 34 +- ...layerEntity.java => MixinLocalPlayer.java} | 14 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 28 +- .../movement/jump/MixinLivingEntity.java | 12 +- ...layerEntity.java => MixinLocalPlayer.java} | 24 +- .../limitation/MixinLivingEntity.java | 36 +-- ...ixinPlayerEntity.java => MixinPlayer.java} | 38 +-- .../limitation/rotation/MixinEntity.java | 20 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 12 +- ...layerEntity.java => MixinLocalPlayer.java} | 44 +-- ...on.java => MixinPositionMoveRotation.java} | 12 +- .../movement/slowdown/MixinEnderEyeItem.java | 10 +- ...layerEntity.java => MixinLocalPlayer.java} | 44 +-- .../MixinKeyboardInput.java | 10 +- .../MixinLivingEntity.java | 12 +- ...layerEntity.java => MixinLocalPlayer.java} | 188 +++++------ ...ixinPlayerEntity.java => MixinPlayer.java} | 22 +- ...rseEntity.java => MixinAbstractHorse.java} | 14 +- ...layerEntity.java => MixinLocalPlayer.java} | 56 ++-- .../features/movement/water/MixinEntity.java | 62 ++-- ...wableFluid.java => MixinFlowingFluid.java} | 38 +-- .../movement/water/MixinItemEntity.java | 4 +- .../movement/water/MixinLivingEntity.java | 42 +-- ...layerEntity.java => MixinLocalPlayer.java} | 38 +-- ...rseEntity.java => MixinSkeletonHorse.java} | 18 +- ...lientConfigurationPacketListenerImpl.java} | 26 +- ...er.java => MixinClientPacketListener.java} | 26 +- ...ler.java => MixinProtocolSwapHandler.java} | 8 +- ... => MixinUnconfiguredPipelineHandler.java} | 6 +- ...ltiplayerServerListWidget_ServerEntry.java | 70 ++-- ...ixinPlayerEntity.java => MixinPlayer.java} | 10 +- ...=> MixinAccountProfileKeyPairManager.java} | 16 +- .../MixinConnectScreen_1.java | 28 +- .../MixinKeyPairResponse.java | 4 +- ...a.java => MixinProfilePublicKey_Data.java} | 8 +- .../MixinYggdrasilUserApiService.java | 4 +- ...er.java => MixinClientPacketListener.java} | 32 +- .../MixinLevelLoadingScreen.java | 36 +-- ...xinClientHandshakePacketListenerImpl.java} | 14 +- ...necraftClient.java => MixinMinecraft.java} | 12 +- ... MixinClientCommonPacketListenerImpl.java} | 62 ++-- .../MixinClientPacketListener.java | 259 +++++++++++++++ .../MixinClientPlayNetworkHandler.java | 259 --------------- ... MixinGameTestBlockHighlightRenderer.java} | 16 +- .../MixinProtocol1_21_7To1_21_9.java | 12 +- ...ixinServerboundPlayerAbilitiesPacket.java} | 24 +- ...istCodec.java => MixinHolderSetCodec.java} | 18 +- .../MixinRegistryEntryList_Named.java | 18 +- ...nger.java => MixinServerStatusPinger.java} | 12 +- ...er.java => MixinClientPacketListener.java} | 42 +-- .../MixinGameModeSwitcherScreen.java | 22 +- ...eyboard.java => MixinKeyboardHandler.java} | 26 +- ....java => MixinDownloadedPackSource_4.java} | 18 +- .../srv_resolving/MixinConnectScreen_1.java | 10 +- .../srv_resolving/MixinServerAddress.java | 8 +- ...lver.java => MixinServerNameResolver.java} | 20 +- ...r.java => MixinServerRedirectHandler.java} | 8 +- ...eenHandler.java => MixinCraftingMenu.java} | 20 +- ...enHandler.java => MixinInventoryMenu.java} | 20 +- ....java => MixinCommandBlockEditScreen.java} | 24 +- ...n.java => MixinJigsawBlockEditScreen.java} | 52 +-- ...ava => MixinStructureBlockEditScreen.java} | 36 +-- ...a => MixinStructureBlockEditScreen_1.java} | 16 +- .../run_command_action/MixinScreen.java | 14 +- .../{MixinTeam.java => MixinPlayerTeam.java} | 38 +-- .../MixinAbstractSignEditScreen.java | 10 +- ...kinProvider.java => MixinSkinManager.java} | 22 +- .../features/swinging/MixinLivingEntity.java | 8 +- ...necraftClient.java => MixinMinecraft.java} | 38 +-- ...ClientWorld.java => MixinClientLevel.java} | 50 +-- .../always_tick_entities/MixinEntity.java | 2 +- .../MixinBuiltChunk.java | 6 +- ...ClientWorld.java => MixinClientLevel.java} | 12 +- .../duplicated_sounds/MixinBlockItem.java | 18 +- .../duplicated_sounds/MixinButtonBlock.java | 18 +- .../world/duplicated_sounds/MixinItems.java | 20 +- ...necraftClient.java => MixinMinecraft.java} | 12 +- ...ixinGameOptions.java => MixinOptions.java} | 8 +- .../ProtocolTranslator.java | 24 +- .../impl/ViaFabricPlusMappingDataLoader.java | 6 +- .../ViaFabricPlusViaCommandSender.java | 12 +- .../classic/ListExtensionsCommand.java | 6 +- .../impl/command/classic/SetTimeCommand.java | 6 +- .../ViaFabricPlusViaVersionPlatformImpl.java | 4 +- .../ViaFabricPlusAlphaInventoryProvider.java | 30 +- .../ViaFabricPlusEncryptionProvider.java | 4 +- .../ViaFabricPlusOldAuthProvider.java | 10 +- ...ViaFabricPlusCommandArgumentsProvider.java | 14 +- .../ViaFabricPlusHandItemProvider.java | 2 +- .../ViaFabricPlusPlayerAbilitiesProvider.java | 6 +- ...ViaFabricPlusPlayerLookTargetProvider.java | 8 +- .../netty/ViaFabricPlusVLLegacyPipeline.java | 2 +- .../netty/ViaFabricPlusViaDecoder.java | 6 +- .../translator/BlockStateTranslator.java | 10 +- .../translator/ItemTranslator.java | 14 +- .../util/ProtocolVersionDetector.java | 22 +- .../viafabricplus/screen/VFPList.java | 22 +- .../viafabricplus/screen/VFPListEntry.java | 66 ++-- .../viafabricplus/screen/VFPScreen.java | 88 ++--- .../screen/impl/PerServerVersionScreen.java | 44 +-- .../screen/impl/ProtocolSelectionScreen.java | 40 +-- .../screen/impl/ReportIssuesScreen.java | 34 +- .../screen/impl/ServerListScreen.java | 34 +- .../screen/impl/SettingsScreen.java | 10 +- .../impl/classic4j/BetaCraftScreen.java | 38 +-- .../impl/classic4j/ClassiCubeLoginScreen.java | 54 ++-- .../impl/classic4j/ClassiCubeMFAScreen.java | 34 +- .../classic4j/ClassiCubeServerListScreen.java | 46 +-- .../realms/AcceptInvitationCodeScreen.java | 22 +- .../impl/realms/BedrockRealmsScreen.java | 66 ++-- .../impl/settings/BooleanListEntry.java | 24 +- .../screen/impl/settings/ButtonListEntry.java | 16 +- .../screen/impl/settings/ModeListEntry.java | 22 +- .../screen/impl/settings/TitleEntry.java | 26 +- .../settings/VersionedBooleanListEntry.java | 24 +- .../settings/impl/AuthenticationSettings.java | 12 +- .../settings/impl/BedrockSettings.java | 42 +-- .../settings/impl/DebugSettings.java | 34 +- .../settings/impl/GeneralSettings.java | 54 ++-- .../viafabricplus/util/ConnectionUtil.java | 18 +- .../viafabricplus/util/ItemUtil.java | 14 +- .../resources/viafabricplus.accesswidener | 80 ++--- src/main/resources/viafabricplus.mixins.json | 300 +++++++++--------- .../updater/CollisionShapesTaskTest.java | 38 +-- .../viafabricplus/updater/UpdateTaskTest.java | 48 +-- .../viafabricplus/api/ViaFabricPlusBase.java | 40 +-- .../api/settings/AbstractSetting.java | 18 +- .../api/settings/SettingGroup.java | 8 +- .../api/settings/type/BooleanSetting.java | 4 +- .../api/settings/type/ButtonSetting.java | 6 +- .../api/settings/type/ModeSetting.java | 14 +- .../type/VersionedBooleanSetting.java | 4 +- .../viafabricplus/util/ChatUtil.java | 28 +- .../visuals/ViaFabricPlusVisuals.java | 4 +- .../GridItemSelectionScreen.java | 58 ++-- .../UnicodeFontFix1_12_2.java | 18 +- ...IPlayerListEntry.java => IPlayerInfo.java} | 2 +- ...yerListHud.java => IPlayerTabOverlay.java} | 2 +- ... => MixinCreativeModeInventoryScreen.java} | 10 +- ...tityModel.java => MixinHumanoidModel.java} | 26 +- .../MixinGameModeSwitcherScreen.java | 30 +- ...nGameModeSwitcherScreen_GameModeIcon.java} | 18 +- .../MixinLanguageManager.java | 6 +- ...inChatHud.java => MixinChatComponent.java} | 12 +- .../hud_element_changes/MixinChatScreen.java | 12 +- .../{MixinInGameHud.java => MixinGui.java} | 52 +-- ...ger.java => MixinMultiPlayerGameMode.java} | 10 +- .../mixin/instant_sneaking/MixinCamera.java | 16 +- .../MixinLevelLoadingScreen.java | 10 +- ...ixinPlayerEntity.java => MixinPlayer.java} | 14 +- .../MixinItemRenderer.java | 20 +- ...tityModel.java => MixinHumanoidModel.java} | 12 +- .../player_rotations/MixinLivingEntity.java | 28 +- .../mixin/potion_glint/MixinPotionItem.java | 18 +- .../r1_7_item_tilt/MixinHeldItemRenderer.java | 87 ----- .../MixinItemInHandRenderer.java | 87 +++++ ...er.java => MixinClientPacketListener.java} | 18 +- ...yerListEntry.java => MixinPlayerInfo.java} | 8 +- ...istHud.java => MixinPlayerTabOverlay.java} | 40 +-- ...eMenuScreen.java => MixinPauseScreen.java} | 106 +++---- .../MixinScreen.java | 24 +- ...er.java => MixinClientPacketListener.java} | 16 +- .../MixinTextRenderer_Drawer.java | 8 +- ...java => MixinVillagerProfessionLayer.java} | 20 +- .../visuals/settings/VisualSettings.java | 64 ++-- .../viafabricplus-visuals.accesswidener | 12 +- .../viafabricplus-visuals.mixins.json | 28 +- 407 files changed, 6334 insertions(+), 6332 deletions(-) rename src/main/java/com/viaversion/viafabricplus/injection/access/base/{IClientConnection.java => IConnection.java} (97%) rename src/main/java/com/viaversion/viafabricplus/injection/access/base/{ITextFieldWidget.java => IEditBox.java} (96%) rename src/main/java/com/viaversion/viafabricplus/injection/access/base/{IMultiValueDebugSampleLogImpl.java => ILocalSampleLogger.java} (96%) rename src/main/java/com/viaversion/viafabricplus/injection/access/base/{IServerInfo.java => IServerData.java} (97%) rename src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/{IHorizontalConnectingBlock.java => ICrossCollisionBlock.java} (91%) rename src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/{IAbstractBoatEntity.java => IAbstractBoat.java} (85%) rename src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/{IMouseKeyboard.java => IMouseKeyboardHandlers.java} (96%) rename src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/{IScreenHandler.java => IAbstractContainerMenu.java} (96%) rename src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/{IClientPlayerInteractionManager.java => IMultiPlayerGameMode.java} (96%) rename src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/{ILegacyKeySignatureStorage.java => IProfilePublicKey_Data.java} (96%) rename src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/{IGameTestDebugRenderer.java => IGameTestBlockHighlightRenderer.java} (92%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/{MixinMultiValueDebugSampleLogImpl.java => MixinLocalSampleLogger.java} (83%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/{MixinClientLoginNetworkHandler.java => MixinClientHandshakePacketListenerImpl.java} (79%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/{MixinClientConnection.java => MixinConnection.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/{MixinClientConnection_1.java => MixinConnection_1.java} (85%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/{MixinMinecraftClient.java => MixinMinecraft.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/{MixinGameOptions.java => MixinOptions.java} (91%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/{MixinMultiplayerServerListPinger.java => MixinServerStatusPinger.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/{MixinClientConnection.java => MixinConnection.java} (94%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/{MixinDebugHudEntries.java => MixinDebugScreenEntries.java} (60%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/{MixinServerInfo.java => MixinServerData.java} (79%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/{MixinMultiplayerServerListPinger_1.java => MixinServerStatusPinger_1.java} (58%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/{MixinMultiplayerServerListPinger.java => MixinServerStatusPinger.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/{MixinMinecraftClient.java => MixinMinecraft.java} (87%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/{MixinClientCommonNetworkHandler.java => MixinClientCommonPacketListenerImpl.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/{MixinDirectConnectScreen.java => MixinDirectJoinServerScreen.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/{MixinMultiplayerScreen.java => MixinJoinMultiplayerScreen.java} (63%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/{MixinAddServerScreen.java => MixinManageServerScreen.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/{MixinTextFieldWidget.java => MixinEditBox.java} (73%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/{MixinStaticSound.java => MixinSoundBuffer.java} (96%) create mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinFont.java delete mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinTextRenderer.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/{MixinTrapdoorBlock.java => MixinTrapDoorBlock.java} (57%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/{MixinPlayerEntity.java => MixinPlayer.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/{MixinClientCommandSource.java => MixinClientSuggestionProvider.java} (82%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/{MixinPaneBlock.java => MixinIronBarsBlock.java} (62%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/{MixinAbstractSignBlock.java => MixinSignBlock.java} (63%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/{MixinAbstractBlock.java => MixinBlockBehaviour.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/{MixinPlayerEntity.java => MixinPlayer.java} (62%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinAbstractRailBlock.java => MixinBaseRailBlock.java} (75%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinHorizontalConnectingBlock.java => MixinCrossCollisionBlock.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinFarmlandBlock.java => MixinFarmBlock.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinFlowerbedBlock.java => MixinFlowerBedBlock.java} (71%) create mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinIronBarsBlock.java delete mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPaneBlock.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinPistonBlock.java => MixinPistonBaseBlock.java} (60%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinSnowBlock.java => MixinSnowLayerBlock.java} (60%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/{MixinLilyPadBlock.java => MixinWaterlilyBlock.java} (70%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/{MixinWeatherRendering.java => MixinWeatherEffectRenderer.java} (81%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/{MixinItemFrameEntity.java => MixinItemFrame.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/{MixinEntityIndex.java => MixinEntityLookup.java} (86%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinAbstractBoatEntity.java => MixinAbstractBoat.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinAbstractChestBoatEntity.java => MixinAbstractChestBoat.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinAbstractCowEntity.java => MixinAbstractCow.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinAbstractHorseEntity.java => MixinAbstractHorse.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinAnimalEntity.java => MixinAnimal.java} (64%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinArmadilloEntity.java => MixinArmadillo.java} (78%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinAxolotlEntity.java => MixinAxolotl.java} (70%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinBeeEntity.java => MixinBee.java} (68%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinCatEntity.java => MixinCat.java} (60%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinCreeperEntity.java => MixinCreeper.java} (76%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinMobEntity.java => MixinMob.java} (61%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinMooshroomEntity.java => MixinMushroomCow.java} (52%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinSquidEntity.java => MixinSquid.java} (93%) create mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolf.java delete mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolfEntity.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/{MixinZombieVillagerEntity.java => MixinZombieVillager.java} (74%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/{MixinWolfEntity.java => MixinWolf.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/{MixinPlayerEntity.java => MixinPlayer.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/{MixinOtherClientPlayerEntity.java => MixinRemotePlayer.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/{MixinAbstractBoatEntity.java => MixinAbstractBoat.java} (54%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/{MixinEntityRenderManager.java => MixinEntityRenderDispatcher.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/{MixinEntityModels.java => MixinLayerDefinitions.java} (73%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/{MixinAbstractBoatEntity.java => MixinAbstractBoat.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/{MixinCamelEntity.java => MixinCamel.java} (64%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/{MixinKeyboard.java => MixinKeyboardHandler.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/{MixinMinecraftClient.java => MixinMinecraft.java} (74%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/{MixinMouse.java => MixinMouseHandler.java} (78%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/{MixinFontStorage.java => MixinFontSet.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/{MixinPlayerEntity.java => MixinPlayer.java} (85%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/{MixinScreenHandler.java => MixinAbstractContainerMenu.java} (76%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/{MixinAbstractFurnaceScreenHandler.java => MixinAbstractFurnaceMenu.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/{MixinCraftingScreenHandler.java => MixinCraftingMenu.java} (63%) create mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantMenu.java delete mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantScreenHandler.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/{MixinClientPlayerInteractionManager.java => MixinMultiPlayerGameMode.java} (60%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/{MixinItemCooldownManager.java => MixinItemCooldowns.java} (86%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/{MixinMinecraftClient.java => MixinMinecraft.java} (73%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/{MixinPlayerEntity.java => MixinPlayer.java} (88%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/{MixinClientPlayerInteractionManager.java => MixinMultiPlayerGameMode.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/{MixinBrewingStandScreenHandler_FuelSlot.java => MixinBrewingStandMenu_FuelSlot.java} (79%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/{MixinPlayerScreenHandler.java => MixinInventoryMenu.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/{MixinItemPlacementContext.java => MixinBlockPlaceContext.java} (71%) delete mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinClientPlayerInteractionManager.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/{MixinMinecraftClient.java => MixinMinecraft.java} (79%) create mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMultiPlayerGameMode.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/{MixinItemGroup_EntriesImpl.java => MixinCreativeModeTab_ItemDisplayBuilder.java} (64%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/{MixinItemGroups.java => MixinCreativeModeTabs.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/{MixinConsumableComponent.java => MixinConsumable.java} (62%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/{MixinEnderPearlItem.java => MixinEnderpearlItem.java} (73%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/{MixinEquippableComponent.java => MixinEquippable.java} (69%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/{MixinDrawContext.java => MixinGuiGraphics.java} (74%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/{MixinAbstractCommandBlockScreen.java => MixinAbstractCommandBlockEditScreen.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/{MixinChatInputSuggestor.java => MixinCommandSuggestions.java} (64%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/{MixinStatusEffectInstance.java => MixinMobEffectInstance.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/{MixinChatMessageC2SPacket.java => MixinServerboundChatPacket.java} (90%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/{MixinStringHelper.java => MixinStringUtil.java} (86%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/{MixinMouse.java => MixinMouseHandler.java} (81%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/{MixinMouseOptionsScreen.java => MixinMouseSettingsScreen.java} (64%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/{MixinAbstractBoatEntity.java => MixinAbstractBoat.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (81%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/{MixinVoxelShapes.java => MixinShapes.java} (82%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/{MixinPlayerLikeEntity.java => MixinAvatar.java} (68%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/{MixinPlayerEntityRenderer.java => MixinAvatarRenderer.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (81%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/{MixinPlayerEntity.java => MixinPlayer.java} (68%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (75%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/{MixinPlayerEntity.java => MixinPlayer.java} (68%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (70%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/{MixinPlayerEntity.java => MixinPlayer.java} (62%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/{MixinPlayerEntity.java => MixinPlayer.java} (80%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (57%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/{MixinEntityPosition.java => MixinPositionMoveRotation.java} (82%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (61%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (53%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/{MixinPlayerEntity.java => MixinPlayer.java} (73%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/{MixinAbstractHorseEntity.java => MixinAbstractHorse.java} (78%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/{MixinFlowableFluid.java => MixinFlowingFluid.java} (69%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/{MixinClientPlayerEntity.java => MixinLocalPlayer.java} (63%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/{MixinSkeletonHorseEntity.java => MixinSkeletonHorse.java} (74%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/{MixinClientConfigurationNetworkHandler.java => MixinClientConfigurationPacketListenerImpl.java} (64%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/{MixinClientPlayNetworkHandler.java => MixinClientPacketListener.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/{MixinNetworkStateTransitionHandler.java => MixinProtocolSwapHandler.java} (82%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/{MixinNetworkStateTransitions.java => MixinUnconfiguredPipelineHandler.java} (91%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/{MixinPlayerEntity.java => MixinPlayer.java} (89%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/{MixinProfileKeysImpl.java => MixinAccountProfileKeyPairManager.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/{MixinPlayerPublicKey_PublicKeyData.java => MixinProfilePublicKey_Data.java} (86%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/level_loading/{MixinClientPlayNetworkHandler.java => MixinClientPacketListener.java} (59%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/{MixinClientLoginNetworkHandler.java => MixinClientHandshakePacketListenerImpl.java} (68%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/{MixinMinecraftClient.java => MixinMinecraft.java} (85%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/{MixinClientCommonNetworkHandler.java => MixinClientCommonPacketListenerImpl.java} (50%) create mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPacketListener.java delete mode 100644 src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPlayNetworkHandler.java rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/{MixinGameTestDebugRenderer.java => MixinGameTestBlockHighlightRenderer.java} (73%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/{MixinUpdatePlayerAbilitiesC2SPacket.java => MixinServerboundPlayerAbilitiesPacket.java} (70%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/{MixinRegistryEntryListCodec.java => MixinHolderSetCodec.java} (76%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/{MixinMultiplayerServerListPinger.java => MixinServerStatusPinger.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/{MixinClientPlayNetworkHandler.java => MixinClientPacketListener.java} (51%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/{MixinKeyboard.java => MixinKeyboardHandler.java} (65%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/{MixinServerResourcePackLoader_4.java => MixinDownloadedPackSource_4.java} (77%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/{MixinAllowedAddressResolver.java => MixinServerNameResolver.java} (75%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/{MixinRedirectResolver.java => MixinServerRedirectHandler.java} (89%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/{MixinPlayerScreenHandler.java => MixinCraftingMenu.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/{MixinCraftingScreenHandler.java => MixinInventoryMenu.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/{MixinCommandBlockScreen.java => MixinCommandBlockEditScreen.java} (72%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/{MixinJigsawBlockScreen.java => MixinJigsawBlockEditScreen.java} (61%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/{MixinStructureBlockScreen.java => MixinStructureBlockEditScreen.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/{MixinStructureBlockScreen_1.java => MixinStructureBlockEditScreen_1.java} (75%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/{MixinTeam.java => MixinPlayerTeam.java} (67%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/{MixinPlayerSkinProvider.java => MixinSkinManager.java} (66%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/{MixinMinecraftClient.java => MixinMinecraft.java} (58%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/{MixinClientWorld.java => MixinClientLevel.java} (71%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/{MixinClientWorld.java => MixinClientLevel.java} (83%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/{MixinMinecraftClient.java => MixinMinecraft.java} (86%) rename src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/{MixinGameOptions.java => MixinOptions.java} (88%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/{IPlayerListEntry.java => IPlayerInfo.java} (96%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/{IPlayerListHud.java => IPlayerTabOverlay.java} (96%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/{MixinCreativeInventoryScreen.java => MixinCreativeModeInventoryScreen.java} (84%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/{MixinBipedEntityModel.java => MixinHumanoidModel.java} (62%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/{MixinGameModeSwitcherScreen_GameModeSelection.java => MixinGameModeSwitcherScreen_GameModeIcon.java} (80%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/{MixinChatHud.java => MixinChatComponent.java} (75%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/{MixinInGameHud.java => MixinGui.java} (66%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/{MixinClientPlayerInteractionManager.java => MixinMultiPlayerGameMode.java} (85%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/{MixinPlayerEntity.java => MixinPlayer.java} (82%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/{MixinBipedEntityModel.java => MixinHumanoidModel.java} (79%) delete mode 100644 viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinHeldItemRenderer.java create mode 100644 viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinItemInHandRenderer.java rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/{MixinClientPlayNetworkHandler.java => MixinClientPacketListener.java} (71%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/{MixinPlayerListEntry.java => MixinPlayerInfo.java} (88%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/{MixinPlayerListHud.java => MixinPlayerTabOverlay.java} (72%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/{MixinGameMenuScreen.java => MixinPauseScreen.java} (58%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/secure_chat_warning/{MixinClientPlayNetworkHandler.java => MixinClientPacketListener.java} (70%) rename viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/villager_profession/{MixinVillagerClothingFeatureRenderer.java => MixinVillagerProfessionLayer.java} (59%) diff --git a/build.gradle.kts b/build.gradle.kts index 29df70bd8..6d1188fba 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { allprojects { setupProject() - setupFabric(yarnMapped()) + setupFabric() setupViaPublishing() repositories { diff --git a/docs/MAINTAINING.md b/docs/MAINTAINING.md index 7e738738f..bd232b23f 100644 --- a/docs/MAINTAINING.md +++ b/docs/MAINTAINING.md @@ -10,7 +10,6 @@ If you're unsure about anything, feel free to ask in the [ViaVersion Discord](ht Update all upstream versions in `gradle.properties`. The main ones are: - `minecraft_version` -- `yarn_mappings_version` - `fabric_loader_version` - `fabric_api_version` - `supported_minecraft_versions` (if needed) @@ -51,9 +50,9 @@ Set `updating_minecraft = false`. Check if all mixins in the `injection` package still apply correctly. Critical ones include: -- `MixinClientWorld#tickEntity` -- `MixinClientWorld#tickPassenger` -- `MixinPlayer#getBlockBreakingSpeed` +- `MixinClientLevel#tickEntity` +- `MixinClientLevel#tickPassenger` +- `MixinPlayer#changeSpeedCalculation` --- diff --git a/gradle.properties b/gradle.properties index 6b5ec0efc..51e9de7b0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,6 @@ publishing_dev_name=EnZaXD publishing_dev_mail=florian.michael07@gmail.com minecraft_version=1.21.10 -yarn_mappings_version=1.21.10+build.3 fabric_loader_version=0.18.1 fabric_api_version=0.138.3+1.21.10 diff --git a/settings.gradle.kts b/settings.gradle.kts index 5bcce5561..378eb8c00 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,7 +7,7 @@ pluginManagement { plugins { id("fabric-loom") version "1.13-SNAPSHOT" - id("de.florianmichael.baseproject.BaseProject") version "1.2.6" + id("de.florianmichael.baseproject.BaseProject") version "1.2.7" } } diff --git a/src/main/java/com/viaversion/viafabricplus/ViaFabricPlusImpl.java b/src/main/java/com/viaversion/viafabricplus/ViaFabricPlusImpl.java index 407a06579..02b21560e 100644 --- a/src/main/java/com/viaversion/viafabricplus/ViaFabricPlusImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/ViaFabricPlusImpl.java @@ -32,8 +32,8 @@ import com.viaversion.viafabricplus.features.item.filter_creative_tabs.VersionedRegistries; import com.viaversion.viafabricplus.features.item.negative_item_count.NegativeItemUtil; import com.viaversion.viafabricplus.features.limitation.max_chat_length.MaxChatLength; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IConnection; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.translator.ItemTranslator; import com.viaversion.viafabricplus.save.SaveManager; @@ -55,15 +55,15 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.entrypoint.EntrypointContainer; import net.fabricmc.loader.api.metadata.ModMetadata; -import net.minecraft.block.entity.BannerPattern; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.item.ItemStack; -import net.minecraft.network.ClientConnection; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.level.block.entity.BannerPattern; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.Connection; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.Holder; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; @@ -162,8 +162,8 @@ public void setTargetVersion(ProtocolVersion newVersion) { } @Override - public @Nullable ProtocolVersion getTargetVersion(ClientConnection connection) { - return ((IClientConnection) connection).viaFabricPlus$getTargetVersion(); + public @Nullable ProtocolVersion getTargetVersion(Connection connection) { + return ((IConnection) connection).viaFabricPlus$getTargetVersion(); } @Override @@ -177,13 +177,13 @@ public void setTargetVersion(ProtocolVersion newVersion, boolean revertOnDisconn } @Override - public @Nullable UserConnection getUserConnection(ClientConnection connection) { - return ((IClientConnection) connection).viaFabricPlus$getUserConnection(); + public @Nullable UserConnection getUserConnection(Connection connection) { + return ((IConnection) connection).viaFabricPlus$getUserConnection(); } @Override - public @Nullable ProtocolVersion getServerVersion(ServerInfo serverInfo) { - return ((IServerInfo) serverInfo).viaFabricPlus$forcedVersion(); + public @Nullable ProtocolVersion getServerVersion(ServerData serverInfo) { + return ((IServerData) serverInfo).viaFabricPlus$forcedVersion(); } @Override @@ -242,27 +242,27 @@ public void openSettingsScreen(Screen parent) { } @Override - public boolean itemExists(net.minecraft.item.Item item, ProtocolVersion version) { + public boolean itemExists(net.minecraft.world.item.Item item, ProtocolVersion version) { return VersionedRegistries.containsItem(item, version); } @Override - public boolean enchantmentExists(RegistryKey enchantment, ProtocolVersion version) { + public boolean enchantmentExists(ResourceKey enchantment, ProtocolVersion version) { return VersionedRegistries.containsEnchantment(enchantment, version); } @Override - public boolean effectExists(RegistryEntry effect, ProtocolVersion version) { + public boolean effectExists(Holder effect, ProtocolVersion version) { return VersionedRegistries.containsEffect(effect, version); } @Override - public boolean bannerPatternExists(RegistryKey pattern, ProtocolVersion version) { + public boolean bannerPatternExists(ResourceKey pattern, ProtocolVersion version) { return VersionedRegistries.containsBannerPattern(pattern, version); } @Override - public boolean itemExistsInConnection(net.minecraft.item.Item item) { + public boolean itemExistsInConnection(net.minecraft.world.item.Item item) { return VersionedRegistries.keepItem(item); } diff --git a/src/main/java/com/viaversion/viafabricplus/base/VFPDebugHudEntry.java b/src/main/java/com/viaversion/viafabricplus/base/VFPDebugHudEntry.java index 6e619d26b..3f4350a98 100644 --- a/src/main/java/com/viaversion/viafabricplus/base/VFPDebugHudEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/base/VFPDebugHudEntry.java @@ -31,12 +31,12 @@ import com.viaversion.viaversion.api.connection.UserConnection; import java.util.ArrayList; import java.util.List; -import net.minecraft.client.gui.hud.debug.DebugHudEntry; -import net.minecraft.client.gui.hud.debug.DebugHudLines; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; -import net.minecraft.world.World; -import net.minecraft.world.chunk.WorldChunk; +import net.minecraft.client.gui.components.debug.DebugScreenEntry; +import net.minecraft.client.gui.components.debug.DebugScreenDisplayer; +import net.minecraft.ChatFormatting; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.chunk.LevelChunk; import net.raphimc.viabedrock.protocol.storage.ChunkTracker; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.storage.ExtensionProtocolMetadataStorage; @@ -46,14 +46,14 @@ import org.cloudburstmc.netty.handler.codec.raknet.common.RakSessionCodec; import org.jetbrains.annotations.Nullable; -public final class VFPDebugHudEntry implements DebugHudEntry { +public final class VFPDebugHudEntry implements DebugScreenEntry { - public static final Identifier ID = Identifier.of("viafabricplus", "viafabricplus"); + public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("viafabricplus", "viafabricplus"); @Override - public void render(final DebugHudLines lines, @Nullable final World world, @Nullable final WorldChunk clientChunk, @Nullable final WorldChunk chunk) { + public void display(final DebugScreenDisplayer lines, @Nullable final Level world, @Nullable final LevelChunk clientChunk, @Nullable final LevelChunk chunk) { final List information = new ArrayList<>(); - information.add(ChatUtil.PREFIX + Formatting.RESET + " " + ViaFabricPlusImpl.INSTANCE.getVersion()); + information.add(ChatUtil.PREFIX + ChatFormatting.RESET + " " + ViaFabricPlusImpl.INSTANCE.getVersion()); final UserConnection connection = ProtocolTranslator.getPlayNetworkUserConnection(); if (connection == null) { @@ -100,11 +100,11 @@ public void render(final DebugHudLines lines, @Nullable final World world, @Null } } - lines.addLinesToSection(ID, information); + lines.addToGroup(ID, information); } @Override - public boolean canShow(final boolean reducedDebugInfo) { + public boolean isAllowed(final boolean reducedDebugInfo) { return true; } diff --git a/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/DataCustomPayload.java b/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/DataCustomPayload.java index 15c7cca04..dfc280a9a 100644 --- a/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/DataCustomPayload.java +++ b/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/DataCustomPayload.java @@ -23,22 +23,22 @@ import io.netty.buffer.Unpooled; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.packet.CustomPayload; -import net.minecraft.util.Identifier; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; -public record DataCustomPayload(PacketByteBuf buf) implements CustomPayload { +public record DataCustomPayload(FriendlyByteBuf buf) implements CustomPacketPayload { - public static final CustomPayload.Id ID = new CustomPayload.Id<>(Identifier.of(SyncTasks.PACKET_SYNC_IDENTIFIER)); + public static final CustomPacketPayload.Type ID = new CustomPacketPayload.Type<>(ResourceLocation.parse(SyncTasks.PACKET_SYNC_IDENTIFIER)); public static void init() { - PayloadTypeRegistry.playS2C().register(DataCustomPayload.ID, CustomPayload.codecOf((value, buf) -> { + PayloadTypeRegistry.playS2C().register(DataCustomPayload.ID, CustomPacketPayload.codec((value, buf) -> { throw new UnsupportedOperationException("DataCustomPayload is a read-only packet"); - }, buf -> new DataCustomPayload(new PacketByteBuf(Unpooled.copiedBuffer(buf.readSlice(buf.readableBytes())))))); + }, buf -> new DataCustomPayload(new FriendlyByteBuf(Unpooled.copiedBuffer(buf.readSlice(buf.readableBytes())))))); } @Override - public Id getId() { + public Type type() { return ID; } diff --git a/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/SyncTasks.java b/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/SyncTasks.java index 9d323b6a6..c04f77f4d 100644 --- a/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/SyncTasks.java +++ b/src/main/java/com/viaversion/viafabricplus/base/sync_tasks/SyncTasks.java @@ -25,16 +25,16 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.RegistryByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; public final class SyncTasks { /** * Contains all tasks that are waiting for a packet to be received, this system can be used to sync ViaVersion tasks with the correct thread */ - private static final Map> PENDING_EXECUTION_TASKS = new ConcurrentHashMap<>(); + private static final Map> PENDING_EXECUTION_TASKS = new ConcurrentHashMap<>(); /** * This identifier is an internal identifier used to identify packets that are sent by ViaFabricPlus @@ -51,7 +51,7 @@ public static void init() { * @param task The task to execute * @return The uuid of the task */ - public static String executeSyncTask(final Consumer task) { + public static String executeSyncTask(final Consumer task) { final String uuid = UUID.randomUUID().toString(); PENDING_EXECUTION_TASKS.put(uuid, task); return uuid; @@ -62,13 +62,13 @@ public static String executeSyncTask(final Consumer task) { * * @param buf The packet buffer */ - public static void handleSyncTask(final PacketByteBuf buf) { - final String uuid = buf.readString(); + public static void handleSyncTask(final FriendlyByteBuf buf) { + final String uuid = buf.readUtf(); if (PENDING_EXECUTION_TASKS.containsKey(uuid)) { - MinecraftClient.getInstance().execute(() -> { // Execute the task on the main thread - final Consumer task = PENDING_EXECUTION_TASKS.remove(uuid); - task.accept(new RegistryByteBuf(buf, MinecraftClient.getInstance().getNetworkHandler().getRegistryManager())); + Minecraft.getInstance().execute(() -> { // Execute the task on the main thread + final Consumer task = PENDING_EXECUTION_TASKS.remove(uuid); + task.accept(new RegistryFriendlyByteBuf(buf, Minecraft.getInstance().getConnection().registryAccess())); }); } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java b/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java index 8a07660c3..7d9bdf752 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java +++ b/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java @@ -36,7 +36,7 @@ import com.viaversion.viafabricplus.features.networking.resource_pack_header.ResourcePackHeaderDiff; import com.viaversion.viafabricplus.features.recipe.Recipes1_11_2; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; public final class FeaturesLoading { @@ -71,7 +71,7 @@ public static void init() { }); // Reloads some clientside stuff when the protocol version changes - Events.CHANGE_PROTOCOL_VERSION.register((oldVersion, newVersion) -> MinecraftClient.getInstance().execute(() -> { + Events.CHANGE_PROTOCOL_VERSION.register((oldVersion, newVersion) -> Minecraft.getInstance().execute(() -> { // Reloads all bounding boxes of the blocks that we changed CollisionShapes.reloadBlockShapes(); @@ -85,7 +85,7 @@ public static void init() { // Reload sound system when switching between 3D Shareware and normal versions if (oldVersion.equals(AprilFoolsProtocolVersion.s3d_shareware) || newVersion.equals(AprilFoolsProtocolVersion.s3d_shareware)) { - MinecraftClient.getInstance().getSoundManager().reloadSounds(); + Minecraft.getInstance().getSoundManager().reload(); } })); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/block/interaction/Block1_14.java b/src/main/java/com/viaversion/viafabricplus/features/block/interaction/Block1_14.java index 340b8fa47..4348b0f65 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/block/interaction/Block1_14.java +++ b/src/main/java/com/viaversion/viafabricplus/features/block/interaction/Block1_14.java @@ -21,19 +21,19 @@ package com.viaversion.viafabricplus.features.block.interaction; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.block.LeavesBlock; -import net.minecraft.block.ShulkerBoxBlock; -import net.minecraft.block.StainedGlassBlock; -import net.minecraft.block.TrapdoorBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.ShulkerBoxBlock; +import net.minecraft.world.level.block.StainedGlassBlock; +import net.minecraft.world.level.block.TrapDoorBlock; public final class Block1_14 { public static boolean isExceptBlockForAttachWithPiston(final Block block) { return block instanceof ShulkerBoxBlock || block instanceof LeavesBlock - || block instanceof TrapdoorBlock + || block instanceof TrapDoorBlock || block instanceof StainedGlassBlock || block == Blocks.BEACON || block == Blocks.CAULDRON diff --git a/src/main/java/com/viaversion/viafabricplus/features/block/shape/CollisionShapes.java b/src/main/java/com/viaversion/viafabricplus/features/block/shape/CollisionShapes.java index 3617c3c8c..20815b0f3 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/block/shape/CollisionShapes.java +++ b/src/main/java/com/viaversion/viafabricplus/features/block/shape/CollisionShapes.java @@ -21,48 +21,48 @@ package com.viaversion.viafabricplus.features.block.shape; -import net.minecraft.block.AnvilBlock; -import net.minecraft.block.BedBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.BrewingStandBlock; -import net.minecraft.block.CarpetBlock; -import net.minecraft.block.CauldronBlock; -import net.minecraft.block.ChestBlock; -import net.minecraft.block.CropBlock; -import net.minecraft.block.EndPortalBlock; -import net.minecraft.block.EndPortalFrameBlock; -import net.minecraft.block.EnderChestBlock; -import net.minecraft.block.FarmlandBlock; -import net.minecraft.block.FenceBlock; -import net.minecraft.block.FenceGateBlock; -import net.minecraft.block.FlowerbedBlock; -import net.minecraft.block.HopperBlock; -import net.minecraft.block.LadderBlock; -import net.minecraft.block.LeavesBlock; -import net.minecraft.block.LilyPadBlock; -import net.minecraft.block.PaneBlock; -import net.minecraft.block.PistonBlock; -import net.minecraft.block.PistonHeadBlock; -import net.minecraft.block.SnowBlock; -import net.minecraft.block.WallBlock; -import net.minecraft.registry.Registries; +import net.minecraft.world.level.block.AnvilBlock; +import net.minecraft.world.level.block.BedBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.BrewingStandBlock; +import net.minecraft.world.level.block.CarpetBlock; +import net.minecraft.world.level.block.CauldronBlock; +import net.minecraft.world.level.block.ChestBlock; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.EndPortalBlock; +import net.minecraft.world.level.block.EndPortalFrameBlock; +import net.minecraft.world.level.block.EnderChestBlock; +import net.minecraft.world.level.block.FarmBlock; +import net.minecraft.world.level.block.FenceBlock; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.FlowerBedBlock; +import net.minecraft.world.level.block.HopperBlock; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.WaterlilyBlock; +import net.minecraft.world.level.block.IronBarsBlock; +import net.minecraft.world.level.block.piston.PistonBaseBlock; +import net.minecraft.world.level.block.piston.PistonHeadBlock; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.world.level.block.WallBlock; +import net.minecraft.core.registries.BuiltInRegistries; public final class CollisionShapes { public static void reloadBlockShapes() { - for (Block block : Registries.BLOCK) { + for (Block block : BuiltInRegistries.BLOCK) { if (block instanceof AnvilBlock || block instanceof BedBlock || block instanceof BrewingStandBlock || block instanceof CarpetBlock || block instanceof CauldronBlock || block instanceof ChestBlock || block instanceof EnderChestBlock || block instanceof EndPortalBlock || block instanceof EndPortalFrameBlock - || block instanceof FarmlandBlock || block instanceof FenceBlock || block instanceof FenceGateBlock + || block instanceof FarmBlock || block instanceof FenceBlock || block instanceof FenceGateBlock || block instanceof HopperBlock || block instanceof LadderBlock || block instanceof LeavesBlock - || block instanceof LilyPadBlock || block instanceof PaneBlock || block instanceof PistonBlock - || block instanceof PistonHeadBlock || block instanceof SnowBlock || block instanceof WallBlock - || block instanceof CropBlock || block instanceof FlowerbedBlock + || block instanceof WaterlilyBlock || block instanceof IronBarsBlock || block instanceof PistonBaseBlock + || block instanceof PistonHeadBlock || block instanceof SnowLayerBlock || block instanceof WallBlock + || block instanceof CropBlock || block instanceof FlowerBedBlock ) { - for (BlockState state : block.getStateManager().getStates()) { - state.initShapeCache(); + for (BlockState state : block.getStateDefinition().getPossibleStates()) { + state.initCache(); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/classic/cpe_extension/CPEAdditions.java b/src/main/java/com/viaversion/viafabricplus/features/classic/cpe_extension/CPEAdditions.java index 9feef13dc..04ee53912 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/classic/cpe_extension/CPEAdditions.java +++ b/src/main/java/com/viaversion/viafabricplus/features/classic/cpe_extension/CPEAdditions.java @@ -30,8 +30,8 @@ import java.util.Map; import java.util.function.BiConsumer; import net.lenni0451.reflect.Enums; -import net.minecraft.item.Item; -import net.minecraft.item.Items; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.data.ClassicProtocolExtension; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.packet.ClientboundPacketsc0_30cpe; diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/EntityDimensionDiff.java b/src/main/java/com/viaversion/viafabricplus/features/entity/EntityDimensionDiff.java index db355760c..d238caf58 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/EntityDimensionDiff.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/EntityDimensionDiff.java @@ -27,11 +27,11 @@ import com.viaversion.viaversion.libs.gson.JsonObject; import java.util.HashMap; import java.util.Map; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityType; -import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; /** * Data dump for entity dimension changes between versions. @@ -46,7 +46,7 @@ public final class EntityDimensionDiff { public static void init() { final JsonObject dimensionDiff = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("entity-dimensions.json"); for (final String entity : dimensionDiff.keySet()) { - final EntityType entityType = Registries.ENTITY_TYPE.getOptionalValue(Identifier.of(entity)).orElse(null); + final EntityType entityType = BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.parse(entity)).orElse(null); if (entityType == null) { throw new IllegalStateException("Unknown entity: " + entity); } @@ -70,7 +70,7 @@ public static void init() { ENTITY_DIMENSIONS.put(entityType, dimensionMap); } - Events.CHANGE_PROTOCOL_VERSION.register((oldVersion, newVersion) -> MinecraftClient.getInstance().execute(() -> ENTITY_DIMENSIONS.forEach((entityType, dimensionMap) -> { + Events.CHANGE_PROTOCOL_VERSION.register((oldVersion, newVersion) -> Minecraft.getInstance().execute(() -> ENTITY_DIMENSIONS.forEach((entityType, dimensionMap) -> { for (Map.Entry entry : dimensionMap.entrySet()) { final ProtocolVersion version = entry.getKey(); final EntityDimensions dimensions = entry.getValue(); diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/attribute/EnchantmentAttributesEmulation1_20_6.java b/src/main/java/com/viaversion/viafabricplus/features/entity/attribute/EnchantmentAttributesEmulation1_20_6.java index 940153629..c346deaba 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/attribute/EnchantmentAttributesEmulation1_20_6.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/attribute/EnchantmentAttributesEmulation1_20_6.java @@ -25,17 +25,17 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Optional; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.registry.tag.BlockTags; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.player.Player; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.Holder; +import net.minecraft.tags.BlockTags; public final class EnchantmentAttributesEmulation1_20_6 { @@ -45,27 +45,27 @@ public static void init() { return; } // Update generic attributes for all entities - for (Entity entity : world.getEntities()) { - if (entity.isLogicalSideForUpdatingMovement() && entity instanceof LivingEntity livingEntity) { - livingEntity.getAttributeInstance(EntityAttributes.WATER_MOVEMENT_EFFICIENCY).setBaseValue(getEquipmentLevel(Enchantments.DEPTH_STRIDER, livingEntity) / 3F); + for (Entity entity : world.entitiesForRendering()) { + if (entity.isLocalInstanceAuthoritative() && entity instanceof LivingEntity livingEntity) { + livingEntity.getAttribute(Attributes.WATER_MOVEMENT_EFFICIENCY).setBaseValue(getEquipmentLevel(Enchantments.DEPTH_STRIDER, livingEntity) / 3F); setGenericMovementEfficiencyAttribute(livingEntity); } } // Update player specific attributes for all players - for (PlayerEntity player : world.getPlayers()) { - if (!player.isLogicalSideForUpdatingMovement()) { + for (Player player : world.players()) { + if (!player.isLocalInstanceAuthoritative()) { continue; } final int efficiencyLevel = getEquipmentLevel(Enchantments.EFFICIENCY, player); if (efficiencyLevel > 0) { - player.getAttributeInstance(EntityAttributes.MINING_EFFICIENCY).setBaseValue(efficiencyLevel * efficiencyLevel + 1); + player.getAttribute(Attributes.MINING_EFFICIENCY).setBaseValue(efficiencyLevel * efficiencyLevel + 1); } else { - player.getAttributeInstance(EntityAttributes.MINING_EFFICIENCY).setBaseValue(0); + player.getAttribute(Attributes.MINING_EFFICIENCY).setBaseValue(0); } - player.getAttributeInstance(EntityAttributes.SNEAKING_SPEED).setBaseValue(0.3F + getEquipmentLevel(Enchantments.SWIFT_SNEAK, player) * 0.15F); - player.getAttributeInstance(EntityAttributes.SUBMERGED_MINING_SPEED).setBaseValue(getEquipmentLevel(Enchantments.AQUA_AFFINITY, player) <= 0 ? 0.2F : 1F); + player.getAttribute(Attributes.SNEAKING_SPEED).setBaseValue(0.3F + getEquipmentLevel(Enchantments.SWIFT_SNEAK, player) * 0.15F); + player.getAttribute(Attributes.SUBMERGED_MINING_SPEED).setBaseValue(getEquipmentLevel(Enchantments.AQUA_AFFINITY, player) <= 0 ? 0.2F : 1F); } }); } @@ -75,17 +75,17 @@ public static void init() { * Called above just as a fallback if a mod accesses the raw attribute value directly. */ public static void setGenericMovementEfficiencyAttribute(final LivingEntity entity) { - final boolean isOnSoulSpeedBlock = entity.getEntityWorld().getBlockState(entity.getVelocityAffectingPos()).isIn(BlockTags.SOUL_SPEED_BLOCKS); + final boolean isOnSoulSpeedBlock = entity.level().getBlockState(entity.getBlockPosBelowThatAffectsMyMovement()).is(BlockTags.SOUL_SPEED_BLOCKS); if (isOnSoulSpeedBlock && getEquipmentLevel(Enchantments.SOUL_SPEED, entity) > 0) { - entity.getAttributeInstance(EntityAttributes.MOVEMENT_EFFICIENCY).setBaseValue(1); + entity.getAttribute(Attributes.MOVEMENT_EFFICIENCY).setBaseValue(1); } else { - entity.getAttributeInstance(EntityAttributes.MOVEMENT_EFFICIENCY).setBaseValue(0); + entity.getAttribute(Attributes.MOVEMENT_EFFICIENCY).setBaseValue(0); } } - private static int getEquipmentLevel(final RegistryKey enchantment, final LivingEntity entity) { - final Optional> enchantmentRef = entity.getEntityWorld().getRegistryManager().getOrThrow(RegistryKeys.ENCHANTMENT).getOptional(enchantment); - return enchantmentRef.map(e -> EnchantmentHelper.getEquipmentLevel(e, entity)).orElse(0); + private static int getEquipmentLevel(final ResourceKey enchantment, final LivingEntity entity) { + final Optional> enchantmentRef = entity.level().registryAccess().lookupOrThrow(Registries.ENCHANTMENT).get(enchantment); + return enchantmentRef.map(e -> EnchantmentHelper.getEnchantmentLevel(e, entity)).orElse(0); } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/metadata_handling/WolfHealthTracker1_14_4.java b/src/main/java/com/viaversion/viafabricplus/features/entity/metadata_handling/WolfHealthTracker1_14_4.java index f3f032130..402538aa5 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/metadata_handling/WolfHealthTracker1_14_4.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/metadata_handling/WolfHealthTracker1_14_4.java @@ -25,7 +25,7 @@ import com.viaversion.viaversion.api.connection.StorableObject; import it.unimi.dsi.fastutil.ints.Int2FloatMap; import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap; -import net.minecraft.entity.LivingEntity; +import net.minecraft.world.entity.LivingEntity; public final class WolfHealthTracker1_14_4 implements StorableObject { diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatModel1_8.java b/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatModel1_8.java index 9928e311c..779b4c3a0 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatModel1_8.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatModel1_8.java @@ -21,45 +21,45 @@ package com.viaversion.viafabricplus.features.entity.r1_8_boat; -import net.minecraft.client.model.ModelData; -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.model.ModelPartBuilder; -import net.minecraft.client.model.ModelPartData; -import net.minecraft.client.model.ModelTransform; -import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.render.entity.model.EntityModelLayer; -import net.minecraft.client.render.entity.state.BoatEntityRenderState; -import net.minecraft.util.Identifier; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.PartDefinition; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.renderer.entity.state.BoatRenderState; +import net.minecraft.resources.ResourceLocation; /** * Model for boats in 1.8 and lower. */ -public final class BoatModel1_8 extends EntityModel { +public final class BoatModel1_8 extends EntityModel { - public static final EntityModelLayer MODEL_LAYER = new EntityModelLayer(Identifier.of("viafabricplus", "boat1_8"), "main"); + public static final ModelLayerLocation MODEL_LAYER = new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath("viafabricplus", "boat1_8"), "main"); public BoatModel1_8(ModelPart root) { super(root); } - public static TexturedModelData getTexturedModelData() { - ModelData modelData = new ModelData(); - ModelPartData root = modelData.getRoot(); + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition root = modelData.getRoot(); final float width = 24; final float wallHeight = 6; final float baseWidth = 20; final float pivotY = 4; - root.addChild("bottom", ModelPartBuilder.create().uv(0, 8).cuboid(-width / 2, -baseWidth / 2 + 2, -3, width, baseWidth - 4, 4), ModelTransform.of(0, pivotY, 0, (float) Math.PI / 2, 0, 0)); - root.addChild("back", ModelPartBuilder.create().uv(0, 0).cuboid(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), ModelTransform.of(-width / 2 + 1, pivotY, 0, 0, (float) Math.PI * 1.5f, 0)); - root.addChild("front", ModelPartBuilder.create().uv(0, 0).cuboid(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), ModelTransform.of(width / 2 - 1, pivotY, 0, 0, (float) Math.PI / 2, 0)); - root.addChild("right", ModelPartBuilder.create().uv(0, 0).cuboid(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), ModelTransform.of(0, pivotY, -baseWidth / 2 + 1, 0, (float) Math.PI, 0)); - root.addChild("left", ModelPartBuilder.create().uv(0, 0).cuboid(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), ModelTransform.origin(0, pivotY, baseWidth / 2 - 1)); - return TexturedModelData.of(modelData, 64, 32); + root.addOrReplaceChild("bottom", CubeListBuilder.create().texOffs(0, 8).addBox(-width / 2, -baseWidth / 2 + 2, -3, width, baseWidth - 4, 4), PartPose.offsetAndRotation(0, pivotY, 0, (float) Math.PI / 2, 0, 0)); + root.addOrReplaceChild("back", CubeListBuilder.create().texOffs(0, 0).addBox(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), PartPose.offsetAndRotation(-width / 2 + 1, pivotY, 0, 0, (float) Math.PI * 1.5f, 0)); + root.addOrReplaceChild("front", CubeListBuilder.create().texOffs(0, 0).addBox(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), PartPose.offsetAndRotation(width / 2 - 1, pivotY, 0, 0, (float) Math.PI / 2, 0)); + root.addOrReplaceChild("right", CubeListBuilder.create().texOffs(0, 0).addBox(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), PartPose.offsetAndRotation(0, pivotY, -baseWidth / 2 + 1, 0, (float) Math.PI, 0)); + root.addOrReplaceChild("left", CubeListBuilder.create().texOffs(0, 0).addBox(-width / 2 + 2, -wallHeight - 1, -1, width - 4, wallHeight, 2), PartPose.offset(0, pivotY, baseWidth / 2 - 1)); + return LayerDefinition.create(modelData, 64, 32); } @Override - public void setAngles(BoatEntityRenderState state) { + public void setupAnim(BoatRenderState state) { } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatRenderer1_8.java b/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatRenderer1_8.java index a71478c1a..c796feb80 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatRenderer1_8.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/BoatRenderer1_8.java @@ -21,58 +21,58 @@ package com.viaversion.viafabricplus.features.entity.r1_8_boat; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.command.OrderedRenderCommandQueue; -import net.minecraft.client.render.entity.AbstractBoatEntityRenderer; -import net.minecraft.client.render.entity.EntityRendererFactory; -import net.minecraft.client.render.entity.model.EntityModel; -import net.minecraft.client.render.entity.state.BoatEntityRenderState; -import net.minecraft.client.render.state.CameraRenderState; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RotationAxis; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.entity.AbstractBoatRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.entity.state.BoatRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import com.mojang.math.Axis; /** * Renderer for boats in 1.8 and lower. */ -public final class BoatRenderer1_8 extends AbstractBoatEntityRenderer { +public final class BoatRenderer1_8 extends AbstractBoatRenderer { - private static final Identifier TEXTURE = Identifier.of("viafabricplus", "textures/boat1_8.png"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath("viafabricplus", "textures/boat1_8.png"); private final BoatModel1_8 model; - public BoatRenderer1_8(EntityRendererFactory.Context ctx) { + public BoatRenderer1_8(EntityRendererProvider.Context ctx) { super(ctx); shadowRadius = 0.5F; - model = new BoatModel1_8(ctx.getPart(BoatModel1_8.MODEL_LAYER)); + model = new BoatModel1_8(ctx.bakeLayer(BoatModel1_8.MODEL_LAYER)); } @Override - protected EntityModel getModel() { + protected EntityModel model() { return this.model; } @Override - protected RenderLayer getRenderLayer() { - return this.model.getLayer(TEXTURE); + protected RenderType renderType() { + return this.model.renderType(TEXTURE); } @Override - public void render(final BoatEntityRenderState state, final MatrixStack matrices, final OrderedRenderCommandQueue orderedRenderCommandQueue, final CameraRenderState cameraRenderState) { - matrices.push(); + public void submit(final BoatRenderState state, final PoseStack matrices, final SubmitNodeCollector orderedRenderCommandQueue, final CameraRenderState cameraRenderState) { + matrices.pushPose(); matrices.translate(0, 0.25, 0); - matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(180 - state.yaw)); + matrices.mulPose(Axis.YP.rotationDegrees(180 - state.yRot)); - if (state.damageWobbleTicks > 0) { - matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(MathHelper.sin(state.damageWobbleTicks) * state.damageWobbleTicks * state.damageWobbleStrength / 10 * state.damageWobbleSide)); + if (state.hurtTime > 0) { + matrices.mulPose(Axis.XP.rotationDegrees(Mth.sin(state.hurtTime) * state.hurtTime * state.damageTime / 10 * state.hurtDir)); } matrices.scale(-1, -1, 1); - model.setAngles(state); - orderedRenderCommandQueue.submitModel(model, state, matrices, this.getRenderLayer(), state.light, OverlayTexture.DEFAULT_UV, state.outlineColor, null); + model.setupAnim(state); + orderedRenderCommandQueue.submitModel(model, state, matrices, this.renderType(), state.lightCoords, OverlayTexture.NO_OVERLAY, state.outlineColor, null); - matrices.pop(); + matrices.popPose(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/PositionInterpolator1_8.java b/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/PositionInterpolator1_8.java index 7a034b48e..e6a74c345 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/PositionInterpolator1_8.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/r1_8_boat/PositionInterpolator1_8.java @@ -21,53 +21,53 @@ package com.viaversion.viafabricplus.features.entity.r1_8_boat; -import com.viaversion.viafabricplus.injection.access.entity.r1_8_boat.IAbstractBoatEntity; +import com.viaversion.viafabricplus.injection.access.entity.r1_8_boat.IAbstractBoat; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.PositionInterpolator; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.entity.InterpolationHandler; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.phys.Vec3; -public class PositionInterpolator1_8 extends PositionInterpolator { +public class PositionInterpolator1_8 extends InterpolationHandler { - private final AbstractBoatEntity boatEntity; + private final AbstractBoat boatEntity; - public PositionInterpolator1_8(final AbstractBoatEntity entity) { + public PositionInterpolator1_8(final AbstractBoat entity) { super(entity); this.boatEntity = entity; } @Override - public void refreshPositionAndAngles(final Vec3d pos, final float yaw, final float pitch) { - final IAbstractBoatEntity mixinBoatEntity = (IAbstractBoatEntity) this.boatEntity; - if (/*interpolate &&*/ boatEntity.hasPassengers() && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_7_6)) { - boatEntity.lastX = pos.x; - boatEntity.lastY = pos.y; - boatEntity.lastZ = pos.z; + public void interpolateTo(final Vec3 pos, final float yaw, final float pitch) { + final IAbstractBoat mixinBoatEntity = (IAbstractBoat) this.boatEntity; + if (/*interpolate &&*/ boatEntity.isVehicle() && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_7_6)) { + boatEntity.xo = pos.x; + boatEntity.yo = pos.y; + boatEntity.zo = pos.z; mixinBoatEntity.viaFabricPlus$setBoatInterpolationSteps(0); - boatEntity.setPosition(pos); - boatEntity.setRotation(yaw, pitch); - boatEntity.setVelocity(Vec3d.ZERO); - mixinBoatEntity.viaFabricPlus$setBoatVelocity(Vec3d.ZERO); + boatEntity.setPos(pos); + boatEntity.setRot(yaw, pitch); + boatEntity.setDeltaMovement(Vec3.ZERO); + mixinBoatEntity.viaFabricPlus$setBoatVelocity(Vec3.ZERO); } else { - if (!boatEntity.hasPassengers()) { + if (!boatEntity.isVehicle()) { mixinBoatEntity.viaFabricPlus$setBoatInterpolationSteps(8); } else { - if (boatEntity.squaredDistanceTo(pos.x, pos.y, pos.z) <= 1) { + if (boatEntity.distanceToSqr(pos.x, pos.y, pos.z) <= 1) { return; } mixinBoatEntity.viaFabricPlus$setBoatInterpolationSteps(3); } - this.data.pos = pos; - this.data.yaw = yaw; - this.data.pitch = pitch; - boatEntity.setVelocity(mixinBoatEntity.viaFabricPlus$getBoatVelocity()); + this.interpolationData.position = pos; + this.interpolationData.yRot = yaw; + this.interpolationData.xRot = pitch; + boatEntity.setDeltaMovement(mixinBoatEntity.viaFabricPlus$getBoatVelocity()); } } @Override - public void tick() { + public void interpolate() { } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/entity/riding_offset/EntityRidingOffsetsPre1_20_2.java b/src/main/java/com/viaversion/viafabricplus/features/entity/riding_offset/EntityRidingOffsetsPre1_20_2.java index c4156ac49..50563055f 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/entity/riding_offset/EntityRidingOffsetsPre1_20_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/entity/riding_offset/EntityRidingOffsetsPre1_20_2.java @@ -23,44 +23,44 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.boss.dragon.EnderDragonEntity; -import net.minecraft.entity.decoration.ArmorStandEntity; -import net.minecraft.entity.mob.AbstractPiglinEntity; -import net.minecraft.entity.mob.AbstractSkeletonEntity; -import net.minecraft.entity.mob.EndermiteEntity; -import net.minecraft.entity.mob.HoglinEntity; -import net.minecraft.entity.mob.PatrolEntity; -import net.minecraft.entity.mob.PhantomEntity; -import net.minecraft.entity.mob.PiglinEntity; -import net.minecraft.entity.mob.RavagerEntity; -import net.minecraft.entity.mob.ShulkerEntity; -import net.minecraft.entity.mob.SilverfishEntity; -import net.minecraft.entity.mob.SkeletonHorseEntity; -import net.minecraft.entity.mob.SpiderEntity; -import net.minecraft.entity.mob.VexEntity; -import net.minecraft.entity.mob.ZoglinEntity; -import net.minecraft.entity.mob.ZombieEntity; -import net.minecraft.entity.mob.ZombifiedPiglinEntity; -import net.minecraft.entity.passive.AbstractDonkeyEntity; -import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.entity.passive.AllayEntity; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.CamelEntity; -import net.minecraft.entity.passive.ChickenEntity; -import net.minecraft.entity.passive.LlamaEntity; -import net.minecraft.entity.passive.SnifferEntity; -import net.minecraft.entity.passive.StriderEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.entity.vehicle.AbstractChestBoatEntity; -import net.minecraft.entity.vehicle.AbstractMinecartEntity; -import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.boss.enderdragon.EnderDragon; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.entity.monster.piglin.AbstractPiglin; +import net.minecraft.world.entity.monster.AbstractSkeleton; +import net.minecraft.world.entity.monster.Endermite; +import net.minecraft.world.entity.monster.hoglin.Hoglin; +import net.minecraft.world.entity.monster.PatrollingMonster; +import net.minecraft.world.entity.monster.Phantom; +import net.minecraft.world.entity.monster.piglin.Piglin; +import net.minecraft.world.entity.monster.Ravager; +import net.minecraft.world.entity.monster.Shulker; +import net.minecraft.world.entity.monster.Silverfish; +import net.minecraft.world.entity.animal.horse.SkeletonHorse; +import net.minecraft.world.entity.monster.Spider; +import net.minecraft.world.entity.monster.Vex; +import net.minecraft.world.entity.monster.Zoglin; +import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.world.entity.monster.ZombifiedPiglin; +import net.minecraft.world.entity.animal.horse.AbstractChestedHorse; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.animal.allay.Allay; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.camel.Camel; +import net.minecraft.world.entity.animal.Chicken; +import net.minecraft.world.entity.animal.horse.Llama; +import net.minecraft.world.entity.animal.sniffer.Sniffer; +import net.minecraft.world.entity.monster.Strider; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.entity.vehicle.AbstractChestBoat; +import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; /** * Minecraft 1.20.2 changed the calculation of the mounted height offset for all entities, this class contains the old @@ -75,18 +75,18 @@ public final class EntityRidingOffsetsPre1_20_2 { * @param passenger The passenger of the entity. * @return The mounted height offset. */ - public static Vec3d getMountedHeightOffset(final Entity entity, final Entity passenger) { - double yOffset = entity.getHeight() * 0.75F; + public static Vec3 getMountedHeightOffset(final Entity entity, final Entity passenger) { + double yOffset = entity.getBbHeight() * 0.75F; - if (entity instanceof AbstractBoatEntity abstractBoatEntity) { - if (!abstractBoatEntity.hasPassenger(passenger)) return Vec3d.ZERO; + if (entity instanceof AbstractBoat abstractBoatEntity) { + if (!abstractBoatEntity.hasPassenger(passenger)) return Vec3.ZERO; if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { yOffset = -0.3F; - final double xOffset = MathHelper.cos(abstractBoatEntity.getYaw() * MathHelper.PI / 180F); - final double zOffset = MathHelper.sin(abstractBoatEntity.getYaw() * MathHelper.PI / 180F); + final double xOffset = Mth.cos(abstractBoatEntity.getYRot() * Mth.PI / 180F); + final double zOffset = Mth.sin(abstractBoatEntity.getYRot() * Mth.PI / 180F); - return new Vec3d(0.4F * xOffset, yOffset, 0.4F * zOffset); + return new Vec3(0.4F * xOffset, yOffset, 0.4F * zOffset); } else { if (abstractBoatEntity.isRemoved()) { yOffset = 0.01F; @@ -94,77 +94,77 @@ public static Vec3d getMountedHeightOffset(final Entity entity, final Entity pas yOffset = abstractBoatEntity.getType() == EntityType.BAMBOO_RAFT || abstractBoatEntity.getType() == EntityType.BAMBOO_CHEST_RAFT ? 0.25F : -0.1F; } - double xOffset = abstractBoatEntity instanceof AbstractChestBoatEntity ? 0.15F : 0F; - if (abstractBoatEntity.getPassengerList().size() > 1) { - final int idx = abstractBoatEntity.getPassengerList().indexOf(passenger); + double xOffset = abstractBoatEntity instanceof AbstractChestBoat ? 0.15F : 0F; + if (abstractBoatEntity.getPassengers().size() > 1) { + final int idx = abstractBoatEntity.getPassengers().indexOf(passenger); if (idx == 0) { xOffset = 0.2F; } else { xOffset = -0.6F; } - if (passenger instanceof AnimalEntity) xOffset += 0.2F; + if (passenger instanceof Animal) xOffset += 0.2F; } - return new Vec3d(xOffset, yOffset, 0F).rotateY(-(float) (Math.PI / 2)); + return new Vec3(xOffset, yOffset, 0F).yRot(-(float) (Math.PI / 2)); } - } else if (entity instanceof CamelEntity camelEntity) { - if (!camelEntity.hasPassenger(passenger)) return Vec3d.ZERO; + } else if (entity instanceof Camel camelEntity) { + if (!camelEntity.hasPassenger(passenger)) return Vec3.ZERO; - final boolean firstPassenger = camelEntity.getPassengerList().indexOf(passenger) == 0; - yOffset = camelEntity.getDimensions(camelEntity.isSitting() ? EntityPose.SITTING : EntityPose.STANDING).height() - (camelEntity.isBaby() ? 0.35F : 0.6F); + final boolean firstPassenger = camelEntity.getPassengers().indexOf(passenger) == 0; + yOffset = camelEntity.getDimensions(camelEntity.isCamelSitting() ? Pose.SITTING : Pose.STANDING).height() - (camelEntity.isBaby() ? 0.35F : 0.6F); if (camelEntity.isRemoved()) { yOffset = 0.01F; } else { - yOffset = camelEntity.getPassengerAttachmentY(firstPassenger, 0F, EntityDimensions.fixed(0F, (float) ((0.375F * camelEntity.getScaleFactor()) + yOffset)), camelEntity.getScaleFactor()); + yOffset = camelEntity.getBodyAnchorAnimationYOffset(firstPassenger, 0F, EntityDimensions.fixed(0F, (float) ((0.375F * camelEntity.getAgeScale()) + yOffset)), camelEntity.getAgeScale()); } double zOffset = 0.5F; - if (camelEntity.getPassengerList().size() > 1) { + if (camelEntity.getPassengers().size() > 1) { if (!firstPassenger) zOffset = -0.7F; - if (passenger instanceof AnimalEntity) zOffset += 0.2F; + if (passenger instanceof Animal) zOffset += 0.2F; } - return new Vec3d(0, yOffset, zOffset); - } else if (entity instanceof ChickenEntity chickenEntity) { - return new Vec3d(0, chickenEntity.getBodyY(0.5D) - chickenEntity.getY(), -0.1F); - } else if (entity instanceof EnderDragonEntity enderDragonEntity) { - yOffset = enderDragonEntity.body.getHeight(); - } else if (entity instanceof HoglinEntity hoglinEntity) { - yOffset = hoglinEntity.getHeight() - (hoglinEntity.isBaby() ? 0.2F : 0.15F); - } else if (entity instanceof LlamaEntity) { - return new Vec3d(0, entity.getHeight() * 0.6F, -0.3F); - } else if (entity instanceof PhantomEntity) { - yOffset = entity.getStandingEyeHeight(); - } else if (entity instanceof PiglinEntity) { - yOffset = entity.getHeight() * 0.92F; - } else if (entity instanceof RavagerEntity) { + return new Vec3(0, yOffset, zOffset); + } else if (entity instanceof Chicken chickenEntity) { + return new Vec3(0, chickenEntity.getY(0.5D) - chickenEntity.getY(), -0.1F); + } else if (entity instanceof EnderDragon enderDragonEntity) { + yOffset = enderDragonEntity.body.getBbHeight(); + } else if (entity instanceof Hoglin hoglinEntity) { + yOffset = hoglinEntity.getBbHeight() - (hoglinEntity.isBaby() ? 0.2F : 0.15F); + } else if (entity instanceof Llama) { + return new Vec3(0, entity.getBbHeight() * 0.6F, -0.3F); + } else if (entity instanceof Phantom) { + yOffset = entity.getEyeHeight(); + } else if (entity instanceof Piglin) { + yOffset = entity.getBbHeight() * 0.92F; + } else if (entity instanceof Ravager) { yOffset = 2.1F; - } else if (entity instanceof SkeletonHorseEntity) { + } else if (entity instanceof SkeletonHorse) { yOffset -= 0.1875F; - } else if (entity instanceof SnifferEntity) { + } else if (entity instanceof Sniffer) { yOffset = 1.8F; - } else if (entity instanceof SpiderEntity) { - yOffset = entity.getHeight() * 0.5F; - } else if (entity instanceof StriderEntity striderEntity) { - final float speed = Math.min(0.25F, striderEntity.limbAnimator.getSpeed()); - final float animationProgress = striderEntity.limbAnimator.getAnimationProgress(); - yOffset = striderEntity.getHeight() - 0.19F + (0.12F * MathHelper.cos(animationProgress * 1.5F) * 2F * speed); - } else if (entity instanceof ZoglinEntity zoglinEntity) { - yOffset = zoglinEntity.getHeight() - (zoglinEntity.isBaby() ? 0.2F : 0.15F); - } else if (entity instanceof AbstractDonkeyEntity) { + } else if (entity instanceof Spider) { + yOffset = entity.getBbHeight() * 0.5F; + } else if (entity instanceof Strider striderEntity) { + final float speed = Math.min(0.25F, striderEntity.walkAnimation.speed()); + final float animationProgress = striderEntity.walkAnimation.position(); + yOffset = striderEntity.getBbHeight() - 0.19F + (0.12F * Mth.cos(animationProgress * 1.5F) * 2F * speed); + } else if (entity instanceof Zoglin zoglinEntity) { + yOffset = zoglinEntity.getBbHeight() - (zoglinEntity.isBaby() ? 0.2F : 0.15F); + } else if (entity instanceof AbstractChestedHorse) { yOffset -= 0.25F; - } else if (entity instanceof AbstractMinecartEntity) { + } else if (entity instanceof AbstractMinecart) { yOffset = 0F; } - if (entity instanceof AbstractHorseEntity abstractHorseEntity) { - if (abstractHorseEntity.lastAngryAnimationProgress > 0.0F) { - return new Vec3d(0, yOffset + 0.15F * abstractHorseEntity.lastAngryAnimationProgress, -0.7F * abstractHorseEntity.lastAngryAnimationProgress); + if (entity instanceof AbstractHorse abstractHorseEntity) { + if (abstractHorseEntity.standAnimO > 0.0F) { + return new Vec3(0, yOffset + 0.15F * abstractHorseEntity.standAnimO, -0.7F * abstractHorseEntity.standAnimO); } } - return new Vec3d(0, yOffset, 0); + return new Vec3(0, yOffset, 0); } /** @@ -174,34 +174,34 @@ public static Vec3d getMountedHeightOffset(final Entity entity, final Entity pas * @return The height offset. */ public static double getHeightOffset(final Entity entity) { - if (entity instanceof AllayEntity || entity instanceof VexEntity) { + if (entity instanceof Allay || entity instanceof Vex) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_1)) { return 0D; } else { return 0.4D; } - } else if (entity instanceof ArmorStandEntity armorStandEntity) { + } else if (entity instanceof ArmorStand armorStandEntity) { return armorStandEntity.isMarker() ? 0D : 0.1D; - } else if (entity instanceof EndermiteEntity) { + } else if (entity instanceof Endermite) { return 0.1D; - } else if (entity instanceof ShulkerEntity shulkerEntity) { + } else if (entity instanceof Shulker shulkerEntity) { final EntityType vehicleType = shulkerEntity.getVehicle().getType(); - return !(shulkerEntity.getVehicle() instanceof BoatEntity) && vehicleType != EntityType.MINECART ? 0D : 0.1875D - getMountedHeightOffset(shulkerEntity.getVehicle(), null).y; - } else if (entity instanceof SilverfishEntity) { + return !(shulkerEntity.getVehicle() instanceof Boat) && vehicleType != EntityType.MINECART ? 0D : 0.1875D - getMountedHeightOffset(shulkerEntity.getVehicle(), null).y; + } else if (entity instanceof Silverfish) { return 0.1D; - } else if (entity instanceof ZombifiedPiglinEntity zombifiedPiglinEntity) { + } else if (entity instanceof ZombifiedPiglin zombifiedPiglinEntity) { return zombifiedPiglinEntity.isBaby() ? -0.05D : -0.45D; - } else if (entity instanceof ZombieEntity zombieEntity) { + } else if (entity instanceof Zombie zombieEntity) { return zombieEntity.isBaby() ? 0D : -0.45D; - } else if (entity instanceof AnimalEntity) { + } else if (entity instanceof Animal) { return 0.14D; - } else if (entity instanceof PatrolEntity) { + } else if (entity instanceof PatrollingMonster) { return -0.45D; - } else if (entity instanceof PlayerEntity) { + } else if (entity instanceof Player) { return -0.35D; - } else if (entity instanceof AbstractPiglinEntity abstractPiglinEntity) { + } else if (entity instanceof AbstractPiglin abstractPiglinEntity) { return abstractPiglinEntity.isBaby() ? -0.05D : -0.45D; - } else if (entity instanceof AbstractSkeletonEntity) { + } else if (entity instanceof AbstractSkeleton) { return -0.6D; } diff --git a/src/main/java/com/viaversion/viafabricplus/features/font/BuiltinEmptyGlyph1_12_2.java b/src/main/java/com/viaversion/viafabricplus/features/font/BuiltinEmptyGlyph1_12_2.java index 7ee575d9f..996a72e09 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/font/BuiltinEmptyGlyph1_12_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/font/BuiltinEmptyGlyph1_12_2.java @@ -22,12 +22,12 @@ package com.viaversion.viafabricplus.features.font; import com.mojang.blaze3d.textures.GpuTexture; -import net.minecraft.client.font.BakedGlyphImpl; -import net.minecraft.client.font.GlyphBaker; -import net.minecraft.client.font.GlyphMetrics; -import net.minecraft.client.font.UploadableGlyph; +import net.minecraft.client.gui.font.glyphs.BakedSheetGlyph; +import net.minecraft.client.gui.font.GlyphStitcher; +import com.mojang.blaze3d.font.GlyphInfo; +import com.mojang.blaze3d.font.GlyphBitmap; -public enum BuiltinEmptyGlyph1_12_2 implements GlyphMetrics { +public enum BuiltinEmptyGlyph1_12_2 implements GlyphInfo { INSTANCE; private static final int WIDTH = 0; @@ -38,16 +38,16 @@ public float getAdvance() { return WIDTH; } - public BakedGlyphImpl bake(final GlyphBaker baker) { - return baker.bake(this, new UploadableGlyph() { + public BakedSheetGlyph bake(final GlyphStitcher baker) { + return baker.stitch(this, new GlyphBitmap() { @Override - public int getWidth() { + public int getPixelWidth() { return WIDTH; } @Override - public int getHeight() { + public int getPixelHeight() { return HEIGHT; } @@ -61,7 +61,7 @@ public float getOversample() { } @Override - public boolean hasColor() { + public boolean isColored() { return true; } }); diff --git a/src/main/java/com/viaversion/viafabricplus/features/font/FontCacheReload.java b/src/main/java/com/viaversion/viafabricplus/features/font/FontCacheReload.java index 104f2e7fd..102efdf51 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/font/FontCacheReload.java +++ b/src/main/java/com/viaversion/viafabricplus/features/font/FontCacheReload.java @@ -21,18 +21,18 @@ package com.viaversion.viafabricplus.features.font; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.FontStorage; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.font.FontSet; public final class FontCacheReload { public static void reload() { - if (MinecraftClient.getInstance() == null) { + if (Minecraft.getInstance() == null) { return; } - for (final FontStorage storage : MinecraftClient.getInstance().fontManager.fontStorages.values()) { - storage.bakedGlyphCache.clear(); + for (final FontSet storage : Minecraft.getInstance().fontManager.fontSets.values()) { + storage.glyphCache.clear(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/footstep_particle/FootStepParticle1_12_2.java b/src/main/java/com/viaversion/viafabricplus/features/footstep_particle/FootStepParticle1_12_2.java index b92a9fceb..c18b6c975 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/footstep_particle/FootStepParticle1_12_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/footstep_particle/FootStepParticle1_12_2.java @@ -25,51 +25,51 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry; import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; -import net.minecraft.client.particle.BillboardParticle; -import net.minecraft.client.particle.BillboardParticleSubmittable; +import net.minecraft.client.particle.SingleQuadParticle; +import net.minecraft.client.renderer.state.QuadParticleRenderState; import net.minecraft.client.particle.Particle; -import net.minecraft.client.particle.ParticleFactory; -import net.minecraft.client.particle.SpriteProvider; -import net.minecraft.client.render.Camera; -import net.minecraft.client.texture.Sprite; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.particle.SimpleParticleType; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.random.Random; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.client.Camera; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.particles.SimpleParticleType; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; import org.joml.Quaternionf; -public final class FootStepParticle1_12_2 extends BillboardParticle { +public final class FootStepParticle1_12_2 extends SingleQuadParticle { - public static final Identifier ID = Identifier.of("viafabricplus", "footstep"); + public static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("viafabricplus", "footstep"); public static int RAW_ID; - private FootStepParticle1_12_2(ClientWorld clientWorld, double x, double y, double z, Sprite sprite) { + private FootStepParticle1_12_2(ClientLevel clientWorld, double x, double y, double z, TextureAtlasSprite sprite) { super(clientWorld, x, y, z, sprite); - this.scale = 0.125F; - this.setMaxAge(200); + this.quadSize = 0.125F; + this.setLifetime(200); } public static void init() { final SimpleParticleType footStepType = FabricParticleTypes.simple(true); - Registry.register(Registries.PARTICLE_TYPE, ID, footStepType); + Registry.register(BuiltInRegistries.PARTICLE_TYPE, ID, footStepType); ParticleFactoryRegistry.getInstance().register(footStepType, FootStepParticle1_12_2.Factory::new); - RAW_ID = Registries.PARTICLE_TYPE.getRawId(footStepType); + RAW_ID = BuiltInRegistries.PARTICLE_TYPE.getId(footStepType); } @Override - protected RenderType getRenderType() { - return RenderType.PARTICLE_ATLAS_TRANSLUCENT; + protected Layer getLayer() { + return Layer.TRANSLUCENT; } @Override - protected void render(final BillboardParticleSubmittable submittable, final Camera camera, final Quaternionf rotation, final float tickProgress) { - final float strength = ((float) this.age + tickProgress) / (float) this.maxAge; + protected void extractRotatedQuad(final QuadParticleRenderState submittable, final Camera camera, final Quaternionf rotation, final float tickProgress) { + final float strength = ((float) this.age + tickProgress) / (float) this.lifetime; this.alpha = 2.0F - (strength * strength) * 2.0F; if (this.alpha > 1.0F) { this.alpha = 0.2F; @@ -77,24 +77,24 @@ protected void render(final BillboardParticleSubmittable submittable, final Came this.alpha *= 0.2F; } - super.render(submittable, camera, new Quaternionf().rotateX(-MathHelper.HALF_PI), tickProgress); + super.extractRotatedQuad(submittable, camera, new Quaternionf().rotateX(-Mth.HALF_PI), tickProgress); } - public static class Factory implements ParticleFactory { + public static class Factory implements ParticleProvider { - private final SpriteProvider spriteProvider; + private final SpriteSet spriteProvider; - public Factory(SpriteProvider spriteProvider) { + public Factory(SpriteSet spriteProvider) { this.spriteProvider = spriteProvider; } @Override - public Particle createParticle(SimpleParticleType parameters, ClientWorld world, double x, double y, double z, double velocityX, double velocityY, double velocityZ, Random random) { + public Particle createParticle(SimpleParticleType parameters, ClientLevel world, double x, double y, double z, double velocityX, double velocityY, double velocityZ, RandomSource random) { if (ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2)) { throw new UnsupportedOperationException("FootStepParticle is not supported on versions newer than 1.12.2"); } - final Sprite sprite = spriteProvider.getSprite(random); + final TextureAtlasSprite sprite = spriteProvider.get(random); return new FootStepParticle1_12_2(world, x, y, z, sprite); } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/interaction/r1_18_2_block_ack_emulation/ClientPlayerInteractionManager1_18_2.java b/src/main/java/com/viaversion/viafabricplus/features/interaction/r1_18_2_block_ack_emulation/ClientPlayerInteractionManager1_18_2.java index 6f5ca8753..858cefd92 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/interaction/r1_18_2_block_ack_emulation/ClientPlayerInteractionManager1_18_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/interaction/r1_18_2_block_ack_emulation/ClientPlayerInteractionManager1_18_2.java @@ -25,52 +25,52 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec2f; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; import org.apache.commons.lang3.tuple.Pair; public final class ClientPlayerInteractionManager1_18_2 { - private final Object2ObjectLinkedOpenHashMap, Pair> unAckedActions = new Object2ObjectLinkedOpenHashMap<>(); + private final Object2ObjectLinkedOpenHashMap, Pair> unAckedActions = new Object2ObjectLinkedOpenHashMap<>(); - public void trackPlayerAction(final PlayerActionC2SPacket.Action action, final BlockPos blockPos) { - final ClientPlayerEntity player = MinecraftClient.getInstance().player; + public void trackPlayerAction(final ServerboundPlayerActionPacket.Action action, final BlockPos blockPos) { + final LocalPlayer player = Minecraft.getInstance().player; - final Vec2f rotation; + final Vec2 rotation; if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_1)) { rotation = null; } else { - rotation = new Vec2f(player.getYaw(), player.getPitch()); + rotation = new Vec2(player.getYRot(), player.getXRot()); } - unAckedActions.put(Pair.of(blockPos, action), Pair.of(player.getEntityPos(), rotation)); + unAckedActions.put(Pair.of(blockPos, action), Pair.of(player.position(), rotation)); } - public void handleBlockBreakAck(final BlockPos blockPos, final BlockState expectedState, final PlayerActionC2SPacket.Action action, final boolean allGood) { - final ClientPlayerEntity player = MinecraftClient.getInstance().player; + public void handleBlockBreakAck(final BlockPos blockPos, final BlockState expectedState, final ServerboundPlayerActionPacket.Action action, final boolean allGood) { + final LocalPlayer player = Minecraft.getInstance().player; if (player == null) { return; } - final ClientWorld world = MinecraftClient.getInstance().getNetworkHandler().getWorld(); + final ClientLevel world = Minecraft.getInstance().getConnection().getLevel(); - final Pair oldPlayerState = unAckedActions.remove(Pair.of(blockPos, action)); + final Pair oldPlayerState = unAckedActions.remove(Pair.of(blockPos, action)); final BlockState actualState = world.getBlockState(blockPos); - if ((oldPlayerState == null || !allGood || action != PlayerActionC2SPacket.Action.START_DESTROY_BLOCK && actualState != expectedState) && (actualState != expectedState || ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2))) { - world.setBlockState(blockPos, expectedState, Block.NOTIFY_ALL | Block.FORCE_STATE); - if (oldPlayerState != null && (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_1) || (world == player.getEntityWorld() && player.collidesWithStateAtPos(blockPos, expectedState)))) { - final Vec3d oldPlayerPosition = oldPlayerState.getKey(); + if ((oldPlayerState == null || !allGood || action != ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK && actualState != expectedState) && (actualState != expectedState || ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2))) { + world.setBlock(blockPos, expectedState, Block.UPDATE_ALL | Block.UPDATE_KNOWN_SHAPE); + if (oldPlayerState != null && (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_1) || (world == player.level() && player.isColliding(blockPos, expectedState)))) { + final Vec3 oldPlayerPosition = oldPlayerState.getKey(); if (oldPlayerState.getValue() != null) { - player.updatePositionAndAngles(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z, oldPlayerState.getValue().x, oldPlayerState.getValue().y); + player.absSnapTo(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z, oldPlayerState.getValue().x, oldPlayerState.getValue().y); } else { - player.updatePosition(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z); + player.absSnapTo(oldPlayerPosition.x, oldPlayerPosition.y, oldPlayerPosition.z); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/interaction/replace_block_placement_logic/ActionResultException1_12_2.java b/src/main/java/com/viaversion/viafabricplus/features/interaction/replace_block_placement_logic/ActionResultException1_12_2.java index e74dbd90b..b9a7a1caa 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/interaction/replace_block_placement_logic/ActionResultException1_12_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/interaction/replace_block_placement_logic/ActionResultException1_12_2.java @@ -21,17 +21,17 @@ package com.viaversion.viafabricplus.features.interaction.replace_block_placement_logic; -import net.minecraft.util.ActionResult; +import net.minecraft.world.InteractionResult; public final class ActionResultException1_12_2 extends RuntimeException { - private final ActionResult actionResult; + private final InteractionResult actionResult; - public ActionResultException1_12_2(final ActionResult actionResult) { + public ActionResultException1_12_2(final InteractionResult actionResult) { this.actionResult = actionResult; } - public ActionResult getActionResult() { + public InteractionResult getActionResult() { return this.actionResult; } diff --git a/src/main/java/com/viaversion/viafabricplus/features/item/filter_creative_tabs/VersionedRegistries.java b/src/main/java/com/viaversion/viafabricplus/features/item/filter_creative_tabs/VersionedRegistries.java index 744b72886..1ba21f93b 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/item/filter_creative_tabs/VersionedRegistries.java +++ b/src/main/java/com/viaversion/viafabricplus/features/item/filter_creative_tabs/VersionedRegistries.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.features.item.filter_creative_tabs; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; +import com.viaversion.viafabricplus.injection.access.base.IConnection; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader; import com.viaversion.vialoader.util.VersionRange; @@ -30,25 +30,25 @@ import it.unimi.dsi.fastutil.objects.Reference2ObjectMap; import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; import java.util.Objects; -import net.minecraft.block.entity.BannerPattern; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.component.ComponentType; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.BannerPatternsComponent; -import net.minecraft.component.type.ItemEnchantmentsComponent; -import net.minecraft.component.type.PotionContentsComponent; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.Identifier; +import net.minecraft.world.level.block.entity.BannerPattern; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.level.block.entity.BannerPatternLayers; +import net.minecraft.world.item.enchantment.ItemEnchantments; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.data.ClassicProtocolExtension; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.storage.ExtensionProtocolMetadataStorage; @@ -57,23 +57,23 @@ public final class VersionedRegistries { - public static final Reference2ObjectMap, VersionRange> ENCHANTMENT_DIFF = new Reference2ObjectOpenHashMap<>(); - public static final Reference2ObjectMap, VersionRange> PATTERN_DIFF = new Reference2ObjectOpenHashMap<>(); - public static final Reference2ObjectMap, VersionRange> EFFECT_DIFF = new Reference2ObjectOpenHashMap<>(); + public static final Reference2ObjectMap, VersionRange> ENCHANTMENT_DIFF = new Reference2ObjectOpenHashMap<>(); + public static final Reference2ObjectMap, VersionRange> PATTERN_DIFF = new Reference2ObjectOpenHashMap<>(); + public static final Reference2ObjectMap, VersionRange> EFFECT_DIFF = new Reference2ObjectOpenHashMap<>(); public static final Reference2ObjectMap ITEM_DIFF = new Reference2ObjectOpenHashMap<>(); public static void init() { final JsonObject data = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("versioned-registries.json"); - fillKeys(data.getAsJsonObject("enchantments"), RegistryKeys.ENCHANTMENT, ENCHANTMENT_DIFF); - fillKeys(data.getAsJsonObject("banner_patterns"), RegistryKeys.BANNER_PATTERN, PATTERN_DIFF); - fillEntries(data.getAsJsonObject("effects"), Registries.STATUS_EFFECT, EFFECT_DIFF); + fillKeys(data.getAsJsonObject("enchantments"), Registries.ENCHANTMENT, ENCHANTMENT_DIFF); + fillKeys(data.getAsJsonObject("banner_patterns"), Registries.BANNER_PATTERN, PATTERN_DIFF); + fillEntries(data.getAsJsonObject("effects"), BuiltInRegistries.MOB_EFFECT, EFFECT_DIFF); fillItems(data.getAsJsonObject("items")); } - private static void fillKeys(final JsonObject object, final RegistryKey registryKey, final Reference2ObjectMap map) { + private static void fillKeys(final JsonObject object, final ResourceKey registryKey, final Reference2ObjectMap map) { for (final String element : object.keySet()) { final VersionRange versions = VersionRange.fromString(object.get(element).getAsString()); - final RegistryKey key = RegistryKey.of(registryKey, Identifier.of(element)); + final ResourceKey key = ResourceKey.create(registryKey, ResourceLocation.parse(element)); map.put(key, versions); } } @@ -81,7 +81,7 @@ private static void fillKeys(final JsonObject object, final RegistryKey registry private static void fillEntries(final JsonObject object, final Registry registry, final Reference2ObjectMap map) { for (final String element : object.keySet()) { final VersionRange versions = VersionRange.fromString(object.get(element).getAsString()); - final RegistryEntry entry = registry.getEntry(Identifier.of(element)).orElseThrow(); + final Holder entry = registry.get(ResourceLocation.parse(element)).orElseThrow(); map.put(entry, versions); } } @@ -89,7 +89,7 @@ private static void fillEntries(final JsonObject object, final Registry regis private static void fillItems(final JsonObject object) { for (final String element : object.keySet()) { final VersionRange versions = VersionRange.fromString(object.get(element).getAsString()); - final Item item = Registries.ITEM.getOptionalValue(Identifier.of(element)).orElse(null); + final Item item = BuiltInRegistries.ITEM.getOptional(ResourceLocation.parse(element)).orElse(null); if (item == null) { throw new IllegalStateException("Unknown item: " + element); } @@ -100,12 +100,12 @@ private static void fillItems(final JsonObject object) { public static boolean keepItem(final Item item) { if (ProtocolTranslator.getTargetVersion().equals(c0_30cpe)) { - final ClientPlayNetworkHandler handler = MinecraftClient.getInstance().getNetworkHandler(); + final ClientPacketListener handler = Minecraft.getInstance().getConnection(); if (handler == null) { // Don't drop any items if the connection is not established yet return true; } - final ExtensionProtocolMetadataStorage extensionProtocol = ((IClientConnection) handler.getConnection()).viaFabricPlus$getUserConnection().get(ExtensionProtocolMetadataStorage.class); + final ExtensionProtocolMetadataStorage extensionProtocol = ((IConnection) handler.getConnection()).viaFabricPlus$getUserConnection().get(ExtensionProtocolMetadataStorage.class); if (extensionProtocol == null) { // Should never happen return false; } @@ -122,27 +122,27 @@ public static boolean keepItem(final ItemStack stack) { return false; } - if (filterEnchantments(DataComponentTypes.ENCHANTMENTS, stack)) { + if (filterEnchantments(DataComponents.ENCHANTMENTS, stack)) { return false; } - if (filterEnchantments(DataComponentTypes.STORED_ENCHANTMENTS, stack)) { + if (filterEnchantments(DataComponents.STORED_ENCHANTMENTS, stack)) { return false; } - final BannerPatternsComponent bannerPatterns = stack.get(DataComponentTypes.BANNER_PATTERNS); + final BannerPatternLayers bannerPatterns = stack.get(DataComponents.BANNER_PATTERNS); if (bannerPatterns != null) { - for (final BannerPatternsComponent.Layer layer : bannerPatterns.layers()) { - if (!layer.pattern().getKey().map(key -> containsBannerPattern(key, ProtocolTranslator.getTargetVersion())).orElse(true)) { + for (final BannerPatternLayers.Layer layer : bannerPatterns.layers()) { + if (!layer.pattern().unwrapKey().map(key -> containsBannerPattern(key, ProtocolTranslator.getTargetVersion())).orElse(true)) { return false; } } } - final PotionContentsComponent potionContents = stack.get(DataComponentTypes.POTION_CONTENTS); + final PotionContents potionContents = stack.get(DataComponents.POTION_CONTENTS); if (potionContents != null) { - for (final StatusEffectInstance effectInstance : Objects.requireNonNull(potionContents).getEffects()) { - if (!containsEffect(effectInstance.getEffectType(), ProtocolTranslator.getTargetVersion())) { + for (final MobEffectInstance effectInstance : Objects.requireNonNull(potionContents).getAllEffects()) { + if (!containsEffect(effectInstance.getEffect(), ProtocolTranslator.getTargetVersion())) { return false; } } @@ -150,11 +150,11 @@ public static boolean keepItem(final ItemStack stack) { return true; } - private static boolean filterEnchantments(final ComponentType componentType, final ItemStack stack) { - final ItemEnchantmentsComponent enchantments = stack.get(componentType); + private static boolean filterEnchantments(final DataComponentType componentType, final ItemStack stack) { + final ItemEnchantments enchantments = stack.get(componentType); if (enchantments != null) { - for (final RegistryEntry enchantment : enchantments.getEnchantments()) { - if (!enchantment.getKey().map(key -> containsEnchantment(key, ProtocolTranslator.getTargetVersion())).orElse(true)) { + for (final Holder enchantment : enchantments.keySet()) { + if (!enchantment.unwrapKey().map(key -> containsEnchantment(key, ProtocolTranslator.getTargetVersion())).orElse(true)) { return true; } } @@ -162,15 +162,15 @@ private static boolean filterEnchantments(final ComponentType enchantment, final ProtocolVersion version) { + public static boolean containsEnchantment(final ResourceKey enchantment, final ProtocolVersion version) { return !ENCHANTMENT_DIFF.containsKey(enchantment) || ENCHANTMENT_DIFF.get(enchantment).contains(version); } - public static boolean containsBannerPattern(final RegistryKey bannerPattern, final ProtocolVersion version) { + public static boolean containsBannerPattern(final ResourceKey bannerPattern, final ProtocolVersion version) { return !PATTERN_DIFF.containsKey(bannerPattern) || PATTERN_DIFF.get(bannerPattern).contains(version); } - public static boolean containsEffect(final RegistryEntry effect, final ProtocolVersion version) { + public static boolean containsEffect(final Holder effect, final ProtocolVersion version) { return !EFFECT_DIFF.containsKey(effect) || EFFECT_DIFF.get(effect).contains(version); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/item/negative_item_count/NegativeItemUtil.java b/src/main/java/com/viaversion/viafabricplus/features/item/negative_item_count/NegativeItemUtil.java index cef2ef709..cfd4faca1 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/item/negative_item_count/NegativeItemUtil.java +++ b/src/main/java/com/viaversion/viafabricplus/features/item/negative_item_count/NegativeItemUtil.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.util.ItemUtil; import com.viaversion.viaversion.protocols.v1_10to1_11.Protocol1_10To1_11; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.world.item.ItemStack; +import net.minecraft.nbt.CompoundTag; public final class NegativeItemUtil { @@ -36,9 +36,9 @@ public final class NegativeItemUtil { * @return The actual amount of items in the stack */ public static int getCount(final ItemStack stack) { - final NbtCompound tag = ItemUtil.getTagOrNull(stack); + final CompoundTag tag = ItemUtil.getTagOrNull(stack); if (tag != null) { - return tag.getInt(ItemUtil.vvNbtName(Protocol1_10To1_11.class), stack.getCount()); + return tag.getIntOr(ItemUtil.vvNbtName(Protocol1_10To1_11.class), stack.getCount()); } else { return stack.getCount(); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/item/r1_14_4_enchantment_tooltip/Enchantments1_14_4.java b/src/main/java/com/viaversion/viafabricplus/features/item/r1_14_4_enchantment_tooltip/Enchantments1_14_4.java index bfa17eee6..15d6cbbf9 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/item/r1_14_4_enchantment_tooltip/Enchantments1_14_4.java +++ b/src/main/java/com/viaversion/viafabricplus/features/item/r1_14_4_enchantment_tooltip/Enchantments1_14_4.java @@ -25,13 +25,13 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.registry.RegistryKey; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.resources.ResourceKey; public final class Enchantments1_14_4 { - private static final Map> ENCHANTMENT_REGISTRY = new HashMap<>(); + private static final Map> ENCHANTMENT_REGISTRY = new HashMap<>(); static { ENCHANTMENT_REGISTRY.put("protection", Enchantments.PROTECTION); @@ -73,7 +73,7 @@ public final class Enchantments1_14_4 { ENCHANTMENT_REGISTRY.put("vanishing_curse", Enchantments.VANISHING_CURSE); } - public static Optional> getOrEmpty(final String identifier) { + public static Optional> getOrEmpty(final String identifier) { return Optional.ofNullable(ENCHANTMENT_REGISTRY.get(Key.stripMinecraftNamespace(identifier))); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/limitation/max_chat_length/MaxChatLength.java b/src/main/java/com/viaversion/viafabricplus/features/limitation/max_chat_length/MaxChatLength.java index 932271c14..43eca4c35 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/limitation/max_chat_length/MaxChatLength.java +++ b/src/main/java/com/viaversion/viafabricplus/features/limitation/max_chat_length/MaxChatLength.java @@ -21,11 +21,11 @@ package com.viaversion.viafabricplus.features.limitation.max_chat_length; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; +import com.viaversion.viafabricplus.injection.access.base.IConnection; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.data.ClassicProtocolExtension; @@ -37,13 +37,13 @@ public final class MaxChatLength { public static int getChatLength() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) { - final ClientPlayNetworkHandler handler = MinecraftClient.getInstance().getNetworkHandler(); - final ExtensionProtocolMetadataStorage extensionProtocol = ((IClientConnection) handler.getConnection()).viaFabricPlus$getUserConnection().get(ExtensionProtocolMetadataStorage.class); + final ClientPacketListener handler = Minecraft.getInstance().getConnection(); + final ExtensionProtocolMetadataStorage extensionProtocol = ((IConnection) handler.getConnection()).viaFabricPlus$getUserConnection().get(ExtensionProtocolMetadataStorage.class); if (extensionProtocol != null && extensionProtocol.hasServerExtension(ClassicProtocolExtension.LONGER_MESSAGES)) { return Short.MAX_VALUE * 2; } else { - return 64 - (MinecraftClient.getInstance().getSession().getUsername().length() + 2); + return 64 - (Minecraft.getInstance().getUser().getName().length() + 2); } } else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return 512; diff --git a/src/main/java/com/viaversion/viafabricplus/features/networking/armor_hud/ArmorHudEmulation1_8.java b/src/main/java/com/viaversion/viafabricplus/features/networking/armor_hud/ArmorHudEmulation1_8.java index b2ed90428..80be35083 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/networking/armor_hud/ArmorHudEmulation1_8.java +++ b/src/main/java/com/viaversion/viafabricplus/features/networking/armor_hud/ArmorHudEmulation1_8.java @@ -32,10 +32,10 @@ import com.viaversion.viaversion.protocols.v1_8to1_9.packet.ClientboundPackets1_9; import java.util.UUID; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.registries.BuiltInRegistries; public final class ArmorHudEmulation1_8 { @@ -50,7 +50,7 @@ public static void init() { return; } - if (MinecraftClient.getInstance().player != null) { + if (Minecraft.getInstance().player != null) { final UserConnection connection = ProtocolTranslator.getPlayNetworkUserConnection(); if (connection != null) { try { @@ -69,12 +69,12 @@ private static void sendArmorUpdate(final UserConnection connection) { // Calculate the armor points. int armor = 0; for (final EquipmentSlot slot : ARMOR_SLOTS) { - final ItemStack stack = MinecraftClient.getInstance().player.getInventory().equipment.get(slot); + final ItemStack stack = Minecraft.getInstance().player.getInventory().equipment.get(slot); if (stack.isEmpty()) { continue; } - final String identifier = Registries.ITEM.getId(stack.getItem()).toString(); + final String identifier = BuiltInRegistries.ITEM.getKey(stack.getItem()).toString(); armor += ArmorTypes1_8.findByType(identifier).getArmorPoints(); } @@ -85,7 +85,7 @@ private static void sendArmorUpdate(final UserConnection connection) { previousArmorPoints = armor; final PacketWrapper updateAttributes = PacketWrapper.create(ClientboundPackets1_9.UPDATE_ATTRIBUTES, connection); - updateAttributes.write(Types.VAR_INT, MinecraftClient.getInstance().player.getId()); + updateAttributes.write(Types.VAR_INT, Minecraft.getInstance().player.getId()); updateAttributes.write(Types.INT, 1); updateAttributes.write(Types.STRING, "generic.armor"); updateAttributes.write(Types.DOUBLE, 0.0D); diff --git a/src/main/java/com/viaversion/viafabricplus/features/networking/remove_signed_commands/SignedCommands1_21_6.java b/src/main/java/com/viaversion/viafabricplus/features/networking/remove_signed_commands/SignedCommands1_21_6.java index bc7cce8c8..20db2c1cc 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/networking/remove_signed_commands/SignedCommands1_21_6.java +++ b/src/main/java/com/viaversion/viafabricplus/features/networking/remove_signed_commands/SignedCommands1_21_6.java @@ -22,22 +22,22 @@ package com.viaversion.viafabricplus.features.networking.remove_signed_commands; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.client.MinecraftClient; -import net.minecraft.world.GameMode; +import net.minecraft.client.Minecraft; +import net.minecraft.world.level.GameType; import net.raphimc.vialegacy.api.LegacyProtocolVersion; public final class SignedCommands1_21_6 { - public static void sendGameMode(final GameMode gameMode) { + public static void sendGameMode(final GameType gameMode) { final String command; if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_2_4tor1_2_5)) { - final String username = MinecraftClient.getInstance().getSession().getUsername(); - command = "gamemode " + username + " " + (gameMode.getIndex() > 1 ? 0 : gameMode.getId()); + final String username = Minecraft.getInstance().getUser().getName(); + command = "gamemode " + username + " " + (gameMode.getId() > 1 ? 0 : gameMode.getName()); } else { - command = "gamemode " + gameMode.getId(); + command = "gamemode " + gameMode.getName(); } - MinecraftClient.getInstance().getNetworkHandler().sendChatCommand(command); + Minecraft.getInstance().getConnection().sendCommand(command); } } diff --git a/src/main/java/com/viaversion/viafabricplus/features/networking/resource_pack_header/ResourcePackHeaderDiff.java b/src/main/java/com/viaversion/viafabricplus/features/networking/resource_pack_header/ResourcePackHeaderDiff.java index 952dfaad3..a4882f456 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/networking/resource_pack_header/ResourcePackHeaderDiff.java +++ b/src/main/java/com/viaversion/viafabricplus/features/networking/resource_pack_header/ResourcePackHeaderDiff.java @@ -28,18 +28,18 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; -import net.minecraft.GameVersion; -import net.minecraft.SaveVersion; +import net.minecraft.WorldVersion; +import net.minecraft.world.level.storage.DataVersion; import net.minecraft.SharedConstants; -import net.minecraft.resource.PackVersion; -import net.minecraft.resource.ResourceType; +import net.minecraft.server.packs.metadata.pack.PackFormat; +import net.minecraft.server.packs.PackType; /** - * This class file contains the {@link GameVersion} for each protocol version. + * This class file contains the {@link WorldVersion} for each protocol version. */ public final class ResourcePackHeaderDiff { - private final static Map GAME_VERSION_DIFF = new HashMap<>(); + private final static Map GAME_VERSION_DIFF = new HashMap<>(); public static void init() { final JsonObject diff = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("resource-pack-headers.json"); @@ -65,22 +65,22 @@ private static void fill(final String name, final JsonObject data) { } /** - * @param version The {@link ProtocolVersion} to get the {@link GameVersion} for. - * @return The {@link GameVersion} for the given {@link ProtocolVersion}. + * @param version The {@link ProtocolVersion} to get the {@link WorldVersion} for. + * @return The {@link WorldVersion} for the given {@link ProtocolVersion}. */ - public static GameVersion get(final ProtocolVersion version) { + public static WorldVersion get(final ProtocolVersion version) { if (!GAME_VERSION_DIFF.containsKey(version)) { - return SharedConstants.getGameVersion(); + return SharedConstants.getCurrentVersion(); } else { return GAME_VERSION_DIFF.get(version); } } private static void registerVersion(final ProtocolVersion version, final int majorVersion, final int minorVersion, final String name, final String id) { - GAME_VERSION_DIFF.put(version, new GameVersion() { + GAME_VERSION_DIFF.put(version, new WorldVersion() { @Override - public SaveVersion dataVersion() { + public DataVersion dataVersion() { return null; } @@ -100,9 +100,9 @@ public int protocolVersion() { } @Override - public PackVersion packVersion(final ResourceType type) { - if (type == ResourceType.CLIENT_RESOURCES) { - return PackVersion.of(majorVersion, minorVersion); + public PackFormat packVersion(final PackType type) { + if (type == PackType.CLIENT_RESOURCES) { + return PackFormat.of(majorVersion, minorVersion); } throw new UnsupportedOperationException(); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/recipe/AddBannerPatternRecipe.java b/src/main/java/com/viaversion/viafabricplus/features/recipe/AddBannerPatternRecipe.java index f0cc4e58c..159ea80b9 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/recipe/AddBannerPatternRecipe.java +++ b/src/main/java/com/viaversion/viafabricplus/features/recipe/AddBannerPatternRecipe.java @@ -23,40 +23,40 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.entity.BannerPattern; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.BannerPatternsComponent; -import net.minecraft.item.BannerItem; -import net.minecraft.item.DyeItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.SpecialCraftingRecipe; -import net.minecraft.recipe.book.CraftingRecipeCategory; -import net.minecraft.recipe.input.CraftingRecipeInput; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.DyeColor; -import net.minecraft.world.World; - -public final class AddBannerPatternRecipe extends SpecialCraftingRecipe { - - public static final RecipeSerializer SERIALIZER = new SpecialRecipeSerializer<>(AddBannerPatternRecipe::new); - - public AddBannerPatternRecipe(CraftingRecipeCategory craftingRecipeCategory) { +import net.minecraft.world.level.block.entity.BannerPattern; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.level.block.entity.BannerPatternLayers; +import net.minecraft.world.item.BannerItem; +import net.minecraft.world.item.DyeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CraftingInput; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.Holder; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.level.Level; + +public final class AddBannerPatternRecipe extends CustomRecipe { + + public static final RecipeSerializer SERIALIZER = new Serializer<>(AddBannerPatternRecipe::new); + + public AddBannerPatternRecipe(CraftingBookCategory craftingRecipeCategory) { super(craftingRecipeCategory); } @Override - public boolean matches(CraftingRecipeInput input, World world) { + public boolean matches(CraftingInput input, Level world) { boolean foundBanner = false; for (int i = 0; i < input.size(); i++) { - ItemStack stack = input.getStackInSlot(i); + ItemStack stack = input.getItem(i); if (stack.getItem() instanceof BannerItem) { if (foundBanner) return false; - if (stack.getOrDefault(DataComponentTypes.BANNER_PATTERNS, BannerPatternsComponent.DEFAULT).layers().size() >= 6) + if (stack.getOrDefault(DataComponents.BANNER_PATTERNS, BannerPatternLayers.EMPTY).layers().size() >= 6) return false; foundBanner = true; } @@ -65,11 +65,11 @@ public boolean matches(CraftingRecipeInput input, World world) { } @Override - public ItemStack craft(CraftingRecipeInput input, RegistryWrapper.WrapperLookup lookup) { + public ItemStack assemble(CraftingInput input, HolderLookup.Provider lookup) { ItemStack result = ItemStack.EMPTY; for (int i = 0; i < input.size(); i++) { - ItemStack stack = input.getStackInSlot(i); + ItemStack stack = input.getItem(i); if (!stack.isEmpty() && stack.getItem() instanceof BannerItem) { result = stack.copy(); result.setCount(1); @@ -79,21 +79,21 @@ public ItemStack craft(CraftingRecipeInput input, RegistryWrapper.WrapperLookup final BannerPattern_1_13_2 pattern = getBannerPattern(input); if (pattern != null) { - final RegistryEntry.Reference patternKey = lookup.getOrThrow(RegistryKeys.BANNER_PATTERN).getOrThrow(pattern.getKey()); + final Holder.Reference patternKey = lookup.lookupOrThrow(Registries.BANNER_PATTERN).getOrThrow(pattern.getKey()); DyeColor color = ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2) ? DyeColor.BLACK : DyeColor.WHITE; for (int i = 0; i < input.size(); i++) { - Item item = input.getStackInSlot(i).getItem(); + Item item = input.getItem(i).getItem(); if (item instanceof DyeItem dyeItem) { - color = dyeItem.getColor(); + color = dyeItem.getDyeColor(); } } - final BannerPatternsComponent.Builder patternsBuilder = new BannerPatternsComponent.Builder(); - if (result.contains(DataComponentTypes.BANNER_PATTERNS)) { - patternsBuilder.addAll(result.get(DataComponentTypes.BANNER_PATTERNS)); + final BannerPatternLayers.Builder patternsBuilder = new BannerPatternLayers.Builder(); + if (result.has(DataComponents.BANNER_PATTERNS)) { + patternsBuilder.addAll(result.get(DataComponents.BANNER_PATTERNS)); } - patternsBuilder.add(new BannerPatternsComponent.Layer(patternKey, color)); - result.set(DataComponentTypes.BANNER_PATTERNS, patternsBuilder.build()); + patternsBuilder.add(new BannerPatternLayers.Layer(patternKey, color)); + result.set(DataComponents.BANNER_PATTERNS, patternsBuilder.build()); } return result; @@ -104,7 +104,7 @@ public RecipeSerializer getSerializer() { return SERIALIZER; } - private static BannerPattern_1_13_2 getBannerPattern(CraftingRecipeInput input) { + private static BannerPattern_1_13_2 getBannerPattern(CraftingInput input) { for (BannerPattern_1_13_2 pattern : BannerPattern_1_13_2.values()) { if (!pattern.isCraftable()) continue; @@ -114,7 +114,7 @@ private static BannerPattern_1_13_2 getBannerPattern(CraftingRecipeInput input) boolean foundBaseItem = false; boolean foundDye = false; for (int i = 0; i < input.size(); i++) { - ItemStack stack = input.getStackInSlot(i); + ItemStack stack = input.getItem(i); if (!stack.isEmpty() && !(stack.getItem() instanceof BannerItem)) { if (stack.getItem() instanceof DyeItem) { if (foundDye) { @@ -123,7 +123,7 @@ private static BannerPattern_1_13_2 getBannerPattern(CraftingRecipeInput input) } foundDye = true; } else { - if (foundBaseItem || !ItemStack.areItemsEqual(stack, pattern.getBaseStack())) { + if (foundBaseItem || !ItemStack.isSameItem(stack, pattern.getBaseStack())) { matches = false; break; } @@ -138,7 +138,7 @@ private static BannerPattern_1_13_2 getBannerPattern(CraftingRecipeInput input) for (int i = 0; i < input.size(); i++) { int row = i / 3; int col = i % 3; - ItemStack stack = input.getStackInSlot(i); + ItemStack stack = input.getItem(i); Item item = stack.getItem(); if (!stack.isEmpty() && !(item instanceof BannerItem)) { if (!(item instanceof DyeItem)) { @@ -146,7 +146,7 @@ private static BannerPattern_1_13_2 getBannerPattern(CraftingRecipeInput input) break; } - DyeColor color = ((DyeItem) item).getColor(); + DyeColor color = ((DyeItem) item).getDyeColor(); if (patternColor != null && color != patternColor) { matches = false; break; diff --git a/src/main/java/com/viaversion/viafabricplus/features/recipe/BannerPattern_1_13_2.java b/src/main/java/com/viaversion/viafabricplus/features/recipe/BannerPattern_1_13_2.java index 3e932a0b3..d66da3b11 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/recipe/BannerPattern_1_13_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/recipe/BannerPattern_1_13_2.java @@ -21,12 +21,12 @@ package com.viaversion.viafabricplus.features.recipe; -import net.minecraft.block.Blocks; -import net.minecraft.block.entity.BannerPattern; -import net.minecraft.block.entity.BannerPatterns; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.registry.RegistryKey; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BannerPattern; +import net.minecraft.world.level.block.entity.BannerPatterns; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.resources.ResourceKey; public enum BannerPattern_1_13_2 { @@ -43,7 +43,7 @@ public enum BannerPattern_1_13_2 { STRIPE_MIDDLE(BannerPatterns.STRIPE_MIDDLE, " ", "###", " "), STRIPE_DOWNRIGHT(BannerPatterns.STRIPE_DOWNRIGHT, "# ", " # ", " #"), STRIPE_DOWNLEFT(BannerPatterns.STRIPE_DOWNLEFT, " #", " # ", "# "), - STRIPE_SMALL(BannerPatterns.SMALL_STRIPES, "# #", "# #", " "), + STRIPE_SMALL(BannerPatterns.STRIPE_SMALL, "# #", "# #", " "), CROSS(BannerPatterns.CROSS, "# #", " # ", "# #"), STRAIGHT_CROSS(BannerPatterns.STRAIGHT_CROSS, " # ", "###", " # "), TRIANGLE_BOTTOM(BannerPatterns.TRIANGLE_BOTTOM, " ", " # ", "# #"), @@ -51,15 +51,15 @@ public enum BannerPattern_1_13_2 { TRIANGLES_BOTTOM(BannerPatterns.TRIANGLES_BOTTOM, " ", "# #", " # "), TRIANGLES_TOP(BannerPatterns.TRIANGLES_TOP, " # ", "# #", " "), DIAGONAL_LEFT(BannerPatterns.DIAGONAL_LEFT, "## ", "# ", " "), - DIAGONAL_RIGHT(BannerPatterns.DIAGONAL_RIGHT, " ", " #", " ##"), - DIAGONAL_LEFT_MIRROR(BannerPatterns.DIAGONAL_UP_LEFT, " ", "# ", "## "), - DIAGONAL_RIGHT_MIRROR(BannerPatterns.DIAGONAL_UP_RIGHT, " ##", " #", " "), - CIRCLE_MIDDLE(BannerPatterns.CIRCLE, " ", " # ", " "), - RHOMBUS_MIDDLE(BannerPatterns.RHOMBUS, " # ", "# #", " # "), + DIAGONAL_RIGHT(BannerPatterns.DIAGONAL_RIGHT_MIRROR, " ", " #", " ##"), + DIAGONAL_LEFT_MIRROR(BannerPatterns.DIAGONAL_LEFT_MIRROR, " ", "# ", "## "), + DIAGONAL_RIGHT_MIRROR(BannerPatterns.DIAGONAL_RIGHT, " ##", " #", " "), + CIRCLE_MIDDLE(BannerPatterns.CIRCLE_MIDDLE, " ", " # ", " "), + RHOMBUS_MIDDLE(BannerPatterns.RHOMBUS_MIDDLE, " # ", "# #", " # "), HALF_VERTICAL(BannerPatterns.HALF_VERTICAL, "## ", "## ", "## "), HALF_HORIZONTAL(BannerPatterns.HALF_HORIZONTAL, "###", "###", " "), - HALF_VERTICAL_MIRROR(BannerPatterns.HALF_VERTICAL_RIGHT, " ##", " ##", " ##"), - HALF_HORIZONTAL_MIRROR(BannerPatterns.HALF_HORIZONTAL_BOTTOM, " ", "###", "###"), + HALF_VERTICAL_MIRROR(BannerPatterns.HALF_VERTICAL_MIRROR, " ##", " ##", " ##"), + HALF_HORIZONTAL_MIRROR(BannerPatterns.HALF_HORIZONTAL_MIRROR, " ", "###", "###"), BORDER(BannerPatterns.BORDER, "###", "# #", "###"), CURLY_BORDER(BannerPatterns.CURLY_BORDER, new ItemStack(Blocks.VINE)), GRADIENT(BannerPatterns.GRADIENT, "# #", " # ", " # "), @@ -71,29 +71,29 @@ public enum BannerPattern_1_13_2 { FLOWER(BannerPatterns.FLOWER, new ItemStack(Blocks.OXEYE_DAISY)), MOJANG(BannerPatterns.MOJANG, new ItemStack(Items.ENCHANTED_GOLDEN_APPLE)); - private final RegistryKey pattern; + private final ResourceKey pattern; private final String[] recipePattern; private ItemStack baseStack; - BannerPattern_1_13_2(final RegistryKey pattern) { + BannerPattern_1_13_2(final ResourceKey pattern) { this.recipePattern = new String[3]; this.baseStack = ItemStack.EMPTY; this.pattern = pattern; } - BannerPattern_1_13_2(final RegistryKey pattern, final ItemStack baseStack) { + BannerPattern_1_13_2(final ResourceKey pattern, final ItemStack baseStack) { this(pattern); this.baseStack = baseStack; } - BannerPattern_1_13_2(final RegistryKey pattern, final String recipe1, final String recipe2, final String recipe3) { + BannerPattern_1_13_2(final ResourceKey pattern, final String recipe1, final String recipe2, final String recipe3) { this(pattern); this.recipePattern[0] = recipe1; this.recipePattern[1] = recipe2; this.recipePattern[2] = recipe3; } - public RegistryKey getKey() { + public ResourceKey getKey() { return this.pattern; } diff --git a/src/main/java/com/viaversion/viafabricplus/features/recipe/RecipeManager1_11_2.java b/src/main/java/com/viaversion/viafabricplus/features/recipe/RecipeManager1_11_2.java index 6639ff2bd..d64588570 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/recipe/RecipeManager1_11_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/recipe/RecipeManager1_11_2.java @@ -28,23 +28,23 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Stream; -import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeEntry; -import net.minecraft.recipe.RecipeType; -import net.minecraft.recipe.input.RecipeInput; -import net.minecraft.registry.RegistryKey; -import net.minecraft.world.World; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.RecipeInput; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.Level; public final class RecipeManager1_11_2 { - private final Multimap, RecipeEntry> recipesByType; - private final Map>, RecipeEntry> recipesById; + private final Multimap, RecipeHolder> recipesByType; + private final Map>, RecipeHolder> recipesById; - public RecipeManager1_11_2(final Iterable> recipes) { - final ImmutableMultimap.Builder, RecipeEntry> recipesByTypeBuilder = ImmutableMultimap.builder(); - final ImmutableMap.Builder>, RecipeEntry> recipesByIdBuilder = ImmutableMap.builder(); + public RecipeManager1_11_2(final Iterable> recipes) { + final ImmutableMultimap.Builder, RecipeHolder> recipesByTypeBuilder = ImmutableMultimap.builder(); + final ImmutableMap.Builder>, RecipeHolder> recipesByIdBuilder = ImmutableMap.builder(); - for (RecipeEntry recipeEntry : recipes) { + for (RecipeHolder recipeEntry : recipes) { final RecipeType recipeType = recipeEntry.value().getType(); recipesByTypeBuilder.put(recipeType, recipeEntry); recipesByIdBuilder.put(recipeEntry.id(), recipeEntry); @@ -54,23 +54,23 @@ public RecipeManager1_11_2(final Iterable> recipes) { this.recipesById = recipesByIdBuilder.build(); } - public > Optional> getFirstMatch(final RecipeType type, final I input, final World world) { + public > Optional> getFirstMatch(final RecipeType type, final I input, final Level world) { if (input.isEmpty()) { return Optional.empty(); } else { - return this.recipesByType.get(type).stream().map(e -> (RecipeEntry) e).filter(recipe -> recipe.value().matches(input, world)).findFirst(); + return this.recipesByType.get(type).stream().map(e -> (RecipeHolder) e).filter(recipe -> recipe.value().matches(input, world)).findFirst(); } } - public Optional> get(final RegistryKey> id) { + public Optional> get(final ResourceKey> id) { return Optional.ofNullable(this.recipesById.get(id)); } - public Collection> values() { + public Collection> values() { return this.recipesById.values(); } - public Stream>> keys() { + public Stream>> keys() { return this.recipesById.keySet().stream(); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/recipe/Recipes1_11_2.java b/src/main/java/com/viaversion/viafabricplus/features/recipe/Recipes1_11_2.java index c46a9078e..2340ccd53 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/recipe/Recipes1_11_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/recipe/Recipes1_11_2.java @@ -33,41 +33,41 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.inventory.RecipeInputInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemConvertible; -import net.minecraft.item.ItemStack; -import net.minecraft.network.packet.s2c.play.ScreenHandlerSlotUpdateS2CPacket; -import net.minecraft.recipe.ArmorDyeRecipe; -import net.minecraft.recipe.BannerDuplicateRecipe; -import net.minecraft.recipe.BookCloningRecipe; -import net.minecraft.recipe.CraftingRecipe; -import net.minecraft.recipe.FireworkRocketRecipe; -import net.minecraft.recipe.Ingredient; -import net.minecraft.recipe.MapCloningRecipe; -import net.minecraft.recipe.MapExtendingRecipe; -import net.minecraft.recipe.RawShapedRecipe; -import net.minecraft.recipe.Recipe; -import net.minecraft.recipe.RecipeEntry; -import net.minecraft.recipe.RecipeType; -import net.minecraft.recipe.RepairItemRecipe; -import net.minecraft.recipe.ShapedRecipe; -import net.minecraft.recipe.ShapelessRecipe; -import net.minecraft.recipe.ShieldDecorationRecipe; -import net.minecraft.recipe.SmeltingRecipe; -import net.minecraft.recipe.TippedArrowRecipe; -import net.minecraft.recipe.book.CookingRecipeCategory; -import net.minecraft.recipe.book.CraftingRecipeCategory; -import net.minecraft.recipe.input.CraftingRecipeInput; -import net.minecraft.registry.Registries; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.util.Identifier; -import net.minecraft.util.Pair; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.world.item.crafting.ArmorDyeRecipe; +import net.minecraft.world.item.crafting.BannerDuplicateRecipe; +import net.minecraft.world.item.crafting.BookCloningRecipe; +import net.minecraft.world.item.crafting.CraftingRecipe; +import net.minecraft.world.item.crafting.FireworkRocketRecipe; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.MapCloningRecipe; +import net.minecraft.world.item.crafting.MapExtendingRecipe; +import net.minecraft.world.item.crafting.ShapedRecipePattern; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.RepairItemRecipe; +import net.minecraft.world.item.crafting.ShapedRecipe; +import net.minecraft.world.item.crafting.ShapelessRecipe; +import net.minecraft.world.item.crafting.ShieldDecorationRecipe; +import net.minecraft.world.item.crafting.SmeltingRecipe; +import net.minecraft.world.item.crafting.TippedArrowRecipe; +import net.minecraft.world.item.crafting.CookingBookCategory; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CraftingInput; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Tuple; import net.raphimc.vialegacy.api.LegacyProtocolVersion; /** @@ -75,7 +75,7 @@ */ public final class Recipes1_11_2 { - private static final List> LEGACY_RECIPES = new ArrayList<>(); + private static final List> LEGACY_RECIPES = new ArrayList<>(); private static RecipeManager1_11_2 RECIPE_MANAGER; public static void init() { @@ -89,11 +89,11 @@ public static void init() { final VersionRange versionRange = VersionRange.fromString(recipeElement.getAsJsonObject().get("version").getAsString()); switch (type) { case "shaped" -> - LEGACY_RECIPES.add(new Pair<>(LegacyShapedRecipe.fromJson(recipeElement.getAsJsonObject()), versionRange)); + LEGACY_RECIPES.add(new Tuple<>(LegacyShapedRecipe.fromJson(recipeElement.getAsJsonObject()), versionRange)); case "shapeless" -> - LEGACY_RECIPES.add(new Pair<>(LegacyShapelessRecipe.fromJson(recipeElement.getAsJsonObject()), versionRange)); + LEGACY_RECIPES.add(new Tuple<>(LegacyShapelessRecipe.fromJson(recipeElement.getAsJsonObject()), versionRange)); case "smelting" -> - LEGACY_RECIPES.add(new Pair<>(LegacySmeltingRecipe.fromJson(recipeElement.getAsJsonObject()), versionRange)); + LEGACY_RECIPES.add(new Tuple<>(LegacySmeltingRecipe.fromJson(recipeElement.getAsJsonObject()), versionRange)); default -> throw new IllegalArgumentException("Unknown recipe type: " + type); } } @@ -101,52 +101,52 @@ public static void init() { public static RecipeManager1_11_2 getRecipeManager() { if (RECIPE_MANAGER == null) { - final List> recipes = new ArrayList<>(); + final List> recipes = new ArrayList<>(); // Regular recipes for (int i = 0; i < LEGACY_RECIPES.size(); i++) { - final Pair legacyRecipe = LEGACY_RECIPES.get(i); - if (legacyRecipe.getRight().contains(ProtocolTranslator.getTargetVersion())) { - final RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, Identifier.of("viafabricplus", "recipe/" + i)); - switch (legacyRecipe.getLeft()) { + final Tuple legacyRecipe = LEGACY_RECIPES.get(i); + if (legacyRecipe.getB().contains(ProtocolTranslator.getTargetVersion())) { + final ResourceKey> key = ResourceKey.create(Registries.RECIPE, ResourceLocation.fromNamespaceAndPath("viafabricplus", "recipe/" + i)); + switch (legacyRecipe.getA()) { case LegacyShapedRecipe legacyShapedRecipe -> { final Map ingredients = new HashMap<>(); for (Map.Entry> entry : legacyShapedRecipe.legend.entrySet()) { - final ItemConvertible[] items = new ItemConvertible[entry.getValue().size()]; + final ItemLike[] items = new ItemLike[entry.getValue().size()]; for (int j = 0; j < entry.getValue().size(); j++) { items[j] = entry.getValue().get(j); } - ingredients.put(entry.getKey(), Ingredient.ofItems(items)); + ingredients.put(entry.getKey(), Ingredient.of(items)); } final ItemStack output = legacyShapedRecipe.result.toItemStack(); - final CraftingRecipe recipe = new ShapedRecipe(legacyShapedRecipe.group, CraftingRecipeCategory.MISC, RawShapedRecipe.create(ingredients, legacyShapedRecipe.pattern), output, false); - recipes.add(new RecipeEntry<>(key, recipe)); + final CraftingRecipe recipe = new ShapedRecipe(legacyShapedRecipe.group, CraftingBookCategory.MISC, ShapedRecipePattern.of(ingredients, legacyShapedRecipe.pattern), output, false); + recipes.add(new RecipeHolder<>(key, recipe)); } case LegacyShapelessRecipe legacyShapelessRecipe -> { final ItemStack output = legacyShapelessRecipe.result.toItemStack(); final List ingredients = new ArrayList<>(); for (List ingredientIds : legacyShapelessRecipe.ingredients) { - final ItemConvertible[] items = new ItemConvertible[ingredientIds.size()]; + final ItemLike[] items = new ItemLike[ingredientIds.size()]; for (int j = 0; j < ingredientIds.size(); j++) { items[j] = ingredientIds.get(j); } - ingredients.add(Ingredient.ofItems(items)); + ingredients.add(Ingredient.of(items)); } - final CraftingRecipe recipe = new ShapelessRecipe(legacyShapelessRecipe.group, CraftingRecipeCategory.MISC, output, ingredients); - recipes.add(new RecipeEntry<>(key, recipe)); + final CraftingRecipe recipe = new ShapelessRecipe(legacyShapelessRecipe.group, CraftingBookCategory.MISC, output, ingredients); + recipes.add(new RecipeHolder<>(key, recipe)); } case LegacySmeltingRecipe legacySmeltingRecipe -> { final ItemStack output = legacySmeltingRecipe.result.toItemStack(); - final ItemConvertible[] inputItems = new ItemConvertible[legacySmeltingRecipe.input.size()]; + final ItemLike[] inputItems = new ItemLike[legacySmeltingRecipe.input.size()]; for (int j = 0; j < legacySmeltingRecipe.input.size(); j++) { inputItems[j] = legacySmeltingRecipe.input.get(j); } - final Ingredient input = Ingredient.ofItems(inputItems); - final SmeltingRecipe recipe = new SmeltingRecipe("", CookingRecipeCategory.MISC, input, output, legacySmeltingRecipe.experience, 200); - recipes.add(new RecipeEntry<>(key, recipe)); + final Ingredient input = Ingredient.of(inputItems); + final SmeltingRecipe recipe = new SmeltingRecipe("", CookingBookCategory.MISC, input, output, legacySmeltingRecipe.experience, 200); + recipes.add(new RecipeHolder<>(key, recipe)); } default -> - throw new IllegalStateException("Unknown legacy recipe type: " + legacyRecipe.getLeft().getClass()); + throw new IllegalStateException("Unknown legacy recipe type: " + legacyRecipe.getA().getClass()); } } } @@ -154,31 +154,31 @@ public static RecipeManager1_11_2 getRecipeManager() { // Special recipes final List specialRecipes = new ArrayList<>(); if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(LegacyProtocolVersion.r1_4_2)) { - specialRecipes.add(new ArmorDyeRecipe(CraftingRecipeCategory.MISC)); - specialRecipes.add(new MapCloningRecipe(CraftingRecipeCategory.MISC)); - specialRecipes.add(new MapExtendingRecipe(CraftingRecipeCategory.MISC)); + specialRecipes.add(new ArmorDyeRecipe(CraftingBookCategory.MISC)); + specialRecipes.add(new MapCloningRecipe(CraftingBookCategory.MISC)); + specialRecipes.add(new MapExtendingRecipe(CraftingBookCategory.MISC)); } if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7)) { - specialRecipes.add(new FireworkRocketRecipe(CraftingRecipeCategory.MISC)); + specialRecipes.add(new FireworkRocketRecipe(CraftingBookCategory.MISC)); } if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_11)) { - specialRecipes.add(new ShulkerBoxColoringRecipe(CraftingRecipeCategory.MISC)); + specialRecipes.add(new ShulkerBoxColoringRecipe(CraftingBookCategory.MISC)); } if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_9)) { - specialRecipes.add(new TippedArrowRecipe(CraftingRecipeCategory.MISC)); - specialRecipes.add(new ShieldDecorationRecipe(CraftingRecipeCategory.MISC)); + specialRecipes.add(new TippedArrowRecipe(CraftingBookCategory.MISC)); + specialRecipes.add(new ShieldDecorationRecipe(CraftingBookCategory.MISC)); } if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_8)) { - specialRecipes.add(new RepairItemRecipe(CraftingRecipeCategory.MISC)); - specialRecipes.add(new BannerDuplicateRecipe(CraftingRecipeCategory.MISC)); - specialRecipes.add(new AddBannerPatternRecipe(CraftingRecipeCategory.MISC)); + specialRecipes.add(new RepairItemRecipe(CraftingBookCategory.MISC)); + specialRecipes.add(new BannerDuplicateRecipe(CraftingBookCategory.MISC)); + specialRecipes.add(new AddBannerPatternRecipe(CraftingBookCategory.MISC)); } if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_7_2)) { - specialRecipes.add(new BookCloningRecipe(CraftingRecipeCategory.MISC)); + specialRecipes.add(new BookCloningRecipe(CraftingBookCategory.MISC)); } for (CraftingRecipe specialRecipe : specialRecipes) { - final RegistryKey> key = RegistryKey.of(RegistryKeys.RECIPE, Identifier.of("viafabricplus", "recipe/special_" + specialRecipe.getClass().getSimpleName().replace("Recipe", "").toLowerCase(Locale.ROOT))); - recipes.add(new RecipeEntry<>(key, specialRecipe)); + final ResourceKey> key = ResourceKey.create(Registries.RECIPE, ResourceLocation.fromNamespaceAndPath("viafabricplus", "recipe/special_" + specialRecipe.getClass().getSimpleName().replace("Recipe", "").toLowerCase(Locale.ROOT))); + recipes.add(new RecipeHolder<>(key, specialRecipe)); } RECIPE_MANAGER = new RecipeManager1_11_2(recipes); @@ -200,22 +200,22 @@ public static void reset() { * @param screenHandler The screen handler * @param inventory The inventory of the screen handler */ - public static void setCraftingResultSlot(final int syncId, final ScreenHandler screenHandler, final RecipeInputInventory inventory) { - final ClientPlayNetworkHandler network = MinecraftClient.getInstance().getNetworkHandler(); - final ClientWorld world = MinecraftClient.getInstance().world; - final CraftingRecipeInput input = inventory.createRecipeInput(); + public static void setCraftingResultSlot(final int syncId, final AbstractContainerMenu screenHandler, final CraftingContainer inventory) { + final ClientPacketListener network = Minecraft.getInstance().getConnection(); + final ClientLevel world = Minecraft.getInstance().level; + final CraftingInput input = inventory.asCraftInput(); final ItemStack result = getRecipeManager() .getFirstMatch(RecipeType.CRAFTING, input, world) // Get the first matching recipe - .map(recipe -> recipe.value().craft(input, network.getRegistryManager())) // Craft the recipe to get the result + .map(recipe -> recipe.value().assemble(input, network.registryAccess())) // Craft the recipe to get the result .orElse(ItemStack.EMPTY); // If there is no recipe, set the result to air // Update the result slot - network.onScreenHandlerSlotUpdate(new ScreenHandlerSlotUpdateS2CPacket(syncId, screenHandler.getRevision(), 0, result)); + network.handleContainerSetSlot(new ClientboundContainerSetSlotPacket(syncId, screenHandler.getStateId(), 0, result)); } - private static Item getItemById(final Identifier id) { - final Item item = Registries.ITEM.getOptionalValue(id).orElse(null); + private static Item getItemById(final ResourceLocation id) { + final Item item = BuiltInRegistries.ITEM.getOptional(id).orElse(null); if (item == null) { throw new IllegalStateException("Unknown item: " + id.toString()); } @@ -229,7 +229,7 @@ private sealed interface LegacyRecipe permits LegacyShapedRecipe, LegacyShapeles private record RecipeItemStack(Item item, int count) { private static RecipeItemStack fromJson(final JsonObject obj) { - final Identifier id = Identifier.of(obj.get("id").getAsString()); + final ResourceLocation id = ResourceLocation.parse(obj.get("id").getAsString()); final int count = obj.has("count") ? obj.get("count").getAsInt() : 1; return new RecipeItemStack(getItemById(id), count); } @@ -255,7 +255,7 @@ public static LegacyShapedRecipe fromJson(final JsonObject obj) { final char key = entry.getKey().charAt(0); final List items = new ArrayList<>(); for (JsonElement itemId : entry.getValue().getAsJsonArray()) { - items.add(getItemById(Identifier.of(itemId.getAsString()))); + items.add(getItemById(ResourceLocation.parse(itemId.getAsString()))); } legend.put(key, items); } @@ -274,7 +274,7 @@ public static LegacyShapelessRecipe fromJson(final JsonObject obj) { for (JsonElement element : obj.getAsJsonArray("ingredients")) { final List items = new ArrayList<>(); for (JsonElement itemId : element.getAsJsonArray()) { - items.add(getItemById(Identifier.of(itemId.getAsString()))); + items.add(getItemById(ResourceLocation.parse(itemId.getAsString()))); } ingredients.add(items); } @@ -291,7 +291,7 @@ public static LegacySmeltingRecipe fromJson(final JsonObject obj) { final RecipeItemStack result = RecipeItemStack.fromJson(obj.getAsJsonObject("result")); final List input = new ArrayList<>(); for (JsonElement element : obj.getAsJsonArray("input")) { - input.add(getItemById(Identifier.of(element.getAsString()))); + input.add(getItemById(ResourceLocation.parse(element.getAsString()))); } final float experience = obj.get("experience").getAsFloat(); return new LegacySmeltingRecipe(group, result, input, experience); diff --git a/src/main/java/com/viaversion/viafabricplus/features/recipe/ShulkerBoxColoringRecipe.java b/src/main/java/com/viaversion/viafabricplus/features/recipe/ShulkerBoxColoringRecipe.java index 7c77a2fb0..5f273eee6 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/recipe/ShulkerBoxColoringRecipe.java +++ b/src/main/java/com/viaversion/viafabricplus/features/recipe/ShulkerBoxColoringRecipe.java @@ -21,35 +21,35 @@ package com.viaversion.viafabricplus.features.recipe; -import net.minecraft.block.Block; -import net.minecraft.block.ShulkerBoxBlock; -import net.minecraft.item.DyeItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.recipe.RecipeSerializer; -import net.minecraft.recipe.SpecialCraftingRecipe; -import net.minecraft.recipe.book.CraftingRecipeCategory; -import net.minecraft.recipe.input.CraftingRecipeInput; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.world.World; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.ShulkerBoxBlock; +import net.minecraft.world.item.DyeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.CustomRecipe; +import net.minecraft.world.item.crafting.CraftingBookCategory; +import net.minecraft.world.item.crafting.CraftingInput; +import net.minecraft.core.HolderLookup; +import net.minecraft.world.level.Level; -public final class ShulkerBoxColoringRecipe extends SpecialCraftingRecipe { +public final class ShulkerBoxColoringRecipe extends CustomRecipe { - public static final RecipeSerializer SERIALIZER = new SpecialRecipeSerializer<>(ShulkerBoxColoringRecipe::new); + public static final RecipeSerializer SERIALIZER = new Serializer<>(ShulkerBoxColoringRecipe::new); - public ShulkerBoxColoringRecipe(CraftingRecipeCategory craftingRecipeCategory) { + public ShulkerBoxColoringRecipe(CraftingBookCategory craftingRecipeCategory) { super(craftingRecipeCategory); } - public boolean matches(CraftingRecipeInput input, World world) { + public boolean matches(CraftingInput input, Level world) { int i = 0; int j = 0; for (int k = 0; k < input.size(); k++) { - ItemStack stack = input.getStackInSlot(k); + ItemStack stack = input.getItem(k); if (!stack.isEmpty()) { - if (Block.getBlockFromItem(stack.getItem()) instanceof ShulkerBoxBlock) { + if (Block.byItem(stack.getItem()) instanceof ShulkerBoxBlock) { i++; } else { if (!(stack.getItem() instanceof DyeItem)) { @@ -68,15 +68,15 @@ public boolean matches(CraftingRecipeInput input, World world) { return i == 1 && j == 1; } - public ItemStack craft(CraftingRecipeInput input, RegistryWrapper.WrapperLookup wrapperLookup) { + public ItemStack assemble(CraftingInput input, HolderLookup.Provider wrapperLookup) { ItemStack result = ItemStack.EMPTY; DyeItem dyeItem = (DyeItem) Items.WHITE_DYE; for (int i = 0; i < input.size(); i++) { - ItemStack stack = input.getStackInSlot(i); + ItemStack stack = input.getItem(i); if (!stack.isEmpty()) { Item item = stack.getItem(); - if (Block.getBlockFromItem(item) instanceof ShulkerBoxBlock) { + if (Block.byItem(item) instanceof ShulkerBoxBlock) { result = stack; } else if (item instanceof DyeItem) { dyeItem = (DyeItem) item; @@ -84,7 +84,7 @@ public ItemStack craft(CraftingRecipeInput input, RegistryWrapper.WrapperLookup } } - return result.copyComponentsToNewStack(ShulkerBoxBlock.get(dyeItem.getColor()), 1); + return result.transmuteCopy(ShulkerBoxBlock.getBlockByColor(dyeItem.getDyeColor()), 1); } @Override diff --git a/src/main/java/com/viaversion/viafabricplus/features/world/disable_sequencing/PendingUpdateManager1_18_2.java b/src/main/java/com/viaversion/viafabricplus/features/world/disable_sequencing/PendingUpdateManager1_18_2.java index fced78aea..d6ddf455b 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/world/disable_sequencing/PendingUpdateManager1_18_2.java +++ b/src/main/java/com/viaversion/viafabricplus/features/world/disable_sequencing/PendingUpdateManager1_18_2.java @@ -21,33 +21,33 @@ package com.viaversion.viafabricplus.features.world.disable_sequencing; -import net.minecraft.block.BlockState; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.PendingUpdateManager; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.util.math.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.prediction.BlockStatePredictionHandler; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; /** - * No-op implementation of {@link PendingUpdateManager} for 1.18.2 and lower since those versions don't have the - * {@link PendingUpdateManager} class. + * No-op implementation of {@link BlockStatePredictionHandler} for 1.18.2 and lower since those versions don't have the + * {@link BlockStatePredictionHandler} class. */ -public final class PendingUpdateManager1_18_2 extends PendingUpdateManager { +public final class PendingUpdateManager1_18_2 extends BlockStatePredictionHandler { @Override - public void addPendingUpdate(BlockPos pos, BlockState state, ClientPlayerEntity player) { + public void retainKnownServerState(BlockPos pos, BlockState state, LocalPlayer player) { } @Override - public boolean hasPendingUpdate(BlockPos pos, BlockState state) { + public boolean updateKnownServerState(BlockPos pos, BlockState state) { return false; } @Override - public void processPendingUpdates(int maxProcessableSequence, ClientWorld world) { + public void endPredictionsUpTo(int maxProcessableSequence, ClientLevel world) { } @Override - public PendingUpdateManager incrementSequence() { + public BlockStatePredictionHandler startPredicting() { return this; } @@ -56,12 +56,12 @@ public void close() { } @Override - public int getSequence() { + public int currentSequence() { return 0; } @Override - public boolean hasPendingSequence() { + public boolean isPredicting() { return false; } diff --git a/src/main/java/com/viaversion/viafabricplus/features/world/item_picking/ItemPick1_21_3.java b/src/main/java/com/viaversion/viafabricplus/features/world/item_picking/ItemPick1_21_3.java index d1d9d0f30..3e1f84cb4 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/world/item_picking/ItemPick1_21_3.java +++ b/src/main/java/com/viaversion/viafabricplus/features/world/item_picking/ItemPick1_21_3.java @@ -27,70 +27,70 @@ import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.v1_21_2to1_21_4.Protocol1_21_2To1_21_4; import com.viaversion.viaversion.protocols.v1_21to1_21_2.packet.ServerboundPackets1_21_2; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.storage.NbtWriteView; -import net.minecraft.util.ErrorReporter; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.EntityHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.RegistryAccess; +import net.minecraft.world.level.storage.TagValueOutput; +import net.minecraft.util.ProblemReporter; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.core.BlockPos; import org.slf4j.Logger; public final class ItemPick1_21_3 { private static final Logger LOGGER = LogUtils.getLogger(); - private static void addPickBlock(final PlayerInventory inventory, final ItemStack stack) { - final int index = inventory.getSlotWithStack(stack); - if (PlayerInventory.isValidHotbarIndex(index)) { + private static void addPickBlock(final Inventory inventory, final ItemStack stack) { + final int index = inventory.findSlotMatchingItem(stack); + if (Inventory.isHotbarSlot(index)) { inventory.setSelectedSlot(index); } else if (index != -1) { - inventory.swapSlotWithHotbar(index); + inventory.pickSlot(index); } else { - inventory.swapStackWithHotbar(stack); + inventory.addAndPickItem(stack); } } - private static void addBlockEntityNbt(final ItemStack stack, final BlockEntity blockEntity, final DynamicRegistryManager manager) { - try (final ErrorReporter.Logging logging = new ErrorReporter.Logging(blockEntity.getReporterContext(), LOGGER)) { - final NbtWriteView view = NbtWriteView.create(logging, manager); - blockEntity.writeIdentifyingData(view); + private static void addBlockEntityNbt(final ItemStack stack, final BlockEntity blockEntity, final RegistryAccess manager) { + try (final ProblemReporter.ScopedCollector logging = new ProblemReporter.ScopedCollector(blockEntity.problemPath(), LOGGER)) { + final TagValueOutput view = TagValueOutput.createWithContext(logging, manager); + blockEntity.saveMetadata(view); BlockItem.setBlockEntityData(stack, blockEntity.getType(), view); - stack.applyComponentsFrom(blockEntity.createComponentMap()); + stack.applyComponents(blockEntity.collectComponents()); } } - public static void doItemPick(final MinecraftClient client) { - final boolean creativeMode = client.player.getAbilities().creativeMode; + public static void doItemPick(final Minecraft client) { + final boolean creativeMode = client.player.getAbilities().instabuild; ItemStack itemStack; - final HitResult crosshairTarget = client.crosshairTarget; + final HitResult crosshairTarget = client.hitResult; if (crosshairTarget.getType() == HitResult.Type.BLOCK) { final BlockPos blockPos = ((BlockHitResult) crosshairTarget).getBlockPos(); - final BlockState blockState = client.world.getBlockState(blockPos); + final BlockState blockState = client.level.getBlockState(blockPos); if (blockState.isAir()) { return; } final Block block = blockState.getBlock(); - itemStack = block.getPickStack(client.world, blockPos, blockState, false); + itemStack = block.getCloneItemStack(client.level, blockPos, blockState, false); if (itemStack.isEmpty()) { return; } - if (creativeMode && client.isCtrlPressed() && blockState.hasBlockEntity()) { - final BlockEntity blockEntity = client.world.getBlockEntity(blockPos); + if (creativeMode && client.hasControlDown() && blockState.hasBlockEntity()) { + final BlockEntity blockEntity = client.level.getBlockEntity(blockPos); if (blockEntity != null) { - addBlockEntityNbt(itemStack, blockEntity, client.world.getRegistryManager()); + addBlockEntityNbt(itemStack, blockEntity, client.level.registryAccess()); } } } else { @@ -99,7 +99,7 @@ public static void doItemPick(final MinecraftClient client) { } final Entity entity = ((EntityHitResult) crosshairTarget).getEntity(); - itemStack = entity.getPickBlockStack(); + itemStack = entity.getPickResult(); if (itemStack == null) { return; } @@ -109,13 +109,13 @@ public static void doItemPick(final MinecraftClient client) { return; } - final PlayerInventory inventory = client.player.getInventory(); - final int index = inventory.getSlotWithStack(itemStack); + final Inventory inventory = client.player.getInventory(); + final int index = inventory.findSlotMatchingItem(itemStack); if (creativeMode) { addPickBlock(inventory, itemStack); - client.interactionManager.clickCreativeStack(client.player.getStackInHand(Hand.MAIN_HAND), 36 + inventory.getSelectedSlot()); + client.gameMode.handleCreativeModeItemAdd(client.player.getItemInHand(InteractionHand.MAIN_HAND), 36 + inventory.getSelectedSlot()); } else if (index != -1) { - if (PlayerInventory.isValidHotbarIndex(index)) { + if (Inventory.isHotbarSlot(index)) { inventory.setSelectedSlot(index); return; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/ViaFabricPlusMixinPlugin.java b/src/main/java/com/viaversion/viafabricplus/injection/ViaFabricPlusMixinPlugin.java index 1abf0a27d..702deb9d4 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/ViaFabricPlusMixinPlugin.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/ViaFabricPlusMixinPlugin.java @@ -26,6 +26,7 @@ import java.util.Set; import net.fabricmc.loader.api.FabricLoader; import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.MixinEnvironment; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; @@ -42,6 +43,7 @@ public final class ViaFabricPlusMixinPlugin implements IMixinConfigPlugin { @Override public void onLoad(String mixinPackage) { + MixinEnvironment.getCurrentEnvironment().audit(); final FabricLoader loader = FabricLoader.getInstance(); IPNEXT_PRESENT = loader.isModLoaded("inventoryprofilesnext"); MORE_CULLING_PRESENT = loader.isModLoaded("moreculling"); @@ -64,7 +66,7 @@ public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { case MIXINS_PACKAGE + "compat.ipnext.MixinAutoRefillHandler_ItemSlotMonitor" -> IPNEXT_PRESENT; case MIXINS_PACKAGE + "compat.lithium.MixinEntity" -> LITHIUM_PRESENT && !MOONRISE_PRESENT; case MIXINS_PACKAGE + "features.item.attack_damage.MixinItemStack" -> !LEGENDARYTOOLTIPS_PRESENT; - case MIXINS_PACKAGE + "features.item.negative_item_count.MixinDrawContext" -> !LEGACY_PRESENT; + case MIXINS_PACKAGE + "features.item.negative_item_count.MixinGuiGraphics" -> !LEGACY_PRESENT; default -> true; }; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/base/IClientConnection.java b/src/main/java/com/viaversion/viafabricplus/injection/access/base/IConnection.java similarity index 97% rename from src/main/java/com/viaversion/viafabricplus/injection/access/base/IClientConnection.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/base/IConnection.java index 8b10f4803..a139fcbd5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/base/IClientConnection.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/base/IConnection.java @@ -24,7 +24,7 @@ import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -public interface IClientConnection { +public interface IConnection { void viaFabricPlus$setupPreNettyDecryption(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/base/ITextFieldWidget.java b/src/main/java/com/viaversion/viafabricplus/injection/access/base/IEditBox.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/access/base/ITextFieldWidget.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/base/IEditBox.java index 1e04e81f6..87c72d59c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/base/ITextFieldWidget.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/base/IEditBox.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.injection.access.base; -public interface ITextFieldWidget { +public interface IEditBox { void viaFabricPlus$unlockForbiddenCharacters(); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/base/IMultiValueDebugSampleLogImpl.java b/src/main/java/com/viaversion/viafabricplus/injection/access/base/ILocalSampleLogger.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/access/base/IMultiValueDebugSampleLogImpl.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/base/ILocalSampleLogger.java index 1055ba809..b70f1b60d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/base/IMultiValueDebugSampleLogImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/base/ILocalSampleLogger.java @@ -23,7 +23,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -public interface IMultiValueDebugSampleLogImpl { +public interface ILocalSampleLogger { ProtocolVersion viaFabricPlus$getForcedVersion(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/base/IServerInfo.java b/src/main/java/com/viaversion/viafabricplus/injection/access/base/IServerData.java similarity index 97% rename from src/main/java/com/viaversion/viafabricplus/injection/access/base/IServerInfo.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/base/IServerData.java index a2399222d..bee427e5e 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/base/IServerInfo.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/base/IServerData.java @@ -23,7 +23,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -public interface IServerInfo { +public interface IServerData { ProtocolVersion viaFabricPlus$forcedVersion(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/base/bedrock/IConfirmScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/access/base/bedrock/IConfirmScreen.java index 8729787d7..3ff600b2a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/base/bedrock/IConfirmScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/base/bedrock/IConfirmScreen.java @@ -21,10 +21,10 @@ package com.viaversion.viafabricplus.injection.access.base.bedrock; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public interface IConfirmScreen { - void viaFabricPlus$updateMessage(final Text message); + void viaFabricPlus$updateMessage(final Component message); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/IHorizontalConnectingBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/ICrossCollisionBlock.java similarity index 91% rename from src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/IHorizontalConnectingBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/ICrossCollisionBlock.java index 1a921ba61..89c9f86bf 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/IHorizontalConnectingBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/block/shape/ICrossCollisionBlock.java @@ -21,9 +21,9 @@ package com.viaversion.viafabricplus.injection.access.block.shape; -import net.minecraft.block.BlockState; +import net.minecraft.world.level.block.state.BlockState; -public interface IHorizontalConnectingBlock { +public interface ICrossCollisionBlock { int viaFabricPlus$getShapeIndex(final BlockState state); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/IAbstractBoatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/IAbstractBoat.java similarity index 85% rename from src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/IAbstractBoatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/IAbstractBoat.java index ca38ba78a..3fe38e59b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/IAbstractBoatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/entity/r1_8_boat/IAbstractBoat.java @@ -21,14 +21,14 @@ package com.viaversion.viafabricplus.injection.access.entity.r1_8_boat; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.phys.Vec3; -public interface IAbstractBoatEntity { +public interface IAbstractBoat { void viaFabricPlus$setBoatInterpolationSteps(final int steps); - Vec3d viaFabricPlus$getBoatVelocity(); + Vec3 viaFabricPlus$getBoatVelocity(); - void viaFabricPlus$setBoatVelocity(final Vec3d velocity); + void viaFabricPlus$setBoatVelocity(final Vec3 velocity); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/IMouseKeyboard.java b/src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/IMouseKeyboardHandlers.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/IMouseKeyboard.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/IMouseKeyboardHandlers.java index ab235e527..212d332b2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/IMouseKeyboard.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/execute_inputs_sync/IMouseKeyboardHandlers.java @@ -23,7 +23,7 @@ import java.util.Queue; -public interface IMouseKeyboard { +public interface IMouseKeyboardHandlers { Queue viaFabricPlus$getPendingScreenEvents(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/IScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/IAbstractContainerMenu.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/IScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/IAbstractContainerMenu.java index f6f6f27c4..3d6bd704f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/IScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/container_clicking/IAbstractContainerMenu.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.injection.access.interaction.container_clicking; -public interface IScreenHandler { +public interface IAbstractContainerMenu { short viaFabricPlus$getActionId(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/IClientPlayerInteractionManager.java b/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/IMultiPlayerGameMode.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/IClientPlayerInteractionManager.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/IMultiPlayerGameMode.java index 73972c731..57667d836 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/IClientPlayerInteractionManager.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/interaction/r1_18_2_block_ack_emulation/IMultiPlayerGameMode.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.features.interaction.r1_18_2_block_ack_emulation.ClientPlayerInteractionManager1_18_2; -public interface IClientPlayerInteractionManager { +public interface IMultiPlayerGameMode { ClientPlayerInteractionManager1_18_2 viaFabricPlus$get1_18_2InteractionManager(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/item/attack_damage/IDisplayDefault.java b/src/main/java/com/viaversion/viafabricplus/injection/access/item/attack_damage/IDisplayDefault.java index ac4a38e45..e1b7b75cc 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/item/attack_damage/IDisplayDefault.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/item/attack_damage/IDisplayDefault.java @@ -21,10 +21,10 @@ package com.viaversion.viafabricplus.injection.access.item.attack_damage; -import net.minecraft.component.type.ItemEnchantmentsComponent; +import net.minecraft.world.item.enchantment.ItemEnchantments; public interface IDisplayDefault { - void viaFabricPlus$setItemEnchantments(final ItemEnchantmentsComponent itemEnchantments); + void viaFabricPlus$setItemEnchantments(final ItemEnchantments itemEnchantments); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/ILegacyKeySignatureStorage.java b/src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/IProfilePublicKey_Data.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/ILegacyKeySignatureStorage.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/IProfilePublicKey_Data.java index e280b5694..c51c92f16 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/ILegacyKeySignatureStorage.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/networking/legacy_chat_signature/IProfilePublicKey_Data.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature; -public interface ILegacyKeySignatureStorage { +public interface IProfilePublicKey_Data { byte[] viafabricplus$getLegacyPublicKeySignature(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/IGameTestDebugRenderer.java b/src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/IGameTestBlockHighlightRenderer.java similarity index 92% rename from src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/IGameTestDebugRenderer.java rename to src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/IGameTestBlockHighlightRenderer.java index ed53fb8e8..932e08b98 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/IGameTestDebugRenderer.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/access/networking/packet_handling/IGameTestBlockHighlightRenderer.java @@ -21,9 +21,9 @@ package com.viaversion.viafabricplus.injection.access.networking.packet_handling; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; -public interface IGameTestDebugRenderer { +public interface IGameTestBlockHighlightRenderer { void viaFabricPlus$addMarker(BlockPos pos, int color, String message, int duration); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/MixinMain.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/MixinMain.java index aca7a7aaa..7ce881cb7 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/MixinMain.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/MixinMain.java @@ -31,7 +31,7 @@ @Mixin(Main.class) public abstract class MixinMain { - @Inject(method = "main", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Util;startTimerHack()V")) + @Inject(method = "main", at = @At(value = "INVOKE", target = "Lnet/minecraft/Util;startTimerHackThread()V")) private static void bootstrap(CallbackInfo ci) { ViaFabricPlusImpl.INSTANCE.init(); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/MixinMultiValueDebugSampleLogImpl.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/MixinLocalSampleLogger.java similarity index 83% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/MixinMultiValueDebugSampleLogImpl.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/MixinLocalSampleLogger.java index a79c517e4..5266a9d76 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/MixinMultiValueDebugSampleLogImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/access/MixinLocalSampleLogger.java @@ -21,14 +21,14 @@ package com.viaversion.viafabricplus.injection.mixin.base.access; -import com.viaversion.viafabricplus.injection.access.base.IMultiValueDebugSampleLogImpl; +import com.viaversion.viafabricplus.injection.access.base.ILocalSampleLogger; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl; +import net.minecraft.util.debugchart.LocalSampleLogger; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -@Mixin(MultiValueDebugSampleLogImpl.class) -public abstract class MixinMultiValueDebugSampleLogImpl implements IMultiValueDebugSampleLogImpl { +@Mixin(LocalSampleLogger.class) +public abstract class MixinLocalSampleLogger implements ILocalSampleLogger { @Unique private ProtocolVersion viaFabricPlus$forcedVersion; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientLoginNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientHandshakePacketListenerImpl.java similarity index 79% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientLoginNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientHandshakePacketListenerImpl.java index 54bf36a87..a9bd31ec6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientLoginNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientHandshakePacketListenerImpl.java @@ -21,10 +21,10 @@ package com.viaversion.viafabricplus.injection.mixin.base.connection; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; -import net.minecraft.client.network.ClientLoginNetworkHandler; -import net.minecraft.network.ClientConnection; -import net.minecraft.text.Text; +import com.viaversion.viafabricplus.injection.access.base.IConnection; +import net.minecraft.client.multiplayer.ClientHandshakePacketListenerImpl; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.release.r1_6_4tor1_7_2_5.storage.ProtocolMetadataStorage; import org.spongepowered.asm.mixin.Final; @@ -35,16 +35,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @SuppressWarnings("DataFlowIssue") -@Mixin(ClientLoginNetworkHandler.class) -public abstract class MixinClientLoginNetworkHandler { +@Mixin(ClientHandshakePacketListenerImpl.class) +public abstract class MixinClientHandshakePacketListenerImpl { @Shadow @Final - private ClientConnection connection; + private Connection connection; - @Inject(method = "joinServerSession", at = @At("HEAD"), cancellable = true) - private void onlyVerifySessionInOnlineMode(String serverId, CallbackInfoReturnable cir) { - final IClientConnection mixinClientConnection = (IClientConnection) connection; + @Inject(method = "authenticateServer", at = @At("HEAD"), cancellable = true) + private void onlyVerifySessionInOnlineMode(String serverId, CallbackInfoReturnable cir) { + final IConnection mixinClientConnection = (IConnection) connection; if (mixinClientConnection.viaFabricPlus$getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_6_4)) { // We are in the 1.7 -> 1.6 protocol, so we need to skip the joinServer call // if the server is in offline mode, due the packet changes <-> networking changes diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnectScreen_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnectScreen_1.java index 99fb38303..a7f68247c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnectScreen_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnectScreen_1.java @@ -26,7 +26,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1") +@Mixin(targets = "net.minecraft.client.gui.screens.ConnectScreen$1") public abstract class MixinConnectScreen_1 { @WrapOperation(method = "run", at = @At(value = "INVOKE", target = "Ljava/lang/Exception;getMessage()Ljava/lang/String;", remap = false)) diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientConnection.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnection.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientConnection.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnection.java index 73bffc8da..601f784f6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientConnection.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnection.java @@ -25,8 +25,8 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; -import com.viaversion.viafabricplus.injection.access.base.IMultiValueDebugSampleLogImpl; +import com.viaversion.viafabricplus.injection.access.base.IConnection; +import com.viaversion.viafabricplus.injection.access.base.ILocalSampleLogger; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.netty.ViaFabricPlusVLLegacyPipeline; import com.viaversion.vialoader.netty.CompressionReorderEvent; @@ -48,12 +48,12 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import javax.crypto.Cipher; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.encryption.PacketDecryptor; -import net.minecraft.network.encryption.PacketEncryptor; -import net.minecraft.network.handler.HandlerNames; -import net.minecraft.network.packet.Packet; -import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl; +import net.minecraft.network.Connection; +import net.minecraft.network.CipherDecoder; +import net.minecraft.network.CipherEncoder; +import net.minecraft.network.HandlerNames; +import net.minecraft.network.protocol.Packet; +import net.minecraft.util.debugchart.LocalSampleLogger; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import net.raphimc.viabedrock.protocol.RakNetStatusProtocol; import net.raphimc.vialegacy.api.LegacyProtocolVersion; @@ -68,8 +68,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ClientConnection.class) -public abstract class MixinClientConnection extends SimpleChannelInboundHandler> implements IClientConnection { +@Mixin(Connection.class) +public abstract class MixinConnection extends SimpleChannelInboundHandler> implements IConnection { @Shadow public Channel channel; @@ -89,13 +89,13 @@ public abstract class MixinClientConnection extends SimpleChannelInboundHandler< @Unique private Cipher viaFabricPlus$decryptionCipher; - @Inject(method = "setCompressionThreshold", at = @At("RETURN")) + @Inject(method = "setupCompression", at = @At("RETURN")) private void reorderCompression(int compressionThreshold, boolean rejectBad, CallbackInfo ci) { // Compression enabled and elements put into pipeline, move via handlers channel.pipeline().fireUserEventTriggered(CompressionReorderEvent.INSTANCE); } - @Inject(method = "setupEncryption", at = @At("HEAD"), cancellable = true) + @Inject(method = "setEncryptionKey", at = @At("HEAD"), cancellable = true) private void storeDecryptionCipher(Cipher decryptionCipher, Cipher encryptionCipher, CallbackInfo ci) { if (this.viaFabricPlus$serverVersion != null /* This happens when opening a lan server and people are joining */ && this.viaFabricPlus$serverVersion.olderThanOrEqualTo(LegacyProtocolVersion.r1_6_4)) { // Minecraft's encryption code is bad for us, we need to reorder the pipeline @@ -112,7 +112,7 @@ private void storeDecryptionCipher(Cipher decryptionCipher, Cipher encryptionCip } this.encrypted = true; - this.channel.pipeline().addBefore(VLLegacyPipeline.VIALEGACY_PRE_NETTY_LENGTH_REMOVER_NAME, HandlerNames.ENCRYPT, new PacketEncryptor(encryptionCipher)); + this.channel.pipeline().addBefore(VLLegacyPipeline.VIALEGACY_PRE_NETTY_LENGTH_REMOVER_NAME, HandlerNames.ENCRYPT, new CipherEncoder(encryptionCipher)); } } @@ -129,23 +129,23 @@ private boolean dontCallChannelActiveTwice(SimpleChannelInboundHandler return !BedrockProtocolVersion.bedrockLatest.equals(this.viaFabricPlus$serverVersion); } - @Inject(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)Lnet/minecraft/network/ClientConnection;", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;")) - private static void setTargetVersion(InetSocketAddress address, boolean useEpoll, MultiValueDebugSampleLogImpl packetSizeLog, CallbackInfoReturnable cir, @Local ClientConnection clientConnection) { + @Inject(method = "connectToServer(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/debugchart/LocalSampleLogger;)Lnet/minecraft/network/Connection;", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/Connection;)Lio/netty/channel/ChannelFuture;")) + private static void setTargetVersion(InetSocketAddress address, boolean useEpoll, LocalSampleLogger packetSizeLog, CallbackInfoReturnable cir, @Local Connection clientConnection) { // Set the target version stored in the PerformanceLog field to the ClientConnection instance - if (packetSizeLog instanceof IMultiValueDebugSampleLogImpl mixinMultiValueDebugSampleLogImpl && mixinMultiValueDebugSampleLogImpl.viaFabricPlus$getForcedVersion() != null) { - ((IClientConnection) clientConnection).viaFabricPlus$setTargetVersion(mixinMultiValueDebugSampleLogImpl.viaFabricPlus$getForcedVersion()); + if (packetSizeLog instanceof ILocalSampleLogger mixinMultiValueDebugSampleLogImpl && mixinMultiValueDebugSampleLogImpl.viaFabricPlus$getForcedVersion() != null) { + ((IConnection) clientConnection).viaFabricPlus$setTargetVersion(mixinMultiValueDebugSampleLogImpl.viaFabricPlus$getForcedVersion()); } } - @WrapWithCondition(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)Lnet/minecraft/network/ClientConnection;", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;resetPacketSizeLog(Lnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)V")) - private static boolean dontSetPerformanceLog(ClientConnection instance, MultiValueDebugSampleLogImpl packetSizeLog) { + @WrapWithCondition(method = "connectToServer(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/debugchart/LocalSampleLogger;)Lnet/minecraft/network/Connection;", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;setBandwidthLogger(Lnet/minecraft/util/debugchart/LocalSampleLogger;)V")) + private static boolean dontSetPerformanceLog(Connection instance, LocalSampleLogger packetSizeLog) { // We need to restore vanilla behaviour since we use the PerformanceLog as a way to store the target version - return !(packetSizeLog instanceof IMultiValueDebugSampleLogImpl mixinMultiValueDebugSampleLogImpl) || mixinMultiValueDebugSampleLogImpl.viaFabricPlus$getForcedVersion() == null; + return !(packetSizeLog instanceof ILocalSampleLogger mixinMultiValueDebugSampleLogImpl) || mixinMultiValueDebugSampleLogImpl.viaFabricPlus$getForcedVersion() == null; } - @Inject(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;", at = @At("HEAD")) - private static void setTargetVersion(InetSocketAddress address, boolean useEpoll, ClientConnection connection, CallbackInfoReturnable cir) { - ProtocolVersion targetVersion = ((IClientConnection) connection).viaFabricPlus$getTargetVersion(); + @Inject(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/Connection;)Lio/netty/channel/ChannelFuture;", at = @At("HEAD")) + private static void setTargetVersion(InetSocketAddress address, boolean useEpoll, Connection connection, CallbackInfoReturnable cir) { + ProtocolVersion targetVersion = ((IConnection) connection).viaFabricPlus$getTargetVersion(); if (targetVersion == null) { // No server specific override targetVersion = ProtocolTranslator.getTargetVersion(); } @@ -153,21 +153,21 @@ private static void setTargetVersion(InetSocketAddress address, boolean useEpoll targetVersion = ProtocolTranslator.NATIVE_VERSION; } - ((IClientConnection) connection).viaFabricPlus$setTargetVersion(targetVersion); + ((IConnection) connection).viaFabricPlus$setTargetVersion(targetVersion); } - @WrapOperation(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;", at = @At(value = "INVOKE", target = "Lio/netty/bootstrap/Bootstrap;channel(Ljava/lang/Class;)Lio/netty/bootstrap/AbstractBootstrap;", remap = false)) - private static AbstractBootstrap useRakNetChannelFactory(Bootstrap instance, Class channelTypeClass, Operation> original, @Local(argsOnly = true) ClientConnection clientConnection) { - if (BedrockProtocolVersion.bedrockLatest.equals(((IClientConnection) clientConnection).viaFabricPlus$getTargetVersion())) { + @WrapOperation(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/Connection;)Lio/netty/channel/ChannelFuture;", at = @At(value = "INVOKE", target = "Lio/netty/bootstrap/Bootstrap;channel(Ljava/lang/Class;)Lio/netty/bootstrap/AbstractBootstrap;", remap = false)) + private static AbstractBootstrap useRakNetChannelFactory(Bootstrap instance, Class channelTypeClass, Operation> original, @Local(argsOnly = true) Connection clientConnection) { + if (BedrockProtocolVersion.bedrockLatest.equals(((IConnection) clientConnection).viaFabricPlus$getTargetVersion())) { return instance.channelFactory(channelTypeClass == EpollSocketChannel.class ? RakChannelFactory.client(EpollDatagramChannel.class) : RakChannelFactory.client(NioDatagramChannel.class)); } else { return original.call(instance, channelTypeClass); } } - @Redirect(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;", at = @At(value = "INVOKE", target = "Lio/netty/bootstrap/Bootstrap;connect(Ljava/net/InetAddress;I)Lio/netty/channel/ChannelFuture;", remap = false)) - private static ChannelFuture useRakNetPingHandlers(Bootstrap instance, InetAddress inetHost, int inetPort, @Local(argsOnly = true) ClientConnection clientConnection, @Local(argsOnly = true) boolean isConnecting) { - if (BedrockProtocolVersion.bedrockLatest.equals(((IClientConnection) clientConnection).viaFabricPlus$getTargetVersion()) && !isConnecting) { + @Redirect(method = "connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/Connection;)Lio/netty/channel/ChannelFuture;", at = @At(value = "INVOKE", target = "Lio/netty/bootstrap/Bootstrap;connect(Ljava/net/InetAddress;I)Lio/netty/channel/ChannelFuture;", remap = false)) + private static ChannelFuture useRakNetPingHandlers(Bootstrap instance, InetAddress inetHost, int inetPort, @Local(argsOnly = true) Connection clientConnection, @Local(argsOnly = true) boolean isConnecting) { + if (BedrockProtocolVersion.bedrockLatest.equals(((IConnection) clientConnection).viaFabricPlus$getTargetVersion()) && !isConnecting) { // Bedrock edition / RakNet has different handlers for pinging a server return instance.register().syncUninterruptibly().channel().bind(new InetSocketAddress(0)).addListeners(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE, (ChannelFutureListener) f -> { if (f.isSuccess()) { @@ -179,7 +179,7 @@ private static ChannelFuture useRakNetPingHandlers(Bootstrap instance, InetAddre f.channel().pipeline().remove(VLPipeline.VIABEDROCK_PACKET_CODEC_NAME); f.channel().pipeline().remove(HandlerNames.SPLITTER); - UserConnection user = ((IClientConnection) clientConnection).viaFabricPlus$getUserConnection(); + UserConnection user = ((IConnection) clientConnection).viaFabricPlus$getUserConnection(); user.getProtocolInfo().getPipeline().add(RakNetStatusProtocol.INSTANCE); } }); @@ -196,7 +196,7 @@ private static ChannelFuture useRakNetPingHandlers(Bootstrap instance, InetAddre this.encrypted = true; // Enabling the decryption side for 1.6.4 if the 1.7 -> 1.6 protocol tells us to do - this.channel.pipeline().addBefore(VLLegacyPipeline.VIALEGACY_PRE_NETTY_LENGTH_PREPENDER_NAME, HandlerNames.DECRYPT, new PacketDecryptor(this.viaFabricPlus$decryptionCipher)); + this.channel.pipeline().addBefore(VLLegacyPipeline.VIALEGACY_PRE_NETTY_LENGTH_PREPENDER_NAME, HandlerNames.DECRYPT, new CipherDecoder(this.viaFabricPlus$decryptionCipher)); } @Override diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientConnection_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnection_1.java similarity index 85% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientConnection_1.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnection_1.java index 74df9305e..766ed7dd7 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinClientConnection_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinConnection_1.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import io.netty.channel.Channel; -import net.minecraft.network.ClientConnection; +import net.minecraft.network.Connection; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -31,16 +31,16 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(targets = "net.minecraft.network.ClientConnection$1") -public abstract class MixinClientConnection_1 { +@Mixin(targets = "net.minecraft.network.Connection$1") +public abstract class MixinConnection_1 { @Final @Shadow - ClientConnection field_11663; + Connection val$connection; @Inject(method = "initChannel", at = @At("RETURN")) private void injectViaIntoPipeline(Channel channel, CallbackInfo ci) { - ProtocolTranslator.injectViaPipeline(this.field_11663, channel); + ProtocolTranslator.injectViaPipeline(this.val$connection, channel); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMinecraft.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMinecraft.java index 54585f22e..6d87a4ac8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMinecraft.java @@ -23,21 +23,21 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.ClientConnection; -import net.minecraft.resource.ResourcePackManager; -import net.minecraft.server.SaveLoader; -import net.minecraft.world.level.storage.LevelStorage; +import net.minecraft.client.Minecraft; +import net.minecraft.network.Connection; +import net.minecraft.server.packs.repository.PackRepository; +import net.minecraft.server.WorldStem; +import net.minecraft.world.level.storage.LevelStorageSource; 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) -public final class MixinMinecraftClient { +@Mixin(Minecraft.class) +public final class MixinMinecraft { - @Inject(method = "startIntegratedServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/lang/String;ILnet/minecraft/network/listener/ClientLoginPacketListener;)V")) - private void disableProtocolTranslator(LevelStorage.Session session, ResourcePackManager dataPackManager, SaveLoader saveLoader, boolean newWorld, CallbackInfo ci, @Local ClientConnection clientConnection) { + @Inject(method = "doWorldLoad", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;initiateServerboundPlayConnection(Ljava/lang/String;ILnet/minecraft/network/protocol/login/ClientLoginPacketListener;)V")) + private void disableProtocolTranslator(LevelStorageSource.LevelStorageAccess session, PackRepository dataPackManager, WorldStem saveLoader, boolean newWorld, CallbackInfo ci, @Local Connection clientConnection) { ProtocolTranslator.setTargetVersion(ProtocolTranslator.NATIVE_VERSION, true); ProtocolTranslator.injectPreviousVersionReset(clientConnection.channel); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinGameOptions.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinOptions.java similarity index 91% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinGameOptions.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinOptions.java index 62f79450a..61d154f9d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinGameOptions.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinOptions.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.base.connection; import com.viaversion.viafabricplus.ViaFabricPlusImpl; -import net.minecraft.client.option.GameOptions; +import net.minecraft.client.Options; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; -@Mixin(GameOptions.class) -public abstract class MixinGameOptions { +@Mixin(Options.class) +public abstract class MixinOptions { @Shadow public boolean useNativeTransport; @@ -38,7 +38,7 @@ public abstract class MixinGameOptions { * @reason Needed as an indicator if the client wants to ping a server or connect to a server */ @Overwrite - public boolean shouldUseNativeTransport() { + public boolean useNativeTransport() { if (!this.useNativeTransport) { ViaFabricPlusImpl.INSTANCE.getLogger().error("Native transport is disabled, but enabling it anyway since we use it as an indicator if the client wants to ping a server or connect to a server."); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMultiplayerServerListPinger.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinServerStatusPinger.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMultiplayerServerListPinger.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinServerStatusPinger.java index 1c73618f9..ba3a44def 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinMultiplayerServerListPinger.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/connection/MixinServerStatusPinger.java @@ -24,33 +24,33 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.injection.access.base.IMultiValueDebugSampleLogImpl; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.ILocalSampleLogger; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import java.net.InetSocketAddress; -import net.minecraft.client.network.MultiplayerServerListPinger; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.network.ClientConnection; -import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl; +import net.minecraft.client.multiplayer.ServerStatusPinger; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.network.Connection; +import net.minecraft.util.debugchart.LocalSampleLogger; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(MultiplayerServerListPinger.class) -public final class MixinMultiplayerServerListPinger { +@Mixin(ServerStatusPinger.class) +public final class MixinServerStatusPinger { - @WrapOperation(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;)Lnet/minecraft/network/ClientConnection;")) - private ClientConnection setForcedVersion(InetSocketAddress address, boolean useEpoll, MultiValueDebugSampleLogImpl packetSizeLog, Operation original, @Local(argsOnly = true) ServerInfo serverInfo) { - final IServerInfo mixinServerInfo = (IServerInfo) serverInfo; + @WrapOperation(method = "pingServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;connectToServer(Ljava/net/InetSocketAddress;ZLnet/minecraft/util/debugchart/LocalSampleLogger;)Lnet/minecraft/network/Connection;")) + private Connection setForcedVersion(InetSocketAddress address, boolean useEpoll, LocalSampleLogger packetSizeLog, Operation original, @Local(argsOnly = true) ServerData serverInfo) { + final IServerData mixinServerInfo = (IServerData) serverInfo; if (mixinServerInfo.viaFabricPlus$forcedVersion() != null && !mixinServerInfo.viaFabricPlus$passedDirectConnectScreen()) { // We use the PerformanceLog field to store the forced version since it's always null when pinging a server // So we can create a dummy instance, store the forced version in it and later destroy the instance again // To avoid any side effects, we also support cases where a mod is also creating a PerformanceLog instance if (packetSizeLog == null) { - packetSizeLog = new MultiValueDebugSampleLogImpl(1); + packetSizeLog = new LocalSampleLogger(1); } // Attach the forced version to the PerformanceLog instance - ((IMultiValueDebugSampleLogImpl) packetSizeLog).viaFabricPlus$setForcedVersion(mixinServerInfo.viaFabricPlus$forcedVersion()); + ((ILocalSampleLogger) packetSizeLog).viaFabricPlus$setForcedVersion(mixinServerInfo.viaFabricPlus$forcedVersion()); mixinServerInfo.viaFabricPlus$passDirectConnectScreen(false); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinClientConnection.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinConnection.java similarity index 94% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinClientConnection.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinConnection.java index 8cfc64c30..2119808ad 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinClientConnection.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinConnection.java @@ -26,14 +26,14 @@ import io.netty.channel.ChannelHandlerContext; import java.net.ConnectException; import java.net.SocketException; -import net.minecraft.network.ClientConnection; +import net.minecraft.network.Connection; 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(ClientConnection.class) -public abstract class MixinClientConnection { +@Mixin(Connection.class) +public abstract class MixinConnection { @Inject(method = "exceptionCaught", at = @At("HEAD")) private void printNetworkingErrors(ChannelHandlerContext context, Throwable ex, CallbackInfo ci) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinDebugHudEntries.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinDebugScreenEntries.java similarity index 60% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinDebugHudEntries.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinDebugScreenEntries.java index fa3e62fcf..5828216b5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinDebugHudEntries.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinDebugScreenEntries.java @@ -24,11 +24,11 @@ import com.viaversion.viafabricplus.base.VFPDebugHudEntry; import java.util.HashMap; import java.util.Map; -import net.minecraft.client.gui.hud.debug.DebugHudEntries; -import net.minecraft.client.gui.hud.debug.DebugHudEntry; -import net.minecraft.client.gui.hud.debug.DebugHudEntryVisibility; -import net.minecraft.client.gui.hud.debug.DebugProfileType; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.components.debug.DebugScreenEntries; +import net.minecraft.client.gui.components.debug.DebugScreenEntry; +import net.minecraft.client.gui.components.debug.DebugScreenEntryStatus; +import net.minecraft.client.gui.components.debug.DebugScreenProfile; +import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -37,27 +37,27 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(DebugHudEntries.class) -public abstract class MixinDebugHudEntries { +@Mixin(DebugScreenEntries.class) +public abstract class MixinDebugScreenEntries { @Mutable @Shadow @Final - public static Map> PROFILES; + public static Map> PROFILES; @Shadow - private static Identifier register(final Identifier id, final DebugHudEntry entry) { + private static ResourceLocation register(final ResourceLocation id, final DebugScreenEntry entry) { return null; } @Inject(method = "", at = @At("RETURN")) private static void addViaFabricPlusEntry(CallbackInfo ci) { - final Identifier id = register(VFPDebugHudEntry.ID, new VFPDebugHudEntry()); - final Map> profiles = new HashMap<>(); - for (Map.Entry> entry : PROFILES.entrySet()) { - final Map entries = new HashMap<>(entry.getValue()); - if (entry.getKey() == DebugProfileType.DEFAULT) { - entries.put(id, DebugHudEntryVisibility.IN_F3); + final ResourceLocation id = register(VFPDebugHudEntry.ID, new VFPDebugHudEntry()); + final Map> profiles = new HashMap<>(); + for (Map.Entry> entry : PROFILES.entrySet()) { + final Map entries = new HashMap<>(entry.getValue()); + if (entry.getKey() == DebugScreenProfile.DEFAULT) { + entries.put(id, DebugScreenEntryStatus.IN_F3); } profiles.put(entry.getKey(), entries); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerInfo.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerData.java similarity index 79% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerInfo.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerData.java index c4acbf916..919749a4a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerInfo.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerData.java @@ -22,11 +22,11 @@ package com.viaversion.viafabricplus.injection.mixin.base.integration; import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.save.impl.SettingsSave; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.nbt.CompoundTag; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -35,8 +35,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ServerInfo.class) -public abstract class MixinServerInfo implements IServerInfo { +@Mixin(ServerData.class) +public abstract class MixinServerData implements IServerData { @Shadow public String name; @@ -50,26 +50,26 @@ public abstract class MixinServerInfo implements IServerInfo { @Unique private ProtocolVersion viaFabricPlus$translatingVersion; - @Inject(method = "toNbt", at = @At("TAIL")) - private void saveForcedVersion(CallbackInfoReturnable cir, @Local NbtCompound nbtCompound) { + @Inject(method = "write", at = @At("TAIL")) + private void saveForcedVersion(CallbackInfoReturnable cir, @Local CompoundTag nbtCompound) { if (viaFabricPlus$forcedVersion != null) { nbtCompound.putString("viafabricplus_forcedversion", viaFabricPlus$forcedVersion.getName()); } } - @Inject(method = "fromNbt", at = @At("TAIL")) - private static void loadForcedVersion(NbtCompound root, CallbackInfoReturnable cir, @Local ServerInfo serverInfo) { + @Inject(method = "read", at = @At("TAIL")) + private static void loadForcedVersion(CompoundTag root, CallbackInfoReturnable cir, @Local ServerData serverInfo) { if (root.contains("viafabricplus_forcedversion")) { - final ProtocolVersion version = SettingsSave.protocolVersionByName(root.getString("viafabricplus_forcedversion", null)); + final ProtocolVersion version = SettingsSave.protocolVersionByName(root.getStringOr("viafabricplus_forcedversion", null)); if (version != null) { - ((IServerInfo) serverInfo).viaFabricPlus$forceVersion(version); + ((IServerData) serverInfo).viaFabricPlus$forceVersion(version); } } } - @Inject(method = "copyFrom", at = @At("RETURN")) - private void syncForcedVersion(ServerInfo serverInfo, CallbackInfo ci) { - viaFabricPlus$forceVersion(((IServerInfo) serverInfo).viaFabricPlus$forcedVersion()); + @Inject(method = "copyNameIconFrom", at = @At("RETURN")) + private void syncForcedVersion(ServerData serverInfo, CallbackInfo ci) { + viaFabricPlus$forceVersion(((IServerData) serverInfo).viaFabricPlus$forcedVersion()); } @Override diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinMultiplayerServerListPinger_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerStatusPinger_1.java similarity index 58% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinMultiplayerServerListPinger_1.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerStatusPinger_1.java index 5ad7249cb..08de86cca 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinMultiplayerServerListPinger_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/MixinServerStatusPinger_1.java @@ -21,14 +21,14 @@ package com.viaversion.viafabricplus.injection.mixin.base.integration; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IConnection; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import net.minecraft.SharedConstants; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.listener.ClientQueryPacketListener; -import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.status.ClientStatusPacketListener; +import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -36,33 +36,33 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(targets = "net.minecraft.client.network.MultiplayerServerListPinger$1") -public abstract class MixinMultiplayerServerListPinger_1 implements ClientQueryPacketListener { +@Mixin(targets = "net.minecraft.client.multiplayer.ServerStatusPinger$1") +public abstract class MixinServerStatusPinger_1 implements ClientStatusPacketListener { @Final @Shadow - ServerInfo field_3776; + ServerData val$data; @Shadow @Final - ClientConnection field_3774; + Connection val$connection; - @Inject(method = "onResponse(Lnet/minecraft/network/packet/s2c/query/QueryResponseS2CPacket;)V", at = @At("HEAD")) - private void trackTranslatingState(QueryResponseS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleStatusResponse", at = @At("HEAD")) + private void trackTranslatingState(ClientboundStatusResponsePacket packet, CallbackInfo ci) { // If ViaVersion is translating the current connection, we track the target version, and it's state in the server info // So we can later draw this information when hovering over the ping bar in the server list - if (field_3774 instanceof IClientConnection mixinClientConnection) { - ((IServerInfo) field_3776).viaFabricPlus$setTranslatingVersion(mixinClientConnection.viaFabricPlus$getTargetVersion()); + if (val$connection instanceof IConnection mixinClientConnection) { + ((IServerData) val$data).viaFabricPlus$setTranslatingVersion(mixinClientConnection.viaFabricPlus$getTargetVersion()); } } - @Inject(method = "onResponse", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V", shift = At.Shift.AFTER)) + @Inject(method = "handleStatusResponse", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V", shift = At.Shift.AFTER)) private void fixVersionComparison(CallbackInfo ci) { - final ProtocolVersion version = ((IClientConnection) this.field_3774).viaFabricPlus$getTargetVersion(); + final ProtocolVersion version = ((IConnection) this.val$connection).viaFabricPlus$getTargetVersion(); // If the server is compatible with the client, we set the protocol version to the client version - if (version != null && version.getVersion() == this.field_3776.protocolVersion) { - this.field_3776.protocolVersion = SharedConstants.getProtocolVersion(); + if (version != null && version.getVersion() == this.val$data.protocol) { + this.val$data.protocol = SharedConstants.getProtocolVersion(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConfirmScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConfirmScreen.java index 9f59063d6..3e6ddf91a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConfirmScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConfirmScreen.java @@ -22,26 +22,26 @@ package com.viaversion.viafabricplus.injection.mixin.base.integration.bedrock; import com.viaversion.viafabricplus.injection.access.base.bedrock.IConfirmScreen; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.ConfirmScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.MultilineTextWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.ConfirmScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.MultiLineTextWidget; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; @Mixin(ConfirmScreen.class) public abstract class MixinConfirmScreen extends Screen implements IConfirmScreen { - public MixinConfirmScreen(final Text title) { + public MixinConfirmScreen(final Component title) { super(title); } @Override - public void viaFabricPlus$updateMessage(Text message) { - for (final Element element : children()) { - if (element instanceof final MultilineTextWidget textWidget) { + public void viaFabricPlus$updateMessage(Component message) { + for (final GuiEventListener element : children()) { + if (element instanceof final MultiLineTextWidget textWidget) { textWidget.setMessage(message); - refreshWidgetPositions(); + repositionElements(); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConnectScreen_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConnectScreen_1.java index 6d2d5c9a2..8fc47cfd4 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConnectScreen_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinConnectScreen_1.java @@ -23,14 +23,14 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.ViaFabricPlusImpl; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; +import com.viaversion.viafabricplus.injection.access.base.IConnection; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.save.SaveManager; import com.viaversion.viaversion.api.connection.UserConnection; import java.io.IOException; import java.security.KeyPair; import java.util.UUID; -import net.minecraft.network.ClientConnection; +import net.minecraft.network.Connection; import net.raphimc.minecraftauth.bedrock.BedrockAuthManager; import net.raphimc.minecraftauth.bedrock.model.MinecraftCertificateChain; import net.raphimc.minecraftauth.bedrock.model.MinecraftMultiplayerToken; @@ -41,12 +41,12 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1") +@Mixin(targets = "net.minecraft.client.gui.screens.ConnectScreen$1") public abstract class MixinConnectScreen_1 { @Inject(method = "run", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelFuture;syncUninterruptibly()Lio/netty/channel/ChannelFuture;", remap = false, shift = At.Shift.AFTER)) - private void setupBedrockAccount(CallbackInfo ci, @Local ClientConnection clientConnection) throws IOException { - final UserConnection connection = ((IClientConnection) clientConnection).viaFabricPlus$getUserConnection(); + private void setupBedrockAccount(CallbackInfo ci, @Local Connection clientConnection) throws IOException { + final UserConnection connection = ((IConnection) clientConnection).viaFabricPlus$getUserConnection(); if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { final BedrockAuthManager bedrockSession = SaveManager.INSTANCE.getAccountsSave().getBedrockAccount(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinMultiplayerServerListPinger.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinServerStatusPinger.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinMultiplayerServerListPinger.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinServerStatusPinger.java index 534deaf96..61960c536 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinMultiplayerServerListPinger.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/bedrock/MixinServerStatusPinger.java @@ -24,21 +24,21 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.settings.impl.BedrockSettings; -import net.minecraft.client.network.MultiplayerServerListPinger; -import net.minecraft.client.network.ServerAddress; -import net.minecraft.client.network.ServerInfo; +import net.minecraft.client.multiplayer.ServerStatusPinger; +import net.minecraft.client.multiplayer.resolver.ServerAddress; +import net.minecraft.client.multiplayer.ServerData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(MultiplayerServerListPinger.class) -public abstract class MixinMultiplayerServerListPinger { +@Mixin(ServerStatusPinger.class) +public abstract class MixinServerStatusPinger { - @WrapOperation(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ServerAddress;parse(Ljava/lang/String;)Lnet/minecraft/client/network/ServerAddress;")) - private ServerAddress replaceDefaultPort(String address, Operation original, @Local(argsOnly = true) ServerInfo entry) { + @WrapOperation(method = "pingServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/resolver/ServerAddress;parseString(Ljava/lang/String;)Lnet/minecraft/client/multiplayer/resolver/ServerAddress;")) + private ServerAddress replaceDefaultPort(String address, Operation original, @Local(argsOnly = true) ServerData entry) { // Replace port when pinging the server and the forced version is set - return original.call(BedrockSettings.replaceDefaultPort(address, ((IServerInfo) entry).viaFabricPlus$forcedVersion())); + return original.call(BedrockSettings.replaceDefaultPort(address, ((IServerData) entry).viaFabricPlus$forcedVersion())); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/MixinMinecraft.java similarity index 87% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/MixinMinecraft.java index 7ff5cd699..27c9f9c2a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/event/MixinMinecraft.java @@ -23,18 +23,18 @@ import com.viaversion.viafabricplus.api.events.LoadingCycleCallback; import com.viaversion.viafabricplus.base.Events; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.RunArgs; +import net.minecraft.client.Minecraft; +import net.minecraft.client.main.GameConfig; 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) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { @Inject(method = "", at = @At("RETURN")) - private void callPostGameLoadEvent(RunArgs args, CallbackInfo ci) { + private void callPostGameLoadEvent(GameConfig args, CallbackInfo ci) { Events.LOADING_CYCLE.invoker().onLoadCycle(LoadingCycleCallback.LoadingCycle.POST_GAME_LOAD); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/MixinClientCommonNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/MixinClientCommonPacketListenerImpl.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/MixinClientCommonNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/MixinClientCommonPacketListenerImpl.java index cd6c9b873..634dd4a04 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/MixinClientCommonNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/integration/sync_tasks/MixinClientCommonPacketListenerImpl.java @@ -23,20 +23,20 @@ import com.viaversion.viafabricplus.base.sync_tasks.DataCustomPayload; import com.viaversion.viafabricplus.base.sync_tasks.SyncTasks; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.packet.s2c.common.CustomPayloadS2CPacket; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; 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(value = ClientCommonNetworkHandler.class, priority = 1 /* Has to be applied before Fabric's Networking API, so it doesn't cancel our custom-payload packets */) -public abstract class MixinClientCommonNetworkHandler { +@Mixin(value = ClientCommonPacketListenerImpl.class, priority = 1 /* Has to be applied before Fabric's Networking API, so it doesn't cancel our custom-payload packets */) +public abstract class MixinClientCommonPacketListenerImpl { - @Inject(method = "onCustomPayload(Lnet/minecraft/network/packet/s2c/common/CustomPayloadS2CPacket;)V", at = @At("HEAD"), cancellable = true) - private void handleSyncTask(CustomPayloadS2CPacket packet, CallbackInfo ci) { - if (packet.payload() instanceof DataCustomPayload(PacketByteBuf buf)) { + @Inject(method = "handleCustomPayload(Lnet/minecraft/network/protocol/common/ClientboundCustomPayloadPacket;)V", at = @At("HEAD"), cancellable = true) + private void handleSyncTask(ClientboundCustomPayloadPacket packet, CallbackInfo ci) { + if (packet.payload() instanceof DataCustomPayload(FriendlyByteBuf buf)) { SyncTasks.handleSyncTask(buf); ci.cancel(); // Cancel the packet, so it doesn't get processed by the client } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinConnectScreen_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinConnectScreen_1.java index b34a0c2b4..6a6545a59 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinConnectScreen_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinConnectScreen_1.java @@ -23,7 +23,7 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.impl.provider.vialegacy.ViaFabricPlusClassicMPPassProvider; import com.viaversion.viafabricplus.protocoltranslator.util.ProtocolVersionDetector; @@ -35,12 +35,12 @@ import java.net.ConnectException; import java.net.InetSocketAddress; import java.util.Optional; -import net.minecraft.client.gui.screen.multiplayer.ConnectScreen; -import net.minecraft.client.network.ServerAddress; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.client.session.Session; -import net.minecraft.network.ClientConnection; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.ConnectScreen; +import net.minecraft.client.multiplayer.resolver.ServerAddress; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.client.User; +import net.minecraft.network.Connection; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -48,16 +48,16 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1") +@Mixin(targets = "net.minecraft.client.gui.screens.ConnectScreen$1") public abstract class MixinConnectScreen_1 { @Shadow @Final - ServerInfo field_40415; + ServerData val$server; @Final @Shadow - ServerAddress field_33737; + ServerAddress val$hostAndPort; @Shadow @Final @@ -69,7 +69,7 @@ public abstract class MixinConnectScreen_1 { @WrapOperation(method = "run", at = @At(value = "INVOKE", target = "Ljava/util/Optional;get()Ljava/lang/Object;", remap = false)) private Object setServerInfoAndProtocolVersion(Optional instance, Operation original) throws Exception { final InetSocketAddress address = (InetSocketAddress) original.call(instance); - final IServerInfo mixinServerInfo = (IServerInfo) this.field_40415; + final IServerData mixinServerInfo = (IServerData) this.val$server; ProtocolVersion targetVersion = ProtocolTranslator.getTargetVersion(); if (mixinServerInfo.viaFabricPlus$forcedVersion() != null && !mixinServerInfo.viaFabricPlus$passedDirectConnectScreen()) { @@ -78,14 +78,14 @@ private Object setServerInfoAndProtocolVersion(Optional insta } if (targetVersion == ProtocolTranslator.AUTO_DETECT_PROTOCOL) { // If the server got already pinged, try to use that version if it's valid. Otherwise, perform auto-detect - final boolean serverPinged = this.field_40415.getStatus() == ServerInfo.Status.SUCCESSFUL || this.field_40415.getStatus() == ServerInfo.Status.INCOMPATIBLE; + final boolean serverPinged = this.val$server.state() == ServerData.State.SUCCESSFUL || this.val$server.state() == ServerData.State.INCOMPATIBLE; if (serverPinged) { - targetVersion = ProtocolVersion.getProtocol(this.field_40415.protocolVersion); + targetVersion = ProtocolVersion.getProtocol(this.val$server.protocol); } if (!serverPinged || !targetVersion.isKnown()) { - this.field_2416.setStatus(Text.translatable("base.viafabricplus.detecting_server_version")); + this.field_2416.updateStatus(Component.translatable("base.viafabricplus.detecting_server_version")); try { - targetVersion = ProtocolVersionDetector.get(this.field_33737, address, ProtocolTranslator.NATIVE_VERSION); + targetVersion = ProtocolVersionDetector.get(this.val$hostAndPort, address, ProtocolTranslator.NATIVE_VERSION); } catch (final ConnectException ignored) { // Don't let this one through as not relevant } @@ -97,22 +97,22 @@ private Object setServerInfoAndProtocolVersion(Optional insta return address; } - @WrapOperation(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/ClientConnection;)Lio/netty/channel/ChannelFuture;")) - private ChannelFuture resetProtocolVersionAfterDisconnect(InetSocketAddress address, boolean useEpoll, ClientConnection connection, Operation original) { + @WrapOperation(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;connect(Ljava/net/InetSocketAddress;ZLnet/minecraft/network/Connection;)Lio/netty/channel/ChannelFuture;")) + private ChannelFuture resetProtocolVersionAfterDisconnect(InetSocketAddress address, boolean useEpoll, Connection connection, Operation original) { final ChannelFuture future = original.call(address, useEpoll, connection); ProtocolTranslator.injectPreviousVersionReset(future.channel()); return future; } - @Redirect(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/session/Session;getUsername()Ljava/lang/String;")) - private String useClassiCubeUsername(Session instance) { + @Redirect(method = "run", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/User;getName()Ljava/lang/String;")) + private String useClassiCubeUsername(User instance) { if (this.viaFabricPlus$useClassiCubeAccount) { final CCAccount account = SaveManager.INSTANCE.getAccountsSave().getClassicubeAccount(); if (account != null) { return account.username(); } } - return instance.getUsername(); + return instance.getName(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinDirectConnectScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinDirectJoinServerScreen.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinDirectConnectScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinDirectJoinServerScreen.java index 3a33be34e..71bcf9ee1 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinDirectConnectScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinDirectJoinServerScreen.java @@ -23,19 +23,19 @@ import com.viaversion.viafabricplus.screen.impl.ProtocolSelectionScreen; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.multiplayer.DirectConnectScreen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.DirectJoinServerScreen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(DirectConnectScreen.class) -public abstract class MixinDirectConnectScreen extends Screen { +@Mixin(DirectJoinServerScreen.class) +public abstract class MixinDirectJoinServerScreen extends Screen { - public MixinDirectConnectScreen(Text title) { + public MixinDirectJoinServerScreen(Component title) { super(title); } @@ -46,9 +46,9 @@ private void addProtocolSelectionButton(CallbackInfo ci) { return; } - final ButtonWidget.Builder builder = ButtonWidget.builder(Text.of("ViaFabricPlus"), button -> ProtocolSelectionScreen.INSTANCE.open(this)).size(98, 20); - GeneralSettings.setOrientation(builder::position, buttonPosition, width, height); - this.addDrawableChild(builder.build()); + final Button.Builder builder = Button.builder(Component.nullToEmpty("ViaFabricPlus"), button -> ProtocolSelectionScreen.INSTANCE.open(this)).size(98, 20); + GeneralSettings.setOrientation(builder::pos, buttonPosition, width, height); + this.addRenderableWidget(builder.build()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinJoinMultiplayerScreen.java similarity index 63% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinJoinMultiplayerScreen.java index d87a1c398..666f853a8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinJoinMultiplayerScreen.java @@ -24,35 +24,35 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.screen.impl.ProtocolSelectionScreen; import com.viaversion.viafabricplus.settings.impl.BedrockSettings; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.network.ServerAddress; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.multiplayer.resolver.ServerAddress; +import net.minecraft.client.multiplayer.ServerData; +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; -@Mixin(MultiplayerScreen.class) -public abstract class MixinMultiplayerScreen extends Screen { +@Mixin(JoinMultiplayerScreen.class) +public abstract class MixinJoinMultiplayerScreen extends Screen { @Unique - private ButtonWidget viaFabricPlus$button; + private Button viaFabricPlus$button; - public MixinMultiplayerScreen(Text title) { + public MixinJoinMultiplayerScreen(Component title) { super(title); } - @Inject(method = "refreshWidgetPositions", at = @At("RETURN")) + @Inject(method = "repositionElements", at = @At("RETURN")) private void addProtocolSelectionButton(CallbackInfo ci) { final int buttonPosition = GeneralSettings.INSTANCE.multiplayerScreenButtonOrientation.getIndex(); if (buttonPosition == 0) { // Off @@ -60,18 +60,18 @@ private void addProtocolSelectionButton(CallbackInfo ci) { } if (viaFabricPlus$button == null) { - viaFabricPlus$button = ButtonWidget - .builder(Text.of("ViaFabricPlus"), button -> ProtocolSelectionScreen.INSTANCE.open(this)) + viaFabricPlus$button = Button + .builder(Component.nullToEmpty("ViaFabricPlus"), button -> ProtocolSelectionScreen.INSTANCE.open(this)) .size(98, 20) .build(); - this.addDrawableChild(viaFabricPlus$button); + this.addRenderableWidget(viaFabricPlus$button); } GeneralSettings.setOrientation(viaFabricPlus$button::setPosition, buttonPosition, width, height); } - @WrapOperation(method = "connect(Lnet/minecraft/client/network/ServerInfo;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ServerAddress;parse(Ljava/lang/String;)Lnet/minecraft/client/network/ServerAddress;")) - private ServerAddress replaceDefaultPort(String address, Operation original, @Local(argsOnly = true) ServerInfo entry) { - final IServerInfo mixinServerInfo = (IServerInfo) entry; + @WrapOperation(method = "join(Lnet/minecraft/client/multiplayer/ServerData;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/resolver/ServerAddress;parseString(Ljava/lang/String;)Lnet/minecraft/client/multiplayer/resolver/ServerAddress;")) + private ServerAddress replaceDefaultPort(String address, Operation original, @Local(argsOnly = true) ServerData entry) { + final IServerData mixinServerInfo = (IServerData) entry; ProtocolVersion version; if (mixinServerInfo.viaFabricPlus$passedDirectConnectScreen()) { @@ -82,9 +82,9 @@ private ServerAddress replaceDefaultPort(String address, Operation original) { - ((IServerInfo) entry).viaFabricPlus$passDirectConnectScreen(true); + @WrapOperation(method = "directJoinCallback", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/multiplayer/JoinMultiplayerScreen;join(Lnet/minecraft/client/multiplayer/ServerData;)V")) + private void storeDirectConnectionPhase(JoinMultiplayerScreen instance, ServerData entry, Operation original) { + ((IServerData) entry).viaFabricPlus$passDirectConnectScreen(true); original.call(instance, entry); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinLevelLoadingScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinLevelLoadingScreen.java index 908adbe2a..5c1b7ce1b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinLevelLoadingScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinLevelLoadingScreen.java @@ -25,10 +25,10 @@ import com.viaversion.viafabricplus.settings.impl.GeneralSettings; import com.viaversion.viafabricplus.util.ChatUtil; import com.viaversion.viaversion.api.connection.UserConnection; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.world.LevelLoadingScreen; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.LevelLoadingScreen; +import net.minecraft.network.chat.Component; import net.raphimc.vialegacy.protocol.classic.c0_28_30toa1_0_15.storage.ClassicProgressStorage; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -38,12 +38,12 @@ @Mixin(LevelLoadingScreen.class) public abstract class MixinLevelLoadingScreen extends Screen { - public MixinLevelLoadingScreen(Text title) { + public MixinLevelLoadingScreen(Component title) { super(title); } @Inject(method = "render", at = @At("RETURN")) - private void renderClassicProgress(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + private void renderClassicProgress(GuiGraphics context, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (GeneralSettings.INSTANCE.showClassicLoadingProgressInConnectScreen.getValue()) { // Check if ViaVersion is translating final UserConnection connection = ProtocolTranslator.getPlayNetworkUserConnection(); @@ -58,8 +58,8 @@ private void renderClassicProgress(DrawContext context, int mouseX, int mouseY, } // Draw the classic loading progress - context.drawCenteredTextWithShadow( - client.textRenderer, + context.drawCenteredString( + minecraft.font, ChatUtil.prefixText(classicProgressStorage.status), width / 2, height / 2 - 30, diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinAddServerScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinManageServerScreen.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinAddServerScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinManageServerScreen.java index be4ea892c..ca82246a7 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinAddServerScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinManageServerScreen.java @@ -21,16 +21,16 @@ package com.viaversion.viafabricplus.injection.mixin.base.ui; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.screen.impl.PerServerVersionScreen; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.multiplayer.AddServerScreen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.ManageServerScreen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,18 +39,18 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(AddServerScreen.class) -public abstract class MixinAddServerScreen extends Screen { +@Mixin(ManageServerScreen.class) +public abstract class MixinManageServerScreen extends Screen { @Shadow @Final - private ServerInfo server; + private ServerData serverData; @Shadow - private TextFieldWidget serverNameField; + private EditBox nameEdit; @Shadow - private TextFieldWidget addressField; + private EditBox ipEdit; @Unique private String viaFabricPlus$nameField; @@ -58,7 +58,7 @@ public abstract class MixinAddServerScreen extends Screen { @Unique private String viaFabricPlus$addressField; - public MixinAddServerScreen(Text title) { + public MixinManageServerScreen(Component title) { super(title); } @@ -69,27 +69,27 @@ private void addVersionSetterButton(CallbackInfo ci) { return; } - final IServerInfo mixinServerInfo = (IServerInfo) server; + final IServerData mixinServerInfo = (IServerData) serverData; final ProtocolVersion forcedVersion = mixinServerInfo.viaFabricPlus$forcedVersion(); // Restore input if the user cancels the version selection screen (or if the user is editing an existing server) if (viaFabricPlus$nameField != null && viaFabricPlus$addressField != null) { - this.serverNameField.setText(viaFabricPlus$nameField); - this.addressField.setText(viaFabricPlus$addressField); + this.nameEdit.setValue(viaFabricPlus$nameField); + this.ipEdit.setValue(viaFabricPlus$addressField); viaFabricPlus$nameField = null; viaFabricPlus$addressField = null; } - final ButtonWidget.Builder buttonBuilder = ButtonWidget.builder(forcedVersion == null ? Text.translatable("base.viafabricplus.set_version") : Text.of(forcedVersion.getName()), button -> { + final Button.Builder buttonBuilder = Button.builder(forcedVersion == null ? Component.translatable("base.viafabricplus.set_version") : Component.nullToEmpty(forcedVersion.getName()), button -> { // Store current input in case the user cancels the version selection - viaFabricPlus$nameField = serverNameField.getText(); - viaFabricPlus$addressField = addressField.getText(); + viaFabricPlus$nameField = nameEdit.getValue(); + viaFabricPlus$addressField = ipEdit.getValue(); - client.setScreen(new PerServerVersionScreen(this, mixinServerInfo::viaFabricPlus$forceVersion, mixinServerInfo::viaFabricPlus$forcedVersion)); + minecraft.setScreen(new PerServerVersionScreen(this, mixinServerInfo::viaFabricPlus$forceVersion, mixinServerInfo::viaFabricPlus$forcedVersion)); }).size(98, 20); - GeneralSettings.setOrientation(buttonBuilder::position, buttonPosition, width, height); - this.addDrawableChild(buttonBuilder.build()); + GeneralSettings.setOrientation(buttonBuilder::pos, buttonPosition, width, height); + this.addRenderableWidget(buttonBuilder.build()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerServerListWidget_ServerEntry.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerServerListWidget_ServerEntry.java index 5c9b29909..a4084d1ff 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerServerListWidget_ServerEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/base/ui/MixinMultiplayerServerListWidget_ServerEntry.java @@ -24,39 +24,39 @@ import com.google.common.collect.Lists; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.ArrayList; import java.util.List; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -@Mixin(MultiplayerServerListWidget.ServerEntry.class) +@Mixin(ServerSelectionList.OnlineServerEntry.class) public abstract class MixinMultiplayerServerListWidget_ServerEntry { @Shadow @Final - private ServerInfo server; + private ServerData serverData; - @WrapOperation(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/text/Text;II)V")) - private void drawTranslatingState(DrawContext instance, Text text, int x, int y, Operation original) { - final List tooltips = new ArrayList<>(); + @WrapOperation(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;setTooltipForNextFrame(Lnet/minecraft/network/chat/Component;II)V")) + private void drawTranslatingState(GuiGraphics instance, Component text, int x, int y, Operation original) { + final List tooltips = new ArrayList<>(); tooltips.add(text); if (GeneralSettings.INSTANCE.showAdvertisedServerVersion.getValue()) { - final ProtocolVersion version = ((IServerInfo) server).viaFabricPlus$translatingVersion(); + final ProtocolVersion version = ((IServerData) serverData).viaFabricPlus$translatingVersion(); if (version != null) { - tooltips.add(Text.translatable("base.viafabricplus.via_translates_to", version.getName() + " (" + version.getOriginalVersion() + ")")); - tooltips.add(Text.translatable("base.viafabricplus.server_version", server.version.getString() + " (" + server.protocolVersion + ")")); + tooltips.add(Component.translatable("base.viafabricplus.via_translates_to", version.getName() + " (" + version.getOriginalVersion() + ")")); + tooltips.add(Component.translatable("base.viafabricplus.server_version", serverData.version.getString() + " (" + serverData.protocol + ")")); } } - instance.drawTooltip(Lists.transform(tooltips, Text::asOrderedText), x, y); + instance.setTooltipForNextFrame(Lists.transform(tooltips, Component::getVisualOrderText), x, y); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinCCAuthenticationResponse.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinCCAuthenticationResponse.java index a5ce12c06..db648f60b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinCCAuthenticationResponse.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinCCAuthenticationResponse.java @@ -23,7 +23,7 @@ import de.florianmichael.classic4j.model.classicube.CCAuthenticationResponse; import de.florianmichael.classic4j.model.classicube.CCError; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -35,11 +35,11 @@ public abstract class MixinCCAuthenticationResponse { @Redirect(method = "getErrorDisplay", at = @At(value = "FIELD", target = "Lde/florianmichael/classic4j/model/classicube/CCError;description:Ljava/lang/String;")) private String mapTranslations(CCError instance) { return switch (instance) { - case TOKEN -> Text.translatable("classic4j_library.viafabricplus.error.token").getString(); - case USERNAME -> Text.translatable("classic4j_library.viafabricplus.error.username").getString(); - case PASSWORD -> Text.translatable("classic4j_library.viafabricplus.error.password").getString(); - case VERIFICATION -> Text.translatable("classic4j_library.viafabricplus.error.verification").getString(); - case LOGIN_CODE -> Text.translatable("classic4j_library.viafabricplus.error.logincode").getString(); + case TOKEN -> Component.translatable("classic4j_library.viafabricplus.error.token").getString(); + case USERNAME -> Component.translatable("classic4j_library.viafabricplus.error.username").getString(); + case PASSWORD -> Component.translatable("classic4j_library.viafabricplus.error.password").getString(); + case VERIFICATION -> Component.translatable("classic4j_library.viafabricplus.error.verification").getString(); + case LOGIN_CODE -> Component.translatable("classic4j_library.viafabricplus.error.logincode").getString(); }; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinTextFieldWidget.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinEditBox.java similarity index 73% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinTextFieldWidget.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinEditBox.java index 38e763c3b..e5fb8b7c6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinTextFieldWidget.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/classic4j/MixinEditBox.java @@ -21,10 +21,10 @@ package com.viaversion.viafabricplus.injection.mixin.compat.classic4j; -import com.viaversion.viafabricplus.injection.access.base.ITextFieldWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.input.CharInput; -import net.minecraft.util.StringHelper; +import com.viaversion.viafabricplus.injection.access.base.IEditBox; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.input.CharacterEvent; +import net.minecraft.util.StringUtil; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -34,23 +34,23 @@ * ClassicCube allows to use forbidden characters which the game doesn't allow in passwords, so we have to bypass this check * in order to allow the user to enter their password. */ -@Mixin(TextFieldWidget.class) -public abstract class MixinTextFieldWidget implements ITextFieldWidget { +@Mixin(EditBox.class) +public abstract class MixinEditBox implements IEditBox { @Unique private boolean viaFabricPlus$forbiddenCharactersUnlocked = false; - @Redirect(method = "charTyped", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/CharInput;isValidChar()Z")) - private boolean allowForbiddenCharacters(CharInput instance) { - return this.viaFabricPlus$forbiddenCharactersUnlocked || instance.isValidChar(); + @Redirect(method = "charTyped", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/CharacterEvent;isAllowedChatCharacter()Z")) + private boolean allowForbiddenCharacters(CharacterEvent instance) { + return this.viaFabricPlus$forbiddenCharactersUnlocked || instance.isAllowedChatCharacter(); } - @Redirect(method = "write", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/StringHelper;stripInvalidChars(Ljava/lang/String;)Ljava/lang/String;")) + @Redirect(method = "insertText", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/StringUtil;filterText(Ljava/lang/String;)Ljava/lang/String;")) private String allowForbiddenCharacters(String string) { if (this.viaFabricPlus$forbiddenCharactersUnlocked) { return string; } else { - return StringHelper.stripInvalidChars(string); + return StringUtil.filterText(string); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/lithium/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/lithium/MixinEntity.java index f3841a241..7992f981f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/lithium/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/compat/lithium/MixinEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; +import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/MixinStaticSound.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/MixinSoundBuffer.java similarity index 96% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/MixinStaticSound.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/MixinSoundBuffer.java index 2ebcd42e6..3657052f2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/MixinStaticSound.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/april_fools_8bit_sound/MixinSoundBuffer.java @@ -25,7 +25,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.nio.ByteBuffer; import javax.sound.sampled.AudioFormat; -import net.minecraft.client.sound.StaticSound; +import com.mojang.blaze3d.audio.SoundBuffer; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,8 +34,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(StaticSound.class) -public abstract class MixinStaticSound { +@Mixin(SoundBuffer.class) +public abstract class MixinSoundBuffer { @Shadow @Final diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinFont.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinFont.java new file mode 100644 index 000000000..d9848c824 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinFont.java @@ -0,0 +1,102 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.bedrock.allow_new_line; + +import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.util.FormattedCharSequence; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; +import net.raphimc.viabedrock.api.BedrockProtocolVersion; +import org.joml.Matrix4f; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Font.class) +public abstract class MixinFont { + + @Shadow + public abstract List split(FormattedText text, int width); + + @Shadow + public abstract String bidirectionalShaping(String text); + + @Shadow + @Final + public int lineHeight; + + @Shadow + public abstract int width(FormattedCharSequence text); + + @Shadow + public abstract boolean isBidirectional(); + + @Shadow + public abstract void drawInBatch(final FormattedCharSequence text, final float x, final float y, final int color, final boolean shadow, final Matrix4f matrix, final MultiBufferSource vertexConsumers, final Font.DisplayMode layerType, final int backgroundColor, final int light); + + @Inject(method = "drawInBatch(Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)V", at = @At("HEAD"), cancellable = true) + private void allowNewLines_String(String string, float x, float y, int color, boolean shadow, Matrix4f matrix, MultiBufferSource vertexConsumers, Font.DisplayMode layerType, int backgroundColor, int light, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { + final List lines = split(FormattedText.of(isBidirectional() ? this.bidirectionalShaping(string) : string), Integer.MAX_VALUE); + if (!lines.isEmpty()) { + ci.cancel(); + for (int i = 0, size = lines.size(); i < size; i++) { + this.drawInBatch(lines.get(i), x, y - (size * (lineHeight + 2)) + (i * (lineHeight + 2)), color, shadow, new Matrix4f(matrix), vertexConsumers, layerType, backgroundColor, light); + } + } + } + } + + @Inject(method = "drawInBatch(Lnet/minecraft/network/chat/Component;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)V", at = @At("HEAD"), cancellable = true) + private void allowNewLines_Text(Component text, float x, float y, int color, boolean shadow, Matrix4f matrix, MultiBufferSource vertexConsumers, Font.DisplayMode layerType, int backgroundColor, int light, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { + final List lines = split(text, Integer.MAX_VALUE); + if (!lines.isEmpty()) { + ci.cancel(); + for (int i = 0, size = lines.size(); i < size; i++) { + this.drawInBatch(lines.get(i), x, y - (lines.size() * (lineHeight + 2)) + (i * (lineHeight + 2)), color, shadow, new Matrix4f(matrix), vertexConsumers, layerType, backgroundColor, light); + } + } + } + } + + @Inject(method = "width(Lnet/minecraft/network/chat/FormattedText;)I", at = @At("HEAD"), cancellable = true) + private void allowNewLines_getWidth(FormattedText text, CallbackInfoReturnable cir) { + if (Minecraft.getInstance().level != null && ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { + int i = 0; + for (FormattedCharSequence wrapLine : this.split(text, Integer.MAX_VALUE)) { + if (width(wrapLine) >= i) i = width(wrapLine); + } + cir.setReturnValue(Mth.ceil(i)); + } + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinTextRenderer.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinTextRenderer.java deleted file mode 100644 index a18fbca96..000000000 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/allow_new_line/MixinTextRenderer.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.injection.mixin.features.bedrock.allow_new_line; - -import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.text.OrderedText; -import net.minecraft.text.StringVisitable; -import net.minecraft.text.Text; -import net.minecraft.util.math.MathHelper; -import net.raphimc.viabedrock.api.BedrockProtocolVersion; -import org.joml.Matrix4f; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(TextRenderer.class) -public abstract class MixinTextRenderer { - - @Shadow - public abstract List wrapLines(StringVisitable text, int width); - - @Shadow - public abstract String mirror(String text); - - @Shadow - @Final - public int fontHeight; - - @Shadow - public abstract int getWidth(OrderedText text); - - @Shadow - public abstract boolean isRightToLeft(); - - @Shadow - public abstract void draw(final OrderedText text, final float x, final float y, final int color, final boolean shadow, final Matrix4f matrix, final VertexConsumerProvider vertexConsumers, final TextRenderer.TextLayerType layerType, final int backgroundColor, final int light); - - @Inject(method = "draw(Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/font/TextRenderer$TextLayerType;II)V", at = @At("HEAD"), cancellable = true) - private void allowNewLines_String(String string, float x, float y, int color, boolean shadow, Matrix4f matrix, VertexConsumerProvider vertexConsumers, TextRenderer.TextLayerType layerType, int backgroundColor, int light, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - final List lines = wrapLines(StringVisitable.plain(isRightToLeft() ? this.mirror(string) : string), Integer.MAX_VALUE); - if (!lines.isEmpty()) { - ci.cancel(); - for (int i = 0, size = lines.size(); i < size; i++) { - this.draw(lines.get(i), x, y - (size * (fontHeight + 2)) + (i * (fontHeight + 2)), color, shadow, new Matrix4f(matrix), vertexConsumers, layerType, backgroundColor, light); - } - } - } - } - - @Inject(method = "draw(Lnet/minecraft/text/Text;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/font/TextRenderer$TextLayerType;II)V", at = @At("HEAD"), cancellable = true) - private void allowNewLines_Text(Text text, float x, float y, int color, boolean shadow, Matrix4f matrix, VertexConsumerProvider vertexConsumers, TextRenderer.TextLayerType layerType, int backgroundColor, int light, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - final List lines = wrapLines(text, Integer.MAX_VALUE); - if (!lines.isEmpty()) { - ci.cancel(); - for (int i = 0, size = lines.size(); i < size; i++) { - this.draw(lines.get(i), x, y - (lines.size() * (fontHeight + 2)) + (i * (fontHeight + 2)), color, shadow, new Matrix4f(matrix), vertexConsumers, layerType, backgroundColor, light); - } - } - } - } - - @Inject(method = "getWidth(Lnet/minecraft/text/StringVisitable;)I", at = @At("HEAD"), cancellable = true) - private void allowNewLines_getWidth(StringVisitable text, CallbackInfoReturnable cir) { - if (MinecraftClient.getInstance().world != null && ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - int i = 0; - for (OrderedText wrapLine : this.wrapLines(text, Integer.MAX_VALUE)) { - if (getWidth(wrapLine) >= i) i = getWidth(wrapLine); - } - cir.setReturnValue(MathHelper.ceil(i)); - } - } - -} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCactusBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCactusBlock.java index 329da2b81..feea39d33 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCactusBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCactusBlock.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.BlockState; -import net.minecraft.block.CactusBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CactusBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -40,10 +40,10 @@ public abstract class MixinCactusBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.cuboid(0.0625, 0, 0.0625, 0.9375, 1, 0.9375); + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.box(0.0625, 0, 0.0625, 0.9375, 1, 0.9375); @Inject(method = "getCollisionShape", at = @At(value = "RETURN"), cancellable = true) - private void changeCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void changeCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCandleCakeBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCandleCakeBlock.java index 34cb67598..ec3b3a65e 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCandleCakeBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinCandleCakeBlock.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.CandleCakeBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CandleCakeBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -42,29 +42,29 @@ public abstract class MixinCandleCakeBlock extends Block { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = Block.createColumnShape(14.0F, 0.0F, 8.0F); + private static final VoxelShape viaFabricPlus$shape_bedrock = Block.column(14.0F, 0.0F, 8.0F); @Shadow @Final private static VoxelShape SHAPE; - public MixinCandleCakeBlock(final Settings settings) { + public MixinCandleCakeBlock(final Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At(value = "HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At(value = "HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return SHAPE; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinConduitBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinConduitBlock.java index be9b71b8b..583b4efe8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinConduitBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinConduitBlock.java @@ -22,14 +22,14 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.ConduitBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.ConduitBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -43,29 +43,29 @@ public abstract class MixinConduitBlock extends Block { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.cuboid(0.25, 0, 0.25, 0.75, 0.5, 0.75); + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.box(0.25, 0, 0.25, 0.75, 0.5, 0.75); @Shadow @Final private static VoxelShape SHAPE; - public MixinConduitBlock(final Settings settings) { + public MixinConduitBlock(final Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At(value = "RETURN"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At(value = "RETURN"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return SHAPE; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDoorBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDoorBlock.java index f9ee1685a..b0bb948d5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDoorBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDoorBlock.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.util.Map; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.DoorBlock; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.DoorBlock; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -43,38 +43,38 @@ public abstract class MixinDoorBlock extends Block { @Unique private static final Map viaFabricPlus$shape_bedrock = Map.of( - Direction.NORTH, VoxelShapes.cuboid(0, 0, 0.8175, 1, 1, 1), - Direction.SOUTH, VoxelShapes.cuboid(0, 0, 0, 1, 1, 0.1825), - Direction.WEST, VoxelShapes.cuboid(0.8175, 0, 0, 1, 1, 1), - Direction.EAST, VoxelShapes.cuboid(0, 0, 0, 0.1825, 1, 1) + Direction.NORTH, Shapes.box(0, 0, 0.8175, 1, 1, 1), + Direction.SOUTH, Shapes.box(0, 0, 0, 1, 1, 0.1825), + Direction.WEST, Shapes.box(0.8175, 0, 0, 1, 1, 1), + Direction.EAST, Shapes.box(0, 0, 0, 0.1825, 1, 1) ); @Shadow @Final - private static Map SHAPES_BY_DIRECTION; + private static Map SHAPES; @Shadow @Final public static EnumProperty FACING; - public MixinDoorBlock(final Settings settings) { + public MixinDoorBlock(final Properties settings) { super(settings); } - @Redirect(method = "getOutlineShape", at = @At(value = "FIELD", target = "Lnet/minecraft/block/DoorBlock;SHAPES_BY_DIRECTION:Ljava/util/Map;")) + @Redirect(method = "getShape", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/DoorBlock;SHAPES:Ljava/util/Map;")) private Map changeOutlineShape() { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return viaFabricPlus$shape_bedrock; } - return SHAPES_BY_DIRECTION; + return SHAPES; } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return SHAPES_BY_DIRECTION.get(state.get(FACING)); + return SHAPES.get(state.getValue(FACING)); } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDragonEggBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDragonEggBlock.java index a48ae9309..4d1a83d16 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDragonEggBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinDragonEggBlock.java @@ -22,14 +22,14 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.DragonEggBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.DragonEggBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -45,23 +45,23 @@ public abstract class MixinDragonEggBlock extends Block { @Final private static VoxelShape SHAPE; - public MixinDragonEggBlock(final Settings settings) { + public MixinDragonEggBlock(final Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At(value = "RETURN"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At(value = "RETURN"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - cir.setReturnValue(VoxelShapes.fullCube()); + cir.setReturnValue(Shapes.block()); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return SHAPE; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinHoneyBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinHoneyBlock.java index b8d699500..566987608 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinHoneyBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinHoneyBlock.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.BlockState; -import net.minecraft.block.HoneyBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.HoneyBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -40,10 +40,10 @@ public abstract class MixinHoneyBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.cuboid(0.0625, 0, 0.0625, 0.9375, 1, 0.9375); + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.box(0.0625, 0, 0.0625, 0.9375, 1, 0.9375); @Inject(method = "getCollisionShape", at = @At(value = "RETURN"), cancellable = true) - private void changeCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void changeCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLanternBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLanternBlock.java index da1d2f81f..ef9fe19c9 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLanternBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLanternBlock.java @@ -22,15 +22,15 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LanternBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.LanternBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -44,10 +44,10 @@ public abstract class MixinLanternBlock extends Block { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.cuboid(0.3125, 0, 0.3125, 0.6875, 0.5, 0.6875); + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.box(0.3125, 0, 0.3125, 0.6875, 0.5, 0.6875); @Unique - private static final VoxelShape viaFabricPlus$shape_hanging_bedrock = VoxelShapes.cuboid(0.3125, 0.125, 0.3125, 0.6875, 0.625, 0.6875); + private static final VoxelShape viaFabricPlus$shape_hanging_bedrock = Shapes.box(0.3125, 0.125, 0.3125, 0.6875, 0.625, 0.6875); @Shadow @Final @@ -55,29 +55,29 @@ public abstract class MixinLanternBlock extends Block { @Shadow @Final - private static VoxelShape STANDING_SHAPE; + private static VoxelShape SHAPE_STANDING; @Shadow @Final - private static VoxelShape HANGING_SHAPE; + private static VoxelShape SHAPE_HANGING; - public MixinLanternBlock(final Settings settings) { + public MixinLanternBlock(final Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("RETURN"), cancellable = true) - private void modifyCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("RETURN"), cancellable = true) + private void modifyCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - cir.setReturnValue(state.get(HANGING) ? viaFabricPlus$shape_hanging_bedrock : viaFabricPlus$shape_bedrock); + cir.setReturnValue(state.getValue(HANGING) ? viaFabricPlus$shape_hanging_bedrock : viaFabricPlus$shape_bedrock); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return state.get(HANGING) ? HANGING_SHAPE : STANDING_SHAPE; + return state.getValue(HANGING) ? SHAPE_HANGING : SHAPE_STANDING; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLecternBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLecternBlock.java index 16bfba3ff..015b1a065 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLecternBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinLecternBlock.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.BlockState; -import net.minecraft.block.LecternBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.LecternBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -40,10 +40,10 @@ public abstract class MixinLecternBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.cuboid(0, 0, 0, 1, 0.9, 1); + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.box(0, 0, 0, 1, 0.9, 1); @Inject(method = "getCollisionShape", at = @At("RETURN"), cancellable = true) - private void changeCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void changeCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinSeaPickleBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinSeaPickleBlock.java index 06184b4cc..2663e401b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinSeaPickleBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinSeaPickleBlock.java @@ -22,15 +22,15 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.block; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.SeaPickleBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.SeaPickleBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -44,59 +44,59 @@ public class MixinSeaPickleBlock extends Block { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = Block.createColumnShape(16.0F, 0.0F, 6.0F); + private static final VoxelShape viaFabricPlus$shape_bedrock = Block.column(16.0F, 0.0F, 6.0F); @Shadow @Final - private static VoxelShape ONE_PICKLE_SHAPE; + private static VoxelShape SHAPE_ONE; @Shadow @Final - private static VoxelShape TWO_PICKLES_SHAPE; + private static VoxelShape SHAPE_TWO; @Shadow @Final - private static VoxelShape THREE_PICKLES_SHAPE; + private static VoxelShape SHAPE_THREE; @Shadow @Final - private static VoxelShape FOUR_PICKLES_SHAPE; + private static VoxelShape SHAPE_FOUR; @Shadow @Final - public static IntProperty PICKLES; + public static IntegerProperty PICKLES; - public MixinSeaPickleBlock(final Settings settings) { + public MixinSeaPickleBlock(final Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } } @Override - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return VoxelShapes.empty(); + return Shapes.empty(); } else { return super.getCollisionShape(state, world, pos, context); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return switch (state.get(PICKLES)) { - case 2 -> TWO_PICKLES_SHAPE; - case 3 -> THREE_PICKLES_SHAPE; - case 4 -> FOUR_PICKLES_SHAPE; - default -> ONE_PICKLE_SHAPE; + return switch (state.getValue(PICKLES)) { + case 2 -> SHAPE_TWO; + case 3 -> SHAPE_THREE; + case 4 -> SHAPE_FOUR; + default -> SHAPE_ONE; }; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinTrapdoorBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinTrapDoorBlock.java similarity index 57% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinTrapdoorBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinTrapDoorBlock.java index 2d579c07b..453485ba9 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinTrapdoorBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/block/MixinTrapDoorBlock.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.util.Map; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalFacingBlock; -import net.minecraft.block.TrapdoorBlock; -import net.minecraft.block.enums.BlockHalf; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.state.properties.Half; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -40,49 +40,49 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(TrapdoorBlock.class) -public abstract class MixinTrapdoorBlock extends HorizontalFacingBlock { +@Mixin(TrapDoorBlock.class) +public abstract class MixinTrapDoorBlock extends HorizontalDirectionalBlock { @Unique private static final Map viaFabricPlus$shape_bedrock = Map.of( - Direction.NORTH, VoxelShapes.cuboid(0, 0, 0.8175, 1, 1, 1), - Direction.SOUTH, VoxelShapes.cuboid(0, 0, 0, 1, 1, 0.1825), - Direction.WEST, VoxelShapes.cuboid(0.8175, 0, 0, 1, 1, 1), - Direction.EAST, VoxelShapes.cuboid(0, 0, 0, 0.1825, 1, 1), - Direction.DOWN, VoxelShapes.cuboid(0, 0.8175, 0, 1, 1, 1), - Direction.UP, VoxelShapes.cuboid(0, 0, 0, 1, 0.1825, 1) + Direction.NORTH, Shapes.box(0, 0, 0.8175, 1, 1, 1), + Direction.SOUTH, Shapes.box(0, 0, 0, 1, 1, 0.1825), + Direction.WEST, Shapes.box(0.8175, 0, 0, 1, 1, 1), + Direction.EAST, Shapes.box(0, 0, 0, 0.1825, 1, 1), + Direction.DOWN, Shapes.box(0, 0.8175, 0, 1, 1, 1), + Direction.UP, Shapes.box(0, 0, 0, 1, 0.1825, 1) ); @Shadow @Final - private static Map shapeByDirection; + private static Map SHAPES; @Shadow @Final - public static EnumProperty HALF; + public static EnumProperty HALF; @Shadow @Final public static BooleanProperty OPEN; - public MixinTrapdoorBlock(final Settings settings) { + public MixinTrapDoorBlock(final Properties settings) { super(settings); } - @Redirect(method = "getOutlineShape", at = @At(value = "FIELD", target = "Lnet/minecraft/block/TrapdoorBlock;shapeByDirection:Ljava/util/Map;")) + @Redirect(method = "getShape", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/TrapDoorBlock;SHAPES:Ljava/util/Map;")) private Map changeOutlineShape() { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return viaFabricPlus$shape_bedrock; } - return shapeByDirection; + return SHAPES; } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return shapeByDirection.get(state.get(OPEN) ? state.get(FACING) : (state.get(HALF) == BlockHalf.TOP ? Direction.DOWN : Direction.UP)); + return SHAPES.get(state.getValue(OPEN) ? state.getValue(FACING) : (state.getValue(HALF) == Half.TOP ? Direction.DOWN : Direction.UP)); } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinEntity.java index ac39b14ea..e94a1cdd1 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.connection.UserConnection; -import net.minecraft.entity.Entity; +import net.minecraft.world.entity.Entity; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.PlayerAuthInputPacket_InputData; import net.raphimc.viabedrock.protocol.storage.EntityTracker; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLivingEntity.java index f70fff711..50885432e 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLivingEntity.java @@ -22,12 +22,12 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.movement; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.core.Holder; +import net.minecraft.world.phys.Vec3; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -41,18 +41,18 @@ public abstract class MixinLivingEntity { @Shadow - public abstract @Nullable StatusEffectInstance getStatusEffect(final RegistryEntry effect); + public abstract @Nullable MobEffectInstance getEffect(final Holder effect); - @Redirect(method = "applyFluidMovingSpeed", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;isSprinting()Z")) + @Redirect(method = "getFluidFallingAdjustedMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isSprinting()Z")) private boolean changeFluidGravityCondition(LivingEntity instance) { return instance.isSprinting() && !ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) || instance.isSwimming(); } - @Inject(method = "applyFluidMovingSpeed", at = @At("HEAD"), cancellable = true) - private void applyLevitationVelocity(double gravity, boolean movingDown, Vec3d velocity, CallbackInfoReturnable ci) { - final StatusEffectInstance effect = this.getStatusEffect(StatusEffects.LEVITATION); + @Inject(method = "getFluidFallingAdjustedMovement", at = @At("HEAD"), cancellable = true) + private void applyLevitationVelocity(double gravity, boolean movingDown, Vec3 velocity, CallbackInfoReturnable ci) { + final MobEffectInstance effect = this.getEffect(MobEffects.LEVITATION); if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && effect != null) { - ci.setReturnValue(new Vec3d(velocity.x, velocity.y + (((effect.getAmplifier() + 1) * 0.05) - velocity.y) * 0.2, velocity.z)); + ci.setReturnValue(new Vec3(velocity.x, velocity.y + (((effect.getAmplifier() + 1) * 0.05) - velocity.y) * 0.2, velocity.z)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLocalPlayer.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLocalPlayer.java index f8dc17c20..25fcebcdc 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinLocalPlayer.java @@ -22,22 +22,22 @@ package com.viaversion.viafabricplus.injection.mixin.features.bedrock.movement; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.player.LocalPlayer; import net.raphimc.viabedrock.api.BedrockProtocolVersion; 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.Redirect; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer { @Shadow - protected abstract boolean canSprint(final boolean allowTouchingWater); + protected abstract boolean isSprintingPossible(final boolean allowTouchingWater); - @Redirect(method = {"shouldStopSprinting", "canStartSprinting"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;canSprint(Z)Z")) - private boolean allowNonSwimWaterSprinting(ClientPlayerEntity instance, boolean allowTouchingWater) { - return this.canSprint(allowTouchingWater || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && (instance.isSwimming() || instance.isOnGround())); + @Redirect(method = {"shouldStopRunSprinting", "canStartSprinting"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isSprintingPossible(Z)Z")) + private boolean allowNonSwimWaterSprinting(LocalPlayer instance, boolean allowTouchingWater) { + return this.isSprintingPossible(allowTouchingWater || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && (instance.isSwimming() || instance.onGround())); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinPlayer.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinPlayer.java index bc64dc2ae..b75b8aeca 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/movement/MixinPlayer.java @@ -24,11 +24,11 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.injection.mixin.features.movement.water.MixinLivingEntity; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -37,32 +37,32 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity extends MixinLivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends MixinLivingEntity { @Unique private int viaFabricPlus$ticksSinceSwimming; - public MixinPlayerEntity(final EntityType type, final World world) { + public MixinPlayer(final EntityType type, final Level world) { super(type, world); } - @Redirect(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/BlockPos;ofFloored(DDD)Lnet/minecraft/util/math/BlockPos;")) + @Redirect(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/BlockPos;containing(DDD)Lnet/minecraft/core/BlockPos;")) private BlockPos modifyWaterAbovePosition(double x, double y, double z) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return BlockPos.ofFloored(x, y - 0.9, z); + return BlockPos.containing(x, y - 0.9, z); } else { - return BlockPos.ofFloored(x, y, z); + return BlockPos.containing(x, y, z); } } - @WrapWithCondition(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;setVelocity(Lnet/minecraft/util/math/Vec3d;)V", ordinal = 0)) - private boolean preventSwimmingMotionWhenJumping(PlayerEntity instance, Vec3d vec3d) { + @WrapWithCondition(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", ordinal = 0)) + private boolean preventSwimmingMotionWhenJumping(Player instance, Vec3 vec3d) { return !ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) || !instance.isJumping(); } - @Inject(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getAbilities()Lnet/minecraft/entity/player/PlayerAbilities;")) - private void preventJumpingWhenStartedSwimming(Vec3d movementInput, CallbackInfo ci) { + @Inject(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;getAbilities()Lnet/minecraft/world/entity/player/Abilities;")) + private void preventJumpingWhenStartedSwimming(Vec3 movementInput, CallbackInfo ci) { if (!ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return; } @@ -74,20 +74,20 @@ private void preventJumpingWhenStartedSwimming(Vec3d movementInput, CallbackInfo } if (this.viaFabricPlus$ticksSinceSwimming > 0 && this.viaFabricPlus$ticksSinceSwimming < 10 && this.isJumping()) { - this.setVelocity(this.getVelocity().getX(), 0, this.getVelocity().getZ()); + this.setDeltaMovement(this.getDeltaMovement().x(), 0, this.getDeltaMovement().z()); } } - @Redirect(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isSwimming()Z")) - private boolean preventSwimmingResurface(PlayerEntity instance) { + @Redirect(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isSwimming()Z")) + private boolean preventSwimmingResurface(Player instance) { if (!ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) || !instance.isSwimming()) { return instance.isSwimming(); } - double d = this.getRotationVector().y; + double d = this.getLookAngle().y; // TODO: The value used here (0.55) isn't entirely correct, however in most cases it should be fine. - if (this.getEntityWorld().getFluidState(BlockPos.ofFloored(this.getX(), this.getY() + 0.4, this.getZ())).isEmpty() && d > 0 && d < 0.55) { - instance.setVelocity(instance.getVelocity().getX(), 0, instance.getVelocity().getZ()); + if (this.level().getFluidState(BlockPos.containing(this.getX(), this.getY() + 0.4, this.getZ())).isEmpty() && d > 0 && d < 0.55) { + instance.setDeltaMovement(instance.getDeltaMovement().x(), 0, instance.getDeltaMovement().z()); return false; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/reach_around_raycast/MixinGameRenderer.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/reach_around_raycast/MixinGameRenderer.java index 2206814d3..d1efde41a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/reach_around_raycast/MixinGameRenderer.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/reach_around_raycast/MixinGameRenderer.java @@ -23,13 +23,13 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.GameRenderer; -import net.minecraft.entity.Entity; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.hit.HitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -42,21 +42,21 @@ public abstract class MixinGameRenderer { @Shadow @Final - private MinecraftClient client; + private Minecraft minecraft; - @ModifyExpressionValue(method = "findCrosshairTarget", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;raycast(DFZ)Lnet/minecraft/util/hit/HitResult;")) + @ModifyExpressionValue(method = "pick(F)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;pick(Lnet/minecraft/world/entity/Entity;DDF)Lnet/minecraft/world/phys/HitResult;")) private HitResult bedrockReachAroundRaycast(HitResult hitResult) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - final Entity entity = this.client.getCameraEntity(); + final Entity entity = this.minecraft.getCameraEntity(); if (hitResult.getType() != HitResult.Type.MISS) return hitResult; if (!this.viaFabricPlus$canReachAround(entity)) return hitResult; - final int x = MathHelper.floor(entity.getX()); - final int y = MathHelper.floor(entity.getY() - 0.2F); - final int z = MathHelper.floor(entity.getZ()); + final int x = Mth.floor(entity.getX()); + final int y = Mth.floor(entity.getY() - 0.2F); + final int z = Mth.floor(entity.getZ()); final BlockPos floorPos = new BlockPos(x, y, z); - return new BlockHitResult(floorPos.toCenterPos(), entity.getHorizontalFacing(), floorPos, false); + return new BlockHitResult(floorPos.getCenter(), entity.getDirection(), floorPos, false); } return hitResult; @@ -64,7 +64,7 @@ private HitResult bedrockReachAroundRaycast(HitResult hitResult) { @Unique private boolean viaFabricPlus$canReachAround(final Entity entity) { - return entity.isOnGround() && entity.getVehicle() == null && entity.getPitch() >= 45; + return entity.onGround() && entity.getVehicle() == null && entity.getXRot() >= 45; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/MixinClientCommandSource.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/MixinClientSuggestionProvider.java similarity index 82% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/MixinClientCommandSource.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/MixinClientSuggestionProvider.java index 6e668e650..4dbf2ba7d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/MixinClientCommandSource.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/bedrock/remove_dummy_player_suggestions/MixinClientSuggestionProvider.java @@ -24,7 +24,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.util.Collection; import java.util.Set; -import net.minecraft.client.network.ClientCommandSource; +import net.minecraft.client.multiplayer.ClientSuggestionProvider; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -33,17 +33,17 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ClientCommandSource.class) -public abstract class MixinClientCommandSource { +@Mixin(ClientSuggestionProvider.class) +public abstract class MixinClientSuggestionProvider { @Shadow @Final - private Set chatSuggestions; + private Set customCompletionSuggestions; - @Inject(method = {"getPlayerNames", "getChatSuggestions"}, at = @At("HEAD"), cancellable = true) + @Inject(method = {"getOnlinePlayerNames", "getCustomTabSugggestions"}, at = @At("HEAD"), cancellable = true) private void returnChatSuggestions(CallbackInfoReturnable> cir) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - cir.setReturnValue(this.chatSuggestions); + cir.setReturnValue(this.customCompletionSuggestions); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinCanPlaceAt1_14.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinCanPlaceAt1_14.java index 3026fe68a..f8c023c8a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinCanPlaceAt1_14.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinCanPlaceAt1_14.java @@ -24,23 +24,23 @@ import com.viaversion.viafabricplus.features.block.interaction.Block1_14; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.AbstractTorchBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LadderBlock; -import net.minecraft.block.TripwireHookBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldView; +import net.minecraft.world.level.block.BaseTorchBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.TripWireHookBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelReader; 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.CallbackInfoReturnable; -@Mixin({AbstractTorchBlock.class, LadderBlock.class, TripwireHookBlock.class}) +@Mixin({BaseTorchBlock.class, LadderBlock.class, TripWireHookBlock.class}) public abstract class MixinCanPlaceAt1_14 { - @Inject(method = "canPlaceAt", at = @At(value = "RETURN"), cancellable = true) - private void canPlaceAt1_14(BlockState state, WorldView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "canSurvive", at = @At(value = "RETURN"), cancellable = true) + private void canPlaceAt1_14(BlockState state, LevelReader world, BlockPos pos, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14)) { final Block block = world.getBlockState(pos).getBlock(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinDecoratedPotBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinDecoratedPotBlock.java index 84cd7860d..595d474eb 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinDecoratedPotBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinDecoratedPotBlock.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BlockState; -import net.minecraft.block.DecoratedPotBlock; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.DecoratedPotBlock; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -41,19 +41,19 @@ @Mixin(DecoratedPotBlock.class) public abstract class MixinDecoratedPotBlock { - @Redirect(method = "onUseWithItem", at = @At(value = "FIELD", target = "Lnet/minecraft/util/ActionResult;SUCCESS:Lnet/minecraft/util/ActionResult$Success;", ordinal = 0)) - private ActionResult.Success dontSwingHand() { + @Redirect(method = "useItemOn", at = @At(value = "FIELD", target = "Lnet/minecraft/world/InteractionResult;SUCCESS:Lnet/minecraft/world/InteractionResult$Success;", ordinal = 0)) + private InteractionResult.Success dontSwingHand() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - return ActionResult.CONSUME; + return InteractionResult.CONSUME; } else { - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } } - @Inject(method = "onUseWithItem", at = @At("HEAD"), cancellable = true) - private void alwaysPass(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + @Inject(method = "useItemOn", at = @At("HEAD"), cancellable = true) + private void alwaysPass(ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_2)) { - cir.setReturnValue(ActionResult.PASS); + cir.setReturnValue(InteractionResult.PASS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFenceBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFenceBlock.java index 4906c7b61..b551878a0 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFenceBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFenceBlock.java @@ -23,34 +23,34 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BlockState; -import net.minecraft.block.FenceBlock; -import net.minecraft.block.HorizontalConnectingBlock; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FenceBlock; +import net.minecraft.world.level.block.CrossCollisionBlock; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; @Mixin(FenceBlock.class) -public abstract class MixinFenceBlock extends HorizontalConnectingBlock { +public abstract class MixinFenceBlock extends CrossCollisionBlock { - protected MixinFenceBlock(float radius1, float radius2, float boundingHeight1, float boundingHeight2, float collisionHeight, Settings settings) { + protected MixinFenceBlock(float radius1, float radius2, float boundingHeight1, float boundingHeight2, float collisionHeight, Properties settings) { super(radius1, radius2, boundingHeight1, boundingHeight2, collisionHeight, settings); } @Override - protected ActionResult onUseWithItem(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { + protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - return stack.isOf(Items.LEAD) ? ActionResult.SUCCESS : ActionResult.PASS; + return stack.is(Items.LEAD) ? InteractionResult.SUCCESS : InteractionResult.PASS; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_10)) { - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } else { - return super.onUseWithItem(stack, state, world, pos, player, hand, hit); + return super.useItemOn(stack, state, world, pos, player, hand, hit); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFlowerPotBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFlowerPotBlock.java index d4875daef..65e91eeb2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFlowerPotBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinFlowerPotBlock.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.block.FlowerPotBlock; -import net.minecraft.util.ActionResult; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FlowerPotBlock; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,12 +39,12 @@ public abstract class MixinFlowerPotBlock { @Shadow @Final - private Block content; + private Block potted; - @Inject(method = "onUse", at = @At(value = "FIELD", target = "Lnet/minecraft/block/FlowerPotBlock;content:Lnet/minecraft/block/Block;", ordinal = 0), cancellable = true) - private void alwaysConsume(CallbackInfoReturnable ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_10) && content != Blocks.AIR) { - ci.setReturnValue(ActionResult.CONSUME); + @Inject(method = "useWithoutItem", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/FlowerPotBlock;potted:Lnet/minecraft/world/level/block/Block;", ordinal = 0), cancellable = true) + private void alwaysConsume(CallbackInfoReturnable ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_10) && potted != Blocks.AIR) { + ci.setReturnValue(InteractionResult.CONSUME); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinPaneBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinIronBarsBlock.java similarity index 62% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinPaneBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinIronBarsBlock.java index 466528b23..599f8a468 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinPaneBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinIronBarsBlock.java @@ -27,24 +27,24 @@ import com.llamalad7.mixinextras.sugar.ref.LocalIntRef; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalConnectingBlock; -import net.minecraft.block.PaneBlock; -import net.minecraft.item.ItemPlacementContext; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CrossCollisionBlock; +import net.minecraft.world.level.block.IronBarsBlock; +import net.minecraft.world.item.context.BlockPlaceContext; 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.CallbackInfoReturnable; -@Mixin(PaneBlock.class) -public abstract class MixinPaneBlock extends HorizontalConnectingBlock { +@Mixin(IronBarsBlock.class) +public abstract class MixinIronBarsBlock extends CrossCollisionBlock { - protected MixinPaneBlock(final float radius1, final float radius2, final float boundingHeight1, final float boundingHeight2, final float collisionHeight, final Settings settings) { + protected MixinIronBarsBlock(final float radius1, final float radius2, final float boundingHeight1, final float boundingHeight2, final float collisionHeight, final Properties settings) { super(radius1, radius2, boundingHeight1, boundingHeight2, collisionHeight, settings); } - @WrapOperation(method = "getPlacementState", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/PaneBlock;connectsTo(Lnet/minecraft/block/BlockState;Z)Z")) - private boolean countConnections(PaneBlock instance, BlockState state, boolean sideSolidFullSquare, Operation original, @Share("count") LocalIntRef countRef) { + @WrapOperation(method = "getStateForPlacement", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/IronBarsBlock;attachsTo(Lnet/minecraft/world/level/block/state/BlockState;Z)Z")) + private boolean countConnections(IronBarsBlock instance, BlockState state, boolean sideSolidFullSquare, Operation original, @Share("count") LocalIntRef countRef) { final boolean connectsTo = original.call(instance, state, sideSolidFullSquare); if (connectsTo) { countRef.set(countRef.get() + 1); @@ -52,10 +52,10 @@ private boolean countConnections(PaneBlock instance, BlockState state, boolean s return connectsTo; } - @Inject(method = "getPlacementState", at = @At("RETURN"), cancellable = true) - private void changePlacementState(ItemPlacementContext ctx, CallbackInfoReturnable cir, @Share("count") LocalIntRef countRef) { + @Inject(method = "getStateForPlacement", at = @At("RETURN"), cancellable = true) + private void changePlacementState(BlockPlaceContext ctx, CallbackInfoReturnable cir, @Share("count") LocalIntRef countRef) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && countRef.get() == 0) { - cir.setReturnValue(cir.getReturnValue().with(NORTH, true).with(SOUTH, true).with(WEST, true).with(EAST, true)); + cir.setReturnValue(cir.getReturnValue().setValue(NORTH, true).setValue(SOUTH, true).setValue(WEST, true).setValue(EAST, true)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinNoteBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinNoteBlock.java index 905b9180f..dd38d5ae3 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinNoteBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinNoteBlock.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.NoteBlock; -import net.minecraft.util.ActionResult; +import net.minecraft.world.level.block.NoteBlock; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -33,10 +33,10 @@ @Mixin(NoteBlock.class) public abstract class MixinNoteBlock { - @Inject(method = "onUseWithItem", at = @At("HEAD"), cancellable = true) - private void cancelMobHeadUsage(CallbackInfoReturnable cir) { + @Inject(method = "useItemOn", at = @At("HEAD"), cancellable = true) + private void cancelMobHeadUsage(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { - cir.setReturnValue(ActionResult.SUCCESS); + cir.setReturnValue(InteractionResult.SUCCESS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinAbstractSignBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinSignBlock.java similarity index 63% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinAbstractSignBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinSignBlock.java index 51677629c..1a4c3c4e8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinAbstractSignBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/interaction/MixinSignBlock.java @@ -23,43 +23,43 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.AbstractSignBlock; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.DyeItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.level.block.SignBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.DyeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(AbstractSignBlock.class) -public abstract class MixinAbstractSignBlock { +@Mixin(SignBlock.class) +public abstract class MixinSignBlock { - @Inject(method = "onUseWithItem", at = @At("HEAD"), cancellable = true) - private void changeInteractionCalculation(ItemStack stack, BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { - if (!world.isClient()) { + @Inject(method = "useItemOn", at = @At("HEAD"), cancellable = true) + private void changeInteractionCalculation(ItemStack stack, BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + if (!world.isClientSide()) { return; } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { // <= 1.14.4 doesn't have any sign interactions. - cir.setReturnValue(ActionResult.SUCCESS); + cir.setReturnValue(InteractionResult.SUCCESS); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { // Removes the isWaxed() condition and reverts the interaction changes from 1.19.4 -> 1.20 when signs // got a front and back side. - final ItemStack itemStack = player.getStackInHand(hand); + final ItemStack itemStack = player.getItemInHand(hand); final Item item = itemStack.getItem(); - final boolean isSuccess = (item instanceof DyeItem || itemStack.isOf(Items.GLOW_INK_SAC) || itemStack.isOf(Items.INK_SAC)) && player.canModifyBlocks(); + final boolean isSuccess = (item instanceof DyeItem || itemStack.is(Items.GLOW_INK_SAC) || itemStack.is(Items.INK_SAC)) && player.mayBuild(); - cir.setReturnValue(isSuccess ? ActionResult.SUCCESS : ActionResult.CONSUME); + cir.setReturnValue(isSuccess ? InteractionResult.SUCCESS : InteractionResult.CONSUME); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock_AbstractBlockState.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock_AbstractBlockState.java index 984c12608..869b1a578 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock_AbstractBlockState.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock_AbstractBlockState.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.block.InfestedBlock; -import net.minecraft.block.ShulkerBoxBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.InfestedBlock; +import net.minecraft.world.level.block.ShulkerBoxBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -39,7 +39,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(AbstractBlock.AbstractBlockState.class) +@Mixin(BlockBehaviour.BlockStateBase.class) public abstract class MixinAbstractBlock_AbstractBlockState { @Shadow @@ -47,23 +47,23 @@ public abstract class MixinAbstractBlock_AbstractBlockState { @Shadow @Final - private boolean toolRequired; + private boolean requiresCorrectToolForDrops; /** * @author RK_01 * @reason Change break speed for shulker blocks in < 1.14 */ @Overwrite - public boolean isToolRequired() { + public boolean requiresCorrectToolForDrops() { if (this.getBlock() instanceof ShulkerBoxBlock && ProtocolTranslator.getTargetVersion().olderThan(ProtocolVersion.v1_14)) { return true; } else { - return this.toolRequired; + return this.requiresCorrectToolForDrops; } } - @Inject(method = "getHardness", at = @At("RETURN"), cancellable = true) - private void changeHardness(BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "getDestroySpeed", at = @At("RETURN"), cancellable = true) + private void changeHardness(BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { final Block block = this.getBlock(); if (block.equals(Blocks.END_STONE_BRICKS) || block.equals(Blocks.END_STONE_BRICK_SLAB) || block.equals(Blocks.END_STONE_BRICK_STAIRS) || block.equals(Blocks.END_STONE_BRICK_WALL)) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinBlockBehaviour.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinBlockBehaviour.java index 67d7cdccf..63e102b18 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinAbstractBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinBlockBehaviour.java @@ -22,31 +22,31 @@ package com.viaversion.viafabricplus.injection.mixin.features.block.mining_calculation; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.AbstractBlock; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.entity.player.Player; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; import net.raphimc.vialegacy.api.LegacyProtocolVersion; 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.CallbackInfoReturnable; -@Mixin(AbstractBlock.class) -public abstract class MixinAbstractBlock { +@Mixin(BlockBehaviour.class) +public abstract class MixinBlockBehaviour { - @Inject(method = "calcBlockBreakingDelta", at = @At("HEAD"), cancellable = true) - private void changeMiningSpeedCalculation(BlockState state, PlayerEntity player, BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "getDestroyProgress", at = @At("HEAD"), cancellable = true) + private void changeMiningSpeedCalculation(BlockState state, Player player, BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7)) { - final float hardness = state.getHardness(world, pos); + final float hardness = state.getDestroySpeed(world, pos); if (hardness == -1.0F) { cir.setReturnValue(0.0F); } else { - if (!player.canHarvest(state)) { + if (!player.hasCorrectToolForDrops(state)) { cir.setReturnValue(1.0F / hardness / 100F); } else { - cir.setReturnValue(player.getBlockBreakingSpeed(state) / hardness / 30F); + cir.setReturnValue(player.getDestroySpeed(state) / hardness / 30F); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinPlayer.java similarity index 62% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinPlayer.java index 741f9a362..a661328e0 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/mining_calculation/MixinPlayer.java @@ -25,16 +25,16 @@ import com.llamalad7.mixinextras.sugar.ref.LocalFloatRef; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BlockState; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.attribute.EntityAttributes; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.world.World; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.core.Holder; +import net.minecraft.world.level.Level; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -44,25 +44,25 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity extends LivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends LivingEntity { @Shadow - public abstract boolean canHarvest(BlockState state); + public abstract boolean hasCorrectToolForDrops(BlockState state); @Shadow @Final - PlayerInventory inventory; + Inventory inventory; - protected MixinPlayerEntity(EntityType entityType, World world) { + protected MixinPlayer(EntityType entityType, Level world) { super(entityType, world); } - @Redirect(method = "getBlockBreakingSpeed", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;hasStatusEffect(Lnet/minecraft/registry/entry/RegistryEntry;)Z")) - private boolean changeSpeedCalculation(PlayerEntity instance, RegistryEntry statusEffect, @Local LocalFloatRef f) { - final boolean hasMiningFatigue = instance.hasStatusEffect(statusEffect); + @Redirect(method = "getDestroySpeed", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;hasEffect(Lnet/minecraft/core/Holder;)Z")) + private boolean changeSpeedCalculation(Player instance, Holder statusEffect, @Local LocalFloatRef f) { + final boolean hasMiningFatigue = instance.hasEffect(statusEffect); if (hasMiningFatigue && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { - f.set(f.get() * (1.0F - (this.getStatusEffect(StatusEffects.MINING_FATIGUE).getAmplifier() + 1) * 0.2F)); + f.set(f.get() * (1.0F - (this.getEffect(MobEffects.MINING_FATIGUE).getAmplifier() + 1) * 0.2F)); if (f.get() < 0) { f.set(0); } @@ -71,20 +71,20 @@ private boolean changeSpeedCalculation(PlayerEntity instance, RegistryEntry cir, @Local LocalFloatRef f) { - final float efficiency = (float) this.getAttributeValue(EntityAttributes.MINING_EFFICIENCY); + final float efficiency = (float) this.getAttributeValue(Attributes.MINING_EFFICIENCY); if (efficiency <= 0) { return; } - final float speed = this.inventory.getSelectedStack().getMiningSpeedMultiplier(block); - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_4tor1_4_5) && this.canHarvest(block)) { + final float speed = this.inventory.getSelectedItem().getDestroySpeed(block); + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_4tor1_4_5) && this.hasCorrectToolForDrops(block)) { f.set(speed + efficiency); } else if (speed > 1F || ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7)) { - if (!this.getMainHandStack().isEmpty()) { + if (!this.getMainHandItem().isEmpty()) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { - if (speed <= 1.0 && !this.canHarvest(block)) { + if (speed <= 1.0 && !this.hasCorrectToolForDrops(block)) { f.set(speed + efficiency * 0.08F); } else { f.set(speed + efficiency); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAnvilBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAnvilBlock.java index 68f4dc676..177fdddfd 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAnvilBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAnvilBlock.java @@ -24,16 +24,16 @@ import com.viaversion.viafabricplus.injection.ViaFabricPlusMixinPlugin; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.AnvilBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FallingBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.AnvilBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -46,37 +46,37 @@ public abstract class MixinAnvilBlock extends FallingBlock { @Unique - private static final VoxelShape viaFabricPlus$x_axis_shape_r1_12_2 = Block.createCuboidShape(0.0D, 0.0D, 2.0D, 16.0D, 16.0D, 14.0D); + private static final VoxelShape viaFabricPlus$x_axis_shape_r1_12_2 = Block.box(0.0D, 0.0D, 2.0D, 16.0D, 16.0D, 14.0D); @Unique - private static final VoxelShape viaFabricPlus$z_axis_shape_r1_12_2 = Block.createCuboidShape(2.0D, 0.0D, 0.0D, 14.0D, 16.0D, 16.0D); + private static final VoxelShape viaFabricPlus$z_axis_shape_r1_12_2 = Block.box(2.0D, 0.0D, 0.0D, 14.0D, 16.0D, 16.0D); @Shadow @Final public static EnumProperty FACING; - public MixinAnvilBlock(Settings settings) { + public MixinAnvilBlock(Properties settings) { super(settings); } @Unique private boolean viaFabricPlus$requireOriginalShape; - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ViaFabricPlusMixinPlugin.MORE_CULLING_PRESENT && viaFabricPlus$requireOriginalShape) { viaFabricPlus$requireOriginalShape = false; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(state.get(FACING).getAxis() == Direction.Axis.X ? viaFabricPlus$x_axis_shape_r1_12_2 : viaFabricPlus$z_axis_shape_r1_12_2); + cir.setReturnValue(state.getValue(FACING).getAxis() == Direction.Axis.X ? viaFabricPlus$x_axis_shape_r1_12_2 : viaFabricPlus$z_axis_shape_r1_12_2); } } @Override - protected VoxelShape getCullingShape(BlockState state) { + protected VoxelShape getOcclusionShape(BlockState state) { // Workaround for https://github.com/ViaVersion/ViaFabricPlus/issues/246 // MoreCulling is caching the culling shape and doesn't reload it, so we have to force vanilla's shape here. viaFabricPlus$requireOriginalShape = true; - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAbstractRailBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBaseRailBlock.java similarity index 75% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAbstractRailBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBaseRailBlock.java index 70752ce4a..e2095e31d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinAbstractRailBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBaseRailBlock.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.AbstractRailBlock; -import net.minecraft.block.Block; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.level.block.BaseRailBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,27 +34,27 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AbstractRailBlock.class) -public abstract class MixinAbstractRailBlock extends Block { +@Mixin(BaseRailBlock.class) +public abstract class MixinBaseRailBlock extends Block { @Shadow @Final - private static VoxelShape ASCENDING_SHAPE; + private static VoxelShape SHAPE_SLOPE; @Unique - private static final VoxelShape viaFabricPlus$ascending_shape_r1_10_x = VoxelShapes.fullCube(); + private static final VoxelShape viaFabricPlus$ascending_shape_r1_10_x = Shapes.block(); @Unique - private static final VoxelShape viaFabricPlus$ascending_shape_r1_9_x = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 2.5D, 16.0D); + private static final VoxelShape viaFabricPlus$ascending_shape_r1_9_x = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 2.5D, 16.0D); @Unique - private static final VoxelShape viaFabricPlus$ascending_shape_r1_8_x = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D); + private static final VoxelShape viaFabricPlus$ascending_shape_r1_8_x = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D); - public MixinAbstractRailBlock(Settings settings) { + public MixinBaseRailBlock(Properties settings) { super(settings); } - @Redirect(method = "getOutlineShape", at = @At(value = "FIELD", target = "Lnet/minecraft/block/AbstractRailBlock;ASCENDING_SHAPE:Lnet/minecraft/util/shape/VoxelShape;")) + @Redirect(method = "getShape", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/BaseRailBlock;SHAPE_SLOPE:Lnet/minecraft/world/phys/shapes/VoxelShape;")) private VoxelShape changeOutlineShape() { if (ProtocolTranslator.getTargetVersion().equalTo(ProtocolVersion.v1_10)) { return viaFabricPlus$ascending_shape_r1_10_x; @@ -63,7 +63,7 @@ private VoxelShape changeOutlineShape() { } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { return viaFabricPlus$ascending_shape_r1_8_x; } else { - return ASCENDING_SHAPE; + return SHAPE_SLOPE; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBedBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBedBlock.java index cbbbc2515..f2478ccbd 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBedBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBedBlock.java @@ -24,14 +24,14 @@ import com.viaversion.viafabricplus.injection.ViaFabricPlusMixinPlugin; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BedBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalFacingBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.BedBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -40,19 +40,19 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(BedBlock.class) -public abstract class MixinBedBlock extends HorizontalFacingBlock { +public abstract class MixinBedBlock extends HorizontalDirectionalBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_13_2 = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 9.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_13_2 = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 9.0D, 16.0D); @Unique private boolean viaFabricPlus$requireOriginalShape; - protected MixinBedBlock(Settings settings) { + protected MixinBedBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ViaFabricPlusMixinPlugin.MORE_CULLING_PRESENT && viaFabricPlus$requireOriginalShape) { viaFabricPlus$requireOriginalShape = false; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { @@ -61,11 +61,11 @@ private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { // Workaround for https://github.com/ViaVersion/ViaFabricPlus/issues/246 // MoreCulling is caching the culling shape and doesn't reload it, so we have to force vanilla's shape here. viaFabricPlus$requireOriginalShape = true; - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBrewingStandBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBrewingStandBlock.java index 53b61d6cd..0d75feffa 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBrewingStandBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinBrewingStandBlock.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.BrewingStandBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.BrewingStandBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -41,13 +41,13 @@ public abstract class MixinBrewingStandBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_12_2 = VoxelShapes.union( - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D) /* Base */, - Block.createCuboidShape(7.0D, 0.0D, 7.0D, 9.0D, 14.0D, 9.0D) /* Stick */ + private static final VoxelShape viaFabricPlus$shape_r1_12_2 = Shapes.or( + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D) /* Base */, + Block.box(7.0D, 0.0D, 7.0D, 9.0D, 14.0D, 9.0D) /* Stick */ ); - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { cir.setReturnValue(viaFabricPlus$shape_r1_12_2); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCarpetBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCarpetBlock.java index dc9308cac..e435fdc97 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCarpetBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCarpetBlock.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.CarpetBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CarpetBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -37,14 +37,14 @@ public abstract class MixinCarpetBlock extends Block { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_7_10 = Block.createCuboidShape(0.0D, -0.00001D /* 0.0D */, 0.0D, 16.0D, 0.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_7_10 = Block.box(0.0D, -0.00001D /* 0.0D */, 0.0D, 16.0D, 0.0D, 16.0D); - public MixinCarpetBlock(Settings settings) { + public MixinCarpetBlock(Properties settings) { super(settings); } @Override - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { return viaFabricPlus$shape_r1_7_10; } else { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCauldronBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCauldronBlock.java index 0d57c345d..5133213fe 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCauldronBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCauldronBlock.java @@ -24,17 +24,17 @@ import com.viaversion.viafabricplus.injection.ViaFabricPlusMixinPlugin; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.AbstractCauldronBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.CauldronBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.cauldron.CauldronBehavior; -import net.minecraft.util.function.BooleanBiFunction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.AbstractCauldronBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CauldronBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.cauldron.CauldronInteraction; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -43,22 +43,22 @@ public abstract class MixinCauldronBlock extends AbstractCauldronBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_12_2 = VoxelShapes.combineAndSimplify( - VoxelShapes.fullCube(), - Block.createCuboidShape(2.0D, 5.0D, 2.0D, 14.0D, 16.0D, 14.0D), - BooleanBiFunction.ONLY_FIRST + private static final VoxelShape viaFabricPlus$shape_r1_12_2 = Shapes.join( + Shapes.block(), + Block.box(2.0D, 5.0D, 2.0D, 14.0D, 16.0D, 14.0D), + BooleanOp.ONLY_FIRST ); @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.union( - VoxelShapes.cuboid(0.0, 0.0, 0.0, 1.0, 0.3125, 1.0), - VoxelShapes.cuboid(0.0, 0.0, 0.0, 0.125, 1.0, 1.0), - VoxelShapes.cuboid(0.0, 0.0, 0.0, 1.0, 1.0, 0.125), - VoxelShapes.cuboid(1.0 - 0.125, 0.0, 0.0, 1.0, 1.0, 1.0), - VoxelShapes.cuboid(0.0, 0.0, 1.0 - 0.125, 1.0, 1.0, 1.0) + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.or( + Shapes.box(0.0, 0.0, 0.0, 1.0, 0.3125, 1.0), + Shapes.box(0.0, 0.0, 0.0, 0.125, 1.0, 1.0), + Shapes.box(0.0, 0.0, 0.0, 1.0, 1.0, 0.125), + Shapes.box(1.0 - 0.125, 0.0, 0.0, 1.0, 1.0, 1.0), + Shapes.box(0.0, 0.0, 1.0 - 0.125, 1.0, 1.0, 1.0) ); - public MixinCauldronBlock(Settings settings, CauldronBehavior.CauldronBehaviorMap behaviorMap) { + public MixinCauldronBlock(Properties settings, CauldronInteraction.InteractionMap behaviorMap) { super(settings, behaviorMap); } @@ -66,7 +66,7 @@ public MixinCauldronBlock(Settings settings, CauldronBehavior.CauldronBehaviorMa private boolean viaFabricPlus$requireOriginalShape; @Override - public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ViaFabricPlusMixinPlugin.MORE_CULLING_PRESENT && viaFabricPlus$requireOriginalShape) { viaFabricPlus$requireOriginalShape = false; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { @@ -74,15 +74,15 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po } else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return viaFabricPlus$shape_bedrock; } - return super.getOutlineShape(state, world, pos, context); + return super.getShape(state, world, pos, context); } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { // Workaround for https://github.com/ViaVersion/ViaFabricPlus/issues/246 // MoreCulling is caching the culling shape and doesn't reload it, so we have to force vanilla's shape here. viaFabricPlus$requireOriginalShape = true; - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinChestBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinChestBlock.java index b0b0ff2da..b2c4fa94d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinChestBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinChestBlock.java @@ -24,19 +24,19 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.util.Map; import java.util.function.Supplier; -import net.minecraft.block.AbstractChestBlock; -import net.minecraft.block.BlockState; -import net.minecraft.block.ChestBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.entity.BlockEntityType; -import net.minecraft.block.entity.ChestBlockEntity; -import net.minecraft.block.enums.ChestType; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.AbstractChestBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.ChestBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.block.state.properties.ChestType; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; @@ -51,60 +51,60 @@ public abstract class MixinChestBlock extends AbstractChestBlock { @Unique - private static final VoxelShape viaFabricPlus$single_chest_shape_bedrock = VoxelShapes.cuboid(0.025, 0, 0.025, 0.975, 0.95, 0.975); + private static final VoxelShape viaFabricPlus$single_chest_shape_bedrock = Shapes.box(0.025, 0, 0.025, 0.975, 0.95, 0.975); @Unique private static final Map viaFabricPlus$double_chest_shapes_bedrock = Map.of( - Direction.NORTH, VoxelShapes.cuboid(0.025, 0, 0, 0.975, 0.95, 0.975), - Direction.SOUTH, VoxelShapes.cuboid(0.025, 0, 0.025, 0.975, 0.95, 1), - Direction.WEST, VoxelShapes.cuboid(0, 0, 0.025, 0.975, 0.95, 0.975), - Direction.EAST, VoxelShapes.cuboid(0.025, 0, 0.025, 1, 0.95, 0.975) + Direction.NORTH, Shapes.box(0.025, 0, 0, 0.975, 0.95, 0.975), + Direction.SOUTH, Shapes.box(0.025, 0, 0.025, 0.975, 0.95, 1), + Direction.WEST, Shapes.box(0, 0, 0.025, 0.975, 0.95, 0.975), + Direction.EAST, Shapes.box(0.025, 0, 0.025, 1, 0.95, 0.975) ); @Shadow @Final - private static Map DOUBLE_SHAPES_BY_DIRECTION; + private static Map HALF_SHAPES; @Shadow @Final - private static VoxelShape SINGLE_SHAPE; + private static VoxelShape SHAPE; @Shadow @Final - public static EnumProperty CHEST_TYPE; + public static EnumProperty TYPE; @Shadow - public static Direction getFacing(final BlockState state) { + public static Direction getConnectedDirection(final BlockState state) { return null; } - protected MixinChestBlock(Settings settings, Supplier> blockEntityTypeSupplier) { + protected MixinChestBlock(Properties settings, Supplier> blockEntityTypeSupplier) { super(settings, blockEntityTypeSupplier); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_2)) { - cir.setReturnValue(VoxelShapes.fullCube()); + cir.setReturnValue(Shapes.block()); } else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - cir.setReturnValue(switch (state.get(CHEST_TYPE)) { + cir.setReturnValue(switch (state.getValue(TYPE)) { case SINGLE -> viaFabricPlus$single_chest_shape_bedrock; - case LEFT, RIGHT -> viaFabricPlus$double_chest_shapes_bedrock.get(getFacing(state)); + case LEFT, RIGHT -> viaFabricPlus$double_chest_shapes_bedrock.get(getConnectedDirection(state)); }); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_2) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - if (state.get(ChestBlock.CHEST_TYPE) == ChestType.SINGLE) { - return SINGLE_SHAPE; + if (state.getValue(ChestBlock.TYPE) == ChestType.SINGLE) { + return SHAPE; } else { - return DOUBLE_SHAPES_BY_DIRECTION.get(ChestBlock.getFacing(state)); + return HALF_SHAPES.get(ChestBlock.getConnectedDirection(state)); } } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCropBlocks.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCropBlocks.java index 2e86ebea5..0064eaca6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCropBlocks.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCropBlocks.java @@ -22,24 +22,24 @@ package com.viaversion.viafabricplus.injection.mixin.features.block.shape; import com.viaversion.viafabricplus.settings.impl.DebugSettings; -import net.minecraft.block.Block; -import net.minecraft.block.CarrotsBlock; -import net.minecraft.block.CropBlock; -import net.minecraft.block.PotatoesBlock; -import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.CarrotBlock; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.PotatoBlock; +import net.minecraft.world.phys.shapes.VoxelShape; 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.CallbackInfoReturnable; -@Mixin({CropBlock.class, CarrotsBlock.class, PotatoesBlock.class}) +@Mixin({CropBlock.class, CarrotBlock.class, PotatoBlock.class}) public abstract class MixinCropBlocks { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_8_x = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_8_x = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D); - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) private void changeOutlineShape(CallbackInfoReturnable cir) { if (DebugSettings.INSTANCE.legacyCropOutlines.isEnabled()) { cir.setReturnValue(viaFabricPlus$shape_r1_8_x); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHorizontalConnectingBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCrossCollisionBlock.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHorizontalConnectingBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCrossCollisionBlock.java index e1f52fd9a..e9fea825e 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHorizontalConnectingBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinCrossCollisionBlock.java @@ -21,17 +21,17 @@ package com.viaversion.viafabricplus.injection.mixin.features.block.shape; -import com.viaversion.viafabricplus.injection.access.block.shape.IHorizontalConnectingBlock; +import com.viaversion.viafabricplus.injection.access.block.shape.ICrossCollisionBlock; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalConnectingBlock; -import net.minecraft.util.math.Direction; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CrossCollisionBlock; +import net.minecraft.core.Direction; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -@Mixin(HorizontalConnectingBlock.class) -public abstract class MixinHorizontalConnectingBlock implements IHorizontalConnectingBlock { +@Mixin(CrossCollisionBlock.class) +public abstract class MixinCrossCollisionBlock implements ICrossCollisionBlock { @Unique private final Object2IntMap viaFabricPlus$SHAPE_INDEX_CACHE = new Object2IntOpenHashMap<>(); @@ -40,17 +40,17 @@ public abstract class MixinHorizontalConnectingBlock implements IHorizontalConne public int viaFabricPlus$getShapeIndex(final BlockState blockState) { return viaFabricPlus$SHAPE_INDEX_CACHE.computeIfAbsent(blockState, statex -> { int index = 0; - if (blockState.get(HorizontalConnectingBlock.NORTH)) { - index |= 1 << Direction.NORTH.getHorizontalQuarterTurns(); + if (blockState.getValue(CrossCollisionBlock.NORTH)) { + index |= 1 << Direction.NORTH.get2DDataValue(); } - if (blockState.get(HorizontalConnectingBlock.EAST)) { - index |= 1 << Direction.EAST.getHorizontalQuarterTurns(); + if (blockState.getValue(CrossCollisionBlock.EAST)) { + index |= 1 << Direction.EAST.get2DDataValue(); } - if (blockState.get(HorizontalConnectingBlock.SOUTH)) { - index |= 1 << Direction.SOUTH.getHorizontalQuarterTurns(); + if (blockState.getValue(CrossCollisionBlock.SOUTH)) { + index |= 1 << Direction.SOUTH.get2DDataValue(); } - if (blockState.get(HorizontalConnectingBlock.WEST)) { - index |= 1 << Direction.WEST.getHorizontalQuarterTurns(); + if (blockState.getValue(CrossCollisionBlock.WEST)) { + index |= 1 << Direction.WEST.get2DDataValue(); } return index; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalBlock.java index cbbc68ecf..c80a35052 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalBlock.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.BlockWithEntity; -import net.minecraft.block.EndPortalBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.EndPortalBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -38,20 +38,20 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(EndPortalBlock.class) -public abstract class MixinEndPortalBlock extends BlockWithEntity { +public abstract class MixinEndPortalBlock extends BaseEntityBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_8_x = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_8_x = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 1.0D, 16.0D); @Unique - private static final VoxelShape viaFabricPlus$shape_r1_16_5 = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_16_5 = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D); - protected MixinEndPortalBlock(Settings settings) { + protected MixinEndPortalBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(viaFabricPlus$shape_r1_8_x); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalFrameBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalFrameBlock.java index ec9dab279..a4e05acbe 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalFrameBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEndPortalFrameBlock.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.EndPortalFrameBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.state.property.BooleanProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.EndPortalFrameBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -46,29 +46,29 @@ public abstract class MixinEndPortalFrameBlock extends Block { @Shadow @Final - private static VoxelShape FRAME_SHAPE; + private static VoxelShape SHAPE_EMPTY; @Shadow @Final - public static BooleanProperty EYE; + public static BooleanProperty HAS_EYE; @Unique - private static final VoxelShape viaFabricPlus$eye_shape_r1_12_2 = Block.createCuboidShape(5.0D, 13.0D, 5.0D, 11.0D, 16.0D, 11.0D); + private static final VoxelShape viaFabricPlus$eye_shape_r1_12_2 = Block.box(5.0D, 13.0D, 5.0D, 11.0D, 16.0D, 11.0D); @Unique - private static final VoxelShape viaFabricPlus$frame_with_eye_shape_r1_12_2 = VoxelShapes.union(FRAME_SHAPE, viaFabricPlus$eye_shape_r1_12_2); + private static final VoxelShape viaFabricPlus$frame_with_eye_shape_r1_12_2 = Shapes.or(SHAPE_EMPTY, viaFabricPlus$eye_shape_r1_12_2); @Unique - private static final VoxelShape viaFabricPlus$shape_frame_bedrock = VoxelShapes.cuboid(0, 0, 0, 1, 0.8125, 1); + private static final VoxelShape viaFabricPlus$shape_frame_bedrock = Shapes.box(0, 0, 0, 1, 0.8125, 1); - public MixinEndPortalFrameBlock(Settings settings) { + public MixinEndPortalFrameBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At(value = "HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At(value = "HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(FRAME_SHAPE); + cir.setReturnValue(SHAPE_EMPTY); } else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { // The eye doesn't have a different shape on bedrock cir.setReturnValue(viaFabricPlus$shape_frame_bedrock); @@ -76,20 +76,20 @@ private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, } @Override - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - return state.get(EYE) ? viaFabricPlus$frame_with_eye_shape_r1_12_2 : FRAME_SHAPE; + return state.getValue(HAS_EYE) ? viaFabricPlus$frame_with_eye_shape_r1_12_2 : SHAPE_EMPTY; } else { return super.getCollisionShape(state, world, pos, context); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return FRAME_SHAPE; + return SHAPE_EMPTY; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEnderChestBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEnderChestBlock.java index 75a0e88d9..8ec86c224 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEnderChestBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinEnderChestBlock.java @@ -22,14 +22,14 @@ package com.viaversion.viafabricplus.injection.mixin.features.block.shape; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.BlockState; -import net.minecraft.block.BlockWithEntity; -import net.minecraft.block.EnderChestBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.EnderChestBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; @@ -41,35 +41,35 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(EnderChestBlock.class) -public abstract class MixinEnderChestBlock extends BlockWithEntity { +public abstract class MixinEnderChestBlock extends BaseEntityBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_bedrock = VoxelShapes.cuboid(0.025, 0, 0.025, 0.975, 0.95, 0.975); + private static final VoxelShape viaFabricPlus$shape_bedrock = Shapes.box(0.025, 0, 0.025, 0.975, 0.95, 0.975); @Shadow @Final private static VoxelShape SHAPE; - protected MixinEnderChestBlock(Settings settings) { + protected MixinEnderChestBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_2)) { - cir.setReturnValue(VoxelShapes.fullCube()); + cir.setReturnValue(Shapes.block()); } else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { cir.setReturnValue(viaFabricPlus$shape_bedrock); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_2) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return SHAPE; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFarmlandBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFarmBlock.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFarmlandBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFarmBlock.java index e92ce8830..52db35ab2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFarmlandBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFarmBlock.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FarmlandBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.client.MinecraftClient; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FarmBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,20 +39,20 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(FarmlandBlock.class) -public abstract class MixinFarmlandBlock extends Block { +@Mixin(FarmBlock.class) +public abstract class MixinFarmBlock extends Block { @Shadow @Final private static VoxelShape SHAPE; - public MixinFarmlandBlock(Settings settings) { + public MixinFarmBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (MinecraftClient.getInstance() != null && MinecraftClient.getInstance().isInSingleplayer()) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { + if (Minecraft.getInstance() != null && Minecraft.getInstance().isLocalServer()) { // When joining the singleplayer, we set the target version to the native version when the integrated server is started // However this is already to late for blocks since the world and entities have already been loaded, causing block collisions // to make issues as described via https://github.com/ViaVersion/ViaFabricPlus/issues/436. A proper fix would be to @@ -61,21 +61,21 @@ private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_9_3)) { - cir.setReturnValue(VoxelShapes.fullCube()); + cir.setReturnValue(Shapes.block()); } } @Override - public VoxelShape getCullingShape(BlockState state) { - if (MinecraftClient.getInstance() != null && MinecraftClient.getInstance().isInSingleplayer()) { + public VoxelShape getOcclusionShape(BlockState state) { + if (Minecraft.getInstance() != null && Minecraft.getInstance().isLocalServer()) { // See above for explanation - return super.getCullingShape(state); + return super.getOcclusionShape(state); } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_9_3)) { return SHAPE; } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceBlock.java index d30e10f14..b322a392f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceBlock.java @@ -22,19 +22,19 @@ package com.viaversion.viafabricplus.injection.mixin.features.block.shape; import com.viaversion.viafabricplus.features.block.interaction.Block1_14; -import com.viaversion.viafabricplus.injection.access.block.shape.IHorizontalConnectingBlock; +import com.viaversion.viafabricplus.injection.access.block.shape.ICrossCollisionBlock; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FenceBlock; -import net.minecraft.block.HorizontalConnectingBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FenceBlock; +import net.minecraft.world.level.block.CrossCollisionBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -44,10 +44,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(FenceBlock.class) -public abstract class MixinFenceBlock extends HorizontalConnectingBlock implements IHorizontalConnectingBlock { +public abstract class MixinFenceBlock extends CrossCollisionBlock implements ICrossCollisionBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_b1_8_1 = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 24.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_b1_8_1 = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 24.0D, 16.0D); @Unique private VoxelShape[] viaFabricPlus$collision_shape_r1_4_7; @@ -55,17 +55,17 @@ public abstract class MixinFenceBlock extends HorizontalConnectingBlock implemen @Unique private VoxelShape[] viaFabricPlus$outline_shape_r1_4_7; - protected MixinFenceBlock(float radius1, float radius2, float boundingHeight1, float boundingHeight2, float collisionHeight, Settings settings) { + protected MixinFenceBlock(float radius1, float radius2, float boundingHeight1, float boundingHeight2, float collisionHeight, Properties settings) { super(radius1, radius2, boundingHeight1, boundingHeight2, collisionHeight, settings); } @Inject(method = "", at = @At("RETURN")) - private void init1_4_7Shapes(Settings settings, CallbackInfo ci) { + private void init1_4_7Shapes(Properties settings, CallbackInfo ci) { this.viaFabricPlus$collision_shape_r1_4_7 = this.viaFabricPlus$createShapes1_4_7(24.0F); this.viaFabricPlus$outline_shape_r1_4_7 = this.viaFabricPlus$createShapes1_4_7(16.0F); } - @Inject(method = "canConnect", at = @At("RETURN"), cancellable = true) + @Inject(method = "connectsTo", at = @At("RETURN"), cancellable = true) private void canConnect1_14(BlockState state, boolean neighborIsFullSquare, Direction dir, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14)) { if (!Block1_14.isExceptBlockForAttachWithPiston(state.getBlock())) { @@ -75,18 +75,18 @@ private void canConnect1_14(BlockState state, boolean neighborIsFullSquare, Dire } @Override - public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { - return VoxelShapes.fullCube(); + return Shapes.block(); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7)) { return this.viaFabricPlus$outline_shape_r1_4_7[this.viaFabricPlus$getShapeIndex(state)]; } else { - return super.getOutlineShape(state, world, pos, context); + return super.getShape(state, world, pos, context); } } @Override - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { return viaFabricPlus$shape_b1_8_1; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7)) { @@ -102,34 +102,34 @@ public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos final float g = 10.0F; final float h = 6.0F; final float i = 10.0F; - final VoxelShape baseShape = Block.createCuboidShape(f, 0.0, f, g, height, g); - final VoxelShape northShape = Block.createCuboidShape(h, (float) 0.0, 0.0, i, height, i); - final VoxelShape southShape = Block.createCuboidShape(h, (float) 0.0, h, i, height, 16.0); - final VoxelShape westShape = Block.createCuboidShape(0.0, (float) 0.0, h, i, height, i); - final VoxelShape eastShape = Block.createCuboidShape(h, (float) 0.0, h, 16.0, height, i); + final VoxelShape baseShape = Block.box(f, 0.0, f, g, height, g); + final VoxelShape northShape = Block.box(h, (float) 0.0, 0.0, i, height, i); + final VoxelShape southShape = Block.box(h, (float) 0.0, h, i, height, 16.0); + final VoxelShape westShape = Block.box(0.0, (float) 0.0, h, i, height, i); + final VoxelShape eastShape = Block.box(h, (float) 0.0, h, 16.0, height, i); final VoxelShape[] voxelShapes = new VoxelShape[]{ - VoxelShapes.empty(), - Block.createCuboidShape(f, (float) 0.0, h, g, height, 16.0D), - Block.createCuboidShape(0.0D, (float) 0.0, f, i, height, g), - Block.createCuboidShape(f - 6, (float) 0.0, h, g, height, 16.0D), - Block.createCuboidShape(f, (float) 0.0, 0.0D, g, height, i), - - VoxelShapes.union(southShape, northShape), - Block.createCuboidShape(f - 6, (float) 0.0, 0.0D, g, height, i), - Block.createCuboidShape(f - 6, (float) 0.0, h - 5, g, height, 16.0D), - Block.createCuboidShape(h, (float) 0.0, f, 16.0D, height, g), - Block.createCuboidShape(h, (float) 0.0, f, 16.0D, height, g + 6), - - VoxelShapes.union(westShape, eastShape), - Block.createCuboidShape(h - 5, (float) 0.0, f, 16.0D, height, g + 6), - Block.createCuboidShape(f, (float) 0.0, 0.0D, g + 6, height, i), - Block.createCuboidShape(f, (float) 0.0, 0.0D, g + 6, height, i + 5), - Block.createCuboidShape(h - 5, (float) 0.0, f - 6, 16.0D, height, g), - Block.createCuboidShape(0, (float) 0.0, 0, 16.0D, height, 16.0D) + Shapes.empty(), + Block.box(f, (float) 0.0, h, g, height, 16.0D), + Block.box(0.0D, (float) 0.0, f, i, height, g), + Block.box(f - 6, (float) 0.0, h, g, height, 16.0D), + Block.box(f, (float) 0.0, 0.0D, g, height, i), + + Shapes.or(southShape, northShape), + Block.box(f - 6, (float) 0.0, 0.0D, g, height, i), + Block.box(f - 6, (float) 0.0, h - 5, g, height, 16.0D), + Block.box(h, (float) 0.0, f, 16.0D, height, g), + Block.box(h, (float) 0.0, f, 16.0D, height, g + 6), + + Shapes.or(westShape, eastShape), + Block.box(h - 5, (float) 0.0, f, 16.0D, height, g + 6), + Block.box(f, (float) 0.0, 0.0D, g + 6, height, i), + Block.box(f, (float) 0.0, 0.0D, g + 6, height, i + 5), + Block.box(h - 5, (float) 0.0, f - 6, 16.0D, height, g), + Block.box(0, (float) 0.0, 0, 16.0D, height, 16.0D) }; for (int j = 0; j < 16; ++j) { - voxelShapes[j] = VoxelShapes.union(baseShape, voxelShapes[j]); + voxelShapes[j] = Shapes.or(baseShape, voxelShapes[j]); } return voxelShapes; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceGateBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceGateBlock.java index 7974bf6b2..2b8f483a5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceGateBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFenceGateBlock.java @@ -22,15 +22,15 @@ package com.viaversion.viafabricplus.injection.mixin.features.block.shape; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FenceGateBlock; -import net.minecraft.block.HorizontalFacingBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -39,25 +39,25 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(FenceGateBlock.class) -public abstract class MixinFenceGateBlock extends HorizontalFacingBlock { +public abstract class MixinFenceGateBlock extends HorizontalDirectionalBlock { @Unique - private static final VoxelShape viaFabricPlus$x_and_z_axis_collision_shape_b1_8_1 = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 24.0D, 16.0D); + private static final VoxelShape viaFabricPlus$x_and_z_axis_collision_shape_b1_8_1 = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 24.0D, 16.0D); - protected MixinFenceGateBlock(Settings settings) { + protected MixinFenceGateBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (!state.get(FenceGateBlock.IN_WALL) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { - cir.setReturnValue(VoxelShapes.fullCube()); + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { + if (!state.getValue(FenceGateBlock.IN_WALL) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { + cir.setReturnValue(Shapes.block()); } } @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) - private void changeCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (!state.get(FenceGateBlock.OPEN) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { + private void changeCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { + if (!state.getValue(FenceGateBlock.OPEN) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { cir.setReturnValue(viaFabricPlus$x_and_z_axis_collision_shape_b1_8_1); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFireBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFireBlock.java index 0749a1586..6f77eeb74 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFireBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFireBlock.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BlockState; -import net.minecraft.block.FireBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FireBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -38,10 +38,10 @@ @Mixin(FireBlock.class) public abstract class MixinFireBlock { - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { - cir.setReturnValue(VoxelShapes.empty()); + cir.setReturnValue(Shapes.empty()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFlowerbedBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFlowerBedBlock.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFlowerbedBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFlowerBedBlock.java index 83e88d577..05ef0750c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFlowerbedBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinFlowerBedBlock.java @@ -23,27 +23,27 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FlowerbedBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FlowerBedBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; 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.CallbackInfoReturnable; -@Mixin(FlowerbedBlock.class) -public abstract class MixinFlowerbedBlock { +@Mixin(FlowerBedBlock.class) +public abstract class MixinFlowerBedBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_20_1 = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 3.0D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_20_1 = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 3.0D, 16.0D); - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20)) { cir.setReturnValue(viaFabricPlus$shape_r1_20_1); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHopperBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHopperBlock.java index a1d76435d..7f5af5009 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHopperBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinHopperBlock.java @@ -24,16 +24,16 @@ import com.viaversion.viafabricplus.injection.ViaFabricPlusMixinPlugin; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.BlockWithEntity; -import net.minecraft.block.HopperBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.function.BooleanBiFunction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.HopperBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -41,23 +41,23 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(HopperBlock.class) -public abstract class MixinHopperBlock extends BlockWithEntity { +public abstract class MixinHopperBlock extends BaseEntityBlock { @Unique - private static final VoxelShape viaFabricPlus$inside_shape_r1_12_2 = Block.createCuboidShape(2.0D, 10.0D, 2.0D, 14.0D, 16.0D, 14.0D); + private static final VoxelShape viaFabricPlus$inside_shape_r1_12_2 = Block.box(2.0D, 10.0D, 2.0D, 14.0D, 16.0D, 14.0D); @Unique - private static final VoxelShape viaFabricPlus$hopper_shape_r1_12_2 = VoxelShapes.combineAndSimplify(VoxelShapes.fullCube(), viaFabricPlus$inside_shape_r1_12_2, BooleanBiFunction.ONLY_FIRST); + private static final VoxelShape viaFabricPlus$hopper_shape_r1_12_2 = Shapes.join(Shapes.block(), viaFabricPlus$inside_shape_r1_12_2, BooleanOp.ONLY_FIRST); @Unique private boolean viaFabricPlus$requireOriginalShape; - public MixinHopperBlock(Settings settings) { + public MixinHopperBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ViaFabricPlusMixinPlugin.MORE_CULLING_PRESENT && viaFabricPlus$requireOriginalShape) { viaFabricPlus$requireOriginalShape = false; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { @@ -65,18 +65,18 @@ private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, } } - @Inject(method = "getRaycastShape", at = @At("HEAD"), cancellable = true) - private void changeRaycastShape(BlockState state, BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "getInteractionShape", at = @At("HEAD"), cancellable = true) + private void changeRaycastShape(BlockState state, BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { cir.setReturnValue(viaFabricPlus$inside_shape_r1_12_2); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { // Workaround for https://github.com/ViaVersion/ViaFabricPlus/issues/45 viaFabricPlus$requireOriginalShape = true; - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinIronBarsBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinIronBarsBlock.java new file mode 100644 index 000000000..c7067f315 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinIronBarsBlock.java @@ -0,0 +1,130 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.block.shape; + +import com.viaversion.viafabricplus.injection.access.block.shape.ICrossCollisionBlock; +import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; +import com.viaversion.viafabricplus.settings.impl.DebugSettings; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.CrossCollisionBlock; +import net.minecraft.world.level.block.IronBarsBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; +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(IronBarsBlock.class) +public abstract class MixinIronBarsBlock extends CrossCollisionBlock implements ICrossCollisionBlock { + + @Unique + private VoxelShape[] viaFabricPlus$shape_r1_12_2; + + @Unique + private VoxelShape[] viaFabricPlus$shape_r1_8; + + protected MixinIronBarsBlock(float radius1, float radius2, float boundingHeight1, float boundingHeight2, float collisionHeight, Properties settings) { + super(radius1, radius2, boundingHeight1, boundingHeight2, collisionHeight, settings); + } + + @Inject(method = "", at = @At("RETURN")) + private void initShapes1_8(Properties settings, CallbackInfo ci) { + final float f = 7.0F; + final float g = 9.0F; + final float h = 7.0F; + final float i = 9.0F; + + final VoxelShape baseShape = Block.box(f, 0.0, f, g, (float) 16.0, g); + + viaFabricPlus$shape_r1_12_2 = new VoxelShape[]{ + baseShape, + Block.box(h, 0.0, h, i, 16.0, 16.0), // south + Block.box(0.0, 0.0, h, i, 16.0, i), // west + Block.box(0.0, 0.0, h, i, 16.0, 16.0), // south-west corner + Block.box(h, 0.0, 0.0, i, 16.0, i), // north + Block.box(h, 0.0, 0.0, i, 16.0, 16.0), // south-north line + Block.box(0.0, 0.0, 0.0, i, 16.0, i), // west-north corner + Block.box(0.0, 0.0, 0.0, i, 16.0, 16.0), // south-west-north T + Block.box(h, 0.0, h, 16.0, 16.0, i), // east + Block.box(h, 0.0, h, 16.0, 16.0, 16.0), // south-east corner + Block.box(0.0, 0.0, h, 16.0, 16.0, i), // west-east line + Block.box(0.0, 0.0, h, 16.0, 16.0, 16.0), // south-west-east T + Block.box(h, 0.0, 0.0, 16.0, 16.0, i), // north-east corner + Block.box(h, 0.0, 0.0, 16.0, 16.0, 16.0), // south-north-east T + Block.box(0.0, 0.0, 0.0, 16.0, 16.0, i), // west-north-east T + Shapes.block() // cross + }; + + final VoxelShape northShape = Block.box(h, (float) 0.0, 0.0, i, (float) 16.0, i - 1); + final VoxelShape southShape = Block.box(h, (float) 0.0, h + 1, i, (float) 16.0, 16.0); + final VoxelShape westShape = Block.box(0.0, (float) 0.0, h, i - 1, (float) 16.0, i); + final VoxelShape eastShape = Block.box(h + 1, (float) 0.0, h, 16.0, (float) 16.0, i); + + final VoxelShape northEastCornerShape = Shapes.or(northShape, eastShape); + final VoxelShape southWestCornerShape = Shapes.or(southShape, westShape); + + viaFabricPlus$shape_r1_8 = new VoxelShape[]{ + baseShape, + southShape, + westShape, + southWestCornerShape, + northShape, + Shapes.or(southShape, northShape), + Shapes.or(westShape, northShape), + Shapes.or(southWestCornerShape, northShape), + eastShape, + Shapes.or(southShape, eastShape), + Shapes.or(westShape, eastShape), + Shapes.or(southWestCornerShape, eastShape), + northEastCornerShape, + Shapes.or(southShape, northEastCornerShape), + Shapes.or(westShape, northEastCornerShape), + Shapes.or(southWestCornerShape, northEastCornerShape) + }; + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + if (DebugSettings.INSTANCE.legacyPaneOutlines.isEnabled()) { + return this.viaFabricPlus$shape_r1_12_2[this.viaFabricPlus$getShapeIndex(state)]; + } else { + return super.getShape(state, world, pos, context); + } + } + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { + return this.viaFabricPlus$shape_r1_8[this.viaFabricPlus$getShapeIndex(state)]; + } else { + return super.getCollisionShape(state, world, pos, context); + } + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLadderBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLadderBlock.java index 0b34ca015..ce345a88f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLadderBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLadderBlock.java @@ -24,13 +24,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Map; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LadderBlock; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.LadderBlock; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -44,50 +44,50 @@ public abstract class MixinLadderBlock extends Block { @Unique private static final Map viaFabricPlus$shapes_r1_8_x = Map.of( - Direction.NORTH, Block.createCuboidShape(0.0D, 0.0D, 14.0D, 16.0D, 16.0D, 16.0D), - Direction.SOUTH, Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 2.0D), - Direction.WEST, Block.createCuboidShape(14.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), - Direction.EAST, Block.createCuboidShape(0.0D, 0.0D, 0.0D, 2.0D, 16.0D, 16.0D) + Direction.NORTH, Block.box(0.0D, 0.0D, 14.0D, 16.0D, 16.0D, 16.0D), + Direction.SOUTH, Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 2.0D), + Direction.WEST, Block.box(14.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D), + Direction.EAST, Block.box(0.0D, 0.0D, 0.0D, 2.0D, 16.0D, 16.0D) ); @Unique private static final Map viaFabricPlus$shapes_bedrock = Map.of( - Direction.NORTH, VoxelShapes.cuboid(0, 0, 0.8125, 1, 1, 1), - Direction.SOUTH, VoxelShapes.cuboid(0, 0, 0, 1, 1, 0.1875), - Direction.WEST, VoxelShapes.cuboid(0.8125, 0, 0, 1, 1, 1), - Direction.EAST, VoxelShapes.cuboid(0, 0, 0, 0.1875, 1, 1) + Direction.NORTH, Shapes.box(0, 0, 0.8125, 1, 1, 1), + Direction.SOUTH, Shapes.box(0, 0, 0, 1, 1, 0.1875), + Direction.WEST, Shapes.box(0.8125, 0, 0, 1, 1, 1), + Direction.EAST, Shapes.box(0, 0, 0, 0.1875, 1, 1) ); @Shadow @Final - public static Map SHAPES_BY_DIRECTION; + public static Map SHAPES; @Shadow @Final public static EnumProperty FACING; - public MixinLadderBlock(final Settings settings) { + public MixinLadderBlock(final Properties settings) { super(settings); } - @Redirect(method = "getOutlineShape", at = @At(value = "FIELD", target = "Lnet/minecraft/block/LadderBlock;SHAPES_BY_DIRECTION:Ljava/util/Map;")) + @Redirect(method = "getShape", at = @At(value = "FIELD", target = "Lnet/minecraft/world/level/block/LadderBlock;SHAPES:Ljava/util/Map;")) private Map changeOutlineShape() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { return viaFabricPlus$shapes_r1_8_x; } else if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return viaFabricPlus$shapes_bedrock; } else { - return SHAPES_BY_DIRECTION; + return SHAPES; } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return SHAPES_BY_DIRECTION.get(state.get(FACING)); + return SHAPES.get(state.getValue(FACING)); } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLeavesBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLeavesBlock.java index 3b10d2702..2013f10ab 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLeavesBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLeavesBlock.java @@ -23,12 +23,12 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LeavesBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -37,14 +37,14 @@ @Mixin(LeavesBlock.class) public abstract class MixinLeavesBlock extends Block { - public MixinLeavesBlock(Settings settings) { + public MixinLeavesBlock(Properties settings) { super(settings); } - @Inject(method = "getSidesShape", at = @At("HEAD"), cancellable = true) - private void changeSidesShape(BlockState state, BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "getBlockSupportShape", at = @At("HEAD"), cancellable = true) + private void changeSidesShape(BlockState state, BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_14, ProtocolVersion.v1_15_2)) { - cir.setReturnValue(super.getSidesShape(state, world, pos)); + cir.setReturnValue(super.getBlockSupportShape(state, world, pos)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPaneBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPaneBlock.java deleted file mode 100644 index 9aaf57250..000000000 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPaneBlock.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.injection.mixin.features.block.shape; - -import com.viaversion.viafabricplus.injection.access.block.shape.IHorizontalConnectingBlock; -import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import com.viaversion.viafabricplus.settings.impl.DebugSettings; -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.HorizontalConnectingBlock; -import net.minecraft.block.PaneBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; -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(PaneBlock.class) -public abstract class MixinPaneBlock extends HorizontalConnectingBlock implements IHorizontalConnectingBlock { - - @Unique - private VoxelShape[] viaFabricPlus$shape_r1_12_2; - - @Unique - private VoxelShape[] viaFabricPlus$shape_r1_8; - - protected MixinPaneBlock(float radius1, float radius2, float boundingHeight1, float boundingHeight2, float collisionHeight, Settings settings) { - super(radius1, radius2, boundingHeight1, boundingHeight2, collisionHeight, settings); - } - - @Inject(method = "", at = @At("RETURN")) - private void initShapes1_8(Settings settings, CallbackInfo ci) { - final float f = 7.0F; - final float g = 9.0F; - final float h = 7.0F; - final float i = 9.0F; - - final VoxelShape baseShape = Block.createCuboidShape(f, 0.0, f, g, (float) 16.0, g); - - viaFabricPlus$shape_r1_12_2 = new VoxelShape[]{ - baseShape, - Block.createCuboidShape(h, 0.0, h, i, 16.0, 16.0), // south - Block.createCuboidShape(0.0, 0.0, h, i, 16.0, i), // west - Block.createCuboidShape(0.0, 0.0, h, i, 16.0, 16.0), // south-west corner - Block.createCuboidShape(h, 0.0, 0.0, i, 16.0, i), // north - Block.createCuboidShape(h, 0.0, 0.0, i, 16.0, 16.0), // south-north line - Block.createCuboidShape(0.0, 0.0, 0.0, i, 16.0, i), // west-north corner - Block.createCuboidShape(0.0, 0.0, 0.0, i, 16.0, 16.0), // south-west-north T - Block.createCuboidShape(h, 0.0, h, 16.0, 16.0, i), // east - Block.createCuboidShape(h, 0.0, h, 16.0, 16.0, 16.0), // south-east corner - Block.createCuboidShape(0.0, 0.0, h, 16.0, 16.0, i), // west-east line - Block.createCuboidShape(0.0, 0.0, h, 16.0, 16.0, 16.0), // south-west-east T - Block.createCuboidShape(h, 0.0, 0.0, 16.0, 16.0, i), // north-east corner - Block.createCuboidShape(h, 0.0, 0.0, 16.0, 16.0, 16.0), // south-north-east T - Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, i), // west-north-east T - VoxelShapes.fullCube() // cross - }; - - final VoxelShape northShape = Block.createCuboidShape(h, (float) 0.0, 0.0, i, (float) 16.0, i - 1); - final VoxelShape southShape = Block.createCuboidShape(h, (float) 0.0, h + 1, i, (float) 16.0, 16.0); - final VoxelShape westShape = Block.createCuboidShape(0.0, (float) 0.0, h, i - 1, (float) 16.0, i); - final VoxelShape eastShape = Block.createCuboidShape(h + 1, (float) 0.0, h, 16.0, (float) 16.0, i); - - final VoxelShape northEastCornerShape = VoxelShapes.union(northShape, eastShape); - final VoxelShape southWestCornerShape = VoxelShapes.union(southShape, westShape); - - viaFabricPlus$shape_r1_8 = new VoxelShape[]{ - baseShape, - southShape, - westShape, - southWestCornerShape, - northShape, - VoxelShapes.union(southShape, northShape), - VoxelShapes.union(westShape, northShape), - VoxelShapes.union(southWestCornerShape, northShape), - eastShape, - VoxelShapes.union(southShape, eastShape), - VoxelShapes.union(westShape, eastShape), - VoxelShapes.union(southWestCornerShape, eastShape), - northEastCornerShape, - VoxelShapes.union(southShape, northEastCornerShape), - VoxelShapes.union(westShape, northEastCornerShape), - VoxelShapes.union(southWestCornerShape, northEastCornerShape) - }; - } - - @Override - public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { - if (DebugSettings.INSTANCE.legacyPaneOutlines.isEnabled()) { - return this.viaFabricPlus$shape_r1_12_2[this.viaFabricPlus$getShapeIndex(state)]; - } else { - return super.getOutlineShape(state, world, pos, context); - } - } - - @Override - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - return this.viaFabricPlus$shape_r1_8[this.viaFabricPlus$getShapeIndex(state)]; - } else { - return super.getCollisionShape(state, world, pos, context); - } - } - -} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonBaseBlock.java similarity index 60% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonBaseBlock.java index 3e8d5157a..4da9f31e5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonBaseBlock.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.util.Map; -import net.minecraft.block.BlockState; -import net.minecraft.block.FacingBlock; -import net.minecraft.block.PistonBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.DirectionalBlock; +import net.minecraft.world.level.block.piston.PistonBaseBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -40,34 +40,34 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PistonBlock.class) -public abstract class MixinPistonBlock extends FacingBlock { +@Mixin(PistonBaseBlock.class) +public abstract class MixinPistonBaseBlock extends DirectionalBlock { @Shadow @Final - private static Map EXTENDED_SHAPES_BY_DIRECTION; + private static Map SHAPES; - protected MixinPistonBlock(Settings settings) { + protected MixinPistonBaseBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_1)) { - cir.setReturnValue(VoxelShapes.fullCube()); + cir.setReturnValue(Shapes.block()); } } @Override - public VoxelShape getCullingShape(BlockState state) { + public VoxelShape getOcclusionShape(BlockState state) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_1)) { - if (state.get(PistonBlock.EXTENDED)) { - return EXTENDED_SHAPES_BY_DIRECTION.get(state.get(FACING)); + if (state.getValue(PistonBaseBlock.EXTENDED)) { + return SHAPES.get(state.getValue(FACING)); } else { - return VoxelShapes.fullCube(); + return Shapes.block(); } } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonHeadBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonHeadBlock.java index 717489e6f..03bdb1462 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonHeadBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPistonHeadBlock.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.FacingBlock; -import net.minecraft.block.PistonHeadBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.DirectionalBlock; +import net.minecraft.world.level.block.piston.PistonHeadBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -39,60 +39,60 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PistonHeadBlock.class) -public abstract class MixinPistonHeadBlock extends FacingBlock { +public abstract class MixinPistonHeadBlock extends DirectionalBlock { @Unique - private static final VoxelShape viaFabricPlus$east_head_shape = Block.createCuboidShape(12.0, 0.0, 0.0, 16.0, 16.0, 16.0); + private static final VoxelShape viaFabricPlus$east_head_shape = Block.box(12.0, 0.0, 0.0, 16.0, 16.0, 16.0); @Unique - private static final VoxelShape viaFabricPlus$west_head_shape = Block.createCuboidShape(0.0, 0.0, 0.0, 4.0, 16.0, 16.0); + private static final VoxelShape viaFabricPlus$west_head_shape = Block.box(0.0, 0.0, 0.0, 4.0, 16.0, 16.0); @Unique - private static final VoxelShape viaFabricPlus$south_head_shape = Block.createCuboidShape(0.0, 0.0, 12.0, 16.0, 16.0, 16.0); + private static final VoxelShape viaFabricPlus$south_head_shape = Block.box(0.0, 0.0, 12.0, 16.0, 16.0, 16.0); @Unique - private static final VoxelShape viaFabricPlus$north_head_shape = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 4.0); + private static final VoxelShape viaFabricPlus$north_head_shape = Block.box(0.0, 0.0, 0.0, 16.0, 16.0, 4.0); @Unique - private static final VoxelShape viaFabricPlus$up_head_shape = Block.createCuboidShape(0.0, 12.0, 0.0, 16.0, 16.0, 16.0); + private static final VoxelShape viaFabricPlus$up_head_shape = Block.box(0.0, 12.0, 0.0, 16.0, 16.0, 16.0); @Unique - private static final VoxelShape viaFabricPlus$down_head_shape = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 4.0, 16.0); + private static final VoxelShape viaFabricPlus$down_head_shape = Block.box(0.0, 0.0, 0.0, 16.0, 4.0, 16.0); @Unique - private static final VoxelShape viaFabricPlus$up_arm_shape_r1_8_x = Block.createCuboidShape(6.0, 0.0, 6.0, 10.0, 12.0, 10.0); + private static final VoxelShape viaFabricPlus$up_arm_shape_r1_8_x = Block.box(6.0, 0.0, 6.0, 10.0, 12.0, 10.0); @Unique - private static final VoxelShape viaFabricPlus$down_arm_shape_r1_8_x = Block.createCuboidShape(6.0, 4.0, 6.0, 10.0, 16.0, 10.0); + private static final VoxelShape viaFabricPlus$down_arm_shape_r1_8_x = Block.box(6.0, 4.0, 6.0, 10.0, 16.0, 10.0); @Unique - private static final VoxelShape viaFabricPlus$south_arm_shape_r1_8_x = Block.createCuboidShape(4.0, 6.0, 0.0, 12.0, 10.0, 12.0); + private static final VoxelShape viaFabricPlus$south_arm_shape_r1_8_x = Block.box(4.0, 6.0, 0.0, 12.0, 10.0, 12.0); @Unique - private static final VoxelShape viaFabricPlus$north_arm_shape_r1_8_x = Block.createCuboidShape(4.0, 6.0, 4.0, 12.0, 10.0, 16.0); + private static final VoxelShape viaFabricPlus$north_arm_shape_r1_8_x = Block.box(4.0, 6.0, 4.0, 12.0, 10.0, 16.0); @Unique - private static final VoxelShape viaFabricPlus$east_arm_shape_r1_8_x = Block.createCuboidShape(0.0, 6.0, 4.0, 12.0, 10.0, 12.0); + private static final VoxelShape viaFabricPlus$east_arm_shape_r1_8_x = Block.box(0.0, 6.0, 4.0, 12.0, 10.0, 12.0); @Unique - private static final VoxelShape viaFabricPlus$west_arm_shape_r1_8_x = Block.createCuboidShape(6.0, 4.0, 4.0, 10.0, 12.0, 16.0); + private static final VoxelShape viaFabricPlus$west_arm_shape_r1_8_x = Block.box(6.0, 4.0, 4.0, 10.0, 12.0, 16.0); @Unique private boolean viaFabricPlus$selfInflicted = false; - protected MixinPistonHeadBlock(Settings settings) { + protected MixinPistonHeadBlock(Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (viaFabricPlus$selfInflicted) { viaFabricPlus$selfInflicted = false; return; } // Outline shape for piston head doesn't exist in <= 1.12.2 if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(switch (state.get(PistonHeadBlock.FACING)) { + cir.setReturnValue(switch (state.getValue(PistonHeadBlock.FACING)) { case DOWN -> viaFabricPlus$down_head_shape; case UP -> viaFabricPlus$up_head_shape; case NORTH -> viaFabricPlus$north_head_shape; @@ -104,20 +104,20 @@ private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, } @Override - public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - return switch (state.get(PistonHeadBlock.FACING)) { - case DOWN -> VoxelShapes.union(viaFabricPlus$down_head_shape, viaFabricPlus$down_arm_shape_r1_8_x); - case UP -> VoxelShapes.union(viaFabricPlus$up_head_shape, viaFabricPlus$up_arm_shape_r1_8_x); - case NORTH -> VoxelShapes.union(viaFabricPlus$north_head_shape, viaFabricPlus$north_arm_shape_r1_8_x); - case SOUTH -> VoxelShapes.union(viaFabricPlus$south_head_shape, viaFabricPlus$south_arm_shape_r1_8_x); - case WEST -> VoxelShapes.union(viaFabricPlus$west_head_shape, viaFabricPlus$west_arm_shape_r1_8_x); - case EAST -> VoxelShapes.union(viaFabricPlus$east_head_shape, viaFabricPlus$east_arm_shape_r1_8_x); + return switch (state.getValue(PistonHeadBlock.FACING)) { + case DOWN -> Shapes.or(viaFabricPlus$down_head_shape, viaFabricPlus$down_arm_shape_r1_8_x); + case UP -> Shapes.or(viaFabricPlus$up_head_shape, viaFabricPlus$up_arm_shape_r1_8_x); + case NORTH -> Shapes.or(viaFabricPlus$north_head_shape, viaFabricPlus$north_arm_shape_r1_8_x); + case SOUTH -> Shapes.or(viaFabricPlus$south_head_shape, viaFabricPlus$south_arm_shape_r1_8_x); + case WEST -> Shapes.or(viaFabricPlus$west_head_shape, viaFabricPlus$west_arm_shape_r1_8_x); + case EAST -> Shapes.or(viaFabricPlus$east_head_shape, viaFabricPlus$east_arm_shape_r1_8_x); }; } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { // Collision shape for piston head in <= 1.12.2 needs to be the 1.13+ outline shape viaFabricPlus$selfInflicted = true; - return getOutlineShape(state, world, pos, context); + return getShape(state, world, pos, context); } else { return super.getCollisionShape(state, world, pos, context); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPitcherCropBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPitcherCropBlock.java index 55db724d6..c3f5a61a4 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPitcherCropBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinPitcherCropBlock.java @@ -23,17 +23,17 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.PitcherCropBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.TallPlantBlock; -import net.minecraft.block.enums.DoubleBlockHalf; -import net.minecraft.state.property.EnumProperty; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.PitcherCropBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -43,11 +43,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(PitcherCropBlock.class) -public abstract class MixinPitcherCropBlock extends TallPlantBlock { +public abstract class MixinPitcherCropBlock extends DoublePlantBlock { @Shadow @Final - public static IntProperty AGE; + public static IntegerProperty AGE; @Shadow @Final @@ -55,33 +55,33 @@ public abstract class MixinPitcherCropBlock extends TallPlantBlock { @Shadow @Final - private static VoxelShape AGE_0_SHAPE; + private static VoxelShape SHAPE_BULB; @Shadow @Final - private static VoxelShape LOWER_COLLISION_SHAPE; + private static VoxelShape SHAPE_CROP; @Unique - private static final VoxelShape viaFabricPlus$grown_upper_outline_shape_r1_21_4 = Block.createCuboidShape(3.0, 0.0, 3.0, 13.0, 15.0, 13.0); + private static final VoxelShape viaFabricPlus$grown_upper_outline_shape_r1_21_4 = Block.box(3.0, 0.0, 3.0, 13.0, 15.0, 13.0); @Unique - private static final VoxelShape viaFabricPlus$grown_lower_outline_shape_r1_21_4 = Block.createCuboidShape(3.0, -1.0, 3.0, 13.0, 16.0, 13.0); + private static final VoxelShape viaFabricPlus$grown_lower_outline_shape_r1_21_4 = Block.box(3.0, -1.0, 3.0, 13.0, 16.0, 13.0); @Unique - private static final VoxelShape[] viaFabricPlus$upper_outline_shapes_r1_21_4 = new VoxelShape[]{Block.createCuboidShape(3.0, 0.0, 3.0, 13.0, 11.0, 13.0), viaFabricPlus$grown_upper_outline_shape_r1_21_4}; + private static final VoxelShape[] viaFabricPlus$upper_outline_shapes_r1_21_4 = new VoxelShape[]{Block.box(3.0, 0.0, 3.0, 13.0, 11.0, 13.0), viaFabricPlus$grown_upper_outline_shape_r1_21_4}; @Unique - private static final VoxelShape[] viaFabricPlus$lower_outline_shapes_r1_21_4 = new VoxelShape[]{AGE_0_SHAPE, Block.createCuboidShape(3.0, -1.0, 3.0, 13.0, 14.0, 13.0), viaFabricPlus$grown_lower_outline_shape_r1_21_4, viaFabricPlus$grown_lower_outline_shape_r1_21_4, viaFabricPlus$grown_lower_outline_shape_r1_21_4}; + private static final VoxelShape[] viaFabricPlus$lower_outline_shapes_r1_21_4 = new VoxelShape[]{SHAPE_BULB, Block.box(3.0, -1.0, 3.0, 13.0, 14.0, 13.0), viaFabricPlus$grown_lower_outline_shape_r1_21_4, viaFabricPlus$grown_lower_outline_shape_r1_21_4, viaFabricPlus$grown_lower_outline_shape_r1_21_4}; - public MixinPitcherCropBlock(final Settings settings) { + public MixinPitcherCropBlock(final Properties settings) { super(settings); } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - final int age = state.get(AGE); - if (state.get(HALF) == DoubleBlockHalf.UPPER) { + final int age = state.getValue(AGE); + if (state.getValue(HALF) == DoubleBlockHalf.UPPER) { cir.setReturnValue(viaFabricPlus$upper_outline_shapes_r1_21_4[Math.min(Math.abs(4 - (age + 1)), viaFabricPlus$upper_outline_shapes_r1_21_4.length - 1)]); } else { cir.setReturnValue(viaFabricPlus$lower_outline_shapes_r1_21_4[age]); @@ -90,12 +90,12 @@ private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, } @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) - private void changeBlockStatePropertyPriority(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void changeBlockStatePropertyPriority(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - if (state.get(AGE) == 0) { - cir.setReturnValue(AGE_0_SHAPE); + if (state.getValue(AGE) == 0) { + cir.setReturnValue(SHAPE_BULB); } else { - cir.setReturnValue(state.get(HALF) == DoubleBlockHalf.LOWER ? LOWER_COLLISION_SHAPE : super.getCollisionShape(state, world, pos, context)); + cir.setReturnValue(state.getValue(HALF) == DoubleBlockHalf.LOWER ? SHAPE_CROP : super.getCollisionShape(state, world, pos, context)); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSnowBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSnowLayerBlock.java similarity index 60% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSnowBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSnowLayerBlock.java index 8943b3d40..897599b93 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSnowBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSnowLayerBlock.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.SnowBlock; -import net.minecraft.state.property.IntProperty; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,30 +39,30 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(SnowBlock.class) -public abstract class MixinSnowBlock { +@Mixin(SnowLayerBlock.class) +public abstract class MixinSnowLayerBlock { @Unique private static final VoxelShape[] viaFabricPlus$layers_to_shape_r1_12_2 = new VoxelShape[]{ - Block.createCuboidShape(0.0D, -0.00001 /* 0.0D */, 0.0D, 16.0D, 0.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D), - Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D) + Block.box(0.0D, -0.00001 /* 0.0D */, 0.0D, 16.0D, 0.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 10.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D), + Block.box(0.0D, 0.0D, 0.0D, 16.0D, 16.0D, 16.0D) }; @Shadow @Final - public static IntProperty LAYERS; + public static IntegerProperty LAYERS; @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) - private void changeCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + private void changeCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(viaFabricPlus$layers_to_shape_r1_12_2[state.get(LAYERS) - 1]); + cir.setReturnValue(viaFabricPlus$layers_to_shape_r1_12_2[state.getValue(LAYERS) - 1]); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSoulSandBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSoulSandBlock.java index eb9ad74ac..9b0ab5a9e 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSoulSandBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinSoulSandBlock.java @@ -23,12 +23,12 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoulSandBlock; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.SoulSandBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -37,10 +37,10 @@ @Mixin(SoulSandBlock.class) public abstract class MixinSoulSandBlock { - @Inject(method = "getSidesShape", at = @At("HEAD"), cancellable = true) - private void changeSidesShape(BlockState state, BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + @Inject(method = "getBlockSupportShape", at = @At("HEAD"), cancellable = true) + private void changeSidesShape(BlockState state, BlockGetter world, BlockPos pos, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_13, ProtocolVersion.v1_15_2)) { - cir.setReturnValue(VoxelShapes.empty()); + cir.setReturnValue(Shapes.empty()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWallBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWallBlock.java index 8cd001cec..a395b10da 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWallBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWallBlock.java @@ -27,16 +27,16 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import java.util.function.Function; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.ShapeContext; -import net.minecraft.block.WallBlock; -import net.minecraft.block.enums.WallShape; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.level.block.WallBlock; +import net.minecraft.world.level.block.state.properties.WallSide; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -54,7 +54,7 @@ public abstract class MixinWallBlock extends Block { @Shadow @Final - private Function outlineShapeFunction; + private Function shapes; @Unique private VoxelShape[] viaFabricPlus$collision_shape_r1_12_2; @@ -62,61 +62,61 @@ public abstract class MixinWallBlock extends Block { @Unique private VoxelShape[] viaFabricPlus$outline_shape_r1_12_2; - public MixinWallBlock(Settings settings) { + public MixinWallBlock(Properties settings) { super(settings); } @Unique private static BlockState viaFabricPlus$oldWallPlacementLogic(BlockState state) { boolean addUp = false; - if (state.get(WallBlock.NORTH_WALL_SHAPE) == WallShape.TALL) { - state = state.with(WallBlock.NORTH_WALL_SHAPE, WallShape.LOW); + if (state.getValue(WallBlock.NORTH) == WallSide.TALL) { + state = state.setValue(WallBlock.NORTH, WallSide.LOW); addUp = true; } - if (state.get(WallBlock.EAST_WALL_SHAPE) == WallShape.TALL) { - state = state.with(WallBlock.EAST_WALL_SHAPE, WallShape.LOW); + if (state.getValue(WallBlock.EAST) == WallSide.TALL) { + state = state.setValue(WallBlock.EAST, WallSide.LOW); addUp = true; } - if (state.get(WallBlock.SOUTH_WALL_SHAPE) == WallShape.TALL) { - state = state.with(WallBlock.SOUTH_WALL_SHAPE, WallShape.LOW); + if (state.getValue(WallBlock.SOUTH) == WallSide.TALL) { + state = state.setValue(WallBlock.SOUTH, WallSide.LOW); addUp = true; } - if (state.get(WallBlock.WEST_WALL_SHAPE) == WallShape.TALL) { - state = state.with(WallBlock.WEST_WALL_SHAPE, WallShape.LOW); + if (state.getValue(WallBlock.WEST) == WallSide.TALL) { + state = state.setValue(WallBlock.WEST, WallSide.LOW); addUp = true; } if (addUp) { - state = state.with(WallBlock.UP, true); + state = state.setValue(WallBlock.UP, true); } return state; } @Unique private static int viaFabricPlus$getDirectionMask(Direction dir) { - return 1 << dir.getHorizontalQuarterTurns(); + return 1 << dir.get2DDataValue(); } @Inject(method = "", at = @At("RETURN")) - private void initShapes1_12_2(Settings settings, CallbackInfo ci) { + private void initShapes1_12_2(Properties settings, CallbackInfo ci) { this.viaFabricPlus$collision_shape_r1_12_2 = this.viaFabricPlus$createShapes1_12_2(24.0F, 24.0F); this.viaFabricPlus$outline_shape_r1_12_2 = this.viaFabricPlus$createShapes1_12_2(16.0F, 14.0F); } - @Inject(method = "getPlacementState", at = @At("RETURN"), cancellable = true) + @Inject(method = "getStateForPlacement", at = @At("RETURN"), cancellable = true) private void modifyPlacementState(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { cir.setReturnValue(viaFabricPlus$oldWallPlacementLogic(cir.getReturnValue())); } } - @Inject(method = "getStateForNeighborUpdate", at = @At("RETURN"), cancellable = true) + @Inject(method = "updateShape", at = @At("RETURN"), cancellable = true) private void modifyBlockState(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { cir.setReturnValue(viaFabricPlus$oldWallPlacementLogic(cir.getReturnValue())); } } - @Inject(method = "shouldConnectTo", at = @At("RETURN"), cancellable = true) + @Inject(method = "connectsTo", at = @At("RETURN"), cancellable = true) private void shouldConnectTo1_14(BlockState state, boolean neighborIsFullSquare, Direction dir, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14)) { if (!Block1_14.isExceptBlockForAttachWithPiston(state.getBlock())) { @@ -126,25 +126,25 @@ private void shouldConnectTo1_14(BlockState state, boolean neighborIsFullSquare, } @Inject(method = "getCollisionShape", at = @At("HEAD"), cancellable = true) - private void changeCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (state.get(WallBlock.UP) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { + private void changeCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { + if (state.getValue(WallBlock.UP) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { cir.setReturnValue(this.viaFabricPlus$collision_shape_r1_12_2[this.viaFabricPlus$getShapeIndex(state)]); } } - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { - if (state.get(WallBlock.UP) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { + if (state.getValue(WallBlock.UP) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { cir.setReturnValue(this.viaFabricPlus$outline_shape_r1_12_2[this.viaFabricPlus$getShapeIndex(state)]); } } @Override - public VoxelShape getCullingShape(BlockState state) { - if (state.get(WallBlock.UP) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - return this.outlineShapeFunction.apply(state); + public VoxelShape getOcclusionShape(BlockState state) { + if (state.getValue(WallBlock.UP) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { + return this.shapes.apply(state); } else { - return super.getCullingShape(state); + return super.getOcclusionShape(state); } } @@ -155,32 +155,32 @@ public VoxelShape getCullingShape(BlockState state) { final float h = 5.0F; final float i = 11.0F; - final VoxelShape baseShape = Block.createCuboidShape(f, 0.0D, f, g, height1, g); - final VoxelShape northShape = Block.createCuboidShape(h, 0.0, 0.0D, i, height2, i); - final VoxelShape southShape = Block.createCuboidShape(h, 0.0, h, i, height2, 16.0D); - final VoxelShape westShape = Block.createCuboidShape(0.0D, 0.0, h, i, height2, i); - final VoxelShape eastShape = Block.createCuboidShape(h, 0.0, h, 16.0D, height2, i); + final VoxelShape baseShape = Block.box(f, 0.0D, f, g, height1, g); + final VoxelShape northShape = Block.box(h, 0.0, 0.0D, i, height2, i); + final VoxelShape southShape = Block.box(h, 0.0, h, i, height2, 16.0D); + final VoxelShape westShape = Block.box(0.0D, 0.0, h, i, height2, i); + final VoxelShape eastShape = Block.box(h, 0.0, h, 16.0D, height2, i); final VoxelShape[] voxelShapes = new VoxelShape[]{ - VoxelShapes.empty(), - Block.createCuboidShape(f, 0.0, h, g, height1, 16.0D), - Block.createCuboidShape(0.0D, 0.0, f, i, height1, g), - Block.createCuboidShape(f - 4, 0.0, h - 1, g, height1, 16.0D), - Block.createCuboidShape(f, 0.0, 0.0D, g, height1, i), - VoxelShapes.union(southShape, northShape), - Block.createCuboidShape(f - 4, 0.0, 0.0D, g, height1, i + 1), - Block.createCuboidShape(f - 4, 0.0, h - 5, g, height1, 16.0D), - Block.createCuboidShape(h, 0.0, f, 16.0D, height1, g), - Block.createCuboidShape(h - 1, 0.0, f, 16.0D, height1, g + 4), - VoxelShapes.union(westShape, eastShape), - Block.createCuboidShape(h - 5, 0.0, f, 16.0D, height1, g + 4), - Block.createCuboidShape(f, 0.0, 0.0D, g + 4, height1, i + 1), - Block.createCuboidShape(f, 0.0, 0.0D, g + 4, height1, i + 5), - Block.createCuboidShape(h - 5, 0.0, f - 4, 16.0D, height1, g), - Block.createCuboidShape(0, 0.0, 0, 16.0D, height1, 16.0D) + Shapes.empty(), + Block.box(f, 0.0, h, g, height1, 16.0D), + Block.box(0.0D, 0.0, f, i, height1, g), + Block.box(f - 4, 0.0, h - 1, g, height1, 16.0D), + Block.box(f, 0.0, 0.0D, g, height1, i), + Shapes.or(southShape, northShape), + Block.box(f - 4, 0.0, 0.0D, g, height1, i + 1), + Block.box(f - 4, 0.0, h - 5, g, height1, 16.0D), + Block.box(h, 0.0, f, 16.0D, height1, g), + Block.box(h - 1, 0.0, f, 16.0D, height1, g + 4), + Shapes.or(westShape, eastShape), + Block.box(h - 5, 0.0, f, 16.0D, height1, g + 4), + Block.box(f, 0.0, 0.0D, g + 4, height1, i + 1), + Block.box(f, 0.0, 0.0D, g + 4, height1, i + 5), + Block.box(h - 5, 0.0, f - 4, 16.0D, height1, g), + Block.box(0, 0.0, 0, 16.0D, height1, 16.0D) }; for (int j = 0; j < 16; ++j) { - voxelShapes[j] = VoxelShapes.union(baseShape, voxelShapes[j]); + voxelShapes[j] = Shapes.or(baseShape, voxelShapes[j]); } return voxelShapes; @@ -190,19 +190,19 @@ public VoxelShape getCullingShape(BlockState state) { private int viaFabricPlus$getShapeIndex(BlockState state) { return this.viaFabricPlus$shapeIndexCache_r1_12_2.computeIntIfAbsent(state, statex -> { int i = 0; - if (!WallShape.NONE.equals(statex.get(WallBlock.NORTH_WALL_SHAPE))) { + if (!WallSide.NONE.equals(statex.getValue(WallBlock.NORTH))) { i |= viaFabricPlus$getDirectionMask(Direction.NORTH); } - if (!WallShape.NONE.equals(statex.get(WallBlock.EAST_WALL_SHAPE))) { + if (!WallSide.NONE.equals(statex.getValue(WallBlock.EAST))) { i |= viaFabricPlus$getDirectionMask(Direction.EAST); } - if (!WallShape.NONE.equals(statex.get(WallBlock.SOUTH_WALL_SHAPE))) { + if (!WallSide.NONE.equals(statex.getValue(WallBlock.SOUTH))) { i |= viaFabricPlus$getDirectionMask(Direction.SOUTH); } - if (!WallShape.NONE.equals(statex.get(WallBlock.WEST_WALL_SHAPE))) { + if (!WallSide.NONE.equals(statex.getValue(WallBlock.WEST))) { i |= viaFabricPlus$getDirectionMask(Direction.WEST); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLilyPadBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWaterlilyBlock.java similarity index 70% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLilyPadBlock.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWaterlilyBlock.java index d2a2cfc29..8f32df487 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinLilyPadBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/block/shape/MixinWaterlilyBlock.java @@ -23,27 +23,27 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.LilyPadBlock; -import net.minecraft.block.ShapeContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.WaterlilyBlock; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.BlockGetter; 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.CallbackInfoReturnable; -@Mixin(LilyPadBlock.class) -public abstract class MixinLilyPadBlock { +@Mixin(WaterlilyBlock.class) +public abstract class MixinWaterlilyBlock { @Unique - private static final VoxelShape viaFabricPlus$shape_r1_8_x = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 0.25D, 16.0D); + private static final VoxelShape viaFabricPlus$shape_r1_8_x = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 0.25D, 16.0D); - @Inject(method = "getOutlineShape", at = @At("HEAD"), cancellable = true) - private void changeOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { + @Inject(method = "getShape", at = @At("HEAD"), cancellable = true) + private void changeOutlineShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(viaFabricPlus$shape_r1_8_x); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/MixinWeatherRendering.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/MixinWeatherEffectRenderer.java similarity index 81% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/MixinWeatherRendering.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/MixinWeatherEffectRenderer.java index 1fca4a1e1..d444c9b6c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/MixinWeatherRendering.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/classic/cpe_extension/MixinWeatherEffectRenderer.java @@ -23,20 +23,20 @@ import com.viaversion.viafabricplus.features.classic.cpe_extension.CPEAdditions; import java.util.List; -import net.minecraft.client.render.WeatherRendering; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.biome.Biome; +import net.minecraft.client.renderer.WeatherEffectRenderer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(WeatherRendering.class) -public abstract class MixinWeatherRendering { +@Mixin(WeatherEffectRenderer.class) +public abstract class MixinWeatherEffectRenderer { - @Redirect(method = "renderPrecipitation", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z")) + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z")) private boolean forceSnow(List instance) { if (CPEAdditions.isSnowing()) { return false; @@ -46,7 +46,7 @@ private boolean forceSnow(List instance) { } @Inject(method = "getPrecipitationAt", at = @At(value = "HEAD"), cancellable = true) - private void forceSnow(World world, BlockPos pos, CallbackInfoReturnable cir) { + private void forceSnow(Level world, BlockPos pos, CallbackInfoReturnable cir) { if (CPEAdditions.isSnowing()) { cir.setReturnValue(Biome.Precipitation.SNOW); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/MixinItemFrameEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/MixinItemFrame.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/MixinItemFrameEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/MixinItemFrame.java index e4ee62fd1..4a8d4c916 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/MixinItemFrameEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/MixinItemFrame.java @@ -23,17 +23,17 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.decoration.ItemFrameEntity; +import net.minecraft.world.entity.decoration.ItemFrame; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ItemFrameEntity.class) -public abstract class MixinItemFrameEntity { +@Mixin(ItemFrame.class) +public abstract class MixinItemFrame { - @Redirect(method = "calculateBoundingBox", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;containsMap()Z")) - private boolean changeBoundingBox(ItemFrameEntity instance) { - return instance.containsMap() && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_7); + @Redirect(method = "calculateBoundingBox", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/decoration/ItemFrame;hasFramedMap()Z")) + private boolean changeBoundingBox(ItemFrame instance) { + return instance.hasFramedMap() && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_7); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/MixinEntityIndex.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/MixinEntityLookup.java similarity index 86% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/MixinEntityIndex.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/MixinEntityLookup.java index fed70c02c..5127197da 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/MixinEntityIndex.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/allow_duplicated_uuid/MixinEntityLookup.java @@ -26,8 +26,8 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import java.util.Map; import java.util.UUID; -import net.minecraft.world.entity.EntityIndex; -import net.minecraft.world.entity.EntityLike; +import net.minecraft.world.level.entity.EntityLookup; +import net.minecraft.world.level.entity.EntityAccess; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -36,22 +36,22 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(EntityIndex.class) -public abstract class MixinEntityIndex { +@Mixin(EntityLookup.class) +public abstract class MixinEntityLookup { @Shadow @Final - private Int2ObjectMap idToEntity; + private Int2ObjectMap byId; @Redirect(method = "add", at = @At(value = "INVOKE", target = "Ljava/util/Map;containsKey(Ljava/lang/Object;)Z", remap = false)) private boolean allowDuplicateUuid(Map instance, Object o) { return instance.containsKey(o) && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_16_4); } - @Inject(method = "size", at = @At("HEAD"), cancellable = true) + @Inject(method = "count", at = @At("HEAD"), cancellable = true) private void returnRealSize(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)) { - cir.setReturnValue(this.idToEntity.size()); + cir.setReturnValue(this.byId.size()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/attribute/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/attribute/MixinLivingEntity.java index a110ae575..b9d207028 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/attribute/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/attribute/MixinLivingEntity.java @@ -24,7 +24,7 @@ import com.viaversion.viafabricplus.features.entity.attribute.EnchantmentAttributesEmulation1_20_6; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; +import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -33,7 +33,7 @@ @Mixin(LivingEntity.class) public abstract class MixinLivingEntity { - @Inject(method = "getVelocityMultiplier", at = @At("HEAD")) + @Inject(method = "getBlockSpeedFactor", at = @At("HEAD")) private void setGenericMovementEfficiencyAttribute(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { EnchantmentAttributesEmulation1_20_6.setGenericMovementEfficiencyAttribute((LivingEntity) (Object) this); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractBoatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractBoat.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractBoatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractBoat.java index 83ba2cd04..69e235304 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractBoatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractBoat.java @@ -23,28 +23,28 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.entity.vehicle.VehicleEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.entity.vehicle.VehicleEntity; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AbstractBoatEntity.class) -public abstract class MixinAbstractBoatEntity extends VehicleEntity { +@Mixin(AbstractBoat.class) +public abstract class MixinAbstractBoat extends VehicleEntity { - public MixinAbstractBoatEntity(EntityType entityType, World world) { + public MixinAbstractBoat(EntityType entityType, Level world) { super(entityType, world); } - @Redirect(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/vehicle/VehicleEntity;interact(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;")) - private ActionResult makeNotLeashable(VehicleEntity instance, PlayerEntity player, Hand hand) { + @Redirect(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/vehicle/VehicleEntity;interact(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResult;")) + private InteractionResult makeNotLeashable(VehicleEntity instance, Player player, InteractionHand hand) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { - return ActionResult.PASS; + return InteractionResult.PASS; } else { return super.interact(player, hand); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractChestBoatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractChestBoat.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractChestBoatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractChestBoat.java index fbafc0c5c..5ce7c0d33 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractChestBoatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractChestBoat.java @@ -23,23 +23,23 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.AbstractChestBoatEntity; -import net.minecraft.entity.vehicle.VehicleInventory; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractChestBoat; +import net.minecraft.world.entity.vehicle.ContainerEntity; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; 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.CallbackInfoReturnable; -@Mixin(AbstractChestBoatEntity.class) -public abstract class MixinAbstractChestBoatEntity implements VehicleInventory { +@Mixin(AbstractChestBoat.class) +public abstract class MixinAbstractChestBoat implements ContainerEntity { @Inject(method = "interact", at = @At("HEAD"), cancellable = true) - private void openWhenSneaking(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && player.shouldCancelInteraction()) { - cir.setReturnValue(this.open(player)); + private void openWhenSneaking(Player player, InteractionHand hand, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && player.isSecondaryUseActive()) { + cir.setReturnValue(this.interactWithContainerVehicle(player)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractCowEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractCow.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractCowEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractCow.java index 46b362863..f82ab7424 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractCowEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractCow.java @@ -23,29 +23,29 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.passive.AbstractCowEntity; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.AbstractCow; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(AbstractCowEntity.class) -public abstract class MixinAbstractCowEntity extends AnimalEntity { +@Mixin(AbstractCow.class) +public abstract class MixinAbstractCow extends Animal { - public MixinAbstractCowEntity(EntityType entityType, World world) { + public MixinAbstractCow(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "interactMob", at = @At("HEAD"), cancellable = true) - private void disableMilkingInCreative(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && player.getAbilities().creativeMode) { - cir.setReturnValue(super.interactMob(player, hand)); + @Inject(method = "mobInteract", at = @At("HEAD"), cancellable = true) + private void disableMilkingInCreative(Player player, InteractionHand hand, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && player.getAbilities().instabuild) { + cir.setReturnValue(super.mobInteract(player, hand)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractHorseEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractHorse.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractHorseEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractHorse.java index 23a411a99..b080195f5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractHorseEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAbstractHorse.java @@ -23,23 +23,23 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; 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.Redirect; -@Mixin(AbstractHorseEntity.class) -public abstract class MixinAbstractHorseEntity { +@Mixin(AbstractHorse.class) +public abstract class MixinAbstractHorse { @Shadow - protected abstract boolean receiveFood(PlayerEntity player, ItemStack item); + protected abstract boolean handleEating(Player player, ItemStack item); - @Redirect(method = "interactHorse", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/AbstractHorseEntity;receiveFood(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;)Z")) - private boolean decrementFoodItemClientside(AbstractHorseEntity instance, PlayerEntity player, ItemStack item) { - return ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_2) || this.receiveFood(player, item); + @Redirect(method = "fedFood", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/horse/AbstractHorse;handleEating(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;)Z")) + private boolean decrementFoodItemClientside(AbstractHorse instance, Player player, ItemStack item) { + return ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_2) || this.handleEating(player, item); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAnimalEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAnimal.java similarity index 64% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAnimalEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAnimal.java index 5f4b230d5..146549145 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAnimalEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAnimal.java @@ -23,28 +23,28 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.world.World; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AnimalEntity.class) -public abstract class MixinAnimalEntity { +@Mixin(Animal.class) +public abstract class MixinAnimal { - @Redirect(method = "interactMob", at = @At(value = "FIELD", target = "Lnet/minecraft/util/ActionResult;SUCCESS_SERVER:Lnet/minecraft/util/ActionResult$Success;")) - private ActionResult.Success swingHand() { + @Redirect(method = "mobInteract", at = @At(value = "FIELD", target = "Lnet/minecraft/world/InteractionResult;SUCCESS_SERVER:Lnet/minecraft/world/InteractionResult$Success;")) + private InteractionResult.Success swingHand() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } else { - return ActionResult.SUCCESS_SERVER; + return InteractionResult.SUCCESS_SERVER; } } - @Redirect(method = "interactMob", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;isClient()Z")) - private boolean changeIsClientCondition(World instance) { - return instance.isClient() && ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_15); + @Redirect(method = "mobInteract", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;isClientSide()Z")) + private boolean changeIsClientCondition(Level instance) { + return instance.isClientSide() && ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_15); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinArmadilloEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinArmadillo.java similarity index 78% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinArmadilloEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinArmadillo.java index 2cd1bcb6c..72207b1a4 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinArmadilloEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinArmadillo.java @@ -23,17 +23,17 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.passive.ArmadilloEntity; +import net.minecraft.world.entity.animal.armadillo.Armadillo; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ArmadilloEntity.class) -public abstract class MixinArmadilloEntity { +@Mixin(Armadillo.class) +public abstract class MixinArmadillo { - @Redirect(method = "interactMob", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/ArmadilloEntity;isNotIdle()Z")) - private boolean changeCondition(ArmadilloEntity instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_5) && instance.isNotIdle(); + @Redirect(method = "mobInteract", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/armadillo/Armadillo;isScared()Z")) + private boolean changeCondition(Armadillo instance) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_5) && instance.isScared(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAxolotlEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAxolotl.java similarity index 70% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAxolotlEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAxolotl.java index 2665c34e9..d14352377 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAxolotlEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinAxolotl.java @@ -23,23 +23,23 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.passive.AxolotlEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsage; +import net.minecraft.world.entity.animal.axolotl.Axolotl; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AxolotlEntity.class) -public abstract class MixinAxolotlEntity { +@Mixin(Axolotl.class) +public abstract class MixinAxolotl { - @Redirect(method = "eat", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemUsage;exchangeStack(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack;")) - private ItemStack dontExchangeStack(ItemStack inputStack, PlayerEntity player, ItemStack outputStack) { + @Redirect(method = "usePlayerItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemUtils;createFilledResult(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/item/ItemStack;")) + private ItemStack dontExchangeStack(ItemStack inputStack, Player player, ItemStack outputStack) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { return outputStack; } else { - return ItemUsage.exchangeStack(inputStack, player, outputStack); + return ItemUtils.createFilledResult(inputStack, player, outputStack); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinBeeEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinBee.java similarity index 68% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinBeeEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinBee.java index 83fc55997..ad1e28a5a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinBeeEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinBee.java @@ -23,29 +23,29 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.BeeEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.Bee; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(BeeEntity.class) -public abstract class MixinBeeEntity extends AnimalEntity { +@Mixin(Bee.class) +public abstract class MixinBee extends Animal { - protected MixinBeeEntity(EntityType entityType, World world) { + protected MixinBee(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "interactMob", at = @At("HEAD"), cancellable = true) - private void removeStatusEffectInteraction(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "mobInteract", at = @At("HEAD"), cancellable = true) + private void removeStatusEffectInteraction(Player player, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - cir.setReturnValue(super.interactMob(player, hand)); + cir.setReturnValue(super.mobInteract(player, hand)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCat.java similarity index 60% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCat.java index 6c09fce10..df7077614 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCat.java @@ -23,34 +23,34 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.passive.CatEntity; -import net.minecraft.entity.passive.TameableEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.Cat; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(CatEntity.class) -public abstract class MixinCatEntity extends TameableEntity { +@Mixin(Cat.class) +public abstract class MixinCat extends TamableAnimal { - protected MixinCatEntity(EntityType entityType, World world) { + protected MixinCat(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "interactMob", at = @At("HEAD"), cancellable = true) - private void interactMob1_20_4(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "mobInteract", at = @At("HEAD"), cancellable = true) + private void interactMob1_20_4(Player player, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { - final ItemStack itemStack = player.getStackInHand(hand); - if (this.isTamed() && this.isOwner(player)) { - cir.setReturnValue(ActionResult.SUCCESS); + final ItemStack itemStack = player.getItemInHand(hand); + if (this.isTame() && this.isOwnedBy(player)) { + cir.setReturnValue(InteractionResult.SUCCESS); } else { - cir.setReturnValue(!this.isBreedingItem(itemStack) || !(this.getHealth() < this.getMaxHealth()) && this.isTamed() ? ActionResult.PASS : ActionResult.SUCCESS); + cir.setReturnValue(!this.isFood(itemStack) || !(this.getHealth() < this.getMaxHealth()) && this.isTame() ? InteractionResult.PASS : InteractionResult.SUCCESS); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCreeperEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCreeper.java similarity index 76% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCreeperEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCreeper.java index 1dbd8643c..430c92527 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCreeperEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinCreeper.java @@ -23,22 +23,22 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.mob.CreeperEntity; -import net.minecraft.sound.SoundEvent; -import net.minecraft.sound.SoundEvents; +import net.minecraft.world.entity.monster.Creeper; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(CreeperEntity.class) -public abstract class MixinCreeperEntity { +@Mixin(Creeper.class) +public abstract class MixinCreeper { - @Redirect(method = "interactMob", at = @At(value = "FIELD", target = "Lnet/minecraft/sound/SoundEvents;ITEM_FIRECHARGE_USE:Lnet/minecraft/sound/SoundEvent;")) + @Redirect(method = "mobInteract", at = @At(value = "FIELD", target = "Lnet/minecraft/sounds/SoundEvents;FIRECHARGE_USE:Lnet/minecraft/sounds/SoundEvent;")) private SoundEvent changeSound() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_1)) { - return SoundEvents.ITEM_FLINTANDSTEEL_USE; + return SoundEvents.FLINTANDSTEEL_USE; } else { - return SoundEvents.ITEM_FIRECHARGE_USE; + return SoundEvents.FIRECHARGE_USE; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinEntity.java index 0442a18da..c53920334 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinEntity.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.Leashable; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.Leashable; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -43,24 +43,24 @@ public abstract class MixinEntity { public abstract boolean isAlive(); @Inject(method = "interact", at = @At("HEAD"), cancellable = true) - private void removeLeashActions(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + private void removeLeashActions(Player player, InteractionHand hand, CallbackInfoReturnable cir) { // Removes shearing of equipment & snipping all leashes + condition changes if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5)) { - final ItemStack itemStack = player.getStackInHand(hand); + final ItemStack itemStack = player.getItemInHand(hand); if (this.isAlive() && this instanceof final Leashable leashable) { if (leashable.getLeashHolder() != player) { - if (itemStack.isOf(Items.LEAD) && leashable.canBeLeashedTo(player)) { - itemStack.decrement(1); - cir.setReturnValue(ActionResult.SUCCESS); + if (itemStack.is(Items.LEAD) && leashable.canHaveALeashAttachedTo(player)) { + itemStack.shrink(1); + cir.setReturnValue(InteractionResult.SUCCESS); return; } } else { - cir.setReturnValue(ActionResult.SUCCESS.noIncrementStat()); + cir.setReturnValue(InteractionResult.SUCCESS.withoutItem()); return; } } - cir.setReturnValue(ActionResult.PASS); + cir.setReturnValue(InteractionResult.PASS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMobEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMob.java similarity index 61% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMobEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMob.java index ae12c005c..fa7889410 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMobEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMob.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -34,26 +34,26 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(MobEntity.class) -public abstract class MixinMobEntity { +@Mixin(Mob.class) +public abstract class MixinMob { @Shadow - protected abstract ActionResult interactWithItem(PlayerEntity player, Hand hand); + protected abstract InteractionResult checkAndHandleImportantInteractions(Player player, InteractionHand hand); - @Redirect(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/mob/MobEntity;interactWithItem(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;")) - private ActionResult moveItemInteractionsAfterLeashing(MobEntity instance, PlayerEntity player, Hand hand) { + @Redirect(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;checkAndHandleImportantInteractions(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResult;")) + private InteractionResult moveItemInteractionsAfterLeashing(Mob instance, Player player, InteractionHand hand) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { - return ActionResult.FAIL; + return InteractionResult.FAIL; } else { - return interactWithItem(player, hand); + return checkAndHandleImportantInteractions(player, hand); } } - @Inject(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/mob/MobEntity;interactMob(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;"), cancellable = true) - private void moveItemInteractionsAfterLeashing(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Mob;mobInteract(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResult;"), cancellable = true) + private void moveItemInteractionsAfterLeashing(Player player, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { - final ActionResult result = interactWithItem(player, hand); - if (result.isAccepted()) { + final InteractionResult result = checkAndHandleImportantInteractions(player, hand); + if (result.consumesAction()) { cir.setReturnValue(result); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMooshroomEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMushroomCow.java similarity index 52% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMooshroomEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMushroomCow.java index 1302e0218..947c366b9 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMooshroomEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinMushroomCow.java @@ -23,45 +23,45 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.passive.AbstractCowEntity; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.MooshroomEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.tag.ItemTags; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.AbstractCow; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.MushroomCow; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(MooshroomEntity.class) -public abstract class MixinMooshroomEntity extends AnimalEntity { +@Mixin(MushroomCow.class) +public abstract class MixinMushroomCow extends Animal { - protected MixinMooshroomEntity(EntityType entityType, World world) { + protected MixinMushroomCow(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "interactMob", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/MooshroomEntity;getStewEffectFrom(Lnet/minecraft/item/ItemStack;)Ljava/util/Optional;"), cancellable = true) - private void checkForItemTags(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { + @Inject(method = "mobInteract", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/MushroomCow;getEffectsFromItemStack(Lnet/minecraft/world/item/ItemStack;)Ljava/util/Optional;"), cancellable = true) + private void checkForItemTags(Player player, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - final ItemStack itemStack = player.getStackInHand(hand); - if (!itemStack.isIn(ItemTags.SMALL_FLOWERS)) { - cir.setReturnValue(super.interactMob(player, hand)); + final ItemStack itemStack = player.getItemInHand(hand); + if (!itemStack.is(ItemTags.SMALL_FLOWERS)) { + cir.setReturnValue(super.mobInteract(player, hand)); } } } - @Redirect(method = "interactMob", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/AbstractCowEntity;interactMob(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;", ordinal = 0)) - private ActionResult directPass(AbstractCowEntity instance, PlayerEntity player, Hand hand) { + @Redirect(method = "mobInteract", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/AbstractCow;mobInteract(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResult;", ordinal = 0)) + private InteractionResult directPass(AbstractCow instance, Player player, InteractionHand hand) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - return ActionResult.PASS; + return InteractionResult.PASS; } else { - return super.interactMob(player, hand); + return super.mobInteract(player, hand); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinSquidEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinSquid.java similarity index 93% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinSquidEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinSquid.java index d997f0b41..9ff27d082 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinSquidEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinSquid.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.passive.SquidEntity; +import net.minecraft.world.entity.animal.Squid; 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.CallbackInfoReturnable; -@Mixin(SquidEntity.class) -public abstract class MixinSquidEntity { +@Mixin(Squid.class) +public abstract class MixinSquid { @Inject(method = "canBeLeashed", at = @At("HEAD"), cancellable = true) private void cancelLeashing(CallbackInfoReturnable cir) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolf.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolf.java new file mode 100644 index 000000000..e8bc0c67c --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolf.java @@ -0,0 +1,106 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.entity.interaction; + +import com.viaversion.viafabricplus.features.entity.metadata_handling.WolfHealthTracker1_14_4; +import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.enchantment.EnchantmentEffectComponents; +import net.minecraft.world.food.FoodProperties; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.NeutralMob; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.animal.wolf.Wolf; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.DyeItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; +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.CallbackInfoReturnable; + +@Mixin(Wolf.class) +public abstract class MixinWolf extends TamableAnimal implements NeutralMob { + + protected MixinWolf(EntityType entityType, Level world) { + super(entityType, world); + } + + @Shadow + public abstract DyeColor getCollarColor(); + + @Shadow + protected abstract void setCollarColor(DyeColor color); + + @Inject(method = "mobInteract", at = @At("HEAD"), cancellable = true) + private void fixWolfInteract(Player player, InteractionHand hand, CallbackInfoReturnable cir) { + final ItemStack itemStack = player.getItemInHand(hand); + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { + final Item item = itemStack.getItem(); + if (this.isTame()) { + final FoodProperties foodComponent = itemStack.get(DataComponents.FOOD); + if (foodComponent != null) { + if (this.isFood(itemStack) && WolfHealthTracker1_14_4.getWolfHealth(this) < 20.0F) { + if (!player.getAbilities().instabuild) itemStack.shrink(1); + this.heal(foodComponent.nutrition()); + cir.setReturnValue(InteractionResult.SUCCESS); + return; + } + } else if (item instanceof DyeItem dyeItem) { + final DyeColor dyeColor = dyeItem.getDyeColor(); + if (dyeColor != this.getCollarColor()) { + this.setCollarColor(dyeColor); + if (!player.getAbilities().instabuild) itemStack.shrink(1); + cir.setReturnValue(InteractionResult.SUCCESS); + return; + } + } + } else if (item == Items.BONE && !this.isAngry()) { + if (!player.getAbilities().instabuild) itemStack.shrink(1); + cir.setReturnValue(InteractionResult.SUCCESS); + return; + } + + cir.setReturnValue(super.mobInteract(player, hand)); + } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && this.isTame()) { + // Call armor shearing manually as removed in MixinEntity + if (itemStack.is(Items.SHEARS) + && this.isOwnedBy(player) + && this.isWearingBodyArmor() + && (!EnchantmentHelper.has(this.getBodyArmorItem(), EnchantmentEffectComponents.PREVENT_ARMOR_CHANGE) || player.isCreative())) { + this.playSound(SoundEvents.ARMOR_UNEQUIP_WOLF); + cir.setReturnValue(InteractionResult.SUCCESS); + } + } + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolfEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolfEntity.java deleted file mode 100644 index 5c055e9df..000000000 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinWolfEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.injection.mixin.features.entity.interaction; - -import com.viaversion.viafabricplus.features.entity.metadata_handling.WolfHealthTracker1_14_4; -import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.EnchantmentEffectComponentTypes; -import net.minecraft.component.type.FoodComponent; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.mob.Angerable; -import net.minecraft.entity.passive.TameableEntity; -import net.minecraft.entity.passive.WolfEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.DyeItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.sound.SoundEvents; -import net.minecraft.util.ActionResult; -import net.minecraft.util.DyeColor; -import net.minecraft.util.Hand; -import net.minecraft.world.World; -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.CallbackInfoReturnable; - -@Mixin(WolfEntity.class) -public abstract class MixinWolfEntity extends TameableEntity implements Angerable { - - protected MixinWolfEntity(EntityType entityType, World world) { - super(entityType, world); - } - - @Shadow - public abstract DyeColor getCollarColor(); - - @Shadow - protected abstract void setCollarColor(DyeColor color); - - @Inject(method = "interactMob", at = @At("HEAD"), cancellable = true) - private void fixWolfInteract(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { - final ItemStack itemStack = player.getStackInHand(hand); - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - final Item item = itemStack.getItem(); - if (this.isTamed()) { - final FoodComponent foodComponent = itemStack.get(DataComponentTypes.FOOD); - if (foodComponent != null) { - if (this.isBreedingItem(itemStack) && WolfHealthTracker1_14_4.getWolfHealth(this) < 20.0F) { - if (!player.getAbilities().creativeMode) itemStack.decrement(1); - this.heal(foodComponent.nutrition()); - cir.setReturnValue(ActionResult.SUCCESS); - return; - } - } else if (item instanceof DyeItem dyeItem) { - final DyeColor dyeColor = dyeItem.getColor(); - if (dyeColor != this.getCollarColor()) { - this.setCollarColor(dyeColor); - if (!player.getAbilities().creativeMode) itemStack.decrement(1); - cir.setReturnValue(ActionResult.SUCCESS); - return; - } - } - } else if (item == Items.BONE && !this.hasAngerTime()) { - if (!player.getAbilities().creativeMode) itemStack.decrement(1); - cir.setReturnValue(ActionResult.SUCCESS); - return; - } - - cir.setReturnValue(super.interactMob(player, hand)); - } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && this.isTamed()) { - // Call armor shearing manually as removed in MixinEntity - if (itemStack.isOf(Items.SHEARS) - && this.isOwner(player) - && this.isWearingBodyArmor() - && (!EnchantmentHelper.hasAnyEnchantmentsWith(this.getBodyArmor(), EnchantmentEffectComponentTypes.PREVENT_ARMOR_CHANGE) || player.isCreative())) { - this.playSoundIfNotSilent(SoundEvents.ITEM_ARMOR_UNEQUIP_WOLF); - cir.setReturnValue(ActionResult.SUCCESS); - } - } - } - -} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinZombieVillagerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinZombieVillager.java similarity index 74% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinZombieVillagerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinZombieVillager.java index a6d4fbf8b..a91d59cbc 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinZombieVillagerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/interaction/MixinZombieVillager.java @@ -23,21 +23,21 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.mob.ZombieVillagerEntity; -import net.minecraft.util.ActionResult; +import net.minecraft.world.entity.monster.ZombieVillager; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ZombieVillagerEntity.class) -public abstract class MixinZombieVillagerEntity { +@Mixin(ZombieVillager.class) +public abstract class MixinZombieVillager { - @Redirect(method = "interactMob", at = @At(value = "FIELD", target = "Lnet/minecraft/util/ActionResult;SUCCESS_SERVER:Lnet/minecraft/util/ActionResult$Success;")) - private ActionResult.Success swingHand() { + @Redirect(method = "mobInteract", at = @At(value = "FIELD", target = "Lnet/minecraft/world/InteractionResult;SUCCESS_SERVER:Lnet/minecraft/world/InteractionResult$Success;")) + private InteractionResult.Success swingHand() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - return ActionResult.SUCCESS; + return InteractionResult.SUCCESS; } else { - return ActionResult.SUCCESS_SERVER; + return InteractionResult.SUCCESS_SERVER; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/MixinWolfEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/MixinWolf.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/MixinWolfEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/MixinWolf.java index 31736f27e..42cc2864d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/MixinWolfEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/metadata_handling/MixinWolf.java @@ -24,24 +24,24 @@ import com.viaversion.viafabricplus.features.entity.metadata_handling.WolfHealthTracker1_14_4; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.mob.Angerable; -import net.minecraft.entity.passive.TameableEntity; -import net.minecraft.entity.passive.WolfEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.NeutralMob; +import net.minecraft.world.entity.TamableAnimal; +import net.minecraft.world.entity.animal.wolf.Wolf; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(WolfEntity.class) -public abstract class MixinWolfEntity extends TameableEntity implements Angerable { +@Mixin(Wolf.class) +public abstract class MixinWolf extends TamableAnimal implements NeutralMob { - protected MixinWolfEntity(EntityType entityType, World world) { + protected MixinWolf(EntityType entityType, Level world) { super(entityType, world); } - @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/WolfEntity;getHealth()F")) - private float fixWolfHealth(WolfEntity instance) { + @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/wolf/Wolf;getHealth()F")) + private float fixWolfHealth(Wolf instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { return WolfHealthTracker1_14_4.getWolfHealth(this); } else { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinPlayer.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinPlayer.java index d3ada0d06..a84e517f5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinPlayer.java @@ -23,43 +23,43 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; 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(PlayerEntity.class) -public abstract class MixinPlayerEntity extends LivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends LivingEntity { - protected MixinPlayerEntity(EntityType entityType, World world) { + protected MixinPlayer(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "updatePose", at = @At("HEAD"), cancellable = true) + @Inject(method = "updatePlayerPose", at = @At("HEAD"), cancellable = true) private void onUpdatePose(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - final EntityPose pose; - if (this.isGliding()) { - pose = EntityPose.GLIDING; + final Pose pose; + if (this.isFallFlying()) { + pose = Pose.FALL_FLYING; } else if (this.isSleeping()) { - pose = EntityPose.SLEEPING; + pose = Pose.SLEEPING; } else if (this.isSwimming()) { - pose = EntityPose.SWIMMING; - } else if (this.isUsingRiptide()) { - pose = EntityPose.SPIN_ATTACK; - } else if (this.isSneaking()) { - pose = EntityPose.CROUCHING; + pose = Pose.SWIMMING; + } else if (this.isAutoSpinAttack()) { + pose = Pose.SPIN_ATTACK; + } else if (this.isShiftKeyDown()) { + pose = Pose.CROUCHING; } else { - pose = EntityPose.STANDING; + pose = Pose.STANDING; } this.setPose(pose); ci.cancel(); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinOtherClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinRemotePlayer.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinOtherClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinRemotePlayer.java index 557ce0bba..4fc243cb8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinOtherClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/pose/MixinRemotePlayer.java @@ -24,25 +24,25 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.OtherClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.RemotePlayer; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(OtherClientPlayerEntity.class) -public abstract class MixinOtherClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(RemotePlayer.class) +public abstract class MixinRemotePlayer extends AbstractClientPlayer { - public MixinOtherClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinRemotePlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @Inject(method = "updatePose", at = @At("HEAD")) + @Inject(method = "updatePlayerPose", at = @At("HEAD")) private void onUpdatePose(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - super.updatePose(); + super.updatePlayerPose(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinAbstractBoatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinAbstractBoat.java similarity index 54% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinAbstractBoatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinAbstractBoat.java index 1ab809a2c..75dd0d74f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinAbstractBoatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinAbstractBoat.java @@ -22,27 +22,27 @@ package com.viaversion.viafabricplus.injection.mixin.features.entity.r1_8_boat; import com.viaversion.viafabricplus.features.entity.r1_8_boat.PositionInterpolator1_8; -import com.viaversion.viafabricplus.injection.access.entity.r1_8_boat.IAbstractBoatEntity; +import com.viaversion.viafabricplus.injection.access.entity.r1_8_boat.IAbstractBoat; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.MovementType; -import net.minecraft.entity.PositionInterpolator; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.entity.vehicle.VehicleEntity; -import net.minecraft.particle.ParticleTypes; -import net.minecraft.registry.tag.FluidTags; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.InterpolationHandler; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.world.entity.vehicle.VehicleEntity; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.tags.FluidTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -52,17 +52,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(AbstractBoatEntity.class) -public abstract class MixinAbstractBoatEntity extends VehicleEntity implements IAbstractBoatEntity { +@Mixin(AbstractBoat.class) +public abstract class MixinAbstractBoat extends VehicleEntity implements IAbstractBoat { @Shadow - private BoatEntity.Location location; + private Boat.Status status; @Shadow - public abstract PositionInterpolator getInterpolator(); + public abstract InterpolationHandler getInterpolation(); @Unique - private final PositionInterpolator viaFabricPlus$positionInterpolator = new PositionInterpolator1_8((AbstractBoatEntity) (Object) this); + private final InterpolationHandler viaFabricPlus$positionInterpolator = new PositionInterpolator1_8((AbstractBoat) (Object) this); @Unique private double viaFabricPlus$speedMultiplier = 0.07D; @@ -71,30 +71,30 @@ public abstract class MixinAbstractBoatEntity extends VehicleEntity implements I private int viaFabricPlus$boatInterpolationSteps; @Unique - private Vec3d viaFabricPlus$boatVelocity = Vec3d.ZERO; + private Vec3 viaFabricPlus$boatVelocity = Vec3.ZERO; - public MixinAbstractBoatEntity(EntityType entityType, World world) { + public MixinAbstractBoat(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "pushAwayFrom", at = @At("HEAD"), cancellable = true) + @Inject(method = "push", at = @At("HEAD"), cancellable = true) private void pushAwayFrom1_8(Entity entity, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { ci.cancel(); - super.pushAwayFrom(entity); + super.push(entity); } } - @Inject(method = "getInterpolator", at = @At("HEAD"), cancellable = true) - private void replaceInterpolation(CallbackInfoReturnable cir) { + @Inject(method = "getInterpolation", at = @At("HEAD"), cancellable = true) + private void replaceInterpolation(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(viaFabricPlus$positionInterpolator); } } @Override - public void setVelocityClient(final Vec3d clientVelocity) { - super.setVelocityClient(clientVelocity); + public void lerpMotion(final Vec3 clientVelocity) { + super.lerpMotion(clientVelocity); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { this.viaFabricPlus$boatVelocity = clientVelocity; @@ -107,99 +107,99 @@ private void tick1_8(CallbackInfo ci) { ci.cancel(); super.tick(); - if (this.getDamageWobbleTicks() > 0) { - this.setDamageWobbleTicks(this.getDamageWobbleTicks() - 1); + if (this.getHurtTime() > 0) { + this.setHurtTime(this.getHurtTime() - 1); } - if (this.getDamageWobbleStrength() > 0) { - this.setDamageWobbleStrength(this.getDamageWobbleStrength() - 1); + if (this.getDamage() > 0) { + this.setDamage(this.getDamage() - 1); } - this.lastX = this.getX(); - this.lastY = this.getY(); - this.lastZ = this.getZ(); + this.xo = this.getX(); + this.yo = this.getY(); + this.zo = this.getZ(); final int yPartitions = 5; double percentSubmerged = 0; for (int partitionIndex = 0; partitionIndex < yPartitions; partitionIndex++) { - final double minY = this.getBoundingBox().minY + this.getBoundingBox().getLengthY() * partitionIndex / yPartitions - 0.125; - final double maxY = this.getBoundingBox().minY + this.getBoundingBox().getLengthY() * (partitionIndex + 1) / yPartitions - 0.125; - final Box box = new Box(this.getBoundingBox().minX, minY, this.getBoundingBox().minZ, this.getBoundingBox().maxX, maxY, this.getBoundingBox().maxZ); - if (BlockPos.stream(box).anyMatch(pos -> this.getEntityWorld().getFluidState(pos).isIn(FluidTags.WATER))) { + final double minY = this.getBoundingBox().minY + this.getBoundingBox().getYsize() * partitionIndex / yPartitions - 0.125; + final double maxY = this.getBoundingBox().minY + this.getBoundingBox().getYsize() * (partitionIndex + 1) / yPartitions - 0.125; + final AABB box = new AABB(this.getBoundingBox().minX, minY, this.getBoundingBox().minZ, this.getBoundingBox().maxX, maxY, this.getBoundingBox().maxZ); + if (BlockPos.betweenClosedStream(box).anyMatch(pos -> this.level().getFluidState(pos).is(FluidTags.WATER))) { percentSubmerged += 1.0 / yPartitions; } } - final double oldHorizontalSpeed = this.getVelocity().horizontalLength(); + final double oldHorizontalSpeed = this.getDeltaMovement().horizontalDistance(); if (oldHorizontalSpeed > (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6) ? 0.2625D : 0.2975D)) { - final double rx = Math.cos(this.getYaw() * Math.PI / 180); - final double rz = Math.sin(this.getYaw() * Math.PI / 180); + final double rx = Math.cos(this.getYRot() * Math.PI / 180); + final double rz = Math.sin(this.getYRot() * Math.PI / 180); for (int i = 0; i < 1 + oldHorizontalSpeed * 60; i++) { final double dForward = this.random.nextFloat() * 2 - 1; final double dSideways = (this.random.nextInt(2) * 2 - 1) * 0.7D; if (this.random.nextBoolean()) { final double x = this.getX() - rx * dForward * 0.8 + rz * dSideways; final double z = this.getZ() - rz * dForward * 0.8 - rx * dSideways; - this.getEntityWorld().addParticleClient(ParticleTypes.SPLASH, x, this.getY() - 0.125D, z, this.getVelocity().x, this.getVelocity().y, this.getVelocity().z); + this.level().addParticle(ParticleTypes.SPLASH, x, this.getY() - 0.125D, z, this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z); } else { final double x = this.getX() + rx + rz * dForward * 0.7; final double z = this.getZ() + rz - rx * dForward * 0.7; - this.getEntityWorld().addParticleClient(ParticleTypes.SPLASH, x, this.getY() - 0.125D, z, this.getVelocity().x, this.getVelocity().y, this.getVelocity().z); + this.level().addParticle(ParticleTypes.SPLASH, x, this.getY() - 0.125D, z, this.getDeltaMovement().x, this.getDeltaMovement().y, this.getDeltaMovement().z); } } } - if (this.getEntityWorld().isClient() && !this.hasPassengers()) { + if (this.level().isClientSide() && !this.isVehicle()) { if (this.viaFabricPlus$boatInterpolationSteps > 0) { - final PositionInterpolator.Data data = viaFabricPlus$positionInterpolator.data; - final double newX = this.getX() + (data.pos.x - this.getX()) / this.viaFabricPlus$boatInterpolationSteps; - final double newY = this.getY() + (data.pos.y - this.getY()) / this.viaFabricPlus$boatInterpolationSteps; - final double newZ = this.getZ() + (data.pos.z - this.getZ()) / this.viaFabricPlus$boatInterpolationSteps; - final double newYaw = this.getYaw() + MathHelper.wrapDegrees(data.yaw - this.getYaw()) / this.viaFabricPlus$boatInterpolationSteps; - final double newPitch = this.getPitch() + (data.pitch - this.getPitch()) / this.viaFabricPlus$boatInterpolationSteps; + final InterpolationHandler.InterpolationData data = viaFabricPlus$positionInterpolator.interpolationData; + final double newX = this.getX() + (data.position.x - this.getX()) / this.viaFabricPlus$boatInterpolationSteps; + final double newY = this.getY() + (data.position.y - this.getY()) / this.viaFabricPlus$boatInterpolationSteps; + final double newZ = this.getZ() + (data.position.z - this.getZ()) / this.viaFabricPlus$boatInterpolationSteps; + final double newYaw = this.getYRot() + Mth.wrapDegrees(data.yRot - this.getYRot()) / this.viaFabricPlus$boatInterpolationSteps; + final double newPitch = this.getXRot() + (data.xRot - this.getXRot()) / this.viaFabricPlus$boatInterpolationSteps; this.viaFabricPlus$boatInterpolationSteps--; - this.setPosition(newX, newY, newZ); - this.setRotation((float) newYaw, (float) newPitch); + this.setPos(newX, newY, newZ); + this.setRot((float) newYaw, (float) newPitch); } else { - this.setPosition(this.getX() + this.getVelocity().x, this.getY() + this.getVelocity().y, this.getZ() + this.getVelocity().z); - if (this.isOnGround()) { - this.setVelocity(this.getVelocity().multiply(0.5D)); + this.setPos(this.getX() + this.getDeltaMovement().x, this.getY() + this.getDeltaMovement().y, this.getZ() + this.getDeltaMovement().z); + if (this.onGround()) { + this.setDeltaMovement(this.getDeltaMovement().scale(0.5D)); } - this.setVelocity(this.getVelocity().multiply(0.99D, 0.95D, 0.99D)); + this.setDeltaMovement(this.getDeltaMovement().multiply(0.99D, 0.95D, 0.99D)); } } else { if (percentSubmerged < 1) { final double normalizedDistanceFromMiddle = percentSubmerged * 2 - 1; - this.setVelocity(this.getVelocity().add(0, 0.04D * normalizedDistanceFromMiddle, 0)); + this.setDeltaMovement(this.getDeltaMovement().add(0, 0.04D * normalizedDistanceFromMiddle, 0)); } else { - if (this.getVelocity().y < 0) { - this.setVelocity(this.getVelocity().multiply(1, 0.5D, 1)); + if (this.getDeltaMovement().y < 0) { + this.setDeltaMovement(this.getDeltaMovement().multiply(1, 0.5D, 1)); } - this.setVelocity(this.getVelocity().add(0, 0.007D, 0)); + this.setDeltaMovement(this.getDeltaMovement().add(0, 0.007D, 0)); } if (this.getControllingPassenger() != null) { final LivingEntity passenger = this.getControllingPassenger(); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_5_2)) { - final double xAcceleration = passenger.getVelocity().x * this.viaFabricPlus$speedMultiplier; - final double zAcceleration = passenger.getVelocity().z * this.viaFabricPlus$speedMultiplier; - this.setVelocity(this.getVelocity().add(xAcceleration, 0, zAcceleration)); + final double xAcceleration = passenger.getDeltaMovement().x * this.viaFabricPlus$speedMultiplier; + final double zAcceleration = passenger.getDeltaMovement().z * this.viaFabricPlus$speedMultiplier; + this.setDeltaMovement(this.getDeltaMovement().add(xAcceleration, 0, zAcceleration)); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_6_4)) { - if (passenger.forwardSpeed > 0) { - final double xAcceleration = -Math.sin(passenger.getYaw() * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * 0.05D; - final double zAcceleration = Math.cos(passenger.getYaw() * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * 0.05D; - this.setVelocity(this.getVelocity().add(xAcceleration, 0, zAcceleration)); + if (passenger.zza > 0) { + final double xAcceleration = -Math.sin(passenger.getYRot() * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * 0.05D; + final double zAcceleration = Math.cos(passenger.getYRot() * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * 0.05D; + this.setDeltaMovement(this.getDeltaMovement().add(xAcceleration, 0, zAcceleration)); } } else { - final float boatAngle = passenger.getYaw() - passenger.sidewaysSpeed * 90F; - final double xAcceleration = -Math.sin(boatAngle * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * passenger.forwardSpeed * 0.05D; - final double zAcceleration = Math.cos(boatAngle * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * passenger.forwardSpeed * 0.05D; - this.setVelocity(this.getVelocity().add(xAcceleration, 0, zAcceleration)); + final float boatAngle = passenger.getYRot() - passenger.xxa * 90F; + final double xAcceleration = -Math.sin(boatAngle * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * passenger.zza * 0.05D; + final double zAcceleration = Math.cos(boatAngle * Math.PI / 180) * this.viaFabricPlus$speedMultiplier * passenger.zza * 0.05D; + this.setDeltaMovement(this.getDeltaMovement().add(xAcceleration, 0, zAcceleration)); } } - double newHorizontalSpeed = this.getVelocity().horizontalLength(); + double newHorizontalSpeed = this.getDeltaMovement().horizontalDistance(); if (newHorizontalSpeed > 0.35D) { final double multiplier = 0.35D / newHorizontalSpeed; - this.setVelocity(this.getVelocity().multiply(multiplier, 1, multiplier)); + this.setDeltaMovement(this.getDeltaMovement().multiply(multiplier, 1, multiplier)); newHorizontalSpeed = 0.35D; } @@ -217,60 +217,60 @@ private void tick1_8(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().newerThan(LegacyProtocolVersion.r1_6_4)) { for (int i = 0; i < 4; i++) { - final int dx = MathHelper.floor(this.getX() + ((i % 2) - 0.5D) * 0.8D); + final int dx = Mth.floor(this.getX() + ((i % 2) - 0.5D) * 0.8D); //noinspection IntegerDivisionInFloatingPointContext - final int dz = MathHelper.floor(this.getZ() + ((i / 2) - 0.5D) * 0.8D); + final int dz = Mth.floor(this.getZ() + ((i / 2) - 0.5D) * 0.8D); for (int ddy = 0; ddy < 2; ddy++) { - final int dy = MathHelper.floor(this.getY()) + ddy; + final int dy = Mth.floor(this.getY()) + ddy; final BlockPos pos = new BlockPos(dx, dy, dz); - final Block block = this.getEntityWorld().getBlockState(pos).getBlock(); + final Block block = this.level().getBlockState(pos).getBlock(); if (block == Blocks.SNOW) { - this.getEntityWorld().setBlockState(pos, Blocks.AIR.getDefaultState()); + this.level().setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); this.horizontalCollision = false; } else if (block == Blocks.LILY_PAD) { - this.getEntityWorld().breakBlock(pos, true); + this.level().destroyBlock(pos, true); this.horizontalCollision = false; } } } } - if (this.isOnGround()) { - this.setVelocity(this.getVelocity().multiply(0.5D)); + if (this.onGround()) { + this.setDeltaMovement(this.getDeltaMovement().scale(0.5D)); } - this.move(MovementType.SELF, this.getVelocity()); + this.move(MoverType.SELF, this.getDeltaMovement()); if (!this.horizontalCollision || oldHorizontalSpeed <= 0.2975D) { - this.setVelocity(this.getVelocity().multiply(0.99D, 0.95D, 0.99D)); + this.setDeltaMovement(this.getDeltaMovement().multiply(0.99D, 0.95D, 0.99D)); } - this.setPitch(0); - final double deltaX = this.lastX - this.getX(); - final double deltaZ = this.lastZ - this.getZ(); + this.setXRot(0); + final double deltaX = this.xo - this.getX(); + final double deltaZ = this.zo - this.getZ(); if (deltaX * deltaX + deltaZ * deltaZ > 0.001D) { - final double yawDelta = MathHelper.clamp(MathHelper.wrapDegrees((MathHelper.atan2(deltaZ, deltaX) * 180 / Math.PI) - this.getYaw()), -20, 20); - this.setYaw((float) (this.getYaw() + yawDelta)); + final double yawDelta = Mth.clamp(Mth.wrapDegrees((Mth.atan2(deltaZ, deltaX) * 180 / Math.PI) - this.getYRot()), -20, 20); + this.setYRot((float) (this.getYRot() + yawDelta)); } } } } - @Inject(method = "onPassengerLookAround", at = @At("HEAD"), cancellable = true) + @Inject(method = "onPassengerTurned", at = @At("HEAD"), cancellable = true) private void onPassengerLookAround1_8(Entity passenger, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { ci.cancel(); - super.onPassengerLookAround(passenger); + super.onPassengerTurned(passenger); } } - @Inject(method = "fall", at = @At("HEAD"), cancellable = true) + @Inject(method = "checkFallDamage", at = @At("HEAD"), cancellable = true) private void fall1_8(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_6_4)) { ci.cancel(); - super.fall(heightDifference, onGround, state, landedPosition); + super.checkFallDamage(heightDifference, onGround, state, landedPosition); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - this.location = BoatEntity.Location.ON_LAND; + this.status = Boat.Status.ON_LAND; } } @@ -287,12 +287,12 @@ private void canAddPassenger1_8(Entity passenger, CallbackInfoReturnable void useBoatRenderer1_8(S state, CallbackInfoReturnable> cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && state instanceof BoatEntityRenderState) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && state instanceof BoatRenderState) { cir.setReturnValue((EntityRenderer) viaFabricPlus$boatRenderer); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinEntityModels.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinLayerDefinitions.java similarity index 73% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinEntityModels.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinLayerDefinitions.java index a4e55189a..65361342a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinEntityModels.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/r1_8_boat/MixinLayerDefinitions.java @@ -23,18 +23,18 @@ import com.google.common.collect.ImmutableMap; import com.viaversion.viafabricplus.features.entity.r1_8_boat.BoatModel1_8; -import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.render.entity.model.EntityModelLayer; -import net.minecraft.client.render.entity.model.EntityModels; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.LayerDefinitions; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Mixin(EntityModels.class) -public abstract class MixinEntityModels { +@Mixin(LayerDefinitions.class) +public abstract class MixinLayerDefinitions { - @ModifyVariable(method = "getModels", at = @At(value = "STORE", ordinal = 0), ordinal = 0) - private static ImmutableMap.Builder addBoatModel(ImmutableMap.Builder builder) { + @ModifyVariable(method = "createRoots", at = @At(value = "STORE", ordinal = 0), ordinal = 0) + private static ImmutableMap.Builder addBoatModel(ImmutableMap.Builder builder) { return builder.put(BoatModel1_8.MODEL_LAYER, BoatModel1_8.getTexturedModelData()); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinAbstractBoatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinAbstractBoat.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinAbstractBoatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinAbstractBoat.java index 340d41984..dd5602c8e 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinAbstractBoatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinAbstractBoat.java @@ -24,28 +24,28 @@ import com.viaversion.viafabricplus.features.entity.riding_offset.EntityRidingOffsetsPre1_20_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.entity.vehicle.VehicleEntity; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.entity.vehicle.VehicleEntity; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; 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(AbstractBoatEntity.class) -public abstract class MixinAbstractBoatEntity extends VehicleEntity { +@Mixin(AbstractBoat.class) +public abstract class MixinAbstractBoat extends VehicleEntity { - public MixinAbstractBoatEntity(EntityType entityType, World world) { + public MixinAbstractBoat(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "updatePassengerPosition", at = @At(value = "HEAD"), cancellable = true) - private void updatePassengerPosition1_8(Entity passenger, Entity.PositionUpdater positionUpdater, CallbackInfo ci) { + @Inject(method = "positionRider", at = @At(value = "HEAD"), cancellable = true) + private void updatePassengerPosition1_8(Entity passenger, Entity.MoveFunction positionUpdater, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - final Vec3d newPosition = EntityRidingOffsetsPre1_20_2.getMountedHeightOffset(this, passenger).add(this.getEntityPos()); + final Vec3 newPosition = EntityRidingOffsetsPre1_20_2.getMountedHeightOffset(this, passenger).add(this.position()); positionUpdater.accept(passenger, newPosition.x, newPosition.y + EntityRidingOffsetsPre1_20_2.getHeightOffset(passenger), newPosition.z); ci.cancel(); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinCamelEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinCamel.java similarity index 64% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinCamelEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinCamel.java index db23f8dfe..7c1ff1ce3 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinCamelEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinCamel.java @@ -23,32 +23,32 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.entity.passive.CamelEntity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.animal.camel.Camel; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -@Mixin(CamelEntity.class) -public abstract class MixinCamelEntity extends AbstractHorseEntity { +@Mixin(Camel.class) +public abstract class MixinCamel extends AbstractHorse { - public MixinCamelEntity(EntityType entityType, World world) { + public MixinCamel(EntityType entityType, Level world) { super(entityType, world); } @Override - public void onPassengerLookAround(Entity passenger) { + public void onPassengerTurned(Entity passenger) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20) && this.getControllingPassenger() != passenger) { this.viaFabricPlus$clampPassengerYaw1_20_1(passenger); } } @Override - protected void updatePassengerPosition(Entity passenger, PositionUpdater positionUpdater) { - super.updatePassengerPosition(passenger, positionUpdater); + protected void positionRider(Entity passenger, MoveFunction positionUpdater) { + super.positionRider(passenger, positionUpdater); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20)) { this.viaFabricPlus$clampPassengerYaw1_20_1(passenger); @@ -57,16 +57,16 @@ protected void updatePassengerPosition(Entity passenger, PositionUpdater positio @Unique private void viaFabricPlus$clampPassengerYaw1_20_1(final Entity passenger) { - passenger.setBodyYaw(this.getYaw()); - final float passengerYaw = passenger.getYaw(); + passenger.setYBodyRot(this.getYRot()); + final float passengerYaw = passenger.getYRot(); - final float deltaDegrees = MathHelper.wrapDegrees(passengerYaw - this.getYaw()); - final float clampedDelta = MathHelper.clamp(deltaDegrees, -160.0F, 160.0F); - passenger.lastYaw += clampedDelta - deltaDegrees; + final float deltaDegrees = Mth.wrapDegrees(passengerYaw - this.getYRot()); + final float clampedDelta = Mth.clamp(deltaDegrees, -160.0F, 160.0F); + passenger.yRotO += clampedDelta - deltaDegrees; final float newYaw = passengerYaw + clampedDelta - deltaDegrees; - passenger.setYaw(newYaw); - passenger.setHeadYaw(newYaw); + passenger.setYRot(newYaw); + passenger.setYHeadRot(newYaw); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinEntity.java index 33b088663..51484d87b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinEntity.java @@ -24,9 +24,9 @@ import com.viaversion.viafabricplus.features.entity.riding_offset.EntityRidingOffsetsPre1_20_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -36,23 +36,23 @@ public abstract class MixinEntity { @Shadow - protected abstract Vec3d getPassengerAttachmentPos(Entity passenger, EntityDimensions dimensions, float scaleFactor); + protected abstract Vec3 getPassengerAttachmentPoint(Entity passenger, EntityDimensions dimensions, float scaleFactor); - @Redirect(method = "updatePassengerPosition(Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/Entity$PositionUpdater;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getVehicleAttachmentPos(Lnet/minecraft/entity/Entity;)Lnet/minecraft/util/math/Vec3d;")) - private Vec3d use1_20_1RidingOffset(Entity instance, Entity vehicle) { + @Redirect(method = "positionRider(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Entity$MoveFunction;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getVehicleAttachmentPoint(Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/phys/Vec3;")) + private Vec3 use1_20_1RidingOffset(Entity instance, Entity vehicle) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20)) { - return new Vec3d(0, -EntityRidingOffsetsPre1_20_2.getHeightOffset(instance), 0); + return new Vec3(0, -EntityRidingOffsetsPre1_20_2.getHeightOffset(instance), 0); } else { - return instance.getVehicleAttachmentPos(vehicle); + return instance.getVehicleAttachmentPoint(vehicle); } } - @Redirect(method = "getPassengerRidingPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getPassengerAttachmentPos(Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/EntityDimensions;F)Lnet/minecraft/util/math/Vec3d;")) - private Vec3d getPassengerRidingPos1_20_1(Entity instance, Entity passenger, EntityDimensions dimensions, float scaleFactor) { + @Redirect(method = "getPassengerRidingPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getPassengerAttachmentPoint(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/EntityDimensions;F)Lnet/minecraft/world/phys/Vec3;")) + private Vec3 getPassengerRidingPos1_20_1(Entity instance, Entity passenger, EntityDimensions dimensions, float scaleFactor) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20)) { - return EntityRidingOffsetsPre1_20_2.getMountedHeightOffset(instance, passenger).rotateY(-instance.getYaw() * (float) (Math.PI / 180)); + return EntityRidingOffsetsPre1_20_2.getMountedHeightOffset(instance, passenger).yRot(-instance.getYRot() * (float) (Math.PI / 180)); } else { - return getPassengerAttachmentPos(passenger, dimensions, scaleFactor); + return getPassengerAttachmentPoint(passenger, dimensions, scaleFactor); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinLivingEntity.java index d6bc88f4b..1db55a909 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/entity/riding_offset/MixinLivingEntity.java @@ -24,12 +24,12 @@ import com.viaversion.viafabricplus.features.entity.riding_offset.EntityRidingOffsetsPre1_20_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -37,16 +37,16 @@ @Mixin(LivingEntity.class) public abstract class MixinLivingEntity extends Entity { - public MixinLivingEntity(EntityType type, World world) { + public MixinLivingEntity(EntityType type, Level world) { super(type, world); } - @Redirect(method = "getPassengerRidingPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getPassengerAttachmentPos(Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/EntityDimensions;F)Lnet/minecraft/util/math/Vec3d;")) - private Vec3d getPassengerRidingPos1_20_1(LivingEntity instance, Entity entity, EntityDimensions entityDimensions, float v) { + @Redirect(method = "getPassengerRidingPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getPassengerAttachmentPoint(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/EntityDimensions;F)Lnet/minecraft/world/phys/Vec3;")) + private Vec3 getPassengerRidingPos1_20_1(LivingEntity instance, Entity entity, EntityDimensions entityDimensions, float v) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20)) { - return EntityRidingOffsetsPre1_20_2.getMountedHeightOffset(instance, entity).rotateY(-instance.getYaw() * (float) (Math.PI / 180)); + return EntityRidingOffsetsPre1_20_2.getMountedHeightOffset(instance, entity).yRot(-instance.getYRot() * (float) (Math.PI / 180)); } else { - return getPassengerAttachmentPos(entity, entityDimensions, v); + return getPassengerAttachmentPoint(entity, entityDimensions, v); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinKeyboard.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinKeyboardHandler.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinKeyboard.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinKeyboardHandler.java index 1648eac91..8733ccd28 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinKeyboard.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinKeyboardHandler.java @@ -21,12 +21,12 @@ package com.viaversion.viafabricplus.injection.mixin.features.execute_inputs_sync; -import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard; +import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboardHandlers; import com.viaversion.viafabricplus.settings.impl.DebugSettings; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; -import net.minecraft.client.Keyboard; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.KeyboardHandler; +import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,19 +34,19 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(Keyboard.class) -public abstract class MixinKeyboard implements IMouseKeyboard { +@Mixin(KeyboardHandler.class) +public abstract class MixinKeyboardHandler implements IMouseKeyboardHandlers { @Shadow @Final - private MinecraftClient client; + private Minecraft minecraft; @Unique private final Queue viaFabricPlus$pendingScreenEvents = new ConcurrentLinkedQueue<>(); - @Redirect(method = {"method_22676", "method_22675"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;execute(Ljava/lang/Runnable;)V")) - private void storeEvent(MinecraftClient instance, Runnable runnable) { - if (this.client.getNetworkHandler() != null && this.client.currentScreen != null && DebugSettings.INSTANCE.executeInputsSynchronously.isEnabled()) { + @Redirect(method = {"method_22676", "method_22675"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;execute(Ljava/lang/Runnable;)V")) + private void storeEvent(Minecraft instance, Runnable runnable) { + if (this.minecraft.getConnection() != null && this.minecraft.screen != null && DebugSettings.INSTANCE.executeInputsSynchronously.isEnabled()) { this.viaFabricPlus$pendingScreenEvents.offer(runnable); } else { instance.execute(runnable); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMinecraft.java similarity index 74% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMinecraft.java index d1ccebca2..16ddf7a24 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMinecraft.java @@ -21,12 +21,12 @@ package com.viaversion.viafabricplus.injection.mixin.features.execute_inputs_sync; -import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard; +import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboardHandlers; import com.viaversion.viafabricplus.settings.impl.DebugSettings; import java.util.Queue; -import net.minecraft.client.Keyboard; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.Mouse; +import net.minecraft.client.KeyboardHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.MouseHandler; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -35,30 +35,30 @@ import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(MinecraftClient.class) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { @Shadow @Final - public Mouse mouse; + public MouseHandler mouseHandler; @Shadow @Final - public Keyboard keyboard; + public KeyboardHandler keyboardHandler; @Inject(method = "tick", - at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 0), + at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;screen:Lnet/minecraft/client/gui/screens/Screen;", ordinal = 0), slice = @Slice( - from = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;attackCooldown:I", ordinal = 0), - to = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;addCrashReportSection(Lnet/minecraft/util/crash/CrashReport;)V") + from = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;missTime:I", ordinal = 0), + to = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;fillCrashDetails(Lnet/minecraft/CrashReport;)V") ) ) private void processInputQueues(CallbackInfo ci) { if (DebugSettings.INSTANCE.executeInputsSynchronously.isEnabled()) { - Queue inputEvents = ((IMouseKeyboard) this.mouse).viaFabricPlus$getPendingScreenEvents(); + Queue inputEvents = ((IMouseKeyboardHandlers) this.mouseHandler).viaFabricPlus$getPendingScreenEvents(); while (!inputEvents.isEmpty()) inputEvents.poll().run(); - inputEvents = ((IMouseKeyboard) this.keyboard).viaFabricPlus$getPendingScreenEvents(); + inputEvents = ((IMouseKeyboardHandlers) this.keyboardHandler).viaFabricPlus$getPendingScreenEvents(); while (!inputEvents.isEmpty()) inputEvents.poll().run(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMouse.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMouseHandler.java similarity index 78% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMouse.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMouseHandler.java index 3de02b736..8a2ca0cb9 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMouse.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/execute_inputs_sync/MixinMouseHandler.java @@ -21,12 +21,12 @@ package com.viaversion.viafabricplus.injection.mixin.features.execute_inputs_sync; -import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboard; +import com.viaversion.viafabricplus.injection.access.execute_inputs_sync.IMouseKeyboardHandlers; import com.viaversion.viafabricplus.settings.impl.DebugSettings; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.Mouse; +import net.minecraft.client.Minecraft; +import net.minecraft.client.MouseHandler; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,19 +34,19 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(Mouse.class) -public abstract class MixinMouse implements IMouseKeyboard { +@Mixin(MouseHandler.class) +public abstract class MixinMouseHandler implements IMouseKeyboardHandlers { @Shadow @Final - private MinecraftClient client; + private Minecraft minecraft; @Unique private final Queue viaFabricPlus$pendingScreenEvents = new ConcurrentLinkedQueue<>(); - @Redirect(method = {"method_22684", "method_22685"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;execute(Ljava/lang/Runnable;)V")) - private void storeEvent(MinecraftClient instance, Runnable runnable) { - if (this.client.getNetworkHandler() != null && this.client.currentScreen != null && DebugSettings.INSTANCE.executeInputsSynchronously.isEnabled()) { + @Redirect(method = {"method_22684", "method_22685"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;execute(Ljava/lang/Runnable;)V")) + private void storeEvent(Minecraft instance, Runnable runnable) { + if (this.minecraft.getConnection() != null && this.minecraft.screen != null && DebugSettings.INSTANCE.executeInputsSynchronously.isEnabled()) { this.viaFabricPlus$pendingScreenEvents.offer(runnable); } else { instance.execute(runnable); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/MixinFontStorage.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/MixinFontSet.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/MixinFontStorage.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/MixinFontSet.java index f12bf5c33..a1dd3bc18 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/MixinFontStorage.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/font/MixinFontSet.java @@ -26,11 +26,11 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.settings.impl.DebugSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.BakedGlyph; -import net.minecraft.client.font.FontStorage; -import net.minecraft.client.font.GlyphBaker; -import net.minecraft.util.math.random.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.font.glyphs.BakedGlyph; +import net.minecraft.client.gui.font.FontSet; +import net.minecraft.client.gui.font.GlyphStitcher; +import net.minecraft.util.RandomSource; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -40,58 +40,58 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(FontStorage.class) -public abstract class MixinFontStorage { +@Mixin(FontSet.class) +public abstract class MixinFontSet { @Shadow @Final - GlyphBaker glyphBaker; + GlyphStitcher stitcher; @Shadow @Final - private FontStorage.GlyphPair blankBakedGlyphPair; + private FontSet.SelectedGlyphs missingSelectedGlyphs; @Unique private BakedGlyph viaFabricPlus$blankBakedGlyph1_12_2; @Unique - private FontStorage.GlyphPair viaFabricPlus$blankBakedGlyphPair1_12_2; + private FontSet.SelectedGlyphs viaFabricPlus$blankBakedGlyphPair1_12_2; @Unique private boolean viaFabricPlus$obfuscatedLookup; - @Inject(method = "clear", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/BuiltinEmptyGlyph;bake(Lnet/minecraft/client/font/GlyphBaker;)Lnet/minecraft/client/font/BakedGlyphImpl;", ordinal = 0)) + @Inject(method = "resetTextures", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/font/glyphs/SpecialGlyphs;bake(Lnet/minecraft/client/gui/font/GlyphStitcher;)Lnet/minecraft/client/gui/font/glyphs/BakedSheetGlyph;", ordinal = 0)) private void bakeBlankGlyph1_12_2(CallbackInfo ci) { - this.viaFabricPlus$blankBakedGlyph1_12_2 = BuiltinEmptyGlyph1_12_2.INSTANCE.bake(this.glyphBaker); - this.viaFabricPlus$blankBakedGlyphPair1_12_2 = new FontStorage.GlyphPair(() -> this.viaFabricPlus$blankBakedGlyph1_12_2, () -> this.viaFabricPlus$blankBakedGlyph1_12_2); + this.viaFabricPlus$blankBakedGlyph1_12_2 = BuiltinEmptyGlyph1_12_2.INSTANCE.bake(this.stitcher); + this.viaFabricPlus$blankBakedGlyphPair1_12_2 = new FontSet.SelectedGlyphs(() -> this.viaFabricPlus$blankBakedGlyph1_12_2, () -> this.viaFabricPlus$blankBakedGlyph1_12_2); } - @Inject(method = "getBaked", at = @At("RETURN"), cancellable = true) - private void filterBakedGlyph(int codePoint, CallbackInfoReturnable cir) { + @Inject(method = "getGlyph", at = @At("RETURN"), cancellable = true) + private void filterBakedGlyph(int codePoint, CallbackInfoReturnable cir) { if (this.viaFabricPlus$shouldBeInvisible(codePoint)) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { cir.setReturnValue(viaFabricPlus$blankBakedGlyphPair1_12_2); } else { - cir.setReturnValue(blankBakedGlyphPair); + cir.setReturnValue(missingSelectedGlyphs); } } } - @Inject(method = "findGlyph", at = @At("RETURN"), cancellable = true) - private void fixBlankGlyph1_12_2(int codePoint, CallbackInfoReturnable cir) { + @Inject(method = "computeGlyphInfo", at = @At("RETURN"), cancellable = true) + private void fixBlankGlyph1_12_2(int codePoint, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - final FontStorage.GlyphPair glyphPair = cir.getReturnValue(); - cir.setReturnValue(glyphPair == this.blankBakedGlyphPair ? this.viaFabricPlus$blankBakedGlyphPair1_12_2 : glyphPair); + final FontSet.SelectedGlyphs glyphPair = cir.getReturnValue(); + cir.setReturnValue(glyphPair == this.missingSelectedGlyphs ? this.viaFabricPlus$blankBakedGlyphPair1_12_2 : glyphPair); } } // Ignore obfuscated texts in the character filter as obfuscated text uses *all* characters, even those not existing in the current target version. - @Inject(method = "getObfuscatedBakedGlyph", at = @At("HEAD")) - private void pauseCharacterFiltering(Random random, int width, CallbackInfoReturnable cir) { + @Inject(method = "getRandomGlyph", at = @At("HEAD")) + private void pauseCharacterFiltering(RandomSource random, int width, CallbackInfoReturnable cir) { viaFabricPlus$obfuscatedLookup = true; } - @Inject(method = "getBaked", at = @At("RETURN")) + @Inject(method = "getGlyph", at = @At("RETURN")) private void resumeCharacterFiltering(int codePoint, CallbackInfoReturnable cir) { viaFabricPlus$obfuscatedLookup = false; } @@ -99,7 +99,7 @@ private void resumeCharacterFiltering(int codePoint, CallbackInfoReturnable original) { - final Identifier id = original.call(instance, t); + @WrapOperation(method = "createAndPopulateRegistryMap", at = @At(value = "INVOKE", target = "Lnet/minecraft/core/Registry;getKey(Ljava/lang/Object;)Lnet/minecraft/resources/ResourceLocation;"), require = 0) + private static ResourceLocation skipFootStepParticle(Registry instance, Object t, Operation original) { + final ResourceLocation id = original.call(instance, t); if (id == FootStepParticle1_12_2.ID) { return null; } else { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinLivingEntity.java index 2533f3851..738540b85 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinLivingEntity.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -36,20 +36,20 @@ @Mixin(LivingEntity.class) public abstract class MixinLivingEntity { - @Redirect(method = "tickActiveItemStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;areItemsEqual(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;)Z")) + @Redirect(method = "updatingUsingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;isSameItem(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemStack;)Z")) private boolean replaceItemStackEqualsCheck(ItemStack left, ItemStack right) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_3)) { return left == right; } else { - return ItemStack.areItemsEqual(left, right); + return ItemStack.isSameItem(left, right); } } - @Inject(method = "getPreferredEquipmentSlot", at = @At("HEAD"), cancellable = true) + @Inject(method = "getEquipmentSlotForItem", at = @At("HEAD"), cancellable = true) private void removeShieldSlotPreference(ItemStack stack, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_9_3) && stack.isOf(Items.SHIELD)) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_9_3) && stack.is(Items.SHIELD)) { cir.setReturnValue(EquipmentSlot.MAINHAND); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinPlayer.java similarity index 85% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinPlayer.java index 55ccd409d..a6207c0aa 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/MixinPlayer.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerAbilities; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.player.Abilities; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -32,14 +32,14 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity { +@Mixin(Player.class) +public abstract class MixinPlayer { @Shadow @Final - private PlayerAbilities abilities; + private Abilities abilities; - @Inject(method = "canConsume", at = @At("HEAD"), cancellable = true) + @Inject(method = "canEat", at = @At("HEAD"), cancellable = true) private void preventEatingFoodInCreative(boolean ignoreHunger, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4) && this.abilities.invulnerable) { cir.setReturnValue(false); @@ -49,7 +49,7 @@ private void preventEatingFoodInCreative(boolean ignoreHunger, CallbackInfoRetur @Inject(method = "isCreative", at = @At("HEAD"), cancellable = true) private void fixCreativeCheck(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - cir.setReturnValue(this.abilities.creativeMode); + cir.setReturnValue(this.abilities.instabuild); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractContainerMenu.java similarity index 76% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractContainerMenu.java index b134d718c..e31a4ca83 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractContainerMenu.java @@ -21,30 +21,30 @@ package com.viaversion.viafabricplus.injection.mixin.features.interaction.container_clicking; -import com.viaversion.viafabricplus.injection.access.interaction.container_clicking.IScreenHandler; +import com.viaversion.viafabricplus.injection.access.interaction.container_clicking.IAbstractContainerMenu; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.AbstractContainerMenu; 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.Redirect; -@Mixin(ScreenHandler.class) -public abstract class MixinScreenHandler implements IScreenHandler { +@Mixin(AbstractContainerMenu.class) +public abstract class MixinAbstractContainerMenu implements IAbstractContainerMenu { @Shadow - private ItemStack cursorStack; + private ItemStack carried; @Unique private short viaFabricPlus$actionId = 0; - @Redirect(method = "updateSlotStacks", at = @At(value = "FIELD", target = "Lnet/minecraft/screen/ScreenHandler;cursorStack:Lnet/minecraft/item/ItemStack;")) - private void preventUpdate(ScreenHandler instance, ItemStack value) { + @Redirect(method = "initializeContents", at = @At(value = "FIELD", target = "Lnet/minecraft/world/inventory/AbstractContainerMenu;carried:Lnet/minecraft/world/item/ItemStack;")) + private void preventUpdate(AbstractContainerMenu instance, ItemStack value) { if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_17_1)) { - this.cursorStack = value; + this.carried = value; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractFurnaceScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractFurnaceMenu.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractFurnaceScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractFurnaceMenu.java index 8d79aac21..74e920535 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractFurnaceScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinAbstractFurnaceMenu.java @@ -22,30 +22,30 @@ package com.viaversion.viafabricplus.injection.mixin.features.interaction.container_clicking; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.AbstractFurnaceScreenHandler; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.AbstractFurnaceMenu; import net.raphimc.vialegacy.api.LegacyProtocolVersion; 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.Redirect; -@Mixin(AbstractFurnaceScreenHandler.class) -public abstract class MixinAbstractFurnaceScreenHandler { +@Mixin(AbstractFurnaceMenu.class) +public abstract class MixinAbstractFurnaceMenu { @Shadow - protected abstract boolean isSmeltable(ItemStack itemStack); + protected abstract boolean canSmelt(ItemStack itemStack); @Shadow protected abstract boolean isFuel(ItemStack itemStack); - @Redirect(method = "quickMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/AbstractFurnaceScreenHandler;isSmeltable(Lnet/minecraft/item/ItemStack;)Z")) - private boolean disableShiftClickSmeltingSlot(AbstractFurnaceScreenHandler instance, ItemStack itemStack) { - return this.isSmeltable(itemStack) && ProtocolTranslator.getTargetVersion().newerThan(LegacyProtocolVersion.r1_2_1tor1_2_3); + @Redirect(method = "quickMoveStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/AbstractFurnaceMenu;canSmelt(Lnet/minecraft/world/item/ItemStack;)Z")) + private boolean disableShiftClickSmeltingSlot(AbstractFurnaceMenu instance, ItemStack itemStack) { + return this.canSmelt(itemStack) && ProtocolTranslator.getTargetVersion().newerThan(LegacyProtocolVersion.r1_2_1tor1_2_3); } - @Redirect(method = "quickMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/AbstractFurnaceScreenHandler;isFuel(Lnet/minecraft/item/ItemStack;)Z")) - private boolean disableShiftClickFuelSlot(AbstractFurnaceScreenHandler instance, ItemStack itemStack) { + @Redirect(method = "quickMoveStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/AbstractFurnaceMenu;isFuel(Lnet/minecraft/world/item/ItemStack;)Z")) + private boolean disableShiftClickFuelSlot(AbstractFurnaceMenu instance, ItemStack itemStack) { return this.isFuel(itemStack) && ProtocolTranslator.getTargetVersion().newerThan(LegacyProtocolVersion.r1_2_1tor1_2_3); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinCraftingScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinCraftingMenu.java similarity index 63% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinCraftingScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinCraftingMenu.java index eda10ee6b..bf6a6539a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinCraftingScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinCraftingMenu.java @@ -23,24 +23,24 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.AbstractCraftingScreenHandler; -import net.minecraft.screen.CraftingScreenHandler; -import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.AbstractCraftingMenu; +import net.minecraft.world.inventory.CraftingMenu; +import net.minecraft.world.inventory.MenuType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(CraftingScreenHandler.class) -public abstract class MixinCraftingScreenHandler extends AbstractCraftingScreenHandler { +@Mixin(CraftingMenu.class) +public abstract class MixinCraftingMenu extends AbstractCraftingMenu { - public MixinCraftingScreenHandler(ScreenHandlerType type, int syncId, int width, int height) { + public MixinCraftingMenu(MenuType type, int syncId, int width, int height) { super(type, syncId, width, height); } - @Redirect(method = "quickMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/CraftingScreenHandler;insertItem(Lnet/minecraft/item/ItemStack;IIZ)Z", ordinal = 1)) - private boolean noShiftClickMoveIntoCraftingTable(CraftingScreenHandler instance, ItemStack itemStack, int startIndex, int endIndex, boolean fromLast) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_4) && this.insertItem(itemStack, startIndex, endIndex, fromLast); + @Redirect(method = "quickMoveStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/CraftingMenu;moveItemStackTo(Lnet/minecraft/world/item/ItemStack;IIZ)Z", ordinal = 1)) + private boolean noShiftClickMoveIntoCraftingTable(CraftingMenu instance, ItemStack itemStack, int startIndex, int endIndex, boolean fromLast) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_4) && this.moveItemStackTo(itemStack, startIndex, endIndex, fromLast); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantMenu.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantMenu.java new file mode 100644 index 000000000..0d49977eb --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantMenu.java @@ -0,0 +1,132 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.interaction.container_clicking; + +import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.inventory.MerchantMenu; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.MerchantContainer; +import net.minecraft.world.item.trading.MerchantOffer; +import net.minecraft.world.item.trading.MerchantOffers; +import net.minecraft.world.item.trading.ItemCost; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(MerchantMenu.class) +public abstract class MixinMerchantMenu extends AbstractContainerMenu { + + @Shadow + @Final + private MerchantContainer tradeContainer; + + @Shadow + public abstract MerchantOffers getOffers(); + + protected MixinMerchantMenu(@Nullable MenuType type, int syncId) { + super(type, syncId); + } + + @Inject(method = "tryMoveItems", at = @At("HEAD"), cancellable = true) + private void onSwitchTo(int recipeId, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { + ci.cancel(); + + if (recipeId >= this.getOffers().size()) { + return; + } + + final MultiPlayerGameMode interactionManager = Minecraft.getInstance().gameMode; + final LocalPlayer player = Minecraft.getInstance().player; + + // move 1st input slot to inventory + if (!this.tradeContainer.getItem(0).isEmpty()) { + final int count = this.tradeContainer.getItem(0).getCount(); + interactionManager.handleInventoryMouseClick(containerId, 0, 0, ClickType.QUICK_MOVE, player); + if (count == this.tradeContainer.getItem(0).getCount()) { + return; + } + } + + // move 2nd input slot to inventory + if (!this.tradeContainer.getItem(1).isEmpty()) { + final int count = this.tradeContainer.getItem(1).getCount(); + interactionManager.handleInventoryMouseClick(containerId, 1, 0, ClickType.QUICK_MOVE, player); + if (count == this.tradeContainer.getItem(1).getCount()) { + return; + } + } + + // refill the slots + if (this.tradeContainer.getItem(0).isEmpty() && this.tradeContainer.getItem(1).isEmpty()) { + final MerchantOffer tradeOffer = this.getOffers().get(recipeId); + this.viaFabricPlus$autofill(interactionManager, player, 0, tradeOffer.getItemCostA()); + tradeOffer.getItemCostB().ifPresent(item -> this.viaFabricPlus$autofill(interactionManager, player, 1, item)); + } + } + } + + @Inject(method = "canTakeItemForPickAll", at = @At("HEAD"), cancellable = true) + private void modifyCanInsertIntoSlot(ItemStack stack, Slot slot, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { + cir.setReturnValue(true); + } + } + + @Unique + private void viaFabricPlus$autofill(MultiPlayerGameMode interactionManager, LocalPlayer player, int inputSlot, ItemCost stackNeeded) { + int slot; + for (slot = 3; slot < 39; slot++) { + final ItemStack itemStack = this.slots.get(slot).getItem(); + if (!itemStack.isEmpty() && stackNeeded.test(itemStack)) { + final ItemStack itemStack2 = this.tradeContainer.getItem(inputSlot); + if (itemStack2.isEmpty() || ItemStack.isSameItemSameComponents(itemStack, itemStack2)) { + break; + } + } + } + if (slot == 39) { + return; + } + + final boolean wasHoldingItem = !player.containerMenu.getCarried().isEmpty(); + interactionManager.handleInventoryMouseClick(containerId, slot, 0, ClickType.PICKUP, player); + interactionManager.handleInventoryMouseClick(containerId, slot, 0, ClickType.PICKUP_ALL, player); + interactionManager.handleInventoryMouseClick(containerId, inputSlot, 0, ClickType.PICKUP, player); + if (wasHoldingItem) interactionManager.handleInventoryMouseClick(containerId, slot, 0, ClickType.PICKUP, player); + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantScreenHandler.java deleted file mode 100644 index 6d5e7a38d..000000000 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMerchantScreenHandler.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.injection.mixin.features.interaction.container_clicking; - -import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerInteractionManager; -import net.minecraft.item.ItemStack; -import net.minecraft.screen.MerchantScreenHandler; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.screen.slot.Slot; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.village.MerchantInventory; -import net.minecraft.village.TradeOffer; -import net.minecraft.village.TradeOfferList; -import net.minecraft.village.TradedItem; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(MerchantScreenHandler.class) -public abstract class MixinMerchantScreenHandler extends ScreenHandler { - - @Shadow - @Final - private MerchantInventory merchantInventory; - - @Shadow - public abstract TradeOfferList getRecipes(); - - protected MixinMerchantScreenHandler(@Nullable ScreenHandlerType type, int syncId) { - super(type, syncId); - } - - @Inject(method = "switchTo", at = @At("HEAD"), cancellable = true) - private void onSwitchTo(int recipeId, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - ci.cancel(); - - if (recipeId >= this.getRecipes().size()) { - return; - } - - final ClientPlayerInteractionManager interactionManager = MinecraftClient.getInstance().interactionManager; - final ClientPlayerEntity player = MinecraftClient.getInstance().player; - - // move 1st input slot to inventory - if (!this.merchantInventory.getStack(0).isEmpty()) { - final int count = this.merchantInventory.getStack(0).getCount(); - interactionManager.clickSlot(syncId, 0, 0, SlotActionType.QUICK_MOVE, player); - if (count == this.merchantInventory.getStack(0).getCount()) { - return; - } - } - - // move 2nd input slot to inventory - if (!this.merchantInventory.getStack(1).isEmpty()) { - final int count = this.merchantInventory.getStack(1).getCount(); - interactionManager.clickSlot(syncId, 1, 0, SlotActionType.QUICK_MOVE, player); - if (count == this.merchantInventory.getStack(1).getCount()) { - return; - } - } - - // refill the slots - if (this.merchantInventory.getStack(0).isEmpty() && this.merchantInventory.getStack(1).isEmpty()) { - final TradeOffer tradeOffer = this.getRecipes().get(recipeId); - this.viaFabricPlus$autofill(interactionManager, player, 0, tradeOffer.getFirstBuyItem()); - tradeOffer.getSecondBuyItem().ifPresent(item -> this.viaFabricPlus$autofill(interactionManager, player, 1, item)); - } - } - } - - @Inject(method = "canInsertIntoSlot", at = @At("HEAD"), cancellable = true) - private void modifyCanInsertIntoSlot(ItemStack stack, Slot slot, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - cir.setReturnValue(true); - } - } - - @Unique - private void viaFabricPlus$autofill(ClientPlayerInteractionManager interactionManager, ClientPlayerEntity player, int inputSlot, TradedItem stackNeeded) { - int slot; - for (slot = 3; slot < 39; slot++) { - final ItemStack itemStack = this.slots.get(slot).getStack(); - if (!itemStack.isEmpty() && stackNeeded.matches(itemStack)) { - final ItemStack itemStack2 = this.merchantInventory.getStack(inputSlot); - if (itemStack2.isEmpty() || ItemStack.areItemsAndComponentsEqual(itemStack, itemStack2)) { - break; - } - } - } - if (slot == 39) { - return; - } - - final boolean wasHoldingItem = !player.currentScreenHandler.getCursorStack().isEmpty(); - interactionManager.clickSlot(syncId, slot, 0, SlotActionType.PICKUP, player); - interactionManager.clickSlot(syncId, slot, 0, SlotActionType.PICKUP_ALL, player); - interactionManager.clickSlot(syncId, inputSlot, 0, SlotActionType.PICKUP, player); - if (wasHoldingItem) interactionManager.clickSlot(syncId, slot, 0, SlotActionType.PICKUP, player); - } - -} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinClientPlayerInteractionManager.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMultiPlayerGameMode.java similarity index 60% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinClientPlayerInteractionManager.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMultiPlayerGameMode.java index ccb8ff0af..e4e52ade9 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinClientPlayerInteractionManager.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/container_clicking/MixinMultiPlayerGameMode.java @@ -22,7 +22,7 @@ package com.viaversion.viafabricplus.injection.mixin.features.interaction.container_clicking; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import com.viaversion.viafabricplus.injection.access.interaction.container_clicking.IScreenHandler; +import com.viaversion.viafabricplus.injection.access.interaction.container_clicking.IAbstractContainerMenu; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.translator.ItemTranslator; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; @@ -35,15 +35,15 @@ import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.Protocol1_21_4To1_21_5; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerInteractionManager; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.ClickSlotC2SPacket; -import net.minecraft.screen.slot.SlotActionType; -import net.minecraft.screen.sync.ItemStackHash; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundContainerClickPacket; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.network.HashedStack; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -55,12 +55,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @SuppressWarnings("DataFlowIssue") -@Mixin(ClientPlayerInteractionManager.class) -public abstract class MixinClientPlayerInteractionManager { +@Mixin(MultiPlayerGameMode.class) +public abstract class MixinMultiPlayerGameMode { @Shadow @Final - private MinecraftClient client; + private Minecraft minecraft; @Unique private ItemStack viaFabricPlus$oldCursorStack; @@ -68,15 +68,15 @@ public abstract class MixinClientPlayerInteractionManager { @Unique private List viaFabricPlus$oldItems; - @ModifyVariable(method = "clickSlot", at = @At(value = "STORE"), ordinal = 0) + @ModifyVariable(method = "handleInventoryMouseClick", at = @At(value = "STORE"), ordinal = 0) private List captureOldItems(List oldItems) { - viaFabricPlus$oldCursorStack = client.player.currentScreenHandler.getCursorStack().copy(); + viaFabricPlus$oldCursorStack = minecraft.player.containerMenu.getCarried().copy(); return this.viaFabricPlus$oldItems = oldItems; } - @WrapWithCondition(method = "clickSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V")) - private boolean handleWindowClick(ClientPlayNetworkHandler instance, Packet packet) { - final ClickSlotC2SPacket clickSlotPacket = (ClickSlotC2SPacket) packet; + @WrapWithCondition(method = "handleInventoryMouseClick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V")) + private boolean handleWindowClick(ClientPacketListener instance, Packet packet) { + final ServerboundContainerClickPacket clickSlotPacket = (ServerboundContainerClickPacket) packet; if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)) { // Contains item before modification and not the actual item @@ -91,57 +91,57 @@ private boolean handleWindowClick(ClientPlayNetworkHandler instance, Packet p return true; } - @Inject(method = "clickSlot", at = @At("HEAD"), cancellable = true) - private void removeClickActions(int syncId, int slotId, int button, SlotActionType actionType, PlayerEntity player, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_5tob1_5_2) && !actionType.equals(SlotActionType.PICKUP)) { + @Inject(method = "handleInventoryMouseClick", at = @At("HEAD"), cancellable = true) + private void removeClickActions(int syncId, int slotId, int button, ClickType actionType, Player player, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_5tob1_5_2) && !actionType.equals(ClickType.PICKUP)) { ci.cancel(); - } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7) && !actionType.equals(SlotActionType.PICKUP) && !actionType.equals(SlotActionType.QUICK_MOVE) && !actionType.equals(SlotActionType.SWAP) && !actionType.equals(SlotActionType.CLONE)) { + } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7) && !actionType.equals(ClickType.PICKUP) && !actionType.equals(ClickType.QUICK_MOVE) && !actionType.equals(ClickType.SWAP) && !actionType.equals(ClickType.CLONE)) { ci.cancel(); } - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && actionType == SlotActionType.SWAP && button == 40) { // Pressing 'F' in inventory + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && actionType == ClickType.SWAP && button == 40) { // Pressing 'F' in inventory ci.cancel(); } } @Unique - private void viaFabricPlus$clickSlot1_21_4(final ClickSlotC2SPacket packet) { + private void viaFabricPlus$clickSlot1_21_4(final ServerboundContainerClickPacket packet) { final PacketWrapper containerClick = PacketWrapper.create(ServerboundPackets1_21_4.CONTAINER_CLICK, ProtocolTranslator.getPlayNetworkUserConnection()); - containerClick.write(Types.VAR_INT, packet.syncId()); - containerClick.write(Types.VAR_INT, packet.revision()); - containerClick.write(Types.SHORT, packet.slot()); - containerClick.write(Types.BYTE, packet.button()); - containerClick.write(Types.VAR_INT, packet.actionType().getIndex()); + containerClick.write(Types.VAR_INT, packet.containerId()); + containerClick.write(Types.VAR_INT, packet.stateId()); + containerClick.write(Types.SHORT, packet.slotNum()); + containerClick.write(Types.BYTE, packet.buttonNum()); + containerClick.write(Types.VAR_INT, packet.clickType().id()); - final Int2ObjectMap modifiedStacks = packet.modifiedStacks(); + final Int2ObjectMap modifiedStacks = packet.changedSlots(); containerClick.write(Types.VAR_INT, modifiedStacks.size()); - for (Int2ObjectMap.Entry entry : modifiedStacks.int2ObjectEntrySet()) { - final ItemStack itemStack = client.player.currentScreenHandler.slots.get(entry.getIntKey()).getStack(); + for (Int2ObjectMap.Entry entry : modifiedStacks.int2ObjectEntrySet()) { + final ItemStack itemStack = minecraft.player.containerMenu.slots.get(entry.getIntKey()).getItem(); containerClick.write(Types.SHORT, (short) entry.getIntKey()); containerClick.write(VersionedTypes.V1_21_4.item, ItemTranslator.mcToVia(itemStack, ProtocolVersion.v1_21_4)); } - final ItemStack cursorStack = client.player.currentScreenHandler.getCursorStack(); + final ItemStack cursorStack = minecraft.player.containerMenu.getCarried(); containerClick.write(VersionedTypes.V1_21_4.item, ItemTranslator.mcToVia(cursorStack, ProtocolVersion.v1_21_4)); containerClick.scheduleSendToServer(Protocol1_21_4To1_21_5.class); } @Unique - private void viaFabricPlus$clickSlot1_16_5(final ClickSlotC2SPacket packet) { + private void viaFabricPlus$clickSlot1_16_5(final ServerboundContainerClickPacket packet) { ItemStack slotItemBeforeModification; - if (this.viaFabricPlus$shouldBeEmpty(packet.actionType(), packet.slot())) { + if (this.viaFabricPlus$shouldBeEmpty(packet.clickType(), packet.slotNum())) { slotItemBeforeModification = ItemStack.EMPTY; - } else if (packet.slot() < 0 || packet.slot() >= viaFabricPlus$oldItems.size()) { + } else if (packet.slotNum() < 0 || packet.slotNum() >= viaFabricPlus$oldItems.size()) { slotItemBeforeModification = viaFabricPlus$oldCursorStack; } else { - slotItemBeforeModification = viaFabricPlus$oldItems.get(packet.slot()); + slotItemBeforeModification = viaFabricPlus$oldItems.get(packet.slotNum()); } final PacketWrapper containerClick = PacketWrapper.create(ServerboundPackets1_16_2.CONTAINER_CLICK, ProtocolTranslator.getPlayNetworkUserConnection()); - containerClick.write(Types.BYTE, (byte) packet.syncId()); - containerClick.write(Types.SHORT, packet.slot()); - containerClick.write(Types.BYTE, packet.button()); - containerClick.write(Types.SHORT, ((IScreenHandler) client.player.currentScreenHandler).viaFabricPlus$incrementAndGetActionId()); - containerClick.write(Types.VAR_INT, packet.actionType().ordinal()); + containerClick.write(Types.BYTE, (byte) packet.containerId()); + containerClick.write(Types.SHORT, packet.slotNum()); + containerClick.write(Types.BYTE, packet.buttonNum()); + containerClick.write(Types.SHORT, ((IAbstractContainerMenu) minecraft.player.containerMenu).viaFabricPlus$incrementAndGetActionId()); + containerClick.write(Types.VAR_INT, packet.clickType().ordinal()); containerClick.write(Types.ITEM1_13_2, ItemTranslator.mcToVia(slotItemBeforeModification, ProtocolVersion.v1_16_4)); containerClick.scheduleSendToServer(Protocol1_16_4To1_17.class); @@ -150,19 +150,19 @@ private void removeClickActions(int syncId, int slotId, int button, SlotActionTy } @Unique - private boolean viaFabricPlus$shouldBeEmpty(final SlotActionType type, final int slot) { + private boolean viaFabricPlus$shouldBeEmpty(final ClickType type, final int slot) { // quick craft always uses empty stack for verification - if (type == SlotActionType.QUICK_CRAFT) return true; + if (type == ClickType.QUICK_CRAFT) return true; // Special case: throw always uses empty stack for verification - if (type == SlotActionType.THROW) return true; + if (type == ClickType.THROW) return true; // quick move always uses empty stack for verification since 1.12 - if (type == SlotActionType.QUICK_MOVE && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_11_1)) + if (type == ClickType.QUICK_MOVE && ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_11_1)) return true; // pickup with slot -999 (outside window) to throw items always uses empty stack for verification - return type == SlotActionType.PICKUP && slot == -999; + return type == ClickType.PICKUP && slot == -999; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinItemCooldownManager.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinItemCooldowns.java similarity index 86% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinItemCooldownManager.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinItemCooldowns.java index 2742fb55a..46b9224bd 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinItemCooldownManager.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinItemCooldowns.java @@ -23,16 +23,16 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.ItemCooldownManager; +import net.minecraft.world.item.ItemCooldowns; 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(value = ItemCooldownManager.class) -public abstract class MixinItemCooldownManager { +@Mixin(value = ItemCooldowns.class) +public abstract class MixinItemCooldowns { - @Inject(method = "set(Lnet/minecraft/util/Identifier;I)V", at = @At("HEAD"), cancellable = true) + @Inject(method = "addCooldown(Lnet/minecraft/resources/ResourceLocation;I)V", at = @At("HEAD"), cancellable = true) private void dontSetCooldown(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { ci.cancel(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinMinecraft.java similarity index 73% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinMinecraft.java index 35ab1ec38..a510c4ca7 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinMinecraft.java @@ -25,8 +25,8 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -34,32 +34,32 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(MinecraftClient.class) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { @Shadow - protected int attackCooldown; + protected int missTime; - @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;attackCooldown:I", ordinal = 1)) - private int moveCooldownIncrement(MinecraftClient instance) { + @Redirect(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;missTime:I", ordinal = 1)) + private int moveCooldownIncrement(Minecraft instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { return 0; } else { - return attackCooldown; + return missTime; } } - @Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;handleInputEvents()V")) + @Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;handleKeybinds()V")) private void moveCooldownIncrement(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - if (this.attackCooldown > 0) { - --this.attackCooldown; + if (this.missTime > 0) { + --this.missTime; } } } - @WrapOperation(method = "doAttack", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;hasLimitedAttackSpeed()Z", ordinal = 1)) - private boolean removeHitPenalty(ClientPlayerInteractionManager instance, Operation original) { + @WrapOperation(method = "startAttack", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;hasMissTime()Z", ordinal = 1)) + private boolean removeHitPenalty(MultiPlayerGameMode instance, Operation original) { // In <=1.7 this code is not inside the MISS case but in the BLOCK case causing it to never be called return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_7_6) && original.call(instance); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinPlayer.java similarity index 88% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinPlayer.java index 1749bc61b..cd6c8026c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/cooldown/MixinPlayer.java @@ -23,16 +23,16 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.player.Player; 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.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity { +@Mixin(Player.class) +public abstract class MixinPlayer { - @Inject(method = "getAttackCooldownProgress", at = @At("HEAD"), cancellable = true) + @Inject(method = "getAttackStrengthScale", at = @At("HEAD"), cancellable = true) private void removeAttackCooldown(CallbackInfoReturnable ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { ci.setReturnValue(1F); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinClientPlayerInteractionManager.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinMultiPlayerGameMode.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinClientPlayerInteractionManager.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinMultiPlayerGameMode.java index b10e9100a..ccd42dc38 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinClientPlayerInteractionManager.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinMultiPlayerGameMode.java @@ -22,15 +22,15 @@ package com.viaversion.viafabricplus.injection.mixin.features.interaction.r1_18_2_block_ack_emulation; import com.viaversion.viafabricplus.features.interaction.r1_18_2_block_ack_emulation.ClientPlayerInteractionManager1_18_2; -import com.viaversion.viafabricplus.injection.access.interaction.r1_18_2_block_ack_emulation.IClientPlayerInteractionManager; +import com.viaversion.viafabricplus.injection.access.interaction.r1_18_2_block_ack_emulation.IMultiPlayerGameMode; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.ClientPlayerInteractionManager; -import net.minecraft.client.network.SequencedPacketCreator; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.client.multiplayer.prediction.PredictiveAction; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -38,25 +38,25 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayerInteractionManager.class) -public abstract class MixinClientPlayerInteractionManager implements IClientPlayerInteractionManager { +@Mixin(MultiPlayerGameMode.class) +public abstract class MixinMultiPlayerGameMode implements IMultiPlayerGameMode { @Unique private final ClientPlayerInteractionManager1_18_2 viaFabricPlus$1_18_2InteractionManager = new ClientPlayerInteractionManager1_18_2(); - @Inject(method = "sendSequencedPacket", at = @At("HEAD")) - private void trackPlayerAction(ClientWorld world, SequencedPacketCreator packetCreator, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_14_4, ProtocolVersion.v1_18_2) && packetCreator instanceof PlayerActionC2SPacket playerActionC2SPacket) { + @Inject(method = "startPrediction", at = @At("HEAD")) + private void trackPlayerAction(ClientLevel world, PredictiveAction packetCreator, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_14_4, ProtocolVersion.v1_18_2) && packetCreator instanceof ServerboundPlayerActionPacket playerActionC2SPacket) { this.viaFabricPlus$1_18_2InteractionManager.trackPlayerAction(playerActionC2SPacket.getAction(), playerActionC2SPacket.getPos()); } } - @Redirect(method = {"attackBlock", "cancelBlockBreaking"}, at = @At(value = "NEW", target = "(Lnet/minecraft/network/packet/c2s/play/PlayerActionC2SPacket$Action;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/Direction;)Lnet/minecraft/network/packet/c2s/play/PlayerActionC2SPacket;")) - private PlayerActionC2SPacket trackPlayerAction(PlayerActionC2SPacket.Action action, BlockPos pos, Direction direction) { + @Redirect(method = {"startDestroyBlock", "stopDestroyBlock"}, at = @At(value = "NEW", target = "(Lnet/minecraft/network/protocol/game/ServerboundPlayerActionPacket$Action;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Lnet/minecraft/network/protocol/game/ServerboundPlayerActionPacket;")) + private ServerboundPlayerActionPacket trackPlayerAction(ServerboundPlayerActionPacket.Action action, BlockPos pos, Direction direction) { if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_14_4, ProtocolVersion.v1_18_2)) { this.viaFabricPlus$1_18_2InteractionManager.trackPlayerAction(action, pos); } - return new PlayerActionC2SPacket(action, pos, direction); + return new ServerboundPlayerActionPacket(action, pos, direction); } @Override @@ -64,4 +64,4 @@ private PlayerActionC2SPacket trackPlayerAction(PlayerActionC2SPacket.Action act return this.viaFabricPlus$1_18_2InteractionManager; } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinWorldPacketRewriter1_19.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinWorldPacketRewriter1_19.java index faa79e07f..53b64efef 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinWorldPacketRewriter1_19.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/r1_18_2_block_ack_emulation/MixinWorldPacketRewriter1_19.java @@ -22,7 +22,7 @@ package com.viaversion.viafabricplus.injection.mixin.features.interaction.r1_18_2_block_ack_emulation; import com.viaversion.viafabricplus.base.sync_tasks.SyncTasks; -import com.viaversion.viafabricplus.injection.access.interaction.r1_18_2_block_ack_emulation.IClientPlayerInteractionManager; +import com.viaversion.viafabricplus.injection.access.interaction.r1_18_2_block_ack_emulation.IMultiPlayerGameMode; import com.viaversion.viafabricplus.protocoltranslator.translator.BlockStateTranslator; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.type.Types; @@ -30,10 +30,10 @@ import com.viaversion.viaversion.protocols.v1_18_2to1_19.Protocol1_18_2To1_19; import com.viaversion.viaversion.protocols.v1_18_2to1_19.packet.ClientboundPackets1_19; import com.viaversion.viaversion.protocols.v1_18_2to1_19.rewriter.WorldPacketRewriter1_19; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; -import net.minecraft.util.math.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.client.Minecraft; +import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; +import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -50,10 +50,10 @@ private static void handleLegacyAcknowledgePlayerDigging(Protocol1_18_2To1_19 in try { final BlockPos pos = data.readBlockPos(); final BlockState blockState = BlockStateTranslator.via1_18_2toMc(data.readVarInt()); - final PlayerActionC2SPacket.Action action = data.readEnumConstant(PlayerActionC2SPacket.Action.class); + final ServerboundPlayerActionPacket.Action action = data.readEnum(ServerboundPlayerActionPacket.Action.class); final boolean allGood = data.readBoolean(); - final IClientPlayerInteractionManager mixinInteractionManager = (IClientPlayerInteractionManager) MinecraftClient.getInstance().interactionManager; + final IMultiPlayerGameMode mixinInteractionManager = (IMultiPlayerGameMode) Minecraft.getInstance().gameMode; mixinInteractionManager.viaFabricPlus$get1_18_2InteractionManager().handleBlockBreakAck(pos, blockState, action, allGood); } catch (Throwable t) { throw new RuntimeException("Failed to handle BlockBreakAck packet data", t); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/MixinBrewingStandScreenHandler_FuelSlot.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/MixinBrewingStandMenu_FuelSlot.java similarity index 79% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/MixinBrewingStandScreenHandler_FuelSlot.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/MixinBrewingStandMenu_FuelSlot.java index 561b633cf..54b52996c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/MixinBrewingStandScreenHandler_FuelSlot.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_fuel_slot/MixinBrewingStandMenu_FuelSlot.java @@ -23,21 +23,21 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.inventory.Inventory; -import net.minecraft.screen.slot.Slot; +import net.minecraft.world.Container; +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.CallbackInfoReturnable; -@Mixin(targets = "net.minecraft.screen.BrewingStandScreenHandler$FuelSlot") -public abstract class MixinBrewingStandScreenHandler_FuelSlot extends Slot { +@Mixin(targets = "net.minecraft.world.inventory.BrewingStandMenu$FuelSlot") +public abstract class MixinBrewingStandMenu_FuelSlot extends Slot { - public MixinBrewingStandScreenHandler_FuelSlot(Inventory inventory, int index, int x, int y) { + public MixinBrewingStandMenu_FuelSlot(Container inventory, int index, int x, int y) { super(inventory, index, x, y); } - @Inject(method = "matches(Lnet/minecraft/item/ItemStack;)Z", at = @At("HEAD"), cancellable = true) + @Inject(method = "mayPlaceItem(Lnet/minecraft/world/item/ItemStack;)Z", at = @At("HEAD"), cancellable = true) private static void removeFuelSlot(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(false); @@ -45,7 +45,7 @@ private static void removeFuelSlot(CallbackInfoReturnable cir) { } @Override - public boolean isEnabled() { + public boolean isActive() { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_8); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/MixinPlayerScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/MixinInventoryMenu.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/MixinPlayerScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/MixinInventoryMenu.java index af4da5e07..b50fb4c8a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/MixinPlayerScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/remove_offhand_slot/MixinInventoryMenu.java @@ -23,26 +23,26 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.screen.AbstractCraftingScreenHandler; -import net.minecraft.screen.PlayerScreenHandler; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.screen.slot.Slot; +import net.minecraft.world.inventory.AbstractCraftingMenu; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.inventory.MenuType; +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.Redirect; import org.spongepowered.asm.mixin.injection.Slice; -@Mixin(PlayerScreenHandler.class) -public abstract class MixinPlayerScreenHandler extends AbstractCraftingScreenHandler { +@Mixin(InventoryMenu.class) +public abstract class MixinInventoryMenu extends AbstractCraftingMenu { - public MixinPlayerScreenHandler(ScreenHandlerType type, int syncId, int width, int height) { + public MixinInventoryMenu(MenuType type, int syncId, int width, int height) { super(type, syncId, width, height); } @Redirect(method = "", - slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/screen/PlayerScreenHandler$1;(Lnet/minecraft/screen/PlayerScreenHandler;Lnet/minecraft/inventory/Inventory;IIILnet/minecraft/entity/player/PlayerEntity;)V")), - at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/PlayerScreenHandler;addSlot(Lnet/minecraft/screen/slot/Slot;)Lnet/minecraft/screen/slot/Slot;", ordinal = 0)) - private Slot removeOffhandSlot(PlayerScreenHandler screenHandler, Slot slot) { + slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/InventoryMenu$1;(Lnet/minecraft/world/inventory/InventoryMenu;Lnet/minecraft/world/Container;IIILnet/minecraft/world/entity/player/Player;)V")), + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/InventoryMenu;addSlot(Lnet/minecraft/world/inventory/Slot;)Lnet/minecraft/world/inventory/Slot;", ordinal = 0)) + private Slot removeOffhandSlot(InventoryMenu screenHandler, Slot slot) { return ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) ? null : addSlot(slot); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinItemPlacementContext.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinBlockPlaceContext.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinItemPlacementContext.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinBlockPlaceContext.java index c8df3ec03..d6dc705f8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinItemPlacementContext.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinBlockPlaceContext.java @@ -24,34 +24,34 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.Blocks; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; 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.CallbackInfoReturnable; -@Mixin(ItemPlacementContext.class) -public abstract class MixinItemPlacementContext extends ItemUsageContext { +@Mixin(BlockPlaceContext.class) +public abstract class MixinBlockPlaceContext extends UseOnContext { - public MixinItemPlacementContext(PlayerEntity player, Hand hand, BlockHitResult hit) { + public MixinBlockPlaceContext(Player player, InteractionHand hand, BlockHitResult hit) { super(player, hand, hit); } - @Inject(method = "getPlayerLookDirection", at = @At("HEAD"), cancellable = true) + @Inject(method = "getNearestLookingDirection", at = @At("HEAD"), cancellable = true) private void getPlayerLookDirection1_12_2(CallbackInfoReturnable cir) { - final ItemPlacementContext self = (ItemPlacementContext) (Object) this; - final PlayerEntity player = self.getPlayer(); + final BlockPlaceContext self = (BlockPlaceContext) (Object) this; + final Player player = self.getPlayer(); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - final BlockPos placementPos = self.getBlockPos(); + final BlockPos placementPos = self.getClickedPos(); final double blockPosCenterFactor = ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_10) ? 0.5 : 0; if (Math.abs(player.getX() - (placementPos.getX() + blockPosCenterFactor)) < 2 && Math.abs(player.getZ() - (placementPos.getZ() + blockPosCenterFactor)) < 2) { @@ -68,14 +68,14 @@ private void getPlayerLookDirection1_12_2(CallbackInfoReturnable cir) } } - cir.setReturnValue(player.getHorizontalFacing()); + cir.setReturnValue(player.getDirection()); } } @Inject(method = "canPlace", at = @At("RETURN"), cancellable = true) private void canPlace1_12_2(CallbackInfoReturnable cir) { if (!cir.getReturnValueZ() && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(ViaFabricPlusMappingDataLoader.getBlockMaterial(this.getWorld().getBlockState(this.getBlockPos()).getBlock()).equals("decoration") && Block.getBlockFromItem(this.getStack().getItem()).equals(Blocks.ANVIL)); + cir.setReturnValue(ViaFabricPlusMappingDataLoader.getBlockMaterial(this.getLevel().getBlockState(this.getClickedPos()).getBlock()).equals("decoration") && Block.byItem(this.getItemInHand().getItem()).equals(Blocks.ANVIL)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinClientPlayerInteractionManager.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinClientPlayerInteractionManager.java deleted file mode 100644 index ae7afe344..000000000 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinClientPlayerInteractionManager.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.injection.mixin.features.interaction.replace_block_item_use_logic; - -import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.features.interaction.replace_block_placement_logic.ActionResultException1_12_2; -import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import com.viaversion.viafabricplus.protocoltranslator.impl.provider.viaversion.ViaFabricPlusHandItemProvider; -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import java.util.Objects; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.SnowBlock; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerInteractionManager; -import net.minecraft.client.network.SequencedPacketCreator; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket; -import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.GameMode; -import net.minecraft.world.World; -import org.apache.commons.lang3.mutable.MutableObject; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -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.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@SuppressWarnings("DataFlowIssue") -@Mixin(ClientPlayerInteractionManager.class) -public abstract class MixinClientPlayerInteractionManager { - - @Shadow - @Final - private MinecraftClient client; - - @Shadow - protected abstract ActionResult interactBlockInternal(ClientPlayerEntity player, Hand hand, BlockHitResult hitResult); - - @Shadow - @Final - private ClientPlayNetworkHandler networkHandler; - - @Shadow - private BlockPos currentBreakingPos; - - @Shadow - private float currentBreakingProgress; - - @Shadow - protected abstract void sendSequencedPacket(ClientWorld world, SequencedPacketCreator packetCreator); - - @Shadow - private GameMode gameMode; - - @Redirect(method = "interactBlockInternal", at = @At(value = "FIELD", target = "Lnet/minecraft/util/ActionResult;CONSUME:Lnet/minecraft/util/ActionResult$Success;")) - private ActionResult.Success changeSpectatorAction() { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - return ActionResult.SUCCESS; - } else { - return ActionResult.CONSUME; - } - } - - @Inject(method = "interactItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;syncSelectedSlot()V", shift = At.Shift.AFTER)) - private void sendPlayerPosPacket(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_17, ProtocolVersion.v1_20_5)) { - this.networkHandler.sendPacket(new PlayerMoveC2SPacket.Full(player.getX(), player.getY(), player.getZ(), player.getYaw(), player.getPitch(), player.isOnGround(), player.horizontalCollision)); - } - } - - @Inject(method = "getBlockBreakingProgress", at = @At("HEAD"), cancellable = true) - private void changeCalculation(CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { - cir.setReturnValue((int) (this.currentBreakingProgress * 10.0F) - 1); - } - } - - @Redirect(method = {"method_41936", "method_41935"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;breakBlock(Lnet/minecraft/util/math/BlockPos;)Z")) - private boolean checkFireBlock(ClientPlayerInteractionManager instance, BlockPos pos, @Local(argsOnly = true) Direction direction) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { - return !this.viaFabricPlus$extinguishFire(pos, direction) && instance.breakBlock(pos); - } else { - return instance.breakBlock(pos); - } - } - - @Inject(method = "breakBlock", at = @At("TAIL")) - private void resetBlockBreaking(BlockPos pos, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_3)) { - this.currentBreakingPos = new BlockPos(this.currentBreakingPos.getX(), -1, this.currentBreakingPos.getZ()); - } - } - - @Inject(method = "interactBlockInternal", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isEmpty()Z", ordinal = 2)) - private void interactBlock1_12_2(ClientPlayerEntity player, Hand hand, BlockHitResult hitResult, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - final ItemStack itemStack = player.getStackInHand(hand); - BlockHitResult checkHitResult = hitResult; - if (itemStack.getItem() instanceof BlockItem) { - final BlockState clickedBlock = this.client.world.getBlockState(hitResult.getBlockPos()); - if (clickedBlock.getBlock().equals(Blocks.SNOW)) { - if (clickedBlock.get(SnowBlock.LAYERS) == 1) { - checkHitResult = hitResult.withSide(Direction.UP); - } - } - final ItemUsageContext itemUsageContext = new ItemUsageContext(player, hand, checkHitResult); - final ItemPlacementContext itemPlacementContext = new ItemPlacementContext(itemUsageContext); - if (!itemPlacementContext.canPlace() || ((BlockItem) itemPlacementContext.getStack().getItem()).getPlacementState(itemPlacementContext) == null) { - throw new ActionResultException1_12_2(ActionResult.PASS); - } - } - - this.networkHandler.sendPacket(new PlayerInteractBlockC2SPacket(hand, hitResult, 0)); - if (itemStack.isEmpty()) { - throw new ActionResultException1_12_2(ActionResult.PASS); - } - final ItemUsageContext itemUsageContext = new ItemUsageContext(player, hand, checkHitResult); - ActionResult actionResult; - if (this.gameMode.isCreative()) { - final int count = itemStack.getCount(); - actionResult = itemStack.useOnBlock(itemUsageContext); - itemStack.setCount(count); - } else { - actionResult = itemStack.useOnBlock(itemUsageContext); - } - if (!actionResult.isAccepted()) { - actionResult = ActionResult.PASS; // In <= 1.12.2 FAIL is the same as PASS - } - throw new ActionResultException1_12_2(actionResult); - } - } - - @Inject(method = "interactItem", at = @At("HEAD"), cancellable = true) - private void cancelOffHandItemInteract(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && !Hand.MAIN_HAND.equals(hand)) { - cir.setReturnValue(ActionResult.PASS); - } - } - - @Inject(method = "interactBlock", at = @At("HEAD"), cancellable = true) - private void cancelOffHandBlockPlace(ClientPlayerEntity player, Hand hand, BlockHitResult hitResult, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && !Hand.MAIN_HAND.equals(hand)) { - cir.setReturnValue(ActionResult.PASS); - } - } - - @Redirect(method = "method_41929", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;use(Lnet/minecraft/world/World;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;")) - private ActionResult eitherSuccessOrPass(ItemStack instance, World world, PlayerEntity user, Hand hand, @Local ItemStack itemStack) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - final int count = instance.getCount(); - - final ActionResult actionResult = instance.use(world, user, hand); - final ItemStack output; - if (actionResult instanceof ActionResult.Success success) { - output = Objects.requireNonNullElseGet(success.getNewHandStack(), () -> user.getStackInHand(hand)); - } else { - output = user.getStackInHand(hand); - } - - // In <= 1.8, ActionResult weren't a thing and interactItem simply returned either true or false - // depending on if the input and output item are equal or not - final boolean accepted = !output.isEmpty() && (output != itemStack || output.getCount() != count); - if (actionResult.isAccepted() == accepted) { - return actionResult; - } else { - return accepted ? ActionResult.SUCCESS.withNewHandStack(output) : ActionResult.PASS; - } - } else { - return instance.use(world, user, hand); - } - } - - @Inject(method = "method_41929", at = @At("HEAD")) - private void trackLastUsedItem(Hand hand, PlayerEntity playerEntity, MutableObject mutableObject, int sequence, CallbackInfoReturnable> cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - ViaFabricPlusHandItemProvider.lastUsedItem = playerEntity.getStackInHand(hand).copy(); - } - } - - /** - * @author RK_01 - * @reason Block place fix - */ - @Overwrite - private Packet method_41933(MutableObject mutableObject, ClientPlayerEntity clientPlayerEntity, Hand hand, BlockHitResult blockHitResult, int sequence) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - ViaFabricPlusHandItemProvider.lastUsedItem = clientPlayerEntity.getStackInHand(hand).copy(); - } - try { - mutableObject.setValue(this.interactBlockInternal(clientPlayerEntity, hand, blockHitResult)); - return new PlayerInteractBlockC2SPacket(hand, blockHitResult, sequence); - } catch (ActionResultException1_12_2 e) { - mutableObject.setValue(e.getActionResult()); - throw e; - } - } - - @Redirect(method = "interactBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;sendSequencedPacket(Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/client/network/SequencedPacketCreator;)V")) - private void catchPacketCancelException(ClientPlayerInteractionManager instance, ClientWorld world, SequencedPacketCreator packetCreator) { - try { - this.sendSequencedPacket(world, packetCreator); - } catch (ActionResultException1_12_2 ignored) { - } - } - - @Unique - private boolean viaFabricPlus$extinguishFire(BlockPos blockPos, final Direction direction) { - blockPos = blockPos.offset(direction); - if (this.client.world.getBlockState(blockPos).getBlock() == Blocks.FIRE) { - this.client.world.syncWorldEvent(this.client.player, 1009, blockPos, 0); - this.client.world.removeBlock(blockPos, false); - return true; - } - return false; - } - -} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMinecraft.java similarity index 79% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMinecraft.java index 824cf2682..fcbb13c57 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMinecraft.java @@ -24,19 +24,19 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(MinecraftClient.class) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { - @ModifyExpressionValue(method = "handleBlockBreaking", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isUsingItem()Z")) + @ModifyExpressionValue(method = "continueAttack", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isUsingItem()Z")) private boolean allowBlockBreakAndItemUsageAtTheSameTime(boolean original) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_7_6) && original; } - @ModifyExpressionValue(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;isBreakingBlock()Z")) + @ModifyExpressionValue(method = "startUseItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;isDestroying()Z")) private boolean allowItemUsageAndBlockBreakAtTheSameTime(boolean original) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_7_6) && original; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMultiPlayerGameMode.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMultiPlayerGameMode.java new file mode 100644 index 000000000..16a22fe69 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/interaction/replace_block_item_use_logic/MixinMultiPlayerGameMode.java @@ -0,0 +1,254 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.interaction.replace_block_item_use_logic; + +import com.llamalad7.mixinextras.sugar.Local; +import com.viaversion.viafabricplus.features.interaction.replace_block_placement_logic.ActionResultException1_12_2; +import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; +import com.viaversion.viafabricplus.protocoltranslator.impl.provider.viaversion.ViaFabricPlusHandItemProvider; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import java.util.Objects; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SnowLayerBlock; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; +import net.minecraft.client.multiplayer.prediction.PredictiveAction; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket; +import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import org.apache.commons.lang3.mutable.MutableObject; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +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.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@SuppressWarnings("DataFlowIssue") +@Mixin(MultiPlayerGameMode.class) +public abstract class MixinMultiPlayerGameMode { + + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + protected abstract InteractionResult performUseItemOn(LocalPlayer player, InteractionHand hand, BlockHitResult hitResult); + + @Shadow + @Final + private ClientPacketListener connection; + + @Shadow + private BlockPos destroyBlockPos; + + @Shadow + private float destroyProgress; + + @Shadow + protected abstract void startPrediction(ClientLevel world, PredictiveAction packetCreator); + + @Shadow + private GameType localPlayerMode; + + @Redirect(method = "performUseItemOn", at = @At(value = "FIELD", target = "Lnet/minecraft/world/InteractionResult;CONSUME:Lnet/minecraft/world/InteractionResult$Success;")) + private InteractionResult.Success changeSpectatorAction() { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { + return InteractionResult.SUCCESS; + } else { + return InteractionResult.CONSUME; + } + } + + @Inject(method = "useItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;ensureHasSentCarriedItem()V", shift = At.Shift.AFTER)) + private void sendPlayerPosPacket(Player player, InteractionHand hand, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_17, ProtocolVersion.v1_20_5)) { + this.connection.send(new ServerboundMovePlayerPacket.PosRot(player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot(), player.onGround(), player.horizontalCollision)); + } + } + + @Inject(method = "getDestroyStage", at = @At("HEAD"), cancellable = true) + private void changeCalculation(CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { + cir.setReturnValue((int) (this.destroyProgress * 10.0F) - 1); + } + } + + @Redirect(method = {"method_41936", "method_41935"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;destroyBlock(Lnet/minecraft/core/BlockPos;)Z")) + private boolean checkFireBlock(MultiPlayerGameMode instance, BlockPos pos, @Local(argsOnly = true) Direction direction) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { + return !this.viaFabricPlus$extinguishFire(pos, direction) && instance.destroyBlock(pos); + } else { + return instance.destroyBlock(pos); + } + } + + @Inject(method = "destroyBlock", at = @At("TAIL")) + private void resetBlockBreaking(BlockPos pos, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_3)) { + this.destroyBlockPos = new BlockPos(this.destroyBlockPos.getX(), -1, this.destroyBlockPos.getZ()); + } + } + + @Inject(method = "performUseItemOn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;isEmpty()Z", ordinal = 2)) + private void interactBlock1_12_2(LocalPlayer player, InteractionHand hand, BlockHitResult hitResult, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { + final ItemStack itemStack = player.getItemInHand(hand); + BlockHitResult checkHitResult = hitResult; + if (itemStack.getItem() instanceof BlockItem) { + final BlockState clickedBlock = this.minecraft.level.getBlockState(hitResult.getBlockPos()); + if (clickedBlock.getBlock().equals(Blocks.SNOW)) { + if (clickedBlock.getValue(SnowLayerBlock.LAYERS) == 1) { + checkHitResult = hitResult.withDirection(Direction.UP); + } + } + final UseOnContext itemUsageContext = new UseOnContext(player, hand, checkHitResult); + final BlockPlaceContext itemPlacementContext = new BlockPlaceContext(itemUsageContext); + if (!itemPlacementContext.canPlace() || ((BlockItem) itemPlacementContext.getItemInHand().getItem()).getPlacementState(itemPlacementContext) == null) { + throw new ActionResultException1_12_2(InteractionResult.PASS); + } + } + + this.connection.send(new ServerboundUseItemOnPacket(hand, hitResult, 0)); + if (itemStack.isEmpty()) { + throw new ActionResultException1_12_2(InteractionResult.PASS); + } + final UseOnContext itemUsageContext = new UseOnContext(player, hand, checkHitResult); + InteractionResult actionResult; + if (this.localPlayerMode.isCreative()) { + final int count = itemStack.getCount(); + actionResult = itemStack.useOn(itemUsageContext); + itemStack.setCount(count); + } else { + actionResult = itemStack.useOn(itemUsageContext); + } + if (!actionResult.consumesAction()) { + actionResult = InteractionResult.PASS; // In <= 1.12.2 FAIL is the same as PASS + } + throw new ActionResultException1_12_2(actionResult); + } + } + + @Inject(method = "useItem", at = @At("HEAD"), cancellable = true) + private void cancelOffHandItemInteract(Player player, InteractionHand hand, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && !InteractionHand.MAIN_HAND.equals(hand)) { + cir.setReturnValue(InteractionResult.PASS); + } + } + + @Inject(method = "useItemOn", at = @At("HEAD"), cancellable = true) + private void cancelOffHandBlockPlace(LocalPlayer player, InteractionHand hand, BlockHitResult hitResult, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && !InteractionHand.MAIN_HAND.equals(hand)) { + cir.setReturnValue(InteractionResult.PASS); + } + } + + @Redirect(method = "method_41929", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;use(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/InteractionResult;")) + private InteractionResult eitherSuccessOrPass(ItemStack instance, Level world, Player user, InteractionHand hand, @Local ItemStack itemStack) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { + final int count = instance.getCount(); + + final InteractionResult actionResult = instance.use(world, user, hand); + final ItemStack output; + if (actionResult instanceof InteractionResult.Success success) { + output = Objects.requireNonNullElseGet(success.heldItemTransformedTo(), () -> user.getItemInHand(hand)); + } else { + output = user.getItemInHand(hand); + } + + // In <= 1.8, ActionResult weren't a thing and interactItem simply returned either true or false + // depending on if the input and output item are equal or not + final boolean accepted = !output.isEmpty() && (output != itemStack || output.getCount() != count); + if (actionResult.consumesAction() == accepted) { + return actionResult; + } else { + return accepted ? InteractionResult.SUCCESS.heldItemTransformedTo(output) : InteractionResult.PASS; + } + } else { + return instance.use(world, user, hand); + } + } + + @Inject(method = "method_41929", at = @At("HEAD")) + private void trackLastUsedItem(InteractionHand hand, Player playerEntity, MutableObject mutableObject, int sequence, CallbackInfoReturnable> cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { + ViaFabricPlusHandItemProvider.lastUsedItem = playerEntity.getItemInHand(hand).copy(); + } + } + + /** + * @author RK_01 + * @reason Block place fix + */ + @Overwrite + private Packet method_41933(MutableObject mutableObject, LocalPlayer clientPlayerEntity, InteractionHand hand, BlockHitResult blockHitResult, int sequence) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { + ViaFabricPlusHandItemProvider.lastUsedItem = clientPlayerEntity.getItemInHand(hand).copy(); + } + try { + mutableObject.setValue(this.performUseItemOn(clientPlayerEntity, hand, blockHitResult)); + return new ServerboundUseItemOnPacket(hand, blockHitResult, sequence); + } catch (ActionResultException1_12_2 e) { + mutableObject.setValue(e.getActionResult()); + throw e; + } + } + + @Redirect(method = "useItemOn", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/MultiPlayerGameMode;startPrediction(Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/client/multiplayer/prediction/PredictiveAction;)V")) + private void catchPacketCancelException(MultiPlayerGameMode instance, ClientLevel world, PredictiveAction packetCreator) { + try { + this.startPrediction(world, packetCreator); + } catch (ActionResultException1_12_2 ignored) { + } + } + + @Unique + private boolean viaFabricPlus$extinguishFire(BlockPos blockPos, final Direction direction) { + blockPos = blockPos.relative(direction); + if (this.minecraft.level.getBlockState(blockPos).getBlock() == Blocks.FIRE) { + this.minecraft.level.levelEvent(this.minecraft.player, 1009, blockPos, 0); + this.minecraft.level.removeBlock(blockPos, false); + return true; + } + return false; + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/attack_damage/MixinAttributeModifiersComponent_Display_Default.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/attack_damage/MixinAttributeModifiersComponent_Display_Default.java index b0ce35142..bf555f023 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/attack_damage/MixinAttributeModifiersComponent_Display_Default.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/attack_damage/MixinAttributeModifiersComponent_Display_Default.java @@ -24,30 +24,30 @@ import com.viaversion.viafabricplus.injection.access.item.attack_damage.IDisplayDefault; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.component.type.AttributeModifiersComponent; -import net.minecraft.component.type.ItemEnchantmentsComponent; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.item.component.ItemAttributeModifiers; +import net.minecraft.world.item.enchantment.ItemEnchantments; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.player.Player; +import net.minecraft.core.Holder; 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.Redirect; -@Mixin(AttributeModifiersComponent.Display.Default.class) +@Mixin(ItemAttributeModifiers.Display.Default.class) public abstract class MixinAttributeModifiersComponent_Display_Default implements IDisplayDefault { @Unique - private ItemEnchantmentsComponent viaFabricPlus$itemEnchantments; + private ItemEnchantments viaFabricPlus$itemEnchantments; - @Redirect(method = "addTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getAttributeBaseValue(Lnet/minecraft/registry/entry/RegistryEntry;)D", ordinal = 0)) - private double fixAttackDamageCalculation(PlayerEntity instance, RegistryEntry registryEntry) { + @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;getAttributeBaseValue(Lnet/minecraft/core/Holder;)D", ordinal = 0)) + private double fixAttackDamageCalculation(Player instance, Holder registryEntry) { double value = 0.0; if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { - for (RegistryEntry enchantment : viaFabricPlus$itemEnchantments.getEnchantments()) { - if (enchantment.matchesKey(Enchantments.SHARPNESS)) { + for (Holder enchantment : viaFabricPlus$itemEnchantments.keySet()) { + if (enchantment.is(Enchantments.SHARPNESS)) { final int level = viaFabricPlus$itemEnchantments.getLevel(enchantment); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { value = level * 1.25F; @@ -67,7 +67,7 @@ private double fixAttackDamageCalculation(PlayerEntity instance, RegistryEntry textConsumer, TooltipDisplayComponent displayComponent, @Nullable PlayerEntity player, CallbackInfo ci) { + @Inject(method = "addAttributeTooltips", at = @At("HEAD")) + private void captureItemEnchantments(Consumer textConsumer, TooltipDisplay displayComponent, @Nullable Player player, CallbackInfo ci) { final ItemStack itemStack = (ItemStack) (Object) this; - final IDisplayDefault mixinDefault = (IDisplayDefault) AttributeModifiersComponent.Display.getDefault(); - mixinDefault.viaFabricPlus$setItemEnchantments(EnchantmentHelper.getEnchantments(itemStack)); + final IDisplayDefault mixinDefault = (IDisplayDefault) ItemAttributeModifiers.Display.attributeModifiers(); + mixinDefault.viaFabricPlus$setItemEnchantments(EnchantmentHelper.getEnchantmentsForCrafting(itemStack)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinItemGroup_EntriesImpl.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinCreativeModeTab_ItemDisplayBuilder.java similarity index 64% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinItemGroup_EntriesImpl.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinCreativeModeTab_ItemDisplayBuilder.java index 8707d3411..5848779e3 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinItemGroup_EntriesImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinCreativeModeTab_ItemDisplayBuilder.java @@ -26,33 +26,33 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.features.item.filter_creative_tabs.VersionedRegistries; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.Item; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registries; -import net.minecraft.resource.featuretoggle.FeatureSet; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.flag.FeatureFlagSet; +import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -@Mixin(targets = "net.minecraft.item.ItemGroup$EntriesImpl") -public abstract class MixinItemGroup_EntriesImpl { +@Mixin(targets = "net.minecraft.world.item.CreativeModeTab$ItemDisplayBuilder") +public abstract class MixinCreativeModeTab_ItemDisplayBuilder { @Shadow @Final - private ItemGroup group; + private CreativeModeTab tab; - @WrapOperation(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/Item;isEnabled(Lnet/minecraft/resource/featuretoggle/FeatureSet;)Z")) - private boolean removeUnknownItems(Item instance, FeatureSet featureSet, Operation original, @Local(argsOnly = true) ItemStack stack) { + @WrapOperation(method = "accept", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/Item;isEnabled(Lnet/minecraft/world/flag/FeatureFlagSet;)Z")) + private boolean removeUnknownItems(Item instance, FeatureFlagSet featureSet, Operation original, @Local(argsOnly = true) ItemStack stack) { final boolean originalValue = original.call(instance, featureSet); final int index = GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getIndex(); - if (index == 2 /* Off */ || MinecraftClient.getInstance().isInSingleplayer()) { + if (index == 2 /* Off */ || Minecraft.getInstance().isLocalServer()) { return originalValue; - } else if (index == 1 /* Vanilla only */ && !Registries.ITEM_GROUP.getId(this.group).getNamespace().equals(Identifier.DEFAULT_NAMESPACE)) { + } else if (index == 1 /* Vanilla only */ && !BuiltInRegistries.CREATIVE_MODE_TAB.getKey(this.tab).getNamespace().equals(ResourceLocation.DEFAULT_NAMESPACE)) { return originalValue; } else { return VersionedRegistries.keepItem(stack) && originalValue; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinItemGroups.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinCreativeModeTabs.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinItemGroups.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinCreativeModeTabs.java index 4880581c0..801d9a08f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinItemGroups.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/filter_creative_tabs/MixinCreativeModeTabs.java @@ -24,10 +24,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemGroups; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.resource.featuretoggle.FeatureSet; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.core.HolderLookup; +import net.minecraft.world.flag.FeatureFlagSet; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -36,15 +36,15 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ItemGroups.class) -public abstract class MixinItemGroups { +@Mixin(CreativeModeTabs.class) +public abstract class MixinCreativeModeTabs { @Shadow @Nullable - private static ItemGroup.@Nullable DisplayContext displayContext; + private static CreativeModeTab.@Nullable ItemDisplayParameters CACHED_PARAMETERS; @Shadow - private static void updateEntries(ItemGroup.DisplayContext displayContext) { + private static void buildAllTabContents(CreativeModeTab.ItemDisplayParameters displayContext) { } @Unique @@ -53,14 +53,14 @@ private static void updateEntries(ItemGroup.DisplayContext displayContext) { @Unique private static int viaFabricPlus$state; - @Inject(method = "updateDisplayContext", at = @At("HEAD"), cancellable = true) - private static void trackLastVersion(FeatureSet enabledFeatures, boolean operatorEnabled, RegistryWrapper.WrapperLookup lookup, CallbackInfoReturnable cir) { + @Inject(method = "tryRebuildTabContents", at = @At("HEAD"), cancellable = true) + private static void trackLastVersion(FeatureFlagSet enabledFeatures, boolean operatorEnabled, HolderLookup.Provider lookup, CallbackInfoReturnable cir) { if (viaFabricPlus$version != ProtocolTranslator.getTargetVersion() || viaFabricPlus$state != GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getIndex()) { viaFabricPlus$version = ProtocolTranslator.getTargetVersion(); viaFabricPlus$state = GeneralSettings.INSTANCE.removeNotAvailableItemsFromCreativeTab.getIndex(); - displayContext = new ItemGroup.DisplayContext(enabledFeatures, operatorEnabled, lookup); - updateEntries(displayContext); + CACHED_PARAMETERS = new CreativeModeTab.ItemDisplayParameters(enabledFeatures, operatorEnabled, lookup); + buildAllTabContents(CACHED_PARAMETERS); cir.setReturnValue(true); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinAxeItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinAxeItem.java index a09bfc8d8..e13f4e517 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinAxeItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinAxeItem.java @@ -23,9 +23,9 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.AxeItem; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; +import net.minecraft.world.item.AxeItem; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -37,19 +37,19 @@ public abstract class MixinAxeItem { @Shadow - private static boolean shouldCancelStripAttempt(ItemUsageContext context) { + private static boolean playerHasBlockingItemUseIntent(UseOnContext context) { return false; } - @Redirect(method = "useOnBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/AxeItem;shouldCancelStripAttempt(Lnet/minecraft/item/ItemUsageContext;)Z")) - private boolean neverCancelStripAttempt(ItemUsageContext context) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_5) && shouldCancelStripAttempt(context); + @Redirect(method = "useOn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/AxeItem;playerHasBlockingItemUseIntent(Lnet/minecraft/world/item/context/UseOnContext;)Z")) + private boolean neverCancelStripAttempt(UseOnContext context) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_5) && playerHasBlockingItemUseIntent(context); } - @Inject(method = "useOnBlock", at = @At("HEAD"), cancellable = true) - private void disableUse(ItemUsageContext context, CallbackInfoReturnable cir) { + @Inject(method = "useOn", at = @At("HEAD"), cancellable = true) + private void disableUse(UseOnContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(ActionResult.PASS); + cir.setReturnValue(InteractionResult.PASS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBlockItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBlockItem.java index 0c5247b43..c80fd1fbb 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBlockItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBlockItem.java @@ -23,16 +23,16 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.ChestBlock; -import net.minecraft.block.enums.ChestType; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemPlacementContext; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.World; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.ChestBlock; +import net.minecraft.world.level.block.state.properties.ChestType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -42,22 +42,22 @@ public abstract class MixinBlockItem { @Inject(method = "canPlace", at = @At("HEAD"), cancellable = true) - private void checkChestPlacement(ItemPlacementContext context, BlockState state, CallbackInfoReturnable cir) { + private void checkChestPlacement(BlockPlaceContext context, BlockState state, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { Block block = state.getBlock(); if (block == Blocks.CHEST || block == Blocks.TRAPPED_CHEST) { - World world = context.getWorld(); - BlockPos pos = context.getBlockPos(); + Level world = context.getLevel(); + BlockPos pos = context.getClickedPos(); boolean foundAdjChest = false; - for (Direction dir : Direction.Type.HORIZONTAL) { - BlockState otherState = world.getBlockState(pos.offset(dir)); + for (Direction dir : Direction.Plane.HORIZONTAL) { + BlockState otherState = world.getBlockState(pos.relative(dir)); if (otherState.getBlock() == block) { if (foundAdjChest) { cir.setReturnValue(false); return; } foundAdjChest = true; - if (otherState.get(ChestBlock.CHEST_TYPE) != ChestType.SINGLE) { + if (otherState.getValue(ChestBlock.TYPE) != ChestType.SINGLE) { cir.setReturnValue(false); return; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBowItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBowItem.java index 48e94d032..2404b3c42 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBowItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBowItem.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.item.interaction; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BowItem; -import net.minecraft.item.ItemStack; -import net.minecraft.item.consume.UseAction; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BowItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUseAnimation; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -38,29 +38,29 @@ @Mixin(BowItem.class) public abstract class MixinBowItem { - @Inject(method = "getMaxUseTime", at = @At("HEAD"), cancellable = true) + @Inject(method = "getUseDuration", at = @At("HEAD"), cancellable = true) private void makeInstantUsable_Time(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3)) { cir.setReturnValue(0); } } - @Inject(method = "getUseAction", at = @At("HEAD"), cancellable = true) - private void makeInstantUsable_Action(CallbackInfoReturnable cir) { + @Inject(method = "getUseAnimation", at = @At("HEAD"), cancellable = true) + private void makeInstantUsable_Action(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3)) { - cir.setReturnValue(UseAction.NONE); + cir.setReturnValue(ItemUseAnimation.NONE); } } @Inject(method = "use", at = @At("HEAD"), cancellable = true) - private void makeInstantUsable(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir) { + private void makeInstantUsable(Level world, Player user, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3)) { - final ItemStack arrowStack = user.getProjectileType(user.getStackInHand(hand)); + final ItemStack arrowStack = user.getProjectile(user.getItemInHand(hand)); if (arrowStack.isEmpty()) { - cir.setReturnValue(ActionResult.FAIL); + cir.setReturnValue(InteractionResult.FAIL); } else { - arrowStack.decrement(1); - cir.setReturnValue(ActionResult.PASS); + arrowStack.shrink(1); + cir.setReturnValue(InteractionResult.PASS); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBrushItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBrushItem.java index b6cd6a7ab..344dfbc10 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBrushItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBrushItem.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BrushItem; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BrushItem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -32,12 +32,12 @@ @Mixin(BrushItem.class) public abstract class MixinBrushItem { - @Redirect(method = "getHitResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getBlockInteractionRange()D")) - private double modifyReachDistance(PlayerEntity instance) { + @Redirect(method = "calculateHitResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;blockInteractionRange()D")) + private double modifyReachDistance(Player instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_2)) { return 5D; } else { - return instance.getBlockInteractionRange(); + return instance.blockInteractionRange(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBucketItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBucketItem.java index 8b3eb40f7..62ffafac6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBucketItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBucketItem.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BucketItem; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUsage; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemUtils; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -34,12 +34,12 @@ @Mixin(BucketItem.class) public abstract class MixinBucketItem { - @Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemUsage;exchangeStack(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;)Lnet/minecraft/item/ItemStack;", ordinal = 1)) - private ItemStack dontExchangeStack(ItemStack inputStack, PlayerEntity player, ItemStack outputStack) { + @Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemUtils;createFilledResult(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/item/ItemStack;", ordinal = 1)) + private ItemStack dontExchangeStack(ItemStack inputStack, Player player, ItemStack outputStack) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { return outputStack; } else { - return ItemUsage.exchangeStack(inputStack, player, outputStack); + return ItemUtils.createFilledResult(inputStack, player, outputStack); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBundleItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBundleItem.java index 8a1eeb705..a4951c401 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBundleItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinBundleItem.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.BundleContentsComponent; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BundleItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.BundleContents; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BundleItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -40,15 +40,15 @@ public abstract class MixinBundleItem { @Inject(method = "use", at = @At("RETURN"), cancellable = true) - private void dontSwing(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir) { + private void dontSwing(Level world, Player user, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - final ItemStack itemStack = user.getStackInHand(hand); - final BundleContentsComponent component = itemStack.get(DataComponentTypes.BUNDLE_CONTENTS); + final ItemStack itemStack = user.getItemInHand(hand); + final BundleContents component = itemStack.get(DataComponents.BUNDLE_CONTENTS); if (component == null || component.isEmpty()) { - cir.setReturnValue(ActionResult.FAIL); + cir.setReturnValue(InteractionResult.FAIL); } } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - cir.setReturnValue(ActionResult.CONSUME); + cir.setReturnValue(InteractionResult.CONSUME); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinConsumableComponent.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinConsumable.java similarity index 62% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinConsumableComponent.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinConsumable.java index 47ffd4f92..fbf960a1c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinConsumableComponent.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinConsumable.java @@ -24,23 +24,23 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.component.type.ConsumableComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.ActionResult; +import net.minecraft.world.item.component.Consumable; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ConsumableComponent.class) -public abstract class MixinConsumableComponent { +@Mixin(Consumable.class) +public abstract class MixinConsumable { - @Redirect(method = "consume", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/ActionResult$Success;withNewHandStack(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/util/ActionResult$Success;")) - private ActionResult.Success dontExchangeStack(ActionResult.Success instance, ItemStack newHandStack, @Local(argsOnly = true) ItemStack stack) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5) && stack.isOf(Items.MILK_BUCKET)) { - return instance.withNewHandStack(stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack); + @Redirect(method = "startConsuming", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/InteractionResult$Success;heldItemTransformedTo(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/world/InteractionResult$Success;")) + private InteractionResult.Success dontExchangeStack(InteractionResult.Success instance, ItemStack newHandStack, @Local(argsOnly = true) ItemStack stack) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5) && stack.is(Items.MILK_BUCKET)) { + return instance.heldItemTransformedTo(stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack); } else { - return instance.withNewHandStack(newHandStack); + return instance.heldItemTransformedTo(newHandStack); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEnderPearlItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEnderpearlItem.java similarity index 73% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEnderPearlItem.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEnderpearlItem.java index d47915dae..09d1a42f3 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEnderPearlItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEnderpearlItem.java @@ -23,23 +23,23 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.EnderPearlItem; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.EnderpearlItem; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(EnderPearlItem.class) -public abstract class MixinEnderPearlItem { +@Mixin(EnderpearlItem.class) +public abstract class MixinEnderpearlItem { @Inject(method = "use", at = @At("HEAD"), cancellable = true) - private void removeCreativeModeEnderPearl(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && user.getAbilities().creativeMode) { - ci.setReturnValue(ActionResult.PASS); + private void removeCreativeModeEnderPearl(Level world, Player user, InteractionHand hand, CallbackInfoReturnable ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8) && user.getAbilities().instabuild) { + ci.setReturnValue(InteractionResult.PASS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEquippableComponent.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEquippable.java similarity index 69% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEquippableComponent.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEquippable.java index 157c58478..98cf93951 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEquippableComponent.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinEquippable.java @@ -23,11 +23,11 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.component.type.EquippableComponent; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; +import net.minecraft.world.item.equipment.Equippable; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.InteractionResult; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -37,28 +37,28 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(EquippableComponent.class) -public abstract class MixinEquippableComponent { +@Mixin(Equippable.class) +public abstract class MixinEquippable { @Shadow @Final private EquipmentSlot slot; - @Redirect(method = "equip", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isCreative()Z")) - private boolean removeCreativeCondition(PlayerEntity instance) { + @Redirect(method = "swapWithEquipmentSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isCreative()Z")) + private boolean removeCreativeCondition(Player instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20) && instance.isCreative(); } - @Inject(method = "equip", at = @At("HEAD"), cancellable = true) - private void cancelArmorSwap(ItemStack stack, PlayerEntity player, CallbackInfoReturnable cir) { + @Inject(method = "swapWithEquipmentSlot", at = @At("HEAD"), cancellable = true) + private void cancelArmorSwap(ItemStack stack, Player player, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_3)) { - final ItemStack targetItem = player.getEquippedStack(this.slot); + final ItemStack targetItem = player.getItemBySlot(this.slot); if (!targetItem.isEmpty()) { - cir.setReturnValue(ActionResult.FAIL); + cir.setReturnValue(InteractionResult.FAIL); } } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7)) { - cir.setReturnValue(ActionResult.FAIL); + cir.setReturnValue(InteractionResult.FAIL); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireChargeItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireChargeItem.java index 30258af47..dfd937c8f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireChargeItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireChargeItem.java @@ -23,9 +23,9 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.FireChargeItem; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; +import net.minecraft.world.item.FireChargeItem; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -34,10 +34,10 @@ @Mixin(FireChargeItem.class) public abstract class MixinFireChargeItem { - @Inject(method = "useOnBlock", at = @At("HEAD"), cancellable = true) - private void disableClientSideUsage(ItemUsageContext context, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4) && context.getWorld().isClient()) { - cir.setReturnValue(ActionResult.SUCCESS); + @Inject(method = "useOn", at = @At("HEAD"), cancellable = true) + private void disableClientSideUsage(UseOnContext context, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4) && context.getLevel().isClientSide()) { + cir.setReturnValue(InteractionResult.SUCCESS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireworkRocketItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireworkRocketItem.java index 64c1fc963..d23e1cb14 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireworkRocketItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFireworkRocketItem.java @@ -23,9 +23,9 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.FireworkRocketItem; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.util.ActionResult; +import net.minecraft.world.item.FireworkRocketItem; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -34,10 +34,10 @@ @Mixin(FireworkRocketItem.class) public abstract class MixinFireworkRocketItem { - @Inject(method = "useOnBlock", at = @At("HEAD"), cancellable = true) - private void allowWhileGliding(ItemUsageContext context, CallbackInfoReturnable cir) { + @Inject(method = "useOn", at = @At("HEAD"), cancellable = true) + private void allowWhileGliding(UseOnContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5)) { - cir.setReturnValue(ActionResult.SUCCESS); + cir.setReturnValue(InteractionResult.SUCCESS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFishingRodItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFishingRodItem.java index e4cb0d823..36c2493d1 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFishingRodItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinFishingRodItem.java @@ -23,11 +23,11 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.FishingRodItem; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; -import net.minecraft.world.World; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.FishingRodItem; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -37,9 +37,9 @@ public abstract class MixinFishingRodItem { @Inject(method = "use", at = @At("RETURN")) - private void swingHand(World world, PlayerEntity user, Hand hand, CallbackInfoReturnable cir) { + private void swingHand(Level world, Player user, InteractionHand hand, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - user.swingHand(hand); + user.swing(hand); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinKnowledgeBookItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinKnowledgeBookItem.java index 54c2741c0..5b02d6326 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinKnowledgeBookItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinKnowledgeBookItem.java @@ -24,10 +24,10 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.KnowledgeBookItem; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.KnowledgeBookItem; +import net.minecraft.world.InteractionHand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -35,14 +35,14 @@ @Mixin(KnowledgeBookItem.class) public abstract class MixinKnowledgeBookItem { - @Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;decrementUnlessCreative(ILnet/minecraft/entity/LivingEntity;)V")) - private void removeFullStack(ItemStack instance, int amount, LivingEntity entity, @Local(argsOnly = true) Hand hand) { + @Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;consume(ILnet/minecraft/world/entity/LivingEntity;)V")) + private void removeFullStack(ItemStack instance, int amount, LivingEntity entity, @Local(argsOnly = true) InteractionHand hand) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { - if (!entity.isInCreativeMode()) { - entity.setStackInHand(hand, ItemStack.EMPTY); + if (!entity.hasInfiniteMaterials()) { + entity.setItemInHand(hand, ItemStack.EMPTY); } } else { - instance.decrementUnlessCreative(amount, entity); + instance.consume(amount, entity); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinLeadItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinLeadItem.java index 3bcc03577..eeb18e826 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinLeadItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinLeadItem.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.item.ItemUsageContext; -import net.minecraft.item.LeadItem; -import net.minecraft.registry.tag.BlockTags; -import net.minecraft.util.ActionResult; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.item.LeadItem; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionResult; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -35,11 +35,11 @@ @Mixin(LeadItem.class) public abstract class MixinLeadItem { - @Inject(method = "useOnBlock", at = @At("RETURN"), cancellable = true) - private void swingHand(ItemUsageContext context, CallbackInfoReturnable cir) { + @Inject(method = "useOn", at = @At("RETURN"), cancellable = true) + private void swingHand(UseOnContext context, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - if (context.getWorld().getBlockState(context.getBlockPos()).isIn(BlockTags.FENCES)) { - cir.setReturnValue(ActionResult.SUCCESS); + if (context.getLevel().getBlockState(context.getClickedPos()).is(BlockTags.FENCES)) { + cir.setReturnValue(InteractionResult.SUCCESS); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinNameTagItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinNameTagItem.java index a21f78e01..562bf4270 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinNameTagItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinNameTagItem.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.mob.CreakingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.NameTagItem; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.creaking.Creaking; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.NameTagItem; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -38,10 +38,10 @@ @Mixin(NameTagItem.class) public abstract class MixinNameTagItem { - @Inject(method = "useOnEntity", at = @At("HEAD"), cancellable = true) - private void dontAllowNameTagsOnCreaking(ItemStack stack, PlayerEntity user, LivingEntity entity, Hand hand, CallbackInfoReturnable cir) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4) && entity instanceof CreakingEntity) { - cir.setReturnValue(ActionResult.PASS); + @Inject(method = "interactLivingEntity", at = @At("HEAD"), cancellable = true) + private void dontAllowNameTagsOnCreaking(ItemStack stack, Player user, LivingEntity entity, InteractionHand hand, CallbackInfoReturnable cir) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4) && entity instanceof Creaking) { + cir.setReturnValue(InteractionResult.PASS); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinShovelItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinShovelItem.java index 3238bf3c4..a493b2cab 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinShovelItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/interaction/MixinShovelItem.java @@ -24,7 +24,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Map; -import net.minecraft.item.ShovelItem; +import net.minecraft.world.item.ShovelItem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -33,7 +33,7 @@ @Mixin(ShovelItem.class) public abstract class MixinShovelItem { - @Redirect(method = "useOnBlock", slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/item/ShovelItem;PATH_STATES:Ljava/util/Map;")), at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0, remap = false)) + @Redirect(method = "useOn", slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/world/item/ShovelItem;FLATTENABLES:Ljava/util/Map;")), at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;", ordinal = 0, remap = false)) private Object disablePathAction(Map instance, Object grassBlock) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { return null; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/MixinDrawContext.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/MixinGuiGraphics.java similarity index 74% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/MixinDrawContext.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/MixinGuiGraphics.java index 776522691..f2d799c48 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/MixinDrawContext.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/negative_item_count/MixinGuiGraphics.java @@ -22,25 +22,25 @@ package com.viaversion.viafabricplus.injection.mixin.features.item.negative_item_count; import com.viaversion.viafabricplus.features.item.negative_item_count.NegativeItemUtil; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Formatting; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.world.item.ItemStack; +import net.minecraft.ChatFormatting; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(DrawContext.class) -public abstract class MixinDrawContext { +@Mixin(GuiGraphics.class) +public abstract class MixinGuiGraphics { - @Redirect(method = "drawStackCount", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getCount()I")) + @Redirect(method = "renderItemCount", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getCount()I")) private int handleNegativeItemCount(ItemStack instance) { return NegativeItemUtil.getCount(instance); } - @Redirect(method = "drawStackCount", at = @At(value = "INVOKE", target = "Ljava/lang/String;valueOf(I)Ljava/lang/String;", remap = false)) + @Redirect(method = "renderItemCount", at = @At(value = "INVOKE", target = "Ljava/lang/String;valueOf(I)Ljava/lang/String;", remap = false)) private String makeTextRed(int count) { if (count <= 0) { - return Formatting.RED.toString() + count; + return ChatFormatting.RED.toString() + count; } else { return String.valueOf(count); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/tooltip/MixinItemStack.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/tooltip/MixinItemStack.java index c5a5c87ac..dc352900d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/tooltip/MixinItemStack.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/item/tooltip/MixinItemStack.java @@ -29,23 +29,23 @@ import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.Protocol1_21_4To1_21_5; import java.util.Optional; import java.util.function.Consumer; -import net.minecraft.component.ComponentType; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.TooltipDisplayComponent; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipAppender; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.text.Text; -import net.minecraft.util.math.MathHelper; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.TooltipProvider; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.nbt.ListTag; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.registries.Registries; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -59,54 +59,54 @@ public abstract class MixinItemStack { @Shadow public abstract Item getItem(); - @WrapWithCondition(method = "appendTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/Item;appendTooltip(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/Item$TooltipContext;Lnet/minecraft/component/type/TooltipDisplayComponent;Ljava/util/function/Consumer;Lnet/minecraft/item/tooltip/TooltipType;)V")) - private boolean hideAdditionalTooltip(Item instance, ItemStack stack, Item.TooltipContext context, TooltipDisplayComponent displayComponent, Consumer textConsumer, TooltipType type) { + @WrapWithCondition(method = "addDetailsToTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/Item;appendHoverText(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/Item$TooltipContext;Lnet/minecraft/world/item/component/TooltipDisplay;Ljava/util/function/Consumer;Lnet/minecraft/world/item/TooltipFlag;)V")) + private boolean hideAdditionalTooltip(Item instance, ItemStack stack, Item.TooltipContext context, TooltipDisplay displayComponent, Consumer textConsumer, TooltipFlag type) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - final NbtCompound tag = ItemUtil.getTagOrNull((ItemStack) (Object) this); - final NbtCompound backup = tag == null ? null : tag.getCompoundOrEmpty(ItemUtil.vvNbtName(Protocol1_21_4To1_21_5.class, "backup")); + final CompoundTag tag = ItemUtil.getTagOrNull((ItemStack) (Object) this); + final CompoundTag backup = tag == null ? null : tag.getCompoundOrEmpty(ItemUtil.vvNbtName(Protocol1_21_4To1_21_5.class, "backup")); return backup == null || !backup.contains("hide_additional_tooltip"); } else { return true; } } - @Inject(method = "appendComponentTooltip", at = @At("HEAD"), cancellable = true) - private void replaceEnchantmentTooltip(ComponentType componentType, Item.TooltipContext context, TooltipDisplayComponent displayComponent, Consumer textConsumer, TooltipType type, CallbackInfo ci) { + @Inject(method = "addToTooltip", at = @At("HEAD"), cancellable = true) + private void replaceEnchantmentTooltip(DataComponentType componentType, Item.TooltipContext context, TooltipDisplay displayComponent, Consumer textConsumer, TooltipFlag type, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_4)) { return; } - final NbtCompound tag = ItemUtil.getTagOrNull((ItemStack) (Object) this); + final CompoundTag tag = ItemUtil.getTagOrNull((ItemStack) (Object) this); if (tag == null) { return; } - if (componentType == DataComponentTypes.ENCHANTMENTS) { + if (componentType == DataComponents.ENCHANTMENTS) { this.viaFabricPlus$appendEnchantments1_14_4("Enchantments", tag, context, textConsumer); ci.cancel(); - } else if (componentType == DataComponentTypes.STORED_ENCHANTMENTS) { + } else if (componentType == DataComponents.STORED_ENCHANTMENTS) { this.viaFabricPlus$appendEnchantments1_14_4("StoredEnchantments", tag, context, textConsumer); ci.cancel(); } } @Unique - private void viaFabricPlus$appendEnchantments1_14_4(final String name, final NbtCompound nbt, Item.TooltipContext context, final Consumer tooltip) { - final RegistryWrapper.WrapperLookup registryLookup = context.getRegistryLookup(); - final NbtList enchantments = nbt.getList(name).orElse(null); + private void viaFabricPlus$appendEnchantments1_14_4(final String name, final CompoundTag nbt, Item.TooltipContext context, final Consumer tooltip) { + final HolderLookup.Provider registryLookup = context.registries(); + final ListTag enchantments = nbt.getList(name).orElse(null); if (enchantments == null) { return; } - for (NbtElement element : enchantments) { - final NbtCompound enchantment = (NbtCompound) element; + for (Tag element : enchantments) { + final CompoundTag enchantment = (CompoundTag) element; - final String id = enchantment.getString("id", ""); - final Optional> value = Enchantments1_14_4.getOrEmpty(id); + final String id = enchantment.getStringOr("id", ""); + final Optional> value = Enchantments1_14_4.getOrEmpty(id); value.ifPresent(e -> { - final int lvl = enchantment.getInt("lvl", 0); + final int lvl = enchantment.getIntOr("lvl", 0); if (registryLookup != null) { - final Optional> v = registryLookup.getOrThrow(RegistryKeys.ENCHANTMENT).getOptional(e); - v.ifPresent(enchantmentReference -> tooltip.accept(Enchantment.getName(enchantmentReference, MathHelper.clamp(lvl, Short.MIN_VALUE, Short.MAX_VALUE)))); + final Optional> v = registryLookup.lookupOrThrow(Registries.ENCHANTMENT).get(e); + v.ifPresent(enchantmentReference -> tooltip.accept(Enchantment.getFullname(enchantmentReference, Mth.clamp(lvl, Short.MIN_VALUE, Short.MAX_VALUE)))); } }); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/large_container/MixinItemPacketRewriter1_14.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/large_container/MixinItemPacketRewriter1_14.java index 8f2ca8bca..9a1453437 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/large_container/MixinItemPacketRewriter1_14.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/large_container/MixinItemPacketRewriter1_14.java @@ -36,13 +36,13 @@ import com.viaversion.viaversion.protocols.v1_13_2to1_14.packet.ServerboundPackets1_14; import com.viaversion.viaversion.protocols.v1_13_2to1_14.rewriter.ItemPacketRewriter1_14; import com.viaversion.viaversion.rewriter.ItemRewriter; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.screen.GenericContainerScreenHandler; -import net.minecraft.text.Text; -import net.minecraft.text.TextCodecs; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.inventory.ContainerScreen; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -66,16 +66,16 @@ private void supportLargeContainers(PacketWrapper wrapper, CallbackInfo ci, @Loc ci.cancel(); final String uuid = SyncTasks.executeSyncTask(data -> { - final MinecraftClient mc = MinecraftClient.getInstance(); + final Minecraft mc = Minecraft.getInstance(); try { final int syncId = data.readUnsignedByte(); final int size = data.readUnsignedByte(); - final Text mcTitle = TextCodecs.UNLIMITED_REGISTRY_PACKET_CODEC.decode(data); + final Component mcTitle = ComponentSerialization.TRUSTED_STREAM_CODEC.decode(data); - final GenericContainerScreenHandler screenHandler = new GenericContainerScreenHandler(null, syncId, mc.player.getInventory(), new SimpleInventory(size), MathHelper.ceil(size / 9F)); - mc.player.currentScreenHandler = screenHandler; - mc.setScreen(new GenericContainerScreen(screenHandler, mc.player.getInventory(), mcTitle)); + final ChestMenu screenHandler = new ChestMenu(null, syncId, mc.player.getInventory(), new SimpleContainer(size), Mth.ceil(size / 9F)); + mc.player.containerMenu = screenHandler; + mc.setScreen(new ContainerScreen(screenHandler, mc.player.getInventory(), mcTitle)); } catch (Throwable t) { throw new RuntimeException("Failed to handle OpenWindow packet data", t); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinAbstractCommandBlockScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinAbstractCommandBlockEditScreen.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinAbstractCommandBlockScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinAbstractCommandBlockEditScreen.java index b952eeaa2..4d46aa22d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinAbstractCommandBlockScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinAbstractCommandBlockEditScreen.java @@ -23,19 +23,19 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.screen.ChatInputSuggestor; -import net.minecraft.client.gui.screen.ingame.AbstractCommandBlockScreen; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.screens.inventory.AbstractCommandBlockEditScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AbstractCommandBlockScreen.class) -public abstract class MixinAbstractCommandBlockScreen { +@Mixin(AbstractCommandBlockEditScreen.class) +public abstract class MixinAbstractCommandBlockEditScreen { - @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ChatInputSuggestor;refresh()V")) - private void cancelAutoComplete(ChatInputSuggestor instance) { + @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/CommandSuggestions;updateCommandInfo()V")) + private void cancelAutoComplete(CommandSuggestions instance) { if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_13)) { - instance.refresh(); + instance.updateCommandInfo(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatScreen.java index 782b3a7a7..3cb9a1ebf 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatScreen.java @@ -23,9 +23,9 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.settings.impl.DebugSettings; -import net.minecraft.client.gui.screen.ChatInputSuggestor; -import net.minecraft.client.gui.screen.ChatScreen; -import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.client.gui.components.EditBox; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -38,30 +38,30 @@ public abstract class MixinChatScreen { @Shadow - protected TextFieldWidget chatField; + protected EditBox input; @Shadow - protected String originalChatText; + protected String initial; @Shadow - ChatInputSuggestor chatInputSuggestor; + CommandSuggestions commandSuggestions; - @WrapWithCondition(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/TextFieldWidget;setText(Ljava/lang/String;)V")) - public boolean moveSetTextDown(TextFieldWidget instance, String text) { + @WrapWithCondition(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/EditBox;setValue(Ljava/lang/String;)V")) + public boolean moveSetTextDown(EditBox instance, String text) { return !DebugSettings.INSTANCE.legacyTabCompletions.isEnabled(); } @Inject(method = "init", at = @At("RETURN")) private void moveSetTextDown(CallbackInfo ci) { if (DebugSettings.INSTANCE.legacyTabCompletions.isEnabled()) { - this.chatField.setText(this.originalChatText); - this.chatInputSuggestor.refresh(); + this.input.setValue(this.initial); + this.commandSuggestions.updateCommandInfo(); } } - @ModifyArg(method = "onChatFieldUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ChatInputSuggestor;setWindowActive(Z)V"), index = 0) + @ModifyArg(method = "onEdited", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/CommandSuggestions;setAllowSuggestions(Z)V"), index = 0) private boolean fixCommandKey(boolean windowActive) { - final String instance = this.chatField.getText(); + final String instance = this.input.getValue(); if (this.viaFabricPlus$keepTabComplete()) { return true; } else { @@ -69,14 +69,14 @@ private boolean fixCommandKey(boolean windowActive) { } } - @WrapWithCondition(method = "onChatFieldUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ChatInputSuggestor;refresh()V")) - private boolean disableAutoTabComplete(ChatInputSuggestor instance) { + @WrapWithCondition(method = "onEdited", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/CommandSuggestions;updateCommandInfo()V")) + private boolean disableAutoTabComplete(CommandSuggestions instance) { return this.viaFabricPlus$keepTabComplete(); } @Unique private boolean viaFabricPlus$keepTabComplete() { - return !DebugSettings.INSTANCE.legacyTabCompletions.isEnabled() || !this.chatField.getText().startsWith("/"); + return !DebugSettings.INSTANCE.legacyTabCompletions.isEnabled() || !this.input.getValue().startsWith("/"); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatInputSuggestor.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinCommandSuggestions.java similarity index 64% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatInputSuggestor.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinCommandSuggestions.java index a50283b5e..9c1e8f90b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinChatInputSuggestor.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/legacy_tab_completion/MixinCommandSuggestions.java @@ -23,12 +23,12 @@ import com.viaversion.viafabricplus.settings.impl.DebugSettings; import java.util.List; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ChatInputSuggestor; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.input.KeyInput; -import net.minecraft.text.OrderedText; -import net.minecraft.text.Style; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.CommandSuggestions; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.util.FormattedCharSequence; +import net.minecraft.network.chat.Style; import org.jetbrains.annotations.Nullable; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Final; @@ -40,57 +40,57 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ChatInputSuggestor.class) -public abstract class MixinChatInputSuggestor { +@Mixin(CommandSuggestions.class) +public abstract class MixinCommandSuggestions { @Shadow - public abstract void refresh(); + public abstract void updateCommandInfo(); @Shadow @Nullable - private ChatInputSuggestor.@Nullable SuggestionWindow window; + private CommandSuggestions.@Nullable SuggestionsList suggestions; @Shadow @Final - TextFieldWidget textField; + EditBox input; @Shadow @Final - private List messages; + private List commandUsage; - @Inject(method = "provideRenderText", at = @At(value = "HEAD"), cancellable = true) - private void disableTextFieldColors(String original, int firstCharacterIndex, CallbackInfoReturnable cir) { + @Inject(method = "formatChat", at = @At(value = "HEAD"), cancellable = true) + private void disableTextFieldColors(String original, int firstCharacterIndex, CallbackInfoReturnable cir) { if (this.viaFabricPlus$cancelTabComplete()) { - cir.setReturnValue(OrderedText.styledForwardsVisitedString(original, Style.EMPTY)); + cir.setReturnValue(FormattedCharSequence.forward(original, Style.EMPTY)); } } @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void handle1_12_2KeyPressed(KeyInput input, CallbackInfoReturnable cir) { + private void handle1_12_2KeyPressed(KeyEvent input, CallbackInfoReturnable cir) { if (this.viaFabricPlus$cancelTabComplete()) { - if (input.key() == GLFW.GLFW_KEY_TAB && this.window == null) { - this.refresh(); - } else if (this.window != null) { - if (this.window.keyPressed(input)) { + if (input.key() == GLFW.GLFW_KEY_TAB && this.suggestions == null) { + this.updateCommandInfo(); + } else if (this.suggestions != null) { + if (this.suggestions.keyPressed(input)) { cir.setReturnValue(true); return; } - this.textField.setSuggestion(null); - this.window = null; + this.input.setSuggestion(null); + this.suggestions = null; } } } @Inject(method = "render", at = @At("HEAD")) - private void clearMessages(DrawContext drawContext, int mouseX, int mouseY, CallbackInfo ci) { + private void clearMessages(GuiGraphics drawContext, int mouseX, int mouseY, CallbackInfo ci) { if (this.viaFabricPlus$cancelTabComplete()) { - this.messages.clear(); + this.commandUsage.clear(); } } @Unique private boolean viaFabricPlus$cancelTabComplete() { - return DebugSettings.INSTANCE.legacyTabCompletions.isEnabled() && this.textField.getText().startsWith("/"); + return DebugSettings.INSTANCE.legacyTabCompletions.isEnabled() && this.input.getValue().startsWith("/"); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/MixinStatusEffectInstance.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/MixinMobEffectInstance.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/MixinStatusEffectInstance.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/MixinMobEffectInstance.java index 0ea5d49a2..779b03723 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/MixinStatusEffectInstance.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/allow_negative_amplifier/MixinMobEffectInstance.java @@ -23,21 +23,21 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.util.math.MathHelper; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(StatusEffectInstance.class) -public abstract class MixinStatusEffectInstance { +@Mixin(MobEffectInstance.class) +public abstract class MixinMobEffectInstance { - @Redirect(method = "(Lnet/minecraft/registry/entry/RegistryEntry;IIZZZLnet/minecraft/entity/effect/StatusEffectInstance;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;clamp(III)I")) + @Redirect(method = "(Lnet/minecraft/core/Holder;IIZZZLnet/minecraft/world/effect/MobEffectInstance;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(III)I")) private int dontClampValue(int value, int min, int max) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { return value; } else { - return MathHelper.clamp(value, min, max); + return Mth.clamp(value, min, max); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/book_edit/MixinBookEditScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/book_edit/MixinBookEditScreen.java index d07cd641b..2b1f400bf 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/book_edit/MixinBookEditScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/book_edit/MixinBookEditScreen.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.screen.ingame.BookEditScreen; +import net.minecraft.client.gui.screens.inventory.BookEditScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.ModifyConstant; @@ -40,7 +40,7 @@ private int modifyPageLength(int constant) { } } - @ModifyConstant(method = "appendNewPage", constant = @Constant(intValue = 100)) + @ModifyConstant(method = "appendPageToBook", constant = @Constant(intValue = 100)) private int modifyPageCount(int constant) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { return 50; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatScreen.java index 74d8be80c..f892223af 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatScreen.java @@ -22,8 +22,8 @@ package com.viaversion.viafabricplus.injection.mixin.features.limitation.max_chat_length; import com.viaversion.viafabricplus.features.limitation.max_chat_length.MaxChatLength; -import net.minecraft.client.gui.screen.ChatScreen; -import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.client.gui.components.EditBox; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -34,12 +34,12 @@ public abstract class MixinChatScreen { @Shadow - protected TextFieldWidget chatField; + protected EditBox input; @Inject(method = "init", at = @At("RETURN")) private void changeChatLength(CallbackInfo ci) { - if (this.chatField.getMaxLength() == MaxChatLength.MAX_CHAT_LENGTH_LATEST) { - this.chatField.setMaxLength(MaxChatLength.getChatLength()); + if (this.input.getMaxLength() == MaxChatLength.MAX_CHAT_LENGTH_LATEST) { + this.input.setMaxLength(MaxChatLength.getChatLength()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatMessageC2SPacket.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinServerboundChatPacket.java similarity index 90% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatMessageC2SPacket.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinServerboundChatPacket.java index 95ebc9729..d0d5ed9b0 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinChatMessageC2SPacket.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinServerboundChatPacket.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.limitation.max_chat_length; import com.viaversion.viafabricplus.features.limitation.max_chat_length.MaxChatLength; -import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket; +import net.minecraft.network.protocol.game.ServerboundChatPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.Constant; import org.spongepowered.asm.mixin.injection.ModifyConstant; -@Mixin(ChatMessageC2SPacket.class) -public abstract class MixinChatMessageC2SPacket { +@Mixin(ServerboundChatPacket.class) +public abstract class MixinServerboundChatPacket { @ModifyConstant(method = "write", constant = @Constant(intValue = 256)) private int modifyChatLength(int maxLength) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinStringHelper.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinStringUtil.java similarity index 86% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinStringHelper.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinStringUtil.java index afca1afb1..4ce95b29b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinStringHelper.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/limitation/max_chat_length/MixinStringUtil.java @@ -23,14 +23,14 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.viaversion.viafabricplus.features.limitation.max_chat_length.MaxChatLength; -import net.minecraft.util.StringHelper; +import net.minecraft.util.StringUtil; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(StringHelper.class) -public abstract class MixinStringHelper { +@Mixin(StringUtil.class) +public abstract class MixinStringUtil { - @ModifyExpressionValue(method = "truncateChat", at = @At(value = "CONSTANT", args = "intValue=256")) + @ModifyExpressionValue(method = "trimChatMessage", at = @At(value = "CONSTANT", args = "intValue=256")) private static int modifyMaxChatLength(int constant) { return MaxChatLength.getChatLength(); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouse.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseHandler.java similarity index 81% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouse.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseHandler.java index 79af78fb7..0be612951 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouse.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseHandler.java @@ -26,16 +26,16 @@ import com.viaversion.viafabricplus.features.mouse_sensitivity.MouseSensitivity1_13_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.Mouse; -import net.minecraft.client.option.SimpleOption; +import net.minecraft.client.MouseHandler; +import net.minecraft.client.OptionInstance; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(Mouse.class) -public abstract class MixinMouse { +@Mixin(MouseHandler.class) +public abstract class MixinMouseHandler { - @WrapOperation(method = "updateMouse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/SimpleOption;getValue()Ljava/lang/Object;", ordinal = 0)) - private Object adjustMouseSensitivity1_13_2(SimpleOption instance, Operation original) { + @WrapOperation(method = "turnPlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/OptionInstance;get()Ljava/lang/Object;", ordinal = 0)) + private Object adjustMouseSensitivity1_13_2(OptionInstance instance, Operation original) { final Double value = original.call(instance); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseOptionsScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseSettingsScreen.java similarity index 64% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseOptionsScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseSettingsScreen.java index 605079725..ace86e9dc 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseOptionsScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/mouse_sensitivity/MixinMouseSettingsScreen.java @@ -24,26 +24,26 @@ import com.viaversion.viafabricplus.features.mouse_sensitivity.MouseSensitivity1_13_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.option.GameOptionsScreen; -import net.minecraft.client.gui.screen.option.MouseOptionsScreen; -import net.minecraft.client.option.GameOptions; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.options.OptionsSubScreen; +import net.minecraft.client.gui.screens.options.MouseSettingsScreen; +import net.minecraft.client.Options; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; -@Mixin(MouseOptionsScreen.class) -public abstract class MixinMouseOptionsScreen extends GameOptionsScreen { +@Mixin(MouseSettingsScreen.class) +public abstract class MixinMouseSettingsScreen extends OptionsSubScreen { - public MixinMouseOptionsScreen(Screen parent, GameOptions gameOptions, Text title) { + public MixinMouseSettingsScreen(Screen parent, Options gameOptions, Component title) { super(parent, gameOptions, title); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2) && this.body.getWidgetFor(this.gameOptions.getMouseSensitivity()).isHovered()) { - context.drawTooltip(textRenderer, Text.of("<=1.13.2 Sensitivity: " + MouseSensitivity1_13_2.get1_13SliderValue(this.gameOptions.getMouseSensitivity().getValue().floatValue()).valueInt() + "%"), mouseX, mouseY); + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2) && this.list.findOption(this.options.sensitivity()).isHovered()) { + context.setTooltipForNextFrame(font, Component.nullToEmpty("<=1.13.2 Sensitivity: " + MouseSensitivity1_13_2.get1_13SliderValue(this.options.sensitivity().get().floatValue()).valueInt() + "%"), mouseX, mouseY); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinAbstractBoatEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinAbstractBoat.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinAbstractBoatEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinAbstractBoat.java index 559919e0c..f937c5513 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinAbstractBoatEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinAbstractBoat.java @@ -23,23 +23,23 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.util.math.Box; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AbstractBoatEntity.class) -public abstract class MixinAbstractBoatEntity { +@Mixin(AbstractBoat.class) +public abstract class MixinAbstractBoat { - @Redirect(method = "updateVelocity", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;isSpaceEmpty(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/Box;)Z")) - private boolean alwaysUpdatePosition(World instance, Entity entity, Box box) { + @Redirect(method = "floatBoat", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;noCollision(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/AABB;)Z")) + private boolean alwaysUpdatePosition(Level instance, Entity entity, AABB box) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { return true; } else { - return instance.isSpaceEmpty(entity, box); + return instance.noCollision(entity, box); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinBedBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinBedBlock.java index a48664a3a..d0149f99f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinBedBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinBedBlock.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.BedBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.Vec3d; +import net.minecraft.world.level.block.BedBlock; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.Vec3; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -36,15 +36,15 @@ @Mixin(BedBlock.class) public abstract class MixinBedBlock { - @Inject(method = "bounceEntity", at = @At("HEAD"), cancellable = true) + @Inject(method = "bounceUp", at = @At("HEAD"), cancellable = true) private void collisionChanges(Entity entity, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { ci.cancel(); - Vec3d velocity = entity.getVelocity(); + Vec3 velocity = entity.getDeltaMovement(); if (velocity.y < (double) 0.0F) { double d = entity instanceof LivingEntity ? (double) 1.0F : 0.8; - entity.setVelocity(velocity.x, Math.min(-velocity.y * 0.75F * d, 0.75F), velocity.z); + entity.setDeltaMovement(velocity.x, Math.min(-velocity.y * 0.75F * d, 0.75F), velocity.z); } } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { ci.cancel(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinEntity.java index b66b062ea..e6ff4906c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinEntity.java @@ -26,17 +26,17 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.List; -import net.minecraft.block.BlockState; -import net.minecraft.block.FenceGateBlock; -import net.minecraft.entity.Entity; -import net.minecraft.registry.tag.BlockTags; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.World; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.FenceGateBlock; +import net.minecraft.world.entity.Entity; +import net.minecraft.tags.BlockTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.level.Level; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -50,74 +50,74 @@ public abstract class MixinEntity { @Shadow - private Vec3d pos; + private Vec3 position; @Shadow - private World world; + private Level level; @Shadow - protected Vec3d movementMultiplier; + protected Vec3 stuckSpeedMultiplier; @Shadow - public abstract Box getBoundingBox(); + public abstract AABB getBoundingBox(); @Shadow - public abstract boolean isOnGround(); + public abstract boolean onGround(); @Shadow - public abstract float getStepHeight(); + public abstract float maxUpStep(); @Shadow - public abstract World getEntityWorld(); + public abstract Level level(); - @Redirect(method = "slowMovement", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/Entity;movementMultiplier:Lnet/minecraft/util/math/Vec3d;")) - private void prioritySlowestMovementMultiplier(Entity instance, Vec3d value) { - if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && this.movementMultiplier != Vec3d.ZERO) { - this.movementMultiplier = new Vec3d(Math.min(this.movementMultiplier.x, value.x), Math.min(this.movementMultiplier.y, value.y), Math.min(this.movementMultiplier.z, value.z)); + @Redirect(method = "makeStuckInBlock", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/Entity;stuckSpeedMultiplier:Lnet/minecraft/world/phys/Vec3;")) + private void prioritySlowestMovementMultiplier(Entity instance, Vec3 value) { + if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && this.stuckSpeedMultiplier != Vec3.ZERO) { + this.stuckSpeedMultiplier = new Vec3(Math.min(this.stuckSpeedMultiplier.x, value.x), Math.min(this.stuckSpeedMultiplier.y, value.y), Math.min(this.stuckSpeedMultiplier.z, value.z)); } else { - this.movementMultiplier = value; + this.stuckSpeedMultiplier = value; } } - @WrapWithCondition(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;addQueuedCollisionChecks(Lnet/minecraft/entity/Entity$QueuedCollisionCheck;)V")) - private boolean removeExtraCollisionChecks(Entity instance, Entity.QueuedCollisionCheck queuedCollisionCheck) { + @WrapWithCondition(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;addMovementThisTick(Lnet/minecraft/world/entity/Entity$Movement;)V")) + private boolean removeExtraCollisionChecks(Entity instance, Entity.Movement queuedCollisionCheck) { return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_21_5); } - @Redirect(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec3d;lengthSquared()D", ordinal = 1), slice = @Slice( - from = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;adjustMovementForCollisions(Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/Vec3d;") + @Redirect(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;lengthSqr()D", ordinal = 1), slice = @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;collide(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;") )) - private double allowSmallValues(Vec3d instance) { + private double allowSmallValues(Vec3 instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { return Double.MAX_VALUE; } else { - return instance.lengthSquared(); + return instance.lengthSqr(); } } - @Inject(method = "adjustMovementForCollisions(Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/Vec3d;", at = @At("HEAD"), cancellable = true) - private void use1_20_6StepCollisionCalculation(Vec3d movement, CallbackInfoReturnable cir) { + @Inject(method = "collide(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) + private void use1_20_6StepCollisionCalculation(Vec3 movement, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { final Entity thiz = (Entity) (Object) this; - final Box box = this.getBoundingBox(); - final List collisions = this.getEntityWorld().getEntityCollisions(thiz, box.stretch(movement)); - Vec3d adjustedMovement = movement.lengthSquared() == 0D ? movement : Entity.adjustMovementForCollisions(thiz, movement, box, this.getEntityWorld(), collisions); + final AABB box = this.getBoundingBox(); + final List collisions = this.level().getEntityCollisions(thiz, box.expandTowards(movement)); + Vec3 adjustedMovement = movement.lengthSqr() == 0D ? movement : Entity.collideBoundingBox(thiz, movement, box, this.level(), collisions); final boolean changedX = movement.x != adjustedMovement.x; final boolean changedY = movement.y != adjustedMovement.y; final boolean changedZ = movement.z != adjustedMovement.z; - final boolean mayTouchGround = this.isOnGround() || changedY && movement.y < 0D; - if (this.getStepHeight() > 0F && mayTouchGround && (changedX || changedZ)) { - Vec3d vec3d2 = Entity.adjustMovementForCollisions(thiz, new Vec3d(movement.x, this.getStepHeight(), movement.z), box, this.getEntityWorld(), collisions); - Vec3d vec3d3 = Entity.adjustMovementForCollisions(thiz, new Vec3d(0D, this.getStepHeight(), 0D), box.stretch(movement.x, 0D, movement.z), this.getEntityWorld(), collisions); - if (vec3d3.y < this.getStepHeight()) { - Vec3d vec3d4 = Entity.adjustMovementForCollisions(thiz, new Vec3d(movement.x, 0D, movement.z), box.offset(vec3d3), this.getEntityWorld(), collisions).add(vec3d3); - if (vec3d4.horizontalLengthSquared() > vec3d2.horizontalLengthSquared()) { + final boolean mayTouchGround = this.onGround() || changedY && movement.y < 0D; + if (this.maxUpStep() > 0F && mayTouchGround && (changedX || changedZ)) { + Vec3 vec3d2 = Entity.collideBoundingBox(thiz, new Vec3(movement.x, this.maxUpStep(), movement.z), box, this.level(), collisions); + Vec3 vec3d3 = Entity.collideBoundingBox(thiz, new Vec3(0D, this.maxUpStep(), 0D), box.expandTowards(movement.x, 0D, movement.z), this.level(), collisions); + if (vec3d3.y < this.maxUpStep()) { + Vec3 vec3d4 = Entity.collideBoundingBox(thiz, new Vec3(movement.x, 0D, movement.z), box.move(vec3d3), this.level(), collisions).add(vec3d3); + if (vec3d4.horizontalDistanceSqr() > vec3d2.horizontalDistanceSqr()) { vec3d2 = vec3d4; } } - if (vec3d2.horizontalLengthSquared() > adjustedMovement.horizontalLengthSquared()) { - adjustedMovement = vec3d2.add(Entity.adjustMovementForCollisions(thiz, new Vec3d(0D, -vec3d2.y + (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2) ? 0 : movement.y), 0D), box.offset(vec3d2), this.getEntityWorld(), collisions)); + if (vec3d2.horizontalDistanceSqr() > adjustedMovement.horizontalDistanceSqr()) { + adjustedMovement = vec3d2.add(Entity.collideBoundingBox(thiz, new Vec3(0D, -vec3d2.y + (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2) ? 0 : movement.y), 0D), box.move(vec3d2), this.level(), collisions)); } } @@ -125,17 +125,17 @@ private void use1_20_6StepCollisionCalculation(Vec3d movement, CallbackInfoRetur } } - @Inject(method = "getPosWithYOffset", at = @At("HEAD"), cancellable = true) + @Inject(method = "getOnPos(F)Lnet/minecraft/core/BlockPos;", at = @At("HEAD"), cancellable = true) private void modifyPosWithYOffset(float offset, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { - int i = MathHelper.floor(this.pos.x); - int j = MathHelper.floor(this.pos.y - (double) (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18_2) && offset == 1.0E-5F ? 0.2F : offset)); - int k = MathHelper.floor(this.pos.z); + int i = Mth.floor(this.position.x); + int j = Mth.floor(this.position.y - (double) (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18_2) && offset == 1.0E-5F ? 0.2F : offset)); + int k = Mth.floor(this.position.z); BlockPos blockPos = new BlockPos(i, j, k); - if (this.world.getBlockState(blockPos).isAir()) { - BlockPos downPos = blockPos.down(); - BlockState blockState = this.world.getBlockState(downPos); - if (blockState.isIn(BlockTags.FENCES) || blockState.isIn(BlockTags.WALLS) || blockState.getBlock() instanceof FenceGateBlock) { + if (this.level.getBlockState(blockPos).isAir()) { + BlockPos downPos = blockPos.below(); + BlockState blockState = this.level.getBlockState(downPos); + if (blockState.is(BlockTags.FENCES) || blockState.is(BlockTags.WALLS) || blockState.getBlock() instanceof FenceGateBlock) { cir.setReturnValue(downPos); return; } @@ -145,30 +145,30 @@ private void modifyPosWithYOffset(float offset, CallbackInfoReturnable } } - @Inject(method = "getVelocityAffectingPos", at = @At("HEAD"), cancellable = true) + @Inject(method = "getBlockPosBelowThatAffectsMyMovement", at = @At("HEAD"), cancellable = true) private void modifyVelocityAffectingPos(CallbackInfoReturnable cir) { final ProtocolVersion target = ProtocolTranslator.getTargetVersion(); if (target.olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { - cir.setReturnValue(BlockPos.ofFloored(pos.x, getBoundingBox().minY - (target.olderThanOrEqualTo(ProtocolVersion.v1_14_4) ? 1 : 0.5000001), pos.z)); + cir.setReturnValue(BlockPos.containing(position.x, getBoundingBox().minY - (target.olderThanOrEqualTo(ProtocolVersion.v1_14_4) ? 1 : 0.5000001), position.z)); } } - @Redirect(method = {"adjustMovementForCollisions(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Box;Ljava/util/List;)Lnet/minecraft/util/math/Vec3d;", "checkBlockCollisions"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Direction;method_73163(Lnet/minecraft/util/math/Vec3d;)Lcom/google/common/collect/ImmutableList;")) - private static ImmutableList alwaysSortYXZ(Vec3d movement) { + @Redirect(method = {"collideWithShapes(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/List;)Lnet/minecraft/world/phys/Vec3;", "checkInsideBlocks"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/core/Direction;axisStepOrder(Lnet/minecraft/world/phys/Vec3;)Lcom/google/common/collect/ImmutableList;")) + private static ImmutableList alwaysSortYXZ(Vec3 movement) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - return Direction.YXZ; + return Direction.YXZ_AXIS_ORDER; } else { - return Direction.method_73163(movement); + return Direction.axisStepOrder(movement); } } - @Redirect(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;approximatelyEquals(DD)Z")) + @Redirect(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;equal(DD)Z")) private static boolean horizontalExactCollisionEqualness(double a, double b) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { return a == b; } else { - return MathHelper.approximatelyEquals(a, b); + return Mth.equal(a, b); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinHoneyBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinHoneyBlock.java index 70c0989e8..ab8981b11 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinHoneyBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinHoneyBlock.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.HoneyBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCollisionHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.HoneyBlock; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -42,60 +42,60 @@ @Mixin(HoneyBlock.class) public abstract class MixinHoneyBlock extends Block { - public MixinHoneyBlock(final Settings settings) { + public MixinHoneyBlock(final Properties settings) { super(settings); } @Shadow - protected abstract boolean isSliding(BlockPos pos, Entity entity); + protected abstract boolean isSlidingDown(BlockPos pos, Entity entity); @Shadow - protected abstract void addCollisionEffects(World world, Entity entity); + protected abstract void maybeDoSlideEffects(Level world, Entity entity); - @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true) - private void applyBedrockHoneyCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { + @Inject(method = "entityInside", at = @At("HEAD"), cancellable = true) + private void applyBedrockHoneyCollision(BlockState state, Level world, BlockPos pos, Entity entity, InsideBlockEffectApplier handler, boolean bl, CallbackInfo ci) { if (!ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return; } ci.cancel(); - if (this.isSliding(pos, entity)) { - this.addCollisionEffects(world, entity); + if (this.isSlidingDown(pos, entity)) { + this.maybeDoSlideEffects(world, entity); } - final Vec3d velocity = entity.getVelocity(); - entity.setVelocity(new Vec3d(velocity.x * 0.4F, Math.max(-0.12F, velocity.y), velocity.z * 0.4F)); + final Vec3 velocity = entity.getDeltaMovement(); + entity.setDeltaMovement(new Vec3(velocity.x * 0.4F, Math.max(-0.12F, velocity.y), velocity.z * 0.4F)); } @Override - public void onSteppedOn(final World world, final BlockPos pos, final BlockState state, final Entity entity) { + public void stepOn(final Level world, final BlockPos pos, final BlockState state, final Entity entity) { if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - final double absoluteY = Math.abs(entity.getVelocity().y); - if (absoluteY < 0.1 && !entity.bypassesSteppingEffects()) { + final double absoluteY = Math.abs(entity.getDeltaMovement().y); + if (absoluteY < 0.1 && !entity.isSteppingCarefully()) { final double frictionFactor = 0.4 + absoluteY * 0.2; - entity.setVelocity(entity.getVelocity().multiply(frictionFactor, 1.0F, frictionFactor)); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(frictionFactor, 1.0F, frictionFactor)); } } else { - super.onSteppedOn(world, pos, state, entity); + super.stepOn(world, pos, state, entity); } } @Override - public float getSlipperiness() { - return ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) ? 0.8F : super.getSlipperiness(); + public float getFriction() { + return ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) ? 0.8F : super.getFriction(); } @Override - public float getVelocityMultiplier() { - return ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) ? 1F : super.getVelocityMultiplier(); + public float getSpeedFactor() { + return ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) ? 1F : super.getSpeedFactor(); } @Override - public float getJumpVelocityMultiplier() { - return ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) ? 0.6F : super.getJumpVelocityMultiplier(); + public float getJumpFactor() { + return ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) ? 0.6F : super.getJumpFactor(); } - @Inject(method = {"getOldVelocityY", "getNewVelocityY"}, at = @At("HEAD"), cancellable = true) + @Inject(method = {"getOldDeltaY", "getNewDeltaY"}, at = @At("HEAD"), cancellable = true) private static void simplifyVelocityComparisons(double d, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { cir.setReturnValue(d); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLivingEntity.java index cc809720a..2d18f7764 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLivingEntity.java @@ -24,15 +24,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Optional; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.TrapdoorBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.registry.tag.BlockTags; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.tags.BlockTags; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -46,48 +46,48 @@ public abstract class MixinLivingEntity extends Entity { @Shadow - private Optional climbingPos; + private Optional lastClimbablePos; - public MixinLivingEntity(final EntityType type, final World world) { + public MixinLivingEntity(final EntityType type, final Level world) { super(type, world); } @Shadow - protected abstract boolean canEnterTrapdoor(final BlockPos pos, final BlockState state); + protected abstract boolean trapdoorUsableAsLadder(final BlockPos pos, final BlockState state); - @Redirect(method = "applyMovementInput", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/LivingEntity;wasInPowderSnow:Z")) + @Redirect(method = "handleRelativeFrictionAndCalculateMovement", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/LivingEntity;wasInPowderSnow:Z")) private boolean dontCheckLastTick(LivingEntity instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - return this.getBlockStateAtPos().isOf(Blocks.POWDER_SNOW); + return this.getInBlockState().is(Blocks.POWDER_SNOW); } else { return instance.wasInPowderSnow; } } - @Inject(method = "tickCramming", at = @At("HEAD"), cancellable = true) + @Inject(method = "pushEntities", at = @At("HEAD"), cancellable = true) private void preventEntityPush(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { ci.cancel(); } } - @Inject(method = "canEnterTrapdoor", at = @At("HEAD"), cancellable = true) + @Inject(method = "trapdoorUsableAsLadder", at = @At("HEAD"), cancellable = true) private void disableCrawling(CallbackInfoReturnable ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { ci.setReturnValue(false); } } - @Inject(method = "isClimbing", at = @At("RETURN"), cancellable = true) + @Inject(method = "onClimbable", at = @At("RETURN"), cancellable = true) private void allowGappedLadderClimb(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThan(LegacyProtocolVersion.b1_5tob1_5_2) && !cir.getReturnValueZ() && !this.isSpectator()) { - final BlockPos blockPos = this.getBlockPos().up(); - final BlockState blockState = this.getEntityWorld().getBlockState(blockPos); - if (blockState.isIn(BlockTags.CLIMBABLE)) { - this.climbingPos = Optional.of(blockPos); + final BlockPos blockPos = this.blockPosition().above(); + final BlockState blockState = this.level().getBlockState(blockPos); + if (blockState.is(BlockTags.CLIMBABLE)) { + this.lastClimbablePos = Optional.of(blockPos); cir.setReturnValue(true); - } else if (blockState.getBlock() instanceof TrapdoorBlock && this.canEnterTrapdoor(blockPos, blockState)) { - this.climbingPos = Optional.of(blockPos); + } else if (blockState.getBlock() instanceof TrapDoorBlock && this.trapdoorUsableAsLadder(blockPos, blockState)) { + this.lastClimbablePos = Optional.of(blockPos); cir.setReturnValue(true); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLocalPlayer.java similarity index 81% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLocalPlayer.java index 83ea80d84..68ceb3955 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinLocalPlayer.java @@ -23,18 +23,18 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.util.math.Vec3d; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.phys.Vec3; 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.CallbackInfoReturnable; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer { - @Inject(method = "hasCollidedSoftly", at = @At("HEAD"), cancellable = true) - private void neverCollideSoftly(Vec3d adjustedMovement, CallbackInfoReturnable cir) { + @Inject(method = "isHorizontalCollisionMinor", at = @At("HEAD"), cancellable = true) + private void neverCollideSoftly(Vec3 adjustedMovement, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) { cir.setReturnValue(false); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinVoxelShapes.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinShapes.java similarity index 82% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinVoxelShapes.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinShapes.java index b1cd8eb28..49c086c02 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinVoxelShapes.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinShapes.java @@ -23,24 +23,24 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Direction; -import net.minecraft.util.shape.VoxelShape; -import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.phys.AABB; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraft.world.phys.shapes.Shapes; 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.CallbackInfoReturnable; -@Mixin(VoxelShapes.class) -public abstract class MixinVoxelShapes { +@Mixin(Shapes.class) +public abstract class MixinShapes { - @Inject(method = "calculateMaxOffset", at = @At("HEAD"), cancellable = true) - private static void calculateMaxOffset1_12_2(Direction.Axis axis, Box box, Iterable shapes, double maxDist, CallbackInfoReturnable cir) { + @Inject(method = "collide", at = @At("HEAD"), cancellable = true) + private static void calculateMaxOffset1_12_2(Direction.Axis axis, AABB box, Iterable shapes, double maxDist, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { for (final VoxelShape shape : shapes) { - for (final Box shapeBox : shape.getBoundingBoxes()) { + for (final AABB shapeBox : shape.toAabbs()) { maxDist = switch (axis) { case X -> viaFabricPlus$intersectX(box, shapeBox, maxDist); case Y -> viaFabricPlus$intersectY(box, shapeBox, maxDist); @@ -53,7 +53,7 @@ private static void calculateMaxOffset1_12_2(Direction.Axis axis, Box box, Itera } @Unique - private static double viaFabricPlus$intersectX(final Box box, final Box shapeBox, double maxDist) { + private static double viaFabricPlus$intersectX(final AABB box, final AABB shapeBox, double maxDist) { if (box.maxY <= shapeBox.minY || box.minY >= shapeBox.maxY || box.maxZ <= shapeBox.minZ || box.minZ >= shapeBox.maxZ) { return maxDist; } @@ -71,7 +71,7 @@ private static void calculateMaxOffset1_12_2(Direction.Axis axis, Box box, Itera } @Unique - private static double viaFabricPlus$intersectY(final Box playerBox, final Box shapeBox, double maxDist) { + private static double viaFabricPlus$intersectY(final AABB playerBox, final AABB shapeBox, double maxDist) { if (playerBox.maxX <= shapeBox.minX || playerBox.minX >= shapeBox.maxX || playerBox.maxZ <= shapeBox.minZ || playerBox.minZ >= shapeBox.maxZ) { return maxDist; } @@ -89,7 +89,7 @@ private static void calculateMaxOffset1_12_2(Direction.Axis axis, Box box, Itera } @Unique - private static double viaFabricPlus$intersectZ(final Box playerBox, final Box shapeBox, double maxDist) { + private static double viaFabricPlus$intersectZ(final AABB playerBox, final AABB shapeBox, double maxDist) { if (playerBox.maxX <= shapeBox.minX || playerBox.minX >= shapeBox.maxX || playerBox.maxY <= shapeBox.minY || playerBox.minY >= shapeBox.maxY) { return maxDist; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinSoulSandBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinSoulSandBlock.java index 2fbec0af5..b3a408bc4 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinSoulSandBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/collision/MixinSoulSandBlock.java @@ -23,32 +23,32 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.SoulSandBlock; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCollisionHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.SoulSandBlock; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.InsideBlockEffectApplier; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; @Mixin(SoulSandBlock.class) public abstract class MixinSoulSandBlock extends Block { - public MixinSoulSandBlock(Settings settings) { + public MixinSoulSandBlock(Properties settings) { super(settings); } @Override - protected void onEntityCollision(final BlockState state, final World world, final BlockPos pos, final Entity entity, final EntityCollisionHandler handler, final boolean bl) { + protected void entityInside(final BlockState state, final Level world, final BlockPos pos, final Entity entity, final InsideBlockEffectApplier handler, final boolean bl) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - entity.setVelocity(entity.getVelocity().multiply(0.4D, 1, 0.4D)); + entity.setDeltaMovement(entity.getDeltaMovement().multiply(0.4D, 1, 0.4D)); } } @Override - public float getVelocityMultiplier() { - return ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4) ? 1F : super.getVelocityMultiplier(); + public float getSpeedFactor() { + return ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4) ? 1F : super.getSpeedFactor(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerLikeEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinAvatar.java similarity index 68% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerLikeEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinAvatar.java index 6fd2915d9..3d473b4ce 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerLikeEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinAvatar.java @@ -23,32 +23,32 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityAttachmentType; -import net.minecraft.entity.EntityAttachments; -import net.minecraft.entity.EntityDimensions; -import net.minecraft.entity.EntityPose; -import net.minecraft.entity.PlayerLikeEntity; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.EntityAttachment; +import net.minecraft.world.entity.EntityAttachments; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.Pose; +import net.minecraft.world.entity.Avatar; +import net.minecraft.world.entity.player.Player; 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.CallbackInfoReturnable; -@Mixin(PlayerLikeEntity.class) -public abstract class MixinPlayerLikeEntity { +@Mixin(Avatar.class) +public abstract class MixinAvatar { @Unique - private static final EntityDimensions viaFabricPlus$sneaking_dimensions_v1_13_2 = EntityDimensions.changing(0.6F, 1.65F).withEyeHeight(1.54F). - withAttachments(EntityAttachments.builder().add(EntityAttachmentType.VEHICLE, PlayerEntity.VEHICLE_ATTACHMENT)); + private static final EntityDimensions viaFabricPlus$sneaking_dimensions_v1_13_2 = EntityDimensions.scalable(0.6F, 1.65F).withEyeHeight(1.54F). + withAttachments(EntityAttachments.builder().attach(EntityAttachment.VEHICLE, Player.DEFAULT_VEHICLE_ATTACHMENT)); @Unique - private static final EntityDimensions viaFabricPlus$sneaking_dimensions_v1_8 = EntityDimensions.changing(0.6F, 1.8F).withEyeHeight(1.54F). - withAttachments(EntityAttachments.builder().add(EntityAttachmentType.VEHICLE, PlayerEntity.VEHICLE_ATTACHMENT)); + private static final EntityDimensions viaFabricPlus$sneaking_dimensions_v1_8 = EntityDimensions.scalable(0.6F, 1.8F).withEyeHeight(1.54F). + withAttachments(EntityAttachments.builder().attach(EntityAttachment.VEHICLE, Player.DEFAULT_VEHICLE_ATTACHMENT)); - @Inject(method = "getBaseDimensions", at = @At("HEAD"), cancellable = true) - private void modifyDimensions(EntityPose pose, CallbackInfoReturnable cir) { - if (pose == EntityPose.CROUCHING) { + @Inject(method = "getDefaultDimensions", at = @At("HEAD"), cancellable = true) + private void modifyDimensions(Pose pose, CallbackInfoReturnable cir) { + if (pose == Pose.CROUCHING) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(viaFabricPlus$sneaking_dimensions_v1_8); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerEntityRenderer.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinAvatarRenderer.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerEntityRenderer.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinAvatarRenderer.java index 61c0e6296..19e185143 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerEntityRenderer.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinAvatarRenderer.java @@ -23,11 +23,11 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.render.entity.PlayerEntityRenderer; -import net.minecraft.client.render.entity.state.PlayerEntityRenderState; -import net.minecraft.entity.EntityPose; -import net.minecraft.util.math.Direction; -import net.minecraft.util.math.Vec3d; +import net.minecraft.client.renderer.entity.player.AvatarRenderer; +import net.minecraft.client.renderer.entity.state.AvatarRenderState; +import net.minecraft.world.entity.Pose; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.Vec3; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -35,19 +35,19 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PlayerEntityRenderer.class) -public abstract class MixinPlayerEntityRenderer { +@Mixin(AvatarRenderer.class) +public abstract class MixinAvatarRenderer { - @Inject(method = "getPositionOffset(Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;)Lnet/minecraft/util/math/Vec3d;", at = @At("RETURN"), cancellable = true) - private void modifySleepingOffset(PlayerEntityRenderState playerEntityRenderState, CallbackInfoReturnable cir) { - if (playerEntityRenderState.pose == EntityPose.SLEEPING) { - final Direction sleepingDir = playerEntityRenderState.sleepingDirection; + @Inject(method = "getRenderOffset(Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;)Lnet/minecraft/world/phys/Vec3;", at = @At("RETURN"), cancellable = true) + private void modifySleepingOffset(AvatarRenderState playerEntityRenderState, CallbackInfoReturnable cir) { + if (playerEntityRenderState.pose == Pose.SLEEPING) { + final Direction sleepingDir = playerEntityRenderState.bedOrientation; if (sleepingDir != null) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - cir.setReturnValue(cir.getReturnValue().subtract(sleepingDir.getOffsetX() * 0.4, 0, sleepingDir.getOffsetZ() * 0.4)); + cir.setReturnValue(cir.getReturnValue().subtract(sleepingDir.getStepX() * 0.4, 0, sleepingDir.getStepZ() * 0.4)); } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_5tob1_5_2)) { - cir.setReturnValue(cir.getReturnValue().subtract(sleepingDir.getOffsetX() * 0.1, 0, sleepingDir.getOffsetZ() * 0.1)); + cir.setReturnValue(cir.getReturnValue().subtract(sleepingDir.getStepX() * 0.1, 0, sleepingDir.getStepZ() * 0.1)); } if (ProtocolTranslator.getTargetVersion().betweenInclusive(LegacyProtocolVersion.b1_6tob1_6_6, ProtocolVersion.v1_7_6)) { cir.setReturnValue(cir.getReturnValue().subtract(0, 0.3F, 0)); @@ -56,10 +56,10 @@ private void modifySleepingOffset(PlayerEntityRenderState playerEntityRenderStat } } - @Redirect(method = "getPositionOffset(Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;)Lnet/minecraft/util/math/Vec3d;", - at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;isInSneakingPose:Z")) - private boolean disableSneakPositionOffset(PlayerEntityRenderState instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_11_1) && instance.isInSneakingPose; + @Redirect(method = "getRenderOffset(Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;)Lnet/minecraft/world/phys/Vec3;", + at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;isCrouching:Z")) + private boolean disableSneakPositionOffset(AvatarRenderState instance) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_11_1) && instance.isCrouching; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinEntity.java index dee196883..f66b59bc2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; +import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Constant; @@ -34,7 +34,7 @@ @Mixin(Entity.class) public abstract class MixinEntity { - @ModifyConstant(method = "checkBlockCollision", constant = @Constant(doubleValue = 9.999999747378752E-6)) + @ModifyConstant(method = "checkInsideBlocks(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/entity/InsideBlockEffectApplier$StepBasedCollector;Lit/unimi/dsi/fastutil/longs/LongSet;I)I", constant = @Constant(doubleValue = 9.999999747378752E-6)) private double fixBlockCollisionMargin(double constant) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_1)) { return 1E-3; @@ -45,7 +45,7 @@ private double fixBlockCollisionMargin(double constant) { } } - @ModifyConstant(method = "movementInputToVelocity", constant = @Constant(doubleValue = 1E-7)) + @ModifyConstant(method = "getInputVector", constant = @Constant(doubleValue = 1E-7)) private static double fixVelocityEpsilon(double epsilon) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { return 1E-4; @@ -54,7 +54,7 @@ private static double fixVelocityEpsilon(double epsilon) { } } - @Inject(method = "getTargetingMargin", at = @At("HEAD"), cancellable = true) + @Inject(method = "getPickRadius", at = @At("HEAD"), cancellable = true) private void expandHitBox(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(0.1F); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLivingEntity.java index 94dffff2c..e9ad7a7d0 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLivingEntity.java @@ -24,7 +24,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; +import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Constant; @@ -33,7 +33,7 @@ @Mixin(value = LivingEntity.class, priority = 999 /* Workaround for https://github.com/ViaVersion/ViaFabricPlus/issues/684 */) public abstract class MixinLivingEntity { - @ModifyExpressionValue(method = "tickStatusEffects", at = @At(value = "CONSTANT", args = "intValue=4")) + @ModifyExpressionValue(method = "tickEffects", at = @At(value = "CONSTANT", args = "intValue=4")) private int changeParticleDensity(int original) { if (ProtocolTranslator.getTargetVersion().olderThan(ProtocolVersion.v1_20_5)) { return 2; @@ -42,7 +42,7 @@ private int changeParticleDensity(int original) { } } - @ModifyConstant(method = "tickMovement", constant = @Constant(doubleValue = 0.003D)) + @ModifyConstant(method = "aiStep", constant = @Constant(doubleValue = 0.003D)) private double modifyVelocityZero(double constant) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { return 0.005D; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLocalPlayer.java similarity index 81% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLocalPlayer.java index 58f5a3ebb..1f1e3af5f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinLocalPlayer.java @@ -23,21 +23,21 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer { - @Redirect(method = "sendMovementPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;square(D)D")) + @Redirect(method = "sendPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;square(D)D")) private double changeMagnitude(double n) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18)) { return 9.0E-4D; } else { - return MathHelper.square(n); + return Mth.square(n); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayer.java similarity index 68% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayer.java index 8fec111f4..e3169e7ec 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/constants/MixinPlayer.java @@ -23,25 +23,25 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.Box; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.level.Level; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity extends LivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends LivingEntity { - protected MixinPlayerEntity(final EntityType entityType, final World world) { + protected MixinPlayer(final EntityType entityType, final Level world) { super(entityType, world); } - @Inject(method = "isSpaceAroundPlayerEmpty", at = @At("HEAD"), cancellable = true) + @Inject(method = "canFallAtLeast", at = @At("HEAD"), cancellable = true) private void changeOffsetsForSneakingCollisionDetection(double offsetX, double offsetZ, double d, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { final double constant; @@ -50,17 +50,17 @@ private void changeOffsetsForSneakingCollisionDetection(double offsetX, double o } else { constant = 1.0E-5F; } - final Box box = getBoundingBox(); - cir.setReturnValue(getEntityWorld().isSpaceEmpty(this, new Box(box.minX + offsetX, box.minY - d - constant, box.minZ + offsetZ, box.maxX + offsetX, box.minY, box.maxZ + offsetZ))); + final AABB box = getBoundingBox(); + cir.setReturnValue(level().noCollision(this, new AABB(box.minX + offsetX, box.minY - d - constant, box.minZ + offsetZ, box.maxX + offsetX, box.minY, box.maxZ + offsetZ))); } } - @Redirect(method = "adjustMovementForSneaking", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;getStepHeight()F")) - private float modifyStepHeight(PlayerEntity instance) { + @Redirect(method = "maybeBackOffFromEdge", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;maxUpStep()F")) + private float modifyStepHeight(Player instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_10)) { return 1.0F; } else { - return instance.getStepHeight(); + return instance.maxUpStep(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinFireworkRocketItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinFireworkRocketItem.java index 9a065ea89..4a94a0f94 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinFireworkRocketItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinFireworkRocketItem.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.FireworkRocketItem; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.FireworkRocketItem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -32,9 +32,9 @@ @Mixin(FireworkRocketItem.class) public abstract class MixinFireworkRocketItem { - @Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isGliding()Z", ordinal = 0)) - private boolean disableFireworkElytraBoost(PlayerEntity player) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_11) && player.isGliding(); + @Redirect(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isFallFlying()Z", ordinal = 0)) + private boolean disableFireworkElytraBoost(Player player) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_11) && player.isFallFlying(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLivingEntity.java index 6f67812ce..636c565aa 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLivingEntity.java @@ -23,13 +23,13 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.core.Holder; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -37,32 +37,32 @@ @Mixin(LivingEntity.class) public abstract class MixinLivingEntity extends Entity { - public MixinLivingEntity(EntityType type, World world) { + public MixinLivingEntity(EntityType type, Level world) { super(type, world); } - @Redirect(method = "travelGliding", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;isClimbing()Z")) + @Redirect(method = "travelFallFlying", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;onClimbable()Z")) private boolean dontStopGlidingWhenClimbing(LivingEntity instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_4) && instance.isClimbing(); + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_4) && instance.onClimbable(); } - @Redirect(method = "calcGlidingVelocity", at = @At(value = "INVOKE", target = "Ljava/lang/Math;cos(D)D", remap = false)) + @Redirect(method = "updateFallFlyingMovement", at = @At(value = "INVOKE", target = "Ljava/lang/Math;cos(D)D", remap = false)) private double fixCosTable(double a) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18)) { - return MathHelper.cos((float) a); + return Mth.cos((float) a); } else { return Math.cos(a); } } - @Redirect(method = "canGlide", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;hasStatusEffect(Lnet/minecraft/registry/entry/RegistryEntry;)Z")) - private boolean allowElytraWhenLevitating(LivingEntity instance, RegistryEntry effect) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_15_2) && instance.hasStatusEffect(effect); + @Redirect(method = "canGlide", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;hasEffect(Lnet/minecraft/core/Holder;)Z")) + private boolean allowElytraWhenLevitating(LivingEntity instance, Holder effect) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_15_2) && instance.hasEffect(effect); } - @Redirect(method = "canGlide", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;hasVehicle()Z")) + @Redirect(method = "canGlide", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isPassenger()Z")) private boolean allowElytraInVehicle(LivingEntity instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_4) && instance.hasVehicle(); + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_4) && instance.isPassenger(); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLocalPlayer.java similarity index 75% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLocalPlayer.java index a5d8a2078..c43d268dd 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinLocalPlayer.java @@ -25,20 +25,20 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @ModifyExpressionValue(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isClimbing()Z")) + @ModifyExpressionValue(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;onClimbable()Z")) private boolean allowElytraWhenClimbing(boolean original) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_15_1) && original; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinPlayer.java similarity index 68% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinPlayer.java index a42d2a5ea..0057e7ba2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/elytra/MixinPlayer.java @@ -23,31 +23,31 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity extends LivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends LivingEntity { - protected MixinPlayerEntity(EntityType entityType, World world) { + protected MixinPlayer(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "checkGliding", at = @At("HEAD"), cancellable = true) + @Inject(method = "tryToStartFallFlying", at = @At("HEAD"), cancellable = true) private void replaceGlidingCondition(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - if (!this.isOnGround() && this.getVelocity().y < 0D && !this.isGliding()) { - final ItemStack itemStack = this.getEquippedStack(EquipmentSlot.CHEST); - if (itemStack.isOf(Items.ELYTRA) && canGlideWith(itemStack, EquipmentSlot.CHEST)) { + if (!this.onGround() && this.getDeltaMovement().y < 0D && !this.isFallFlying()) { + final ItemStack itemStack = this.getItemBySlot(EquipmentSlot.CHEST); + if (itemStack.is(Items.ELYTRA) && canGlideUsing(itemStack, EquipmentSlot.CHEST)) { cir.setReturnValue(true); return; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLivingEntity.java index 74f1a19ab..4fd9270e2 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLivingEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; +import net.minecraft.world.entity.LivingEntity; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,9 +39,9 @@ public abstract class MixinLivingEntity { protected boolean jumping; @Shadow - private int jumpingCooldown; + private int noJumpDelay; - @Redirect(method = "jump", at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(DD)D")) + @Redirect(method = "jumpFromGround", at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(DD)D")) private double dontLimitJumpVelocity(double a, double b) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { return a; @@ -50,15 +50,15 @@ private double dontLimitJumpVelocity(double a, double b) { } } - @Redirect(method = "applyMovementInput", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/LivingEntity;jumping:Z")) + @Redirect(method = "handleRelativeFrictionAndCalculateMovement", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/LivingEntity;jumping:Z")) private boolean disableJumpOnLadder(LivingEntity self) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_13_2) && jumping; } - @Inject(method = "tickMovement", at = @At("HEAD")) + @Inject(method = "aiStep", at = @At("HEAD")) private void removeJumpDelay(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThan(LegacyProtocolVersion.r1_0_0tor1_0_1)) { - this.jumpingCooldown = 0; + this.noJumpDelay = 0; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLocalPlayer.java similarity index 70% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLocalPlayer.java index 44ce43fa4..af12e4b0f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/jump/MixinLocalPlayer.java @@ -25,34 +25,34 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @WrapWithCondition(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;jump()V")) - private boolean dontJumpBeforeFlying(ClientPlayerEntity instance) { + @WrapWithCondition(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;jumpFromGround()V")) + private boolean dontJumpBeforeFlying(LocalPlayer instance) { return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_5); } - @Redirect(method = "autoJump", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;inverseSqrt(F)F")) + @Redirect(method = "updateAutoJump", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;invSqrt(F)F")) private float useFastInverseSqrt(float x) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_3)) { x = Float.intBitsToFloat(1597463007 - (Float.floatToIntBits(x) >> 1)); return x * (1.5F - (0.5F * x) * x * x); } else { - return MathHelper.inverseSqrt(x); + return Mth.invSqrt(x); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinLivingEntity.java index 61956e06b..5a9fe5c0c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinLivingEntity.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.core.Holder; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -39,14 +39,14 @@ @Mixin(LivingEntity.class) public abstract class MixinLivingEntity extends Entity { - public MixinLivingEntity(EntityType type, World world) { + public MixinLivingEntity(EntityType type, Level world) { super(type, world); } @Shadow - public abstract boolean hasStatusEffect(RegistryEntry effect); + public abstract boolean hasEffect(Holder effect); - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Ljava/lang/Object;equals(Ljava/lang/Object;)Z")) + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Ljava/lang/Object;equals(Ljava/lang/Object;)Z")) private boolean useEuclideanDistanceCalculation(Object instance, Object o) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4) && instance instanceof EntityType) { return false; @@ -55,20 +55,20 @@ private boolean useEuclideanDistanceCalculation(Object instance, Object o) { } } - @Redirect(method = "travelMidAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;isChunkLoaded(Lnet/minecraft/util/math/BlockPos;)Z")) - private boolean modifyLoadedCheck(World instance, BlockPos blockPos) { + @Redirect(method = "travelInAir", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;hasChunkAt(Lnet/minecraft/core/BlockPos;)Z")) + private boolean modifyLoadedCheck(Level instance, BlockPos blockPos) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - return this.getEntityWorld().isChunkLoaded(blockPos) && instance.getChunkManager().isChunkLoaded(blockPos.getX() >> 4, blockPos.getZ() >> 4); + return this.level().hasChunkAt(blockPos) && instance.getChunkSource().hasChunk(blockPos.getX() >> 4, blockPos.getZ() >> 4); } else { - return this.getEntityWorld().isChunkLoaded(blockPos); + return this.level().hasChunkAt(blockPos); } } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;onLanding()V")) + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;resetFallDistance()V")) private void dontResetLevitationFallDistance(LivingEntity instance) { // Only needed when mods calculate the fall distance on the clientside - if (this.hasStatusEffect(StatusEffects.SLOW_FALLING) || ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2)) { - instance.onLanding(); + if (this.hasEffect(MobEffects.SLOW_FALLING) || ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2)) { + instance.resetFallDistance(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinPlayer.java similarity index 62% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinPlayer.java index 317f65560..6e3bef081 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/MixinPlayer.java @@ -24,12 +24,12 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -37,35 +37,35 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity extends LivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends LivingEntity { - protected MixinPlayerEntity(EntityType entityType, World world) { + protected MixinPlayer(EntityType entityType, Level world) { super(entityType, world); } - @Redirect(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;setVelocity(Lnet/minecraft/util/math/Vec3d;)V", ordinal = 1)) - private void removeFlySlipperiness(PlayerEntity instance, Vec3d vec3d, @Local(argsOnly = true) Vec3d movementInput) { - if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && movementInput.horizontalLengthSquared() == 0) { - instance.setVelocity(new Vec3d(0, vec3d.y, 0)); + @Redirect(method = "travel", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;setDeltaMovement(Lnet/minecraft/world/phys/Vec3;)V", ordinal = 1)) + private void removeFlySlipperiness(Player instance, Vec3 vec3d, @Local(argsOnly = true) Vec3 movementInput) { + if (ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest) && movementInput.horizontalDistanceSqr() == 0) { + instance.setDeltaMovement(new Vec3(0, vec3d.y, 0)); } else { - instance.setVelocity(vec3d); + instance.setDeltaMovement(vec3d); } } - @Inject(method = "isClimbing", at = @At("HEAD"), cancellable = true) + @Inject(method = "onClimbable", at = @At("HEAD"), cancellable = true) private void allowClimbingWhileFlying(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - cir.setReturnValue(super.isClimbing()); + cir.setReturnValue(super.onClimbable()); } } - @Redirect(method = "canChangeIntoPose", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Box;contract(D)Lnet/minecraft/util/math/Box;")) - private Box removeContractionOfCollisionBox(Box instance, double value) { + @Redirect(method = "canPlayerFitWithinBlocksAndEntitiesWhen", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/AABB;deflate(D)Lnet/minecraft/world/phys/AABB;")) + private AABB removeContractionOfCollisionBox(AABB instance, double value) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { return instance; } else { - return instance.contract(value); + return instance.deflate(value); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinEntity.java index 719f359bc..d930eb607 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinEntity.java @@ -23,9 +23,9 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.Vec3d; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -35,7 +35,7 @@ @Mixin(Entity.class) public abstract class MixinEntity { - @Redirect(method = "setPitch", at = @At(value = "INVOKE", target = "Ljava/lang/Math;clamp(FFF)F", remap = false)) + @Redirect(method = "setXRot", at = @At(value = "INVOKE", target = "Ljava/lang/Math;clamp(FFF)F", remap = false)) private float dontClampPitch(float value, float min, float max) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { return value; @@ -44,16 +44,16 @@ private float dontClampPitch(float value, float min, float max) { } } - @Redirect(method = {"setYaw", "setPitch"}, at = @At(value = "INVOKE", target = "Ljava/lang/Float;isFinite(F)Z")) + @Redirect(method = {"setYRot", "setXRot"}, at = @At(value = "INVOKE", target = "Ljava/lang/Float;isFinite(F)Z")) private boolean allowInfiniteValues(float f) { - return Float.isFinite(f) || ((Object) this instanceof ClientPlayerEntity && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)); + return Float.isFinite(f) || ((Object) this instanceof LocalPlayer && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)); } - @Inject(method = "getRotationVector(FF)Lnet/minecraft/util/math/Vec3d;", at = @At("HEAD"), cancellable = true) - private void revertCalculation(float pitch, float yaw, CallbackInfoReturnable cir) { + @Inject(method = "calculateViewVector(FF)Lnet/minecraft/world/phys/Vec3;", at = @At("HEAD"), cancellable = true) + private void revertCalculation(float pitch, float yaw, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(Vec3d.fromPolar(pitch, yaw)); + cir.setReturnValue(Vec3.directionFromRotation(pitch, yaw)); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinPlayer.java similarity index 80% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinPlayer.java index 0566d6ce6..04bd6a632 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/limitation/rotation/MixinPlayer.java @@ -23,17 +23,17 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity { +@Mixin(Player.class) +public abstract class MixinPlayer { - @Redirect(method = "getMaxRelativeHeadRotation", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isBlocking()Z")) - private boolean dontModifyHeadRotationWhenBlocking(PlayerEntity instance) { + @Redirect(method = "getMaxHeadRotationRelativeToBody", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isBlocking()Z")) + private boolean dontModifyHeadRotationWhenBlocking(Player instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_2) && instance.isBlocking(); } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinLocalPlayer.java similarity index 57% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinLocalPlayer.java index 1363ac7a4..cf8fe5105 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinLocalPlayer.java @@ -24,11 +24,11 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.input.Input; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.ClientInput; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -36,50 +36,50 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { @Shadow - public Input input; + public ClientInput input; @Shadow @Final - protected MinecraftClient client; + protected Minecraft minecraft; @Shadow - private int ticksSinceLastPositionPacketSent; + private int positionReminder; @Shadow private boolean lastOnGround; - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @Redirect(method = "sendMovementPackets", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayerEntity;lastOnGround:Z", ordinal = 0)) - private boolean sendIdlePacket(ClientPlayerEntity instance) { + @Redirect(method = "sendPosition", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;lastOnGround:Z", ordinal = 0)) + private boolean sendIdlePacket(LocalPlayer instance) { if (ProtocolTranslator.getTargetVersion().betweenInclusive(LegacyProtocolVersion.r1_4_2, ProtocolVersion.v1_8) || ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_2_4tor1_2_5)) { - return !isOnGround(); + return !onGround(); } else { return this.lastOnGround; } } - @Redirect(method = "sendMovementPackets", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayerEntity;ticksSinceLastPositionPacketSent:I", ordinal = 0)) - private int moveLastPosPacketIncrement(ClientPlayerEntity instance) { + @Redirect(method = "sendPosition", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;positionReminder:I", ordinal = 0)) + private int moveLastPosPacketIncrement(LocalPlayer instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - return this.ticksSinceLastPositionPacketSent - 1; // Reverting original operation + return this.positionReminder - 1; // Reverting original operation } else { - return this.ticksSinceLastPositionPacketSent; + return this.positionReminder; } } - @Redirect(method = "sendMovementPackets", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ClientPlayerEntity;ticksSinceLastPositionPacketSent:I", ordinal = 2)) - private int moveLastPosPacketIncrement2(ClientPlayerEntity instance) { + @Redirect(method = "sendPosition", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;positionReminder:I", ordinal = 2)) + private int moveLastPosPacketIncrement2(LocalPlayer instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - return this.ticksSinceLastPositionPacketSent++; // Return previous value, then increment + return this.positionReminder++; // Return previous value, then increment } else { - return this.ticksSinceLastPositionPacketSent; + return this.positionReminder; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinEntityPosition.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinPositionMoveRotation.java similarity index 82% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinEntityPosition.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinPositionMoveRotation.java index 1d64d1171..2a585789b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinEntityPosition.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/packet/MixinPositionMoveRotation.java @@ -23,21 +23,21 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityPosition; -import net.minecraft.util.math.MathHelper; +import net.minecraft.world.entity.PositionMoveRotation; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(EntityPosition.class) -public abstract class MixinEntityPosition { +@Mixin(PositionMoveRotation.class) +public abstract class MixinPositionMoveRotation { - @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;clamp(FFF)F")) + @Redirect(method = "calculateAbsolute", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F")) private static float uncapPlayerPitchMovement(float value, float min, float max) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { return value; } else { - return MathHelper.clamp(value, min, max); + return Mth.clamp(value, min, max); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinEnderEyeItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinEnderEyeItem.java index 5cb3b4125..ac5698bcb 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinEnderEyeItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinEnderEyeItem.java @@ -24,17 +24,17 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.EnderEyeItem; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.EnderEyeItem; +import net.minecraft.world.InteractionHand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(EnderEyeItem.class) public abstract class MixinEnderEyeItem { - @WrapWithCondition(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;setCurrentHand(Lnet/minecraft/util/Hand;)V")) - private boolean removeItemSlowdown(PlayerEntity instance, Hand hand) { + @WrapWithCondition(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;startUsingItem(Lnet/minecraft/world/InteractionHand;)V")) + private boolean removeItemSlowdown(Player instance, InteractionHand hand) { return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_11); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinLocalPlayer.java similarity index 61% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinLocalPlayer.java index 10c0e356e..168100f00 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/slowdown/MixinLocalPlayer.java @@ -24,12 +24,12 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.input.Input; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.util.math.Vec2f; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.ClientInput; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.phys.Vec2; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -38,36 +38,36 @@ import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { @Shadow - public Input input; + public ClientInput input; - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @Redirect(method = "applyMovementSpeedFactors", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;shouldSlowDown()Z")) - private boolean changeSneakSlowdownCondition(ClientPlayerEntity instance) { + @Redirect(method = "modifyInput", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isMovingSlowly()Z")) + private boolean changeSneakSlowdownCondition(LocalPlayer instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - return instance.input.playerInput.sneak(); + return instance.input.keyPresses.shift(); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - return !MinecraftClient.getInstance().player.isSpectator() && (instance.input.playerInput.sneak() || instance.shouldSlowDown()); + return !Minecraft.getInstance().player.isSpectator() && (instance.input.keyPresses.shift() || instance.isMovingSlowly()); } else { - return instance.shouldSlowDown(); + return instance.isMovingSlowly(); } } - @Inject(method = "tickMovement()V", - slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isCamera()Z")), - at = @At(value = "INVOKE", target = "Lnet/minecraft/util/PlayerInput;sneak()Z", ordinal = 0)) + @Inject(method = "aiStep()V", + slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isControlledCamera()Z")), + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Input;shift()Z", ordinal = 0)) private void undoSneakSlowdownForFly(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_9, ProtocolVersion.v1_14_4)) { - if (this.input.playerInput.sneak()) { - final float movementSideways = (float) ((double) this.input.movementVector.x / 0.3D); - final float movementForward = (float) ((double) this.input.movementVector.y / 0.3D); - this.input.movementVector = new Vec2f(movementSideways, movementForward); + if (this.input.keyPresses.shift()) { + final float movementSideways = (float) ((double) this.input.moveVector.x / 0.3D); + final float movementForward = (float) ((double) this.input.moveVector.y / 0.3D); + this.input.moveVector = new Vec2(movementSideways, movementForward); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinKeyboardInput.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinKeyboardInput.java index 16a908300..f145d6b36 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinKeyboardInput.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinKeyboardInput.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.input.KeyboardInput; -import net.minecraft.util.math.Vec2f; +import net.minecraft.client.player.KeyboardInput; +import net.minecraft.world.phys.Vec2; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -32,12 +32,12 @@ @Mixin(KeyboardInput.class) public abstract class MixinKeyboardInput { - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec2f;normalize()Lnet/minecraft/util/math/Vec2f;")) - private Vec2f simplifyDiagonalMovementSpeedValues(Vec2f instance) { + @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec2;normalized()Lnet/minecraft/world/phys/Vec2;")) + private Vec2 simplifyDiagonalMovementSpeedValues(Vec2 instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { return instance; } else { - return instance.normalize(); + return instance.normalized(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLivingEntity.java index 1c1cfef15..01765bf51 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLivingEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; +import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -34,16 +34,16 @@ public abstract class MixinLivingEntity { @Shadow - public float sidewaysSpeed; + public float xxa; @Shadow - public float forwardSpeed; + public float zza; - @Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;isGliding()Z")) + @Inject(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isFallFlying()Z")) private void moveMovementSpeedFactors(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - this.sidewaysSpeed *= 0.98F; - this.forwardSpeed *= 0.98F; + this.xxa *= 0.98F; + this.zza *= 0.98F; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLocalPlayer.java similarity index 53% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLocalPlayer.java index d6dc78a3f..974d25f2a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinLocalPlayer.java @@ -31,20 +31,20 @@ import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.v1_21_4to1_21_5.packet.ServerboundPackets1_21_5; import com.viaversion.viaversion.protocols.v1_21_5to1_21_6.Protocol1_21_5To1_21_6; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.input.Input; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.recipebook.ClientRecipeBook; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.PlayerInputC2SPacket; -import net.minecraft.stat.StatHandler; -import net.minecraft.util.PlayerInput; -import net.minecraft.util.math.Vec2f; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.ClientInput; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.ClientRecipeBook; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket; +import net.minecraft.stats.StatsCounter; +import net.minecraft.world.entity.player.Input; +import net.minecraft.world.phys.Vec2; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -55,172 +55,172 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { @Shadow - public Input input; + public ClientInput input; @Shadow @Final - protected MinecraftClient client; + protected Minecraft minecraft; @Shadow - protected int ticksLeftToDoubleTapSprint; + protected int sprintTriggerTime; @Shadow - private boolean inSneakingPose; + private boolean crouching; @Unique private boolean viaFabricPlus$lastSneaking; - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } @Shadow - private static Vec2f applyDirectionalMovementSpeedFactors(final Vec2f vec) { + private static Vec2 modifyInputSpeedForSquareMovement(final Vec2 vec) { return null; } @Shadow - protected abstract boolean shouldStopSprinting(); + protected abstract boolean shouldStopRunSprinting(); @Shadow - protected abstract boolean canSprint(); + protected abstract boolean hasEnoughFoodToSprint(); @Shadow - public abstract boolean shouldSlowDown(); + public abstract boolean isMovingSlowly(); @Shadow - protected abstract boolean canVehicleSprint(final Entity vehicle); + protected abstract boolean vehicleCanSprint(final Entity vehicle); @Shadow - public abstract void tickMovementInput(); + public abstract void applyInput(); @Shadow protected abstract boolean canStartSprinting(); @Shadow - protected abstract Vec2f applyMovementSpeedFactors(final Vec2f input); + protected abstract Vec2 modifyInput(final Vec2 input); @Shadow - public abstract void init(); + public abstract void resetPos(); @Shadow - public abstract boolean isSneaking(); + public abstract boolean isShiftKeyDown(); @Shadow - public abstract boolean isSubmergedInWater(); + public abstract boolean isUnderWater(); @Shadow public abstract boolean isUsingItem(); @Inject(method = "", at = @At("RETURN")) - private void initLastSneaking(MinecraftClient client, ClientWorld world, ClientPlayNetworkHandler networkHandler, StatHandler stats, ClientRecipeBook recipeBook, PlayerInput lastPlayerInput, boolean lastSprinting, CallbackInfo ci) { - viaFabricPlus$lastSneaking = lastPlayerInput.sneak(); + private void initLastSneaking(Minecraft client, ClientLevel world, ClientPacketListener networkHandler, StatsCounter stats, ClientRecipeBook recipeBook, Input lastPlayerInput, boolean lastSprinting, CallbackInfo ci) { + viaFabricPlus$lastSneaking = lastPlayerInput.shift(); } - @Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/AbstractClientPlayerEntity;tick()V", shift = At.Shift.AFTER)) + @Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/AbstractClientPlayer;tick()V", shift = At.Shift.AFTER)) private void sendSneakingPacket(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_21_2, ProtocolVersion.v1_21_5)) { this.viaFabricPlus$sendSneakingPacket(); } } - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V", ordinal = 0)) - private void skipVVProtocol(ClientPlayNetworkHandler instance, Packet packet) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && packet instanceof PlayerInputC2SPacket( - PlayerInput i + @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 0)) + private void skipVVProtocol(ClientPacketListener instance, Packet packet) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && packet instanceof ServerboundPlayerInputPacket( + Input i )) { // Directly send the player input packet in order to bypass the code in the 1.21.5->1.21.6 protocol. // This allows mods to directly send raw packets which will then be remapped by VV instead of us. this.viaFabricPlus$sendInputPacket(i); } else { - instance.sendPacket(packet); + instance.send(packet); } } - @Redirect(method = "tickMovementInput", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;applyMovementSpeedFactors(Lnet/minecraft/util/math/Vec2f;)Lnet/minecraft/util/math/Vec2f;")) - private Vec2f moveMovementSpeedFactors(ClientPlayerEntity instance, Vec2f input) { + @Redirect(method = "applyInput", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;modifyInput(Lnet/minecraft/world/phys/Vec2;)Lnet/minecraft/world/phys/Vec2;")) + private Vec2 moveMovementSpeedFactors(LocalPlayer instance, Vec2 input) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { return input; } else { - return this.applyMovementSpeedFactors(input); + return this.modifyInput(input); } } - @Redirect(method = "applyMovementSpeedFactors", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;applyDirectionalMovementSpeedFactors(Lnet/minecraft/util/math/Vec2f;)Lnet/minecraft/util/math/Vec2f;")) - private Vec2f moveMovementSpeedFactors(Vec2f vec) { + @Redirect(method = "modifyInput", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;modifyInputSpeedForSquareMovement(Lnet/minecraft/world/phys/Vec2;)Lnet/minecraft/world/phys/Vec2;")) + private Vec2 moveMovementSpeedFactors(Vec2 vec) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { return vec; } else { - return applyDirectionalMovementSpeedFactors(vec); + return modifyInputSpeedForSquareMovement(vec); } } - @Redirect(method = "applyMovementSpeedFactors", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec2f;multiply(F)Lnet/minecraft/util/math/Vec2f;", ordinal = 0)) - private Vec2f moveMovementSpeedFactors(Vec2f instance, float value) { + @Redirect(method = "modifyInput", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec2;scale(F)Lnet/minecraft/world/phys/Vec2;", ordinal = 0)) + private Vec2 moveMovementSpeedFactors(Vec2 instance, float value) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { return instance; } else { - return instance.multiply(value); + return instance.scale(value); } } - @Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/TutorialManager;onMovement(Lnet/minecraft/client/input/Input;)V", shift = At.Shift.AFTER)) + @Inject(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/Tutorial;onInput(Lnet/minecraft/client/player/ClientInput;)V", shift = At.Shift.AFTER)) private void moveMovementSpeedFactors(CallbackInfo ci) { //... and also add this hotfix back - if (ProtocolTranslator.getTargetVersion().equals(ProtocolVersion.v1_21_4) && this.shouldStopSprinting()) { + if (ProtocolTranslator.getTargetVersion().equals(ProtocolVersion.v1_21_4) && this.shouldStopRunSprinting()) { this.setSprinting(false); } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - this.input.movementVector = this.applyMovementSpeedFactors(this.input.movementVector); + this.input.moveVector = this.modifyInput(this.input.moveVector); } } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/PlayerInput;backward()Z")) - private boolean dontResetDoubleTapTicks(PlayerInput instance) { + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Input;backward()Z")) + private boolean dontResetDoubleTapTicks(Input instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_4) && instance.backward(); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;shouldStopSprinting()Z")) - private boolean changeStopSprintingConditions(ClientPlayerEntity instance) { + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;shouldStopRunSprinting()Z")) + private boolean changeStopSprintingConditions(LocalPlayer instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - return this.viaFabricPlus$shouldCancelSprinting() || this.horizontalCollision && !this.collidedSoftly || this.isTouchingWater() && !this.isSubmergedInWater(); + return this.viaFabricPlus$shouldCancelSprinting() || this.horizontalCollision && !this.minorHorizontalCollision || this.isInWater() && !this.isUnderWater(); } else { - return this.shouldStopSprinting(); + return this.shouldStopRunSprinting(); } } - @Inject(method = "sendMovementPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;sendSprintingPacket()V", shift = At.Shift.AFTER)) + @Inject(method = "sendPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;sendIsSprintingIfNeeded()V", shift = At.Shift.AFTER)) private void sendSneakingAfterSprinting(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { this.viaFabricPlus$sendSneakingPacket(); } } - @Inject(method = "tickMovement", at = @At("HEAD")) + @Inject(method = "aiStep", at = @At("HEAD")) private void storeSprintingSneakingState(CallbackInfo ci, @Share("sneakSprint") LocalBooleanRef ref) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - ref.set(!this.input.playerInput.sneak() && !this.viaFabricPlus$isWalking1_21_4()); + ref.set(!this.input.keyPresses.shift() && !this.viaFabricPlus$isWalking1_21_4()); } } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;canStartSprinting()Z")) - private boolean changeCanStartSprintingConditions(ClientPlayerEntity instance, @Share("sneakSprint") LocalBooleanRef ref) { + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;canStartSprinting()Z")) + private boolean changeCanStartSprintingConditions(LocalPlayer instance, @Share("sneakSprint") LocalBooleanRef ref) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { final boolean canStartSprinting = this.canStartSprinting(); - final boolean onGround = this.hasVehicle() ? this.getVehicle().isOnGround() : this.isOnGround(); - if ((onGround || this.isSubmergedInWater()) && ref.get() && canStartSprinting) { - if (this.ticksLeftToDoubleTapSprint <= 0 && !this.client.options.sprintKey.isPressed()) { - this.ticksLeftToDoubleTapSprint = this.client.options.getSprintWindow().getValue(); + final boolean onGround = this.isPassenger() ? this.getVehicle().onGround() : this.onGround(); + if ((onGround || this.isUnderWater()) && ref.get() && canStartSprinting) { + if (this.sprintTriggerTime <= 0 && !this.minecraft.options.keySprint.isDown()) { + this.sprintTriggerTime = this.minecraft.options.sprintWindow().get(); } else { this.setSprinting(true); } } - if ((!this.isTouchingWater() || this.isSubmergedInWater()) && canStartSprinting && this.client.options.sprintKey.isPressed()) { + if ((!this.isInWater() || this.isUnderWater()) && canStartSprinting && this.minecraft.options.keySprint.isDown()) { this.setSprinting(true); } return false; @@ -234,14 +234,14 @@ private void changeCanStartSprintingConditions(CallbackInfoReturnable c final ProtocolVersion version = ProtocolTranslator.getTargetVersion(); if (version.olderThanOrEqualTo(ProtocolVersion.v1_21_7)) { cir.setReturnValue(!this.isSprinting() - && (version.olderThanOrEqualTo(ProtocolVersion.v1_21_4) ? this.viaFabricPlus$isWalking1_21_4() : this.input.hasForwardMovement()) - && this.canSprint() + && (version.olderThanOrEqualTo(ProtocolVersion.v1_21_4) ? this.viaFabricPlus$isWalking1_21_4() : this.input.hasForwardImpulse()) + && this.hasEnoughFoodToSprint() && !this.isUsingItem() - && !this.hasBlindnessEffect() - && (!(version.newerThan(ProtocolVersion.v1_19_3) && this.hasVehicle()) || this.canVehicleSprint(this.getVehicle())) - && (!(version.newerThan(ProtocolVersion.v1_19_3) && this.isGliding()) || this.isSubmergedInWater()) - && (!(this.shouldSlowDown() && version.equals(ProtocolVersion.v1_21_4)) || (this.isSubmergedInWater() && version.equals(ProtocolVersion.v1_21_4))) - && (!version.olderThanOrEqualTo(ProtocolVersion.v1_21_4) && (!this.isTouchingWater() || this.isSubmergedInWater()) || version.olderThanOrEqualTo(ProtocolVersion.v1_21_4))); + && !this.isMobilityRestricted() + && (!(version.newerThan(ProtocolVersion.v1_19_3) && this.isPassenger()) || this.vehicleCanSprint(this.getVehicle())) + && (!(version.newerThan(ProtocolVersion.v1_19_3) && this.isFallFlying()) || this.isUnderWater()) + && (!(this.isMovingSlowly() && version.equals(ProtocolVersion.v1_21_4)) || (this.isUnderWater() && version.equals(ProtocolVersion.v1_21_4))) + && (!version.olderThanOrEqualTo(ProtocolVersion.v1_21_4) && (!this.isInWater() || this.isUnderWater()) || version.olderThanOrEqualTo(ProtocolVersion.v1_21_4))); } } @@ -249,43 +249,43 @@ private void changeCanStartSprintingConditions(CallbackInfoReturnable c private void changeStopSwimSprintingConditions(CallbackInfoReturnable cir) { // Not needed, but for consistency and in case a mod uses this method if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { - cir.setReturnValue(!this.isOnGround() && !this.input.playerInput.sneak() && this.viaFabricPlus$shouldCancelSprinting() || !this.isTouchingWater()); + cir.setReturnValue(!this.onGround() && !this.input.keyPresses.shift() && this.viaFabricPlus$shouldCancelSprinting() || !this.isInWater()); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_7)) { - cir.setReturnValue(this.hasBlindnessEffect() || this.hasVehicle() && !this.canVehicleSprint(this.getVehicle()) - || !this.isTouchingWater() || !this.input.hasForwardMovement() && !this.isOnGround() && !this.input.playerInput.sneak() || !this.canSprint()); + cir.setReturnValue(this.isMobilityRestricted() || this.isPassenger() && !this.vehicleCanSprint(this.getVehicle()) + || !this.isInWater() || !this.input.hasForwardImpulse() && !this.onGround() && !this.input.keyPresses.shift() || !this.hasEnoughFoodToSprint()); } } - @Inject(method = "shouldStopSprinting", at = @At("HEAD"), cancellable = true) + @Inject(method = "shouldStopRunSprinting", at = @At("HEAD"), cancellable = true) private void changeStopSprintingConditions(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { final boolean ridingCamel = getVehicle() != null && getVehicle().getType() == EntityType.CAMEL; - cir.setReturnValue(this.isGliding() || this.hasBlindnessEffect() || this.shouldSlowDown() || this.hasVehicle() && !ridingCamel || this.isUsingItem() && !this.hasVehicle() && !this.isSubmergedInWater()); + cir.setReturnValue(this.isFallFlying() || this.isMobilityRestricted() || this.isMovingSlowly() || this.isPassenger() && !ridingCamel || this.isUsingItem() && !this.isPassenger() && !this.isUnderWater()); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_7)) { - cir.setReturnValue(this.hasBlindnessEffect() || this.hasVehicle() && !this.canVehicleSprint(this.getVehicle()) || !this.input.hasForwardMovement() || !this.canSprint() || this.horizontalCollision && !this.collidedSoftly || this.isTouchingWater() && !this.isSubmergedInWater()); + cir.setReturnValue(this.isMobilityRestricted() || this.isPassenger() && !this.vehicleCanSprint(this.getVehicle()) || !this.input.hasForwardImpulse() || !this.hasEnoughFoodToSprint() || this.horizontalCollision && !this.minorHorizontalCollision || this.isInWater() && !this.isUnderWater()); } } - @WrapWithCondition(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;sendSprintingPacket()V")) - private boolean removeSprintingPacket(ClientPlayerEntity instance) { + @WrapWithCondition(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;sendIsSprintingIfNeeded()V")) + private boolean removeSprintingPacket(LocalPlayer instance) { return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_19_3); } - @Redirect(method = "canSprint()Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;hasVehicle()Z")) - private boolean dontAllowSprintingAsPassenger(ClientPlayerEntity instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_19_1) && instance.hasVehicle(); + @Redirect(method = "hasEnoughFoodToSprint()Z", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isPassenger()Z")) + private boolean dontAllowSprintingAsPassenger(LocalPlayer instance) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_19_1) && instance.isPassenger(); } - @Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;tick()V")) + @Inject(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/ClientInput;tick()V")) private void removeSneakingConditions(CallbackInfo ci) { // Allows sneaking while flying, inside blocks and vehicles if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { - this.inSneakingPose = this.isSneaking() && !this.isSleeping(); + this.crouching = this.isShiftKeyDown() && !this.isSleeping(); } } @Unique private void viaFabricPlus$sendSneakingPacket() { - final boolean sneaking = this.isSneaking(); + final boolean sneaking = this.isShiftKeyDown(); if (sneaking == this.viaFabricPlus$lastSneaking) { return; } @@ -299,14 +299,14 @@ private void removeSneakingConditions(CallbackInfo ci) { // Allows sneaking whil } @Unique - private void viaFabricPlus$sendInputPacket(final PlayerInput playerInput) { + private void viaFabricPlus$sendInputPacket(final Input playerInput) { byte flags = 0; flags = (byte) (flags | (playerInput.forward() ? 0x1 : 0)); flags = (byte) (flags | (playerInput.backward() ? 0x2 : 0)); flags = (byte) (flags | (playerInput.left() ? 0x4 : 0)); flags = (byte) (flags | (playerInput.right() ? 0x8 : 0)); flags = (byte) (flags | (playerInput.jump() ? 0x10 : 0)); - flags = (byte) (flags | (playerInput.sneak() ? 0x20 : 0)); + flags = (byte) (flags | (playerInput.shift() ? 0x20 : 0)); flags = (byte) (flags | (playerInput.sprint() ? 0x40 : 0)); final PacketWrapper inputPacket = PacketWrapper.create(ServerboundPackets1_21_5.PLAYER_INPUT, ProtocolTranslator.getPlayNetworkUserConnection()); @@ -317,16 +317,16 @@ private void removeSneakingConditions(CallbackInfo ci) { // Allows sneaking whil @Unique private boolean viaFabricPlus$shouldCancelSprinting() { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_1)) { - return !(this.input.movementVector.y >= 0.8F) || !this.canSprint(); // Disables sprint sneaking + return !(this.input.moveVector.y >= 0.8F) || !this.hasEnoughFoodToSprint(); // Disables sprint sneaking } else { - return !this.input.hasForwardMovement() || !this.canSprint(); + return !this.input.hasForwardImpulse() || !this.hasEnoughFoodToSprint(); } } @Unique private boolean viaFabricPlus$isWalking1_21_4() { - final boolean submergedInWater = ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_1) && isSubmergedInWater(); - return submergedInWater ? this.input.hasForwardMovement() : this.input.movementVector.y >= 0.8; + final boolean submergedInWater = ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_1) && isUnderWater(); + return submergedInWater ? this.input.hasForwardImpulse() : this.input.moveVector.y >= 0.8; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinPlayer.java similarity index 73% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinPlayer.java index 1c4687755..bc623e753 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/sprinting_and_sneaking/MixinPlayer.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -34,23 +34,23 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity extends LivingEntity { +@Mixin(Player.class) +public abstract class MixinPlayer extends LivingEntity { @Unique public boolean viaFabricPlus$isSprinting; - protected MixinPlayerEntity(EntityType entityType, World world) { + protected MixinPlayer(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;setMovementSpeed(F)V")) + @Inject(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;setSpeed(F)V")) private void storeSprintingState(CallbackInfo ci) { viaFabricPlus$isSprinting = this.isSprinting(); } - @Redirect(method = "getOffGroundSpeed", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isSprinting()Z")) - private boolean useLastSprintingState(PlayerEntity instance) { + @Redirect(method = "getFlyingSpeed", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isSprinting()Z")) + private boolean useLastSprintingState(Player instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_3)) { return viaFabricPlus$isSprinting; } else { @@ -58,4 +58,4 @@ private boolean useLastSprintingState(PlayerEntity instance) { } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinAbstractHorseEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinAbstractHorse.java similarity index 78% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinAbstractHorseEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinAbstractHorse.java index 425e8fd48..bb92661cc 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinAbstractHorseEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinAbstractHorse.java @@ -24,17 +24,17 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.entity.passive.AnimalEntity; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.entity.animal.Animal; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(AbstractHorseEntity.class) -public abstract class MixinAbstractHorseEntity { +@Mixin(AbstractHorse.class) +public abstract class MixinAbstractHorse { - @WrapWithCondition(method = "addPassenger", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/passive/AnimalEntity;addPassenger(Lnet/minecraft/entity/Entity;)V")) - private boolean dontSetPassengerRotation(AnimalEntity instance, Entity entity) { + @WrapWithCondition(method = "addPassenger", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/animal/Animal;addPassenger(Lnet/minecraft/world/entity/Entity;)V")) + private boolean dontSetPassengerRotation(Animal instance, Entity entity) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_7); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinLocalPlayer.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinLocalPlayer.java index f9dbd9e98..3d9c12d37 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/vehicle/MixinLocalPlayer.java @@ -22,7 +22,7 @@ package com.viaversion.viafabricplus.injection.mixin.features.movement.vehicle; import com.mojang.authlib.GameProfile; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; +import com.viaversion.viafabricplus.injection.access.base.IConnection; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; @@ -31,13 +31,13 @@ import com.viaversion.viaversion.protocols.v1_20_3to1_20_5.packet.ServerboundPackets1_20_5; import com.viaversion.viaversion.protocols.v1_21to1_21_2.Protocol1_21To1_21_2; import com.viaversion.viaversion.protocols.v1_21to1_21_2.storage.ClientVehicleStorage; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.vehicle.BoatEntity; -import net.minecraft.network.packet.Packet; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.vehicle.Boat; +import net.minecraft.network.protocol.Packet; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.release.r1_5_2tor1_6_1.Protocolr1_5_2Tor1_6_1; import net.raphimc.vialegacy.protocol.release.r1_5_2tor1_6_1.packet.ServerboundPackets1_5_2; @@ -50,48 +50,48 @@ import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { @Shadow @Final - public ClientPlayNetworkHandler networkHandler; + public ClientPacketListener connection; - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;hasVehicle()Z", ordinal = 0)) - private boolean removeVehicleRequirement(ClientPlayerEntity instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20) && instance.hasVehicle(); + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isPassenger()Z", ordinal = 0)) + private boolean removeVehicleRequirement(LocalPlayer instance) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20) && instance.isPassenger(); } @Inject(method = "startRiding", at = @At("RETURN")) private void setRotationsWhenInBoat(Entity entity, boolean force, boolean emitEvent, CallbackInfoReturnable cir) { - if (cir.getReturnValueZ() && entity instanceof BoatEntity && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18)) { - this.lastYaw = entity.getYaw(); - this.setYaw(entity.getYaw()); - this.setHeadYaw(entity.getYaw()); + if (cir.getReturnValueZ() && entity instanceof Boat && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18)) { + this.yRotO = entity.getYRot(); + this.setYRot(entity.getYRot()); + this.setYHeadRot(entity.getYRot()); } } - @Redirect(method = "tick", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;hasVehicle()Z")), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V", ordinal = 0)) - private void modifyPositionPacket(ClientPlayNetworkHandler instance, Packet packet) { + @Redirect(method = "tick", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isPassenger()Z")), at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 0)) + private void modifyPositionPacket(ClientPacketListener instance, Packet packet) { if (ProtocolTranslator.getTargetVersion().newerThan(LegacyProtocolVersion.r1_5_2)) { - instance.sendPacket(packet); + instance.send(packet); return; } - final UserConnection connection = ((IClientConnection) this.networkHandler.getConnection()).viaFabricPlus$getUserConnection(); + final UserConnection connection = ((IConnection) this.connection.getConnection()).viaFabricPlus$getUserConnection(); connection.getChannel().eventLoop().execute(() -> { final PacketWrapper movePlayerPosRot = PacketWrapper.create(ServerboundPackets1_5_2.MOVE_PLAYER_POS_ROT, connection); - movePlayerPosRot.write(Types.DOUBLE, this.getVelocity().x); // x + movePlayerPosRot.write(Types.DOUBLE, this.getDeltaMovement().x); // x movePlayerPosRot.write(Types.DOUBLE, -999.0D); // y movePlayerPosRot.write(Types.DOUBLE, -999.0D); // stance - movePlayerPosRot.write(Types.DOUBLE, this.getVelocity().z); // z - movePlayerPosRot.write(Types.FLOAT, this.getYaw()); // yaw - movePlayerPosRot.write(Types.FLOAT, this.getPitch()); // pitch - movePlayerPosRot.write(Types.BOOLEAN, this.isOnGround()); // onGround + movePlayerPosRot.write(Types.DOUBLE, this.getDeltaMovement().z); // z + movePlayerPosRot.write(Types.FLOAT, this.getYRot()); // yaw + movePlayerPosRot.write(Types.FLOAT, this.getXRot()); // pitch + movePlayerPosRot.write(Types.BOOLEAN, this.onGround()); // onGround movePlayerPosRot.sendToServer(Protocolr1_5_2Tor1_6_1.class); // Copied from the 1.21->1.21.2 protocol since it's changing the packet order, and we manually send the movement packet here diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinEntity.java index 40dc21b6e..2290cac75 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinEntity.java @@ -24,15 +24,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import it.unimi.dsi.fastutil.objects.Object2DoubleMap; -import net.minecraft.entity.Entity; -import net.minecraft.fluid.Fluid; -import net.minecraft.fluid.FluidState; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; +import net.minecraft.tags.TagKey; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -48,18 +48,18 @@ public abstract class MixinEntity { @Shadow protected Object2DoubleMap> fluidHeight; @Shadow - private World world; + private Level level; @Shadow - public abstract Box getBoundingBox(); + public abstract AABB getBoundingBox(); @Shadow - public abstract Vec3d getVelocity(); + public abstract Vec3 getDeltaMovement(); @Shadow - public abstract void setVelocity(Vec3d velocity); + public abstract void setDeltaMovement(Vec3 velocity); - @Redirect(method = "updateSubmergedInWaterState", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeY()D")) + @Redirect(method = "updateFluidOnEyes", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getEyeY()D")) private double addMagicOffset(Entity instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { return instance.getEyeY() - 0.11111111F; @@ -75,43 +75,43 @@ private void cancelSwimming(boolean swimming, CallbackInfo ci) { } } - @Inject(method = "updateMovementInFluid", at = @At("HEAD"), cancellable = true) + @Inject(method = "updateFluidHeightAndDoFluidPushing", at = @At("HEAD"), cancellable = true) private void modifyFluidMovementBoundingBox(TagKey fluidTag, double d, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2) && !ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { return; } - Box box = this.getBoundingBox().expand(0, -0.4, 0).contract(0.001); - int minX = MathHelper.floor(box.minX); - int maxX = MathHelper.ceil(box.maxX); - int minY = MathHelper.floor(box.minY); - int maxY = MathHelper.ceil(box.maxY); - int minZ = MathHelper.floor(box.minZ); - int maxZ = MathHelper.ceil(box.maxZ); + AABB box = this.getBoundingBox().inflate(0, -0.4, 0).deflate(0.001); + int minX = Mth.floor(box.minX); + int maxX = Mth.ceil(box.maxX); + int minY = Mth.floor(box.minY); + int maxY = Mth.ceil(box.maxY); + int minZ = Mth.floor(box.minZ); + int maxZ = Mth.ceil(box.maxZ); - if (!this.world.isRegionLoaded(minX, minY, minZ, maxX, maxY, maxZ)) { + if (!this.level.hasChunksAt(minX, minY, minZ, maxX, maxY, maxZ)) { cir.setReturnValue(false); return; } double waterHeight = 0; boolean foundFluid = false; - Vec3d pushVec = Vec3d.ZERO; + Vec3 pushVec = Vec3.ZERO; - BlockPos.Mutable mutable = new BlockPos.Mutable(); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); for (int x = minX; x < maxX; x++) { for (int y = minY - 1; y < maxY; y++) { for (int z = minZ; z < maxZ; z++) { mutable.set(x, y, z); - FluidState state = this.world.getFluidState(mutable); - if (state.isIn(fluidTag)) { - double height = y + state.getHeight(this.world, mutable); + FluidState state = this.level.getFluidState(mutable); + if (state.is(fluidTag)) { + double height = y + state.getHeight(this.level, mutable); if (height >= box.minY - 0.4) waterHeight = Math.max(height - box.minY + 0.4, waterHeight); if (y >= minY && maxY >= height) { foundFluid = true; - pushVec = pushVec.add(state.getVelocity(this.world, mutable)); + pushVec = pushVec.add(state.getFlow(this.level, mutable)); } } } @@ -119,8 +119,8 @@ private void modifyFluidMovementBoundingBox(TagKey fluidTag, double d, Ca } if (pushVec.length() > 0) { - pushVec = pushVec.normalize().multiply(0.014); - this.setVelocity(this.getVelocity().add(pushVec)); + pushVec = pushVec.normalize().scale(0.014); + this.setDeltaMovement(this.getDeltaMovement().add(pushVec)); } this.fluidHeight.put(fluidTag, waterHeight); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinFlowableFluid.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinFlowingFluid.java similarity index 69% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinFlowableFluid.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinFlowingFluid.java index 466b85649..41c208e34 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinFlowableFluid.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinFlowingFluid.java @@ -24,41 +24,41 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.LeavesBlock; -import net.minecraft.block.ShulkerBoxBlock; -import net.minecraft.block.StainedGlassBlock; -import net.minecraft.block.StairsBlock; -import net.minecraft.block.TrapdoorBlock; -import net.minecraft.fluid.FlowableFluid; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; -import net.minecraft.world.BlockView; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.ShulkerBoxBlock; +import net.minecraft.world.level.block.StainedGlassBlock; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.BlockGetter; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(FlowableFluid.class) -public abstract class MixinFlowableFluid { +@Mixin(FlowingFluid.class) +public abstract class MixinFlowingFluid { - @Redirect(method = "isFlowBlocked", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;isSideSolidFullSquare(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/Direction;)Z")) - private boolean modifyIsSolidBlock(BlockState instance, BlockView blockView, BlockPos blockPos, Direction direction) { + @Redirect(method = "isSolidFace", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;isFaceSturdy(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/core/Direction;)Z")) + private boolean modifyIsSolidBlock(BlockState instance, BlockGetter blockView, BlockPos blockPos, Direction direction) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { final ViaFabricPlusMappingDataLoader.Material material = ViaFabricPlusMappingDataLoader.MATERIALS.get(ViaFabricPlusMappingDataLoader.getBlockMaterial(instance.getBlock())); return material.solid(); } else if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { final Block block = instance.getBlock(); - if (block instanceof ShulkerBoxBlock || block instanceof LeavesBlock || block instanceof TrapdoorBlock || + if (block instanceof ShulkerBoxBlock || block instanceof LeavesBlock || block instanceof TrapDoorBlock || block == Blocks.BEACON || block == Blocks.CAULDRON || block == Blocks.GLASS || block == Blocks.GLOWSTONE || block == Blocks.ICE || block == Blocks.SEA_LANTERN || block instanceof StainedGlassBlock || block == Blocks.PISTON || block == Blocks.STICKY_PISTON || - block == Blocks.PISTON_HEAD || block instanceof StairsBlock) { + block == Blocks.PISTON_HEAD || block instanceof StairBlock) { return false; } } - return instance.isSideSolidFullSquare(blockView, blockPos, direction); + return instance.isFaceSturdy(blockView, blockPos, direction); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinItemEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinItemEntity.java index e1e161e98..0040f70d3 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinItemEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinItemEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.ItemEntity; +import net.minecraft.world.entity.item.ItemEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -32,7 +32,7 @@ @Mixin(ItemEntity.class) public abstract class MixinItemEntity { - @Inject(method = "applyWaterBuoyancy", at = @At("HEAD"), cancellable = true) + @Inject(method = "setUnderwaterMovement", at = @At("HEAD"), cancellable = true) private void dontApplyWaterBuoyancy(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { ci.cancel(); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLivingEntity.java index e2ee55637..aff17c0ed 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLivingEntity.java @@ -23,14 +23,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.fluid.Fluid; -import net.minecraft.registry.tag.FluidTags; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.tags.FluidTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -45,17 +45,17 @@ @Mixin(LivingEntity.class) public abstract class MixinLivingEntity extends Entity { - public MixinLivingEntity(EntityType type, World world) { + public MixinLivingEntity(EntityType type, Level world) { super(type, world); } @Shadow - protected abstract float getBaseWaterMovementSpeedMultiplier(); + protected abstract float getWaterSlowDown(); @Shadow public abstract boolean isJumping(); - @Redirect(method = "travelInFluid", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getFluidHeight(Lnet/minecraft/registry/tag/TagKey;)D")) + @Redirect(method = "travelInFluid", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getFluidHeight(Lnet/minecraft/tags/TagKey;)D")) private double dontApplyLavaMovement(LivingEntity instance, TagKey tagKey) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { return Double.MAX_VALUE; @@ -65,23 +65,23 @@ private double dontApplyLavaMovement(LivingEntity instance, TagKey tagKey } @Redirect(method = "travelInFluid", - slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/entity/effect/StatusEffects;DOLPHINS_GRACE:Lnet/minecraft/registry/entry/RegistryEntry;")), - at = @At(value = "FIELD", target = "Lnet/minecraft/entity/LivingEntity;horizontalCollision:Z", ordinal = 0)) + slice = @Slice(from = @At(value = "FIELD", target = "Lnet/minecraft/world/effect/MobEffects;DOLPHINS_GRACE:Lnet/minecraft/core/Holder;")), + at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/LivingEntity;horizontalCollision:Z", ordinal = 0)) private boolean disableClimbing(LivingEntity instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_13_2) && instance.horizontalCollision; } - @ModifyVariable(method = "applyFluidMovingSpeed", ordinal = 0, at = @At("HEAD"), argsOnly = true) + @ModifyVariable(method = "getFluidFallingAdjustedMovement", ordinal = 0, at = @At("HEAD"), argsOnly = true) private boolean modifyMovingDown(boolean movingDown) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_13_2) && movingDown; } - @Redirect(method = "travelInFluid", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;isSprinting()Z", ordinal = 0)) + @Redirect(method = "travelInFluid", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;isSprinting()Z", ordinal = 0)) private boolean modifySwimSprintSpeed(LivingEntity instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2) && instance.isSprinting(); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getFluidHeight(Lnet/minecraft/registry/tag/TagKey;)D")) + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;getFluidHeight(Lnet/minecraft/tags/TagKey;)D")) private double redirectFluidHeight(LivingEntity instance, TagKey tagKey) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2) && tagKey == FluidTags.WATER) { if (instance.getFluidHeight(tagKey) > 0) return 1; @@ -89,17 +89,17 @@ private double redirectFluidHeight(LivingEntity instance, TagKey tagKey) return instance.getFluidHeight(tagKey); } - @Inject(method = "applyFluidMovingSpeed", at = @At("HEAD"), cancellable = true) - private void modifySwimSprintFallSpeed(double gravity, boolean movingDown, Vec3d velocity, CallbackInfoReturnable ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2) && !this.hasNoGravity()) { - ci.setReturnValue(new Vec3d(velocity.x, velocity.y - 0.02, velocity.z)); + @Inject(method = "getFluidFallingAdjustedMovement", at = @At("HEAD"), cancellable = true) + private void modifySwimSprintFallSpeed(double gravity, boolean movingDown, Vec3 velocity, CallbackInfoReturnable ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2) && !this.isNoGravity()) { + ci.setReturnValue(new Vec3(velocity.x, velocity.y - 0.02, velocity.z)); } } @ModifyConstant(method = "travelInFluid", constant = @Constant(floatValue = 0.9F)) private float modifySwimFriction(float constant) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - return this.getBaseWaterMovementSpeedMultiplier(); + return this.getWaterSlowDown(); } else { return constant; } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinClientPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLocalPlayer.java similarity index 63% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinClientPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLocalPlayer.java index 5363f27d7..ee57e8f71 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinClientPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinLocalPlayer.java @@ -26,10 +26,10 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.input.Input; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.player.ClientInput; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -37,18 +37,18 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Slice; -@Mixin(ClientPlayerEntity.class) -public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity { +@Mixin(LocalPlayer.class) +public abstract class MixinLocalPlayer extends AbstractClientPlayer { @Shadow - public Input input; + public ClientInput input; - public MixinClientPlayerEntity(ClientWorld world, GameProfile profile) { + public MixinLocalPlayer(ClientLevel world, GameProfile profile) { super(world, profile); } - @WrapOperation(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;hasForwardMovement()Z")) - private boolean easierUnderwaterSprinting(Input instance, Operation original) { + @WrapOperation(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/ClientInput;hasForwardImpulse()Z")) + private boolean easierUnderwaterSprinting(ClientInput instance, Operation original) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { return this.viaFabricPlus$isWalking1_21_4(); } else { @@ -56,22 +56,22 @@ private boolean easierUnderwaterSprinting(Input instance, Operation ori } } - @Redirect(method = "tickMovement", - slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/Input;hasForwardMovement()Z")), - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSwimming()Z", ordinal = 0)) - private boolean dontAllowSneakingWhileSwimming(ClientPlayerEntity instance) { + @Redirect(method = "aiStep", + slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/ClientInput;hasForwardImpulse()Z")), + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isSwimming()Z", ordinal = 0)) + private boolean dontAllowSneakingWhileSwimming(LocalPlayer instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_1) && instance.isSwimming(); } - @Redirect(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isTouchingWater()Z")) - private boolean disableWaterRelatedMovement(ClientPlayerEntity self) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2) && self.isTouchingWater(); + @Redirect(method = "aiStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;isInWater()Z")) + private boolean disableWaterRelatedMovement(LocalPlayer self) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_12_2) && self.isInWater(); } @Unique private boolean viaFabricPlus$isWalking1_21_4() { - final boolean submergedInWater = ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_1) && isSubmergedInWater(); - return submergedInWater ? this.input.hasForwardMovement() : this.input.movementVector.y >= 0.8; + final boolean submergedInWater = ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_14_1) && isUnderWater(); + return submergedInWater ? this.input.hasForwardImpulse() : this.input.moveVector.y >= 0.8; } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinSkeletonHorseEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinSkeletonHorse.java similarity index 74% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinSkeletonHorseEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinSkeletonHorse.java index 9483cf59a..e625d85f5 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinSkeletonHorseEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/movement/water/MixinSkeletonHorse.java @@ -23,26 +23,26 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.mob.SkeletonHorseEntity; -import net.minecraft.entity.passive.AbstractHorseEntity; -import net.minecraft.world.World; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.animal.horse.SkeletonHorse; +import net.minecraft.world.entity.animal.horse.AbstractHorse; +import net.minecraft.world.level.Level; 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.CallbackInfoReturnable; -@Mixin(SkeletonHorseEntity.class) -public abstract class MixinSkeletonHorseEntity extends AbstractHorseEntity { +@Mixin(SkeletonHorse.class) +public abstract class MixinSkeletonHorse extends AbstractHorse { - protected MixinSkeletonHorseEntity(EntityType entityType, World world) { + protected MixinSkeletonHorse(EntityType entityType, Level world) { super(entityType, world); } - @Inject(method = "getBaseWaterMovementSpeedMultiplier", at = @At("HEAD"), cancellable = true) + @Inject(method = "getWaterSlowDown", at = @At("HEAD"), cancellable = true) private void modifyBaseWaterMovementSpeedMultiplier(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - cir.setReturnValue(super.getBaseWaterMovementSpeedMultiplier()); + cir.setReturnValue(super.getWaterSlowDown()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientConfigurationNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientConfigurationPacketListenerImpl.java similarity index 64% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientConfigurationNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientConfigurationPacketListenerImpl.java index 7df983606..60bf61d86 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientConfigurationNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientConfigurationPacketListenerImpl.java @@ -23,33 +23,33 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.client.network.ClientConfigurationNetworkHandler; -import net.minecraft.client.network.ClientConnectionState; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.packet.s2c.config.ReadyS2CPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.client.multiplayer.ClientConfigurationPacketListenerImpl; +import net.minecraft.client.multiplayer.CommonListenerCookie; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.configuration.ClientboundFinishConfigurationPacket; 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(ClientConfigurationNetworkHandler.class) -public abstract class MixinClientConfigurationNetworkHandler extends ClientCommonNetworkHandler { +@Mixin(ClientConfigurationPacketListenerImpl.class) +public abstract class MixinClientConfigurationPacketListenerImpl extends ClientCommonPacketListenerImpl { - protected MixinClientConfigurationNetworkHandler(MinecraftClient client, ClientConnection connection, ClientConnectionState connectionState) { + protected MixinClientConfigurationPacketListenerImpl(Minecraft client, Connection connection, CommonListenerCookie connectionState) { super(client, connection, connectionState); } - @Inject(method = "onReady", at = @At("HEAD")) - private void disableAutoRead(ReadyS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleConfigurationFinished", at = @At("HEAD")) + private void disableAutoRead(ClientboundFinishConfigurationPacket packet, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { this.connection.channel.config().setAutoRead(false); } } - @Inject(method = "onReady", at = @At("RETURN")) - private void enableAutoRead(ReadyS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleConfigurationFinished", at = @At("RETURN")) + private void enableAutoRead(ClientboundFinishConfigurationPacket packet, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { this.connection.channel.config().setAutoRead(true); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientPlayNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientPacketListener.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientPlayNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientPacketListener.java index d6efdab4b..b99d22756 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientPlayNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinClientPacketListener.java @@ -23,33 +23,33 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -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.network.ClientConnection; -import net.minecraft.network.packet.s2c.play.EnterReconfigurationS2CPacket; +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.network.Connection; +import net.minecraft.network.protocol.game.ClientboundStartConfigurationPacket; 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) -public abstract class MixinClientPlayNetworkHandler extends ClientCommonNetworkHandler { +@Mixin(ClientPacketListener.class) +public abstract class MixinClientPacketListener extends ClientCommonPacketListenerImpl { - protected MixinClientPlayNetworkHandler(MinecraftClient client, ClientConnection connection, ClientConnectionState connectionState) { + protected MixinClientPacketListener(Minecraft client, Connection connection, CommonListenerCookie connectionState) { super(client, connection, connectionState); } - @Inject(method = "onEnterReconfiguration", at = @At("HEAD")) - private void disableAutoRead(EnterReconfigurationS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleConfigurationStart", at = @At("HEAD")) + private void disableAutoRead(ClientboundStartConfigurationPacket packet, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { this.connection.channel.config().setAutoRead(false); } } - @Inject(method = "onEnterReconfiguration", at = @At("RETURN")) - private void enableAutoRead(EnterReconfigurationS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleConfigurationStart", at = @At("RETURN")) + private void enableAutoRead(ClientboundStartConfigurationPacket packet, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { this.connection.channel.config().setAutoRead(true); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinNetworkStateTransitionHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinProtocolSwapHandler.java similarity index 82% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinNetworkStateTransitionHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinProtocolSwapHandler.java index b082797d8..21c9ac615 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinNetworkStateTransitionHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinProtocolSwapHandler.java @@ -25,14 +25,14 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import io.netty.channel.ChannelConfig; -import net.minecraft.network.handler.NetworkStateTransitionHandler; +import net.minecraft.network.ProtocolSwapHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(NetworkStateTransitionHandler.class) -public interface MixinNetworkStateTransitionHandler { +@Mixin(ProtocolSwapHandler.class) +public interface MixinProtocolSwapHandler { - @WrapWithCondition(method = "onDecoded", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelConfig;setAutoRead(Z)Lio/netty/channel/ChannelConfig;", remap = false)) + @WrapWithCondition(method = "handleInboundTerminalPacket", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelConfig;setAutoRead(Z)Lio/netty/channel/ChannelConfig;", remap = false)) private static boolean dontChangeAutoRead(ChannelConfig instance, boolean b) { return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_5); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinNetworkStateTransitions.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinUnconfiguredPipelineHandler.java similarity index 91% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinNetworkStateTransitions.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinUnconfiguredPipelineHandler.java index b8c2d385b..33df524e1 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinNetworkStateTransitions.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/config_state/MixinUnconfiguredPipelineHandler.java @@ -25,12 +25,12 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import io.netty.channel.ChannelConfig; -import net.minecraft.network.handler.NetworkStateTransitions; +import net.minecraft.network.UnconfiguredPipelineHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(NetworkStateTransitions.class) -public abstract class MixinNetworkStateTransitions { +@Mixin(UnconfiguredPipelineHandler.class) +public abstract class MixinUnconfiguredPipelineHandler { @WrapWithCondition(method = "method_56353", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelConfig;setAutoRead(Z)Lio/netty/channel/ChannelConfig;", remap = false)) private static boolean dontChangeAutoRead(ChannelConfig instance, boolean b) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/disable_server_pinging/MixinMultiplayerServerListWidget_ServerEntry.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/disable_server_pinging/MixinMultiplayerServerListWidget_ServerEntry.java index b8e3fa4d4..37c161b55 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/disable_server_pinging/MixinMultiplayerServerListWidget_ServerEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/disable_server_pinging/MixinMultiplayerServerListWidget_ServerEntry.java @@ -23,21 +23,21 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.settings.impl.DebugSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.List; import java.util.concurrent.ThreadPoolExecutor; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; -import net.minecraft.client.gui.screen.world.WorldIcon; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.text.OrderedText; -import net.minecraft.text.StringVisitable; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList; +import net.minecraft.client.gui.screens.FaviconTexture; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.util.FormattedCharSequence; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -47,54 +47,54 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(MultiplayerServerListWidget.ServerEntry.class) +@Mixin(ServerSelectionList.OnlineServerEntry.class) public abstract class MixinMultiplayerServerListWidget_ServerEntry { @Shadow @Final - private ServerInfo server; + private ServerData serverData; @Mutable @Shadow @Final - private WorldIcon icon; + private FaviconTexture icon; @Unique private boolean viaFabricPlus$disableServerPinging = false; - @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/ThreadPoolExecutor;submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;")) + @WrapWithCondition(method = "renderContent", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/ThreadPoolExecutor;submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;")) private boolean disableServerPinging(ThreadPoolExecutor instance, Runnable runnable) { - ProtocolVersion version = ((IServerInfo) server).viaFabricPlus$forcedVersion(); + ProtocolVersion version = ((IServerData) serverData).viaFabricPlus$forcedVersion(); if (version == null) { version = ProtocolTranslator.getTargetVersion(); } viaFabricPlus$disableServerPinging = DebugSettings.INSTANCE.disableServerPinging.isEnabled(version); if (viaFabricPlus$disableServerPinging) { - this.server.version = Text.of(version.getName()); // Show target version + this.serverData.version = Component.nullToEmpty(version.getName()); // Show target version } return !viaFabricPlus$disableServerPinging; } - @Redirect(method = "render", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/ServerInfo$Status;INCOMPATIBLE:Lnet/minecraft/client/network/ServerInfo$Status;")) - private ServerInfo.Status disableServerPinging() { + @Redirect(method = "renderContent", at = @At(value = "FIELD", target = "Lnet/minecraft/client/multiplayer/ServerData$State;INCOMPATIBLE:Lnet/minecraft/client/multiplayer/ServerData$State;")) + private ServerData.State disableServerPinging() { if (viaFabricPlus$disableServerPinging) { - return this.server.getStatus(); // server version will always be shown (as we don't have a player count anyway) + return this.serverData.state(); // server version will always be shown (as we don't have a player count anyway) } else { - return ServerInfo.Status.INCOMPATIBLE; + return ServerData.State.INCOMPATIBLE; } } - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/TextRenderer;wrapLines(Lnet/minecraft/text/StringVisitable;I)Ljava/util/List;")) - private List disableServerPinging(TextRenderer instance, StringVisitable text, int width) { + @Redirect(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Font;split(Lnet/minecraft/network/chat/FormattedText;I)Ljava/util/List;")) + private List disableServerPinging(Font instance, FormattedText text, int width) { if (viaFabricPlus$disableServerPinging) { // server label will just show the server address - return instance.wrapLines(Text.of(server.address), width); + return instance.split(Component.nullToEmpty(serverData.ip), width); } else { - return instance.wrapLines(text, width); + return instance.split(text, width); } } - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)V"), index = 2) + @ModifyArg(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;III)V"), index = 2) private int disableServerPinging(int x) { if (viaFabricPlus$disableServerPinging) { // Move server label to the right (as we remove the ping bar) x += 15 /* ping bar width */ - 3 /* magical offset */; @@ -102,27 +102,27 @@ private int disableServerPinging(int x) { return x; } - @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/util/Identifier;IIII)V", ordinal = 0)) - private boolean disableServerPinging(DrawContext instance, RenderPipeline pipeline, Identifier sprite, int x, int y, int width, int height) { + @WrapWithCondition(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIII)V", ordinal = 0)) + private boolean disableServerPinging(GuiGraphics instance, RenderPipeline pipeline, ResourceLocation sprite, int x, int y, int width, int height) { return !viaFabricPlus$disableServerPinging; // Remove ping bar } - @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Ljava/util/List;II)V")) - private boolean disableServerPinging(DrawContext instance, List text, int x, int y) { + @WrapWithCondition(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;setTooltipForNextFrame(Ljava/util/List;II)V")) + private boolean disableServerPinging(GuiGraphics instance, List text, int x, int y) { return !viaFabricPlus$disableServerPinging; // Remove player list tooltip } - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/world/WorldIcon;getTextureId()Lnet/minecraft/util/Identifier;")) - private Identifier disableServerPinging(WorldIcon instance) { + @Redirect(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/FaviconTexture;textureLocation()Lnet/minecraft/resources/ResourceLocation;")) + private ResourceLocation disableServerPinging(FaviconTexture instance) { if (viaFabricPlus$disableServerPinging) { // Remove server icon - return WorldIcon.UNKNOWN_SERVER_ID; + return FaviconTexture.MISSING_LOCATION; } else { - return this.icon.getTextureId(); + return this.icon.textureLocation(); } } - @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/text/Text;II)V")) - private boolean disableServerPinging(DrawContext instance, Text text, int x, int y) { + @WrapWithCondition(method = "renderContent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;setTooltipForNextFrame(Lnet/minecraft/network/chat/Component;II)V")) + private boolean disableServerPinging(GuiGraphics instance, Component text, int x, int y) { return !viaFabricPlus$disableServerPinging; // Remove ping bar tooltip } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/MixinPlayerEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/MixinPlayer.java similarity index 89% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/MixinPlayerEntity.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/MixinPlayer.java index a1415353b..1fcff9249 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/MixinPlayerEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/keep_player_loaded/MixinPlayer.java @@ -23,20 +23,20 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.world.entity.player.Player; 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.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity { +@Mixin(Player.class) +public abstract class MixinPlayer { - @Inject(method = "isLoaded", at = @At("HEAD"), cancellable = true) + @Inject(method = "hasClientLoaded", at = @At("HEAD"), cancellable = true) private void alwaysLoadPlayer(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { cir.setReturnValue(true); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinProfileKeysImpl.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinAccountProfileKeyPairManager.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinProfileKeysImpl.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinAccountProfileKeyPairManager.java index 45eebefe4..c47b6a2b8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinProfileKeysImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinAccountProfileKeyPairManager.java @@ -22,20 +22,20 @@ package com.viaversion.viafabricplus.injection.mixin.features.networking.legacy_chat_signature; import com.mojang.authlib.yggdrasil.response.KeyPairResponse; -import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.ILegacyKeySignatureStorage; -import net.minecraft.client.session.ProfileKeysImpl; -import net.minecraft.network.encryption.PlayerPublicKey; +import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.IProfilePublicKey_Data; +import net.minecraft.client.multiplayer.AccountProfileKeyPairManager; +import net.minecraft.world.entity.player.ProfilePublicKey; 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.CallbackInfoReturnable; -@Mixin(ProfileKeysImpl.class) -public abstract class MixinProfileKeysImpl { +@Mixin(AccountProfileKeyPairManager.class) +public abstract class MixinAccountProfileKeyPairManager { - @Inject(method = "decodeKeyPairResponse", at = @At("RETURN")) - private static void trackLegacyKey(KeyPairResponse keyPairResponse, CallbackInfoReturnable cir) { - ((ILegacyKeySignatureStorage) (Object) cir.getReturnValue()).viafabricplus$setLegacyPublicKeySignature(((ILegacyKeySignatureStorage) (Object) keyPairResponse).viafabricplus$getLegacyPublicKeySignature()); + @Inject(method = "parsePublicKey", at = @At("RETURN")) + private static void trackLegacyKey(KeyPairResponse keyPairResponse, CallbackInfoReturnable cir) { + ((IProfilePublicKey_Data) (Object) cir.getReturnValue()).viafabricplus$setLegacyPublicKeySignature(((IProfilePublicKey_Data) (Object) keyPairResponse).viafabricplus$getLegacyPublicKeySignature()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinConnectScreen_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinConnectScreen_1.java index bf74aace5..f65f825ab 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinConnectScreen_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinConnectScreen_1.java @@ -23,8 +23,8 @@ import com.llamalad7.mixinextras.sugar.Local; import com.viaversion.viafabricplus.ViaFabricPlusImpl; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; -import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.ILegacyKeySignatureStorage; +import com.viaversion.viafabricplus.injection.access.base.IConnection; +import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.IProfilePublicKey_Data; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.ProfileKey; @@ -33,10 +33,10 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.security.PrivateKey; import java.util.UUID; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.encryption.PlayerKeyPair; -import net.minecraft.network.encryption.PlayerPublicKey; +import net.minecraft.client.Minecraft; +import net.minecraft.network.Connection; +import net.minecraft.world.entity.player.ProfileKeyPair; +import net.minecraft.world.entity.player.ProfilePublicKey; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -44,29 +44,29 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1") +@Mixin(targets = "net.minecraft.client.gui.screens.ConnectScreen$1") public abstract class MixinConnectScreen_1 { @Shadow @Final - MinecraftClient field_33738; + Minecraft val$minecraft; @Inject(method = "run", at = @At(value = "INVOKE", target = "Lio/netty/channel/ChannelFuture;syncUninterruptibly()Lio/netty/channel/ChannelFuture;", remap = false, shift = At.Shift.AFTER)) - private void setupChatSessions(CallbackInfo ci, @Local ClientConnection clientConnection) { - final UserConnection connection = ((IClientConnection) clientConnection).viaFabricPlus$getUserConnection(); + private void setupChatSessions(CallbackInfo ci, @Local Connection clientConnection) { + final UserConnection connection = ((IConnection) clientConnection).viaFabricPlus$getUserConnection(); if (ProtocolTranslator.getTargetVersion().betweenInclusive(ProtocolVersion.v1_19, ProtocolVersion.v1_19_1)) { - final PlayerKeyPair keyPair = MinecraftClient.getInstance().getProfileKeys().fetchKeyPair().join().orElse(null); + final ProfileKeyPair keyPair = Minecraft.getInstance().getProfileKeyPairManager().prepareKeyPair().join().orElse(null); if (keyPair != null) { - final PlayerPublicKey.PublicKeyData publicKeyData = keyPair.publicKey().data(); + final ProfilePublicKey.Data publicKeyData = keyPair.publicKey().data(); final PrivateKey privateKey = keyPair.privateKey(); final long expiresAt = publicKeyData.expiresAt().toEpochMilli(); final byte[] publicKey = publicKeyData.key().getEncoded(); - final UUID uuid = this.field_33738.getSession().getUuidOrNull(); + final UUID uuid = this.val$minecraft.getUser().getProfileId(); connection.put(new ChatSession1_19_1(uuid, privateKey, new ProfileKey(expiresAt, publicKey, publicKeyData.keySignature()))); if (ProtocolTranslator.getTargetVersion() == ProtocolVersion.v1_19) { - final byte[] legacyKeySignature = ((ILegacyKeySignatureStorage) (Object) publicKeyData).viafabricplus$getLegacyPublicKeySignature(); + final byte[] legacyKeySignature = ((IProfilePublicKey_Data) (Object) publicKeyData).viafabricplus$getLegacyPublicKeySignature(); if (legacyKeySignature != null) { connection.put(new ChatSession1_19_0(uuid, privateKey, new ProfileKey(expiresAt, publicKey, legacyKeySignature))); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinKeyPairResponse.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinKeyPairResponse.java index 56ef96998..f1be3d843 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinKeyPairResponse.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinKeyPairResponse.java @@ -22,12 +22,12 @@ package com.viaversion.viafabricplus.injection.mixin.features.networking.legacy_chat_signature; import com.mojang.authlib.yggdrasil.response.KeyPairResponse; -import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.ILegacyKeySignatureStorage; +import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.IProfilePublicKey_Data; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @Mixin(value = KeyPairResponse.class, remap = false) -public abstract class MixinKeyPairResponse implements ILegacyKeySignatureStorage { +public abstract class MixinKeyPairResponse implements IProfilePublicKey_Data { @Unique private byte[] viaFabricPlus$legacyKeySignature; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinPlayerPublicKey_PublicKeyData.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinProfilePublicKey_Data.java similarity index 86% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinPlayerPublicKey_PublicKeyData.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinProfilePublicKey_Data.java index 7a84306a5..4151bf62f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinPlayerPublicKey_PublicKeyData.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinProfilePublicKey_Data.java @@ -21,13 +21,13 @@ package com.viaversion.viafabricplus.injection.mixin.features.networking.legacy_chat_signature; -import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.ILegacyKeySignatureStorage; -import net.minecraft.network.encryption.PlayerPublicKey; +import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.IProfilePublicKey_Data; +import net.minecraft.world.entity.player.ProfilePublicKey; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -@Mixin(PlayerPublicKey.PublicKeyData.class) -public abstract class MixinPlayerPublicKey_PublicKeyData implements ILegacyKeySignatureStorage { +@Mixin(ProfilePublicKey.Data.class) +public abstract class MixinProfilePublicKey_Data implements IProfilePublicKey_Data { @Unique private byte[] viaFabricPlus$legacyKeySignature; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinYggdrasilUserApiService.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinYggdrasilUserApiService.java index 14c1079f0..b02d64745 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinYggdrasilUserApiService.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/legacy_chat_signature/MixinYggdrasilUserApiService.java @@ -26,7 +26,7 @@ import com.mojang.authlib.yggdrasil.response.KeyPairResponse; import com.viaversion.viafabricplus.ViaFabricPlusImpl; import com.viaversion.viafabricplus.features.networking.legacy_chat_signature.KeyPairResponse1_19_0; -import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.ILegacyKeySignatureStorage; +import com.viaversion.viafabricplus.injection.access.networking.legacy_chat_signature.IProfilePublicKey_Data; import java.net.URL; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -65,7 +65,7 @@ private void storeLegacyPublicKeySignature(CallbackInfoReturnable this.viaFabricPlus$loadStartTime + 30000L) { - this.close(); + this.onClose(); } else { if (this.viaFabricPlus$closeOnNextTick) { - if (this.client.player == null) return; + if (this.minecraft.player == null) return; - final BlockPos blockPos = this.client.player.getBlockPos(); - final boolean isOutOfHeightLimit = this.client.world != null && this.client.world.isOutOfHeightLimit(blockPos.getY()); - if (isOutOfHeightLimit || this.client.worldRenderer.isRenderingReady(blockPos) || this.client.player.isSpectator() || !this.client.player.isAlive()) { - this.close(); + final BlockPos blockPos = this.minecraft.player.blockPosition(); + final boolean isOutOfHeightLimit = this.minecraft.level != null && this.minecraft.level.isOutsideBuildHeight(blockPos.getY()); + if (isOutOfHeightLimit || this.minecraft.levelRenderer.isSectionCompiled(blockPos) || this.minecraft.player.isSpectator() || !this.minecraft.player.isAlive()) { + this.onClose(); } } else { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_1)) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/MixinClientLoginNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/MixinClientHandshakePacketListenerImpl.java similarity index 68% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/MixinClientLoginNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/MixinClientHandshakePacketListenerImpl.java index 13d4f7c58..8855869ab 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/MixinClientLoginNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/limitation/MixinClientHandshakePacketListenerImpl.java @@ -23,18 +23,18 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.ClientLoginNetworkHandler; -import net.minecraft.network.ClientConnection; +import net.minecraft.client.multiplayer.ClientHandshakePacketListenerImpl; +import net.minecraft.network.Connection; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(ClientLoginNetworkHandler.class) -public abstract class MixinClientLoginNetworkHandler { +@Mixin(ClientHandshakePacketListenerImpl.class) +public abstract class MixinClientHandshakePacketListenerImpl { - @Redirect(method = "onCompression", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;setCompressionThreshold(IZ)V")) - private void pre1_17_1CompressionBehaviour(ClientConnection instance, int compressionThreshold, boolean rejectsBadPackets) { - instance.setCompressionThreshold(compressionThreshold, ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)); + @Redirect(method = "handleCompression", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;setupCompression(IZ)V")) + private void pre1_17_1CompressionBehaviour(Connection instance, int compressionThreshold, boolean rejectsBadPackets) { + instance.setupCompression(compressionThreshold, ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/MixinMinecraft.java similarity index 85% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/MixinMinecraft.java index 36f07beb5..9c2472e48 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/open_inventory_packet/MixinMinecraft.java @@ -27,8 +27,8 @@ import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.v1_11_1to1_12.Protocol1_11_1To1_12; import com.viaversion.viaversion.protocols.v1_9_1to1_9_3.packet.ServerboundPackets1_9_3; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -36,14 +36,14 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(MinecraftClient.class) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { @Shadow @Nullable - public ClientPlayerEntity player; + public LocalPlayer player; - @Inject(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/TutorialManager;onInventoryOpened()V", shift = At.Shift.AFTER)) + @Inject(method = "handleKeybinds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/tutorial/Tutorial;onOpenInventory()V", shift = At.Shift.AFTER)) private void sendOpenInventoryPacket(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { final PacketWrapper clientCommand = PacketWrapper.create(ServerboundPackets1_9_3.CLIENT_COMMAND, ProtocolTranslator.getPlayNetworkUserConnection()); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientCommonNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientCommonPacketListenerImpl.java similarity index 50% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientCommonNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientCommonPacketListenerImpl.java index 168be3331..7bc3dc401 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientCommonNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientCommonPacketListenerImpl.java @@ -30,15 +30,15 @@ import java.time.Duration; import java.util.Optional; import java.util.function.BooleanSupplier; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.DisconnectionInfo; -import net.minecraft.network.listener.ServerPacketListener; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.common.ResourcePackStatusC2SPacket; -import net.minecraft.network.packet.s2c.common.CommonPingS2CPacket; -import net.minecraft.network.packet.s2c.common.ResourcePackSendS2CPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.network.Connection; +import net.minecraft.network.DisconnectionDetails; +import net.minecraft.network.ServerboundPacketListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.ServerboundResourcePackPacket; +import net.minecraft.network.protocol.common.ClientboundPingPacket; +import net.minecraft.network.protocol.common.ClientboundResourcePackPushPacket; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -49,65 +49,65 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(ClientCommonNetworkHandler.class) -public abstract class MixinClientCommonNetworkHandler { +@Mixin(ClientCommonPacketListenerImpl.class) +public abstract class MixinClientCommonPacketListenerImpl { @Shadow @Final - protected MinecraftClient client; + protected Minecraft minecraft; @Shadow - protected abstract void send(Packet packet, BooleanSupplier sendCondition, Duration expiry); + protected abstract void sendWhen(Packet packet, BooleanSupplier sendCondition, Duration expiry); @Shadow - public abstract void sendPacket(Packet packet); + public abstract void send(Packet packet); @Shadow @Final - protected ClientConnection connection; + protected Connection connection; @Shadow @Nullable - private static URL getParsedResourcePackUrl(String url) { + private static URL parseResourcePackUrl(String url) { return null; } - @Inject(method = "savePacketErrorReport", at = @At("HEAD"), cancellable = true) + @Inject(method = "storeDisconnectionReport", at = @At("HEAD"), cancellable = true) private void dontCreatePacketErrorCrashReports(CallbackInfoReturnable> cir) { if (DebugSettings.INSTANCE.dontCreatePacketErrorCrashReports.isEnabled()) { cir.setReturnValue(Optional.empty()); } } - @WrapWithCondition(method = "onPacketException", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;disconnect(Lnet/minecraft/network/DisconnectionInfo;)V")) - private boolean dontDisconnectOnPacketException(ClientConnection instance, DisconnectionInfo disconnectionInfo) { + @WrapWithCondition(method = "onPacketError", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;disconnect(Lnet/minecraft/network/DisconnectionDetails;)V")) + private boolean dontDisconnectOnPacketException(Connection instance, DisconnectionDetails disconnectionInfo) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_3); } - @Inject(method = "onResourcePackSend", at = @At("HEAD"), cancellable = true) - private void validateUrlInNetworkThread(ResourcePackSendS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleResourcePackPush", at = @At("HEAD"), cancellable = true) + private void validateUrlInNetworkThread(ClientboundResourcePackPushPacket packet, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_2)) { - if (getParsedResourcePackUrl(packet.url()) == null) { - this.connection.send(new ResourcePackStatusC2SPacket(packet.id(), ResourcePackStatusC2SPacket.Status.INVALID_URL)); + if (parseResourcePackUrl(packet.url()) == null) { + this.connection.send(new ServerboundResourcePackPacket(packet.id(), ServerboundResourcePackPacket.Action.INVALID_URL)); ci.cancel(); } } } - @Redirect(method = "onKeepAlive", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientCommonNetworkHandler;send(Lnet/minecraft/network/packet/Packet;Ljava/util/function/BooleanSupplier;Ljava/time/Duration;)V")) - private void forceSendKeepAlive(ClientCommonNetworkHandler instance, Packet packet, BooleanSupplier sendCondition, Duration expiry) { + @Redirect(method = "handleKeepAlive", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientCommonPacketListenerImpl;sendWhen(Lnet/minecraft/network/protocol/Packet;Ljava/util/function/BooleanSupplier;Ljava/time/Duration;)V")) + private void forceSendKeepAlive(ClientCommonPacketListenerImpl instance, Packet packet, BooleanSupplier sendCondition, Duration expiry) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_3)) { - sendPacket(packet); + send(packet); } else { - send(packet, sendCondition, expiry); + sendWhen(packet, sendCondition, expiry); } } - @Inject(method = "onPing", 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) - private void addMissingConditions(CommonPingS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handlePing", 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 addMissingConditions(ClientboundPingPacket packet, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)) { - final short inventoryId = (short) ((packet.getParameter() >> 16) & 0xFF); - if (inventoryId != 0 && inventoryId != client.player.currentScreenHandler.syncId) { + final short inventoryId = (short) ((packet.getId() >> 16) & 0xFF); + if (inventoryId != 0 && inventoryId != minecraft.player.containerMenu.containerId) { ci.cancel(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPacketListener.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPacketListener.java new file mode 100644 index 000000000..f51929dd5 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPacketListener.java @@ -0,0 +1,259 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.networking.packet_handling; + +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import com.llamalad7.mixinextras.sugar.Local; +import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import java.util.LinkedHashSet; +import java.util.OptionalInt; +import java.util.Set; +import net.minecraft.world.level.block.entity.SignBlockEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.BookViewScreen; +import net.minecraft.client.gui.screens.LevelLoadingScreen; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.client.multiplayer.CommonListenerCookie; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.multiplayer.PlayerInfo; +import net.minecraft.client.multiplayer.LevelLoadTracker; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.network.protocol.game.VecDeltaCodec; +import net.minecraft.world.entity.ai.attributes.AttributeMap; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.vehicle.AbstractBoat; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundClientCommandPacket; +import net.minecraft.network.protocol.game.ClientboundSetChunkCacheRadiusPacket; +import net.minecraft.network.protocol.game.ClientboundPlayerPositionPacket; +import net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket; +import net.minecraft.network.protocol.game.ClientboundSetSimulationDistancePacket; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; +import net.minecraft.world.level.GameType; +import net.minecraft.world.level.Level; +import net.raphimc.viabedrock.api.BedrockProtocolVersion; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Final; +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.Constant; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ClientPacketListener.class) +public abstract class MixinClientPacketListener extends ClientCommonPacketListenerImpl { + + @Mutable + @Shadow + @Final + private Set listedPlayers; + + @Shadow + public abstract void handleSetSimulationDistance(ClientboundSetSimulationDistancePacket packet); + + @Shadow + public abstract Connection getConnection(); + + @Shadow + private ClientLevel level; + + @Shadow + @Nullable + private LevelLoadTracker levelLoadTracker; + + @Unique + private Packet viaFabricPlus$teleportConfirmPacket; + + protected MixinClientPacketListener(Minecraft client, Connection connection, CommonListenerCookie connectionState) { + super(client, connection, connectionState); + } + + @Redirect(method = "handleMoveVehicle", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;distanceTo(Lnet/minecraft/world/phys/Vec3;)D")) + private double allowSmallValues(Vec3 instance, Vec3 vec) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { + return Integer.MAX_VALUE; + } else { + return instance.distanceTo(vec); + } + } + + @WrapWithCondition(method = "handleMovePlayer", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 0)) + private boolean changePacketOrder(Connection instance, Packet packet) { + final boolean cancel = ProtocolTranslator.getTargetVersion().equalTo(ProtocolVersion.v1_21_2); + if (cancel) { + this.viaFabricPlus$teleportConfirmPacket = packet; + } + return !cancel; + } + + @Inject(method = "handleMovePlayer", at = @At("RETURN")) + private void changePacketOrder(ClientboundPlayerPositionPacket packet, CallbackInfo ci) { + if (viaFabricPlus$teleportConfirmPacket != null) { + this.connection.send(viaFabricPlus$teleportConfirmPacket); + viaFabricPlus$teleportConfirmPacket = null; + } + } + + @WrapWithCondition(method = "handleMoveEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/game/VecDeltaCodec;setBase(Lnet/minecraft/world/phys/Vec3;)V", ordinal = 0)) + private boolean dontHandleEntityPositionChange(VecDeltaCodec instance, Vec3 pos) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_21_2); + } + + @Redirect(method = "handleTeleportEntity", at = @At(value = "INVOKE", target = "Ljava/util/OptionalInt;isPresent()Z")) + private boolean dontHandleRemovedVehiclePositionChange(OptionalInt instance) { + return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21) && instance.isPresent(); + } + + @Redirect(method = "handleOpenSignEditor", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) + private void openEmptySignEditor(Logger instance, String format, Object arg1, Object arg2, @Local(argsOnly = true) ClientboundOpenSignEditorPacket packet) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { + final BlockPos pos = packet.getPos(); + + final SignBlockEntity emptySignBlockEntity = new SignBlockEntity(pos, this.level.getBlockState(pos)); + emptySignBlockEntity.setLevel(this.level); + this.minecraft.player.openTextEdit(emptySignBlockEntity, packet.isFrontText()); + } else { + instance.warn(format, arg1, arg2); + } + } + + @WrapWithCondition(method = "handleRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/attributes/AttributeMap;assignBaseValues(Lnet/minecraft/world/entity/ai/attributes/AttributeMap;)V")) + private boolean dontApplyBaseValues(AttributeMap instance, AttributeMap other) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_21); + } + + @Redirect(method = "handleGameEvent", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setScreen(Lnet/minecraft/client/gui/screens/Screen;)V", ordinal = 0)) + private void handleWinGameState0(Minecraft instance, Screen screen, @Local int i) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { + if (i == 0) { + this.minecraft.player.connection.send(new ServerboundClientCommandPacket(ServerboundClientCommandPacket.Action.PERFORM_RESPAWN)); + this.minecraft.setScreen(new LevelLoadingScreen(this.levelLoadTracker, LevelLoadingScreen.Reason.END_PORTAL)); + } else if (i == 1) { + instance.setScreen(screen); + } + } else { + instance.setScreen(screen); + } + } + + @WrapWithCondition(method = "handleConfigurationStart", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;sendChatAcknowledgement()V")) + private boolean dontSendChatAck(ClientPacketListener instance) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_5); + } + + @Redirect(method = "handleOpenBook", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/BookViewScreen$BookAccess;fromItem(Lnet/minecraft/world/item/ItemStack;)Lnet/minecraft/client/gui/screens/inventory/BookViewScreen$BookAccess;")) + private BookViewScreen.BookAccess dontOpenWriteableBookScreen(ItemStack stack) { + if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_5) || stack.is(Items.WRITTEN_BOOK)) { + return BookViewScreen.BookAccess.fromItem(stack); + } else { + return null; + } + } + + @WrapWithCondition(method = "handleRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;startWaitingForNewLevel(Lnet/minecraft/client/player/LocalPlayer;Lnet/minecraft/client/multiplayer/ClientLevel;Lnet/minecraft/client/gui/screens/LevelLoadingScreen$Reason;)V")) + private boolean checkDimensionChange(ClientPacketListener instance, LocalPlayer player, ClientLevel world, LevelLoadingScreen.Reason worldEntryReason, @Local(ordinal = 0) ResourceKey registryKey) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_3) || registryKey != this.minecraft.player.level().dimension(); + } + + @WrapWithCondition(method = "handlePlayerChat", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) + private boolean removeChatPacketError(Logger instance, String s, Object o) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_2); + } + + @Redirect(method = "applyPlayerInfoUpdate", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;onGameModeChanged(Lnet/minecraft/world/level/GameType;)V")) + private void dontResetVelocity(LocalPlayer instance, GameType gameMode) { + if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20)) { + instance.onGameModeChanged(gameMode); + } + } + + @WrapWithCondition(method = "initializeChatSession", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) + private boolean removeInvalidSignatureWarning(Logger instance, String s, Object o) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_19_4); + } + + @WrapWithCondition(method = "handlePlayerInfoUpdate", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) + private boolean removeUnknownPlayerListEntryWarning(Logger instance, String s, Object object1, Object object2) { + return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_19_3); + } + + @Redirect(method = {"handleEntityPositionSync", "handleMoveEntity"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;isLocalInstanceAuthoritative()Z")) + private boolean allowPlayerToBeMovedByEntityPackets(Entity instance) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_3) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { + return instance.getControllingPassenger() instanceof Player player ? player.isLocalPlayer() : !instance.level().isClientSide(); + } else { + return instance.isLocalInstanceAuthoritative(); + } + } + + @Inject(method = "", at = @At("RETURN")) + private void fixPlayerListOrdering(Minecraft client, Connection clientConnection, CommonListenerCookie clientConnectionState, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_1)) { + this.listedPlayers = new LinkedHashSet<>(); + } + } + + @SuppressWarnings({"InvalidInjectorMethodSignature"}) + @ModifyConstant(method = "handleSetEntityPassengersPacket", constant = @Constant(classValue = AbstractBoat.class)) + private boolean dontChangeYawWhenMountingBoats(Object entity, Class boatClass) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18)) { + return false; + } else { + return boatClass.isInstance(entity); + } + } + + @Inject(method = "handleSetChunkCacheRadius", at = @At("RETURN")) + private void emulateSimulationDistance(ClientboundSetChunkCacheRadiusPacket packet, CallbackInfo ci) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) { + this.handleSetSimulationDistance(new ClientboundSetSimulationDistancePacket(packet.getRadius())); + } + } + + @Redirect(method = "setValuesFromPositionPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;moveOrInterpolateTo(Lnet/minecraft/world/phys/Vec3;FF)V")) + private static void cancelSmallChanges(Entity instance, Vec3 pos, float yaw, float pitch) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_1) && Math.abs(instance.getX() - pos.x) < 0.03125 && Math.abs(instance.getY() - pos.y) < 0.015625 && Math.abs(instance.getZ() - pos.z) < 0.03125) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && instance.getInterpolation() != null) { + instance.getInterpolation().setInterpolationLength(0); + } + instance.moveOrInterpolateTo(instance.position(), yaw, pitch); + } else { + instance.moveOrInterpolateTo(pos, yaw, pitch); + } + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPlayNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPlayNetworkHandler.java deleted file mode 100644 index a47f9a275..000000000 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinClientPlayNetworkHandler.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.injection.mixin.features.networking.packet_handling; - -import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import com.llamalad7.mixinextras.sugar.Local; -import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import java.util.LinkedHashSet; -import java.util.OptionalInt; -import java.util.Set; -import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.BookScreen; -import net.minecraft.client.gui.screen.world.LevelLoadingScreen; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.client.network.ClientConnectionState; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.client.world.ClientChunkLoadProgress; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.TrackedPosition; -import net.minecraft.entity.attribute.AttributeContainer; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.vehicle.AbstractBoatEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.ClientStatusC2SPacket; -import net.minecraft.network.packet.s2c.play.ChunkLoadDistanceS2CPacket; -import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket; -import net.minecraft.network.packet.s2c.play.SignEditorOpenS2CPacket; -import net.minecraft.network.packet.s2c.play.SimulationDistanceS2CPacket; -import net.minecraft.registry.RegistryKey; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.GameMode; -import net.minecraft.world.World; -import net.raphimc.viabedrock.api.BedrockProtocolVersion; -import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.spongepowered.asm.mixin.Final; -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.Constant; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyConstant; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ClientPlayNetworkHandler.class) -public abstract class MixinClientPlayNetworkHandler extends ClientCommonNetworkHandler { - - @Mutable - @Shadow - @Final - private Set listedPlayerListEntries; - - @Shadow - public abstract void onSimulationDistance(SimulationDistanceS2CPacket packet); - - @Shadow - public abstract ClientConnection getConnection(); - - @Shadow - private ClientWorld world; - - @Shadow - @Nullable - private ClientChunkLoadProgress chunkLoadProgress; - - @Unique - private Packet viaFabricPlus$teleportConfirmPacket; - - protected MixinClientPlayNetworkHandler(MinecraftClient client, ClientConnection connection, ClientConnectionState connectionState) { - super(client, connection, connectionState); - } - - @Redirect(method = "onVehicleMove", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Vec3d;distanceTo(Lnet/minecraft/util/math/Vec3d;)D")) - private double allowSmallValues(Vec3d instance, Vec3d vec) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - return Integer.MAX_VALUE; - } else { - return instance.distanceTo(vec); - } - } - - @WrapWithCondition(method = "onPlayerPositionLook", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;send(Lnet/minecraft/network/packet/Packet;)V", ordinal = 0)) - private boolean changePacketOrder(ClientConnection instance, Packet packet) { - final boolean cancel = ProtocolTranslator.getTargetVersion().equalTo(ProtocolVersion.v1_21_2); - if (cancel) { - this.viaFabricPlus$teleportConfirmPacket = packet; - } - return !cancel; - } - - @Inject(method = "onPlayerPositionLook", at = @At("RETURN")) - private void changePacketOrder(PlayerPositionLookS2CPacket packet, CallbackInfo ci) { - if (viaFabricPlus$teleportConfirmPacket != null) { - this.connection.send(viaFabricPlus$teleportConfirmPacket); - viaFabricPlus$teleportConfirmPacket = null; - } - } - - @WrapWithCondition(method = "onEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/TrackedPosition;setPos(Lnet/minecraft/util/math/Vec3d;)V", ordinal = 0)) - private boolean dontHandleEntityPositionChange(TrackedPosition instance, Vec3d pos) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_21_2); - } - - @Redirect(method = "onEntityPosition", at = @At(value = "INVOKE", target = "Ljava/util/OptionalInt;isPresent()Z")) - private boolean dontHandleRemovedVehiclePositionChange(OptionalInt instance) { - return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21) && instance.isPresent(); - } - - @Redirect(method = "onSignEditorOpen", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) - private void openEmptySignEditor(Logger instance, String format, Object arg1, Object arg2, @Local(argsOnly = true) SignEditorOpenS2CPacket packet) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { - final BlockPos pos = packet.getPos(); - - final SignBlockEntity emptySignBlockEntity = new SignBlockEntity(pos, this.world.getBlockState(pos)); - emptySignBlockEntity.setWorld(this.world); - this.client.player.openEditSignScreen(emptySignBlockEntity, packet.isFront()); - } else { - instance.warn(format, arg1, arg2); - } - } - - @WrapWithCondition(method = "onPlayerRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/attribute/AttributeContainer;setBaseFrom(Lnet/minecraft/entity/attribute/AttributeContainer;)V")) - private boolean dontApplyBaseValues(AttributeContainer instance, AttributeContainer other) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_21); - } - - @Redirect(method = "onGameStateChange", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;setScreen(Lnet/minecraft/client/gui/screen/Screen;)V", ordinal = 0)) - private void handleWinGameState0(MinecraftClient instance, Screen screen, @Local int i) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_5)) { - if (i == 0) { - this.client.player.networkHandler.sendPacket(new ClientStatusC2SPacket(ClientStatusC2SPacket.Mode.PERFORM_RESPAWN)); - this.client.setScreen(new LevelLoadingScreen(this.chunkLoadProgress, LevelLoadingScreen.WorldEntryReason.END_PORTAL)); - } else if (i == 1) { - instance.setScreen(screen); - } - } else { - instance.setScreen(screen); - } - } - - @WrapWithCondition(method = "onEnterReconfiguration", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendAcknowledgment()V")) - private boolean dontSendChatAck(ClientPlayNetworkHandler instance) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_5); - } - - @Redirect(method = "onOpenWrittenBook", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/BookScreen$Contents;create(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/client/gui/screen/ingame/BookScreen$Contents;")) - private BookScreen.Contents dontOpenWriteableBookScreen(ItemStack stack) { - if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_5) || stack.isOf(Items.WRITTEN_BOOK)) { - return BookScreen.Contents.create(stack); - } else { - return null; - } - } - - @WrapWithCondition(method = "onPlayerRespawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;startWorldLoading(Lnet/minecraft/client/network/ClientPlayerEntity;Lnet/minecraft/client/world/ClientWorld;Lnet/minecraft/client/gui/screen/world/LevelLoadingScreen$WorldEntryReason;)V")) - private boolean checkDimensionChange(ClientPlayNetworkHandler instance, ClientPlayerEntity player, ClientWorld world, LevelLoadingScreen.WorldEntryReason worldEntryReason, @Local(ordinal = 0) RegistryKey registryKey) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_3) || registryKey != this.client.player.getEntityWorld().getRegistryKey(); - } - - @WrapWithCondition(method = "onChatMessage", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) - private boolean removeChatPacketError(Logger instance, String s, Object o) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20_2); - } - - @Redirect(method = "handlePlayerListAction", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;onGameModeChanged(Lnet/minecraft/world/GameMode;)V")) - private void dontResetVelocity(ClientPlayerEntity instance, GameMode gameMode) { - if (ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_20)) { - instance.onGameModeChanged(gameMode); - } - } - - @WrapWithCondition(method = "setPublicSession", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;)V", remap = false)) - private boolean removeInvalidSignatureWarning(Logger instance, String s, Object o) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_19_4); - } - - @WrapWithCondition(method = "onPlayerList", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false)) - private boolean removeUnknownPlayerListEntryWarning(Logger instance, String s, Object object1, Object object2) { - return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_19_3); - } - - @Redirect(method = {"onEntityPositionSync", "onEntity"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;isLogicalSideForUpdatingMovement()Z")) - private boolean allowPlayerToBeMovedByEntityPackets(Entity instance) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_3) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - return instance.getControllingPassenger() instanceof PlayerEntity player ? player.isMainPlayer() : !instance.getEntityWorld().isClient(); - } else { - return instance.isLogicalSideForUpdatingMovement(); - } - } - - @Inject(method = "", at = @At("RETURN")) - private void fixPlayerListOrdering(MinecraftClient client, ClientConnection clientConnection, ClientConnectionState clientConnectionState, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_1)) { - this.listedPlayerListEntries = new LinkedHashSet<>(); - } - } - - @SuppressWarnings({"InvalidInjectorMethodSignature"}) - @ModifyConstant(method = "onEntityPassengersSet", constant = @Constant(classValue = AbstractBoatEntity.class)) - private boolean dontChangeYawWhenMountingBoats(Object entity, Class boatClass) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18)) { - return false; - } else { - return boatClass.isInstance(entity); - } - } - - @Inject(method = "onChunkLoadDistance", at = @At("RETURN")) - private void emulateSimulationDistance(ChunkLoadDistanceS2CPacket packet, CallbackInfo ci) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) { - this.onSimulationDistance(new SimulationDistanceS2CPacket(packet.getDistance())); - } - } - - @Redirect(method = "setPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;updateTrackedPositionAndAngles(Lnet/minecraft/util/math/Vec3d;FF)V")) - private static void cancelSmallChanges(Entity instance, Vec3d pos, float yaw, float pitch) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_1) && Math.abs(instance.getX() - pos.x) < 0.03125 && Math.abs(instance.getY() - pos.y) < 0.015625 && Math.abs(instance.getZ() - pos.z) < 0.03125) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && instance.getInterpolator() != null) { - instance.getInterpolator().setLerpDuration(0); - } - instance.updateTrackedPositionAndAngles(instance.getEntityPos(), yaw, pitch); - } else { - instance.updateTrackedPositionAndAngles(pos, yaw, pitch); - } - } - -} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinGameTestDebugRenderer.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinGameTestBlockHighlightRenderer.java similarity index 73% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinGameTestDebugRenderer.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinGameTestBlockHighlightRenderer.java index 76c4171ab..45b2b104f 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinGameTestDebugRenderer.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinGameTestBlockHighlightRenderer.java @@ -21,25 +21,25 @@ package com.viaversion.viafabricplus.injection.mixin.features.networking.packet_handling; -import com.viaversion.viafabricplus.injection.access.networking.packet_handling.IGameTestDebugRenderer; +import com.viaversion.viafabricplus.injection.access.networking.packet_handling.IGameTestBlockHighlightRenderer; import java.util.Map; -import net.minecraft.client.render.debug.GameTestDebugRenderer; -import net.minecraft.util.Util; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.renderer.debug.GameTestBlockHighlightRenderer; +import net.minecraft.Util; +import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@Mixin(GameTestDebugRenderer.class) -public abstract class MixinGameTestDebugRenderer implements IGameTestDebugRenderer { +@Mixin(GameTestBlockHighlightRenderer.class) +public abstract class MixinGameTestBlockHighlightRenderer implements IGameTestBlockHighlightRenderer { @Shadow @Final - private Map markers; + private Map markers; @Override public void viaFabricPlus$addMarker(final BlockPos pos, final int color, final String message, final int duration) { - this.markers.put(pos, new GameTestDebugRenderer.Marker(color, message, Util.getMeasuringTimeMs() + duration)); + this.markers.put(pos, new GameTestBlockHighlightRenderer.Marker(color, message, Util.getMillis() + duration)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinProtocol1_21_7To1_21_9.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinProtocol1_21_7To1_21_9.java index ef22aa4b7..d290842d8 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinProtocol1_21_7To1_21_9.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/packet_handling/MixinProtocol1_21_7To1_21_9.java @@ -22,7 +22,7 @@ package com.viaversion.viafabricplus.injection.mixin.features.networking.packet_handling; import com.viaversion.viafabricplus.base.sync_tasks.SyncTasks; -import com.viaversion.viafabricplus.injection.access.networking.packet_handling.IGameTestDebugRenderer; +import com.viaversion.viafabricplus.injection.access.networking.packet_handling.IGameTestBlockHighlightRenderer; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.v1_21_5to1_21_6.packet.ClientboundPacket1_21_6; @@ -31,8 +31,8 @@ import com.viaversion.viaversion.protocols.v1_21_7to1_21_9.Protocol1_21_7To1_21_9; import com.viaversion.viaversion.protocols.v1_21_7to1_21_9.packet.ClientboundPacket1_21_9; import com.viaversion.viaversion.protocols.v1_21_7to1_21_9.packet.ServerboundPacket1_21_9; -import net.minecraft.client.MinecraftClient; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -54,15 +54,15 @@ private void handleGameTestPayloads(CallbackInfo ci) { wrapper.write(Types.STRING, SyncTasks.executeSyncTask(buf -> { final BlockPos pos = buf.readBlockPos(); final int color = buf.readInt(); - final String name = buf.readString(); + final String name = buf.readUtf(); final int duration = buf.readInt(); - final IGameTestDebugRenderer mixinTestDebugRenderer = (IGameTestDebugRenderer) MinecraftClient.getInstance().worldRenderer.gameTestDebugRenderer; + final IGameTestBlockHighlightRenderer mixinTestDebugRenderer = (IGameTestBlockHighlightRenderer) Minecraft.getInstance().levelRenderer.gameTestBlockHighlightRenderer; mixinTestDebugRenderer.viaFabricPlus$addMarker(pos, color, name, duration); })); } else if (channel.equals("minecraft:debug/game_test_clear")) { wrapper.set(Types.STRING, 0, SyncTasks.PACKET_SYNC_IDENTIFIER); - wrapper.write(Types.STRING, SyncTasks.executeSyncTask(buf -> MinecraftClient.getInstance().worldRenderer.gameTestDebugRenderer.clear())); + wrapper.write(Types.STRING, SyncTasks.executeSyncTask(buf -> Minecraft.getInstance().levelRenderer.gameTestBlockHighlightRenderer.clear())); } }); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/MixinUpdatePlayerAbilitiesC2SPacket.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/MixinServerboundPlayerAbilitiesPacket.java similarity index 70% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/MixinUpdatePlayerAbilitiesC2SPacket.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/MixinServerboundPlayerAbilitiesPacket.java index 992a9ab7c..64fad6a11 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/MixinUpdatePlayerAbilitiesC2SPacket.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/player_abilities/MixinServerboundPlayerAbilitiesPacket.java @@ -23,9 +23,9 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.player.PlayerAbilities; -import net.minecraft.network.PacketByteBuf; -import net.minecraft.network.packet.c2s.play.UpdatePlayerAbilitiesC2SPacket; +import net.minecraft.world.entity.player.Abilities; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.game.ServerboundPlayerAbilitiesPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -33,23 +33,23 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(UpdatePlayerAbilitiesC2SPacket.class) -public abstract class MixinUpdatePlayerAbilitiesC2SPacket { +@Mixin(ServerboundPlayerAbilitiesPacket.class) +public abstract class MixinServerboundPlayerAbilitiesPacket { @Unique - private PlayerAbilities viaFabricPlus$abilities; + private Abilities viaFabricPlus$abilities; - @Inject(method = "(Lnet/minecraft/entity/player/PlayerAbilities;)V", at = @At("RETURN")) - private void capturePlayerAbilities(PlayerAbilities abilities, CallbackInfo ci) { + @Inject(method = "(Lnet/minecraft/world/entity/player/Abilities;)V", at = @At("RETURN")) + private void capturePlayerAbilities(Abilities abilities, CallbackInfo ci) { this.viaFabricPlus$abilities = abilities; } - @Redirect(method = "write", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketByteBuf;writeByte(I)Lnet/minecraft/network/PacketByteBuf;")) - private PacketByteBuf implementFlags(PacketByteBuf instance, int value) { + @Redirect(method = "write", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/FriendlyByteBuf;writeByte(I)Lnet/minecraft/network/FriendlyByteBuf;")) + private FriendlyByteBuf implementFlags(FriendlyByteBuf instance, int value) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { if (viaFabricPlus$abilities.invulnerable) value |= 1; - if (viaFabricPlus$abilities.allowFlying) value |= 4; - if (viaFabricPlus$abilities.creativeMode) value |= 8; + if (viaFabricPlus$abilities.mayfly) value |= 4; + if (viaFabricPlus$abilities.instabuild) value |= 8; } return instance.writeByte(value); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryListCodec.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinHolderSetCodec.java similarity index 76% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryListCodec.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinHolderSetCodec.java index 9c917197e..e70587baa 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryListCodec.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinHolderSetCodec.java @@ -24,25 +24,25 @@ import com.mojang.serialization.DataResult; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.registry.RegistryEntryLookup; -import net.minecraft.registry.entry.RegistryEntryList; -import net.minecraft.registry.entry.RegistryEntryListCodec; -import net.minecraft.registry.tag.TagKey; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderSet; +import net.minecraft.resources.HolderSetCodec; +import net.minecraft.tags.TagKey; 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.CallbackInfoReturnable; -@Mixin(RegistryEntryListCodec.class) -public abstract class MixinRegistryEntryListCodec { +@Mixin(HolderSetCodec.class) +public abstract class MixinHolderSetCodec { - @Inject(method = "get", at = @At("RETURN"), cancellable = true) - private static void workaroundValidation(RegistryEntryLookup registry, TagKey tag, CallbackInfoReturnable> cir) { + @Inject(method = "lookupTag", at = @At("RETURN"), cancellable = true) + private static void workaroundValidation(HolderGetter registry, TagKey tag, CallbackInfoReturnable> cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { // The client now throws if the server refernces tags which weren't previously send via protocol, // instead of implementing verification on protocol level we just skip the error and return an empty registry list if (cir.getReturnValue().isError()) { - cir.setReturnValue(DataResult.success(RegistryEntryList.empty())); + cir.setReturnValue(DataResult.success(HolderSet.empty())); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryList_Named.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryList_Named.java index aa4e96202..e5bd493e6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryList_Named.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/registry_validation/MixinRegistryEntryList_Named.java @@ -24,8 +24,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.List; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.registry.entry.RegistryEntryList; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,21 +33,21 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(RegistryEntryList.Named.class) +@Mixin(HolderSet.Named.class) public abstract class MixinRegistryEntryList_Named { @Shadow - private @Nullable List entries; + private @Nullable List contents; @Shadow - abstract void setEntries(List entries); + abstract void bind(List entries); - @Inject(method = "getEntries", at = @At("HEAD")) - private void preventNullableEntries(CallbackInfoReturnable>> cir) { + @Inject(method = "contents", at = @At("HEAD")) + private void preventNullableEntries(CallbackInfoReturnable>> cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21)) { // Previoulsy didn't had unbounded entries - if (this.entries == null) { - this.setEntries(List.of()); + if (this.contents == null) { + this.bind(List.of()); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/MixinMultiplayerServerListPinger.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/MixinServerStatusPinger.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/MixinMultiplayerServerListPinger.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/MixinServerStatusPinger.java index 82d61535e..91cc83816 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/MixinMultiplayerServerListPinger.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_legacy_pinger/MixinServerStatusPinger.java @@ -22,21 +22,21 @@ package com.viaversion.viafabricplus.injection.mixin.features.networking.remove_legacy_pinger; import java.net.InetSocketAddress; -import net.minecraft.client.network.MultiplayerServerListPinger; -import net.minecraft.client.network.ServerAddress; -import net.minecraft.client.network.ServerInfo; +import net.minecraft.client.multiplayer.ServerStatusPinger; +import net.minecraft.client.multiplayer.resolver.ServerAddress; +import net.minecraft.client.multiplayer.ServerData; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; -@Mixin(MultiplayerServerListPinger.class) -public abstract class MixinMultiplayerServerListPinger { +@Mixin(ServerStatusPinger.class) +public abstract class MixinServerStatusPinger { /** * @author RK_01 * @reason Remove legacy ping which didn't even work */ @Overwrite - public void ping(InetSocketAddress socketAddress, ServerAddress address, ServerInfo serverInfo) { + public void pingLegacyServer(InetSocketAddress socketAddress, ServerAddress address, ServerData serverInfo) { } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinClientPlayNetworkHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinClientPacketListener.java similarity index 51% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinClientPlayNetworkHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinClientPacketListener.java index 83c346ada..ffbb33949 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinClientPlayNetworkHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinClientPacketListener.java @@ -27,47 +27,47 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.time.Instant; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.client.network.ClientConnectionState; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.message.ArgumentSignatureDataMap; -import net.minecraft.network.message.LastSeenMessagesCollector; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.ChatCommandSignedC2SPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.client.multiplayer.CommonListenerCookie; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.Connection; +import net.minecraft.commands.arguments.ArgumentSignatures; +import net.minecraft.network.chat.LastSeenMessagesTracker; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundChatCommandSignedPacket; 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.Redirect; -@Mixin(ClientPlayNetworkHandler.class) -public abstract class MixinClientPlayNetworkHandler extends ClientCommonNetworkHandler { +@Mixin(ClientPacketListener.class) +public abstract class MixinClientPacketListener extends ClientCommonPacketListenerImpl { @Shadow - private LastSeenMessagesCollector lastSeenMessagesCollector; + private LastSeenMessagesTracker lastSeenMessages; - protected MixinClientPlayNetworkHandler(MinecraftClient client, ClientConnection connection, ClientConnectionState connectionState) { + protected MixinClientPacketListener(Minecraft client, Connection connection, CommonListenerCookie connectionState) { super(client, connection, connectionState); } - @WrapWithCondition(method = "runClickEventCommand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;openConfirmRunCommandScreen(Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/client/gui/screen/Screen;)V")) - private boolean dontOpenConfirmationScreens(ClientPlayNetworkHandler instance, String command, String message, Screen screenAfterRun) { + @WrapWithCondition(method = "sendUnattendedCommand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;openCommandSendConfirmationWindow(Ljava/lang/String;Ljava/lang/String;Lnet/minecraft/client/gui/screens/Screen;)V")) + private boolean dontOpenConfirmationScreens(ClientPacketListener instance, String command, String message, Screen screenAfterRun) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_5); } - @Redirect(method = "sendChatCommand", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z")) + @Redirect(method = "sendCommand", at = @At(value = "INVOKE", target = "Ljava/util/List;isEmpty()Z")) private boolean alwaysSignCommands(List instance) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_20_3) && instance.isEmpty(); } - @Redirect(method = "runClickEventCommand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V")) - private void alwaysSignCommands(ClientPlayNetworkHandler instance, Packet packet, @Local(argsOnly = true) String command) { + @Redirect(method = "sendUnattendedCommand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V")) + private void alwaysSignCommands(ClientPacketListener instance, Packet packet, @Local(argsOnly = true) String command) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_3)) { - this.sendPacket(new ChatCommandSignedC2SPacket(command, Instant.now(), 0L, ArgumentSignatureDataMap.EMPTY, this.lastSeenMessagesCollector.collect().update())); + this.send(new ServerboundChatCommandSignedPacket(command, Instant.now(), 0L, ArgumentSignatures.EMPTY, this.lastSeenMessages.generateAndApplyUpdate().update())); } else { - instance.sendPacket(packet); + instance.send(packet); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinGameModeSwitcherScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinGameModeSwitcherScreen.java index f377a04fb..db90d9b15 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinGameModeSwitcherScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinGameModeSwitcherScreen.java @@ -24,12 +24,12 @@ import com.viaversion.viafabricplus.features.networking.remove_signed_commands.SignedCommands1_21_6; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.screen.GameModeSwitcherScreen; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.listener.ServerPlayPacketListener; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.ChangeGameModeC2SPacket; -import net.minecraft.world.GameMode; +import net.minecraft.client.gui.screens.debug.GameModeSwitcherScreen; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ServerGamePacketListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundChangeGameModePacket; +import net.minecraft.world.level.GameType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -37,14 +37,14 @@ @Mixin(GameModeSwitcherScreen.class) public abstract class MixinGameModeSwitcherScreen { - @Redirect(method = "apply(Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/gui/screen/GameModeSwitcherScreen$GameModeSelection;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V")) - private static void wrapAsCommand(ClientPlayNetworkHandler instance, Packet packet) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && packet instanceof ChangeGameModeC2SPacket( - final GameMode mode + @Redirect(method = "switchToHoveredGameMode(Lnet/minecraft/client/Minecraft;Lnet/minecraft/client/gui/screens/debug/GameModeSwitcherScreen$GameModeIcon;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V")) + private static void wrapAsCommand(ClientPacketListener instance, Packet packet) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && packet instanceof ServerboundChangeGameModePacket( + final GameType mode )) { SignedCommands1_21_6.sendGameMode(mode); } else { - instance.sendPacket(packet); + instance.send(packet); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinKeyboard.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinKeyboardHandler.java similarity index 65% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinKeyboard.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinKeyboardHandler.java index 9a98391ea..b781cedc4 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinKeyboard.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/remove_signed_commands/MixinKeyboardHandler.java @@ -24,27 +24,27 @@ import com.viaversion.viafabricplus.features.networking.remove_signed_commands.SignedCommands1_21_6; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.Keyboard; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.listener.ServerPlayPacketListener; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.ChangeGameModeC2SPacket; -import net.minecraft.world.GameMode; +import net.minecraft.client.KeyboardHandler; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ServerGamePacketListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundChangeGameModePacket; +import net.minecraft.world.level.GameType; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(Keyboard.class) -public abstract class MixinKeyboard { +@Mixin(KeyboardHandler.class) +public abstract class MixinKeyboardHandler { - @Redirect(method = "processF3", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendPacket(Lnet/minecraft/network/packet/Packet;)V")) - private void wrapAsCommand(ClientPlayNetworkHandler instance, Packet packet) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && packet instanceof ChangeGameModeC2SPacket( - final GameMode mode + @Redirect(method = "handleDebugKeys", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V")) + private void wrapAsCommand(ClientPacketListener instance, Packet packet) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_5) && packet instanceof ServerboundChangeGameModePacket( + final GameType mode )) { SignedCommands1_21_6.sendGameMode(mode); } else { - instance.sendPacket(packet); + instance.send(packet); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/MixinServerResourcePackLoader_4.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/MixinDownloadedPackSource_4.java similarity index 77% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/MixinServerResourcePackLoader_4.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/MixinDownloadedPackSource_4.java index b07fa73b5..c5e0f1bcf 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/MixinServerResourcePackLoader_4.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/resource_pack_header/MixinDownloadedPackSource_4.java @@ -26,32 +26,32 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.LinkedHashMap; import java.util.Map; -import net.minecraft.GameVersion; -import net.minecraft.resource.PackVersion; +import net.minecraft.WorldVersion; +import net.minecraft.server.packs.metadata.pack.PackFormat; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(targets = "net.minecraft.client.resource.server.ServerResourcePackLoader$4") -public abstract class MixinServerResourcePackLoader_4 { +@Mixin(targets = "net.minecraft.client.resources.server.DownloadedPackSource$4") +public abstract class MixinDownloadedPackSource_4 { - @Redirect(method = "getHeaders", at = @At(value = "INVOKE", target = "Lnet/minecraft/SharedConstants;getGameVersion()Lnet/minecraft/GameVersion;")) - private GameVersion editHeaders() { + @Redirect(method = "createDownloadHeaders", at = @At(value = "INVOKE", target = "Lnet/minecraft/SharedConstants;getCurrentVersion()Lnet/minecraft/WorldVersion;")) + private WorldVersion editHeaders() { return ResourcePackHeaderDiff.get(ProtocolTranslator.getTargetVersion()); } - @Redirect(method = "getHeaders", at = @At(value = "INVOKE", target = "Ljava/lang/String;valueOf(Ljava/lang/Object;)Ljava/lang/String;")) + @Redirect(method = "createDownloadHeaders", at = @At(value = "INVOKE", target = "Ljava/lang/String;valueOf(Ljava/lang/Object;)Ljava/lang/String;")) private String editHeaders(Object obj) { - if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_7) && obj instanceof final PackVersion packVersion) { + if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_7) && obj instanceof final PackFormat packVersion) { return String.valueOf(packVersion.major()); } else { return String.valueOf(obj); } } - @Inject(method = "getHeaders", at = @At("TAIL"), cancellable = true) + @Inject(method = "createDownloadHeaders", at = @At("TAIL"), cancellable = true) private void removeHeaders(CallbackInfoReturnable> cir) { final LinkedHashMap modifiableMap = new LinkedHashMap<>(cir.getReturnValue()); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_3)) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinConnectScreen_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinConnectScreen_1.java index 78a996a90..f11f94f61 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinConnectScreen_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinConnectScreen_1.java @@ -24,24 +24,24 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.net.InetSocketAddress; -import net.minecraft.client.network.ServerAddress; +import net.minecraft.client.multiplayer.resolver.ServerAddress; import org.spongepowered.asm.mixin.Final; 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.Redirect; -@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1") +@Mixin(targets = "net.minecraft.client.gui.screens.ConnectScreen$1") public abstract class MixinConnectScreen_1 { @Final @Shadow - ServerAddress field_33737; + ServerAddress val$hostAndPort; @Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/InetSocketAddress;getHostName()Ljava/lang/String;", remap = false)) private String getRealAddress(InetSocketAddress instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)) { - return field_33737.getAddress(); + return val$hostAndPort.getHost(); } else { return instance.getHostName(); } @@ -50,7 +50,7 @@ private String getRealAddress(InetSocketAddress instance) { @Redirect(method = "run", at = @At(value = "INVOKE", target = "Ljava/net/InetSocketAddress;getPort()I", remap = false)) private int getRealPort(InetSocketAddress instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17)) { - return field_33737.getPort(); + return val$hostAndPort.getPort(); } else { return instance.getPort(); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerAddress.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerAddress.java index f6214a3c1..e04fe0dd7 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerAddress.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerAddress.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.network.AllowedAddressResolver; -import net.minecraft.client.network.ServerAddress; +import net.minecraft.client.multiplayer.resolver.ServerNameResolver; +import net.minecraft.client.multiplayer.resolver.ServerAddress; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -39,10 +39,10 @@ public abstract class MixinServerAddress { @Final private static ServerAddress INVALID; - @Inject(method = "parse", at = @At("RETURN"), cancellable = true) + @Inject(method = "parseString", at = @At("RETURN"), cancellable = true) private static void resolveSrv(String address, CallbackInfoReturnable cir) { if (!cir.getReturnValue().equals(INVALID) && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4)) { - cir.setReturnValue(AllowedAddressResolver.DEFAULT.redirectResolver.lookupRedirect(cir.getReturnValue()).orElse(cir.getReturnValue())); + cir.setReturnValue(ServerNameResolver.DEFAULT.redirectHandler.lookupRedirect(cir.getReturnValue()).orElse(cir.getReturnValue())); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinAllowedAddressResolver.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerNameResolver.java similarity index 75% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinAllowedAddressResolver.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerNameResolver.java index 9c3550613..a4b95e949 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinAllowedAddressResolver.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerNameResolver.java @@ -24,10 +24,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Optional; -import net.minecraft.client.network.Address; -import net.minecraft.client.network.AddressResolver; -import net.minecraft.client.network.AllowedAddressResolver; -import net.minecraft.client.network.ServerAddress; +import net.minecraft.client.multiplayer.resolver.ResolvedServerAddress; +import net.minecraft.client.multiplayer.resolver.ServerAddressResolver; +import net.minecraft.client.multiplayer.resolver.ServerNameResolver; +import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -36,17 +36,17 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(AllowedAddressResolver.class) -public abstract class MixinAllowedAddressResolver { +@Mixin(ServerNameResolver.class) +public abstract class MixinServerNameResolver { @Shadow @Final - private AddressResolver addressResolver; + private ServerAddressResolver resolver; - @Inject(method = "resolve", at = @At("HEAD"), cancellable = true) - private void oldResolveBehaviour(ServerAddress address, CallbackInfoReturnable> cir) { + @Inject(method = "resolveAddress", at = @At("HEAD"), cancellable = true) + private void oldResolveBehaviour(ServerAddress address, CallbackInfoReturnable> cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_16_4) || ProtocolTranslator.getTargetVersion().equals(BedrockProtocolVersion.bedrockLatest)) { - cir.setReturnValue(this.addressResolver.resolve(address)); + cir.setReturnValue(this.resolver.resolve(address)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinRedirectResolver.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerRedirectHandler.java similarity index 89% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinRedirectResolver.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerRedirectHandler.java index 0afdad173..e7f4a5a7c 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinRedirectResolver.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/networking/srv_resolving/MixinServerRedirectHandler.java @@ -24,16 +24,16 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import java.util.Optional; import javax.naming.directory.DirContext; -import net.minecraft.client.network.RedirectResolver; -import net.minecraft.client.network.ServerAddress; +import net.minecraft.client.multiplayer.resolver.ServerRedirectHandler; +import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.raphimc.vialegacy.api.LegacyProtocolVersion; 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.CallbackInfoReturnable; -@Mixin(RedirectResolver.class) -public interface MixinRedirectResolver { +@Mixin(ServerRedirectHandler.class) +public interface MixinServerRedirectHandler { @Inject(method = "method_36911", at = @At("HEAD"), cancellable = true) private static void disableSrvForPre1_3(DirContext context, ServerAddress address, CallbackInfoReturnable> cir) { diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinPlayerScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinCraftingMenu.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinPlayerScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinCraftingMenu.java index 37281f976..14724d640 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinPlayerScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinCraftingMenu.java @@ -24,26 +24,26 @@ import com.viaversion.viafabricplus.features.recipe.Recipes1_11_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.inventory.Inventory; -import net.minecraft.screen.AbstractCraftingScreenHandler; -import net.minecraft.screen.PlayerScreenHandler; -import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.AbstractCraftingMenu; +import net.minecraft.world.inventory.CraftingMenu; +import net.minecraft.world.inventory.MenuType; 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(PlayerScreenHandler.class) -public abstract class MixinPlayerScreenHandler extends AbstractCraftingScreenHandler { +@Mixin(CraftingMenu.class) +public abstract class MixinCraftingMenu extends AbstractCraftingMenu { - public MixinPlayerScreenHandler(ScreenHandlerType type, int syncId, int width, int height) { + public MixinCraftingMenu(MenuType type, int syncId, int width, int height) { super(type, syncId, width, height); } - @Inject(method = "onContentChanged", at = @At("HEAD")) - private void clientSideCrafting(Inventory inventory, CallbackInfo ci) { + @Inject(method = "slotsChanged", at = @At("HEAD")) + private void clientSideCrafting(Container inventory, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { - Recipes1_11_2.setCraftingResultSlot(syncId, this, this.craftingInventory); + Recipes1_11_2.setCraftingResultSlot(containerId, this, this.craftSlots); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinCraftingScreenHandler.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinInventoryMenu.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinCraftingScreenHandler.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinInventoryMenu.java index adcb103a3..0a41c42c6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinCraftingScreenHandler.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/recipe/MixinInventoryMenu.java @@ -24,26 +24,26 @@ import com.viaversion.viafabricplus.features.recipe.Recipes1_11_2; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.inventory.Inventory; -import net.minecraft.screen.AbstractCraftingScreenHandler; -import net.minecraft.screen.CraftingScreenHandler; -import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.AbstractCraftingMenu; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.inventory.MenuType; 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(CraftingScreenHandler.class) -public abstract class MixinCraftingScreenHandler extends AbstractCraftingScreenHandler { +@Mixin(InventoryMenu.class) +public abstract class MixinInventoryMenu extends AbstractCraftingMenu { - public MixinCraftingScreenHandler(ScreenHandlerType type, int syncId, int width, int height) { + public MixinInventoryMenu(MenuType type, int syncId, int width, int height) { super(type, syncId, width, height); } - @Inject(method = "onContentChanged", at = @At("HEAD")) - private void clientSideCrafting(Inventory inventory, CallbackInfo ci) { + @Inject(method = "slotsChanged", at = @At("HEAD")) + private void clientSideCrafting(Container inventory, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { - Recipes1_11_2.setCraftingResultSlot(syncId, this, this.craftingInventory); + Recipes1_11_2.setCraftingResultSlot(containerId, this, this.craftSlots); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinCommandBlockScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinCommandBlockEditScreen.java similarity index 72% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinCommandBlockScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinCommandBlockEditScreen.java index 5ba871961..93de25124 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinCommandBlockScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinCommandBlockEditScreen.java @@ -22,38 +22,38 @@ package com.viaversion.viafabricplus.injection.mixin.features.remove_newer_screen_features; import com.viaversion.viafabricplus.settings.impl.DebugSettings; -import net.minecraft.block.entity.CommandBlockBlockEntity; -import net.minecraft.client.gui.screen.ingame.CommandBlockScreen; -import net.minecraft.client.gui.widget.CyclingButtonWidget; +import net.minecraft.world.level.block.entity.CommandBlockEntity; +import net.minecraft.client.gui.screens.inventory.CommandBlockEditScreen; +import net.minecraft.client.gui.components.CycleButton; 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(CommandBlockScreen.class) -public abstract class MixinCommandBlockScreen { +@Mixin(CommandBlockEditScreen.class) +public abstract class MixinCommandBlockEditScreen { @Shadow - private CyclingButtonWidget modeButton; + private CycleButton modeButton; @Shadow - private CyclingButtonWidget conditionalModeButton; + private CycleButton conditionalButton; @Shadow - private CyclingButtonWidget redstoneTriggerButton; + private CycleButton autoexecButton; @Shadow - public abstract void updateCommandBlock(); + public abstract void updateGui(); @Inject(method = "init", at = @At("TAIL")) private void removeWidgets(CallbackInfo ci) { if (DebugSettings.INSTANCE.hideModernCommandBlockScreenFeatures.isEnabled()) { modeButton.visible = false; - conditionalModeButton.visible = false; - redstoneTriggerButton.visible = false; + conditionalButton.visible = false; + autoexecButton.visible = false; - updateCommandBlock(); + updateGui(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinJigsawBlockScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinJigsawBlockEditScreen.java similarity index 61% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinJigsawBlockScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinJigsawBlockEditScreen.java index 9b4886810..11c4df5aa 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinJigsawBlockScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinJigsawBlockEditScreen.java @@ -24,39 +24,39 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viafabricplus.settings.impl.DebugSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.entity.JigsawBlockEntity; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.ingame.JigsawBlockScreen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.CyclingButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import net.minecraft.world.level.block.entity.JigsawBlockEntity; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.JigsawBlockEditScreen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.CycleButton; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; 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(JigsawBlockScreen.class) -public abstract class MixinJigsawBlockScreen extends Screen { +@Mixin(JigsawBlockEditScreen.class) +public abstract class MixinJigsawBlockEditScreen extends Screen { @Shadow - private TextFieldWidget nameField; + private EditBox nameEdit; @Shadow - private CyclingButtonWidget jointRotationButton; + private CycleButton jointButton; @Shadow - private TextFieldWidget targetField; + private EditBox targetEdit; @Shadow - private TextFieldWidget selectionPriorityField; + private EditBox selectionPriorityEdit; @Shadow - private TextFieldWidget placementPriorityField; + private EditBox placementPriorityEdit; - public MixinJigsawBlockScreen(Text title) { + public MixinJigsawBlockEditScreen(Component title) { super(title); } @@ -67,23 +67,23 @@ private void disableWidgets(CallbackInfo ci) { } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20_2)) { - selectionPriorityField.active = false; - placementPriorityField.active = false; + selectionPriorityEdit.active = false; + placementPriorityEdit.active = false; } if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { - nameField.active = false; - jointRotationButton.active = false; - int index = children().indexOf(jointRotationButton); - ((ClickableWidget) children().get(index + 1)).active = false; // levels slider - ((ClickableWidget) children().get(index + 2)).active = false; // keep jigsaws toggle - ((ClickableWidget) children().get(index + 3)).active = false; // generate button + nameEdit.active = false; + jointButton.active = false; + int index = children().indexOf(jointButton); + ((AbstractWidget) children().get(index + 1)).active = false; // levels slider + ((AbstractWidget) children().get(index + 2)).active = false; // keep jigsaws toggle + ((AbstractWidget) children().get(index + 3)).active = false; // generate button } } @Inject(method = "render", at = @At("HEAD")) - private void copyText(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + private void copyText(GuiGraphics context, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (DebugSettings.INSTANCE.hideModernJigsawScreenFeatures.getValue() && ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2)) { - nameField.setText(targetField.getText()); + nameEdit.setValue(targetEdit.getValue()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockEditScreen.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockEditScreen.java index 402db92f2..83596510b 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockEditScreen.java @@ -24,13 +24,13 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.enums.StructureBlockMode; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ingame.StructureBlockScreen; -import net.minecraft.client.gui.widget.CyclingButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import net.minecraft.world.level.block.state.properties.StructureMode; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.StructureBlockEditScreen; +import net.minecraft.client.gui.components.CycleButton; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -38,29 +38,29 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(StructureBlockScreen.class) -public abstract class MixinStructureBlockScreen { +@Mixin(StructureBlockEditScreen.class) +public abstract class MixinStructureBlockEditScreen { @Shadow - private CyclingButtonWidget strictButton; + private CycleButton strictButton; @Shadow @Final - private static Text STRICT_TEXT; + private static Component STRICT_LABEL; @Shadow - private TextFieldWidget inputName; + private EditBox nameEdit; - @Inject(method = "updateWidgets", at = @At("RETURN")) - private void hideStrictButton(StructureBlockMode mode, CallbackInfo ci) { + @Inject(method = "updateMode", at = @At("RETURN")) + private void hideStrictButton(StructureMode mode, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_4)) { strictButton.visible = false; } } - @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)V")) - private boolean hideStrictText(DrawContext instance, TextRenderer textRenderer, Text text, int x, int y, int color) { - if (text == STRICT_TEXT) { + @WrapWithCondition(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;III)V")) + private boolean hideStrictText(GuiGraphics instance, Font textRenderer, Component text, int x, int y, int color) { + if (text == STRICT_LABEL) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_4); } else { return true; @@ -70,7 +70,7 @@ private boolean hideStrictText(DrawContext instance, TextRenderer textRenderer, @Inject(method = "init", at = @At("TAIL")) private void changeInputNameMaxLength(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_18_2)) { - this.inputName.setMaxLength(64); + this.nameEdit.setMaxLength(64); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockScreen_1.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockEditScreen_1.java similarity index 75% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockScreen_1.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockEditScreen_1.java index 7eb6ad4ef..22e9a4c07 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockScreen_1.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/remove_newer_screen_features/MixinStructureBlockEditScreen_1.java @@ -23,24 +23,24 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.input.CharInput; -import net.minecraft.text.Text; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.input.CharacterEvent; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(targets = "net.minecraft.client.gui.screen.ingame.StructureBlockScreen$1") -public abstract class MixinStructureBlockScreen_1 extends TextFieldWidget { +@Mixin(targets = "net.minecraft.client.gui.screens.inventory.StructureBlockEditScreen$1") +public abstract class MixinStructureBlockEditScreen_1 extends EditBox { - public MixinStructureBlockScreen_1(TextRenderer textRenderer, int x, int y, int width, int height, TextFieldWidget copyFrom, Text text) { + public MixinStructureBlockEditScreen_1(Font textRenderer, int x, int y, int width, int height, EditBox copyFrom, Component text) { super(textRenderer, x, y, width, height, copyFrom, text); } @Inject(method = "charTyped", at = @At("HEAD"), cancellable = true) - private void removeValidation(CharInput input, CallbackInfoReturnable cir) { + private void removeValidation(CharacterEvent input, CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { cir.setReturnValue(super.charTyped(input)); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/run_command_action/MixinScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/run_command_action/MixinScreen.java index 29a631bfa..12f239d58 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/run_command_action/MixinScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/run_command_action/MixinScreen.java @@ -23,9 +23,9 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.player.LocalPlayer; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -38,10 +38,10 @@ public abstract class MixinScreen { @Shadow @Nullable - protected MinecraftClient client; + protected Minecraft minecraft; - @Inject(method = "handleRunCommand", at = @At("HEAD"), cancellable = true) - private static void changeCommandHandling(ClientPlayerEntity player, String command, Screen screenAfterRun, CallbackInfo ci) { + @Inject(method = "clickCommandAction", at = @At("HEAD"), cancellable = true) + private static void changeCommandHandling(LocalPlayer player, String command, Screen screenAfterRun, CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_21_4)) { return; } @@ -49,7 +49,7 @@ private static void changeCommandHandling(ClientPlayerEntity player, String comm if (!command.startsWith("/")) { ci.cancel(); if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19)) { - player.networkHandler.sendChatMessage(command); + player.connection.sendChat(command); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/MixinTeam.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/MixinPlayerTeam.java similarity index 67% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/MixinTeam.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/MixinPlayerTeam.java index 3a28fb794..e4aa28da0 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/MixinTeam.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/scoreboard/MixinPlayerTeam.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.scoreboard.Team; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; +import net.minecraft.world.scores.PlayerTeam; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -34,35 +34,35 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(Team.class) -public abstract class MixinTeam { +@Mixin(PlayerTeam.class) +public abstract class MixinPlayerTeam { @Shadow - private Text prefix; + private Component playerPrefix; @Shadow - private Text suffix; + private Component playerSuffix; - @Inject(method = "decorateName(Lnet/minecraft/text/Text;)Lnet/minecraft/text/MutableText;", at = @At("HEAD"), cancellable = true) - private void decorateName1_12_2(Text name, CallbackInfoReturnable cir) { + @Inject(method = "getFormattedName(Lnet/minecraft/network/chat/Component;)Lnet/minecraft/network/chat/MutableComponent;", at = @At("HEAD"), cancellable = true) + private void decorateName1_12_2(Component name, CallbackInfoReturnable cir) { // All components were legacy strings prior to 1.13, meaning their styles are not separated but used across the whole component. if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2)) { - final Style prefixStyle = viaFabricPlus$getLastStyle(this.prefix); - final Text nameWithStyle = viaFabricPlus$fillStyle(name, prefixStyle); + final Style prefixStyle = viaFabricPlus$getLastStyle(this.playerPrefix); + final Component nameWithStyle = viaFabricPlus$fillStyle(name, prefixStyle); final Style nameStyle = viaFabricPlus$getLastStyle(nameWithStyle); - cir.setReturnValue(Text.empty() - .append(this.prefix) + cir.setReturnValue(Component.empty() + .append(this.playerPrefix) .append(nameWithStyle) - .append(viaFabricPlus$fillStyle(this.suffix, nameStyle)) + .append(viaFabricPlus$fillStyle(this.playerSuffix, nameStyle)) ); } } @Unique - private Style viaFabricPlus$getLastStyle(final Text text) { + private Style viaFabricPlus$getLastStyle(final Component text) { for (int i = text.getSiblings().size() - 1; i >= 0; i--) { - final Text sibling = text.getSiblings().get(i); + final Component sibling = text.getSiblings().get(i); if (sibling.getStyle() != Style.EMPTY) { return sibling.getStyle(); } @@ -72,11 +72,11 @@ private void decorateName1_12_2(Text name, CallbackInfoReturnable c } @Unique - private Text viaFabricPlus$fillStyle(final Text text, final Style style) { + private Component viaFabricPlus$fillStyle(final Component text, final Style style) { if (text.getStyle() != Style.EMPTY) { return text; } else { - return text.copy().fillStyle(style); + return text.copy().withStyle(style); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/sign_editor_reach/MixinAbstractSignEditScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/sign_editor_reach/MixinAbstractSignEditScreen.java index 56b132c12..7145d71ce 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/sign_editor_reach/MixinAbstractSignEditScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/sign_editor_reach/MixinAbstractSignEditScreen.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.entity.SignBlockEntity; -import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen; +import net.minecraft.world.level.block.entity.SignBlockEntity; +import net.minecraft.client.gui.screens.inventory.AbstractSignEditScreen; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -37,12 +37,12 @@ public abstract class MixinAbstractSignEditScreen { @Shadow @Final - protected SignBlockEntity blockEntity; + protected SignBlockEntity sign; - @Inject(method = "canEdit", at = @At("HEAD"), cancellable = true) + @Inject(method = "isValid", at = @At("HEAD"), cancellable = true) private void dontCloseTooFarAwaySigns(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_19_4)) { - cir.setReturnValue(this.blockEntity.getType().supports(this.blockEntity.getCachedState())); + cir.setReturnValue(this.sign.getType().isValid(this.sign.getBlockState())); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/MixinPlayerSkinProvider.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/MixinSkinManager.java similarity index 66% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/MixinPlayerSkinProvider.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/MixinSkinManager.java index 6ced75a14..de3c84b25 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/MixinPlayerSkinProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/skin_loading/MixinSkinManager.java @@ -27,26 +27,26 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Optional; import java.util.concurrent.CompletableFuture; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.texture.PlayerSkinProvider; -import net.minecraft.entity.player.SkinTextures; -import net.minecraft.util.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.SkinManager; +import net.minecraft.world.entity.player.PlayerSkin; +import net.minecraft.Util; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(PlayerSkinProvider.class) -public abstract class MixinPlayerSkinProvider { +@Mixin(SkinManager.class) +public abstract class MixinSkinManager { - @Redirect(method = "supplySkinTextures", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PlayerSkinProvider;fetchSkinTextures(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;")) - private static CompletableFuture> fetchGameProfileProperties(PlayerSkinProvider instance, GameProfile profile) { + @Redirect(method = "createLookup", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/resources/SkinManager;get(Lcom/mojang/authlib/GameProfile;)Ljava/util/concurrent/CompletableFuture;")) + private static CompletableFuture> fetchGameProfileProperties(SkinManager instance, GameProfile profile) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_20) && !profile.properties().containsKey("textures")) { return CompletableFuture.supplyAsync(() -> { - final ProfileResult profileResult = MinecraftClient.getInstance().getApiServices().sessionService().fetchProfile(profile.id(), true); + final ProfileResult profileResult = Minecraft.getInstance().services().sessionService().fetchProfile(profile.id(), true); return profileResult == null ? profile : profileResult.profile(); - }, Util.getMainWorkerExecutor()).thenCompose(instance::fetchSkinTextures); + }, Util.backgroundExecutor()).thenCompose(instance::get); } else { - return instance.fetchSkinTextures(profile); + return instance.get(profile); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinLivingEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinLivingEntity.java index af6f2ac24..7fc8723fb 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinLivingEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinLivingEntity.java @@ -24,16 +24,16 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.Hand; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.InteractionHand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(LivingEntity.class) public abstract class MixinLivingEntity { - @WrapWithCondition(method = "dropItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;swingHand(Lnet/minecraft/util/Hand;)V")) - private boolean dontSwingHand(LivingEntity instance, Hand hand) { + @WrapWithCondition(method = "drop", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;swing(Lnet/minecraft/world/InteractionHand;)V")) + private boolean dontSwingHand(LivingEntity instance, InteractionHand hand) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_15_2); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinMinecraft.java similarity index 58% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinMinecraft.java index b55eba44b..fde0da929 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/swinging/MixinMinecraft.java @@ -24,10 +24,10 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.Hand; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionHand; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -36,45 +36,45 @@ import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(MinecraftClient.class) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { @Shadow @Nullable - public ClientPlayerEntity player; + public LocalPlayer player; - @WrapWithCondition(method = "handleInputEvents", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;swingHand(Lnet/minecraft/util/Hand;)V")) - private boolean disableSwing(ClientPlayerEntity instance, Hand hand) { + @WrapWithCondition(method = "handleKeybinds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V")) + private boolean disableSwing(LocalPlayer instance, InteractionHand hand) { return ProtocolTranslator.getTargetVersion().newerThanOrEqualTo(ProtocolVersion.v1_15); } - @Redirect(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/ActionResult$Success;swingSource()Lnet/minecraft/util/ActionResult$SwingSource;", ordinal = 0)) - private ActionResult.SwingSource disableSwing(ActionResult.Success instance) { + @Redirect(method = "startUseItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/InteractionResult$Success;swingSource()Lnet/minecraft/world/InteractionResult$SwingSource;", ordinal = 0)) + private InteractionResult.SwingSource disableSwing(InteractionResult.Success instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - return ActionResult.SwingSource.NONE; + return InteractionResult.SwingSource.NONE; } else { return instance.swingSource(); } } - @Redirect(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/ActionResult$Success;swingSource()Lnet/minecraft/util/ActionResult$SwingSource;", ordinal = 2)) - private ActionResult.SwingSource disableSwing2(ActionResult.Success instance) { + @Redirect(method = "startUseItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/InteractionResult$Success;swingSource()Lnet/minecraft/world/InteractionResult$SwingSource;", ordinal = 2)) + private InteractionResult.SwingSource disableSwing2(InteractionResult.Success instance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_14_4)) { - return ActionResult.SwingSource.NONE; + return InteractionResult.SwingSource.NONE; } else { return instance.swingSource(); } } - @Inject(method = "doAttack", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;crosshairTarget:Lnet/minecraft/util/hit/HitResult;", ordinal = 0)) + @Inject(method = "startAttack", at = @At(value = "FIELD", target = "Lnet/minecraft/client/Minecraft;hitResult:Lnet/minecraft/world/phys/HitResult;", ordinal = 0)) private void fixSwingPacketOrder(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { - this.player.swingHand(Hand.MAIN_HAND); + this.player.swing(InteractionHand.MAIN_HAND); } } - @WrapWithCondition(method = "doAttack", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;swingHand(Lnet/minecraft/util/Hand;)V")) - private boolean fixSwingPacketOrder(ClientPlayerEntity instance, Hand hand) { + @WrapWithCondition(method = "startAttack", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;swing(Lnet/minecraft/world/InteractionHand;)V")) + private boolean fixSwingPacketOrder(LocalPlayer instance, InteractionHand hand) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_8); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinClientWorld.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinClientLevel.java similarity index 71% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinClientWorld.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinClientLevel.java index f8663a75e..f50a734ba 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinClientWorld.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinClientLevel.java @@ -25,17 +25,17 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.viaversion.viafabricplus.injection.access.world.always_tick_entities.IEntity; import java.util.List; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.EntityList; -import net.minecraft.world.MutableWorldProperties; -import net.minecraft.world.World; -import net.minecraft.world.dimension.DimensionType; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.Holder; +import net.minecraft.util.Mth; +import net.minecraft.world.level.entity.EntityTickList; +import net.minecraft.world.level.storage.WritableLevelData; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.dimension.DimensionType; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -44,28 +44,28 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientWorld.class) -public abstract class MixinClientWorld extends World { +@Mixin(ClientLevel.class) +public abstract class MixinClientLevel extends Level { @Shadow @Final - EntityList entityList; + EntityTickList tickingEntities; - protected MixinClientWorld(MutableWorldProperties properties, RegistryKey registryRef, DynamicRegistryManager registryManager, RegistryEntry dimensionEntry, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { + protected MixinClientLevel(WritableLevelData properties, ResourceKey registryRef, RegistryAccess registryManager, Holder dimensionEntry, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { super(properties, registryRef, registryManager, dimensionEntry, isClient, debugWorld, seed, maxChainedNeighborUpdates); } @Shadow protected abstract void tickPassenger(final Entity entity, final Entity passenger); - @Inject(method = "tickEntity", at = @At("HEAD"), cancellable = true) + @Inject(method = "tickNonPassenger", at = @At("HEAD"), cancellable = true) private void alwaysTickEntities(Entity entity, CallbackInfo ci) { final IEntity mixinEntity = (IEntity) entity; if (!mixinEntity.viaFabricPlus$isInLoadedChunkAndShouldTick() && !entity.isSpectator()) { - entity.resetPosition(); + entity.setOldPosAndRot(); this.viaFabricPlus$checkChunk(entity); if (mixinEntity.viaFabricPlus$isInLoadedChunkAndShouldTick()) { - for (Entity entity2 : entity.getPassengerList()) { + for (Entity entity2 : entity.getPassengers()) { this.tickPassenger(entity, entity2); } } @@ -79,11 +79,11 @@ private void alwaysTickEntities(Entity entity, Entity passenger, CallbackInfo ci if (!mixinPassenger.viaFabricPlus$isInLoadedChunkAndShouldTick()) { if (passenger.isRemoved() || passenger.getVehicle() != entity) { passenger.stopRiding(); - } else if (passenger instanceof PlayerEntity || this.entityList.has(passenger)) { - passenger.resetPosition(); + } else if (passenger instanceof Player || this.tickingEntities.contains(passenger)) { + passenger.setOldPosAndRot(); this.viaFabricPlus$checkChunk(passenger); if (mixinPassenger.viaFabricPlus$isInLoadedChunkAndShouldTick()) { - for (Entity entity2 : passenger.getPassengerList()) { + for (Entity entity2 : passenger.getPassengers()) { this.tickPassenger(passenger, entity2); } } @@ -92,7 +92,7 @@ private void alwaysTickEntities(Entity entity, Entity passenger, CallbackInfo ci } } - @WrapOperation(method = "tickEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getPassengerList()Ljava/util/List;")) + @WrapOperation(method = "tickNonPassenger", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getPassengers()Ljava/util/List;")) private List alwaysTickEntities(Entity instance, Operation> original) { this.viaFabricPlus$checkChunk(instance); final IEntity mixinEntity = (IEntity) instance; @@ -106,9 +106,9 @@ private List alwaysTickEntities(Entity instance, Operation> @Unique private void viaFabricPlus$checkChunk(Entity entity) { final IEntity mixinEntity = (IEntity) entity; - final int chunkX = MathHelper.floor(entity.getX() / 16.0D); - final int chunkZ = MathHelper.floor(entity.getZ() / 16.0D); - if (!mixinEntity.viaFabricPlus$isInLoadedChunkAndShouldTick() || entity.getChunkPos().x != chunkX || entity.getChunkPos().z != chunkZ) { + final int chunkX = Mth.floor(entity.getX() / 16.0D); + final int chunkZ = Mth.floor(entity.getZ() / 16.0D); + if (!mixinEntity.viaFabricPlus$isInLoadedChunkAndShouldTick() || entity.chunkPosition().x != chunkX || entity.chunkPosition().z != chunkZ) { if (!(this.getChunk(chunkX, chunkZ).isEmpty())) { mixinEntity.viaFabricPlus$setInLoadedChunkAndShouldTick(true); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinEntity.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinEntity.java index 055b7b2da..d95160bf6 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinEntity.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/always_tick_entities/MixinEntity.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.injection.access.world.always_tick_entities.IEntity; import com.viaversion.viafabricplus.settings.impl.DebugSettings; -import net.minecraft.entity.Entity; +import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/border_chunk_rendering/MixinBuiltChunk.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/border_chunk_rendering/MixinBuiltChunk.java index a1e76b013..50a3e4641 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/border_chunk_rendering/MixinBuiltChunk.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/border_chunk_rendering/MixinBuiltChunk.java @@ -23,16 +23,16 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.render.chunk.ChunkBuilder; +import net.minecraft.client.renderer.chunk.SectionRenderDispatcher; 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.CallbackInfoReturnable; -@Mixin(ChunkBuilder.BuiltChunk.class) +@Mixin(SectionRenderDispatcher.RenderSection.class) public abstract class MixinBuiltChunk { - @Inject(method = "shouldBuild", at = @At("HEAD"), cancellable = true) + @Inject(method = "hasAllNeighbors", at = @At("HEAD"), cancellable = true) private void modifyRenderCondition(CallbackInfoReturnable cir) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_8)) { cir.setReturnValue(true); diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/MixinClientWorld.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/MixinClientLevel.java similarity index 83% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/MixinClientWorld.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/MixinClientLevel.java index c4645ae87..e3b306ed3 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/MixinClientWorld.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/disable_sequencing/MixinClientLevel.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.features.world.disable_sequencing.PendingUpdateManager1_18_2; import com.viaversion.viafabricplus.settings.impl.DebugSettings; -import net.minecraft.client.network.PendingUpdateManager; -import net.minecraft.client.world.ClientWorld; +import net.minecraft.client.multiplayer.prediction.BlockStatePredictionHandler; +import net.minecraft.client.multiplayer.ClientLevel; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -33,18 +33,18 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientWorld.class) -public abstract class MixinClientWorld { +@Mixin(ClientLevel.class) +public abstract class MixinClientLevel { @Mutable @Shadow @Final - private PendingUpdateManager pendingUpdateManager; + private BlockStatePredictionHandler blockStatePredictionHandler; @Inject(method = "", at = @At("RETURN")) private void removePendingUpdateManager(CallbackInfo ci) { if (DebugSettings.INSTANCE.disableSequencing.isEnabled()) { - this.pendingUpdateManager = new PendingUpdateManager1_18_2(); + this.blockStatePredictionHandler = new PendingUpdateManager1_18_2(); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinBlockItem.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinBlockItem.java index 9e747d5b7..9bb70c6e7 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinBlockItem.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinBlockItem.java @@ -24,12 +24,12 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.item.BlockItem; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.BlockItem; +import net.minecraft.sounds.SoundSource; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -37,9 +37,9 @@ public abstract class MixinBlockItem { @WrapWithCondition( - method = "place(Lnet/minecraft/item/ItemPlacementContext;)Lnet/minecraft/util/ActionResult;", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;playSound(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FF)V")) - private boolean disableBlockPlaceSounds(World instance, Entity source, BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { + method = "place(Lnet/minecraft/world/item/context/BlockPlaceContext;)Lnet/minecraft/world/InteractionResult;", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;playSound(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V")) + private boolean disableBlockPlaceSounds(Level instance, Entity source, BlockPos pos, SoundEvent sound, SoundSource category, float volume, float pitch) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_8); // Sent by the server in older versions } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinButtonBlock.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinButtonBlock.java index 53518055c..0773c81cd 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinButtonBlock.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinButtonBlock.java @@ -24,12 +24,12 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.block.ButtonBlock; -import net.minecraft.entity.Entity; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldAccess; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.entity.Entity; +import net.minecraft.sounds.SoundSource; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.LevelAccessor; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -37,9 +37,9 @@ public abstract class MixinButtonBlock { @WrapWithCondition( - method = "playClickSound", - at = @At(value = "INVOKE", target = "Lnet/minecraft/world/WorldAccess;playSound(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;)V")) - private boolean disableClickSounds(WorldAccess instance, Entity source, BlockPos pos, SoundEvent sound, SoundCategory category) { + method = "playSound", + at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/LevelAccessor;playSound(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;)V")) + private boolean disableClickSounds(LevelAccessor instance, Entity source, BlockPos pos, SoundEvent sound, SoundSource category) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_8); // Sent by the server in older versions } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinItems.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinItems.java index acee4a689..286aaad7d 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinItems.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/duplicated_sounds/MixinItems.java @@ -24,22 +24,22 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.entity.Entity; -import net.minecraft.item.FlintAndSteelItem; -import net.minecraft.item.HoeItem; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.FlintAndSteelItem; +import net.minecraft.world.item.HoeItem; +import net.minecraft.sounds.SoundSource; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin({FlintAndSteelItem.class, HoeItem.class}) public abstract class MixinItems { - @WrapWithCondition(method = "useOnBlock", at = @At(value = "INVOKE", - target = "Lnet/minecraft/world/World;playSound(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/sound/SoundEvent;Lnet/minecraft/sound/SoundCategory;FF)V")) - private boolean disableItemPlaceSounds(World instance, Entity source, BlockPos pos, SoundEvent sound, SoundCategory category, float volume, float pitch) { + @WrapWithCondition(method = "useOn", at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/level/Level;playSound(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/core/BlockPos;Lnet/minecraft/sounds/SoundEvent;Lnet/minecraft/sounds/SoundSource;FF)V")) + private boolean disableItemPlaceSounds(Level instance, Entity source, BlockPos pos, SoundEvent sound, SoundSource category, float volume, float pitch) { return ProtocolTranslator.getTargetVersion().newerThan(ProtocolVersion.v1_8); } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/MixinMinecraftClient.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/MixinMinecraft.java similarity index 86% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/MixinMinecraftClient.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/MixinMinecraft.java index e83ddf09f..89ba92a92 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/MixinMinecraftClient.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/item_picking/MixinMinecraft.java @@ -24,21 +24,21 @@ import com.viaversion.viafabricplus.features.world.item_picking.ItemPick1_21_3; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -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) -public abstract class MixinMinecraftClient { +@Mixin(Minecraft.class) +public abstract class MixinMinecraft { - @Inject(method = "doItemPick", at = @At("HEAD"), cancellable = true) + @Inject(method = "pickBlock", at = @At("HEAD"), cancellable = true) private void pickItemClientside(CallbackInfo ci) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_21_2)) { - ItemPick1_21_3.doItemPick((MinecraftClient) (Object) this); + ItemPick1_21_3.doItemPick((Minecraft) (Object) this); ci.cancel(); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/MixinGameOptions.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/MixinOptions.java similarity index 88% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/MixinGameOptions.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/MixinOptions.java index 9750a4c84..fde4b5355 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/MixinGameOptions.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/world/remove_server_view_distance/MixinOptions.java @@ -23,15 +23,15 @@ import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.option.GameOptions; +import net.minecraft.client.Options; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Mixin(GameOptions.class) -public abstract class MixinGameOptions { +@Mixin(Options.class) +public abstract class MixinOptions { - @ModifyVariable(method = "setServerViewDistance", at = @At("HEAD"), ordinal = 0, argsOnly = true) + @ModifyVariable(method = "setServerRenderDistance", at = @At("HEAD"), ordinal = 0, argsOnly = true) private int changeServerViewDistance(int viewDistance) { if (ProtocolTranslator.getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) { return 0; diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslator.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslator.java index 896bb6ae1..ec2fcf639 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslator.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslator.java @@ -26,7 +26,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.RequiredArgumentBuilder; import com.viaversion.viafabricplus.base.Events; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; +import com.viaversion.viafabricplus.injection.access.base.IConnection; import com.viaversion.viafabricplus.protocoltranslator.impl.command.ViaFabricPlusVLCommandHandler; import com.viaversion.viafabricplus.protocoltranslator.impl.platform.ViaFabricPlusViaLegacyPlatformImpl; import com.viaversion.viafabricplus.protocoltranslator.impl.platform.ViaFabricPlusViaVersionPlatformImpl; @@ -65,10 +65,10 @@ import net.lenni0451.reflect.stream.RStream; import net.lenni0451.reflect.stream.field.FieldWrapper; import net.minecraft.SharedConstants; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.ClientConnection; -import net.minecraft.util.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.Connection; +import net.minecraft.Util; import net.raphimc.viabedrock.api.BedrockProtocolVersion; import net.raphimc.viabedrock.protocol.data.ProtocolConstants; import org.cloudburstmc.netty.channel.raknet.config.RakChannelOption; @@ -81,7 +81,7 @@ public final class ProtocolTranslator { /** * These attribute keys are used to track the main connections of Minecraft and ViaVersion, so that they can be used later during the connection to send packets. */ - public static final AttributeKey CLIENT_CONNECTION_ATTRIBUTE_KEY = AttributeKey.newInstance("viafabricplus-clientconnection"); + public static final AttributeKey CLIENT_CONNECTION_ATTRIBUTE_KEY = AttributeKey.newInstance("viafabricplus-clientconnection"); /** * This attribute stores the forced version for the current connection (if you set a specific version in the Edit Server screen) @@ -131,8 +131,8 @@ public boolean isKnown() { * * @param connection the Minecraft connection */ - public static void injectViaPipeline(final ClientConnection connection, final Channel channel) { - final IClientConnection mixinClientConnection = (IClientConnection) connection; + public static void injectViaPipeline(final Connection connection, final Channel channel) { + final IConnection mixinClientConnection = (IConnection) connection; final ProtocolVersion serverVersion = mixinClientConnection.viaFabricPlus$getTargetVersion(); if (serverVersion != ProtocolTranslator.NATIVE_VERSION) { @@ -215,7 +215,7 @@ public static UserConnection createDummyUserConnection(final ProtocolVersion cli info.setState(State.PLAY); info.setProtocolVersion(clientVersion); info.setServerProtocolVersion(serverVersion); - final MinecraftClient mc = MinecraftClient.getInstance(); + final Minecraft mc = Minecraft.getInstance(); if (mc.player != null) { final GameProfile profile = mc.player.getGameProfile(); info.setUsername(profile.name()); @@ -226,12 +226,12 @@ public static UserConnection createDummyUserConnection(final ProtocolVersion cli } public static UserConnection getPlayNetworkUserConnection() { - final ClientPlayNetworkHandler handler = MinecraftClient.getInstance().getNetworkHandler(); + final ClientPacketListener handler = Minecraft.getInstance().getConnection(); if (handler == null) { return null; } - return ((IClientConnection) handler.getConnection()).viaFabricPlus$getUserConnection(); + return ((IConnection) handler.getConnection()).viaFabricPlus$getUserConnection(); } /** @@ -308,7 +308,7 @@ public static CompletableFuture init(final Path path) { ProtocolVersion.register(AUTO_DETECT_PROTOCOL); changeBedrockProtocolName(); ViaFabricPlusProtocol.INSTANCE.initialize(); - }, Util.getMainWorkerExecutor()); + }, Util.backgroundExecutor()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/ViaFabricPlusMappingDataLoader.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/ViaFabricPlusMappingDataLoader.java index f35d860d8..f54c8d26f 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/ViaFabricPlusMappingDataLoader.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/ViaFabricPlusMappingDataLoader.java @@ -28,8 +28,8 @@ import com.viaversion.viaversion.libs.gson.JsonObject; import java.util.HashMap; import java.util.Map; -import net.minecraft.block.Block; -import net.minecraft.registry.Registries; +import net.minecraft.world.level.block.Block; +import net.minecraft.core.registries.BuiltInRegistries; public final class ViaFabricPlusMappingDataLoader extends MappingDataLoader { @@ -75,7 +75,7 @@ public static String getBlockMaterial(final Block block, ProtocolVersion version version = ProtocolVersion.v1_19_4; } - final Map materials = BLOCK_MATERIALS.get(Registries.BLOCK.getId(block).toString()); + final Map materials = BLOCK_MATERIALS.get(BuiltInRegistries.BLOCK.getKey(block).toString()); if (materials == null) { return null; } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/ViaFabricPlusViaCommandSender.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/ViaFabricPlusViaCommandSender.java index 546b26c67..96c59431a 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/ViaFabricPlusViaCommandSender.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/ViaFabricPlusViaCommandSender.java @@ -24,14 +24,14 @@ import com.viaversion.viaversion.api.command.ViaCommandSender; import java.util.UUID; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.command.CommandSource; -import net.minecraft.text.Text; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.network.chat.Component; public final class ViaFabricPlusViaCommandSender implements ViaCommandSender { - private final CommandSource source; + private final SharedSuggestionProvider source; - public ViaFabricPlusViaCommandSender(final CommandSource source) { + public ViaFabricPlusViaCommandSender(final SharedSuggestionProvider source) { this.source = source; } @@ -42,12 +42,12 @@ public boolean hasPermission(String s) { @Override public void sendMessage(String s) { - ((FabricClientCommandSource) source).sendFeedback(Text.of(s.replace("/viaversion", "/viafabricplus"))); // ViaVersion doesn't support changing the root command name, so we have to do it ourselves + ((FabricClientCommandSource) source).sendFeedback(Component.nullToEmpty(s.replace("/viaversion", "/viafabricplus"))); // ViaVersion doesn't support changing the root command name, so we have to do it ourselves } @Override public UUID getUUID() { - return ((FabricClientCommandSource) source).getPlayer().getUuid(); + return ((FabricClientCommandSource) source).getPlayer().getUUID(); } @Override diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/ListExtensionsCommand.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/ListExtensionsCommand.java index 1a72aa4b8..96ac3967d 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/ListExtensionsCommand.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/ListExtensionsCommand.java @@ -24,7 +24,7 @@ import com.viaversion.viafabricplus.injection.access.base.IExtensionProtocolMetadataStorage; import com.viaversion.viafabricplus.protocoltranslator.impl.command.VFPViaSubCommand; import com.viaversion.viaversion.api.command.ViaCommandSender; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.classic.c0_30cpetoc0_28_30.storage.ExtensionProtocolMetadataStorage; @@ -43,11 +43,11 @@ public String description() { @Override public boolean execute(ViaCommandSender sender, String[] args) { if (getUser() == null || !getUser().has(ExtensionProtocolMetadataStorage.class)) { - sendMessage(sender, Formatting.RED + "Only for " + LegacyProtocolVersion.c0_30cpe.getName()); + sendMessage(sender, ChatFormatting.RED + "Only for " + LegacyProtocolVersion.c0_30cpe.getName()); return true; } ((IExtensionProtocolMetadataStorage) getUser().get(ExtensionProtocolMetadataStorage.class)).viaFabricPlus$getServerExtensions().forEach((extension, version) -> { - sendMessage(sender, Formatting.GREEN + extension.getName() + Formatting.GOLD + " v" + version); + sendMessage(sender, ChatFormatting.GREEN + extension.getName() + ChatFormatting.GOLD + " v" + version); }); return true; } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/SetTimeCommand.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/SetTimeCommand.java index eeaacddab..19a322c8b 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/SetTimeCommand.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/command/classic/SetTimeCommand.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.protocoltranslator.impl.command.VFPViaSubCommand; import com.viaversion.viaversion.api.command.ViaCommandSender; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.alpha.a1_0_16_2toa1_0_17_1_0_17_4.storage.TimeLockStorage; @@ -47,14 +47,14 @@ public String usage() { @Override public boolean execute(ViaCommandSender sender, String[] args) { if (getUser() == null || !getUser().has(TimeLockStorage.class)) { - sendMessage(sender, Formatting.RED + "Only for <= " + LegacyProtocolVersion.a1_0_16toa1_0_16_2.getName()); + sendMessage(sender, ChatFormatting.RED + "Only for <= " + LegacyProtocolVersion.a1_0_16toa1_0_16_2.getName()); return true; } try { if (args.length == 1) { final long time = Long.parseLong(args[0]) % 24_000L; getUser().get(TimeLockStorage.class).setTime(time); - sendMessage(sender, Formatting.GREEN + "Time has been set to " + Formatting.GOLD + time); + sendMessage(sender, ChatFormatting.GREEN + "Time has been set to " + ChatFormatting.GOLD + time); } else { return false; } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/platform/ViaFabricPlusViaVersionPlatformImpl.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/platform/ViaFabricPlusViaVersionPlatformImpl.java index 2714f5cc4..ac62c1e42 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/platform/ViaFabricPlusViaVersionPlatformImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/platform/ViaFabricPlusViaVersionPlatformImpl.java @@ -35,7 +35,7 @@ import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.metadata.ModMetadata; import net.fabricmc.loader.api.metadata.Person; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; public final class ViaFabricPlusViaVersionPlatformImpl extends ViaVersionPlatformImpl { @@ -65,7 +65,7 @@ public JsonObject getDump() { platformDump.addProperty("impl_version", ViaFabricPlusImpl.INSTANCE.getImplVersion()); platformDump.addProperty("native_version", ProtocolTranslator.NATIVE_VERSION.toString()); platformDump.addProperty("target_version", ProtocolTranslator.getTargetVersion().toString()); - platformDump.addProperty("in_world", MinecraftClient.getInstance().world != null); + platformDump.addProperty("in_world", Minecraft.getInstance().level != null); final Collection allMods = FabricLoader.getInstance().getAllMods(); final JsonArray mods = new JsonArray(allMods.size()); diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusAlphaInventoryProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusAlphaInventoryProvider.java index 2a317a721..841551174 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusAlphaInventoryProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusAlphaInventoryProvider.java @@ -25,11 +25,11 @@ import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.item.Item; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.item.ItemStack; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ItemStack; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import net.raphimc.vialegacy.protocol.alpha.a1_2_3_5_1_2_6tob1_0_1_1_1.provider.AlphaInventoryProvider; @@ -61,30 +61,30 @@ private Item convertItem(final ItemStack stack) { @Override public Item[] getMainInventoryItems(UserConnection connection) { - final PlayerEntity player = MinecraftClient.getInstance().player; + final Player player = Minecraft.getInstance().player; if (player == null) { return new Item[37]; } else { - return convertItems(player.getInventory().getMainStacks()); + return convertItems(player.getInventory().getNonEquipmentItems()); } } @Override public Item[] getCraftingInventoryItems(UserConnection connection) { - final PlayerEntity player = MinecraftClient.getInstance().player; + final Player player = Minecraft.getInstance().player; if (player == null) { return new Item[4]; } else { - return convertItems(player.playerScreenHandler.getCraftingInput().getHeldStacks()); + return convertItems(player.inventoryMenu.getCraftSlots().getItems()); } } @Override public Item[] getArmorInventoryItems(UserConnection connection) { - final PlayerEntity player = MinecraftClient.getInstance().player; + final Player player = Minecraft.getInstance().player; final Item[] items = new Item[4]; if (player != null) { - final PlayerInventory inventory = player.getInventory(); + final Inventory inventory = player.getInventory(); items[0] = convertItem(inventory.equipment.get(EquipmentSlot.FEET)); items[1] = convertItem(inventory.equipment.get(EquipmentSlot.LEGS)); items[2] = convertItem(inventory.equipment.get(EquipmentSlot.CHEST)); @@ -96,18 +96,18 @@ public Item[] getArmorInventoryItems(UserConnection connection) { @Override public Item[] getContainerItems(UserConnection connection) { - final PlayerEntity player = MinecraftClient.getInstance().player; + final Player player = Minecraft.getInstance().player; if (player == null) { return new Item[37]; } else { - return convertItems(player.currentScreenHandler.getStacks()); + return convertItems(player.containerMenu.getItems()); } } @Override public void addToInventory(UserConnection connection, Item item) { - final PlayerEntity player = MinecraftClient.getInstance().player; - player.getInventory().insertStack(ItemTranslator.viaToMc(item, LegacyProtocolVersion.b1_8tob1_8_1)); + final Player player = Minecraft.getInstance().player; + player.getInventory().add(ItemTranslator.viaToMc(item, LegacyProtocolVersion.b1_8tob1_8_1)); } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusEncryptionProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusEncryptionProvider.java index abf653514..55df921fb 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusEncryptionProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusEncryptionProvider.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.protocoltranslator.impl.provider.vialegacy; -import com.viaversion.viafabricplus.injection.access.base.IClientConnection; +import com.viaversion.viafabricplus.injection.access.base.IConnection; import com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator; import com.viaversion.viaversion.api.connection.UserConnection; import net.raphimc.vialegacy.protocol.release.r1_6_4tor1_7_2_5.provider.EncryptionProvider; @@ -30,7 +30,7 @@ public final class ViaFabricPlusEncryptionProvider extends EncryptionProvider { @Override public void enableDecryption(UserConnection connection) { - ((IClientConnection) connection.getChannel().attr(ProtocolTranslator.CLIENT_CONNECTION_ATTRIBUTE_KEY).get()).viaFabricPlus$setupPreNettyDecryption(); + ((IConnection) connection.getChannel().attr(ProtocolTranslator.CLIENT_CONNECTION_ATTRIBUTE_KEY).get()).viaFabricPlus$setupPreNettyDecryption(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java index f2763a9fb..b38e7fca8 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/vialegacy/ViaFabricPlusOldAuthProvider.java @@ -26,8 +26,8 @@ import com.viaversion.viafabricplus.settings.impl.AuthenticationSettings; import com.viaversion.viafabricplus.util.ChatUtil; import com.viaversion.viaversion.api.connection.UserConnection; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import net.raphimc.vialegacy.protocol.release.r1_2_4_5tor1_3_1_2.provider.OldAuthProvider; public final class ViaFabricPlusOldAuthProvider extends OldAuthProvider { @@ -39,10 +39,10 @@ public void sendAuthRequest(UserConnection connection, String serverId) { } try { - final MinecraftClient client = MinecraftClient.getInstance(); - client.getApiServices().sessionService().joinServer(client.getSession().getUuidOrNull(), client.getSession().getAccessToken(), serverId); + final Minecraft client = Minecraft.getInstance(); + client.services().sessionService().joinServer(client.getUser().getProfileId(), client.getUser().getAccessToken(), serverId); } catch (Exception e) { - connection.getChannel().attr(ProtocolTranslator.CLIENT_CONNECTION_ATTRIBUTE_KEY).get().disconnect(ChatUtil.prefixText(Text.translatable("betacraft.viafabricplus.failed_to_verify_session"))); + connection.getChannel().attr(ProtocolTranslator.CLIENT_CONNECTION_ATTRIBUTE_KEY).get().disconnect(ChatUtil.prefixText(Component.translatable("betacraft.viafabricplus.failed_to_verify_session"))); ViaFabricPlusImpl.INSTANCE.getLogger().error("Error occurred while calling join server to verify session", e); } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java index 21520710d..bb6e873c6 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusCommandArgumentsProvider.java @@ -25,21 +25,21 @@ import com.viaversion.viaversion.util.Pair; import java.util.Collections; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.command.argument.SignedArgumentList; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.chat.SignableCommand; public final class ViaFabricPlusCommandArgumentsProvider extends SignableCommandArgumentsProvider { @Override public List> getSignableArguments(String command) { - final ClientPlayNetworkHandler network = MinecraftClient.getInstance().getNetworkHandler(); + final ClientPacketListener network = Minecraft.getInstance().getConnection(); if (network != null) { - return SignedArgumentList.of( - network.getCommandDispatcher().parse(command, network.getCommandSource())). + return SignableCommand.of( + network.getCommands().parse(command, network.getSuggestionsProvider())). arguments().stream(). - map(function -> new Pair<>(function.getNodeName(), function.value())). + map(function -> new Pair<>(function.name(), function.value())). toList(); } else { return Collections.emptyList(); diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusHandItemProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusHandItemProvider.java index fc5e07680..27d8e5f28 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusHandItemProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusHandItemProvider.java @@ -26,7 +26,7 @@ import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.protocols.v1_8to1_9.provider.HandItemProvider; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.ItemStack; public final class ViaFabricPlusHandItemProvider extends HandItemProvider { diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerAbilitiesProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerAbilitiesProvider.java index 8dffab17f..515868c5d 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerAbilitiesProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerAbilitiesProvider.java @@ -23,18 +23,18 @@ import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.protocols.v1_15_2to1_16.provider.PlayerAbilitiesProvider; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; public final class ViaFabricPlusPlayerAbilitiesProvider extends PlayerAbilitiesProvider { @Override public float getFlyingSpeed(UserConnection connection) { - return MinecraftClient.getInstance().player.getAbilities().getFlySpeed(); + return Minecraft.getInstance().player.getAbilities().getFlyingSpeed(); } @Override public float getWalkingSpeed(UserConnection connection) { - return MinecraftClient.getInstance().player.getAbilities().getWalkSpeed(); + return Minecraft.getInstance().player.getAbilities().getWalkingSpeed(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerLookTargetProvider.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerLookTargetProvider.java index 091aa6c72..6c19ecfa5 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerLookTargetProvider.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/impl/provider/viaversion/ViaFabricPlusPlayerLookTargetProvider.java @@ -24,15 +24,15 @@ import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.BlockPosition; import com.viaversion.viaversion.protocols.v1_12_2to1_13.provider.PlayerLookTargetProvider; -import net.minecraft.client.MinecraftClient; -import net.minecraft.util.hit.BlockHitResult; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.Minecraft; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.core.BlockPos; public final class ViaFabricPlusPlayerLookTargetProvider extends PlayerLookTargetProvider { @Override public BlockPosition getPlayerLookTarget(UserConnection info) { - if (MinecraftClient.getInstance().crosshairTarget instanceof BlockHitResult blockHitResult) { + if (Minecraft.getInstance().hitResult instanceof BlockHitResult blockHitResult) { final BlockPos pos = blockHitResult.getBlockPos(); return new BlockPosition(pos.getX(), pos.getY(), pos.getZ()); } else { diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusVLLegacyPipeline.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusVLLegacyPipeline.java index b5e034619..55b1ff156 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusVLLegacyPipeline.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusVLLegacyPipeline.java @@ -29,7 +29,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; -import net.minecraft.network.handler.HandlerNames; +import net.minecraft.network.HandlerNames; public final class ViaFabricPlusVLLegacyPipeline extends VLLegacyPipeline { diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusViaDecoder.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusViaDecoder.java index bfc9e49fe..52165efba 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusViaDecoder.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/netty/ViaFabricPlusViaDecoder.java @@ -27,8 +27,8 @@ import com.viaversion.vialoader.netty.ViaDecoder; import com.viaversion.viaversion.api.connection.UserConnection; import io.netty.channel.ChannelHandlerContext; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public final class ViaFabricPlusViaDecoder extends ViaDecoder { @@ -50,7 +50,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception ViaFabricPlusImpl.INSTANCE.getLogger().error("Error occurred while decoding packet in ViaFabricPlus decoder", t); if (mode == 1) { // Mode 1: Send a message to the player that an error occurred and log the error - ChatUtil.sendPrefixedMessage(Text.translatable("translation.viafabricplus.packet_error").formatted(Formatting.RED)); + ChatUtil.sendPrefixedMessage(Component.translatable("translation.viafabricplus.packet_error").withStyle(ChatFormatting.RED)); } } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/BlockStateTranslator.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/BlockStateTranslator.java index d325285b7..c72fc26b7 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/BlockStateTranslator.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/BlockStateTranslator.java @@ -31,9 +31,9 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.v1_17_1to1_18.packet.ClientboundPackets1_18; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.Blocks; public final class BlockStateTranslator { @@ -58,10 +58,10 @@ public static BlockState via1_18_2toMc(final int blockStateId) { levelEvent.read(Types.INT); // eventId levelEvent.read(Types.BLOCK_POSITION1_14); // position - return Block.getStateFromRawId(levelEvent.read(Types.INT)); // data + return Block.stateById(levelEvent.read(Types.INT)); // data } catch (Throwable t) { ViaFabricPlusImpl.INSTANCE.getLogger().error("Error converting ViaVersion 1.18.2 block state to native block state", t); - return Blocks.AIR.getDefaultState(); + return Blocks.AIR.defaultBlockState(); } } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/ItemTranslator.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/ItemTranslator.java index 6cb4539f5..77481be8d 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/ItemTranslator.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/translator/ItemTranslator.java @@ -34,9 +34,9 @@ import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.v1_12to1_12_1.packet.ClientboundPackets1_12_1; import io.netty.buffer.Unpooled; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.ItemStack; -import net.minecraft.network.RegistryByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.RegistryFriendlyByteBuf; public final class ItemTranslator { @@ -44,9 +44,9 @@ public static Item mcToVia(final ItemStack stack, final ProtocolVersion targetVe final UserConnection connection = ProtocolTranslator.createDummyUserConnection(ProtocolTranslator.NATIVE_VERSION, targetVersion); try { - final RegistryByteBuf buf = new RegistryByteBuf(Unpooled.buffer(), MinecraftClient.getInstance().getNetworkHandler().getRegistryManager()); + final RegistryFriendlyByteBuf buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), Minecraft.getInstance().getConnection().registryAccess()); buf.writeShort(0); // slot - ItemStack.LENGTH_PREPENDED_OPTIONAL_PACKET_CODEC.encode(buf, stack); // item + ItemStack.OPTIONAL_UNTRUSTED_STREAM_CODEC.encode(buf, stack); // item final PacketWrapper setCreativeModeSlot = PacketWrapper.create(ViaFabricPlusProtocol.INSTANCE.getSetCreativeModeSlot(), buf, connection); connection.getProtocolInfo().getPipeline().transform(Direction.SERVERBOUND, State.PLAY, setCreativeModeSlot); @@ -75,14 +75,14 @@ public static ItemStack viaToMc(final Item item, final ProtocolVersion sourceVer containerSetSlot.resetReader(); containerSetSlot.user().getProtocolInfo().getPipeline().transform(Direction.CLIENTBOUND, State.PLAY, containerSetSlot); - final RegistryByteBuf buf = new RegistryByteBuf(Unpooled.buffer(), MinecraftClient.getInstance().getNetworkHandler().getRegistryManager()); + final RegistryFriendlyByteBuf buf = new RegistryFriendlyByteBuf(Unpooled.buffer(), Minecraft.getInstance().getConnection().registryAccess()); containerSetSlot.setPacketType(null); containerSetSlot.writeToBuffer(buf); buf.readUnsignedByte(); // sync id buf.readVarInt(); // revision buf.readShort(); // slot - return ItemStack.OPTIONAL_PACKET_CODEC.decode(buf); + return ItemStack.OPTIONAL_STREAM_CODEC.decode(buf); } catch (Throwable t) { ViaFabricPlusImpl.INSTANCE.getLogger().error("Error converting ViaVersion {} item to native item stack", sourceVersion, t); return ItemStack.EMPTY; diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/util/ProtocolVersionDetector.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/util/ProtocolVersionDetector.java index 3125fd976..69ee254f5 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/util/ProtocolVersionDetector.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/util/ProtocolVersionDetector.java @@ -30,9 +30,9 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.nio.charset.StandardCharsets; -import net.minecraft.client.network.ServerAddress; -import net.minecraft.network.packet.c2s.handshake.ConnectionIntent; -import net.minecraft.util.Formatting; +import net.minecraft.client.multiplayer.resolver.ServerAddress; +import net.minecraft.network.protocol.handshake.ClientIntent; +import net.minecraft.ChatFormatting; import static com.viaversion.viafabricplus.save.AbstractSave.GSON; @@ -52,13 +52,13 @@ public final class ProtocolVersionDetector { */ public static ProtocolVersion get(final ServerAddress serverAddress, final InetSocketAddress socketAddress, final ProtocolVersion clientVersion) throws Exception { try ( - final Socket socket = new Socket(serverAddress.getAddress(), serverAddress.getPort()); + final Socket socket = new Socket(serverAddress.getHost(), serverAddress.getPort()); - final DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); - final DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); + final DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); + final DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); - final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - final DataOutputStream handshakePacket = new DataOutputStream(byteArrayOutputStream) + final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + final DataOutputStream handshakePacket = new DataOutputStream(byteArrayOutputStream) ) { socket.setTcpNoDelay(true); socket.setSoTimeout(TIMEOUT); @@ -68,13 +68,13 @@ public static ProtocolVersion get(final ServerAddress serverAddress, final InetS writeVarInt(handshakePacket, clientVersion.getOriginalVersion()); if (clientVersion.olderThanOrEqualTo(ProtocolVersion.v1_17)) { - writeString(handshakePacket, serverAddress.getAddress()); + writeString(handshakePacket, serverAddress.getHost()); handshakePacket.writeShort(serverAddress.getPort()); } else { writeString(handshakePacket, socketAddress.getHostString()); handshakePacket.writeShort(socketAddress.getPort()); } - writeVarInt(handshakePacket, ConnectionIntent.STATUS.getId()); + writeVarInt(handshakePacket, ClientIntent.STATUS.id()); writeVarInt(dataOutputStream, byteArrayOutputStream.size()); dataOutputStream.write(byteArrayOutputStream.toByteArray()); @@ -126,7 +126,7 @@ public static ProtocolVersion get(final ServerAddress serverAddress, final InetS } } - throw new RuntimeException("Unable to detect the server version\nServer sent an invalid protocol id: " + serverAddress + " (" + name + Formatting.RESET + ")"); + throw new RuntimeException("Unable to detect the server version\nServer sent an invalid protocol id: " + serverAddress + " (" + name + ChatFormatting.RESET + ")"); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/VFPList.java b/src/main/java/com/viaversion/viafabricplus/screen/VFPList.java index 292a9872e..e0d3e0a93 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/VFPList.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/VFPList.java @@ -24,12 +24,12 @@ import com.viaversion.viafabricplus.screen.impl.PerServerVersionScreen; import com.viaversion.viafabricplus.screen.impl.ProtocolSelectionScreen; import com.viaversion.viafabricplus.settings.impl.GeneralSettings; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.ObjectSelectionList; /** - * Wrapper class for {@link AlwaysSelectedEntryListWidget} including the following features: + * Wrapper class for {@link ObjectSelectionList} including the following features: *
    *
  • Changing the constructor arguments to be more readable and customizable
  • *
  • Adds {@link #initScrollY(double)} to save the scroll state after closing the screen, requires static tracking by the implementation
  • @@ -39,27 +39,27 @@ * @see ProtocolSelectionScreen * @see PerServerVersionScreen */ -public class VFPList extends AlwaysSelectedEntryListWidget { +public class VFPList extends ObjectSelectionList { - public VFPList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public VFPList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height - top - bottom, top, entryHeight); } public void initScrollY(final double scrollY) { // Needs calling last in init to have data loaded before setting scroll amount if (GeneralSettings.INSTANCE.saveScrollPositionInSlotScreens.getValue()) { - this.setScrollY(scrollY); + this.setScrollAmount(scrollY); } } @Override - public void setScrollY(double scrollY) { - super.setScrollY(scrollY); - updateSlotAmount(getScrollY()); // Ensure value is clamped + public void setScrollAmount(double scrollY) { + super.setScrollAmount(scrollY); + updateSlotAmount(scrollAmount()); // Ensure value is clamped } @Override - protected void drawSelectionHighlight(final DrawContext context, final VFPListEntry entry, final int color) { + protected void renderSelection(final GuiGraphics context, final VFPListEntry entry, final int color) { // Remove selection box } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/VFPListEntry.java b/src/main/java/com/viaversion/viafabricplus/screen/VFPListEntry.java index 0b812af0d..73f75a1df 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/VFPListEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/VFPListEntry.java @@ -21,42 +21,42 @@ package com.viaversion.viafabricplus.screen; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.Text; -import net.minecraft.util.Util; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.ObjectSelectionList; +import net.minecraft.client.gui.components.AbstractWidget; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.network.chat.Component; +import net.minecraft.Util; +import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2fStack; /** - * This class is a wrapper for the {@link net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget.Entry} class. + * This class is a wrapper for the {@link net.minecraft.client.gui.components.ObjectSelectionList.Entry} class. * Features included: *
      - *
    • Add wrapper function {@link #mappedRender(DrawContext, int, int, int, int, int, int, boolean, float)} for: + *
    • Add wrapper function {@link #mappedRender(GuiGraphics, int, int, int, int, int, int, boolean, float)} for: *
        *
      • cross-sharing entry position/dimension between other helper functions
      • - *
      • Setting the entry position as start inside the {@link MatrixStack}
      • + *
      • Setting the entry position as start inside the {@link PoseStack}
      • *
      • rendering a default background
      • *
      *
    • Adds {@link #mappedMouseClicked(double, double, int)} to automatically play a click sound
    • - *
    • Adds some more utility functions, see {@link #renderScrollableText(Text, int, int)} and {@link #renderTooltip(Text, int, int)}
    • + *
    • Adds some more utility functions, see {@link #renderScrollableText(Component, int, int)} and {@link #renderTooltip(Component, int, int)}
    • * *
    */ -public abstract class VFPListEntry extends AlwaysSelectedEntryListWidget.Entry { +public abstract class VFPListEntry extends ObjectSelectionList.Entry { protected static final int SCISSORS_OFFSET = 4; public static final int SLOT_MARGIN = 3; - private DrawContext context; + private GuiGraphics context; - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { // To be overridden } @@ -68,16 +68,16 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { * Automatically plays a click sound and calls the {@link #mappedMouseClicked(double, double, int)} method */ @Override - public boolean mouseClicked(final Click click, final boolean doubled) { + public boolean mouseClicked(final MouseButtonEvent click, final boolean doubled) { mappedMouseClicked(click.x(), click.y(), click.button()); - ClickableWidget.playClickSound(MinecraftClient.getInstance().getSoundManager()); + AbstractWidget.playButtonClickSound(Minecraft.getInstance().getSoundManager()); return super.mouseClicked(click, doubled); } - public void renderScrollableText(final Text name, final int offset) { - final TextRenderer font = MinecraftClient.getInstance().textRenderer; + public void renderScrollableText(final Component name, final int offset) { + final Font font = Minecraft.getInstance().font; - renderScrollableText(name, getContentHeight() / 2 - font.fontHeight / 2, offset); + renderScrollableText(name, getContentHeight() / 2 - font.lineHeight / 2, offset); } /** @@ -87,21 +87,21 @@ public void renderScrollableText(final Text name, final int offset) { * @param textY The Y position of the text * @param offset The offset of the text from the left side of the slot, this is used to calculate the width of the text, which should be scrolled */ - public void renderScrollableText(final Text text, final int textY, final int offset) { - final TextRenderer font = MinecraftClient.getInstance().textRenderer; + public void renderScrollableText(final Component text, final int textY, final int offset) { + final Font font = Minecraft.getInstance().font; - final int fontWidth = font.getWidth(text); + final int fontWidth = font.width(text); if (fontWidth > (getContentWidth() - offset)) { - final double time = (double) Util.getMeasuringTimeMs() / 1000.0; + final double time = (double) Util.getMillis() / 1000.0; final double interpolateEnd = fontWidth - (getContentWidth() - offset - (SCISSORS_OFFSET + SLOT_MARGIN)); final double interpolatedValue = Math.sin((Math.PI / 2) * Math.cos(Math.PI * 2 * time / Math.max(interpolateEnd * 0.5, 3.0))) / 2.0 + 0.5; context.enableScissor(0, 0, getContentWidth() - offset - SCISSORS_OFFSET, getContentHeight()); - context.drawTextWithShadow(font, text, SLOT_MARGIN - (int) MathHelper.lerp(interpolatedValue, 0.0, interpolateEnd), textY, -1); + context.drawString(font, text, SLOT_MARGIN - (int) Mth.lerp(interpolatedValue, 0.0, interpolateEnd), textY, -1); context.disableScissor(); } else { - context.drawTextWithShadow(font, text, SLOT_MARGIN, textY, -1); + context.drawString(font, text, SLOT_MARGIN, textY, -1); } } @@ -112,20 +112,20 @@ public void renderScrollableText(final Text text, final int textY, final int off * @param mouseX The current mouse X position * @param mouseY The current mouse Y position */ - public void renderTooltip(final @Nullable Text tooltip, final int mouseX, final int mouseY) { + public void renderTooltip(final @Nullable Component tooltip, final int mouseX, final int mouseY) { if (tooltip != null && mouseX >= getX() && mouseX <= getX() + getWidth() && mouseY >= getY() && mouseY <= getY() + getHeight()) { - context.drawTooltip(MinecraftClient.getInstance().textRenderer, tooltip, mouseX, mouseY); + context.setTooltipForNextFrame(Minecraft.getInstance().font, tooltip, mouseX, mouseY); } } /** - * Automatically draws a background for the slot with the slot's dimension and calls the {@link #mappedRender(DrawContext, int, int, int, int, int, int, boolean, float)} method + * Automatically draws a background for the slot with the slot's dimension and calls the {@link #mappedRender(GuiGraphics, int, int, int, int, int, int, boolean, float)} method */ @Override - public void render(final DrawContext context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { + public void renderContent(final GuiGraphics context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { this.context = context; // Allows cross-sharing between util methods - final Matrix3x2fStack matrices = context.getMatrices(); + final Matrix3x2fStack matrices = context.pose(); matrices.pushMatrix(); matrices.translate(getContentX(), getContentY()); diff --git a/src/main/java/com/viaversion/viafabricplus/screen/VFPScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/VFPScreen.java index 9d1c9ecc0..8bbd0c3fb 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/VFPScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/VFPScreen.java @@ -23,19 +23,19 @@ import com.viaversion.viafabricplus.ViaFabricPlusImpl; import java.awt.*; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ConfirmLinkScreen; -import net.minecraft.client.gui.screen.NoticeScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.PressableTextWidget; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.ConfirmLinkScreen; +import net.minecraft.client.gui.screens.AlertScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.PlainTextButton; +import net.minecraft.network.chat.Component; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2fStack; /** - * This class is a wrapper for the {@link net.minecraft.client.gui.screen.Screen} class which provides some global + * This class is a wrapper for the {@link net.minecraft.client.gui.screens.Screen} class which provides some global * functions and features used in all screens which are added by ViaFabricPlus. *

    * Features: @@ -44,14 +44,14 @@ *

      *
    • {@link #setupDefaultSubtitle()}
    • *
    • {@link #setupUrlSubtitle(String)}
    • - *
    • {@link #setupSubtitle(Text)}
    • - *
    • {@link #setupSubtitle(Text, ButtonWidget.PressAction)}
    • + *
    • {@link #setupSubtitle(Component)}
    • + *
    • {@link #setupSubtitle(Component, Button.OnPress)}
    • *
    * *
  • Automatically adds a back button when set inside the constructor
  • *
  • Helper functions: *
      - *
    • {@link #showErrorScreen(Text, Throwable, Screen)}
    • + *
    • {@link #showErrorScreen(Component, Throwable, Screen)}
    • *
    *
  • *
@@ -69,16 +69,16 @@ public class VFPScreen extends Screen { private final boolean backButton; public Screen prevScreen; - private Text subtitle; - private ButtonWidget.PressAction subtitlePressAction; + private Component subtitle; + private Button.OnPress subtitlePressAction; - private PressableTextWidget subtitleWidget; + private PlainTextButton subtitleWidget; public VFPScreen(final String title, final boolean backButton) { - this(Text.of(title), backButton); + this(Component.nullToEmpty(title), backButton); } - public VFPScreen(final Text title, final boolean backButton) { + public VFPScreen(final Component title, final boolean backButton) { super(title); this.backButton = backButton; } @@ -98,7 +98,7 @@ public void setupDefaultSubtitle() { * @param subtitle The subtitle which should be rendered */ public void setupUrlSubtitle(final String subtitle) { - this.setupSubtitle(Text.of(subtitle), ConfirmLinkScreen.opening(this, subtitle)); + this.setupSubtitle(Component.nullToEmpty(subtitle), ConfirmLinkScreen.confirmLink(this, subtitle)); } /** @@ -106,7 +106,7 @@ public void setupUrlSubtitle(final String subtitle) { * * @param subtitle The subtitle which should be rendered */ - public void setupSubtitle(@Nullable final Text subtitle) { + public void setupSubtitle(@Nullable final Component subtitle) { this.setupSubtitle(subtitle, null); } @@ -116,19 +116,19 @@ public void setupSubtitle(@Nullable final Text subtitle) { * @param subtitle The subtitle which should be rendered * @param subtitlePressAction The press action which should be executed when the subtitle is clicked */ - public void setupSubtitle(@Nullable final Text subtitle, @Nullable final ButtonWidget.PressAction subtitlePressAction) { + public void setupSubtitle(@Nullable final Component subtitle, @Nullable final Button.OnPress subtitlePressAction) { this.subtitlePressAction = subtitlePressAction; if (subtitleWidget != null) { // Allows removing the subtitle when calling this method twice. - remove(subtitleWidget); + removeWidget(subtitleWidget); subtitleWidget = null; } if (subtitlePressAction == null) { this.subtitle = subtitle; } else { this.subtitle = null; - final int subtitleWidth = textRenderer.getWidth(subtitle); - this.addDrawableChild(subtitleWidget = new PressableTextWidget(width / 2 - (subtitleWidth / 2), (textRenderer.fontHeight + 2) * 2 + 3, subtitleWidth, textRenderer.fontHeight + 2, subtitle, subtitlePressAction, textRenderer)); + final int subtitleWidth = font.width(subtitle); + this.addRenderableWidget(subtitleWidget = new PlainTextButton(width / 2 - (subtitleWidth / 2), (font.lineHeight + 2) * 2 + 3, subtitleWidth, font.lineHeight + 2, subtitle, subtitlePressAction, font)); } } @@ -143,7 +143,7 @@ public void open(final Screen prevScreen) { } public static void setScreen(final Screen screen) { - final MinecraftClient client = MinecraftClient.getInstance(); + final Minecraft client = Minecraft.getInstance(); client.execute(() -> client.setScreen(screen)); } @@ -151,30 +151,30 @@ public static void setScreen(final Screen screen) { @Override protected void init() { if (backButton) { - this.addDrawableChild(ButtonWidget.builder(Text.of("<-"), button -> this.close()).position(5, 5).size(20, 20).build()); + this.addRenderableWidget(Button.builder(Component.nullToEmpty("<-"), button -> this.onClose()).pos(5, 5).size(20, 20).build()); } } public void addRefreshButton(final Runnable click) { - this.addDrawableChild(ButtonWidget.builder(Text.translatable("base.viafabricplus.refresh"), button -> { + this.addRenderableWidget(Button.builder(Component.translatable("base.viafabricplus.refresh"), button -> { click.run(); - client.setScreen(this); - }).position(width - 60 - 5, 5).size(60, 20).build()); + minecraft.setScreen(this); + }).pos(width - 60 - 5, 5).size(60, 20).build()); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); this.renderTitle(context); } @Override - public void close() { + public void onClose() { if (prevScreen instanceof VFPScreen vfpScreen) { vfpScreen.open(vfpScreen.prevScreen); // Support recursive opening } else { - MinecraftClient.getInstance().setScreen(prevScreen); + Minecraft.getInstance().setScreen(prevScreen); } } @@ -183,12 +183,12 @@ public void close() { * * @param context The current draw context */ - public void renderTitle(final DrawContext context) { - final Matrix3x2fStack matrices = context.getMatrices(); + public void renderTitle(final GuiGraphics context) { + final Matrix3x2fStack matrices = context.pose(); matrices.pushMatrix(); matrices.scale(2F, 2F); - context.drawCenteredTextWithShadow(textRenderer, "ViaFabricPlus", width / 4, 3, Color.ORANGE.getRGB()); + context.drawCenteredString(font, "ViaFabricPlus", width / 4, 3, Color.ORANGE.getRGB()); matrices.popMatrix(); renderSubtitle(context); @@ -199,10 +199,10 @@ public void renderTitle(final DrawContext context) { * * @param context The current draw context */ - public void renderSubtitle(final DrawContext context) { + public void renderSubtitle(final GuiGraphics context) { if (subtitle != null && subtitlePressAction == null) { - final int startY = (textRenderer.fontHeight + 2) * 2 + 3; - context.drawCenteredTextWithShadow(textRenderer, subtitle, width / 2, subtitleCentered() ? this.height / 2 - startY : startY, -1); + final int startY = (font.lineHeight + 2) * 2 + 3; + context.drawCenteredString(font, subtitle, width / 2, subtitleCentered() ? this.height / 2 - startY : startY, -1); } } @@ -211,15 +211,15 @@ protected boolean subtitleCentered() { return false; } - public void renderScreenTitle(final DrawContext context) { - context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.width / 2, 70, 16777215); + public void renderScreenTitle(final GuiGraphics context) { + context.drawCenteredString(this.font, this.title, this.width / 2, 70, 16777215); } - public @Nullable Text getSubtitle() { + public @Nullable Component getSubtitle() { return subtitle; } - public @Nullable PressableTextWidget getSubtitleWidget() { + public @Nullable PlainTextButton getSubtitleWidget() { return subtitleWidget; } @@ -230,11 +230,11 @@ public void renderScreenTitle(final DrawContext context) { * @param throwable The throwable which should be thrown * @param next The screen which should be opened after the error screen is closed */ - public static void showErrorScreen(final Text title, final Throwable throwable, final Screen next) { + public static void showErrorScreen(final Component title, final Throwable throwable, final Screen next) { ViaFabricPlusImpl.INSTANCE.getLogger().error("Something went wrong!", throwable); - final MinecraftClient client = MinecraftClient.getInstance(); - client.execute(() -> client.setScreen(new NoticeScreen(() -> client.setScreen(next), title, Text.translatable("base.viafabricplus.something_went_wrong").append("\n" + throwable.getMessage()), Text.translatable("base.viafabricplus.cancel"), false))); + final Minecraft client = Minecraft.getInstance(); + client.execute(() -> client.setScreen(new AlertScreen(() -> client.setScreen(next), title, Component.translatable("base.viafabricplus.something_went_wrong").append("\n" + throwable.getMessage()), Component.translatable("base.viafabricplus.cancel"), false))); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/PerServerVersionScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/PerServerVersionScreen.java index fbdbc6d67..1cda2a290 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/PerServerVersionScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/PerServerVersionScreen.java @@ -29,13 +29,13 @@ import java.awt.*; import java.util.function.Consumer; import java.util.function.Supplier; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public final class PerServerVersionScreen extends VFPScreen { @@ -43,25 +43,25 @@ public final class PerServerVersionScreen extends VFPScreen { private final Supplier selectionSupplier; public PerServerVersionScreen(final Screen prevScreen, final Consumer selectionConsumer, final Supplier selectionSupplier) { - super(Text.translatable("screen.viafabricplus.force_version"), false); + super(Component.translatable("screen.viafabricplus.force_version"), false); this.prevScreen = prevScreen; this.selectionConsumer = selectionConsumer; this.selectionSupplier = selectionSupplier; - this.setupSubtitle(Text.translatable("force_version.viafabricplus.title")); + this.setupSubtitle(Component.translatable("force_version.viafabricplus.title")); } @Override protected void init() { super.init(); - this.addDrawableChild(new SlotList(this.client, width, height, 3 + 3 /* start offset */ + (textRenderer.fontHeight + 2) * 3 /* title is 2 */, -5, textRenderer.fontHeight + 4)); + this.addRenderableWidget(new SlotList(this.minecraft, width, height, 3 + 3 /* start offset */ + (font.lineHeight + 2) * 3 /* title is 2 */, -5, font.lineHeight + 4)); } public final class SlotList extends VFPList { - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public SlotList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height, top, bottom, entryHeight); this.addEntry(new ResetSlot()); @@ -73,15 +73,15 @@ public abstract class SharedSlot extends VFPListEntry { @Override public void mappedMouseClicked(double mouseX, double mouseY, int button) { - close(); + onClose(); } } public final class ResetSlot extends SharedSlot { @Override - public Text getNarration() { - return Text.translatable("base.viafabricplus.cancel_and_reset"); + public Component getNarration() { + return Component.translatable("base.viafabricplus.cancel_and_reset"); } @Override @@ -90,9 +90,9 @@ public void mappedMouseClicked(final double mouseX, final double mouseY, final i } @Override - public void render(final DrawContext context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawCenteredTextWithShadow(textRenderer, ((MutableText) getNarration()).formatted(Formatting.GOLD), getContentMiddleX(), getContentMiddleY() - textRenderer.fontHeight / 2, -1); + public void renderContent(final GuiGraphics context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { + final Font textRenderer = Minecraft.getInstance().font; + context.drawCenteredString(textRenderer, ((MutableComponent) getNarration()).withStyle(ChatFormatting.GOLD), getContentXMiddle(), getContentYMiddle() - textRenderer.lineHeight / 2, -1); } } @@ -105,8 +105,8 @@ public ProtocolSlot(final ProtocolVersion protocolVersion) { } @Override - public Text getNarration() { - return Text.of(this.protocolVersion.getName()); + public Component getNarration() { + return Component.nullToEmpty(this.protocolVersion.getName()); } @Override @@ -115,11 +115,11 @@ public void mappedMouseClicked(final double mouseX, final double mouseY, final i } @Override - public void render(final DrawContext context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { + public void renderContent(final GuiGraphics context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { final boolean isSelected = protocolVersion.equals(selectionSupplier.get()); - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawCenteredTextWithShadow(textRenderer, this.protocolVersion.getName(), getContentMiddleX(), getContentMiddleY() - textRenderer.fontHeight / 2, isSelected ? Color.GREEN.getRGB() : -1); + final Font textRenderer = Minecraft.getInstance().font; + context.drawCenteredString(textRenderer, this.protocolVersion.getName(), getContentXMiddle(), getContentYMiddle() - textRenderer.lineHeight / 2, isSelected ? Color.GREEN.getRGB() : -1); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/ProtocolSelectionScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/ProtocolSelectionScreen.java index 23b7e9580..c866d8b36 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/ProtocolSelectionScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/ProtocolSelectionScreen.java @@ -28,11 +28,11 @@ import com.viaversion.vialoader.util.ProtocolVersionList; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.awt.*; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; public final class ProtocolSelectionScreen extends VFPScreen { @@ -46,15 +46,15 @@ private ProtocolSelectionScreen() { protected void init() { // List and Settings this.setupDefaultSubtitle(); - this.addDrawableChild(new SlotList(this.client, width, height, 3 + 3 /* start offset */ + (textRenderer.fontHeight + 2) * 3 /* title is 2 */, 30, textRenderer.fontHeight + 4)); - this.addDrawableChild(ButtonWidget.builder(Text.translatable("base.viafabricplus.settings"), button -> SettingsScreen.INSTANCE.open(this)).position(width - 98 - 5, 5).size(98, 20).build()); + this.addRenderableWidget(new SlotList(this.minecraft, width, height, 3 + 3 /* start offset */ + (font.lineHeight + 2) * 3 /* title is 2 */, 30, font.lineHeight + 4)); + this.addRenderableWidget(Button.builder(Component.translatable("base.viafabricplus.settings"), button -> SettingsScreen.INSTANCE.open(this)).pos(width - 98 - 5, 5).size(98, 20).build()); - final ButtonWidget serverList = this.addDrawableChild(ButtonWidget.builder(ServerListScreen.INSTANCE.getTitle(), button -> ServerListScreen.INSTANCE.open(this)) - .position(5, height - 25).size(98, 20).build()); - serverList.active = MinecraftClient.getInstance().getNetworkHandler() == null; + final Button serverList = this.addRenderableWidget(Button.builder(ServerListScreen.INSTANCE.getTitle(), button -> ServerListScreen.INSTANCE.open(this)) + .pos(5, height - 25).size(98, 20).build()); + serverList.active = Minecraft.getInstance().getConnection() == null; - this.addDrawableChild(ButtonWidget.builder(Text.translatable("report.viafabricplus.button"), button -> ReportIssuesScreen.INSTANCE.open(this)) - .position(width - 98 - 5, height - 25).size(98, 20).build()); + this.addRenderableWidget(Button.builder(Component.translatable("report.viafabricplus.button"), button -> ReportIssuesScreen.INSTANCE.open(this)) + .pos(width - 98 - 5, height - 25).size(98, 20).build()); super.init(); } @@ -62,7 +62,7 @@ protected void init() { public static class SlotList extends VFPList { private static double scrollAmount; - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public SlotList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height, top, bottom, entryHeight); ProtocolVersionList.getProtocolsNewToOld().stream().map(ProtocolSlot::new).forEach(this::addEntry); @@ -84,13 +84,13 @@ public ProtocolSlot(final ProtocolVersion protocolVersion) { } @Override - public Text getNarration() { - return Text.of(this.protocolVersion.getName()); + public Component getNarration() { + return Component.nullToEmpty(this.protocolVersion.getName()); } @Override public void mappedMouseClicked(double mouseX, double mouseY, int button) { - if (MinecraftClient.getInstance().getNetworkHandler() != null) { + if (Minecraft.getInstance().getConnection() != null) { // Setting the target version while connected to a server is not allowed as this will // literally break our code away. return; @@ -100,16 +100,16 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void render(final DrawContext context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { + public void renderContent(final GuiGraphics context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { final boolean isSelected = ProtocolTranslator.getTargetVersion().equals(protocolVersion); Color color = isSelected ? Color.GREEN : Color.RED; - if (MinecraftClient.getInstance().getNetworkHandler() != null) { + if (Minecraft.getInstance().getConnection() != null) { color = color.darker(); } - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawCenteredTextWithShadow(textRenderer, this.protocolVersion.getName(), getContentMiddleX(), getContentMiddleY() - textRenderer.fontHeight / 2, color.getRGB()); + final Font textRenderer = Minecraft.getInstance().font; + context.drawCenteredString(textRenderer, this.protocolVersion.getName(), getContentXMiddle(), getContentYMiddle() - textRenderer.lineHeight / 2, color.getRGB()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/ReportIssuesScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/ReportIssuesScreen.java index d53f5b977..451fa9e77 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/ReportIssuesScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/ReportIssuesScreen.java @@ -28,9 +28,9 @@ import java.net.URI; import java.util.LinkedHashMap; import java.util.Map; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Util; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.Util; import org.jetbrains.annotations.Nullable; public final class ReportIssuesScreen extends VFPScreen { @@ -42,31 +42,31 @@ public final class ReportIssuesScreen extends VFPScreen { private long delay = -1; public ReportIssuesScreen() { - super(Text.translatable("screen.viafabricplus.report_issues"), true); + super(Component.translatable("screen.viafabricplus.report_issues"), true); if (!actions.isEmpty()) { return; } actions.put("report.viafabricplus.bug_report", () -> { - Util.getOperatingSystem().open(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml")); - this.setupSubtitle(Text.translatable("report.viafabricplus.bug_report.response")); + Util.getPlatform().openUri(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml")); + this.setupSubtitle(Component.translatable("report.viafabricplus.bug_report.response")); }); actions.put("report.viafabricplus.feature_request", () -> { - Util.getOperatingSystem().open(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.yml")); - this.setupSubtitle(Text.translatable("report.viafabricplus.feature_request.response")); + Util.getPlatform().openUri(URI.create("https://github.com/ViaVersion/ViaFabricPlus/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.yml")); + this.setupSubtitle(Component.translatable("report.viafabricplus.feature_request.response")); }); - actions.put("report.viafabricplus.create_via_dump", () -> DumpUtil.postDump(client.getSession().getUuidOrNull()).whenComplete((s, throwable) -> { + actions.put("report.viafabricplus.create_via_dump", () -> DumpUtil.postDump(minecraft.getUser().getProfileId()).whenComplete((s, throwable) -> { if (throwable != null) { - this.setupSubtitle(Text.translatable("report.viafabricplus.create_via_dump.failed")); + this.setupSubtitle(Component.translatable("report.viafabricplus.create_via_dump.failed")); ViaFabricPlusImpl.INSTANCE.getLogger().error("Failed to create a dump", throwable); return; } - this.setupSubtitle(Text.translatable("report.viafabricplus.create_via_dump.success")); - client.keyboard.setClipboard(s); + this.setupSubtitle(Component.translatable("report.viafabricplus.create_via_dump.success")); + minecraft.keyboardHandler.setClipboard(s); })); actions.put("report.viafabricplus.open_logs", () -> { - Util.getOperatingSystem().open(new File(client.runDirectory, "logs") /* there is no constant for this in the game */); - this.setupSubtitle(Text.translatable("report.viafabricplus.open_logs.response")); + Util.getPlatform().openFile(new File(minecraft.gameDirectory, "logs") /* there is no constant for this in the game */); + this.setupSubtitle(Component.translatable("report.viafabricplus.open_logs.response")); }); } @@ -77,14 +77,14 @@ protected void init() { int i = 0; for (Map.Entry entry : actions.entrySet()) { - this.addDrawableChild(ButtonWidget.builder(Text.translatable(entry.getKey()), button -> entry.getValue().run()). - position(this.width / 2 - 100, this.height / 2 - 25 + i * (20 + 3)).size(200, 20).build()); + this.addRenderableWidget(Button.builder(Component.translatable(entry.getKey()), button -> entry.getValue().run()). + pos(this.width / 2 - 100, this.height / 2 - 25 + i * (20 + 3)).size(200, 20).build()); i++; } } @Override - public void setupSubtitle(@Nullable Text subtitle) { + public void setupSubtitle(@Nullable Component subtitle) { super.setupSubtitle(subtitle); this.delay = System.currentTimeMillis(); diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/ServerListScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/ServerListScreen.java index 8369bfbdd..a4c13c257 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/ServerListScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/ServerListScreen.java @@ -27,16 +27,16 @@ import com.viaversion.viafabricplus.screen.impl.classic4j.ClassiCubeLoginScreen; import com.viaversion.viafabricplus.screen.impl.classic4j.ClassiCubeServerListScreen; import com.viaversion.viafabricplus.screen.impl.realms.BedrockRealmsScreen; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; public final class ServerListScreen extends VFPScreen { public static final ServerListScreen INSTANCE = new ServerListScreen(); public ServerListScreen() { - super(Text.translatable("screen.viafabricplus.server_list"), true); + super(Component.translatable("screen.viafabricplus.server_list"), true); } @Override @@ -47,36 +47,36 @@ protected void init() { // ClassiCube final boolean loggedIn = SaveManager.INSTANCE.getAccountsSave().getClassicubeAccount() != null; - final ButtonWidget.Builder classiCubeBuilder = ButtonWidget.builder(ClassiCubeServerListScreen.INSTANCE.getTitle(), button -> { + final Button.Builder classiCubeBuilder = Button.builder(ClassiCubeServerListScreen.INSTANCE.getTitle(), button -> { if (!loggedIn) { ClassiCubeLoginScreen.INSTANCE.open(this); return; } ClassiCubeServerListScreen.INSTANCE.open(this); - }).position(this.width / 2 - 100, this.height / 2 - 25).size(200, 20); + }).pos(this.width / 2 - 100, this.height / 2 - 25).size(200, 20); if (!loggedIn) { - classiCubeBuilder.tooltip(Tooltip.of(Text.translatable("classicube.viafabricplus.warning"))); + classiCubeBuilder.tooltip(Tooltip.create(Component.translatable("classicube.viafabricplus.warning"))); } - this.addDrawableChild(classiCubeBuilder.build()); + this.addRenderableWidget(classiCubeBuilder.build()); - final ButtonWidget.Builder betaCraftBuilder = ButtonWidget.builder(BetaCraftScreen.INSTANCE.getTitle(), button -> { + final Button.Builder betaCraftBuilder = Button.builder(BetaCraftScreen.INSTANCE.getTitle(), button -> { BetaCraftScreen.INSTANCE.open(this); - }).position(this.width / 2 - 100, this.height / 2 - 25 + 20 + 3).size(200, 20); + }).pos(this.width / 2 - 100, this.height / 2 - 25 + 20 + 3).size(200, 20); if (BetaCraftScreen.SERVER_LIST == null) { - betaCraftBuilder.tooltip(Tooltip.of(Text.translatable("betacraft.viafabricplus.warning"))); + betaCraftBuilder.tooltip(Tooltip.create(Component.translatable("betacraft.viafabricplus.warning"))); } - this.addDrawableChild(betaCraftBuilder.build()); + this.addRenderableWidget(betaCraftBuilder.build()); - final ButtonWidget.Builder bedrockRealmsBuilder = ButtonWidget.builder(BedrockRealmsScreen.INSTANCE.getTitle(), button -> { + final Button.Builder bedrockRealmsBuilder = Button.builder(BedrockRealmsScreen.INSTANCE.getTitle(), button -> { BedrockRealmsScreen.INSTANCE.open(this); - }).position(this.width / 2 - 100, this.height / 2 - 25 + 40 + 6).size(200, 20); + }).pos(this.width / 2 - 100, this.height / 2 - 25 + 40 + 6).size(200, 20); final boolean missingAccount = SaveManager.INSTANCE.getAccountsSave().getBedrockAccount() == null; // Only check for presence, later validate if (missingAccount) { - bedrockRealmsBuilder.tooltip(Tooltip.of(Text.translatable("bedrock_realms.viafabricplus.warning"))); + bedrockRealmsBuilder.tooltip(Tooltip.create(Component.translatable("bedrock_realms.viafabricplus.warning"))); } - final ButtonWidget bedrockRealmsButton = bedrockRealmsBuilder.build(); - this.addDrawableChild(bedrockRealmsButton); + final Button bedrockRealmsButton = bedrockRealmsBuilder.build(); + this.addRenderableWidget(bedrockRealmsButton); if (missingAccount) { bedrockRealmsButton.active = false; } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/SettingsScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/SettingsScreen.java index 7235a058b..1a7f235a5 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/SettingsScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/SettingsScreen.java @@ -36,21 +36,21 @@ import com.viaversion.viafabricplus.screen.impl.settings.TitleEntry; import com.viaversion.viafabricplus.screen.impl.settings.VersionedBooleanListEntry; import com.viaversion.viafabricplus.settings.SettingsManager; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; public final class SettingsScreen extends VFPScreen { public static final SettingsScreen INSTANCE = new SettingsScreen(); public SettingsScreen() { - super(Text.translatable("screen.viafabricplus.settings"), true); + super(Component.translatable("screen.viafabricplus.settings"), true); } @Override protected void init() { this.setupDefaultSubtitle(); - this.addDrawableChild(new SlotList(this.client, width, height, 3 + 3 /* start offset */ + (textRenderer.fontHeight + 2) * 3 /* title is 2 */, -5, (textRenderer.fontHeight + 2) * 2)); + this.addRenderableWidget(new SlotList(this.minecraft, width, height, 3 + 3 /* start offset */ + (font.lineHeight + 2) * 3 /* title is 2 */, -5, (font.lineHeight + 2) * 2)); super.init(); } @@ -58,7 +58,7 @@ protected void init() { public static class SlotList extends VFPList { private static double scrollAmount; - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public SlotList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height, top, bottom, entryHeight); for (SettingGroup group : SettingsManager.INSTANCE.getGroups()) { diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/BetaCraftScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/BetaCraftScreen.java index c0a702152..2a49ca5cb 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/BetaCraftScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/BetaCraftScreen.java @@ -31,12 +31,12 @@ import de.florianmichael.classic4j.model.betacraft.BCServerList; import de.florianmichael.classic4j.model.betacraft.BCVersionCategory; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ConfirmLinkScreen; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.ConfirmLinkScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import static com.viaversion.viafabricplus.screen.VFPListEntry.SLOT_MARGIN; @@ -58,7 +58,7 @@ protected void init() { createView(); return; } - setupSubtitle(Text.translatable("betacraft.viafabricplus.loading")); + setupSubtitle(Component.translatable("betacraft.viafabricplus.loading")); BetaCraftHandler.requestServerList(serverList -> { BetaCraftScreen.SERVER_LIST = serverList; createView(); @@ -66,10 +66,10 @@ protected void init() { } private void createView() { - this.setupSubtitle(Text.of(BETA_CRAFT_SERVER_LIST_URL), ConfirmLinkScreen.opening(this, BETA_CRAFT_SERVER_LIST_URL)); + this.setupSubtitle(Component.nullToEmpty(BETA_CRAFT_SERVER_LIST_URL), ConfirmLinkScreen.confirmLink(this, BETA_CRAFT_SERVER_LIST_URL)); - final int entryHeight = (textRenderer.fontHeight + 2) * 3; // title is 2 - this.addDrawableChild(new SlotList(this.client, width, height, 2 * SLOT_MARGIN + entryHeight, -5, entryHeight)); + final int entryHeight = (font.lineHeight + 2) * 3; // title is 2 + this.addRenderableWidget(new SlotList(this.minecraft, width, height, 2 * SLOT_MARGIN + entryHeight, -5, entryHeight)); this.addRefreshButton(() -> SERVER_LIST = null); } @@ -82,7 +82,7 @@ protected boolean subtitleCentered() { public static class SlotList extends VFPList { private static double scrollAmount; - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public SlotList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height, top, bottom, entryHeight); if (SERVER_LIST == null) { return; @@ -93,7 +93,7 @@ public SlotList(MinecraftClient minecraftClient, int width, int height, int top, if (servers.isEmpty()) { continue; } - addEntry(new TitleEntry(Text.of(value.name()))); + addEntry(new TitleEntry(Component.nullToEmpty(value.name()))); for (BCServerInfo server : servers) { addEntry(new ServerSlot(server)); } @@ -121,8 +121,8 @@ public ServerSlot(BCServerInfo server) { } @Override - public Text getNarration() { - return Text.of(server.name()); + public Component getNarration() { + return Component.nullToEmpty(server.name()); } @Override @@ -132,15 +132,15 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawCenteredTextWithShadow(textRenderer, server.name() + Formatting.DARK_GRAY + " [" + server.gameVersion() + "]", entryWidth / 2, entryHeight / 2 - textRenderer.fontHeight / 2, -1); + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; + context.drawCenteredString(textRenderer, server.name() + ChatFormatting.DARK_GRAY + " [" + server.gameVersion() + "]", entryWidth / 2, entryHeight / 2 - textRenderer.lineHeight / 2, -1); if (server.onlineMode()) { - context.drawTextWithShadow(textRenderer, Text.translatable("base.viafabricplus.online_mode").formatted(Formatting.GREEN), 1, 1, -1); + context.drawString(textRenderer, Component.translatable("base.viafabricplus.online_mode").withStyle(ChatFormatting.GREEN), 1, 1, -1); } final String playerText = server.playerCount() + "/" + server.playerLimit(); - context.drawTextWithShadow(textRenderer, playerText, entryWidth - textRenderer.getWidth(playerText) - 1, 1, -1); + context.drawString(textRenderer, playerText, entryWidth - textRenderer.width(playerText) - 1, 1, -1); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeLoginScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeLoginScreen.java index 4c60f73e6..4dc3e5e28 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeLoginScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeLoginScreen.java @@ -22,59 +22,59 @@ package com.viaversion.viafabricplus.screen.impl.classic4j; import com.viaversion.viafabricplus.ViaFabricPlusImpl; -import com.viaversion.viafabricplus.injection.access.base.ITextFieldWidget; +import com.viaversion.viafabricplus.injection.access.base.IEditBox; import com.viaversion.viafabricplus.save.SaveManager; import com.viaversion.viafabricplus.save.impl.AccountsSave; import com.viaversion.viafabricplus.screen.VFPScreen; import de.florianmichael.classic4j.ClassiCubeHandler; import de.florianmichael.classic4j.api.LoginProcessHandler; import de.florianmichael.classic4j.model.classicube.account.CCAccount; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.ConfirmLinkScreen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.ConfirmLinkScreen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; public final class ClassiCubeLoginScreen extends VFPScreen { public static final ClassiCubeLoginScreen INSTANCE = new ClassiCubeLoginScreen(); public ClassiCubeLoginScreen() { - super(Text.translatable("screen.viafabricplus.classicube_login"), true); + super(Component.translatable("screen.viafabricplus.classicube_login"), true); } - private TextFieldWidget nameField; - private TextFieldWidget passwordField; + private EditBox nameField; + private EditBox passwordField; @Override protected void init() { super.init(); if (this.getSubtitle() == null) { - this.setupSubtitle(Text.translatable("classicube.viafabricplus.account"), ConfirmLinkScreen.opening(this, ClassiCubeHandler.CLASSICUBE_ROOT_URI.toString())); + this.setupSubtitle(Component.translatable("classicube.viafabricplus.account"), ConfirmLinkScreen.confirmLink(this, ClassiCubeHandler.CLASSICUBE_ROOT_URI.toString())); } - this.addDrawableChild(nameField = new TextFieldWidget(textRenderer, width / 2 - 150, 70 + 10, 300, 20, Text.empty())); - this.addDrawableChild(passwordField = new TextFieldWidget(textRenderer, width / 2 - 150, nameField.getY() + 20 + 5, 300, 20, Text.empty())); - passwordField.addFormatter((s, integer) -> Text.of("*".repeat(s.length())).asOrderedText()); + this.addRenderableWidget(nameField = new EditBox(font, width / 2 - 150, 70 + 10, 300, 20, Component.empty())); + this.addRenderableWidget(passwordField = new EditBox(font, width / 2 - 150, nameField.getY() + 20 + 5, 300, 20, Component.empty())); + passwordField.addFormatter((s, integer) -> Component.nullToEmpty("*".repeat(s.length())).getVisualOrderText()); - nameField.setPlaceholder(Text.translatable("base.viafabricplus.name")); - passwordField.setPlaceholder(Text.translatable("base.viafabricplus.password")); + nameField.setHint(Component.translatable("base.viafabricplus.name")); + passwordField.setHint(Component.translatable("base.viafabricplus.password")); nameField.setMaxLength(Integer.MAX_VALUE); passwordField.setMaxLength(Integer.MAX_VALUE); - ((ITextFieldWidget) nameField).viaFabricPlus$unlockForbiddenCharacters(); - ((ITextFieldWidget) passwordField).viaFabricPlus$unlockForbiddenCharacters(); + ((IEditBox) nameField).viaFabricPlus$unlockForbiddenCharacters(); + ((IEditBox) passwordField).viaFabricPlus$unlockForbiddenCharacters(); final AccountsSave accountsSave = SaveManager.INSTANCE.getAccountsSave(); if (accountsSave.getClassicubeAccount() != null) { - nameField.setText(accountsSave.getClassicubeAccount().username()); - passwordField.setText(accountsSave.getClassicubeAccount().username()); + nameField.setValue(accountsSave.getClassicubeAccount().username()); + passwordField.setValue(accountsSave.getClassicubeAccount().username()); } - this.addDrawableChild(ButtonWidget.builder(Text.translatable("base.viafabricplus.login"), button -> { - accountsSave.setClassicubeAccount(new CCAccount(nameField.getText(), passwordField.getText())); - this.setupSubtitle(Text.translatable("classicube.viafabricplus.loading")); + this.addRenderableWidget(Button.builder(Component.translatable("base.viafabricplus.login"), button -> { + accountsSave.setClassicubeAccount(new CCAccount(nameField.getValue(), passwordField.getValue())); + this.setupSubtitle(Component.translatable("classicube.viafabricplus.loading")); ClassiCubeHandler.requestAuthentication(accountsSave.getClassicubeAccount(), null, new LoginProcessHandler() { @@ -91,21 +91,21 @@ public void handleSuccessfulLogin(CCAccount account) { @Override public void handleException(Throwable throwable) { ViaFabricPlusImpl.INSTANCE.getLogger().error("Error while logging in to ClassiCube!", throwable); - setupSubtitle(Text.of(throwable.getMessage())); + setupSubtitle(Component.nullToEmpty(throwable.getMessage())); } }); - }).position(width / 2 - 75, passwordField.getY() + (20 * 4) + 5).size(150, 20).build()); + }).pos(width / 2 - 75, passwordField.getY() + (20 * 4) + 5).size(150, 20).build()); } @Override - public void close() { + public void onClose() { // The user wasn't logged in when opening this screen, so he cancelled the login process, so we can safely unset the account SaveManager.INSTANCE.getAccountsSave().setClassicubeAccount(null); - super.close(); + super.onClose(); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); this.renderScreenTitle(context); } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeMFAScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeMFAScreen.java index baed444cc..4cd419a77 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeMFAScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeMFAScreen.java @@ -26,37 +26,37 @@ import de.florianmichael.classic4j.ClassiCubeHandler; import de.florianmichael.classic4j.api.LoginProcessHandler; import de.florianmichael.classic4j.model.classicube.account.CCAccount; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; public final class ClassiCubeMFAScreen extends VFPScreen { public static final ClassiCubeMFAScreen INSTANCE = new ClassiCubeMFAScreen(); public ClassiCubeMFAScreen() { - super(Text.translatable("screen.viafabricplus.classicube_mfa"), true); + super(Component.translatable("screen.viafabricplus.classicube_mfa"), true); } - private TextFieldWidget mfaField; + private EditBox mfaField; @Override protected void init() { super.init(); if (this.getSubtitle() == null) { - this.setupSubtitle(Text.translatable("classic4j_library.viafabricplus.error.logincode")); + this.setupSubtitle(Component.translatable("classic4j_library.viafabricplus.error.logincode")); } - this.addDrawableChild(mfaField = new TextFieldWidget(textRenderer, width / 2 - 150, 70 + 10, 300, 20, Text.empty())); + this.addRenderableWidget(mfaField = new EditBox(font, width / 2 - 150, 70 + 10, 300, 20, Component.empty())); - mfaField.setPlaceholder(Text.of("MFA")); + mfaField.setHint(Component.nullToEmpty("MFA")); - this.addDrawableChild(ButtonWidget.builder(Text.translatable("base.viafabricplus.login"), button -> { - this.setupSubtitle(Text.translatable("classicube.viafabricplus.loading")); + this.addRenderableWidget(Button.builder(Component.translatable("base.viafabricplus.login"), button -> { + this.setupSubtitle(Component.translatable("classicube.viafabricplus.loading")); final CCAccount account = SaveManager.INSTANCE.getAccountsSave().getClassicubeAccount(); - ClassiCubeHandler.requestAuthentication(account, mfaField.getText(), new LoginProcessHandler() { + ClassiCubeHandler.requestAuthentication(account, mfaField.getValue(), new LoginProcessHandler() { @Override public void handleMfa(CCAccount account) { // Not implemented in this case @@ -69,21 +69,21 @@ public void handleSuccessfulLogin(CCAccount account) { @Override public void handleException(Throwable throwable) { - setupSubtitle(Text.of(throwable.getMessage())); + setupSubtitle(Component.nullToEmpty(throwable.getMessage())); } }); - }).position(width / 2 - 75, mfaField.getY() + (20 * 4) + 5).size(150, 20).build()); + }).pos(width / 2 - 75, mfaField.getY() + (20 * 4) + 5).size(150, 20).build()); } @Override - public void close() { + public void onClose() { // The user wasn't logged in when opening this screen, so he cancelled the login process, so we can safely unset the account SaveManager.INSTANCE.getAccountsSave().setClassicubeAccount(null); - super.close(); + super.onClose(); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); this.renderScreenTitle(context); } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeServerListScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeServerListScreen.java index 1a3a8a66a..b345cbc53 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeServerListScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/classic4j/ClassiCubeServerListScreen.java @@ -34,12 +34,12 @@ import de.florianmichael.classic4j.model.classicube.server.CCServerInfo; import java.util.ArrayList; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import static com.viaversion.viafabricplus.screen.VFPListEntry.SLOT_MARGIN; @@ -67,24 +67,24 @@ protected void init() { ViaFabricPlusImpl.INSTANCE.getLogger().error("Error while loading ClassiCube servers!", throwable); showErrorScreen(INSTANCE.getTitle(), throwable, prevScreen); }); - setupSubtitle(Text.translatable("betacraft.viafabricplus.loading")); + setupSubtitle(Component.translatable("betacraft.viafabricplus.loading")); return; } - final int entryHeight = (textRenderer.fontHeight + 2) * 3; // title is 2 - this.addDrawableChild(new SlotList(this.client, width, height, 2 * SLOT_MARGIN + entryHeight, -5, entryHeight)); + final int entryHeight = (font.lineHeight + 2) * 3; // title is 2 + this.addRenderableWidget(new SlotList(this.minecraft, width, height, 2 * SLOT_MARGIN + entryHeight, -5, entryHeight)); - this.addDrawableChild(ButtonWidget.builder(Text.translatable("base.viafabricplus.logout"), button -> { + this.addRenderableWidget(Button.builder(Component.translatable("base.viafabricplus.logout"), button -> { SaveManager.INSTANCE.getAccountsSave().setClassicubeAccount(null); SERVER_LIST = null; - close(); - }).position(width - 60 - 5, 5).size(60, 20).build()); + onClose(); + }).pos(width - 60 - 5, 5).size(60, 20).build()); super.init(); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); if (SERVER_LIST == null) { @@ -92,8 +92,8 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { } final CCAccount account = SaveManager.INSTANCE.getAccountsSave().getClassicubeAccount(); - context.drawTextWithShadow(textRenderer, Text.translatable("classicube.viafabricplus.profile"), 32, 6, -1); - context.drawTextWithShadow(textRenderer, Text.of(account.username()), 32, 16, -1); + context.drawString(font, Component.translatable("classicube.viafabricplus.profile"), 32, 6, -1); + context.drawString(font, Component.nullToEmpty(account.username()), 32, 16, -1); } @Override @@ -104,7 +104,7 @@ protected boolean subtitleCentered() { public static class SlotList extends VFPList { private static double scrollAmount; - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public SlotList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height, top, bottom, entryHeight); SERVER_LIST.forEach(serverInfo -> this.addEntry(new ServerSlot(serverInfo))); @@ -130,8 +130,8 @@ public ServerSlot(CCServerInfo classiCubeServerInfo) { } @Override - public Text getNarration() { - return Text.of(classiCubeServerInfo.name()); + public Component getNarration() { + return Component.nullToEmpty(classiCubeServerInfo.name()); } @Override @@ -143,13 +143,13 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawCenteredTextWithShadow(textRenderer, classiCubeServerInfo.name(), entryWidth / 2, entryHeight / 2 - textRenderer.fontHeight / 2, -1); + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; + context.drawCenteredString(textRenderer, classiCubeServerInfo.name(), entryWidth / 2, entryHeight / 2 - textRenderer.lineHeight / 2, -1); - context.drawTextWithShadow(textRenderer, classiCubeServerInfo.software().replace('&', Formatting.FORMATTING_CODE_PREFIX), 1, 1, -1); + context.drawString(textRenderer, classiCubeServerInfo.software().replace('&', ChatFormatting.PREFIX_CODE), 1, 1, -1); final String playerText = classiCubeServerInfo.players() + "/" + classiCubeServerInfo.maxPlayers(); - context.drawTextWithShadow(textRenderer, playerText, entryWidth - textRenderer.getWidth(playerText) - 1, 1, -1); + context.drawString(textRenderer, playerText, entryWidth - textRenderer.width(playerText) - 1, 1, -1); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/AcceptInvitationCodeScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/AcceptInvitationCodeScreen.java index 2966996d4..35c94de8d 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/AcceptInvitationCodeScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/AcceptInvitationCodeScreen.java @@ -23,16 +23,16 @@ import com.viaversion.viafabricplus.screen.VFPScreen; import java.util.function.Consumer; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; public final class AcceptInvitationCodeScreen extends VFPScreen { private final Consumer serviceHandler; public AcceptInvitationCodeScreen(Consumer serviceHandler) { - super(Text.translatable("screen.viafabricplus.accept_invite"), true); + super(Component.translatable("screen.viafabricplus.accept_invite"), true); this.serviceHandler = serviceHandler; } @@ -42,15 +42,15 @@ protected void init() { super.init(); setupDefaultSubtitle(); - final TextFieldWidget codeField = new TextFieldWidget(textRenderer, this.width / 2 - 100, this.height / 2 - 10, 200, 20, Text.empty()); - codeField.setPlaceholder(Text.translatable("base.viafabricplus.code")); + final EditBox codeField = new EditBox(font, this.width / 2 - 100, this.height / 2 - 10, 200, 20, Component.empty()); + codeField.setHint(Component.translatable("base.viafabricplus.code")); - this.addDrawableChild(codeField); + this.addRenderableWidget(codeField); - this.addDrawableChild(ButtonWidget.builder(Text.translatable("base.viafabricplus.accept"), button -> { - this.serviceHandler.accept(codeField.getText()); - close(); - }).position(this.width / 2 - ButtonWidget.DEFAULT_WIDTH / 2, this.height / 2 + 20).build()); + this.addRenderableWidget(Button.builder(Component.translatable("base.viafabricplus.accept"), button -> { + this.serviceHandler.accept(codeField.getValue()); + onClose(); + }).pos(this.width / 2 - Button.DEFAULT_WIDTH / 2, this.height / 2 + 20).build()); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/BedrockRealmsScreen.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/BedrockRealmsScreen.java index b32d6c692..fba28cdf2 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/BedrockRealmsScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/realms/BedrockRealmsScreen.java @@ -29,12 +29,12 @@ import com.viaversion.viafabricplus.util.ConnectionUtil; import java.awt.*; import java.util.List; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.text.Text; -import net.minecraft.util.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.Util; import net.raphimc.minecraftauth.MinecraftAuth; import net.raphimc.minecraftauth.bedrock.BedrockAuthManager; import net.raphimc.minecraftauth.extra.realms.model.RealmsJoinInformation; @@ -52,11 +52,11 @@ public final class BedrockRealmsScreen extends VFPScreen { private List realmsServers; private SlotList slotList; - private ButtonWidget joinButton; - private ButtonWidget leaveButton; + private Button joinButton; + private Button leaveButton; public BedrockRealmsScreen() { - super(Text.translatable("screen.viafabricplus.bedrock_realms"), true); + super(Component.translatable("screen.viafabricplus.bedrock_realms"), true); } @Override @@ -68,14 +68,14 @@ protected void init() { return; } - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.availability_check")); - Util.getDownloadWorkerExecutor().execute(this::loadRealms); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.availability_check")); + Util.nonCriticalIoPool().execute(this::loadRealms); } private void loadRealms() { final BedrockAuthManager account = SaveManager.INSTANCE.getAccountsSave().getBedrockAccount(); if (account == null) { // Just in case... - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.warning")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.warning")); return; } @@ -87,13 +87,13 @@ private void loadRealms() { createView(); }).exceptionally(throwable -> error("Failed to load realm worlds", throwable)); } else { - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.unavailable")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.unavailable")); } }).exceptionally(throwable -> error("Failed to check realms availability", throwable)); } private Void error(final String message, final Throwable throwable) { - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.error")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.error")); ViaFabricPlusImpl.INSTANCE.getLogger().log(Level.ERROR, message, throwable); return null; } @@ -102,29 +102,29 @@ private void createView() { if (!this.realmsServers.isEmpty()) { setupDefaultSubtitle(); } else { - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.no_worlds")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.no_worlds")); } - this.addDrawableChild(slotList = new SlotList(this.client, width, height, 3 + 3 /* start offset */ + (textRenderer.fontHeight + 2) * 3 /* title is 2 */, 30, (textRenderer.fontHeight + 2) * 4)); + this.addRenderableWidget(slotList = new SlotList(this.minecraft, width, height, 3 + 3 /* start offset */ + (font.lineHeight + 2) * 3 /* title is 2 */, 30, (font.lineHeight + 2) * 4)); this.addRefreshButton(() -> realmsServers = null); final int slotWidth = 360 - 4; int xPos = width / 2 - slotWidth / 2; - this.addDrawableChild(joinButton = ButtonWidget.builder(Text.translatable("bedrock_realms.viafabricplus.join"), button -> { + this.addRenderableWidget(joinButton = Button.builder(Component.translatable("bedrock_realms.viafabricplus.join"), button -> { final SlotEntry entry = (SlotEntry) slotList.getFocused(); if (entry.realmsServer.isExpired()) { - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.expired")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.expired")); return; } else if (!entry.realmsServer.isCompatible()) { - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.incompatible")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.incompatible")); return; } try { final RealmsJoinInformation server = service.joinWorld(entry.realmsServer); if (server.getNetworkProtocol().equalsIgnoreCase(RealmsJoinInformation.PROTOCOL_NETHERNET)) { - setupSubtitle(Text.translatable("bedrock_realms.viafabricplus.nethernet_unsupported")); + setupSubtitle(Component.translatable("bedrock_realms.viafabricplus.nethernet_unsupported")); return; } @@ -132,27 +132,27 @@ private void createView() { } catch (final Throwable throwable) { error("Failed to join realm", throwable); } - }).position(xPos, height - 20 - 5).size(115, 20).build()); + }).pos(xPos, height - 20 - 5).size(115, 20).build()); joinButton.active = false; xPos += 115 + 5; - this.addDrawableChild(leaveButton = ButtonWidget.builder(Text.translatable("bedrock_realms.viafabricplus.leave"), button -> { + this.addRenderableWidget(leaveButton = Button.builder(Component.translatable("bedrock_realms.viafabricplus.leave"), button -> { final SlotEntry entry = (SlotEntry) slotList.getFocused(); service.leaveInvitedRealmAsync(entry.realmsServer).thenAccept(unused -> { this.realmsServers.remove(entry.realmsServer); INSTANCE.open(prevScreen); }).exceptionally(throwable -> error("Failed to leave realm", throwable)); - }).position(xPos, height - 20 - 5).size(115, 20).build()); + }).pos(xPos, height - 20 - 5).size(115, 20).build()); leaveButton.active = false; xPos += 115 + 5; - this.addDrawableChild(ButtonWidget.builder(Text.translatable("bedrock_realms.viafabricplus.invite"), button -> { + this.addRenderableWidget(Button.builder(Component.translatable("bedrock_realms.viafabricplus.invite"), button -> { final AcceptInvitationCodeScreen screen = new AcceptInvitationCodeScreen(code -> service.acceptInviteAsync(code).thenAccept(world -> { this.realmsServers.add(world); INSTANCE.open(this); }).exceptionally(throwable -> error("Failed to accept invite", throwable))); screen.open(this); - }).position(xPos, height - 20 - 5).size(115, 20).build()); + }).pos(xPos, height - 20 - 5).size(115, 20).build()); } @Override @@ -173,7 +173,7 @@ protected boolean subtitleCentered() { public final class SlotList extends VFPList { private static double scrollAmount; - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + public SlotList(Minecraft minecraftClient, int width, int height, int top, int bottom, int entryHeight) { super(minecraftClient, width, height, top, bottom, entryHeight); for (RealmsServer realmsServer : BedrockRealmsScreen.this.realmsServers) { @@ -205,13 +205,13 @@ public SlotEntry(SlotList slotList, RealmsServer realmsServer) { } @Override - public Text getNarration() { - return Text.of(realmsServer.getName()); + public Component getNarration() { + return Component.nullToEmpty(realmsServer.getName()); } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; String name = ""; final String ownerName = realmsServer.getOwnerName(); @@ -224,7 +224,7 @@ public void mappedRender(DrawContext context, int x, int y, int entryWidth, int } name += " (" + realmsServer.getState() + ")"; - context.drawTextWithShadow(textRenderer, name, 3, 3, slotList.getFocused() == this ? Color.ORANGE.getRGB() : -1); + context.drawString(textRenderer, name, 3, 3, slotList.getFocused() == this ? Color.ORANGE.getRGB() : -1); String version = realmsServer.getWorldType(); final String activeVersion = realmsServer.getActiveVersion(); @@ -232,11 +232,11 @@ public void mappedRender(DrawContext context, int x, int y, int entryWidth, int version += " - " + activeVersion; } - context.drawTextWithShadow(textRenderer, version, entryWidth - textRenderer.getWidth(version) - 3, 3, -1); + context.drawString(textRenderer, version, entryWidth - textRenderer.width(version) - 3, 3, -1); final String motd = realmsServer.getMotd(); if (motd != null) { - renderScrollableText(Text.of(motd), entryHeight - textRenderer.fontHeight - 3, 0); + renderScrollableText(Component.nullToEmpty(motd), entryHeight - textRenderer.lineHeight - 3, 0); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/BooleanListEntry.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/BooleanListEntry.java index 634d1b470..3abb62226 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/BooleanListEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/BooleanListEntry.java @@ -24,11 +24,11 @@ import com.viaversion.viafabricplus.api.settings.type.BooleanSetting; import com.viaversion.viafabricplus.screen.VFPListEntry; import java.awt.*; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public final class BooleanListEntry extends VFPListEntry { private final BooleanSetting value; @@ -38,7 +38,7 @@ public BooleanListEntry(BooleanSetting value) { } @Override - public Text getNarration() { + public Component getNarration() { return this.value.getName(); } @@ -48,14 +48,14 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; - final Text text = this.value.getValue() ? Text.translatable("base.viafabricplus.on") : Text.translatable("base.viafabricplus.off"); + final Component text = this.value.getValue() ? Component.translatable("base.viafabricplus.on") : Component.translatable("base.viafabricplus.off"); - final int offset = textRenderer.getWidth(text) + 2; - renderScrollableText(this.value.getName().formatted(Formatting.GRAY), offset); - context.drawTextWithShadow(textRenderer, text, entryWidth - offset, entryHeight / 2 - textRenderer.fontHeight / 2, this.value.getValue() ? Color.GREEN.getRGB() : Color.RED.getRGB()); + final int offset = textRenderer.width(text) + 2; + renderScrollableText(this.value.getName().withStyle(ChatFormatting.GRAY), offset); + context.drawString(textRenderer, text, entryWidth - offset, entryHeight / 2 - textRenderer.lineHeight / 2, this.value.getValue() ? Color.GREEN.getRGB() : Color.RED.getRGB()); renderTooltip(value.getTooltip(), mouseX, mouseY); } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ButtonListEntry.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ButtonListEntry.java index 4c0d0756f..558280c6f 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ButtonListEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ButtonListEntry.java @@ -23,10 +23,10 @@ import com.viaversion.viafabricplus.api.settings.type.ButtonSetting; import com.viaversion.viafabricplus.screen.VFPListEntry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; public final class ButtonListEntry extends VFPListEntry { @@ -37,7 +37,7 @@ public ButtonListEntry(ButtonSetting value) { } @Override - public Text getNarration() { + public Component getNarration() { return this.value.displayValue(); } @@ -47,10 +47,10 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; - context.drawCenteredTextWithShadow(textRenderer, this.value.displayValue(), entryWidth / 2, entryHeight / 2 - textRenderer.fontHeight / 2, -1); + context.drawCenteredString(textRenderer, this.value.displayValue(), entryWidth / 2, entryHeight / 2 - textRenderer.lineHeight / 2, -1); renderTooltip(value.getTooltip(), mouseX, mouseY); } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ModeListEntry.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ModeListEntry.java index 153eb835a..90a217b13 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ModeListEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/ModeListEntry.java @@ -24,11 +24,11 @@ import com.viaversion.viafabricplus.api.settings.type.ModeSetting; import com.viaversion.viafabricplus.screen.VFPListEntry; import java.util.Arrays; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public final class ModeListEntry extends VFPListEntry { private final ModeSetting value; @@ -38,7 +38,7 @@ public ModeListEntry(ModeSetting value) { } @Override - public Text getNarration() { + public Component getNarration() { return this.value.getName(); } @@ -49,12 +49,12 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; - final int offset = textRenderer.getWidth(this.value.getValue()) + 2; - renderScrollableText(this.value.getName().formatted(Formatting.GRAY), offset); - context.drawTextWithShadow(textRenderer, this.value.getValue(), entryWidth - offset, entryHeight / 2 - textRenderer.fontHeight / 2, -1); + final int offset = textRenderer.width(this.value.getValue()) + 2; + renderScrollableText(this.value.getName().withStyle(ChatFormatting.GRAY), offset); + context.drawString(textRenderer, this.value.getValue(), entryWidth - offset, entryHeight / 2 - textRenderer.lineHeight / 2, -1); renderTooltip(value.getTooltip(), mouseX, mouseY); } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/TitleEntry.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/TitleEntry.java index 34a23457c..a8bcef56d 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/TitleEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/TitleEntry.java @@ -22,29 +22,29 @@ package com.viaversion.viafabricplus.screen.impl.settings; import com.viaversion.viafabricplus.screen.VFPListEntry; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; import org.joml.Matrix3x2fStack; public final class TitleEntry extends VFPListEntry { - private final Text name; + private final Component name; - public TitleEntry(Text name) { + public TitleEntry(Component name) { this.name = name; } @Override - public Text getNarration() { + public Component getNarration() { return this.name; } @Override - public void render(final DrawContext context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { - final Matrix3x2fStack matrices = context.getMatrices(); + public void renderContent(final GuiGraphics context, final int mouseX, final int mouseY, final boolean hovered, final float deltaTicks) { + final Matrix3x2fStack matrices = context.pose(); matrices.pushMatrix(); matrices.translate(getX(), getY()); @@ -53,10 +53,10 @@ public void render(final DrawContext context, final int mouseX, final int mouseY } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; - context.drawTextWithShadow(textRenderer, this.name.copy().formatted(Formatting.BOLD), 3, entryHeight / 2 - textRenderer.fontHeight / 2, -1); + context.drawString(textRenderer, this.name.copy().withStyle(ChatFormatting.BOLD), 3, entryHeight / 2 - textRenderer.lineHeight / 2, -1); } } diff --git a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/VersionedBooleanListEntry.java b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/VersionedBooleanListEntry.java index bf4fb686a..2efe87e6a 100644 --- a/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/VersionedBooleanListEntry.java +++ b/src/main/java/com/viaversion/viafabricplus/screen/impl/settings/VersionedBooleanListEntry.java @@ -24,11 +24,11 @@ import com.viaversion.viafabricplus.api.settings.type.VersionedBooleanSetting; import com.viaversion.viafabricplus.screen.VFPListEntry; import java.awt.*; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; +import net.minecraft.ChatFormatting; public final class VersionedBooleanListEntry extends VFPListEntry { private final VersionedBooleanSetting value; @@ -38,7 +38,7 @@ public VersionedBooleanListEntry(VersionedBooleanSetting value) { } @Override - public Text getNarration() { + public Component getNarration() { return this.value.getName(); } @@ -49,15 +49,15 @@ public void mappedMouseClicked(double mouseX, double mouseY, int button) { } @Override - public void mappedRender(DrawContext context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + public void mappedRender(GuiGraphics context, int x, int y, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final Font textRenderer = Minecraft.getInstance().font; - final Text text = Text.translatable("base.viafabricplus." + (this.value.isAuto() ? "auto" : this.value.isEnabled() ? "on" : "off")); + final Component text = Component.translatable("base.viafabricplus." + (this.value.isAuto() ? "auto" : this.value.isEnabled() ? "on" : "off")); Color color = this.value.isAuto() ? Color.ORANGE : this.value.isEnabled() ? Color.GREEN : Color.RED; - final int offset = textRenderer.getWidth(text) + 2; - renderScrollableText(Text.of(Formatting.GRAY + this.value.getName().getString() + " " + Formatting.RESET + this.value.getProtocolRange().toString()), offset); - context.drawTextWithShadow(textRenderer, text, entryWidth - offset, entryHeight / 2 - textRenderer.fontHeight / 2, color.getRGB()); + final int offset = textRenderer.width(text) + 2; + renderScrollableText(Component.nullToEmpty(ChatFormatting.GRAY + this.value.getName().getString() + " " + ChatFormatting.RESET + this.value.getProtocolRange().toString()), offset); + context.drawString(textRenderer, text, entryWidth - offset, entryHeight / 2 - textRenderer.lineHeight / 2, color.getRGB()); renderTooltip(value.getTooltip(), mouseX, mouseY); } diff --git a/src/main/java/com/viaversion/viafabricplus/settings/impl/AuthenticationSettings.java b/src/main/java/com/viaversion/viafabricplus/settings/impl/AuthenticationSettings.java index 8a1be632a..4d01735d8 100644 --- a/src/main/java/com/viaversion/viafabricplus/settings/impl/AuthenticationSettings.java +++ b/src/main/java/com/viaversion/viafabricplus/settings/impl/AuthenticationSettings.java @@ -23,19 +23,19 @@ import com.viaversion.viafabricplus.api.settings.SettingGroup; import com.viaversion.viafabricplus.api.settings.type.BooleanSetting; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; public final class AuthenticationSettings extends SettingGroup { public static final AuthenticationSettings INSTANCE = new AuthenticationSettings(); - public final BooleanSetting useBetaCraftAuthentication = new BooleanSetting(this, Text.translatable("authentication_settings.viafabricplus.use_beta_craft_authentication"), true); - public final BooleanSetting verifySessionForOnlineModeServers = new BooleanSetting(this, Text.translatable("authentication_settings.viafabricplus.verify_session_for_online_mode"), true); - public final BooleanSetting automaticallySelectCPEInClassiCubeServerList = new BooleanSetting(this, Text.translatable("authentication_settings.viafabricplus.automatically_select_cpe_when_using_classicube"), true); - public final BooleanSetting setSessionNameToClassiCubeNameInServerList = new BooleanSetting(this, Text.translatable("authentication_settings.viafabricplus.set_session_name_to_classicube_name"), true); + public final BooleanSetting useBetaCraftAuthentication = new BooleanSetting(this, Component.translatable("authentication_settings.viafabricplus.use_beta_craft_authentication"), true); + public final BooleanSetting verifySessionForOnlineModeServers = new BooleanSetting(this, Component.translatable("authentication_settings.viafabricplus.verify_session_for_online_mode"), true); + public final BooleanSetting automaticallySelectCPEInClassiCubeServerList = new BooleanSetting(this, Component.translatable("authentication_settings.viafabricplus.automatically_select_cpe_when_using_classicube"), true); + public final BooleanSetting setSessionNameToClassiCubeNameInServerList = new BooleanSetting(this, Component.translatable("authentication_settings.viafabricplus.set_session_name_to_classicube_name"), true); public AuthenticationSettings() { - super(Text.translatable("setting_group_name.viafabricplus.authentication")); + super(Component.translatable("setting_group_name.viafabricplus.authentication")); } } diff --git a/src/main/java/com/viaversion/viafabricplus/settings/impl/BedrockSettings.java b/src/main/java/com/viaversion/viafabricplus/settings/impl/BedrockSettings.java index 877383a21..749f6e933 100644 --- a/src/main/java/com/viaversion/viafabricplus/settings/impl/BedrockSettings.java +++ b/src/main/java/com/viaversion/viafabricplus/settings/impl/BedrockSettings.java @@ -31,12 +31,12 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.Objects; import java.util.function.Consumer; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ConfirmScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.ConfirmScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.Util; import net.raphimc.minecraftauth.MinecraftAuth; import net.raphimc.minecraftauth.bedrock.BedrockAuthManager; import net.raphimc.minecraftauth.msa.model.MsaDeviceCode; @@ -47,51 +47,51 @@ public final class BedrockSettings extends SettingGroup { - private static final Text TITLE = Text.of("Microsoft Bedrock login"); + private static final Component TITLE = Component.nullToEmpty("Microsoft Bedrock login"); public static final BedrockSettings INSTANCE = new BedrockSettings(); private Thread thread; - private final ButtonSetting clickToSetBedrockAccount = new ButtonSetting(this, Text.translatable("bedrock_settings.viafabricplus.click_to_set_bedrock_account"), () -> { + private final ButtonSetting clickToSetBedrockAccount = new ButtonSetting(this, Component.translatable("bedrock_settings.viafabricplus.click_to_set_bedrock_account"), () -> { thread = new Thread(this::openBedrockAccountLogin); thread.start(); }) { @Override - public MutableText displayValue() { + public MutableComponent displayValue() { final BedrockAuthManager account = SaveManager.INSTANCE.getAccountsSave().getBedrockAccount(); if (account != null && account.getMinecraftMultiplayerToken().hasValue()) { - return Text.translatable("click_to_set_bedrock_account.viafabricplus.display", account.getMinecraftMultiplayerToken().getCached().getDisplayName()); + return Component.translatable("click_to_set_bedrock_account.viafabricplus.display", account.getMinecraftMultiplayerToken().getCached().getDisplayName()); } else { return super.displayValue(); } } }; - public final BooleanSetting replaceDefaultPort = new BooleanSetting(this, Text.translatable("bedrock_settings.viafabricplus.replace_default_port"), true); - public final BooleanSetting experimentalFeatures = new BooleanSetting(this, Text.translatable("bedrock_settings.viafabricplus.experimental_features"), true); + public final BooleanSetting replaceDefaultPort = new BooleanSetting(this, Component.translatable("bedrock_settings.viafabricplus.replace_default_port"), true); + public final BooleanSetting experimentalFeatures = new BooleanSetting(this, Component.translatable("bedrock_settings.viafabricplus.experimental_features"), true); public BedrockSettings() { - super(Text.translatable("setting_group_name.viafabricplus.bedrock")); + super(Component.translatable("setting_group_name.viafabricplus.bedrock")); } private void openBedrockAccountLogin() { final AccountsSave accountsSave = SaveManager.INSTANCE.getAccountsSave(); - final MinecraftClient client = MinecraftClient.getInstance(); - final Screen prevScreen = client.currentScreen; + final Minecraft client = Minecraft.getInstance(); + final Screen prevScreen = client.screen; try { final BedrockAuthManager bedrockAccount = BedrockAuthManager .create(MinecraftAuth.createHttpClient(), ProtocolConstants.BEDROCK_VERSION_NAME) .login(DeviceCodeMsaAuthService::new, (Consumer) msaDeviceCode -> { VFPScreen.setScreen(new ConfirmScreen(copyUrl -> { if (copyUrl) { - client.keyboard.setClipboard(msaDeviceCode.getDirectVerificationUri()); + client.keyboardHandler.setClipboard(msaDeviceCode.getDirectVerificationUri()); } else { client.setScreen(prevScreen); this.thread.interrupt(); } - }, TITLE, Text.translatable("click_to_set_bedrock_account.viafabricplus.notice"), Text.translatable("base.viafabricplus.copy_link"), Text.translatable("base.viafabricplus.cancel"))); - Util.getOperatingSystem().open(msaDeviceCode.getDirectVerificationUri()); + }, TITLE, Component.translatable("click_to_set_bedrock_account.viafabricplus.notice"), Component.translatable("base.viafabricplus.copy_link"), Component.translatable("base.viafabricplus.cancel"))); + Util.getPlatform().openUri(msaDeviceCode.getDirectVerificationUri()); }); bedrockAccount.getChangeListeners().add(new ChangeListener() { @Override @@ -153,9 +153,9 @@ public static String replaceDefaultPort(final String address, final ProtocolVers } private static void updateLoginStatusMessage(final String stepName) { - MinecraftClient.getInstance().execute(() -> { - if (MinecraftClient.getInstance().currentScreen instanceof ConfirmScreen confirmScreen) { - ((IConfirmScreen) confirmScreen).viaFabricPlus$updateMessage(Text.translatable("minecraftauth_library.viafabricplus." + stepName)); + Minecraft.getInstance().execute(() -> { + if (Minecraft.getInstance().screen instanceof ConfirmScreen confirmScreen) { + ((IConfirmScreen) confirmScreen).viaFabricPlus$updateMessage(Component.translatable("minecraftauth_library.viafabricplus." + stepName)); } }); } diff --git a/src/main/java/com/viaversion/viafabricplus/settings/impl/DebugSettings.java b/src/main/java/com/viaversion/viafabricplus/settings/impl/DebugSettings.java index f0ae8bd35..4991bb764 100644 --- a/src/main/java/com/viaversion/viafabricplus/settings/impl/DebugSettings.java +++ b/src/main/java/com/viaversion/viafabricplus/settings/impl/DebugSettings.java @@ -27,18 +27,18 @@ import com.viaversion.viafabricplus.features.font.FontCacheReload; import com.viaversion.vialoader.util.VersionRange; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; import net.raphimc.vialegacy.api.LegacyProtocolVersion; public final class DebugSettings extends SettingGroup { public static final DebugSettings INSTANCE = new DebugSettings(); - public final BooleanSetting queueConfigPackets = new BooleanSetting(this, Text.translatable("debug_settings.viafabricplus.queue_config_packets"), true); - public final BooleanSetting printNetworkingErrorsToLogs = new BooleanSetting(this, Text.translatable("debug_settings.viafabricplus.print_networking_errors_to_logs"), true); - public final BooleanSetting ignoreFabricSyncErrors = new BooleanSetting(this, Text.translatable("debug_settings.viafabricplus.ignore_fabric_sync_errors"), false); - public final BooleanSetting hideModernJigsawScreenFeatures = new BooleanSetting(this, Text.translatable("debug_settings.viafabricplus.hide_modern_jigsaw_screen_features"), true); - public final BooleanSetting filterNonExistingGlyphs = new BooleanSetting(this, Text.translatable("debug_settings.viafabricplus.filter_non_existing_glyphs"), true) { + public final BooleanSetting queueConfigPackets = new BooleanSetting(this, Component.translatable("debug_settings.viafabricplus.queue_config_packets"), true); + public final BooleanSetting printNetworkingErrorsToLogs = new BooleanSetting(this, Component.translatable("debug_settings.viafabricplus.print_networking_errors_to_logs"), true); + public final BooleanSetting ignoreFabricSyncErrors = new BooleanSetting(this, Component.translatable("debug_settings.viafabricplus.ignore_fabric_sync_errors"), false); + public final BooleanSetting hideModernJigsawScreenFeatures = new BooleanSetting(this, Component.translatable("debug_settings.viafabricplus.hide_modern_jigsaw_screen_features"), true); + public final BooleanSetting filterNonExistingGlyphs = new BooleanSetting(this, Component.translatable("debug_settings.viafabricplus.filter_non_existing_glyphs"), true) { @Override public void onValueChanged() { FontCacheReload.reload(); @@ -46,29 +46,29 @@ public void onValueChanged() { }; // 1.20.5 -> 1.20.4 - public final VersionedBooleanSetting dontCreatePacketErrorCrashReports = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.dont_create_packet_error_crash_reports"), VersionRange.andOlder(ProtocolVersion.v1_20_3)); + public final VersionedBooleanSetting dontCreatePacketErrorCrashReports = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.dont_create_packet_error_crash_reports"), VersionRange.andOlder(ProtocolVersion.v1_20_3)); // 1.19 -> 1.18.2 - public final VersionedBooleanSetting disableSequencing = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.disable_sequencing"), VersionRange.andOlder(ProtocolVersion.v1_18_2)); + public final VersionedBooleanSetting disableSequencing = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.disable_sequencing"), VersionRange.andOlder(ProtocolVersion.v1_18_2)); // 1.17 -> 1.16.5 - public final VersionedBooleanSetting alwaysTickClientPlayer = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.always_tick_client_player"), VersionRange.andOlder(ProtocolVersion.v1_8).add(VersionRange.andNewer(ProtocolVersion.v1_17))); + public final VersionedBooleanSetting alwaysTickClientPlayer = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.always_tick_client_player"), VersionRange.andOlder(ProtocolVersion.v1_8).add(VersionRange.andNewer(ProtocolVersion.v1_17))); // 1.13 -> 1.12.2 - public final VersionedBooleanSetting executeInputsSynchronously = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.execute_inputs_synchronously"), VersionRange.andOlder(ProtocolVersion.v1_12_2)); - public final VersionedBooleanSetting legacyTabCompletions = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.legacy_tab_completions"), VersionRange.andOlder(ProtocolVersion.v1_12_2)); - public final VersionedBooleanSetting legacyPaneOutlines = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.legacy_pane_outlines"), VersionRange.andOlder(ProtocolVersion.v1_12_2)); + public final VersionedBooleanSetting executeInputsSynchronously = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.execute_inputs_synchronously"), VersionRange.andOlder(ProtocolVersion.v1_12_2)); + public final VersionedBooleanSetting legacyTabCompletions = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.legacy_tab_completions"), VersionRange.andOlder(ProtocolVersion.v1_12_2)); + public final VersionedBooleanSetting legacyPaneOutlines = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.legacy_pane_outlines"), VersionRange.andOlder(ProtocolVersion.v1_12_2)); // 1.9 -> 1.8.x - public final VersionedBooleanSetting emulateArmorHud = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.emulate_armor_hud"), VersionRange.andOlder(ProtocolVersion.v1_8)); - public final VersionedBooleanSetting hideModernCommandBlockScreenFeatures = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.hide_modern_command_block_screen_features"), VersionRange.andOlder(ProtocolVersion.v1_8)); - public final VersionedBooleanSetting legacyCropOutlines = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.legacy_crop_outlines"), VersionRange.andOlder(ProtocolVersion.v1_8)); + public final VersionedBooleanSetting emulateArmorHud = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.emulate_armor_hud"), VersionRange.andOlder(ProtocolVersion.v1_8)); + public final VersionedBooleanSetting hideModernCommandBlockScreenFeatures = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.hide_modern_command_block_screen_features"), VersionRange.andOlder(ProtocolVersion.v1_8)); + public final VersionedBooleanSetting legacyCropOutlines = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.legacy_crop_outlines"), VersionRange.andOlder(ProtocolVersion.v1_8)); // b1.8/b1.8.1 -> b1_7/b1.7.3 - public final VersionedBooleanSetting disableServerPinging = new VersionedBooleanSetting(this, Text.translatable("debug_settings.viafabricplus.disable_server_pinging"), VersionRange.andOlder(LegacyProtocolVersion.b1_7tob1_7_3)); + public final VersionedBooleanSetting disableServerPinging = new VersionedBooleanSetting(this, Component.translatable("debug_settings.viafabricplus.disable_server_pinging"), VersionRange.andOlder(LegacyProtocolVersion.b1_7tob1_7_3)); public DebugSettings() { - super(Text.translatable("setting_group_name.viafabricplus.debug")); + super(Component.translatable("setting_group_name.viafabricplus.debug")); } } diff --git a/src/main/java/com/viaversion/viafabricplus/settings/impl/GeneralSettings.java b/src/main/java/com/viaversion/viafabricplus/settings/impl/GeneralSettings.java index a80de4ac1..91010171b 100644 --- a/src/main/java/com/viaversion/viafabricplus/settings/impl/GeneralSettings.java +++ b/src/main/java/com/viaversion/viafabricplus/settings/impl/GeneralSettings.java @@ -24,44 +24,44 @@ import com.viaversion.viafabricplus.api.settings.SettingGroup; import com.viaversion.viafabricplus.api.settings.type.BooleanSetting; import com.viaversion.viafabricplus.api.settings.type.ModeSetting; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; public final class GeneralSettings extends SettingGroup { public static final GeneralSettings INSTANCE = new GeneralSettings(); - private final MutableText[] ORIENTATION_OPTIONS = new MutableText[]{ - Text.translatable("base.viafabricplus.none"), - Text.translatable("base.viafabricplus.left_top"), - Text.translatable("base.viafabricplus.right_top"), - Text.translatable("base.viafabricplus.left_bottom"), - Text.translatable("base.viafabricplus.right_bottom") + private final MutableComponent[] ORIENTATION_OPTIONS = new MutableComponent[]{ + Component.translatable("base.viafabricplus.none"), + Component.translatable("base.viafabricplus.left_top"), + Component.translatable("base.viafabricplus.right_top"), + Component.translatable("base.viafabricplus.left_bottom"), + Component.translatable("base.viafabricplus.right_bottom") }; - public final ModeSetting multiplayerScreenButtonOrientation = new ModeSetting(this, Text.translatable("general_settings.viafabricplus.multiplayer_screen_button_orientation"), 2, ORIENTATION_OPTIONS); - public final ModeSetting addServerScreenButtonOrientation = new ModeSetting(this, Text.translatable("general_settings.viafabricplus.add_server_screen_button_orientation"), 2, ORIENTATION_OPTIONS); - public final ModeSetting directConnectScreenButtonOrientation = new ModeSetting(this, Text.translatable("general_settings.viafabricplus.direct_connect_screen_button_orientation"), 2, ORIENTATION_OPTIONS); - public final ModeSetting removeNotAvailableItemsFromCreativeTab = new ModeSetting(this, Text.translatable("general_settings.viafabricplus.filter_creative_tabs"), - Text.translatable("base.viafabricplus.vanilla_and_modded"), - Text.translatable("base.viafabricplus.vanilla_only"), - Text.translatable("base.viafabricplus.off") + public final ModeSetting multiplayerScreenButtonOrientation = new ModeSetting(this, Component.translatable("general_settings.viafabricplus.multiplayer_screen_button_orientation"), 2, ORIENTATION_OPTIONS); + public final ModeSetting addServerScreenButtonOrientation = new ModeSetting(this, Component.translatable("general_settings.viafabricplus.add_server_screen_button_orientation"), 2, ORIENTATION_OPTIONS); + public final ModeSetting directConnectScreenButtonOrientation = new ModeSetting(this, Component.translatable("general_settings.viafabricplus.direct_connect_screen_button_orientation"), 2, ORIENTATION_OPTIONS); + public final ModeSetting removeNotAvailableItemsFromCreativeTab = new ModeSetting(this, Component.translatable("general_settings.viafabricplus.filter_creative_tabs"), + Component.translatable("base.viafabricplus.vanilla_and_modded"), + Component.translatable("base.viafabricplus.vanilla_only"), + Component.translatable("base.viafabricplus.off") ); - public final BooleanSetting saveSelectedProtocolVersion = new BooleanSetting(this, Text.translatable("general_settings.viafabricplus.save_selected_protocol_version"), true); - public final BooleanSetting showClassicLoadingProgressInConnectScreen = new BooleanSetting(this, Text.translatable("general_settings.viafabricplus.show_classic_loading_progress"), true); - public final BooleanSetting showAdvertisedServerVersion = new BooleanSetting(this, Text.translatable("general_settings.viafabricplus.show_advertised_server_version"), true); - public final ModeSetting ignorePacketTranslationErrors = new ModeSetting(this, Text.translatable("general_settings.viafabricplus.ignore_packet_translation_errors"), - Text.translatable("base.viafabricplus.kick"), - Text.translatable("base.viafabricplus.cancel_and_notify"), - Text.translatable("base.viafabricplus.cancel") + public final BooleanSetting saveSelectedProtocolVersion = new BooleanSetting(this, Component.translatable("general_settings.viafabricplus.save_selected_protocol_version"), true); + public final BooleanSetting showClassicLoadingProgressInConnectScreen = new BooleanSetting(this, Component.translatable("general_settings.viafabricplus.show_classic_loading_progress"), true); + public final BooleanSetting showAdvertisedServerVersion = new BooleanSetting(this, Component.translatable("general_settings.viafabricplus.show_advertised_server_version"), true); + public final ModeSetting ignorePacketTranslationErrors = new ModeSetting(this, Component.translatable("general_settings.viafabricplus.ignore_packet_translation_errors"), + Component.translatable("base.viafabricplus.kick"), + Component.translatable("base.viafabricplus.cancel_and_notify"), + Component.translatable("base.viafabricplus.cancel") ); - public final BooleanSetting loadSkinsAndSkullsInLegacyVersions = new BooleanSetting(this, Text.translatable("general_settings.viafabricplus.load_skins_and_skulls_in_legacy_versions"), true); - public final BooleanSetting emulateInventoryActionsInAlphaVersions = new BooleanSetting(this, Text.translatable("general_settings.viafabricplus.emulate_inventory_actions_in_alpha_versions"), true); - public final BooleanSetting saveScrollPositionInSlotScreens = new BooleanSetting(this, Text.translatable("general_settings.viafabricplus.save_scroll_position_in_slot_screens"), true); + public final BooleanSetting loadSkinsAndSkullsInLegacyVersions = new BooleanSetting(this, Component.translatable("general_settings.viafabricplus.load_skins_and_skulls_in_legacy_versions"), true); + public final BooleanSetting emulateInventoryActionsInAlphaVersions = new BooleanSetting(this, Component.translatable("general_settings.viafabricplus.emulate_inventory_actions_in_alpha_versions"), true); + public final BooleanSetting saveScrollPositionInSlotScreens = new BooleanSetting(this, Component.translatable("general_settings.viafabricplus.save_scroll_position_in_slot_screens"), true); public GeneralSettings() { - super(Text.translatable("setting_group_name.viafabricplus.general")); - emulateInventoryActionsInAlphaVersions.setTooltip(Text.translatable("base.viafabricplus.this_will_require_a_restart")); + super(Component.translatable("setting_group_name.viafabricplus.general")); + emulateInventoryActionsInAlphaVersions.setTooltip(Component.translatable("base.viafabricplus.this_will_require_a_restart")); } public static void setOrientation(final Position position, final int orientationIndex, final int width, final int height) { diff --git a/src/main/java/com/viaversion/viafabricplus/util/ConnectionUtil.java b/src/main/java/com/viaversion/viafabricplus/util/ConnectionUtil.java index 94a8e8359..6a3b1c4c5 100644 --- a/src/main/java/com/viaversion/viafabricplus/util/ConnectionUtil.java +++ b/src/main/java/com/viaversion/viafabricplus/util/ConnectionUtil.java @@ -21,12 +21,12 @@ package com.viaversion.viafabricplus.util; -import com.viaversion.viafabricplus.injection.access.base.IServerInfo; +import com.viaversion.viafabricplus.injection.access.base.IServerData; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.multiplayer.ConnectScreen; -import net.minecraft.client.network.ServerAddress; -import net.minecraft.client.network.ServerInfo; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.ConnectScreen; +import net.minecraft.client.multiplayer.resolver.ServerAddress; +import net.minecraft.client.multiplayer.ServerData; public final class ConnectionUtil { @@ -39,13 +39,13 @@ public static void connect(final String name, final String address) { } public static void connect(final String name, final String address, final ProtocolVersion version) { - final ServerAddress serverAddress = ServerAddress.parse(address); - final ServerInfo entry = new ServerInfo(name, serverAddress.getAddress(), ServerInfo.ServerType.OTHER); + final ServerAddress serverAddress = ServerAddress.parseString(address); + final ServerData entry = new ServerData(name, serverAddress.getHost(), ServerData.Type.OTHER); if (version != null) { - ((IServerInfo) entry).viaFabricPlus$forceVersion(version); + ((IServerData) entry).viaFabricPlus$forceVersion(version); } - ConnectScreen.connect(MinecraftClient.getInstance().currentScreen, MinecraftClient.getInstance(), serverAddress, entry, false, null); + ConnectScreen.startConnecting(Minecraft.getInstance().screen, Minecraft.getInstance(), serverAddress, entry, false, null); } } diff --git a/src/main/java/com/viaversion/viafabricplus/util/ItemUtil.java b/src/main/java/com/viaversion/viafabricplus/util/ItemUtil.java index f3ea2662a..b098cfd07 100644 --- a/src/main/java/com/viaversion/viafabricplus/util/ItemUtil.java +++ b/src/main/java/com/viaversion/viafabricplus/util/ItemUtil.java @@ -22,19 +22,19 @@ package com.viaversion.viafabricplus.util; import com.viaversion.viaversion.api.protocol.Protocol; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.NbtComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.component.CustomData; +import net.minecraft.world.item.ItemStack; +import net.minecraft.nbt.CompoundTag; public final class ItemUtil { // ViaVersion's 1.20.5 -> 1.20.3 protocol will save the original item nbt inside custom data to later restore // it for creative clients, we can use this to get nbt stored in older protocols as well - public static NbtCompound getTagOrNull(final ItemStack stack) { - final NbtComponent tag = stack.get(DataComponentTypes.CUSTOM_DATA); + public static CompoundTag getTagOrNull(final ItemStack stack) { + final CustomData tag = stack.get(DataComponents.CUSTOM_DATA); if (tag != null) { - return tag.copyNbt(); + return tag.copyTag(); } else { return null; } diff --git a/src/main/resources/viafabricplus.accesswidener b/src/main/resources/viafabricplus.accesswidener index 20bc44f1b..05fbbf518 100644 --- a/src/main/resources/viafabricplus.accesswidener +++ b/src/main/resources/viafabricplus.accesswidener @@ -1,46 +1,46 @@ accessWidener v1 named -accessible field net/minecraft/network/ClientConnection channel Lio/netty/channel/Channel; -accessible field net/minecraft/client/network/AllowedAddressResolver redirectResolver Lnet/minecraft/client/network/RedirectResolver; -accessible field net/minecraft/client/gui/screen/GameMenuScreen exitButton Lnet/minecraft/client/gui/widget/ButtonWidget; -accessible field net/minecraft/network/ClientConnection packetSizeLogger Lnet/minecraft/network/handler/PacketSizeLogger; -accessible field net/minecraft/entity/boss/dragon/EnderDragonEntity body Lnet/minecraft/entity/boss/dragon/EnderDragonPart; -accessible field net/minecraft/entity/passive/AbstractHorseEntity lastAngryAnimationProgress F -accessible field net/minecraft/entity/vehicle/AbstractBoatEntity yawVelocity F -accessible field net/minecraft/entity/EntityType dimensions Lnet/minecraft/entity/EntityDimensions; -accessible field net/minecraft/block/AbstractBlock velocityMultiplier F -accessible field net/minecraft/client/gui/screen/option/ControlsListWidget$KeyBindingEntry RESET_TEXT Lnet/minecraft/text/Text; -accessible field net/minecraft/client/gui/screen/world/WorldIcon UNKNOWN_SERVER_ID Lnet/minecraft/util/Identifier; -accessible field net/minecraft/client/MinecraftClient fontManager Lnet/minecraft/client/font/FontManager; -accessible field net/minecraft/client/font/FontManager fontStorages Ljava/util/Map; -accessible field net/minecraft/client/font/FontStorage bakedGlyphCache Lnet/minecraft/client/font/GlyphContainer; -accessible field net/minecraft/entity/PositionInterpolator data Lnet/minecraft/entity/PositionInterpolator$Data; -accessible field net/minecraft/entity/PositionInterpolator$Data pos Lnet/minecraft/util/math/Vec3d; -accessible field net/minecraft/entity/PositionInterpolator$Data yaw F -accessible field net/minecraft/entity/PositionInterpolator$Data pitch F -accessible field net/minecraft/entity/player/PlayerInventory equipment Lnet/minecraft/entity/EntityEquipment; -accessible field net/minecraft/client/input/Input movementVector Lnet/minecraft/util/math/Vec2f; -accessible field net/minecraft/util/math/Direction YXZ Lcom/google/common/collect/ImmutableList; -accessible field net/minecraft/client/font/GlyphBaker fontId Lnet/minecraft/util/Identifier; +accessible field net/minecraft/network/Connection channel Lio/netty/channel/Channel; +accessible field net/minecraft/client/multiplayer/resolver/ServerNameResolver redirectHandler Lnet/minecraft/client/multiplayer/resolver/ServerRedirectHandler; +accessible field net/minecraft/client/gui/screens/PauseScreen disconnectButton Lnet/minecraft/client/gui/components/Button; +accessible field net/minecraft/network/Connection bandwidthDebugMonitor Lnet/minecraft/network/BandwidthDebugMonitor; +accessible field net/minecraft/world/entity/boss/enderdragon/EnderDragon body Lnet/minecraft/world/entity/boss/EnderDragonPart; +accessible field net/minecraft/world/entity/animal/horse/AbstractHorse standAnimO F +accessible field net/minecraft/world/entity/vehicle/AbstractBoat deltaRotation F +accessible field net/minecraft/world/entity/EntityType dimensions Lnet/minecraft/world/entity/EntityDimensions; +accessible field net/minecraft/world/level/block/state/BlockBehaviour speedFactor F +accessible field net/minecraft/client/gui/screens/options/controls/KeyBindsList$KeyEntry RESET_BUTTON_TITLE Lnet/minecraft/network/chat/Component; +accessible field net/minecraft/client/gui/screens/FaviconTexture MISSING_LOCATION Lnet/minecraft/resources/ResourceLocation; +accessible field net/minecraft/client/Minecraft fontManager Lnet/minecraft/client/gui/font/FontManager; +accessible field net/minecraft/client/gui/font/FontManager fontSets Ljava/util/Map; +accessible field net/minecraft/client/gui/font/FontSet glyphCache Lnet/minecraft/client/gui/font/CodepointMap; +accessible field net/minecraft/world/entity/InterpolationHandler interpolationData Lnet/minecraft/world/entity/InterpolationHandler$InterpolationData; +accessible field net/minecraft/world/entity/InterpolationHandler$InterpolationData position Lnet/minecraft/world/phys/Vec3; +accessible field net/minecraft/world/entity/InterpolationHandler$InterpolationData yRot F +accessible field net/minecraft/world/entity/InterpolationHandler$InterpolationData xRot F +accessible field net/minecraft/world/entity/player/Inventory equipment Lnet/minecraft/world/entity/EntityEquipment; +accessible field net/minecraft/client/player/ClientInput moveVector Lnet/minecraft/world/phys/Vec2; +accessible field net/minecraft/core/Direction YXZ_AXIS_ORDER Lcom/google/common/collect/ImmutableList; +accessible field net/minecraft/client/gui/font/GlyphStitcher texturePrefix Lnet/minecraft/resources/ResourceLocation; -mutable field net/minecraft/entity/EntityType dimensions Lnet/minecraft/entity/EntityDimensions; -mutable field net/minecraft/block/AbstractBlock velocityMultiplier F -mutable field net/minecraft/client/input/Input movementVector Lnet/minecraft/util/math/Vec2f; +mutable field net/minecraft/world/entity/EntityType dimensions Lnet/minecraft/world/entity/EntityDimensions; +mutable field net/minecraft/world/level/block/state/BlockBehaviour speedFactor F +mutable field net/minecraft/client/player/ClientInput moveVector Lnet/minecraft/world/phys/Vec2; -accessible method net/minecraft/screen/GenericContainerScreenHandler (Lnet/minecraft/screen/ScreenHandlerType;ILnet/minecraft/entity/player/PlayerInventory;I)V -accessible method net/minecraft/entity/passive/CamelEntity getPassengerAttachmentY (ZFLnet/minecraft/entity/EntityDimensions;F)D -accessible method net/minecraft/entity/vehicle/AbstractBoatEntity getMaxPassengers ()I -accessible method net/minecraft/client/gui/screen/multiplayer/ConnectScreen setStatus (Lnet/minecraft/text/Text;)V -accessible method net/minecraft/item/BlockItem getPlacementState (Lnet/minecraft/item/ItemPlacementContext;)Lnet/minecraft/block/BlockState; -accessible method net/minecraft/block/AbstractBlock getPickStack (Lnet/minecraft/world/WorldView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Z)Lnet/minecraft/item/ItemStack; -accessible method net/minecraft/entity/Entity setRotation (FF)V -accessible method net/minecraft/client/gui/widget/TextFieldWidget getMaxLength ()I -accessible method net/minecraft/block/entity/BlockEntity writeIdentifyingData (Lnet/minecraft/storage/WriteView;)V -accessible method net/minecraft/client/render/debug/GameTestDebugRenderer$Marker (ILjava/lang/String;J)V -accessible method net/minecraft/client/font/FontStorage$GlyphPair (Ljava/util/function/Supplier;Ljava/util/function/Supplier;)V +accessible method net/minecraft/world/inventory/ChestMenu (Lnet/minecraft/world/inventory/MenuType;ILnet/minecraft/world/entity/player/Inventory;I)V +accessible method net/minecraft/world/entity/animal/camel/Camel getBodyAnchorAnimationYOffset (ZFLnet/minecraft/world/entity/EntityDimensions;F)D +accessible method net/minecraft/world/entity/vehicle/AbstractBoat getMaxPassengers ()I +accessible method net/minecraft/client/gui/screens/ConnectScreen updateStatus (Lnet/minecraft/network/chat/Component;)V +accessible method net/minecraft/world/item/BlockItem getPlacementState (Lnet/minecraft/world/item/context/BlockPlaceContext;)Lnet/minecraft/world/level/block/state/BlockState; +accessible method net/minecraft/world/level/block/state/BlockBehaviour getCloneItemStack (Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Z)Lnet/minecraft/world/item/ItemStack; +accessible method net/minecraft/world/entity/Entity setRot (FF)V +accessible method net/minecraft/client/gui/components/EditBox getMaxLength ()I +accessible method net/minecraft/world/level/block/entity/BlockEntity saveMetadata (Lnet/minecraft/world/level/storage/ValueOutput;)V +accessible method net/minecraft/client/renderer/debug/GameTestBlockHighlightRenderer$Marker (ILjava/lang/String;J)V +accessible method net/minecraft/client/gui/font/FontSet$SelectedGlyphs (Ljava/util/function/Supplier;Ljava/util/function/Supplier;)V -extendable method net/minecraft/entity/Entity updateTrackedPositionAndAngles (Lnet/minecraft/util/math/Vec3d;FF)V +extendable method net/minecraft/world/entity/Entity moveOrInterpolateTo (Lnet/minecraft/world/phys/Vec3;FF)V -accessible class net/minecraft/client/font/FontStorage$GlyphPair -accessible class net/minecraft/entity/Entity$QueuedCollisionCheck -accessible class net/minecraft/client/render/debug/GameTestDebugRenderer$Marker +accessible class net/minecraft/client/gui/font/FontSet$SelectedGlyphs +accessible class net/minecraft/world/entity/Entity$Movement +accessible class net/minecraft/client/renderer/debug/GameTestBlockHighlightRenderer$Marker diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json index 2a5c29b91..61cb6b663 100644 --- a/src/main/resources/viafabricplus.mixins.json +++ b/src/main/resources/viafabricplus.mixins.json @@ -7,44 +7,44 @@ "client": [ "base.MixinMain", "base.access.MixinChunkTracker", - "base.access.MixinMultiValueDebugSampleLogImpl", + "base.access.MixinLocalSampleLogger", "base.access.MixinRakSessionCodec", - "base.connection.MixinClientConnection", - "base.connection.MixinClientConnection_1", - "base.connection.MixinClientLoginNetworkHandler", + "base.connection.MixinConnection", + "base.connection.MixinConnection_1", + "base.connection.MixinClientHandshakePacketListenerImpl", "base.connection.MixinConnectScreen_1", - "base.connection.MixinGameOptions", - "base.connection.MixinMinecraftClient", - "base.connection.MixinMultiplayerServerListPinger", - "base.integration.MixinClientConnection", - "base.integration.MixinDebugHudEntries", - "base.integration.MixinMultiplayerServerListPinger_1", - "base.integration.MixinServerInfo", + "base.connection.MixinOptions", + "base.connection.MixinMinecraft", + "base.connection.MixinServerStatusPinger", + "base.integration.MixinConnection", + "base.integration.MixinDebugScreenEntries", + "base.integration.MixinServerStatusPinger_1", + "base.integration.MixinServerData", "base.integration.MixinUserConnectionImpl", "base.integration.MixinViaBedrockConfig", "base.integration.MixinViaLegacyConfig", "base.integration.bedrock.MixinConfirmScreen", "base.integration.bedrock.MixinConnectScreen_1", "base.integration.bedrock.MixinJoinPackets", - "base.integration.bedrock.MixinMultiplayerServerListPinger", - "base.integration.event.MixinMinecraftClient", - "base.integration.sync_tasks.MixinClientCommonNetworkHandler", - "base.ui.MixinAddServerScreen", + "base.integration.bedrock.MixinServerStatusPinger", + "base.integration.event.MixinMinecraft", + "base.integration.sync_tasks.MixinClientCommonPacketListenerImpl", + "base.ui.MixinManageServerScreen", "base.ui.MixinConnectScreen_1", - "base.ui.MixinDirectConnectScreen", + "base.ui.MixinDirectJoinServerScreen", "base.ui.MixinLevelLoadingScreen", - "base.ui.MixinMultiplayerScreen", + "base.ui.MixinJoinMultiplayerScreen", "base.ui.MixinMultiplayerServerListWidget_ServerEntry", "compat.classic4j.MixinCCAuthenticationResponse", - "compat.classic4j.MixinTextFieldWidget", + "compat.classic4j.MixinEditBox", "compat.fabricapi.MixinClientRegistrySyncHandler", "compat.ipnext.MixinAutoRefillHandler_ItemSlotMonitor", "compat.lithium.MixinEntity", "compat.mcstructs.MixinTextComponentSerializer", "compat.minecraftauth.MixinClasses", "compat.minecraftauth.MixinDefaultJwtParserBuilder", - "features.april_fools_8bit_sound.MixinStaticSound", - "features.bedrock.allow_new_line.MixinTextRenderer", + "features.april_fools_8bit_sound.MixinSoundBuffer", + "features.bedrock.allow_new_line.MixinFont", "features.bedrock.block.MixinCactusBlock", "features.bedrock.block.MixinCandleCakeBlock", "features.bedrock.block.MixinConduitBlock", @@ -54,24 +54,24 @@ "features.bedrock.block.MixinLanternBlock", "features.bedrock.block.MixinLecternBlock", "features.bedrock.block.MixinSeaPickleBlock", - "features.bedrock.block.MixinTrapdoorBlock", - "features.bedrock.movement.MixinClientPlayerEntity", + "features.bedrock.block.MixinTrapDoorBlock", + "features.bedrock.movement.MixinLocalPlayer", "features.bedrock.movement.MixinEntity", "features.bedrock.movement.MixinLivingEntity", - "features.bedrock.movement.MixinPlayerEntity", + "features.bedrock.movement.MixinPlayer", "features.bedrock.reach_around_raycast.MixinGameRenderer", - "features.bedrock.remove_dummy_player_suggestions.MixinClientCommandSource", - "features.block.interaction.MixinAbstractSignBlock", + "features.bedrock.remove_dummy_player_suggestions.MixinClientSuggestionProvider", + "features.block.interaction.MixinSignBlock", "features.block.interaction.MixinCanPlaceAt1_14", "features.block.interaction.MixinDecoratedPotBlock", "features.block.interaction.MixinFenceBlock", "features.block.interaction.MixinFlowerPotBlock", "features.block.interaction.MixinNoteBlock", - "features.block.interaction.MixinPaneBlock", - "features.block.mining_calculation.MixinAbstractBlock", + "features.block.interaction.MixinIronBarsBlock", + "features.block.mining_calculation.MixinBlockBehaviour", "features.block.mining_calculation.MixinAbstractBlock_AbstractBlockState", - "features.block.mining_calculation.MixinPlayerEntity", - "features.block.shape.MixinAbstractRailBlock", + "features.block.mining_calculation.MixinPlayer", + "features.block.shape.MixinBaseRailBlock", "features.block.shape.MixinAnvilBlock", "features.block.shape.MixinBedBlock", "features.block.shape.MixinBrewingStandBlock", @@ -82,107 +82,107 @@ "features.block.shape.MixinEnderChestBlock", "features.block.shape.MixinEndPortalBlock", "features.block.shape.MixinEndPortalFrameBlock", - "features.block.shape.MixinFarmlandBlock", + "features.block.shape.MixinFarmBlock", "features.block.shape.MixinFenceBlock", "features.block.shape.MixinFenceGateBlock", "features.block.shape.MixinFireBlock", - "features.block.shape.MixinFlowerbedBlock", + "features.block.shape.MixinFlowerBedBlock", "features.block.shape.MixinHopperBlock", - "features.block.shape.MixinHorizontalConnectingBlock", + "features.block.shape.MixinCrossCollisionBlock", "features.block.shape.MixinLadderBlock", "features.block.shape.MixinLeavesBlock", - "features.block.shape.MixinLilyPadBlock", - "features.block.shape.MixinPaneBlock", - "features.block.shape.MixinPistonBlock", + "features.block.shape.MixinWaterlilyBlock", + "features.block.shape.MixinIronBarsBlock", + "features.block.shape.MixinPistonBaseBlock", "features.block.shape.MixinPistonHeadBlock", "features.block.shape.MixinPitcherCropBlock", - "features.block.shape.MixinSnowBlock", + "features.block.shape.MixinSnowLayerBlock", "features.block.shape.MixinSoulSandBlock", "features.block.shape.MixinWallBlock", "features.classic.cpe_extension.MixinClassicProtocolExtension", "features.classic.cpe_extension.MixinClientboundPacketsc0_30cpe", "features.classic.cpe_extension.MixinProtocolc0_30cpeToc0_28_30", - "features.classic.cpe_extension.MixinWeatherRendering", + "features.classic.cpe_extension.MixinWeatherEffectRenderer", "features.classic.world_height.MixinEntityPacketRewriter1_17", "features.classic.world_height.MixinWorldPacketRewriter1_16_2", "features.classic.world_height.MixinWorldPacketRewriter1_17", - "features.entity.MixinItemFrameEntity", - "features.entity.allow_duplicated_uuid.MixinEntityIndex", + "features.entity.MixinItemFrame", + "features.entity.allow_duplicated_uuid.MixinEntityLookup", "features.entity.attribute.MixinEntityPacketRewriter1_20_5", "features.entity.attribute.MixinLivingEntity", - "features.entity.interaction.MixinAbstractBoatEntity", - "features.entity.interaction.MixinAbstractChestBoatEntity", - "features.entity.interaction.MixinAbstractCowEntity", - "features.entity.interaction.MixinAbstractHorseEntity", - "features.entity.interaction.MixinAnimalEntity", - "features.entity.interaction.MixinArmadilloEntity", - "features.entity.interaction.MixinAxolotlEntity", - "features.entity.interaction.MixinBeeEntity", - "features.entity.interaction.MixinCatEntity", - "features.entity.interaction.MixinCreeperEntity", + "features.entity.interaction.MixinAbstractBoat", + "features.entity.interaction.MixinAbstractChestBoat", + "features.entity.interaction.MixinAbstractCow", + "features.entity.interaction.MixinAbstractHorse", + "features.entity.interaction.MixinAnimal", + "features.entity.interaction.MixinArmadillo", + "features.entity.interaction.MixinAxolotl", + "features.entity.interaction.MixinBee", + "features.entity.interaction.MixinCat", + "features.entity.interaction.MixinCreeper", "features.entity.interaction.MixinEntity", - "features.entity.interaction.MixinMobEntity", - "features.entity.interaction.MixinMooshroomEntity", - "features.entity.interaction.MixinSquidEntity", - "features.entity.interaction.MixinWolfEntity", - "features.entity.interaction.MixinZombieVillagerEntity", + "features.entity.interaction.MixinMob", + "features.entity.interaction.MixinMushroomCow", + "features.entity.interaction.MixinSquid", + "features.entity.interaction.MixinWolf", + "features.entity.interaction.MixinZombieVillager", "features.entity.metadata_handling.MixinCommonBoss", "features.entity.metadata_handling.MixinEntityPacketRewriter1_15", "features.entity.metadata_handling.MixinEntityPacketRewriter1_9", "features.entity.metadata_handling.MixinEntityTracker1_9", - "features.entity.metadata_handling.MixinWolfEntity", - "features.entity.pose.MixinOtherClientPlayerEntity", - "features.entity.pose.MixinPlayerEntity", - "features.entity.r1_8_boat.MixinAbstractBoatEntity", - "features.entity.r1_8_boat.MixinEntityModels", - "features.entity.r1_8_boat.MixinEntityRenderManager", - "features.entity.riding_offset.MixinAbstractBoatEntity", - "features.entity.riding_offset.MixinCamelEntity", + "features.entity.metadata_handling.MixinWolf", + "features.entity.pose.MixinRemotePlayer", + "features.entity.pose.MixinPlayer", + "features.entity.r1_8_boat.MixinAbstractBoat", + "features.entity.r1_8_boat.MixinLayerDefinitions", + "features.entity.r1_8_boat.MixinEntityRenderDispatcher", + "features.entity.riding_offset.MixinAbstractBoat", + "features.entity.riding_offset.MixinCamel", "features.entity.riding_offset.MixinEntity", "features.entity.riding_offset.MixinLivingEntity", - "features.execute_inputs_sync.MixinKeyboard", - "features.execute_inputs_sync.MixinMinecraftClient", - "features.execute_inputs_sync.MixinMouse", - "features.font.MixinFontStorage", + "features.execute_inputs_sync.MixinKeyboardHandler", + "features.execute_inputs_sync.MixinMinecraft", + "features.execute_inputs_sync.MixinMouseHandler", + "features.font.MixinFontSet", "features.footstep_particle.MixinMappingDataBase", "features.footstep_particle.MixinParticleIdMappings1_13", "features.footstep_particle.MixinParticleMappings", "features.footstep_particle.MixinRegistrySyncManager", "features.interaction.MixinLivingEntity", - "features.interaction.MixinPlayerEntity", - "features.interaction.container_clicking.MixinAbstractFurnaceScreenHandler", + "features.interaction.MixinPlayer", + "features.interaction.container_clicking.MixinAbstractFurnaceMenu", "features.interaction.container_clicking.MixinBlockItemPacketRewriter1_21_5", - "features.interaction.container_clicking.MixinClientPlayerInteractionManager", - "features.interaction.container_clicking.MixinCraftingScreenHandler", + "features.interaction.container_clicking.MixinMultiPlayerGameMode", + "features.interaction.container_clicking.MixinCraftingMenu", "features.interaction.container_clicking.MixinItemPacketRewriter1_17", - "features.interaction.container_clicking.MixinMerchantScreenHandler", - "features.interaction.container_clicking.MixinScreenHandler", + "features.interaction.container_clicking.MixinMerchantMenu", + "features.interaction.container_clicking.MixinAbstractContainerMenu", "features.interaction.container_clicking.MixinStructuredItemRewriter", - "features.interaction.cooldown.MixinItemCooldownManager", - "features.interaction.cooldown.MixinMinecraftClient", - "features.interaction.cooldown.MixinPlayerEntity", - "features.interaction.r1_18_2_block_ack_emulation.MixinClientPlayerInteractionManager", + "features.interaction.cooldown.MixinItemCooldowns", + "features.interaction.cooldown.MixinMinecraft", + "features.interaction.cooldown.MixinPlayer", + "features.interaction.r1_18_2_block_ack_emulation.MixinMultiPlayerGameMode", "features.interaction.r1_18_2_block_ack_emulation.MixinWorldPacketRewriter1_19", - "features.interaction.remove_fuel_slot.MixinBrewingStandScreenHandler_FuelSlot", - "features.interaction.remove_offhand_slot.MixinPlayerScreenHandler", - "features.interaction.replace_block_item_use_logic.MixinClientPlayerInteractionManager", - "features.interaction.replace_block_item_use_logic.MixinItemPlacementContext", - "features.interaction.replace_block_item_use_logic.MixinMinecraftClient", + "features.interaction.remove_fuel_slot.MixinBrewingStandMenu_FuelSlot", + "features.interaction.remove_offhand_slot.MixinInventoryMenu", + "features.interaction.replace_block_item_use_logic.MixinMultiPlayerGameMode", + "features.interaction.replace_block_item_use_logic.MixinBlockPlaceContext", + "features.interaction.replace_block_item_use_logic.MixinMinecraft", "features.item.attack_damage.MixinAttributeModifiersComponent_Display_Default", "features.item.attack_damage.MixinItemPacketRewriter1_9", "features.item.attack_damage.MixinItemStack", "features.item.data_fix.MixinBlockItemPacketRewriter1_20_5", - "features.item.filter_creative_tabs.MixinItemGroup_EntriesImpl", - "features.item.filter_creative_tabs.MixinItemGroups", + "features.item.filter_creative_tabs.MixinCreativeModeTab_ItemDisplayBuilder", + "features.item.filter_creative_tabs.MixinCreativeModeTabs", "features.item.interaction.MixinAxeItem", "features.item.interaction.MixinBlockItem", "features.item.interaction.MixinBowItem", "features.item.interaction.MixinBrushItem", "features.item.interaction.MixinBucketItem", "features.item.interaction.MixinBundleItem", - "features.item.interaction.MixinConsumableComponent", - "features.item.interaction.MixinEnderPearlItem", - "features.item.interaction.MixinEquippableComponent", + "features.item.interaction.MixinConsumable", + "features.item.interaction.MixinEnderpearlItem", + "features.item.interaction.MixinEquippable", "features.item.interaction.MixinFireChargeItem", "features.item.interaction.MixinFireworkRocketItem", "features.item.interaction.MixinFishingRodItem", @@ -190,124 +190,124 @@ "features.item.interaction.MixinLeadItem", "features.item.interaction.MixinNameTagItem", "features.item.interaction.MixinShovelItem", - "features.item.negative_item_count.MixinDrawContext", + "features.item.negative_item_count.MixinGuiGraphics", "features.item.sword_blocking.MixinBlockItemPacketRewriter1_21_X", "features.item.tooltip.MixinComponentRewriter1_21_5", "features.item.tooltip.MixinItemStack", "features.large_container.MixinItemPacketRewriter1_14", - "features.legacy_tab_completion.MixinAbstractCommandBlockScreen", - "features.legacy_tab_completion.MixinChatInputSuggestor", + "features.legacy_tab_completion.MixinAbstractCommandBlockEditScreen", + "features.legacy_tab_completion.MixinCommandSuggestions", "features.legacy_tab_completion.MixinChatScreen", - "features.limitation.allow_negative_amplifier.MixinStatusEffectInstance", + "features.limitation.allow_negative_amplifier.MixinMobEffectInstance", "features.limitation.book_edit.MixinBookEditScreen", - "features.limitation.max_chat_length.MixinChatMessageC2SPacket", + "features.limitation.max_chat_length.MixinServerboundChatPacket", "features.limitation.max_chat_length.MixinChatScreen", "features.limitation.max_chat_length.MixinProtocol1_10To1_11", - "features.limitation.max_chat_length.MixinStringHelper", - "features.mouse_sensitivity.MixinMouse", - "features.mouse_sensitivity.MixinMouseOptionsScreen", - "features.movement.collision.MixinAbstractBoatEntity", + "features.limitation.max_chat_length.MixinStringUtil", + "features.mouse_sensitivity.MixinMouseHandler", + "features.mouse_sensitivity.MixinMouseSettingsScreen", + "features.movement.collision.MixinAbstractBoat", "features.movement.collision.MixinBedBlock", - "features.movement.collision.MixinClientPlayerEntity", + "features.movement.collision.MixinLocalPlayer", "features.movement.collision.MixinEntity", "features.movement.collision.MixinHoneyBlock", "features.movement.collision.MixinLivingEntity", "features.movement.collision.MixinSoulSandBlock", - "features.movement.collision.MixinVoxelShapes", - "features.movement.constants.MixinClientPlayerEntity", + "features.movement.collision.MixinShapes", + "features.movement.constants.MixinLocalPlayer", "features.movement.constants.MixinEntity", "features.movement.constants.MixinLivingEntity", - "features.movement.constants.MixinPlayerEntity", - "features.movement.constants.MixinPlayerEntityRenderer", - "features.movement.constants.MixinPlayerLikeEntity", - "features.movement.elytra.MixinClientPlayerEntity", + "features.movement.constants.MixinPlayer", + "features.movement.constants.MixinAvatarRenderer", + "features.movement.constants.MixinAvatar", + "features.movement.elytra.MixinLocalPlayer", "features.movement.elytra.MixinFireworkRocketItem", "features.movement.elytra.MixinLivingEntity", - "features.movement.elytra.MixinPlayerEntity", - "features.movement.jump.MixinClientPlayerEntity", + "features.movement.elytra.MixinPlayer", + "features.movement.jump.MixinLocalPlayer", "features.movement.jump.MixinLivingEntity", "features.movement.limitation.MixinLivingEntity", - "features.movement.limitation.MixinPlayerEntity", + "features.movement.limitation.MixinPlayer", "features.movement.limitation.rotation.MixinEntity", - "features.movement.limitation.rotation.MixinPlayerEntity", - "features.movement.packet.MixinClientPlayerEntity", - "features.movement.packet.MixinEntityPosition", - "features.movement.slowdown.MixinClientPlayerEntity", + "features.movement.limitation.rotation.MixinPlayer", + "features.movement.packet.MixinLocalPlayer", + "features.movement.packet.MixinPositionMoveRotation", + "features.movement.slowdown.MixinLocalPlayer", "features.movement.slowdown.MixinEnderEyeItem", - "features.movement.sprinting_and_sneaking.MixinClientPlayerEntity", + "features.movement.sprinting_and_sneaking.MixinLocalPlayer", "features.movement.sprinting_and_sneaking.MixinKeyboardInput", "features.movement.sprinting_and_sneaking.MixinLivingEntity", - "features.movement.sprinting_and_sneaking.MixinPlayerEntity", - "features.movement.vehicle.MixinAbstractHorseEntity", - "features.movement.vehicle.MixinClientPlayerEntity", - "features.movement.water.MixinClientPlayerEntity", + "features.movement.sprinting_and_sneaking.MixinPlayer", + "features.movement.vehicle.MixinAbstractHorse", + "features.movement.vehicle.MixinLocalPlayer", + "features.movement.water.MixinLocalPlayer", "features.movement.water.MixinEntity", - "features.movement.water.MixinFlowableFluid", + "features.movement.water.MixinFlowingFluid", "features.movement.water.MixinItemEntity", "features.movement.water.MixinLivingEntity", - "features.movement.water.MixinSkeletonHorseEntity", - "features.networking.config_state.MixinClientConfigurationNetworkHandler", - "features.networking.config_state.MixinClientPlayNetworkHandler", + "features.movement.water.MixinSkeletonHorse", + "features.networking.config_state.MixinClientConfigurationPacketListenerImpl", + "features.networking.config_state.MixinClientPacketListener", "features.networking.config_state.MixinConfigurationState", - "features.networking.config_state.MixinNetworkStateTransitionHandler", - "features.networking.config_state.MixinNetworkStateTransitions", + "features.networking.config_state.MixinProtocolSwapHandler", + "features.networking.config_state.MixinUnconfiguredPipelineHandler", "features.networking.config_state.MixinProtocol1_20To1_20_2", "features.networking.disable_server_pinging.MixinMultiplayerServerListWidget_ServerEntry", - "features.networking.keep_player_loaded.MixinPlayerEntity", + "features.networking.keep_player_loaded.MixinPlayer", "features.networking.legacy_chat_signature.MixinConnectScreen_1", "features.networking.legacy_chat_signature.MixinKeyPairResponse", - "features.networking.legacy_chat_signature.MixinPlayerPublicKey_PublicKeyData", - "features.networking.legacy_chat_signature.MixinProfileKeysImpl", + "features.networking.legacy_chat_signature.MixinProfilePublicKey_Data", + "features.networking.legacy_chat_signature.MixinAccountProfileKeyPairManager", "features.networking.legacy_chat_signature.MixinYggdrasilUserApiService", - "features.networking.level_loading.MixinClientPlayNetworkHandler", + "features.networking.level_loading.MixinClientPacketListener", "features.networking.level_loading.MixinEntityPacketRewriter1_20_3", "features.networking.level_loading.MixinLevelLoadingScreen", - "features.networking.limitation.MixinClientLoginNetworkHandler", + "features.networking.limitation.MixinClientHandshakePacketListenerImpl", "features.networking.limitation.nbt.MixinNamedCompoundTagType", "features.networking.limitation.nbt.MixinTagType", - "features.networking.open_inventory_packet.MixinMinecraftClient", - "features.networking.packet_handling.MixinClientCommonNetworkHandler", - "features.networking.packet_handling.MixinClientPlayNetworkHandler", + "features.networking.open_inventory_packet.MixinMinecraft", + "features.networking.packet_handling.MixinClientCommonPacketListenerImpl", + "features.networking.packet_handling.MixinClientPacketListener", "features.networking.packet_handling.MixinEntityPacketRewriter1_19_4", - "features.networking.packet_handling.MixinGameTestDebugRenderer", + "features.networking.packet_handling.MixinGameTestBlockHighlightRenderer", "features.networking.packet_handling.MixinProtocol1_21_7To1_21_9", - "features.networking.player_abilities.MixinUpdatePlayerAbilitiesC2SPacket", + "features.networking.player_abilities.MixinServerboundPlayerAbilitiesPacket", "features.networking.registry_validation.MixinRegistryEntryList_Named", - "features.networking.registry_validation.MixinRegistryEntryListCodec", - "features.networking.remove_legacy_pinger.MixinMultiplayerServerListPinger", - "features.networking.remove_signed_commands.MixinClientPlayNetworkHandler", + "features.networking.registry_validation.MixinHolderSetCodec", + "features.networking.remove_legacy_pinger.MixinServerStatusPinger", + "features.networking.remove_signed_commands.MixinClientPacketListener", "features.networking.remove_signed_commands.MixinGameModeSwitcherScreen", - "features.networking.remove_signed_commands.MixinKeyboard", + "features.networking.remove_signed_commands.MixinKeyboardHandler", "features.networking.remove_signed_commands.MixinProtocol1_20_3To1_20_5", "features.networking.remove_signed_commands.MixinProtocol1_21_5To1_21_6", - "features.networking.resource_pack_header.MixinServerResourcePackLoader_4", - "features.networking.srv_resolving.MixinAllowedAddressResolver", + "features.networking.resource_pack_header.MixinDownloadedPackSource_4", + "features.networking.srv_resolving.MixinServerNameResolver", "features.networking.srv_resolving.MixinConnectScreen_1", - "features.networking.srv_resolving.MixinRedirectResolver", + "features.networking.srv_resolving.MixinServerRedirectHandler", "features.networking.srv_resolving.MixinServerAddress", - "features.recipe.MixinCraftingScreenHandler", + "features.recipe.MixinCraftingMenu", "features.recipe.MixinEntityPacketRewriter1_12", - "features.recipe.MixinPlayerScreenHandler", - "features.remove_newer_screen_features.MixinCommandBlockScreen", - "features.remove_newer_screen_features.MixinJigsawBlockScreen", - "features.remove_newer_screen_features.MixinStructureBlockScreen", - "features.remove_newer_screen_features.MixinStructureBlockScreen_1", + "features.recipe.MixinInventoryMenu", + "features.remove_newer_screen_features.MixinCommandBlockEditScreen", + "features.remove_newer_screen_features.MixinJigsawBlockEditScreen", + "features.remove_newer_screen_features.MixinStructureBlockEditScreen", + "features.remove_newer_screen_features.MixinStructureBlockEditScreen_1", "features.run_command_action.MixinScreen", "features.scoreboard.MixinComponentUtil", - "features.scoreboard.MixinTeam", + "features.scoreboard.MixinPlayerTeam", "features.sign_editor_reach.MixinAbstractSignEditScreen", - "features.skin_loading.MixinPlayerSkinProvider", + "features.skin_loading.MixinSkinManager", "features.swinging.MixinLivingEntity", - "features.swinging.MixinMinecraftClient", - "features.world.always_tick_entities.MixinClientWorld", + "features.swinging.MixinMinecraft", + "features.world.always_tick_entities.MixinClientLevel", "features.world.always_tick_entities.MixinEntity", "features.world.border_chunk_rendering.MixinBuiltChunk", - "features.world.disable_sequencing.MixinClientWorld", + "features.world.disable_sequencing.MixinClientLevel", "features.world.duplicated_sounds.MixinBlockItem", "features.world.duplicated_sounds.MixinButtonBlock", "features.world.duplicated_sounds.MixinItems", - "features.world.item_picking.MixinMinecraftClient", - "features.world.remove_server_view_distance.MixinGameOptions" + "features.world.item_picking.MixinMinecraft", + "features.world.remove_server_view_distance.MixinOptions" ], "injectors": { "defaultRequire": 1 diff --git a/src/test/java/com/viaversion/viafabricplus/updater/CollisionShapesTaskTest.java b/src/test/java/com/viaversion/viafabricplus/updater/CollisionShapesTaskTest.java index 9fc7a1d8d..61f7a268e 100644 --- a/src/test/java/com/viaversion/viafabricplus/updater/CollisionShapesTaskTest.java +++ b/src/test/java/com/viaversion/viafabricplus/updater/CollisionShapesTaskTest.java @@ -31,11 +31,11 @@ import java.nio.file.Path; import java.util.HashSet; import java.util.Set; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.registry.Registries; -import net.minecraft.util.math.Box; -import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.VoxelShape; import static com.viaversion.viafabricplus.save.AbstractSave.GSON; @@ -75,23 +75,23 @@ private static void printVoxelShape(final VoxelShape shape) { // if (shape.getBoundingBoxes().size() > 1) { // System.out.println("Multiple boxes in shape: " + shape); // } - final Box box = shape.getBoundingBox(); + final AABB box = shape.bounds(); System.out.println("Min: " + box.minX * 16 + ", " + box.minY * 16 + ", " + box.minZ * 16 + " Max: " + box.maxX * 16 + ", " + box.maxY * 16 + ", " + box.maxZ * 16); } private static StringBuilder dumpData() { final Set> skippedBlocks = new HashSet<>(); final JsonObject data = new JsonObject(); - for (final Block block : Registries.BLOCK) { + for (final Block block : BuiltInRegistries.BLOCK) { final JsonObject blockData = new JsonObject(); - for (final BlockState blockStates : block.getStateManager().getStates()) { + for (final BlockState blockStates : block.getStateDefinition().getPossibleStates()) { final JsonObject blockStateData = new JsonObject(); try { final VoxelShape collisionShape = blockStates.getCollisionShape(null, null); blockStateData.addProperty("collisionShape", collisionShape.toString()); - final VoxelShape outlineShape = blockStates.getOutlineShape(null, null); + final VoxelShape outlineShape = blockStates.getShape(null, null); blockStateData.addProperty("outlineShape", outlineShape.toString()); - final VoxelShape raycastShape = blockStates.getRaycastShape(null, null); + final VoxelShape raycastShape = blockStates.getInteractionShape(null, null); blockStateData.addProperty("raycastShape", raycastShape.toString()); } catch (Exception e) { skippedBlocks.add(block.getClass()); @@ -100,7 +100,7 @@ private static StringBuilder dumpData() { blockData.add(blockStates.toString(), blockStateData); } - data.add(Registries.BLOCK.getId(block).toString(), blockData); + data.add(BuiltInRegistries.BLOCK.getKey(block).toString(), blockData); } final JsonArray skippedBlocksData = new JsonArray(); @@ -125,9 +125,9 @@ private static void compare(final JsonObject first, final JsonObject second) { } } - for (final Block block : Registries.BLOCK) { - final JsonObject firstBlock = first.getAsJsonObject(Registries.BLOCK.getId(block).toString()); - final JsonObject secondBlock = second.getAsJsonObject(Registries.BLOCK.getId(block).toString()); + for (final Block block : BuiltInRegistries.BLOCK) { + final JsonObject firstBlock = first.getAsJsonObject(BuiltInRegistries.BLOCK.getKey(block).toString()); + final JsonObject secondBlock = second.getAsJsonObject(BuiltInRegistries.BLOCK.getKey(block).toString()); if (firstBlock == null) { // New block (or renamed), can be ignored //System.out.println("The block " + Registries.BLOCK.getId(block) + " is missing in the first file."); @@ -135,7 +135,7 @@ private static void compare(final JsonObject first, final JsonObject second) { } boolean missingBlockState = false; - for (final BlockState blockState : block.getStateManager().getStates()) { + for (final BlockState blockState : block.getStateDefinition().getPossibleStates()) { final JsonObject firstBlockState = firstBlock.getAsJsonObject(blockState.toString()); final JsonObject secondBlockState = secondBlock.getAsJsonObject(blockState.toString()); if (firstBlockState == null || secondBlockState == null) { @@ -148,7 +148,7 @@ private static void compare(final JsonObject first, final JsonObject second) { final String firstCollisionShape = firstBlockState.get("collisionShape").getAsString(); final String secondCollisionShape = secondBlockState.get("collisionShape").getAsString(); if (!firstCollisionShape.equals(secondCollisionShape)) { - System.out.println("Collision shape of " + blockState + " in " + Registries.BLOCK.getId(block) + " is different."); + System.out.println("Collision shape of " + blockState + " in " + BuiltInRegistries.BLOCK.getKey(block) + " is different."); System.out.println("First: " + firstCollisionShape); System.out.println("Second: " + secondCollisionShape); } @@ -156,7 +156,7 @@ private static void compare(final JsonObject first, final JsonObject second) { final String firstOutlineShape = firstBlockState.get("outlineShape").getAsString(); final String secondOutlineShape = secondBlockState.get("outlineShape").getAsString(); if (!firstOutlineShape.equals(secondOutlineShape)) { - System.out.println("Outline shape of " + blockState + " in " + Registries.BLOCK.getId(block) + " is different."); + System.out.println("Outline shape of " + blockState + " in " + BuiltInRegistries.BLOCK.getKey(block) + " is different."); System.out.println("First: " + firstOutlineShape); System.out.println("Second: " + secondOutlineShape); } @@ -164,13 +164,13 @@ private static void compare(final JsonObject first, final JsonObject second) { final String firstRaycastShape = firstBlockState.get("raycastShape").getAsString(); final String secondRaycastShape = secondBlockState.get("raycastShape").getAsString(); if (!firstRaycastShape.equals(secondRaycastShape)) { - System.out.println("Raycast shape of " + blockState + " in " + Registries.BLOCK.getId(block) + " is different."); + System.out.println("Raycast shape of " + blockState + " in " + BuiltInRegistries.BLOCK.getKey(block) + " is different."); System.out.println("First: " + firstRaycastShape); System.out.println("Second: " + secondRaycastShape); } } if (missingBlockState && !firstSkippedBlocks.contains(new JsonPrimitive(block.getClass().getSimpleName()))) { - System.out.println("The block " + Registries.BLOCK.getId(block) + " is missing block states in one of the files."); + System.out.println("The block " + BuiltInRegistries.BLOCK.getKey(block) + " is missing block states in one of the files."); } } } diff --git a/src/test/java/com/viaversion/viafabricplus/updater/UpdateTaskTest.java b/src/test/java/com/viaversion/viafabricplus/updater/UpdateTaskTest.java index 7af84aee9..b10eb8c7b 100644 --- a/src/test/java/com/viaversion/viafabricplus/updater/UpdateTaskTest.java +++ b/src/test/java/com/viaversion/viafabricplus/updater/UpdateTaskTest.java @@ -30,18 +30,18 @@ import java.io.FileWriter; import java.io.IOException; import net.lenni0451.reflect.stream.RStream; -import net.minecraft.Bootstrap; -import net.minecraft.GameVersion; +import net.minecraft.server.Bootstrap; +import net.minecraft.WorldVersion; import net.minecraft.SharedConstants; -import net.minecraft.block.entity.BannerPatterns; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.item.Item; -import net.minecraft.item.Items; -import net.minecraft.registry.Registries; -import net.minecraft.registry.RegistryKey; -import net.minecraft.resource.PackVersion; -import net.minecraft.resource.ResourceType; +import net.minecraft.world.level.block.entity.BannerPatterns; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.packs.metadata.pack.PackFormat; +import net.minecraft.server.packs.PackType; import org.junit.jupiter.api.Test; import static com.viaversion.viafabricplus.protocoltranslator.ProtocolTranslator.NATIVE_VERSION; @@ -53,8 +53,8 @@ public final class UpdateTaskTest { @Test public void update() { - SharedConstants.createGameVersion(); - Bootstrap.initialize(); + SharedConstants.tryDetectVersion(); + Bootstrap.bootStrap(); if (SharedConstants.getProtocolVersion() != NATIVE_VERSION.getOriginalVersion()) { throw new UnsupportedOperationException("Please update ProtocolTranslator.NATIVE_VERSION to the current protocol version."); } @@ -74,56 +74,56 @@ private static void updateVersionedRegistries() { } private static void addMissingItems(final JsonObject items) { - for (final Item item : Registries.ITEM) { + for (final Item item : BuiltInRegistries.ITEM) { if (VersionedRegistries.ITEM_DIFF.containsKey(item) || item == Items.AIR) { continue; } - items.addProperty(Registries.ITEM.getId(item).toString(), CURRENT_VERSION_RANGE); + items.addProperty(BuiltInRegistries.ITEM.getKey(item).toString(), CURRENT_VERSION_RANGE); } } private static void addMissingEnchantments(final JsonObject enchantments) { RStream.of(Enchantments.class).fields().forEach(fieldWrapper -> { - final RegistryKey registryKey = fieldWrapper.get(); + final ResourceKey registryKey = fieldWrapper.get(); if (VersionedRegistries.ENCHANTMENT_DIFF.containsKey(registryKey)) { return; } - enchantments.addProperty(registryKey.getValue().toString(), CURRENT_VERSION_RANGE); + enchantments.addProperty(registryKey.location().toString(), CURRENT_VERSION_RANGE); }); } private static void addMissingPatterns(final JsonObject patterns) { RStream.of(BannerPatterns.class).fields().forEach(fieldWrapper -> { - final RegistryKey registryKey = fieldWrapper.get(); + final ResourceKey registryKey = fieldWrapper.get(); if (VersionedRegistries.PATTERN_DIFF.containsKey(registryKey)) { return; } - patterns.addProperty(registryKey.getValue().toString(), CURRENT_VERSION_RANGE); + patterns.addProperty(registryKey.location().toString(), CURRENT_VERSION_RANGE); }); } private static void addMissingEffects(final JsonObject effects) { - for (final StatusEffect effect : Registries.STATUS_EFFECT) { - if (VersionedRegistries.EFFECT_DIFF.containsKey(Registries.STATUS_EFFECT.getEntry(effect))) { + for (final MobEffect effect : BuiltInRegistries.MOB_EFFECT) { + if (VersionedRegistries.EFFECT_DIFF.containsKey(BuiltInRegistries.MOB_EFFECT.wrapAsHolder(effect))) { continue; } - effects.addProperty(Registries.STATUS_EFFECT.getId(effect).toString(), CURRENT_VERSION_RANGE); + effects.addProperty(BuiltInRegistries.MOB_EFFECT.getKey(effect).toString(), CURRENT_VERSION_RANGE); } } private static void updateResourcePacks() { final JsonObject data = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("resource-pack-headers.json"); - final GameVersion version = SharedConstants.getGameVersion(); + final WorldVersion version = SharedConstants.getCurrentVersion(); if (data.has(version.name())) { return; } - final PackVersion packVersion = version.packVersion(ResourceType.CLIENT_RESOURCES); + final PackFormat packVersion = version.packVersion(PackType.CLIENT_RESOURCES); final JsonObject packFormat = new JsonObject(); packFormat.addProperty("major", packVersion.major()); packFormat.addProperty("minor", packVersion.minor()); diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/ViaFabricPlusBase.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/ViaFabricPlusBase.java index 5c161ae3d..741a25b35 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/ViaFabricPlusBase.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/ViaFabricPlusBase.java @@ -31,15 +31,15 @@ import io.netty.channel.Channel; import java.nio.file.Path; import java.util.List; -import net.minecraft.block.entity.BannerPattern; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.network.ServerInfo; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.item.ItemStack; -import net.minecraft.network.ClientConnection; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.level.block.entity.BannerPattern; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.multiplayer.ServerData; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.Connection; +import net.minecraft.resources.ResourceKey; +import net.minecraft.core.Holder; import org.jetbrains.annotations.Nullable; /** @@ -103,7 +103,7 @@ default int apiVersion() { * @param connection the connection * @return the target version */ - ProtocolVersion getTargetVersion(final ClientConnection connection); + ProtocolVersion getTargetVersion(final Connection connection); /** * Sets the target version @@ -119,12 +119,12 @@ default int apiVersion() { @Nullable UserConnection getPlayNetworkUserConnection(); /** - * Get the UserConnection for the given connection {@link ClientConnection}. + * Get the UserConnection for the given connection {@link Connection}. * * @param connection the connection * @return the UserConnection */ - @Nullable UserConnection getUserConnection(final ClientConnection connection); + @Nullable UserConnection getUserConnection(final Connection connection); /** * Gets the per-server protocol version for the given server. @@ -132,7 +132,7 @@ default int apiVersion() { * @param serverInfo the server info * @return the server version */ - @Nullable ProtocolVersion getServerVersion(final ServerInfo serverInfo); + @Nullable ProtocolVersion getServerVersion(final ServerData serverInfo); /** * Register a callback for when the user changes the target version in the screen, or if the user joins a server with a different version. @@ -215,39 +215,39 @@ default int apiVersion() { * @param version The version to check for * @return true if the item exists in the given version, false otherwise, this will also check for CPE items (CustomBlocks V1 extension) */ - boolean itemExists(final net.minecraft.item.Item item, final ProtocolVersion version); + boolean itemExists(final net.minecraft.world.item.Item item, final ProtocolVersion version); /** * @param enchantment The enchantment to check * @param version The version to check for * @return true if the enchantment exists in the given version, false otherwise */ - boolean enchantmentExists(final RegistryKey enchantment, final ProtocolVersion version); + boolean enchantmentExists(final ResourceKey enchantment, final ProtocolVersion version); /** * @param effect The status effect to check * @param version The version to check for * @return true if the status effect exists in the given version, false otherwise */ - boolean effectExists(final RegistryEntry effect, final ProtocolVersion version); + boolean effectExists(final Holder effect, final ProtocolVersion version); /** * @param pattern The banner pattern to check * @param version The version to check for * @return true if the banner pattern exists in the given version, false otherwise */ - boolean bannerPatternExists(final RegistryKey pattern, final ProtocolVersion version); + boolean bannerPatternExists(final ResourceKey pattern, final ProtocolVersion version); /** - * Similar to {@link #itemExists(net.minecraft.item.Item, ProtocolVersion)}, but takes in the current connection details (e.g. classic protocol extensions being loaded) + * Similar to {@link #itemExists(net.minecraft.world.item.Item, ProtocolVersion)}, but takes in the current connection details (e.g. classic protocol extensions being loaded) * * @param item The item to check * @return true if the item exists in the current connection, false otherwise */ - boolean itemExistsInConnection(final net.minecraft.item.Item item); + boolean itemExistsInConnection(final net.minecraft.world.item.Item item); /** - * Same as {@link #itemExists(net.minecraft.item.Item, ProtocolVersion)}, but for item stacks. This also compares against certain data components like enchantments or banner patterns. + * Same as {@link #itemExists(net.minecraft.world.item.Item, ProtocolVersion)}, but for item stacks. This also compares against certain data components like enchantments or banner patterns. * * @param stack The item stack to check * @return true if the item stack exists in the given version, false otherwise diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/AbstractSetting.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/AbstractSetting.java index 53f475c7f..256669b1e 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/AbstractSetting.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/AbstractSetting.java @@ -24,8 +24,8 @@ import com.google.gson.JsonObject; import com.viaversion.viafabricplus.util.ChatUtil; import java.util.function.Supplier; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.Component; /** * This class is the base for all settings. It contains the name, the default value and the current value. @@ -35,14 +35,14 @@ */ public abstract class AbstractSetting { - private final MutableText name; + private final MutableComponent name; private final T defaultValue; private T value; - private Supplier tooltip; + private Supplier tooltip; - public AbstractSetting(final SettingGroup parent, final MutableText name, final T defaultValue) { + public AbstractSetting(final SettingGroup parent, final MutableComponent name, final T defaultValue) { this.name = name; this.defaultValue = defaultValue; @@ -58,7 +58,7 @@ public AbstractSetting(final SettingGroup parent, final MutableText name, final public void onValueChanged() { } - public MutableText getName() { + public MutableComponent getName() { return name; } @@ -92,7 +92,7 @@ public void setValue(T value) { onValueChanged(); } - public Text getTooltip() { + public Component getTooltip() { if (tooltip == null) { return null; } else { @@ -100,11 +100,11 @@ public Text getTooltip() { } } - public void setTooltip(Text tooltip) { + public void setTooltip(Component tooltip) { this.tooltip = () -> tooltip; } - public void setTooltip(Supplier tooltip) { + public void setTooltip(Supplier tooltip) { this.tooltip = tooltip; } diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/SettingGroup.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/SettingGroup.java index b5f856d37..e8fbc40d2 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/SettingGroup.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/SettingGroup.java @@ -24,7 +24,7 @@ import com.viaversion.viafabricplus.util.ChatUtil; import java.util.ArrayList; import java.util.List; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; /** * This class represents a group of settings. It is used to group settings in the settings screen. @@ -34,9 +34,9 @@ public class SettingGroup { private final List> settings = new ArrayList<>(); - private final Text name; + private final Component name; - public SettingGroup(Text name) { + public SettingGroup(Component name) { this.name = name; } @@ -65,7 +65,7 @@ public AbstractSetting getSetting(final String translationKey) { return null; } - public Text getName() { + public Component getName() { return name; } diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/BooleanSetting.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/BooleanSetting.java index a51631dfb..2ad46437b 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/BooleanSetting.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/BooleanSetting.java @@ -24,11 +24,11 @@ import com.google.gson.JsonObject; import com.viaversion.viafabricplus.api.settings.AbstractSetting; import com.viaversion.viafabricplus.api.settings.SettingGroup; -import net.minecraft.text.MutableText; +import net.minecraft.network.chat.MutableComponent; public class BooleanSetting extends AbstractSetting { - public BooleanSetting(SettingGroup parent, MutableText name, Boolean defaultValue) { + public BooleanSetting(SettingGroup parent, MutableComponent name, Boolean defaultValue) { super(parent, name, defaultValue); } diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ButtonSetting.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ButtonSetting.java index 5fcfad1a1..4faabbc5b 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ButtonSetting.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ButtonSetting.java @@ -24,16 +24,16 @@ import com.google.gson.JsonObject; import com.viaversion.viafabricplus.api.settings.AbstractSetting; import com.viaversion.viafabricplus.api.settings.SettingGroup; -import net.minecraft.text.MutableText; +import net.minecraft.network.chat.MutableComponent; public class ButtonSetting extends AbstractSetting { - public ButtonSetting(SettingGroup parent, MutableText name, Runnable onClick) { + public ButtonSetting(SettingGroup parent, MutableComponent name, Runnable onClick) { super(parent, name, onClick); } - public MutableText displayValue() { + public MutableComponent displayValue() { return getName(); } diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ModeSetting.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ModeSetting.java index 4d73ff327..9b0572702 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ModeSetting.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/ModeSetting.java @@ -26,17 +26,17 @@ import com.viaversion.viafabricplus.api.settings.SettingGroup; import com.viaversion.viafabricplus.util.ChatUtil; import java.util.Arrays; -import net.minecraft.text.MutableText; +import net.minecraft.network.chat.MutableComponent; -public class ModeSetting extends AbstractSetting { +public class ModeSetting extends AbstractSetting { - private final MutableText[] options; + private final MutableComponent[] options; - public ModeSetting(SettingGroup parent, MutableText name, MutableText... options) { + public ModeSetting(SettingGroup parent, MutableComponent name, MutableComponent... options) { this(parent, name, 0, options); } - public ModeSetting(SettingGroup parent, MutableText name, int defaultOption, MutableText... options) { + public ModeSetting(SettingGroup parent, MutableComponent name, int defaultOption, MutableComponent... options) { super(parent, name, options[defaultOption]); this.options = options; } @@ -49,7 +49,7 @@ public void write(JsonObject object) { @Override public void read(JsonObject object) { final String selected = object.get(getTranslationKey()).getAsString(); - for (MutableText option : options) { + for (MutableComponent option : options) { if (mapTranslationKey(ChatUtil.uncoverTranslationKey(option)).equals(selected)) { setValue(option); break; @@ -65,7 +65,7 @@ public int getIndex() { return Arrays.stream(options).toList().indexOf(getValue()); } - public MutableText[] getOptions() { + public MutableComponent[] getOptions() { return options; } diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/VersionedBooleanSetting.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/VersionedBooleanSetting.java index 9c0312a40..1a5bb7891 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/VersionedBooleanSetting.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/api/settings/type/VersionedBooleanSetting.java @@ -27,7 +27,7 @@ import com.viaversion.viafabricplus.api.settings.SettingGroup; import com.viaversion.vialoader.util.VersionRange; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.text.MutableText; +import net.minecraft.network.chat.MutableComponent; public class VersionedBooleanSetting extends AbstractSetting { @@ -37,7 +37,7 @@ public class VersionedBooleanSetting extends AbstractSetting { private final VersionRange protocolRange; - public VersionedBooleanSetting(SettingGroup parent, MutableText name, VersionRange protocolRange) { + public VersionedBooleanSetting(SettingGroup parent, MutableComponent name, VersionRange protocolRange) { super(parent, name, AUTO_INDEX); this.protocolRange = protocolRange; diff --git a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/util/ChatUtil.java b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/util/ChatUtil.java index e14c0a990..1b05ae159 100644 --- a/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/util/ChatUtil.java +++ b/viafabricplus-api/src/main/java/com/viaversion/viafabricplus/util/ChatUtil.java @@ -21,18 +21,18 @@ package com.viaversion.viafabricplus.util; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableTextContent; -import net.minecraft.util.Formatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.contents.TranslatableContents; +import net.minecraft.ChatFormatting; /** * This class contains methods to send messages to the player with the ViaFabricPlus prefix */ public final class ChatUtil { - public static final String PREFIX = Formatting.WHITE + "[" + Formatting.GOLD + "ViaFabricPlus" + Formatting.WHITE + "]"; - public static final Text PREFIX_TEXT = Text.literal("[").formatted(Formatting.WHITE).append(Text.literal("ViaFabricPlus").formatted(Formatting.GOLD)).append("]"); + public static final String PREFIX = ChatFormatting.WHITE + "[" + ChatFormatting.GOLD + "ViaFabricPlus" + ChatFormatting.WHITE + "]"; + public static final Component PREFIX_TEXT = Component.literal("[").withStyle(ChatFormatting.WHITE).append(Component.literal("ViaFabricPlus").withStyle(ChatFormatting.GOLD)).append("]"); /** * Prefixes the message with the ViaFabricPlus prefix @@ -40,8 +40,8 @@ public final class ChatUtil { * @param message The message to send * @return The prefixed message */ - public static Text prefixText(final String message) { - return prefixText(Text.of(message)); + public static Component prefixText(final String message) { + return prefixText(Component.nullToEmpty(message)); } /** @@ -50,8 +50,8 @@ public static Text prefixText(final String message) { * @param message The message to send * @return The prefixed message */ - public static Text prefixText(final Text message) { - return Text.empty().append(PREFIX_TEXT).append(" ").append(message); + public static Component prefixText(final Component message) { + return Component.empty().append(PREFIX_TEXT).append(" ").append(message); } /** @@ -59,16 +59,16 @@ public static Text prefixText(final Text message) { * * @param message The message to send */ - public static void sendPrefixedMessage(final Text message) { - MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(prefixText(message)); + public static void sendPrefixedMessage(final Component message) { + Minecraft.getInstance().gui.getChat().addMessage(prefixText(message)); } /** * @param text The text to uncover * @return The translation key of the text */ - public static String uncoverTranslationKey(final Text text) { - return ((TranslatableTextContent) text.getContent()).getKey(); + public static String uncoverTranslationKey(final Component text) { + return ((TranslatableContents) text.getContents()).getKey(); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/ViaFabricPlusVisuals.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/ViaFabricPlusVisuals.java index 8199dbc78..23926586a 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/ViaFabricPlusVisuals.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/ViaFabricPlusVisuals.java @@ -27,7 +27,7 @@ import com.viaversion.viafabricplus.visuals.features.classic.creative_menu.GridItemSelectionScreen; import com.viaversion.viafabricplus.visuals.features.force_unicode_font.UnicodeFontFix1_12_2; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; import net.raphimc.vialegacy.api.LegacyProtocolVersion; public class ViaFabricPlusVisuals implements ViaFabricPlusLoadEntrypoint { @@ -44,7 +44,7 @@ public void onPlatformLoad(ViaFabricPlusBase platform) { } }); - platform.registerOnChangeProtocolVersionCallback((oldVersion, newVersion) -> MinecraftClient.getInstance().execute(() -> { + platform.registerOnChangeProtocolVersionCallback((oldVersion, newVersion) -> Minecraft.getInstance().execute(() -> { if (newVersion.olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) { GridItemSelectionScreen.INSTANCE.itemGrid = null; } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/classic/creative_menu/GridItemSelectionScreen.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/classic/creative_menu/GridItemSelectionScreen.java index 68dd619e2..3d9ba7a2e 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/classic/creative_menu/GridItemSelectionScreen.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/classic/creative_menu/GridItemSelectionScreen.java @@ -24,18 +24,18 @@ import com.viaversion.viafabricplus.ViaFabricPlus; import java.util.ArrayList; import java.util.List; -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.input.KeyInput; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.registry.Registries; -import net.minecraft.resource.featuretoggle.FeatureFlags; -import net.minecraft.text.Text; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; @SuppressWarnings("DataFlowIssue") public final class GridItemSelectionScreen extends Screen { @@ -51,7 +51,7 @@ public final class GridItemSelectionScreen extends Screen { public ItemStack selectedItem = null; public GridItemSelectionScreen() { - super(Text.of("Classic item selection")); + super(Component.nullToEmpty("Classic item selection")); } @Override @@ -61,8 +61,8 @@ protected void init() { } final List allowedItems = new ArrayList<>(); // Calculate all visible items - for (Item item : Registries.ITEM) { - if (item == Items.AIR || !item.getRequiredFeatures().contains(FeatureFlags.VANILLA)) { + for (Item item : BuiltInRegistries.ITEM) { + if (item == Items.AIR || !item.requiredFeatures().contains(FeatureFlags.VANILLA)) { continue; } if (ViaFabricPlus.getImpl().itemExistsInConnection(item)) { @@ -70,7 +70,7 @@ protected void init() { } } - itemGrid = new Item[MathHelper.ceil(allowedItems.size() / (double) MAX_ROW_DIVIDER)][MAX_ROW_DIVIDER]; + itemGrid = new Item[Mth.ceil(allowedItems.size() / (double) MAX_ROW_DIVIDER)][MAX_ROW_DIVIDER]; int x = 0; int y = 0; for (Item allowedItem : allowedItems) { @@ -84,29 +84,29 @@ protected void init() { } @Override - public boolean mouseClicked(final Click click, final boolean doubled) { + public boolean mouseClicked(final MouseButtonEvent click, final boolean doubled) { if (selectedItem != null) { - this.client.interactionManager.clickCreativeStack(selectedItem, client.player.getInventory().getSelectedSlot() + 36); // Beta Inventory Tracker - this.client.player.getInventory().setSelectedStack(selectedItem); - this.client.player.playerScreenHandler.sendContentUpdates(); + this.minecraft.gameMode.handleCreativeModeItemAdd(selectedItem, minecraft.player.getInventory().getSelectedSlot() + 36); // Beta Inventory Tracker + this.minecraft.player.getInventory().setSelectedItem(selectedItem); + this.minecraft.player.inventoryMenu.broadcastChanges(); - ClickableWidget.playClickSound(this.client.getSoundManager()); - this.close(); + AbstractWidget.playButtonClickSound(this.minecraft.getSoundManager()); + this.onClose(); } return super.mouseClicked(click, doubled); } @Override - public boolean keyPressed(final KeyInput input) { - if (client.options.inventoryKey.matchesKey(input)) { - this.close(); + public boolean keyPressed(final KeyEvent input) { + if (minecraft.options.keyInventory.matches(input)) { + this.onClose(); return true; } return super.keyPressed(input); } @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { + public void render(GuiGraphics context, int mouseX, int mouseY, float delta) { final int halfWidth = this.width / 2; final int halfHeight = this.height / 2; @@ -117,7 +117,7 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { final int renderY = halfHeight - boxHeight / 2; context.fill(renderX, renderY, renderX + boxWidth, renderY + boxHeight, Integer.MIN_VALUE); - context.drawCenteredTextWithShadow(textRenderer, "Select block", renderX + boxWidth / 2, renderY + SIDE_OFFSET, -1); + context.drawCenteredString(font, "Select block", renderX + boxWidth / 2, renderY + SIDE_OFFSET, -1); selectedItem = null; int y = SIDE_OFFSET + SIDE_OFFSET; @@ -128,9 +128,9 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (mouseX > renderX + x && mouseY > renderY + y && mouseX < renderX + x + ITEM_XY_BOX_DIMENSION_CLASSIC && mouseY < renderY + y + ITEM_XY_BOX_DIMENSION_CLASSIC) { context.fill(renderX + x, renderY + y, renderX + x + ITEM_XY_BOX_DIMENSION_CLASSIC, renderY + y + ITEM_XY_BOX_DIMENSION_CLASSIC, Integer.MAX_VALUE); - selectedItem = item.getDefaultStack(); + selectedItem = item.getDefaultInstance(); } - context.drawItem(item.getDefaultStack(), renderX + x + ITEM_XY_BOX_DIMENSION_MODERN / 4, renderY + y + ITEM_XY_BOX_DIMENSION_MODERN / 4); + context.renderItem(item.getDefaultInstance(), renderX + x + ITEM_XY_BOX_DIMENSION_MODERN / 4, renderY + y + ITEM_XY_BOX_DIMENSION_MODERN / 4); x += ITEM_XY_BOX_DIMENSION_CLASSIC; } y += ITEM_XY_BOX_DIMENSION_CLASSIC; diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/force_unicode_font/UnicodeFontFix1_12_2.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/force_unicode_font/UnicodeFontFix1_12_2.java index 41b3c415d..3f34bb212 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/force_unicode_font/UnicodeFontFix1_12_2.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/features/force_unicode_font/UnicodeFontFix1_12_2.java @@ -25,10 +25,10 @@ import com.viaversion.viafabricplus.visuals.settings.VisualSettings; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.option.SimpleOption; -import net.minecraft.client.resource.language.TranslationStorage; -import net.minecraft.util.Language; +import net.minecraft.client.Minecraft; +import net.minecraft.client.OptionInstance; +import net.minecraft.client.resources.language.ClientLanguage; +import net.minecraft.locale.Language; /** * Older versions only had unicode font support for some languages and therefore servers are expecting the client @@ -54,16 +54,16 @@ public static void init() { } public static void updateUnicodeFontOverride(final ProtocolVersion version) { - final SimpleOption option = MinecraftClient.getInstance().options.getForceUnicodeFont(); + final OptionInstance option = Minecraft.getInstance().options.forceUnicodeFont(); if (VisualSettings.INSTANCE.forceUnicodeFontForNonAsciiLanguages.isEnabled(version)) { - if (Language.getInstance() instanceof TranslationStorage storage) { - enabled = LanguageUtil.isUnicodeFont1_12_2(storage.translations); - task = () -> option.setValue(enabled); + if (Language.getInstance() instanceof ClientLanguage storage) { + enabled = LanguageUtil.isUnicodeFont1_12_2(storage.storage); + task = () -> option.set(enabled); } } else if (enabled) { enabled = false; - task = () -> option.setValue(false); + task = () -> option.set(false); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerListEntry.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerInfo.java similarity index 96% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerListEntry.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerInfo.java index 7965ebf3f..2270a78a0 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerListEntry.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerInfo.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle; -public interface IPlayerListEntry { +public interface IPlayerInfo { int viaFabricPlusVisuals$getIndex(); diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerListHud.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerTabOverlay.java similarity index 96% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerListHud.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerTabOverlay.java index 83b187186..03e50789e 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerListHud.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/access/r1_7_tab_list_tyle/IPlayerTabOverlay.java @@ -21,7 +21,7 @@ package com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle; -public interface IPlayerListHud { +public interface IPlayerTabOverlay { void viaFabricPlusVisuals$setMaxPlayers(final int maxPlayers); diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/MixinCreativeInventoryScreen.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/MixinCreativeModeInventoryScreen.java similarity index 84% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/MixinCreativeInventoryScreen.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/MixinCreativeModeInventoryScreen.java index ca6e7b97c..c77370016 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/MixinCreativeInventoryScreen.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/creative_menu/MixinCreativeModeInventoryScreen.java @@ -23,20 +23,20 @@ import com.viaversion.viafabricplus.visuals.features.classic.creative_menu.GridItemSelectionScreen; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; 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(CreativeInventoryScreen.class) -public abstract class MixinCreativeInventoryScreen { +@Mixin(CreativeModeInventoryScreen.class) +public abstract class MixinCreativeModeInventoryScreen { @Inject(method = "init", at = @At("RETURN")) private void replaceCreativeMenu(CallbackInfo ci) { if (VisualSettings.INSTANCE.replaceCreativeInventory.isEnabled()) { - MinecraftClient.getInstance().setScreen(GridItemSelectionScreen.INSTANCE); + Minecraft.getInstance().setScreen(GridItemSelectionScreen.INSTANCE); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinBipedEntityModel.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinHumanoidModel.java similarity index 62% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinBipedEntityModel.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinHumanoidModel.java index ac931272f..58534fcac 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinBipedEntityModel.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinHumanoidModel.java @@ -22,10 +22,10 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.classic.walking_animation; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.entity.model.BipedEntityModel; -import net.minecraft.client.render.entity.state.BipedEntityRenderState; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.entity.state.HumanoidRenderState; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -33,8 +33,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(BipedEntityModel.class) -public abstract class MixinBipedEntityModel { +@Mixin(HumanoidModel.class) +public abstract class MixinHumanoidModel { @Shadow @Final @@ -44,17 +44,17 @@ public abstract class MixinBipedEntityModel { @Final public ModelPart leftArm; - @Inject(method = "setAngles(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/model/ModelPart;roll:F", ordinal = 1, shift = At.Shift.AFTER)) + @Inject(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/model/geom/ModelPart;zRot:F", ordinal = 1, shift = At.Shift.AFTER)) private void addOldWalkAnimation(T bipedEntityRenderState, CallbackInfo ci) { if (VisualSettings.INSTANCE.oldWalkingAnimation.isEnabled()) { - final float limbSwingAnimationProgress = bipedEntityRenderState.limbSwingAnimationProgress; - final float limbSwingAmplitude = bipedEntityRenderState.limbSwingAmplitude; + final float limbSwingAnimationProgress = bipedEntityRenderState.walkAnimationPos; + final float limbSwingAmplitude = bipedEntityRenderState.walkAnimationSpeed; - this.rightArm.pitch = MathHelper.cos(limbSwingAnimationProgress * 0.6662F + 3.1415927F) * 2.0F * limbSwingAmplitude; - this.rightArm.roll = (MathHelper.cos(limbSwingAnimationProgress * 0.2312F) + 1.0F) * 1.0F * limbSwingAmplitude; + this.rightArm.xRot = Mth.cos(limbSwingAnimationProgress * 0.6662F + 3.1415927F) * 2.0F * limbSwingAmplitude; + this.rightArm.zRot = (Mth.cos(limbSwingAnimationProgress * 0.2312F) + 1.0F) * 1.0F * limbSwingAmplitude; - this.leftArm.pitch = MathHelper.cos(limbSwingAnimationProgress * 0.6662F) * 2.0F * limbSwingAmplitude; - this.leftArm.roll = (MathHelper.cos(limbSwingAnimationProgress * 0.2812F) - 1.0F) * 1.0F * limbSwingAmplitude; + this.leftArm.xRot = Mth.cos(limbSwingAnimationProgress * 0.6662F) * 2.0F * limbSwingAmplitude; + this.leftArm.zRot = (Mth.cos(limbSwingAnimationProgress * 0.2812F) - 1.0F) * 1.0F * limbSwingAmplitude; } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen.java index b06477bdd..64c4803a3 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen.java @@ -26,9 +26,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import net.minecraft.client.gui.screen.GameModeSwitcherScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; +import net.minecraft.client.gui.screens.debug.GameModeSwitcherScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -46,43 +46,43 @@ public abstract class MixinGameModeSwitcherScreen extends Screen { @Mutable @Shadow @Final - private static int UI_WIDTH; + private static int ALL_SLOTS_WIDTH; @Unique - private GameModeSwitcherScreen.GameModeSelection[] viaFabricPlusVisuals$unwrappedGameModes; + private GameModeSwitcherScreen.GameModeIcon[] viaFabricPlusVisuals$unwrappedGameModes; - public MixinGameModeSwitcherScreen(Text title) { + public MixinGameModeSwitcherScreen(Component title) { super(title); } @Inject(method = "", at = @At("RETURN")) private void fixUIWidth(CallbackInfo ci) { if (ViaFabricPlus.getImpl().getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { - final List selections = new ArrayList<>(Arrays.stream(GameModeSwitcherScreen.GameModeSelection.values()).toList()); + final List selections = new ArrayList<>(Arrays.stream(GameModeSwitcherScreen.GameModeIcon.values()).toList()); - selections.remove(GameModeSwitcherScreen.GameModeSelection.SPECTATOR); + selections.remove(GameModeSwitcherScreen.GameModeIcon.SPECTATOR); if (ViaFabricPlus.getImpl().getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_2_4tor1_2_5)) { - selections.remove(GameModeSwitcherScreen.GameModeSelection.ADVENTURE); + selections.remove(GameModeSwitcherScreen.GameModeIcon.ADVENTURE); } - viaFabricPlusVisuals$unwrappedGameModes = selections.toArray(GameModeSwitcherScreen.GameModeSelection[]::new); - UI_WIDTH = viaFabricPlusVisuals$unwrappedGameModes.length * 31 - 5; + viaFabricPlusVisuals$unwrappedGameModes = selections.toArray(GameModeSwitcherScreen.GameModeIcon[]::new); + ALL_SLOTS_WIDTH = viaFabricPlusVisuals$unwrappedGameModes.length * 31 - 5; } } - @Redirect(method = "init", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screen/GameModeSwitcherScreen$GameModeSelection;VALUES:[Lnet/minecraft/client/gui/screen/GameModeSwitcherScreen$GameModeSelection;")) - private GameModeSwitcherScreen.GameModeSelection[] removeNewerGameModes() { + @Redirect(method = "init", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screens/debug/GameModeSwitcherScreen$GameModeIcon;VALUES:[Lnet/minecraft/client/gui/screens/debug/GameModeSwitcherScreen$GameModeIcon;")) + private GameModeSwitcherScreen.GameModeIcon[] removeNewerGameModes() { if (ViaFabricPlus.getImpl().getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { return viaFabricPlusVisuals$unwrappedGameModes; } else { - return GameModeSwitcherScreen.GameModeSelection.values(); + return GameModeSwitcherScreen.GameModeIcon.values(); } } @Inject(method = "init", at = @At("HEAD")) private void disableInClassic(CallbackInfo ci) { if (ViaFabricPlus.getImpl().getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.c0_28toc0_30)) { // survival mode was added in a1.0.15 - this.close(); + this.onClose(); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen_GameModeSelection.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen_GameModeIcon.java similarity index 80% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen_GameModeSelection.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen_GameModeIcon.java index 9e60f821f..6c6a9173f 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen_GameModeSelection.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/filter_game_mode_selections/MixinGameModeSwitcherScreen_GameModeIcon.java @@ -23,7 +23,7 @@ import com.viaversion.viafabricplus.ViaFabricPlus; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import net.minecraft.client.gui.screen.GameModeSwitcherScreen; +import net.minecraft.client.gui.screens.debug.GameModeSwitcherScreen; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -33,27 +33,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @SuppressWarnings("DataFlowIssue") -@Mixin(GameModeSwitcherScreen.GameModeSelection.class) -public abstract class MixinGameModeSwitcherScreen_GameModeSelection { +@Mixin(GameModeSwitcherScreen.GameModeIcon.class) +public abstract class MixinGameModeSwitcherScreen_GameModeIcon { @Shadow @Final - public static GameModeSwitcherScreen.GameModeSelection SURVIVAL; + public static GameModeSwitcherScreen.GameModeIcon SURVIVAL; @Shadow @Final - public static GameModeSwitcherScreen.GameModeSelection CREATIVE; + public static GameModeSwitcherScreen.GameModeIcon CREATIVE; - @Inject(method = "next", at = @At("HEAD"), cancellable = true) - private void unwrapGameModes(CallbackInfoReturnable cir) { + @Inject(method = "getNext", at = @At("HEAD"), cancellable = true) + private void unwrapGameModes(CallbackInfoReturnable cir) { if (ViaFabricPlus.getImpl().getTargetVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { - switch ((GameModeSwitcherScreen.GameModeSelection) (Object) this) { + switch ((GameModeSwitcherScreen.GameModeIcon) (Object) this) { case CREATIVE -> cir.setReturnValue(SURVIVAL); case SURVIVAL -> { if (ViaFabricPlus.getImpl().getTargetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_2_4tor1_2_5)) { cir.setReturnValue(CREATIVE); } else { - cir.setReturnValue(GameModeSwitcherScreen.GameModeSelection.ADVENTURE); + cir.setReturnValue(GameModeSwitcherScreen.GameModeIcon.ADVENTURE); } } case ADVENTURE -> cir.setReturnValue(CREATIVE); diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/force_unicode_font/MixinLanguageManager.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/force_unicode_font/MixinLanguageManager.java index 329f20c69..57e24a6dc 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/force_unicode_font/MixinLanguageManager.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/force_unicode_font/MixinLanguageManager.java @@ -23,8 +23,8 @@ import com.viaversion.viafabricplus.ViaFabricPlus; import com.viaversion.viafabricplus.visuals.features.force_unicode_font.UnicodeFontFix1_12_2; -import net.minecraft.client.resource.language.LanguageManager; -import net.minecraft.resource.ResourceManager; +import net.minecraft.client.resources.language.LanguageManager; +import net.minecraft.server.packs.resources.ResourceManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -33,7 +33,7 @@ @Mixin(LanguageManager.class) public abstract class MixinLanguageManager { - @Inject(method = "reload", at = @At("RETURN")) + @Inject(method = "onResourceManagerReload", at = @At("RETURN")) private void updateUnicodeFontOverride(ResourceManager manager, CallbackInfo ci) { UnicodeFontFix1_12_2.updateUnicodeFontOverride(ViaFabricPlus.getImpl().getTargetVersion()); } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatHud.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatComponent.java similarity index 75% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatHud.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatComponent.java index 798eabc94..b957606f8 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatHud.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatComponent.java @@ -22,17 +22,17 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.hud_element_changes; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.gui.hud.ChatHud; -import net.minecraft.client.gui.hud.MessageIndicator; +import net.minecraft.client.gui.components.ChatComponent; +import net.minecraft.client.GuiMessageTag; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; -@Mixin(ChatHud.class) -public abstract class MixinChatHud { +@Mixin(ChatComponent.class) +public abstract class MixinChatComponent { - @ModifyVariable(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V", at = @At("HEAD"), ordinal = 0, argsOnly = true) - private MessageIndicator removeIndicator(MessageIndicator instance) { + @ModifyVariable(method = "addMessage(Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/GuiMessageTag;)V", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private GuiMessageTag removeIndicator(GuiMessageTag instance) { return VisualSettings.INSTANCE.hideSignatureIndicator.isEnabled() ? null : instance; } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatScreen.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatScreen.java index 600665528..a2741475b 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatScreen.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinChatScreen.java @@ -22,9 +22,9 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.hud_element_changes; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.gui.hud.ChatHud; -import net.minecraft.client.gui.hud.MessageIndicator; -import net.minecraft.client.gui.screen.ChatScreen; +import net.minecraft.client.gui.components.ChatComponent; +import net.minecraft.client.GuiMessageTag; +import net.minecraft.client.gui.screens.ChatScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -32,12 +32,12 @@ @Mixin(value = ChatScreen.class) public abstract class MixinChatScreen { - @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;getIndicatorAt(DD)Lnet/minecraft/client/gui/hud/MessageIndicator;")) - private MessageIndicator removeIndicator(ChatHud instance, double mouseX, double mouseY) { + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/ChatComponent;getMessageTagAt(DD)Lnet/minecraft/client/GuiMessageTag;")) + private GuiMessageTag removeIndicator(ChatComponent instance, double mouseX, double mouseY) { if (VisualSettings.INSTANCE.hideSignatureIndicator.isEnabled()) { return null; } else { - return instance.getIndicatorAt(mouseX, mouseY); + return instance.getMessageTagAt(mouseX, mouseY); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinInGameHud.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinGui.java similarity index 66% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinInGameHud.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinGui.java index 6df735680..7a605af96 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinInGameHud.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinGui.java @@ -28,13 +28,13 @@ import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.pipeline.RenderPipeline; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.option.Perspective; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.Identifier; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.CameraType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -45,26 +45,26 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; -@Mixin(InGameHud.class) -public abstract class MixinInGameHud { +@Mixin(Gui.class) +public abstract class MixinGui { @Unique private static final int viaFabricPlusVisuals$ARMOR_ICON_WIDTH = 8; - @Inject(method = "playBurstSound", at = @At("HEAD"), cancellable = true) - private void disableBubblePopSound(int bubble, PlayerEntity player, int burstBubbles, CallbackInfo ci) { + @Inject(method = "playAirBubblePoppedSound", at = @At("HEAD"), cancellable = true) + private void disableBubblePopSound(int bubble, Player player, int burstBubbles, CallbackInfo ci) { if (VisualSettings.INSTANCE.removeBubblePopSound.getValue()) { ci.cancel(); } } - @WrapWithCondition(method = "renderAirBubbles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/util/Identifier;IIII)V", ordinal = 2)) - private boolean disableEmptyBubbles(DrawContext instance, RenderPipeline pipeline, Identifier sprite, int x, int y, int width, int height) { + @WrapWithCondition(method = "renderAirBubbles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIII)V", ordinal = 2)) + private boolean disableEmptyBubbles(GuiGraphics instance, RenderPipeline pipeline, ResourceLocation sprite, int x, int y, int width, int height) { return !VisualSettings.INSTANCE.hideEmptyBubbleIcons.getValue(); } - @WrapOperation(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/Perspective;isFirstPerson()Z")) - private boolean alwaysRenderCrosshair(Perspective instance, Operation original) { + @WrapOperation(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/CameraType;isFirstPerson()Z")) + private boolean alwaysRenderCrosshair(CameraType instance, Operation original) { if (VisualSettings.INSTANCE.alwaysRenderCrosshair.isEnabled()) { return true; } else { @@ -72,28 +72,28 @@ private boolean alwaysRenderCrosshair(Perspective instance, Operation o } } - @Inject(method = "shouldShowJumpBar", at = @At("HEAD"), cancellable = true) + @Inject(method = "willPrioritizeJumpInfo", at = @At("HEAD"), cancellable = true) private void removeMountJumpBar(CallbackInfoReturnable cir) { if (VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { cir.setReturnValue(false); } } - @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) + @Inject(method = "renderVehicleHealth", at = @At("HEAD"), cancellable = true) private void removeMountJumpBar(CallbackInfo ci) { if (VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { ci.cancel(); } } - @Inject(method = "getHeartCount", at = @At("HEAD"), cancellable = true) + @Inject(method = "getVehicleMaxHearts", at = @At("HEAD"), cancellable = true) private void removeHungerBar(LivingEntity entity, CallbackInfoReturnable cir) { if (VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { cir.setReturnValue(1); } } - @ModifyExpressionValue(method = "renderStatusBars", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;getScaledWindowHeight()I"), require = 0) + @ModifyExpressionValue(method = "renderPlayerHealth", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;guiHeight()I"), require = 0) private int moveHealthDown(int value) { if (VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { return value + 6; // Magical offset @@ -102,27 +102,27 @@ private int moveHealthDown(int value) { } } - @ModifyArgs(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/util/Identifier;IIII)V"), require = 0) + @ModifyArgs(method = "renderArmor", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIII)V"), require = 0) private static void moveArmorPositions(Args args, @Local(ordinal = 3, argsOnly = true) int x, @Local(ordinal = 6) int n) { if (!VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { return; } - final MinecraftClient client = MinecraftClient.getInstance(); + final Minecraft client = Minecraft.getInstance(); final int armorWidth = 10 * viaFabricPlusVisuals$ARMOR_ICON_WIDTH; final int offset = n * viaFabricPlusVisuals$ARMOR_ICON_WIDTH; - args.set(2, client.getWindow().getScaledWidth() - x - armorWidth + offset - 1); - args.set(3, (int) args.get(3) + client.textRenderer.fontHeight + 1); + args.set(2, client.getWindow().getGuiScaledWidth() - x - armorWidth + offset - 1); + args.set(3, (int) args.get(3) + client.font.lineHeight + 1); } - @ModifyArg(method = "renderAirBubbles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/util/Identifier;IIII)V"), + @ModifyArg(method = "renderAirBubbles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIII)V"), index = 2, require = 0) private int moveAirBubbles(int value) { if (VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { - final MinecraftClient client = MinecraftClient.getInstance(); - return client.getWindow().getScaledWidth() - value - client.textRenderer.fontHeight; + final Minecraft client = Minecraft.getInstance(); + return client.getWindow().getGuiScaledWidth() - value - client.font.lineHeight; } else { return value; } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinClientPlayerInteractionManager.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinMultiPlayerGameMode.java similarity index 85% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinClientPlayerInteractionManager.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinMultiPlayerGameMode.java index 987d6a84e..4a101750a 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinClientPlayerInteractionManager.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/hud_element_changes/MixinMultiPlayerGameMode.java @@ -22,20 +22,20 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.hud_element_changes; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.network.ClientPlayerInteractionManager; +import net.minecraft.client.multiplayer.MultiPlayerGameMode; 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.CallbackInfoReturnable; -@Mixin(ClientPlayerInteractionManager.class) -public abstract class MixinClientPlayerInteractionManager { +@Mixin(MultiPlayerGameMode.class) +public abstract class MixinMultiPlayerGameMode { - @Inject(method = "hasExperienceBar", at = @At("HEAD"), cancellable = true) + @Inject(method = "hasExperience", at = @At("HEAD"), cancellable = true) private void removeExperienceBar(CallbackInfoReturnable cir) { if (VisualSettings.INSTANCE.hideModernHUDElements.isEnabled()) { cir.setReturnValue(false); } } -} \ No newline at end of file +} diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/instant_sneaking/MixinCamera.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/instant_sneaking/MixinCamera.java index 408dac463..f5b13c70d 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/instant_sneaking/MixinCamera.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/instant_sneaking/MixinCamera.java @@ -22,8 +22,8 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.instant_sneaking; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.render.Camera; -import net.minecraft.entity.Entity; +import net.minecraft.client.Camera; +import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -34,19 +34,19 @@ public abstract class MixinCamera { @Shadow - private float cameraY; + private float eyeHeight; @Shadow - private float lastCameraY; + private float eyeHeightOld; @Shadow - private Entity focusedEntity; + private Entity entity; - @Inject(method = "updateEyeHeight", at = @At(value = "HEAD"), cancellable = true) + @Inject(method = "tick", at = @At(value = "HEAD"), cancellable = true) private void sneakInstantly(CallbackInfo ci) { - if (this.focusedEntity != null && VisualSettings.INSTANCE.sneakInstantly.isEnabled()) { + if (this.entity != null && VisualSettings.INSTANCE.sneakInstantly.isEnabled()) { ci.cancel(); - cameraY = lastCameraY = focusedEntity.getStandingEyeHeight(); + eyeHeight = eyeHeightOld = entity.getEyeHeight(); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/level_loading_transitions/MixinLevelLoadingScreen.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/level_loading_transitions/MixinLevelLoadingScreen.java index ce597b369..57ecd1255 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/level_loading_transitions/MixinLevelLoadingScreen.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/level_loading_transitions/MixinLevelLoadingScreen.java @@ -22,7 +22,7 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.level_loading_transitions; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.gui.screen.world.LevelLoadingScreen; +import net.minecraft.client.gui.screens.LevelLoadingScreen; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -32,12 +32,12 @@ public abstract class MixinLevelLoadingScreen { @Shadow - private LevelLoadingScreen.WorldEntryReason reason; + private LevelLoadingScreen.Reason reason; - @Redirect(method = "renderBackground", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screen/world/LevelLoadingScreen;reason:Lnet/minecraft/client/gui/screen/world/LevelLoadingScreen$WorldEntryReason;")) - private LevelLoadingScreen.WorldEntryReason hideDownloadTerrainScreenTransitionEffects(LevelLoadingScreen levelLoadingScreen) { + @Redirect(method = "renderBackground", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/screens/LevelLoadingScreen;reason:Lnet/minecraft/client/gui/screens/LevelLoadingScreen$Reason;")) + private LevelLoadingScreen.Reason hideDownloadTerrainScreenTransitionEffects(LevelLoadingScreen levelLoadingScreen) { if (VisualSettings.INSTANCE.hideDownloadTerrainScreenTransitionEffects.isEnabled()) { - return LevelLoadingScreen.WorldEntryReason.OTHER; + return LevelLoadingScreen.Reason.OTHER; } else { return this.reason; } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/MixinPlayerEntity.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/MixinPlayer.java similarity index 82% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/MixinPlayerEntity.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/MixinPlayer.java index a22b419d4..51345591c 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/MixinPlayerEntity.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/oof_sound/MixinPlayer.java @@ -22,21 +22,21 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.oof_sound; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.entity.damage.DamageSource; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.resources.ResourceLocation; 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.CallbackInfoReturnable; -@Mixin(PlayerEntity.class) -public abstract class MixinPlayerEntity { +@Mixin(Player.class) +public abstract class MixinPlayer { @Unique - private static final SoundEvent viaFabricPlusVisuals$oof_hurt = SoundEvent.of(Identifier.of("viafabricplus-visuals", "oof.hurt")); + private static final SoundEvent viaFabricPlusVisuals$oof_hurt = SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath("viafabricplus-visuals", "oof.hurt")); @Inject(method = "getHurtSound", at = @At("HEAD"), cancellable = true) private void replaceSound(DamageSource source, CallbackInfoReturnable cir) { diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/petrified_oak_slab_model/MixinItemRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/petrified_oak_slab_model/MixinItemRenderer.java index cdfb181fc..8f1750ed4 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/petrified_oak_slab_model/MixinItemRenderer.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/petrified_oak_slab_model/MixinItemRenderer.java @@ -22,25 +22,25 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.petrified_oak_slab_model; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.item.ItemModelManager; -import net.minecraft.component.ComponentType; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.util.Identifier; +import net.minecraft.client.renderer.item.ItemModelResolver; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.resources.ResourceLocation; 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.Redirect; -@Mixin(ItemModelManager.class) +@Mixin(ItemModelResolver.class) public abstract class MixinItemRenderer { @Unique - private static final Identifier viaFabricPlusVisuals$missingIdentifier = Identifier.of(String.valueOf(System.currentTimeMillis())); + private static final ResourceLocation viaFabricPlusVisuals$missingIdentifier = ResourceLocation.parse(String.valueOf(System.currentTimeMillis())); - @Redirect(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;get(Lnet/minecraft/component/ComponentType;)Ljava/lang/Object;")) - private Object removeModel(ItemStack instance, ComponentType componentType) { - if (VisualSettings.INSTANCE.replacePetrifiedOakSlab.isEnabled() && instance.isOf(Items.PETRIFIED_OAK_SLAB)) { + @Redirect(method = "appendItemLayers", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;get(Lnet/minecraft/core/component/DataComponentType;)Ljava/lang/Object;")) + private Object removeModel(ItemStack instance, DataComponentType componentType) { + if (VisualSettings.INSTANCE.replacePetrifiedOakSlab.isEnabled() && instance.is(Items.PETRIFIED_OAK_SLAB)) { return viaFabricPlusVisuals$missingIdentifier; } else { return instance.get(componentType); diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinBipedEntityModel.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinHumanoidModel.java similarity index 79% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinBipedEntityModel.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinHumanoidModel.java index 60caa83fb..a742d0a0e 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinBipedEntityModel.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinHumanoidModel.java @@ -22,21 +22,21 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.player_rotations; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.render.entity.model.BipedEntityModel; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.util.Mth; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(BipedEntityModel.class) -public abstract class MixinBipedEntityModel { +@Mixin(HumanoidModel.class) +public abstract class MixinHumanoidModel { - @Redirect(method = "positionBlockingArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;clamp(FFF)F")) + @Redirect(method = "poseBlockingArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F")) private float preventArmFollowingThirdPersonRotation(float value, float min, float max) { if (VisualSettings.INSTANCE.lockBlockingArmRotation.isEnabled()) { return 0.0F; } else { - return MathHelper.clamp(value, min, max); + return Mth.clamp(value, min, max); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinLivingEntity.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinLivingEntity.java index 94916526d..8391c0fe7 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinLivingEntity.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/player_rotations/MixinLivingEntity.java @@ -22,11 +22,11 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.player_rotations; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.World; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -36,19 +36,19 @@ public abstract class MixinLivingEntity extends Entity { @Shadow - public float bodyYaw; + public float yBodyRot; - public MixinLivingEntity(EntityType type, World world) { + public MixinLivingEntity(EntityType type, Level world) { super(type, world); } - @Redirect(method = "turnHead", at = @At(value = "INVOKE", target = "Ljava/lang/Math;abs(F)F")) + @Redirect(method = "tickHeadTurn", at = @At(value = "INVOKE", target = "Ljava/lang/Math;abs(F)F")) private float changeBodyRotationInterpolation(float g) { if (VisualSettings.INSTANCE.changeBodyRotationInterpolation.isEnabled()) { - g = MathHelper.clamp(g, -75.0F, 75.0F); - this.bodyYaw = this.getYaw() - g; + g = Mth.clamp(g, -75.0F, 75.0F); + this.yBodyRot = this.getYRot() - g; if (Math.abs(g) > 50.0F) { - this.bodyYaw += g * 0.2F; + this.yBodyRot += g * 0.2F; } return Float.MIN_VALUE; // Causes the if to always fail } else { @@ -56,13 +56,13 @@ private float changeBodyRotationInterpolation(float g) { } } - @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;abs(F)F")) + @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;abs(F)F")) private float alwaysRotateWhenWalkingBackwards(float value) { if (VisualSettings.INSTANCE.sidewaysBackwardsRunning.isEnabled()) { return 0F; } else { - return MathHelper.abs(value); + return Mth.abs(value); } } -} \ No newline at end of file +} diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/potion_glint/MixinPotionItem.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/potion_glint/MixinPotionItem.java index 77132a40c..faa9dc8aa 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/potion_glint/MixinPotionItem.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/potion_glint/MixinPotionItem.java @@ -22,26 +22,26 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.potion_glint; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.PotionContentsComponent; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.PotionItem; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.PotionItem; import org.spongepowered.asm.mixin.Mixin; @Mixin(PotionItem.class) public abstract class MixinPotionItem extends Item { - public MixinPotionItem(final Settings settings) { + public MixinPotionItem(final Properties settings) { super(settings); } @Override - public boolean hasGlint(final ItemStack stack) { + public boolean isFoil(final ItemStack stack) { if (VisualSettings.INSTANCE.potionEnchantmentGlint.isEnabled()) { - return stack.getOrDefault(DataComponentTypes.POTION_CONTENTS, PotionContentsComponent.DEFAULT).hasEffects(); + return stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY).hasEffects(); } else { - return super.hasGlint(stack); + return super.isFoil(stack); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinHeldItemRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinHeldItemRenderer.java deleted file mode 100644 index d5c440748..000000000 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinHeldItemRenderer.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus - * Copyright (C) 2021-2025 the original authors - * - FlorianMichael/EnZaXD - * - RK_01/RaphiMC - * Copyright (C) 2023-2025 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.viaversion.viafabricplus.visuals.injection.mixin.r1_7_item_tilt; - -import com.viaversion.viafabricplus.visuals.settings.VisualSettings; -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.render.command.OrderedRenderCommandQueue; -import net.minecraft.client.render.item.HeldItemRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.BlockItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Arm; -import net.minecraft.util.Hand; -import net.minecraft.util.math.RotationAxis; -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; - -@Mixin(HeldItemRenderer.class) -public abstract class MixinHeldItemRenderer { - - @Shadow - protected abstract void applySwingOffset(MatrixStack matrices, Arm arm, float swingProgress); - - @Inject(method = "renderFirstPersonItem", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipOffset(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/util/Arm;F)V", ordinal = 2, shift = At.Shift.AFTER)) - private void applyFoodSwingOffset(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, CallbackInfo ci) { - viaFabricPlusVisuals$applySwingOffset(player, hand, swingProgress, matrices); - } - - @Inject(method = "renderFirstPersonItem", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipOffset(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/util/Arm;F)V", ordinal = 3, shift = At.Shift.AFTER)) - private void applyBlockingSwingOffset(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, CallbackInfo ci) { - viaFabricPlusVisuals$applySwingOffset(player, hand, swingProgress, matrices); - } - - @Inject(method = "renderFirstPersonItem", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipOffset(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/util/Arm;F)V", ordinal = 4, shift = At.Shift.AFTER)) - private void applyBowSwingOffset(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, CallbackInfo ci) { - viaFabricPlusVisuals$applySwingOffset(player, hand, swingProgress, matrices); - } - - @Inject(method = "renderFirstPersonItem", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderItem(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;I)V", ordinal = 1)) - private void slightlyTiltItemPosition(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, CallbackInfo ci) { - if (VisualSettings.INSTANCE.tiltItemPositions.isEnabled() && !(item.getItem() instanceof BlockItem)) { - final Arm arm = hand == Hand.MAIN_HAND ? player.getMainArm() : player.getMainArm().getOpposite(); - final int direction = arm == Arm.RIGHT ? 1 : -1; - - final float scale = 0.7585F / 0.86F; - matrices.scale(scale, scale, scale); - matrices.translate(direction * -0.084F, 0.059F, 0.08F); - matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(direction * 5.0F)); - } - } - - @Unique - private void viaFabricPlusVisuals$applySwingOffset(AbstractClientPlayerEntity player, Hand hand, float swingProgress, MatrixStack matrices) { - if (VisualSettings.INSTANCE.swingHandOnItemUse.isEnabled()) { - final Arm arm = hand == Hand.MAIN_HAND ? player.getMainArm() : player.getMainArm().getOpposite(); - applySwingOffset(matrices, arm, swingProgress); - } - } - -} diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinItemInHandRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinItemInHandRenderer.java new file mode 100644 index 000000000..5c4eca3cf --- /dev/null +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_item_tilt/MixinItemInHandRenderer.java @@ -0,0 +1,87 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2025 the original authors + * - FlorianMichael/EnZaXD + * - RK_01/RaphiMC + * Copyright (C) 2023-2025 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.visuals.injection.mixin.r1_7_item_tilt; + +import com.viaversion.viafabricplus.visuals.settings.VisualSettings; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.ItemInHandRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.InteractionHand; +import com.mojang.math.Axis; +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; + +@Mixin(ItemInHandRenderer.class) +public abstract class MixinItemInHandRenderer { + + @Shadow + protected abstract void applyItemArmAttackTransform(PoseStack matrices, HumanoidArm arm, float swingProgress); + + @Inject(method = "renderArmWithItem", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;applyItemArmTransform(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/world/entity/HumanoidArm;F)V", ordinal = 2, shift = At.Shift.AFTER)) + private void applyFoodSwingOffset(AbstractClientPlayer player, float tickProgress, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, SubmitNodeCollector orderedRenderCommandQueue, int light, CallbackInfo ci) { + viaFabricPlusVisuals$applySwingOffset(player, hand, swingProgress, matrices); + } + + @Inject(method = "renderArmWithItem", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;applyItemArmTransform(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/world/entity/HumanoidArm;F)V", ordinal = 3, shift = At.Shift.AFTER)) + private void applyBlockingSwingOffset(AbstractClientPlayer player, float tickProgress, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, SubmitNodeCollector orderedRenderCommandQueue, int light, CallbackInfo ci) { + viaFabricPlusVisuals$applySwingOffset(player, hand, swingProgress, matrices); + } + + @Inject(method = "renderArmWithItem", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;applyItemArmTransform(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/world/entity/HumanoidArm;F)V", ordinal = 4, shift = At.Shift.AFTER)) + private void applyBowSwingOffset(AbstractClientPlayer player, float tickProgress, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, SubmitNodeCollector orderedRenderCommandQueue, int light, CallbackInfo ci) { + viaFabricPlusVisuals$applySwingOffset(player, hand, swingProgress, matrices); + } + + @Inject(method = "renderArmWithItem", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;I)V", ordinal = 1)) + private void slightlyTiltItemPosition(AbstractClientPlayer player, float tickProgress, float pitch, InteractionHand hand, float swingProgress, ItemStack item, float equipProgress, PoseStack matrices, SubmitNodeCollector orderedRenderCommandQueue, int light, CallbackInfo ci) { + if (VisualSettings.INSTANCE.tiltItemPositions.isEnabled() && !(item.getItem() instanceof BlockItem)) { + final HumanoidArm arm = hand == InteractionHand.MAIN_HAND ? player.getMainArm() : player.getMainArm().getOpposite(); + final int direction = arm == HumanoidArm.RIGHT ? 1 : -1; + + final float scale = 0.7585F / 0.86F; + matrices.scale(scale, scale, scale); + matrices.translate(direction * -0.084F, 0.059F, 0.08F); + matrices.mulPose(Axis.YP.rotationDegrees(direction * 5.0F)); + } + } + + @Unique + private void viaFabricPlusVisuals$applySwingOffset(AbstractClientPlayer player, InteractionHand hand, float swingProgress, PoseStack matrices) { + if (VisualSettings.INSTANCE.swingHandOnItemUse.isEnabled()) { + final HumanoidArm arm = hand == InteractionHand.MAIN_HAND ? player.getMainArm() : player.getMainArm().getOpposite(); + applyItemArmAttackTransform(matrices, arm, swingProgress); + } + } + +} diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinClientPlayNetworkHandler.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinClientPacketListener.java similarity index 71% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinClientPlayNetworkHandler.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinClientPacketListener.java index ca53ac739..94909d8a3 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinClientPlayNetworkHandler.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinClientPacketListener.java @@ -22,22 +22,22 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.r1_7_tab_list_style; import com.viaversion.viafabricplus.visuals.features.r1_7_tab_list_style.LegacyTabList; -import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerListHud; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket; +import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerTabOverlay; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ClientboundLoginPacket; 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) -public abstract class MixinClientPlayNetworkHandler { +@Mixin(ClientPacketListener.class) +public abstract class MixinClientPacketListener { - @Inject(method = "onGameJoin", at = @At("RETURN")) - private void initPlayerListFix(GameJoinS2CPacket packet, CallbackInfo ci) { + @Inject(method = "handleLogin", at = @At("RETURN")) + private void initPlayerListFix(ClientboundLoginPacket packet, CallbackInfo ci) { LegacyTabList.globalTablistIndex = 0; - ((IPlayerListHud) MinecraftClient.getInstance().inGameHud.getPlayerListHud()).viaFabricPlusVisuals$setMaxPlayers(packet.maxPlayers()); + ((IPlayerTabOverlay) Minecraft.getInstance().gui.getTabList()).viaFabricPlusVisuals$setMaxPlayers(packet.maxPlayers()); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerListEntry.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerInfo.java similarity index 88% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerListEntry.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerInfo.java index ee710ca8a..375400365 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerListEntry.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerInfo.java @@ -22,13 +22,13 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.r1_7_tab_list_style; import com.viaversion.viafabricplus.visuals.features.r1_7_tab_list_style.LegacyTabList; -import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerListEntry; -import net.minecraft.client.network.PlayerListEntry; +import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerInfo; +import net.minecraft.client.multiplayer.PlayerInfo; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; -@Mixin(PlayerListEntry.class) -public abstract class MixinPlayerListEntry implements IPlayerListEntry { +@Mixin(PlayerInfo.class) +public abstract class MixinPlayerInfo implements IPlayerInfo { @Unique private final int viaFabricPlusVisuals$index = LegacyTabList.globalTablistIndex++; diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerListHud.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerTabOverlay.java similarity index 72% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerListHud.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerTabOverlay.java index d9965f742..fcfd425a0 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerListHud.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/r1_7_tab_list_style/MixinPlayerTabOverlay.java @@ -22,16 +22,16 @@ package com.viaversion.viafabricplus.visuals.injection.mixin.r1_7_tab_list_style; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerListEntry; -import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerListHud; +import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerInfo; +import com.viaversion.viafabricplus.visuals.injection.access.r1_7_tab_list_tyle.IPlayerTabOverlay; import com.viaversion.viafabricplus.visuals.settings.VisualSettings; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.hud.PlayerListHud; -import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.PlayerTabOverlay; +import net.minecraft.client.multiplayer.PlayerInfo; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -40,15 +40,15 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(PlayerListHud.class) -public abstract class MixinPlayerListHud implements IPlayerListHud { +@Mixin(PlayerTabOverlay.class) +public abstract class MixinPlayerTabOverlay implements IPlayerTabOverlay { @Shadow @Final - private MinecraftClient client; + private Minecraft minecraft; @Unique - private static final Comparator viaFabricPlusVisuals$FIFO_COMPARATOR = Comparator.comparingInt(e -> ((IPlayerListEntry) e).viaFabricPlusVisuals$getIndex()); + private static final Comparator viaFabricPlusVisuals$FIFO_COMPARATOR = Comparator.comparingInt(e -> ((IPlayerInfo) e).viaFabricPlusVisuals$getIndex()); @Unique private int viaFabricPlusVisuals$maxSlots; @@ -56,10 +56,10 @@ public abstract class MixinPlayerListHud implements IPlayerListHud { @Unique private boolean viaFabricPlusVisuals$hideSkins = true; - @Inject(method = "collectPlayerEntries", at = @At("HEAD"), cancellable = true) - private void collectPlayerEntries(CallbackInfoReturnable> result) { + @Inject(method = "getPlayerInfos", at = @At("HEAD"), cancellable = true) + private void collectPlayerEntries(CallbackInfoReturnable> result) { if (VisualSettings.INSTANCE.enableLegacyTablist.isEnabled()) { - result.setReturnValue(this.client.player.networkHandler.getListedPlayerListEntries().stream() + result.setReturnValue(this.minecraft.player.connection.getListedOnlinePlayers().stream() .sorted(viaFabricPlusVisuals$FIFO_COMPARATOR) .limit(viaFabricPlusVisuals$maxSlots) .collect(Collectors.collectingAndThen(Collectors.toList(), this::viaFabricPlusVisuals$transpose))); @@ -68,27 +68,27 @@ private void collectPlayerEntries(CallbackInfoReturnable> } } - @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;isEncrypted()Z")) + @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Connection;isEncrypted()Z")) private boolean hideSkins(boolean original) { return original && !viaFabricPlusVisuals$hideSkins; } @Unique - private List viaFabricPlusVisuals$transpose(final List list) { + private List viaFabricPlusVisuals$transpose(final List list) { // Only bother transposing if we know the list is full if (list.size() != viaFabricPlusVisuals$maxSlots) { viaFabricPlusVisuals$hideSkins = list.stream().noneMatch(e -> e.getProfile().properties().containsKey("textures")); return list; } - final List result = new ArrayList<>(list.size()); + final List result = new ArrayList<>(list.size()); - final int columns = viaFabricPlusVisuals$maxSlots / PlayerListHud.MAX_ROWS; + final int columns = viaFabricPlusVisuals$maxSlots / PlayerTabOverlay.MAX_ROWS_PER_COL; boolean anyHasSkinData = false; for (int i = 0; i < viaFabricPlusVisuals$maxSlots; i++) { - final int row = i % PlayerListHud.MAX_ROWS; - final int col = i / PlayerListHud.MAX_ROWS; - final PlayerListEntry current = list.get(row * columns + col); + final int row = i % PlayerTabOverlay.MAX_ROWS_PER_COL; + final int col = i / PlayerTabOverlay.MAX_ROWS_PER_COL; + final PlayerInfo current = list.get(row * columns + col); result.add(current); anyHasSkinData = anyHasSkinData || current.getProfile().properties().containsKey("textures"); } @@ -98,7 +98,7 @@ private boolean hideSkins(boolean original) { @Override public void viaFabricPlusVisuals$setMaxPlayers(int maxPlayers) { - this.viaFabricPlusVisuals$maxSlots = Math.min(200, Math.max(20, ((maxPlayers + PlayerListHud.MAX_ROWS - 1) / PlayerListHud.MAX_ROWS) * PlayerListHud.MAX_ROWS)); + this.viaFabricPlusVisuals$maxSlots = Math.min(200, Math.max(20, ((maxPlayers + PlayerTabOverlay.MAX_ROWS_PER_COL - 1) / PlayerTabOverlay.MAX_ROWS_PER_COL) * PlayerTabOverlay.MAX_ROWS_PER_COL)); } } diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/MixinGameMenuScreen.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/MixinPauseScreen.java similarity index 58% rename from viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/MixinGameMenuScreen.java rename to viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/MixinPauseScreen.java index f26086fb8..66c91ce8f 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/MixinGameMenuScreen.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/remove_newer_screen_features/MixinPauseScreen.java @@ -29,16 +29,16 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import java.util.function.Consumer; import java.util.function.Supplier; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.GameMenuScreen; -import net.minecraft.client.gui.screen.OpenToLanScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.multiplayer.SocialInteractionsScreen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.GridWidget; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.screen.ScreenTexts; -import net.minecraft.text.Text; +import net.minecraft.client.gui.components.events.GuiEventListener; +import net.minecraft.client.gui.screens.PauseScreen; +import net.minecraft.client.gui.screens.ShareToLanScreen; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.social.SocialInteractionsScreen; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.layouts.GridLayout; +import net.minecraft.client.gui.layouts.LayoutElement; +import net.minecraft.network.chat.CommonComponents; +import net.minecraft.network.chat.Component; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -48,101 +48,101 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(GameMenuScreen.class) -public abstract class MixinGameMenuScreen extends Screen { +@Mixin(PauseScreen.class) +public abstract class MixinPauseScreen extends Screen { @Shadow - protected abstract ButtonWidget createButton(Text text, Supplier screenSupplier); + protected abstract Button openScreenButton(Component text, Supplier screenSupplier); @Shadow @Final - private static Text PLAYER_REPORTING_TEXT; + private static Component PLAYER_REPORTING; @Shadow @Final - private static Text SHARE_TO_LAN_TEXT; + private static Component SHARE_TO_LAN; @Shadow @Final - private static Text OPTIONS_TEXT; + private static Component OPTIONS; @Shadow @Final - private static Text RETURN_TO_GAME_TEXT; + private static Component RETURN_TO_GAME; @Shadow @Final - private static Text ADVANCEMENTS_TEXT; + private static Component ADVANCEMENTS; @Shadow @Final - private static Text STATS_TEXT; + private static Component STATS; @Shadow @Final - private static int NORMAL_BUTTON_WIDTH; + private static int BUTTON_WIDTH_HALF; @Unique private int viaFabricPlusVisuals$disconnectButtonWidth; @Unique - private ButtonWidget.PressAction viaFabricPlusVisuals$disconnectSupplier; + private Button.OnPress viaFabricPlusVisuals$disconnectSupplier; - protected MixinGameMenuScreen(Text title) { + protected MixinPauseScreen(Component title) { super(title); } - @WrapOperation(method = "initWidgets", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/GameMenuScreen;createButton(Lnet/minecraft/text/Text;Ljava/util/function/Supplier;)Lnet/minecraft/client/gui/widget/ButtonWidget;"), require = 0) - private ButtonWidget replaceButtons(GameMenuScreen instance, Text text, Supplier screenSupplier, Operation original) { + @WrapOperation(method = "createPauseMenu", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/PauseScreen;openScreenButton(Lnet/minecraft/network/chat/Component;Ljava/util/function/Supplier;)Lnet/minecraft/client/gui/components/Button;"), require = 0) + private Button replaceButtons(PauseScreen instance, Component text, Supplier screenSupplier, Operation