Начинающий
- Статус
- Оффлайн
- Регистрация
- 14 Авг 2021
- Сообщения
- 210
- Реакции
- 0
- Выберите загрузчик игры
- Vanilla
- Forge
- Fabric
- NeoForge
- OptiFine
- ForgeOptiFine
- Прочие моды
Считаю эту тему бесполезной, ведь это какие-то костыли. Нормальный фикс краша с HoldMyItems для базы поляка ( мунварда ), и для остальных подойдёт.
ss - зачем если это фикс краша
ss - зачем если это фикс краша
HeldItemRendererMixin:
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();
}
}