improve wielding concept

This commit is contained in:
Sen 2025-07-17 23:55:47 +02:00
parent 3a9ec2ab32
commit c396475ebd
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
95 changed files with 521 additions and 527 deletions

View file

@ -21,7 +21,7 @@ import common.item.Item;
import common.item.ItemAction;
import common.item.ItemStack;
import common.model.BlockLayer;
import common.model.Transforms;
import common.model.Transform;
import common.util.BlockPos;
import common.util.ExtMath;
import common.util.Vec3;
@ -99,34 +99,32 @@ public class ItemRenderer
this.itemRenderer = gmIn.getRenderItem();
}
public void renderItem(EntityLiving entityIn, ItemStack heldStack, Transforms.Camera transform)
public void renderItem(EntityLiving entityIn, ItemStack heldStack, boolean third)
{
if (heldStack != null)
{
Item item = heldStack.getItem();
if(item.isFirstPerson() || transform != Transforms.Camera.FIRST_PERSON) {
Block block = item.getBlock();
GL11.glPushMatrix();
if (this.itemRenderer.shouldRenderItemIn3D(heldStack))
{
GL11.glScalef(2.0F, 2.0F, 2.0F);
if (this.isBlockTranslucent(block))
{
GlState.depthMask(false);
}
}
this.itemRenderer.renderItemModelForEntity(heldStack, entityIn, transform);
if (this.isBlockTranslucent(block))
{
GlState.depthMask(true);
}
GL11.glPopMatrix();
Block block = item.getBlock();
GL11.glPushMatrix();
if (this.itemRenderer.shouldRenderItemIn3D(heldStack))
{
GL11.glScalef(2.0F, 2.0F, 2.0F);
if (this.isBlockTranslucent(block))
{
GlState.depthMask(false);
}
}
this.itemRenderer.renderItemForEntity(heldStack, entityIn, third);
if (this.isBlockTranslucent(block))
{
GlState.depthMask(true);
}
GL11.glPopMatrix();
}
}
@ -362,7 +360,7 @@ public class ItemRenderer
GlState.enableRescaleNormal();
GL11.glPushMatrix();
if (this.itemToRender != null)
if (this.itemToRender != null && (this.itemToRender.getItem().getWieldType() != null || (clientplayer.getItemInUseCount() > 0 && this.itemToRender.getItemUseAction() != ItemAction.NONE)))
{
if (clientplayer.getItemInUseCount() > 0)
{
@ -396,9 +394,9 @@ public class ItemRenderer
this.transformFirstPersonItem(f, f1);
}
this.renderItem(clientplayer, this.itemToRender, Transforms.Camera.FIRST_PERSON);
this.renderItem(clientplayer, this.itemToRender, false);
}
else
else if(this.itemToRender == null || this.itemToRender.getItem().canRenderHand())
{
this.renderPlayerArm(clientplayer, f, f1);
}

View file

@ -5,10 +5,10 @@ import java.util.List;
import client.renderer.texture.TextureAtlasSprite;
import common.collect.Lists;
import common.model.Transforms;
import common.model.Transform;
import common.util.Facing;
public record BakedModel(List<BakedQuad> getQuads, List<List<BakedQuad>> getFace, boolean isGui3d, TextureAtlasSprite getBaseTexture, Transforms getTransforms) implements IBakedModel {
public record BakedModel(List<BakedQuad> getQuads, List<List<BakedQuad>> getFace, boolean isGui3d, TextureAtlasSprite getBaseTexture, Transform getTransforms) implements IBakedModel {
public List<BakedQuad> getFace(Facing face) {
return this.getFace.get(face.ordinal());
}
@ -22,7 +22,7 @@ public record BakedModel(List<BakedQuad> getQuads, List<List<BakedQuad>> getFace
private final List<List<BakedQuad>> faces;
private TextureAtlasSprite texture;
private boolean gui3d;
private Transforms transforms;
private Transform transforms;
public Builder(ModelBlock model) {
this(model.isGui3d(), model.getTransform());
@ -51,7 +51,7 @@ public record BakedModel(List<BakedQuad> getQuads, List<List<BakedQuad>> getFace
}
}
private Builder(boolean gui3d, Transforms transforms) {
private Builder(boolean gui3d, Transform transforms) {
this.quads = Lists.<BakedQuad>newArrayList();
this.faces = new ArrayList<List<BakedQuad>>(6);

View file

@ -3,10 +3,10 @@ package client.renderer.blockmodel;
import java.util.List;
import client.renderer.texture.TextureAtlasSprite;
import common.model.Transforms;
import common.model.Transform;
import common.util.Facing;
public record BuiltInModel(Transforms getTransforms) implements IBakedModel {
public record BuiltInModel(Transform getTransforms) implements IBakedModel {
public List<BakedQuad> getFace(Facing face) {
return null;
}

View file

@ -3,7 +3,7 @@ package client.renderer.blockmodel;
import java.util.List;
import client.renderer.texture.TextureAtlasSprite;
import common.model.Transforms;
import common.model.Transform;
import common.util.Facing;
public interface IBakedModel
@ -18,5 +18,5 @@ public interface IBakedModel
TextureAtlasSprite getBaseTexture();
Transforms getTransforms();
Transform getTransforms();
}

View file

@ -8,7 +8,7 @@ import common.collect.Maps;
import common.model.Model;
import common.model.ModelProvider;
import common.model.ModelRotation;
import common.model.Transforms;
import common.model.Transform;
import common.util.Facing;
import common.util.Vector3f;
@ -18,11 +18,11 @@ public class ModelBlock extends Model {
return new ModelBlock(primary);
}
public Model getModel(Transforms transform, String... layers) {
public Model getModel(Transform transform, String... layers) {
return new ModelBlock(transform, layers);
}
public Model getModel(Model parent, Transforms transform) {
public Model getModel(Model parent, Transform transform) {
return new ModelBlock((ModelBlock)parent, transform);
}
@ -39,7 +39,7 @@ public class ModelBlock extends Model {
private ModelRotation rotation;
private boolean uvLock;
private Transforms transform;
private Transform transform;
private BlockPart lastPart;
private BlockPartFace[] last;
@ -118,29 +118,29 @@ public class ModelBlock extends Model {
public ModelBlock(String primary) {
this(null, Lists.newArrayList(), primary != null && primary.indexOf('/') == -1 ? "blocks/" + primary : primary, true, true, Transforms.DEFAULT, null);
this(null, Lists.newArrayList(), primary != null && primary.indexOf('/') == -1 ? "blocks/" + primary : primary, true, true, Transform.IDENTITY, null);
}
public ModelBlock(Transforms transform, String ... layers) {
public ModelBlock(Transform transform, String ... layers) {
this(ModelBakery.MODEL_GENERATED, ModelBakery.MODEL_GENERATED.elements,
layers[0].indexOf('/') == -1 ? "items/" + layers[0] : layers[0], false, false, transform, layers);
}
public ModelBlock(ModelBlock parent, Transforms transform) {
public ModelBlock(ModelBlock parent, Transform transform) {
this(parent, Lists.newArrayList(), parent.getPrimary(), false, true, transform, null);
}
public ModelBlock(String primary, Transforms transform, String ... layers) {
public ModelBlock(String primary, Transform transform, String ... layers) {
this(ModelBakery.MODEL_GENERATED, ModelBakery.MODEL_GENERATED.elements,
primary.indexOf('/') == -1 ? "items/" + primary : primary, false, false, transform, layers);
}
public ModelBlock(String primary, List<BlockPart> elements, Transforms transform, String ... layers) {
public ModelBlock(String primary, List<BlockPart> elements, Transform transform, String ... layers) {
this(null, elements, primary, false, false, transform, layers);
}
private ModelBlock(ModelBlock parent, List<BlockPart> elements, String primary, boolean occlude, boolean gui3d,
Transforms transform, String[] layers) {
Transform transform, String[] layers) {
for(int z = 0; layers != null && z < layers.length; z++) {
layers[z] = layers[z].indexOf('/') == -1 ? "items/" + layers[z] : layers[z];
}
@ -178,7 +178,7 @@ public class ModelBlock extends Model {
return this.parent;
}
public Transforms getTransform() {
public Transform getTransform() {
return this.transform;
}

View file

@ -6,7 +6,6 @@ import client.Client;
import client.renderer.model.ModelDie;
import client.renderer.texture.TextureMap;
import common.entity.projectile.EntityDie;
import common.model.Transforms.Camera;
public class RenderDie extends Render<EntityDie>
{
@ -33,7 +32,7 @@ public class RenderDie extends Render<EntityDie>
GL11.glRotatef((float)((entity.ticksExisted % 10) * (360 / 10)), 0.3f, 0.4f, 0.1f);
// GlState.translate(-0.05F, -0.05F, 0.05F);
GL11.glScalef(0.5f, 0.5f, 0.5f);
Client.CLIENT.getRenderItem().renderItem(entity.getStack(), Camera.GROUND);
Client.CLIENT.getRenderItem().renderItemAsGround(entity.getStack());
// blockrendererdispatcher.renderBlockBrightness(Blocks.planks.getDefaultState(), entity.getBrightness(partialTicks));
GL11.glPopMatrix();
super.doRender(entity, x, y, z, partialTicks);

View file

@ -8,7 +8,6 @@ import client.renderer.texture.TextureMap;
import common.entity.item.EntityItem;
import common.item.Item;
import common.item.ItemStack;
import common.model.Transforms;
import common.rng.Random;
import common.util.ExtMath;
@ -40,8 +39,7 @@ public class RenderEntityItem extends Render<EntityItem>
int i = this.getMultiplier(itemstack);
float f = 0.25F;
float f1 = ExtMath.sin(((float)itemIn.getAge() + p_177077_8_) / 10.0F + itemIn.hoverStart) * 0.1F + 0.1F;
float f2 = p_177077_9_.getTransforms().get(Transforms.Camera.GROUND).scale();
GL11.glTranslatef((float)p_177077_2_, (float)p_177077_4_ + f1 + 0.25F * f2, (float)p_177077_6_);
GL11.glTranslatef((float)p_177077_2_, (float)p_177077_4_ + f1 + 0.25F, (float)p_177077_6_);
if (flag || this.manager.gm != null)
{
@ -126,18 +124,15 @@ public class RenderEntityItem extends Render<EntityItem>
}
GL11.glScalef(0.5F, 0.5F, 0.5F);
RenderItem.apply(ibakedmodel.getTransforms(), Transforms.Camera.GROUND);
this.itemRenderer.renderItem(itemstack, ibakedmodel);
GL11.glPopMatrix();
}
else
{
GL11.glPushMatrix();
RenderItem.apply(ibakedmodel.getTransforms(), Transforms.Camera.GROUND);
this.itemRenderer.renderItem(itemstack, ibakedmodel);
GL11.glPopMatrix();
float f3 = ibakedmodel.getTransforms().ground.scale();
GL11.glTranslatef(0.0F, 0.0F, 0.046875F * f3);
GL11.glTranslatef(0.0F, 0.0F, 0.046875F);
}
}

View file

@ -128,7 +128,7 @@ public class RenderHumanoid extends RenderNpc
modelplayer.raisedArms = npc.hasArmsRaised();
// modelplayer.sticks = npc.hasPowerRods();
if (itemstack == null)
if (itemstack == null || itemstack.getItem().getWieldType() == null)
{
modelplayer.heldItemRight = 0;
}
@ -210,6 +210,11 @@ public class RenderHumanoid extends RenderNpc
this.setModelVisibilities(entity);
modelplayer.swingProgress = 0.0F;
modelplayer.isSneak = false;
modelplayer.heldItemRight = 0;
modelplayer.heldItemLeft = 0;
modelplayer.aimedBow = false;
modelplayer.isRiding = false;
modelplayer.raisedArms = false;
modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, entity);
modelplayer.renderRightArm((float)this.arms - 12.0f);
}

View file

@ -19,8 +19,8 @@ import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.item.Item;
import common.item.ItemStack;
import common.item.WieldType;
import common.model.Transform;
import common.model.Transforms;
import common.util.Facing;
import common.util.Vec3i;
@ -185,16 +185,16 @@ public class RenderItem
}
}
public void renderItem(ItemStack stack, Transforms.Camera cameraTransformType)
public void renderItemAsGround(ItemStack stack)
{
if (stack != null)
{
IBakedModel ibakedmodel = this.mesher.getItemModel(stack);
this.renderItemModelTransform(stack, ibakedmodel, cameraTransformType);
this.renderItemModelTransform(stack, ibakedmodel, false, false);
}
}
public void renderItemModelForEntity(ItemStack stack, EntityLiving entityToRenderFor, Transforms.Camera cameraTransformType)
public void renderItemForEntity(ItemStack stack, EntityLiving entityToRenderFor, boolean third)
{
if (stack != null && entityToRenderFor != null)
{
@ -209,11 +209,11 @@ public class RenderItem
ibakedmodel = this.mesher.getModelManager().getModel("item/" + sprite);
}
this.renderItemModelTransform(stack, ibakedmodel, cameraTransformType);
this.renderItemModelTransform(stack, ibakedmodel, true, third);
}
}
protected void renderItemModelTransform(ItemStack stack, IBakedModel model, Transforms.Camera cameraTransformType)
protected void renderItemModelTransform(ItemStack stack, IBakedModel model, boolean transform, boolean third)
{
this.manager.bindTexture(TextureMap.BLOCKS);
this.preTransform(stack);
@ -222,9 +222,45 @@ public class RenderItem
GlState.enableBlend();
GlState.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
GL11.glPushMatrix();
Transforms itemcameratransforms = model.getTransforms();
RenderItem.apply(itemcameratransforms, cameraTransformType);
if(transform) {
WieldType type = stack.getItem().getWieldType();
if(type == null)
type = WieldType.DEFAULT;
if(third) {
switch(type) {
case DEFAULT:
GL11.glTranslatef(0.0f, 0.0625f, -3.0f * 0.0625f);
GL11.glRotatef(-90.0f, 1.0F, 0.0F, 0.0F);
GL11.glScalef(0.55f, 0.55f, 0.55f);
break;
case TOOL_FLIP:
GL11.glTranslatef(0.0f, 0.0f, -3.5f * 0.0625f);
GL11.glRotatef(90.0f, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(180.0f, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(-35.0f, 0.0F, 0.0F, 1.0F);
GL11.glScalef(0.85f, 0.85f, 0.85f);
break;
case TOOL:
GL11.glTranslatef(0.0f, 1.25f * 0.0625f, -3.5f * 0.0625f);
GL11.glRotatef(90.0f, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(-35.0f, 0.0F, 0.0F, 1.0F);
GL11.glScalef(0.85f, 0.85f, 0.85f);
break;
case RANGED:
GL11.glTranslatef(0.75f * 0.0625f, 0.0f, 0.25f * 0.0625f);
GL11.glRotatef(80.0f, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(5.0f, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(-45.0f, 0.0F, 0.0F, 1.0F);
break;
}
}
else {
GL11.glTranslatef(0.0f, 4.0f * 0.0625f, 2.0f * 0.0625f);
GL11.glRotatef(type == WieldType.TOOL_FLIP ? 45.0f : -135.0f, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(25.0f, 0.0F, 0.0F, 1.0F);
GL11.glScalef(1.7f, 1.7f, 1.7f);
}
}
this.renderItem(stack, model);
GlState.cullFace(GL11.GL_BACK);
GL11.glPopMatrix();
@ -245,8 +281,20 @@ public class RenderItem
GlState.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlState.color(1.0F, 1.0F, 1.0F, 1.0F);
this.setupGuiTransform(x, y, ibakedmodel.isGui3d());
RenderItem.apply(ibakedmodel.getTransforms(), Transforms.Camera.GUI);
Transform vec = ibakedmodel.getTransforms();
if(vec != Transform.IDENTITY) {
GL11.glTranslatef(vec.translationX(), vec.translationY(), vec.translationZ());
GL11.glRotatef(vec.rotationY(), 0.0F, 1.0F, 0.0F);
GL11.glRotatef(vec.rotationX(), 1.0F, 0.0F, 0.0F);
GL11.glRotatef(vec.rotationZ(), 0.0F, 0.0F, 1.0F);
GL11.glScalef(vec.scale(), vec.scale(), vec.scale());
}
boolean cull = GlState.isCullEnabled();
if(!cull)
GlState.enableCull();
this.renderItem(stack, ibakedmodel);
if(!cull)
GlState.disableCull();
GlState.disableAlpha();
GlState.disableRescaleNormal();
GlState.disableLighting();
@ -292,15 +340,4 @@ public class RenderItem
{
this.mesher.rebuildCache();
}
public static void apply(Transforms trans, Transforms.Camera type) {
Transform vec = trans.get(type);
if(vec != Transform.IDENTITY) {
GL11.glTranslatef(vec.translationX(), vec.translationY(), vec.translationZ());
GL11.glRotatef(vec.rotationY(), 0.0F, 1.0F, 0.0F);
GL11.glRotatef(vec.rotationX(), 1.0F, 0.0F, 0.0F);
GL11.glRotatef(vec.rotationZ(), 0.0F, 0.0F, 1.0F);
GL11.glScalef(vec.scale(), vec.scale(), vec.scale());
}
}
}

View file

@ -7,7 +7,7 @@ import client.renderer.texture.TextureMap;
import common.entity.Entity;
import common.item.Item;
import common.item.ItemStack;
import common.model.Transforms;
import common.model.Transform;
public class RenderItemEntity<T extends Entity> extends Render<T>
@ -31,7 +31,7 @@ public class RenderItemEntity<T extends Entity> extends Render<T>
GL11.glRotatef(-this.manager.playerViewY, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(this.manager.playerViewX, 1.0F, 0.0F, 0.0F);
this.bindTexture(TextureMap.BLOCKS);
this.itemRenderer.renderItem(this.getStack(entity), Transforms.Camera.GROUND);
this.itemRenderer.renderItemAsGround(this.getStack(entity));
GlState.disableRescaleNormal();
GL11.glPopMatrix();
super.doRender(entity, x, y, z, partialTicks);

View file

@ -47,7 +47,7 @@ public class RenderSpaceMarine extends RenderNpc
modelplayer.aimedBow = false;
modelplayer.isSneak = false;
if (itemstack == null)
if (itemstack == null || itemstack.getItem().getWieldType() == null)
{
modelplayer.heldItemRight = 0;
}

View file

@ -11,7 +11,7 @@ import common.init.Items;
import common.item.Item;
import common.item.ItemStack;
import common.item.block.ItemBlock;
import common.model.Transforms;
import common.model.Transform;
public class LayerHeldItem implements LayerRenderer<EntityLiving>
{
@ -30,7 +30,7 @@ public class LayerHeldItem implements LayerRenderer<EntityLiving>
{
ItemStack itemstack = entitylivingbaseIn.getHeldItem();
if (itemstack != null)
if (itemstack != null && itemstack.getItem().getWieldType() != null)
{
GL11.glPushMatrix();
@ -69,7 +69,7 @@ public class LayerHeldItem implements LayerRenderer<EntityLiving>
GL11.glTranslatef(0.0F, 0.203125F, 0.0F);
}
gm.getItemRenderer().renderItem(entitylivingbaseIn, itemstack, Transforms.Camera.THIRD_PERSON);
gm.getItemRenderer().renderItem(entitylivingbaseIn, itemstack, true);
GL11.glPopMatrix();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

After

Width:  |  Height:  |  Size: 4.6 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB