动画更新(HK416,M4),减弱奔跑视角摇晃

This commit is contained in:
Atsuihsio 2024-05-24 01:40:16 +08:00
parent 943a793293
commit 48cf5f5e7c
21 changed files with 1357 additions and 889 deletions

View file

@ -4,6 +4,7 @@ import net.mcreator.target.item.gun.Hk416Item;
import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.network.TargetModVariables;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.core.animatable.model.CoreGeoBone; import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
@ -130,5 +131,13 @@ public class Hk416ItemModel extends GeoModel<Hk416Item> {
move.setRotZ(3.7f * (float) yaw + 2.7f * (float) m); move.setRotZ(3.7f * (float) yaw + 2.7f * (float) m);
move.setRotY(1.9f * (float) yaw - 1.7f * (float) m); move.setRotY(1.9f * (float) yaw - 1.7f * (float) m);
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
player.getPersistentData().putDouble("camera_rot_x", Mth.RAD_TO_DEG * camera.getRotX());
player.getPersistentData().putDouble("camera_rot_y", Mth.RAD_TO_DEG * camera.getRotY());
player.getPersistentData().putDouble("camera_rot_z", Mth.RAD_TO_DEG * camera.getRotZ());
} }
} }

View file

@ -4,6 +4,7 @@ import net.mcreator.target.item.gun.M4Item;
import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.network.TargetModVariables;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.core.animatable.model.CoreGeoBone; import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
@ -120,5 +121,13 @@ public class M4ItemModel extends GeoModel<M4Item> {
move.setRotZ(3.7f * (float) yaw + 2.7f * (float) m); move.setRotZ(3.7f * (float) yaw + 2.7f * (float) m);
move.setRotY(1.9f * (float) yaw - 1.7f * (float) m); move.setRotY(1.9f * (float) yaw - 1.7f * (float) m);
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
player.getPersistentData().putDouble("camera_rot_x", Mth.RAD_TO_DEG * camera.getRotX());
player.getPersistentData().putDouble("camera_rot_y", Mth.RAD_TO_DEG * camera.getRotY());
player.getPersistentData().putDouble("camera_rot_z", Mth.RAD_TO_DEG * camera.getRotZ());
} }
} }

View file

