Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Часть функционала Фикс проблем с совместимосью HoldMyItems 1.21.4

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
14 Авг 2021
Сообщения
210
Реакции
0
Выберите загрузчик игры
  1. Vanilla
  2. Forge
  3. Fabric
  4. NeoForge
  5. OptiFine
  6. ForgeOptiFine
  7. Прочие моды
Считаю эту тему бесполезной, ведь это какие-то костыли. Нормальный фикс краша с HoldMyItems для базы поляка ( мунварда ), и для остальных подойдёт.
ss - зачем если это фикс краша

HeldItemRendererMixin:
Expand Collapse Copy
package zov.polyak.mixin;

import com.google.common.base.MoreObjects;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.HeldItemRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Arm;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
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.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import zov.polyak.module.list.render.SwingAnimations;
import zov.polyak.module.list.render.ViewModel;
import zov.polyak.util.base.Instance;

@Mixin(value = HeldItemRenderer.class, priority = 900)
public abstract class HeldItemRendererMixin {

private static final boolean pastim_iz_polyaka_kaban4ikom = FabricLoader.getInstance().isModLoaded("hold-my-items");

@Shadow private ItemStack mainHand;
@Shadow private float equipProgressMainHand;
@Shadow private float prevEquipProgressMainHand;
@Shadow private float prevEquipProgressOffHand;
@Shadow private float equipProgressOffHand;
@Shadow private ItemStack offHand;

@Shadow
    protected abstract void renderFirstPersonItem(AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light);

@Shadow
    protected abstract void swingArm(float swingProgress, float equipProgress, MatrixStack matrices, int armX, Arm arm);

@Shadow
    private static HeldItemRenderer.HandRenderType getHandRenderType(ClientPlayerEntity player) {
 throw new AssertionError();
    }

 @Inject(
method = "renderFirstPersonItem",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/util/math/MatrixStack;push()V",
shift = At.Shift.AFTER,
ordinal = 0
            )
    )
public void injectAfterMatrixPushHandPosition(AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
if (pastim_iz_polyaka_kaban4ikom) return;
        
var viewModel = Instance.get(ViewModel.class);
if (viewModel.isEnabled() && !item.isEmpty() && !item.contains(DataComponentTypes.MAP_ID)) {
var isMainHand = hand == Hand.MAIN_HAND;
 var arm = isMainHand ? player.getMainArm() : player.getMainArm().getOpposite();
            viewModel.applyHandPosition(matrices, arm);
        }
    }

 @Redirect(
method = "renderFirstPersonItem",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/item/HeldItemRenderer;swingArm(FFLnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/util/Arm;)V",
ordinal = 2
            )
    )
public void redirectSwingArmForCustomAnim(HeldItemRenderer instance, float swingProgress, float equipProgress, MatrixStack matrices, int armX, Arm arm) {
if (pastim_iz_polyaka_kaban4ikom) {
            swingArm(swingProgress, equipProgress, matrices, armX, arm);
 return;
        }
        
var swingAnimation = Instance.get(SwingAnimations.class);
 if (swingAnimation.isEnabled()) {
if (arm == Arm.RIGHT) {
                swingAnimation.renderSwordAnimation(matrices, swingProgress, equipProgress, arm);
} else {
                swingArm(swingProgress, equipProgress, matrices, armX, arm);
            }
} else {
            swingArm(swingProgress, equipProgress, matrices, armX, arm);
        }
    }

@Overwrite
    public void renderItem(float tickDelta, MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers, ClientPlayerEntity player, int light) {
if (pastim_iz_polyaka_kaban4ikom) {
 float f = player.getHandSwingProgress(tickDelta);
Hand hand = (Hand) MoreObjects.firstNonNull(player.preferredHand, Hand.MAIN_HAND);
 float g = player.getLerpedPitch(tickDelta);
HeldItemRenderer.HandRenderType handRenderType = this.getHandRenderType(player);

 float j;
 float k;
if (handRenderType.renderMainHand) {
j = hand == Hand.MAIN_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressMainHand, this.equipProgressMainHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.MAIN_HAND, j, this.mainHand, k, matrices, vertexConsumers, light);
            }

if (handRenderType.renderOffHand) {
j = hand == Hand.OFF_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressOffHand, this.equipProgressOffHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.OFF_HAND, j, this.offHand, k, matrices, vertexConsumers, light);
            }

            vertexConsumers.draw();
 return;
        }

 float f = player.getHandSwingProgress(tickDelta);
Hand hand = (Hand) MoreObjects.firstNonNull(player.preferredHand, Hand.MAIN_HAND);
 float g = player.getLerpedPitch(tickDelta);
HeldItemRenderer.HandRenderType handRenderType = this.getHandRenderType(player);

 float j;
 float k;
if (handRenderType.renderMainHand) {
j = hand == Hand.MAIN_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressMainHand, this.equipProgressMainHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.MAIN_HAND, j, this.mainHand, k, matrices, vertexConsumers, light);
        }

if (handRenderType.renderOffHand) {
j = hand == Hand.OFF_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressOffHand, this.equipProgressOffHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.OFF_HAND, j, this.offHand, k, matrices, vertexConsumers, light);
        }

        vertexConsumers.draw();
    }
}
 
