优化配件渲染

This commit is contained in:
17146 2025-06-03 00:21:27 +08:00 committed by Light_Quanta
parent 670f232337
commit 35ae784ade
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
2 changed files with 41 additions and 13 deletions

View file

@ -1,10 +1,12 @@
package com.atsuishio.superbwarfare.client.renderer;
import com.atsuishio.superbwarfare.client.ItemModelHelper;
import com.atsuishio.superbwarfare.client.model.item.CustomGunModel;
import com.atsuishio.superbwarfare.config.client.DisplayConfig;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
@ -14,6 +16,7 @@ import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import org.joml.Matrix4f;
import software.bernie.geckolib.animatable.GeoAnimatable;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.model.GeoModel;
@ -21,6 +24,8 @@ import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.util.Color;
import software.bernie.geckolib.util.RenderUtil;
import java.util.Set;
public class CustomGunRenderer<T extends GunItem & GeoAnimatable> extends GeoItemRenderer<T> {
public static final float SCALE_RECIPROCAL = 1.0f / 16.0f;
@ -35,10 +40,36 @@ public class CustomGunRenderer<T extends GunItem & GeoAnimatable> extends GeoIte
super(model);
}
/**
* 在其他视角下会隐藏的骨骼名称例如配件的骨骼名
*/
public Set<String> getHiddenBonesInOtherPerspective() {
return Set.of();
}
@Override
public void renderByItem(ItemStack stack, ItemDisplayContext transformType, PoseStack matrixStack, MultiBufferSource bufferIn, int combinedLightIn, int p_239207_6_) {
this.transformType = transformType;
super.renderByItem(stack, transformType, matrixStack, bufferIn, combinedLightIn, p_239207_6_);
public void renderRecursively(PoseStack poseStack, T animatable, GeoBone bone, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int color) {
Minecraft mc = Minecraft.getInstance();
String name = bone.getName();
var player = mc.player;
if (player == null) return;
ItemStack itemStack = player.getMainHandItem();
if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) {
if (this.renderPerspective == ItemDisplayContext.FIXED) {
ItemModelHelper.hideAllAttachments(bone, name);
if (this.getHiddenBonesInOtherPerspective().contains(name)) {
bone.setHidden(true);
}
}
} else {
ItemModelHelper.hideAllAttachments(bone, name);
if (this.getHiddenBonesInOtherPerspective().contains(name)) {
bone.setHidden(true);
}
}
super.renderRecursively(poseStack, animatable, bone, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, color);
}
@Override

View file

@ -19,6 +19,8 @@ import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.cache.object.GeoBone;
import java.util.Set;
public class Mp5ItemRenderer extends CustomGunRenderer<Mp5Item> {
public Mp5ItemRenderer() {
@ -54,11 +56,6 @@ public class Mp5ItemRenderer extends CustomGunRenderer<Mp5Item> {
}
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.05, 1, 0.35);
ItemModelHelper.handleGunAttachments(bone, itemStack, name);
} else if (this.renderPerspective == ItemDisplayContext.FIXED) {
ItemModelHelper.hideAllAttachments(bone, name);
if (name.equals("yugu")) {
bone.setHidden(true);
}
}
int scopeType = GunData.from(itemStack).attachment.get(AttachmentType.SCOPE);
@ -68,11 +65,6 @@ public class Mp5ItemRenderer extends CustomGunRenderer<Mp5Item> {
case 2 ->
AnimationHelper.handleZoomCrossHair(currentBuffer, renderType, name, stack, bone, buffer, 0, 0.52, 14, 1.4f, 255, 0, 0, 255, "acog", true);
}
} else {
ItemModelHelper.hideAllAttachments(bone, name);
if (name.equals("yugu")) {
bone.setHidden(true);
}
}
if (renderingArms) {
@ -81,4 +73,9 @@ public class Mp5ItemRenderer extends CustomGunRenderer<Mp5Item> {
super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color);
}
@Override
public Set<String> getHiddenBonesInOtherPerspective() {
return Set.of("yugu");
}
}