@ -1,29 +1,7 @@
package net.mcreator.target.client.renderer.item; package net.mcreator.target.client.renderer.item;
import software.bernie.geckolib.util.RenderUtils;
import software.bernie.geckolib.renderer.GeoItemRenderer; import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.Minecraft;
import net.mcreator.target.tools.AnimUtils;
import java.util.Set;
import java.util.HashSet;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.PoseStack;
import net.mcreator.target.item.gun.M4Item; import net.mcreator.target.item.gun.M4Item;
import net.mcreator.target.client.layer.M4Layer; import net.mcreator.target.client.layer.M4Layer;
@ -35,82 +13,6 @@ public class M4ItemRenderer extends GeoItemRenderer<M4Item> {
this.addRenderLayer(new M4Layer(this)); this.addRenderLayer(new M4Layer(this));
} }
@Override
public RenderType getRenderType(M4Item animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
private static final float SCALE_RECIPROCAL = 1.0f / 16.0f;
protected boolean renderArms = false;
protected MultiBufferSource currentBuffer;
protected RenderType renderType;
public ItemDisplayContext transformType;
protected M4Item animatable;
private final Set<String> hiddenBones = new HashSet<>();
private final Set<String> suppressedBones = new HashSet<>();
@Override
public void renderByItem(ItemStack stack, ItemDisplayContext transformType, PoseStack matrixStack, MultiBufferSource bufferIn, int combinedLightIn, int p_239207_6_) {
this.transformType = transformType;
if (this.animatable != null)
this.animatable.getTransformType(transformType);
super.renderByItem(stack, transformType, matrixStack, bufferIn, combinedLightIn, p_239207_6_);
}
@Override
public void actuallyRender(PoseStack matrixStackIn, M4Item animatable, BakedGeoModel model, RenderType type, MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, boolean isRenderer, float partialTicks, int packedLightIn,
int packedOverlayIn, float red, float green, float blue, float alpha) {
this.currentBuffer = renderTypeBuffer;
this.renderType = type;
this.animatable = animatable;
super.actuallyRender(matrixStackIn, animatable, model, type, renderTypeBuffer, vertexBuilder, isRenderer, partialTicks, packedLightIn, packedOverlayIn, red, green, blue, alpha);
if (this.renderArms) {
this.renderArms = false;
}
}
@Override
public void renderRecursively(PoseStack stack, M4Item animatable, GeoBone bone, RenderType type, MultiBufferSource buffer, VertexConsumer bufferIn, boolean isReRender, float partialTick, int packedLightIn, int packedOverlayIn, float red,
float green, float blue, float alpha) {
Minecraft mc = Minecraft.getInstance();
String name = bone.getName();
boolean renderingArms = false;
if (name.equals("Lefthand") || name.equals("Righthand")) {
bone.setHidden(true);
renderingArms = true;
} else {
bone.setHidden(this.hiddenBones.contains(name));
}
if (this.transformType.firstPerson() && renderingArms) {
AbstractClientPlayer player = mc.player;
float armsAlpha = player.isInvisible() ? 0.15f : 1.0f;
PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(player);
PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel();
stack.pushPose();
RenderUtils.translateMatrixToBone(stack, bone);
RenderUtils.translateToPivotPoint(stack, bone);
RenderUtils.rotateMatrixAroundBone(stack, bone);
RenderUtils.scaleMatrixForBone(stack, bone);
RenderUtils.translateAwayFromPivotPoint(stack, bone);
ResourceLocation loc = player.getSkinTextureLocation();
VertexConsumer armBuilder = this.currentBuffer.getBuffer(RenderType.entitySolid(loc));
VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc));
if (name.equals("Lefthand")) {
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.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, armsAlpha);
} else if (name.equals("Righthand")) {
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.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, armsAlpha);
}
this.currentBuffer.getBuffer(RenderType.entityTranslucent(getTextureLocation(this.animatable)));
stack.popPose();
}
super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, red, green, blue, alpha);
}
@Override @Override
public ResourceLocation getTextureLocation(M4Item instance) { public ResourceLocation getTextureLocation(M4Item instance) {
return super.getTextureLocation(instance); return super.getTextureLocation(instance);

View file

@ -79,9 +79,9 @@ public class ClientEventHandler {
double on_ground; double on_ground;
if (entity.onGround()) { if (entity.onGround()) {
if (entity.isSprinting()) { if (entity.isSprinting()) {
on_ground = 1.2; on_ground = 1.0;
} else { } else {
on_ground = 2.4; on_ground = 2.0;
} }
} else { } else {
on_ground = 0.001; on_ground = 0.001;

View file

@ -87,11 +87,11 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem {
} }
if (stack.getOrCreateTag().getBoolean("reloading") && stack.getOrCreateTag().getBoolean("empty_reload")) { if (stack.getOrCreateTag().getBoolean("reloading") && stack.getOrCreateTag().getBoolean("empty_reload")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_empty"));
} }
if (stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("empty_reload")) { if (stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("empty_reload")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload2")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_normal"));
} }
if (stack.getOrCreateTag().getInt("fire_mode") == 0 && stack.getOrCreateTag().getDouble("cg") > 0) { if (stack.getOrCreateTag().getInt("fire_mode") == 0 && stack.getOrCreateTag().getDouble("cg") > 0) {
@ -180,7 +180,7 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem {
tag.putDouble("reload_time", 0); tag.putDouble("reload_time", 0);
} }
if (tag.getBoolean("reloading") && tag.getInt("ammo") == 0) { if (tag.getBoolean("reloading") && tag.getInt("ammo") == 0) {
if (tag.getDouble("reload_time") == 55) { if (tag.getDouble("reload_time") == 61) {
entity.getPersistentData().putDouble("id", id); entity.getPersistentData().putDouble("id", id);
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.HK_416_RELOAD_EMPTY.get(), 100, 1); SoundTool.playLocalSound(serverPlayer, TargetModSounds.HK_416_RELOAD_EMPTY.get(), 100, 1);
@ -200,7 +200,7 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem {
GunReload.reload(entity, GunInfo.Type.RIFLE); GunReload.reload(entity, GunInfo.Type.RIFLE);
} }
} else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { } else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) {
if (tag.getDouble("reload_time") == 41) { if (tag.getDouble("reload_time") == 53) {
entity.getPersistentData().putDouble("id", id); entity.getPersistentData().putDouble("id", id);
{ {
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {

View file

@ -87,11 +87,11 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
} }
if (stack.getOrCreateTag().getBoolean("reloading") && stack.getOrCreateTag().getBoolean("empty_reload")) { if (stack.getOrCreateTag().getBoolean("reloading") && stack.getOrCreateTag().getBoolean("empty_reload")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_empty"));
} }
if (stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("empty_reload")) { if (stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("empty_reload")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload2")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.reload_normal"));
} }
if (stack.getOrCreateTag().getInt("fire_mode") == 0 && stack.getOrCreateTag().getDouble("cg") > 0) { if (stack.getOrCreateTag().getInt("fire_mode") == 0 && stack.getOrCreateTag().getDouble("cg") > 0) {
@ -179,7 +179,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
tag.putDouble("reload_time", 0); tag.putDouble("reload_time", 0);
} }
if (tag.getBoolean("reloading") && tag.getInt("ammo") == 0) { if (tag.getBoolean("reloading") && tag.getInt("ammo") == 0) {
if (tag.getDouble("reload_time") == 55) { if (tag.getDouble("reload_time") == 61) {
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.M_4_RELOAD_EMPTY.get(), 100, 1); SoundTool.playLocalSound(serverPlayer, TargetModSounds.M_4_RELOAD_EMPTY.get(), 100, 1);
} }
@ -199,7 +199,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
GunReload.reload(entity, GunInfo.Type.RIFLE); GunReload.reload(entity, GunInfo.Type.RIFLE);
} }
} else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { } else if (tag.getBoolean("reloading") && tag.getInt("ammo") > 0) {
if (tag.getDouble("reload_time") == 41) { if (tag.getDouble("reload_time") == 53) {
if (entity instanceof ServerPlayer serverPlayer) { if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, TargetModSounds.M_4_RELOAD_NORMAL.get(), 100, 1); SoundTool.playLocalSound(serverPlayer, TargetModSounds.M_4_RELOAD_NORMAL.get(), 100, 1);
} }

View file

@ -196,12 +196,12 @@ public class PlayerReloadProcedure {
tag.putBoolean("reloading", true); tag.putBoolean("reloading", true);
tag.putBoolean("empty_reload", false); tag.putBoolean("empty_reload", false);
tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810)));
tag.putDouble("reload_time", 41); tag.putDouble("reload_time", 53);
} else if (tag.getInt("ammo") == 0) { } else if (tag.getInt("ammo") == 0) {
tag.putBoolean("reloading", true); tag.putBoolean("reloading", true);
tag.putDouble("empty_reload", 1); tag.putDouble("empty_reload", 1);
tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810))); tag.putDouble("id", (Mth.nextDouble(RandomSource.create(), 1, 1919810)));
tag.putDouble("reload_time", 55); tag.putDouble("reload_time", 61);
} }
} }
if (player.getMainHandItem().getItem() == TargetModItems.AA_12.get() if (player.getMainHandItem().getItem() == TargetModItems.AA_12.get()

View file

@ -263,19 +263,19 @@
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
}, },
"0.2": { "0.2": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.4": { "0.4": {
"vector": [-0.5, 0.5, 0.5] "vector": [-0.3, 0.3, 0.3]
}, },
"0.6": { "0.6": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.8": { "0.8": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
} }
} }
} }

