添加M4的手臂

This commit is contained in:
Atsuihsio 2024-08-16 00:16:13 +08:00
parent 6242af54f8
commit 213994351f
2 changed files with 133 additions and 5 deletions

View file

@ -1,12 +1,28 @@
package net.mcreator.superbwarfare.client.renderer.item; package net.mcreator.superbwarfare.client.renderer.item;
import software.bernie.geckolib.renderer.GeoItemRenderer; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.resources.ResourceLocation;
import net.mcreator.superbwarfare.item.gun.M4Item;
import net.mcreator.superbwarfare.client.layer.M4Layer; import net.mcreator.superbwarfare.client.layer.M4Layer;
import net.mcreator.superbwarfare.client.model.item.M4ItemModel; import net.mcreator.superbwarfare.client.model.item.M4ItemModel;
import net.mcreator.superbwarfare.item.gun.M4Item;
import net.mcreator.superbwarfare.tools.AnimUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.util.RenderUtils;
import java.util.HashSet;
import java.util.Set;
public class M4ItemRenderer extends GeoItemRenderer<M4Item> { public class M4ItemRenderer extends GeoItemRenderer<M4Item> {
public M4ItemRenderer() { public M4ItemRenderer() {
@ -14,6 +30,81 @@ 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

@ -0,0 +1,37 @@
{
"attributes": {
"attack_range": 2.5,
"category": "combatknife",
"attacks": [
{
"hitbox": "HORIZONTAL_PLANE",
"damage_multiplier": 1.0,
"angle": 100,
"upswing": 0.5,
"animation": "bettercombat:one_handed_slash_horizontal_right",
"swing_sound": {
"id": "bettercombat:sword_slash"
}
},
{
"hitbox": "HORIZONTAL_PLANE",
"damage_multiplier": 0.8,
"angle": 100,
"upswing": 0.5,
"animation": "bettercombat:one_handed_slash_horizontal_left",
"swing_sound": {
"id": "bettercombat:sword_slash"
}
},
{
"hitbox": "FORWARD_BOX",
"damage_multiplier": 1.2,
"upswing": 0.5,
"animation": "bettercombat:one_handed_stab",
"swing_sound": {
"id": "bettercombat:wand_swing"
}
}
]
}
}