修复M4的火焰,手臂动画

This commit is contained in:
Atsuihsio 2024-08-16 02:23:14 +08:00
parent 2ac0b4eeb3
commit 0b214c8f13
4 changed files with 62 additions and 96 deletions

View file

@ -39,11 +39,8 @@ public class M4ItemModel extends GeoModel<M4Item> {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
double p = 0; double p = player.getPersistentData().getDouble("zoom_pos");
p = player.getPersistentData().getDouble("zoom_pos"); double zp = player.getPersistentData().getDouble("zoom_pos_z");
double zp = 0;
zp = player.getPersistentData().getDouble("zoom_pos_z");
gun.setPosX(2.935f * (float) p); gun.setPosX(2.935f * (float) p);
@ -71,16 +68,16 @@ public class M4ItemModel extends GeoModel<M4Item> {
} }
shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp)); shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp));
CoreGeoBone flare = getAnimationProcessor().getBone("flare"); // CoreGeoBone flare = getAnimationProcessor().getBone("flare");
if (stack.getOrCreateTag().getDouble("flash_time") > 0) { // if (stack.getOrCreateTag().getDouble("flash_time") > 0) {
flare.setHidden(false); // flare.setHidden(false);
flare.setScaleX((float) (0.55 + 0.5 * (Math.random() - 0.5))); // flare.setScaleX((float) (0.55 + 0.5 * (Math.random() - 0.5)));
flare.setScaleY((float) (0.55 + 0.5 * (Math.random() - 0.5))); // flare.setScaleY((float) (0.55 + 0.5 * (Math.random() - 0.5)));
flare.setRotZ((float) (0.5 * (Math.random() - 0.5))); // flare.setRotZ((float) (0.5 * (Math.random() - 0.5)));
} else { // } else {
flare.setHidden(true); // flare.setHidden(true);
} // }
CoreGeoBone root = getAnimationProcessor().getBone("root"); CoreGeoBone root = getAnimationProcessor().getBone("root");

View file