Считаю эту тему бесполезной, ведь это какие-то костыли. Нормальный фикс краша с HoldMyItems для базы поляка ( мунварда ), и для остальных подойдёт.
ss - зачем если это фикс краша

HeldItemRendererMixin:
Expand Collapse Copy
package zov.polyak.mixin;

import com.google.common.base.MoreObjects;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.HeldItemRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Arm;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
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.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import zov.polyak.module.list.render.SwingAnimations;
import zov.polyak.module.list.render.ViewModel;
import zov.polyak.util.base.Instance;

@Mixin(value = HeldItemRenderer.class, priority = 900)
public abstract class HeldItemRendererMixin {

private static final boolean pastim_iz_polyaka_kaban4ikom = FabricLoader.getInstance().isModLoaded("hold-my-items");

@Shadow private ItemStack mainHand;
@Shadow private float equipProgressMainHand;
@Shadow private float prevEquipProgressMainHand;
@Shadow private float prevEquipProgressOffHand;
@Shadow private float equipProgressOffHand;
@Shadow private ItemStack offHand;

@Shadow
    protected abstract void renderFirstPersonItem(AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light);

@Shadow
    protected abstract void swingArm(float swingProgress, float equipProgress, MatrixStack matrices, int armX, Arm arm);

@Shadow
    private static HeldItemRenderer.HandRenderType getHandRenderType(ClientPlayerEntity player) {
 throw new AssertionError();
    }

 @Inject(
method = "renderFirstPersonItem",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/util/math/MatrixStack;push()V",
shift = At.Shift.AFTER,
ordinal = 0
            )
    )
public void injectAfterMatrixPushHandPosition(AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
if (pastim_iz_polyaka_kaban4ikom) return;
       
var viewModel = Instance.get(ViewModel.class);
if (viewModel.isEnabled() && !item.isEmpty() && !item.contains(DataComponentTypes.MAP_ID)) {
var isMainHand = hand == Hand.MAIN_HAND;
 var arm = isMainHand ? player.getMainArm() : player.getMainArm().getOpposite();
            viewModel.applyHandPosition(matrices, arm);
        }
    }

 @Redirect(
method = "renderFirstPersonItem",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/item/HeldItemRenderer;swingArm(FFLnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/util/Arm;)V",
ordinal = 2
            )
    )
public void redirectSwingArmForCustomAnim(HeldItemRenderer instance, float swingProgress, float equipProgress, MatrixStack matrices, int armX, Arm arm) {
if (pastim_iz_polyaka_kaban4ikom) {
            swingArm(swingProgress, equipProgress, matrices, armX, arm);
 return;
        }
       
var swingAnimation = Instance.get(SwingAnimations.class);
 if (swingAnimation.isEnabled()) {
if (arm == Arm.RIGHT) {
                swingAnimation.renderSwordAnimation(matrices, swingProgress, equipProgress, arm);
} else {
                swingArm(swingProgress, equipProgress, matrices, armX, arm);
            }
} else {
            swingArm(swingProgress, equipProgress, matrices, armX, arm);
        }
    }

@Overwrite
    public void renderItem(float tickDelta, MatrixStack matrices, VertexConsumerProvider.Immediate vertexConsumers, ClientPlayerEntity player, int light) {
if (pastim_iz_polyaka_kaban4ikom) {
 float f = player.getHandSwingProgress(tickDelta);
Hand hand = (Hand) MoreObjects.firstNonNull(player.preferredHand, Hand.MAIN_HAND);
 float g = player.getLerpedPitch(tickDelta);
HeldItemRenderer.HandRenderType handRenderType = this.getHandRenderType(player);

 float j;
 float k;
if (handRenderType.renderMainHand) {
j = hand == Hand.MAIN_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressMainHand, this.equipProgressMainHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.MAIN_HAND, j, this.mainHand, k, matrices, vertexConsumers, light);
            }

if (handRenderType.renderOffHand) {
j = hand == Hand.OFF_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressOffHand, this.equipProgressOffHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.OFF_HAND, j, this.offHand, k, matrices, vertexConsumers, light);
            }

            vertexConsumers.draw();
 return;
        }

 float f = player.getHandSwingProgress(tickDelta);
Hand hand = (Hand) MoreObjects.firstNonNull(player.preferredHand, Hand.MAIN_HAND);
 float g = player.getLerpedPitch(tickDelta);
HeldItemRenderer.HandRenderType handRenderType = this.getHandRenderType(player);

 float j;
 float k;
if (handRenderType.renderMainHand) {
j = hand == Hand.MAIN_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressMainHand, this.equipProgressMainHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.MAIN_HAND, j, this.mainHand, k, matrices, vertexConsumers, light);
        }

if (handRenderType.renderOffHand) {
j = hand == Hand.OFF_HAND ? f : 0.0F;
k = 1.0F - MathHelper.lerp(tickDelta, this.prevEquipProgressOffHand, this.equipProgressOffHand);
this.renderFirstPersonItem(player, tickDelta, g, Hand.OFF_HAND, j, this.offHand, k, matrices, vertexConsumers, light);
        }

        vertexConsumers.draw();
    }
}
иба паста
 
что делать если 'net.minecraft.client.render.item.HeldItemRenderer.HandRenderType' is not public in 'net.minecraft.client.render.item.HeldItemRenderer'. Cannot be accessed from outside package
 
Назад
Сверху Снизу