优化渲染相关代码

This commit is contained in:
17146 2024-10-21 02:18:48 +08:00
parent e436675cea
commit 2cea1f38b5
3 changed files with 50 additions and 33 deletions

View file

@ -5,6 +5,7 @@ import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.rifle.AK12Item; import net.mcreator.superbwarfare.item.gun.rifle.AK12Item;
import net.mcreator.superbwarfare.tools.AnimUtils; import net.mcreator.superbwarfare.tools.AnimUtils;
import net.mcreator.superbwarfare.tools.GunsTool;
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.util.Mth;
@ -18,24 +19,24 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
@Override @Override
public ResourceLocation getAnimationResource(AK12Item animatable) { public ResourceLocation getAnimationResource(AK12Item animatable) {
return new ResourceLocation(ModUtils.MODID, "animations/ak12.animation.json"); return ModUtils.loc("animations/ak12.animation.json");
} }
@Override @Override
public ResourceLocation getModelResource(AK12Item animatable) { public ResourceLocation getModelResource(AK12Item animatable) {
return new ResourceLocation(ModUtils.MODID, "geo/ak12.geo.json"); return ModUtils.loc("geo/ak12.geo.json");
} }
@Override @Override
public ResourceLocation getTextureResource(AK12Item animatable) { public ResourceLocation getTextureResource(AK12Item animatable) {
return new ResourceLocation(ModUtils.MODID, "textures/item/ak12.png"); return ModUtils.loc("textures/item/ak12.png");
} }
@Override @Override
public void setCustomAnimations(AK12Item animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(AK12Item animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("bone"); CoreGeoBone gun = getAnimationProcessor().getBone("bone");
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); CoreGeoBone shen = getAnimationProcessor().getBone("shen");
CoreGeoBone Scope1 = getAnimationProcessor().getBone("Scope1"); CoreGeoBone scope1 = getAnimationProcessor().getBone("Scope1");
CoreGeoBone shuan = getAnimationProcessor().getBone("shuan"); CoreGeoBone shuan = getAnimationProcessor().getBone("shuan");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
@ -60,30 +61,25 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
double fp = ClientEventHandler.firePos; double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
int type = stack.getOrCreateTag().getInt("scope_type"); int type = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.SCOPE);
float posY = 0; float posY = switch (type) {
float scaleZ = 0; case 0, 2, 3 -> 0.781f;
case 1 -> 0.351f;
default -> 0f;
};
float scaleZ = switch (type) {
case 0, 2, 3 -> 0.55f;
case 1 -> 0.4f;
default -> 0f;
};
gun.setPosX(1.97f * (float) zp); gun.setPosX(1.97f * (float) zp);
if (type == 0) {
posY = 0.781f;
scaleZ = 0.55f;
} else if (type == 1) {
posY = 0.351f;
scaleZ = 0.4f;
} else if (type == 2) {
posY = 0.781f;
scaleZ = 0.55f;
} else if (type == 3) {
posY = 0.781f;
scaleZ = 0.55f;
}
gun.setPosY(posY * (float) zp - (float) (0.2f * zpz)); gun.setPosY(posY * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(2.8f * (float) zp + (float) (0.5f * zpz)); gun.setPosZ(2.8f * (float) zp + (float) (0.5f * zpz));
gun.setScaleZ(1f - (scaleZ * (float) zp)); gun.setScaleZ(1f - (scaleZ * (float) zp));
Scope1.setScaleZ(1f - (0.4f * (float) zp)); scope1.setScaleZ(1f - (0.4f * (float) zp));
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8));

View file

@ -7,6 +7,7 @@ import net.mcreator.superbwarfare.client.layer.AK12Layer;
import net.mcreator.superbwarfare.client.model.item.AK12ItemModel; import net.mcreator.superbwarfare.client.model.item.AK12ItemModel;
import net.mcreator.superbwarfare.item.gun.rifle.AK12Item; import net.mcreator.superbwarfare.item.gun.rifle.AK12Item;
import net.mcreator.superbwarfare.tools.AnimUtils; import net.mcreator.superbwarfare.tools.AnimUtils;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel; import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.player.AbstractClientPlayer;
@ -79,22 +80,21 @@ public class AK12ItemRenderer extends GeoItemRenderer<AK12Item> {
bone.setHidden(this.hiddenBones.contains(name)); bone.setHidden(this.hiddenBones.contains(name));
} }
Player player_ = Minecraft.getInstance().player; Player player = mc.player;
if (player_ != null) { if (player != null) {
ItemStack itemStack = player_.getMainHandItem(); ItemStack itemStack = player.getMainHandItem();
if (name.equals("holo")) { if (name.equals("holo")) {
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
|| GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS
|| itemStack.getOrCreateTag().getInt("scope_type") != 1); || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) != 1);
} }
if (name.equals("flare")) { if (name.equals("flare")) {
if (itemStack.getOrCreateTag().getInt("barrel_type") == 1) { if (GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.BARREL) == 1) {
bone.setPosZ(2.25f); bone.setPosZ(2.25f);
} }
if (itemStack.getOrCreateTag().getDouble("flash_time") == 0 || itemStack.getOrCreateTag().getInt("barrel_type") == 2) { if (itemStack.getOrCreateTag().getDouble("flash_time") == 0 || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.BARREL) == 2) {
bone.setHidden(true); bone.setHidden(true);
} else { } else {
bone.setHidden(false); bone.setHidden(false);
@ -107,15 +107,14 @@ public class AK12ItemRenderer extends GeoItemRenderer<AK12Item> {
ItemModelHelper.handleGunAttachments(bone, itemStack, name); ItemModelHelper.handleGunAttachments(bone, itemStack, name);
} }
if (this.transformType.firstPerson() && renderingArms) { if (this.transformType.firstPerson() && renderingArms) {
AbstractClientPlayer player = mc.player; AbstractClientPlayer localPlayer = mc.player;
if (player == null) { if (localPlayer == null) {
return; return;
} }
PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(player); PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(localPlayer);
PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel(); PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel();
stack.pushPose(); stack.pushPose();
RenderUtils.translateMatrixToBone(stack, bone); RenderUtils.translateMatrixToBone(stack, bone);
@ -123,7 +122,7 @@ public class AK12ItemRenderer extends GeoItemRenderer<AK12Item> {
RenderUtils.rotateMatrixAroundBone(stack, bone); RenderUtils.rotateMatrixAroundBone(stack, bone);
RenderUtils.scaleMatrixForBone(stack, bone); RenderUtils.scaleMatrixForBone(stack, bone);
RenderUtils.translateAwayFromPivotPoint(stack, bone); RenderUtils.translateAwayFromPivotPoint(stack, bone);
ResourceLocation loc = player.getSkinTextureLocation(); ResourceLocation loc = localPlayer.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")) {

View file

@ -122,4 +122,26 @@ public class GunsTool {
tag.putBoolean("is_empty_reloading", false); tag.putBoolean("is_empty_reloading", false);
} }
public static int getAttachmentType(ItemStack stack, AttachmentType type) {
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
return tag.getInt(type.getName());
}
public enum AttachmentType {
SCOPE("Scope"),
MAGAZINE("Magazine"),
BARREL("Barrel"),
STOCK("Stock");
private final String name;
AttachmentType(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
} }