@ -14,6 +14,7 @@ import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.player.PlayerRenderer; import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
@ -36,18 +37,19 @@ public class M4ItemRenderer extends GeoItemRenderer<M4Item> {
} }
private static final float SCALE_RECIPROCAL = 1.0f / 16.0f; private static final float SCALE_RECIPROCAL = 1.0f / 16.0f;
protected boolean renderArms = false;
protected MultiBufferSource currentBuffer; protected MultiBufferSource currentBuffer;
protected RenderType renderType; protected RenderType renderType;
public ItemDisplayContext transformType; public ItemDisplayContext transformType;
protected M4Item animatable; protected M4Item animatable;
private final Set<String> hiddenBones = new HashSet<>(); private final Set<String> hiddenBones = new HashSet<>();
private final Set<String> suppressedBones = new HashSet<>();
@Override @Override
public void renderByItem(ItemStack stack, ItemDisplayContext transformType, PoseStack matrixStack, MultiBufferSource bufferIn, int combinedLightIn, int p_239207_6_) { public void renderByItem(ItemStack stack, ItemDisplayContext transformType, PoseStack matrixStack, MultiBufferSource bufferIn, int combinedLightIn, int p_239207_6_) {
this.transformType = transformType; this.transformType = transformType;
if (this.animatable != null) { if (this.animatable != null)
this.animatable.getTransformType(transformType); this.animatable.getTransformType(transformType);
}
super.renderByItem(stack, transformType, matrixStack, bufferIn, combinedLightIn, p_239207_6_); super.renderByItem(stack, transformType, matrixStack, bufferIn, combinedLightIn, p_239207_6_);
} }
@ -58,6 +60,9 @@ public class M4ItemRenderer extends GeoItemRenderer<M4Item> {
this.renderType = type; this.renderType = type;
this.animatable = animatable; this.animatable = animatable;
super.actuallyRender(matrixStackIn, animatable, model, type, renderTypeBuffer, vertexBuilder, isRenderer, partialTicks, packedLightIn, packedOverlayIn, red, green, blue, alpha); super.actuallyRender(matrixStackIn, animatable, model, type, renderTypeBuffer, vertexBuilder, isRenderer, partialTicks, packedLightIn, packedOverlayIn, red, green, blue, alpha);
if (this.renderArms) {
this.renderArms = false;
}
} }
@Override @Override
@ -73,17 +78,26 @@ public class M4ItemRenderer extends GeoItemRenderer<M4Item> {
bone.setHidden(this.hiddenBones.contains(name)); bone.setHidden(this.hiddenBones.contains(name));
} }
if (this.transformType.firstPerson() && renderingArms) { if (name.equals("flare")) {
AbstractClientPlayer player = mc.player; Player player = Minecraft.getInstance().player;
ItemStack pstack = null;
if (player == null) { if (player != null) {
return; pstack = player.getMainHandItem();
}
if (pstack != null && pstack.getOrCreateTag().getDouble("flash_time") > 0) {
bone.setHidden(false);
bone.setScaleX((float) (0.55 + 0.5 * (Math.random() - 0.5)));
bone.setScaleY((float) (0.55 + 0.5 * (Math.random() - 0.5)));
bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
} else {
bone.setHidden(true);
}
} }
float armsAlpha = player.isInvisible() ? 0.15f : 1.0f; if (this.transformType.firstPerson() && renderingArms) {
AbstractClientPlayer player = mc.player;
PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(player); PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(player);
PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel(); PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel();
stack.pushPose(); stack.pushPose();
RenderUtils.translateMatrixToBone(stack, bone); RenderUtils.translateMatrixToBone(stack, bone);
RenderUtils.translateToPivotPoint(stack, bone); RenderUtils.translateToPivotPoint(stack, bone);
@ -93,17 +107,15 @@ public class M4ItemRenderer extends GeoItemRenderer<M4Item> {
ResourceLocation loc = player.getSkinTextureLocation(); ResourceLocation loc = player.getSkinTextureLocation();
VertexConsumer armBuilder = this.currentBuffer.getBuffer(RenderType.entitySolid(loc)); VertexConsumer armBuilder = this.currentBuffer.getBuffer(RenderType.entitySolid(loc));
VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc)); VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc));
if (name.equals("Lefthand")) { if (name.equals("Lefthand")) {
stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f); stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
AnimUtils.renderPartOverBone(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, armsAlpha); AnimUtils.renderPartOverBone(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
AnimUtils.renderPartOverBone(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, armsAlpha); AnimUtils.renderPartOverBone(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
} else { } else if (name.equals("Righthand")) {
stack.translate(SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f); stack.translate(1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
AnimUtils.renderPartOverBone(model.rightArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, armsAlpha); AnimUtils.renderPartOverBone(model.rightArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
AnimUtils.renderPartOverBone(model.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, armsAlpha); AnimUtils.renderPartOverBone(model.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
} }
this.currentBuffer.getBuffer(this.renderType); this.currentBuffer.getBuffer(this.renderType);
stack.popPose(); stack.popPose();
} }

View file

@ -260,14 +260,6 @@
} }
} }
}, },
"Righthand": {
"rotation": {
"vector": [-2.03554, 4.28304, 3.39493]
},
"position": {
"vector": [0.30134, -0.35141, 1.25128]
}
},
"Lefthand": { "Lefthand": {
"rotation": { "rotation": {
"vector": [-1.41476, -16.33468, -1.66483] "vector": [-1.41476, -16.33468, -1.66483]
@ -567,44 +559,26 @@
"0.625": { "0.625": {
"vector": [0, 1.5, 1] "vector": [0, 1.5, 1]
}, },
"0.9167": { "1.9167": {
"vector": [0, 1.5, 1] "vector": [0, 1.5, 1]
}, },
"1.0": {
"vector": [-1.80149, -4.34261, -11.56806]
},
"1.9167": {
"vector": [-1.80149, -4.34261, -11.56806]
},
"2.0417": { "2.0417": {
"vector": [8.98588, -28.60432, 4.50464] "vector": [-1.45517, 21.15308, 5.24726]
}, },
"2.1667": { "2.1667": {
"vector": [-22.62507, -32.8034, 18.28494] "vector": [11.44498, 46.40486, 9.26982]
}, },
"2.2083": { "2.25": {
"vector": [-22.62507, -32.8034, 18.28494] "vector": [7.25998, 14.54051, 4.65923],
},
"2.2917": {
"vector": [-15.46722, -16.63005, 1.48245],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"2.375": { "2.3333": {
"vector": [-15.46722, -16.63005, 1.48245], "vector": [7.25998, 14.54051, 4.65923]
"easing": "easeInElastic"
}, },
"2.4583": { "2.4583": {
"vector": [-15.14496, -21.26229, 5.31052], "vector": [-1.35683, 22.31471, 2.47949]
"easing": "easeOutSine"
}, },
"2.5417": { "2.7083": {
"vector": [3.06668, -17.33275, 4.18047],
"easing": "easeInOutSine"
},
"2.6667": {
"vector": [-8.03996, -14.46909, -5.02907]
},
"2.75": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
@ -624,14 +598,8 @@
"0.625": { "0.625": {
"vector": [0, -4, 5] "vector": [0, -4, 5]
}, },
"0.9167": {
"vector": [0, -4, 5]
},
"1.0": {
"vector": [-0.3, -3.7, 5.6]
},
"1.9167": { "1.9167": {
"vector": [-0.3, -3.7, 5.6] "vector": [0, -4, 5]
}, },
"2.1667": { "2.1667": {
"vector": [-1, -2, 7] "vector": [-1, -2, 7]
@ -655,10 +623,7 @@
"vector": [0.29, -0.14, 6.76], "vector": [0.29, -0.14, 6.76],
"easing": "easeInOutSine" "easing": "easeInOutSine"
}, },
"2.6667": { "2.7083": {
"vector": [0.14, -2.57, 2.38]
},
"2.75": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
@ -962,14 +927,8 @@
"0.625": { "0.625": {
"vector": [0, 1.5, 1] "vector": [0, 1.5, 1]
}, },
"0.9167": {
"vector": [0, 1.5, 1]
},
"1.0": {
"vector": [-1.80149, -4.34261, -11.56806]
},
"1.9167": { "1.9167": {
"vector": [-1.80149, -4.34261, -11.56806] "vector": [0, 1.5, 1]
}, },
"2.0417": { "2.0417": {
"vector": [-3.81928, -8.59364, -9.17363] "vector": [-3.81928, -8.59364, -9.17363]
@ -995,14 +954,8 @@
"0.625": { "0.625": {
"vector": [0, -4, 5] "vector": [0, -4, 5]
}, },
"0.9167": {
"vector": [0, -4, 5]
},
"1.0": {
"vector": [-0.3, -3.7, 5.6]
},
"1.9167": { "1.9167": {
"vector": [-0.3, -3.7, 5.6] "vector": [0, -4, 5]
}, },
"2.0417": { "2.0417": {
"vector": [1.89205, -2.68839, 4.36626] "vector": [1.89205, -2.68839, 4.36626]

View file

@ -58,11 +58,13 @@
"name": "Righthand", "name": "Righthand",
"parent": "0", "parent": "0",
"pivot": [-2.8, -6.4, 10.9], "pivot": [-2.8, -6.4, 10.9],
"rotation": [70.17995, -12.39135, -1.6575], "rotation": [109.82005, 12.39135, 178.3425],
"cubes": [ "cubes": [
{ {
"origin": [-4.8, -6.4, 8.9], "origin": [-4.8, -6.4, 8.9],
"size": [4, 12, 4], "size": [4, 12, 4],
"pivot": [-2.8, -0.4, 10.9],
"rotation": [-180, 0, 180],
"uv": { "uv": {
"north": {"uv": [0, 91.5], "uv_size": [4, 12]}, "north": {"uv": [0, 91.5], "uv_size": [4, 12]},
"east": {"uv": [0, 91.5], "uv_size": [4, 12]}, "east": {"uv": [0, 91.5], "uv_size": [4, 12]},
@ -11209,12 +11211,14 @@
{ {
"name": "Lefthand", "name": "Lefthand",
"parent": "magazine", "parent": "magazine",
"pivot": [5.2, -4.7, 0], "pivot": [4.8, -4.8, 0],
"rotation": [65.81754, 23.7695, -7.98205], "rotation": [117.38836, -19.19361, 174.18449],
"cubes": [ "cubes": [
{ {
"origin": [3.2, -8.7, -2], "origin": [2.8, -4.8, -2],
"size": [4, 16, 4], "size": [4, 12, 4],
"pivot": [4.8, -0.8, 0],
"rotation": [-180, 0, 180],
"uv": { "uv": {
"north": {"uv": [0, 92], "uv_size": [4, 12]}, "north": {"uv": [0, 92], "uv_size": [4, 12]},
"east": {"uv": [0, 92], "uv_size": [4, 12]}, "east": {"uv": [0, 92], "uv_size": [4, 12]},