File diff suppressed because it is too large Load diff

View file

@ -112,19 +112,19 @@
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
}, },
"0.2": { "0.2": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.4": { "0.4": {
"vector": [-0.5, 0.5, 0.5] "vector": [-0.3, 0.3, 0.3]
}, },
"0.6": { "0.6": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.8": { "0.8": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
} }
} }
} }

View file

@ -138,19 +138,19 @@
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
}, },
"0.2": { "0.2": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.4": { "0.4": {
"vector": [-0.5, 0.5, 0.5] "vector": [-0.3, 0.3, 0.3]
}, },
"0.6": { "0.6": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.8": { "0.8": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
} }
} }
} }

View file

@ -259,19 +259,19 @@
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
}, },
"0.2": { "0.2": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.4": { "0.4": {
"vector": [-0.5, 0.5, 0.5] "vector": [-0.3, 0.3, 0.3]
}, },
"0.6": { "0.6": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.8": { "0.8": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
} }
} }
} }

View file

@ -104,19 +104,19 @@
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
}, },
"0.2": { "0.2": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.4": { "0.4": {
"vector": [-0.5, 0.5, 0.5] "vector": [-0.3, 0.3, 0.3]
}, },
"0.6": { "0.6": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.8": { "0.8": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
} }
} }
} }

View file

@ -110,19 +110,19 @@
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
}, },
"0.2": { "0.2": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.4": { "0.4": {
"vector": [-0.5, 0.5, 0.5] "vector": [-0.3, 0.3, 0.3]
}, },
"0.6": { "0.6": {
"vector": [0.5, 0, -0.5] "vector": [0.3, 0, -0.3]
}, },
"0.8": { "0.8": {
"vector": [-0.5, -0.5, 0.5] "vector": [-0.3, -0.3, 0.3]
} }
} }
} }

View file

@ -9517,6 +9517,10 @@
} }
} }
] ]
},
{
"name": "camera",
"pivot": [3.17141, 5.16276, 9.77702]
} }
] ]
} }

View file

@ -10973,6 +10973,8 @@
{ {
"origin": [-0.11171, 2.19333, -22.59329], "origin": [-0.11171, 2.19333, -22.59329],
"size": [0.21733, 0.12256, 1.49725], "size": [0.21733, 0.12256, 1.49725],
"pivot": [-0.00305, 1.76437, -18.31002],
"rotation": [0, 0, 0],
"uv": { "uv": {
"north": {"uv": [79, 27], "uv_size": [0.25, 0.25]}, "north": {"uv": [79, 27], "uv_size": [0.25, 0.25]},
"east": {"uv": [63, 19], "uv_size": [1.5, 0.25]}, "east": {"uv": [63, 19], "uv_size": [1.5, 0.25]},
@ -11894,6 +11896,10 @@
} }
} }
] ]
},
{
"name": "camera",
"pivot": [3.17141, 5.16276, 9.77702]
} }
] ]
} }