I'm trying to make a bullet mod and it's not rendering on the screen. I followed the same pattern as other forge mob mods. I'm not getting any errors and I'm able to verify that the object gets created onscreen using in game command /execute.
Code below
Bullet Entity:
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.projectile.AbstractArrowEntity;
import net.minecraft.entity.projectile.ArrowEntity;
import net.minecraft.entity.projectile.DamagingProjectileEntity;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.IPacket;
import net.minecraft.network.play.server.SSpawnObjectPacket;
import net.minecraft.world.World;
public class BulletEntity extends Entity {
public BulletEntity(EntityType<? extends Entity> type, World worldIn) {
super(type, worldIn);
}
@Override
protected void registerData() {}
@Override
protected void readAdditional(CompoundNBT compound) {}
@Override
protected void writeAdditional(CompoundNBT compound) {}
@Override
public IPacket<?> createSpawnPacket() {
return new SSpawnObjectPacket(this);
}
}
Bullet Entity Model
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.entity.model.SegmentedModel;
import net.minecraft.client.renderer.model.ModelRenderer;
public class BulletEntityModel<T extends BulletEntity> extends EntityModel<T> {
private final ModelRenderer Body;
public BulletEntityModel() {
textureWidth = 16;
textureHeight = 16;
Body = new ModelRenderer(this);
Body.setRotationPoint(0.0F, 24.0F, 0.0F);
Body.setTextureOffset(0, 0).addBox(-0.5F, -1.0F, -0.5F, 1.0F, 1.0F, 1.0F, 0.0F, false);
}
@Override
public void setRotationAngles(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch){
//previously the render function, render code was moved to a method below
}
@Override
public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){
Body.render(matrixStack, buffer, packedLight, packedOverlay);
}
public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) {
modelRenderer.rotateAngleX = x;
modelRenderer.rotateAngleY = y;
modelRenderer.rotateAngleZ = z;
}
public ModelRenderer getBody() {
return Body;
}
}
Renderer:
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.model.Model;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.entity.projectile.ArrowEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
public class BulletEntityRender<T extends BulletEntity> extends EntityRenderer<T> {
protected static final ResourceLocation TEXTURE = new ResourceLocation(FortuneAndGlory.MODID, "textures/entity/bullet.png");
private final BulletEntityModel<BulletEntity> model = new BulletEntityModel<>();
public BulletEntityRender(EntityRendererManager rendererManagerIn) {
super(rendererManagerIn);
}
public void render(T entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) {
IVertexBuilder ivertexbuilder = net.minecraft.client.renderer.ItemRenderer.getBuffer(bufferIn, this.model.getRenderType(this.getEntityTexture(entityIn)), false, false);
model.render(matrixStackIn, ivertexbuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F,1.0F, 1.0F);
super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn);
}
@Override
public ResourceLocation getEntityTexture(BulletEntity entity) {
return TEXTURE;
}}
What am I missing?
Thanks!
In your main Entity class instead of EntityType<? extends Entity>
EntityType<? extends Entity>
it should be EntityType<? extends BulletEntity>
EntityType<? extends BulletEntity>
.
In your renderer class try using,
public class BulletEntityRender extends MobRenderer<BulletEntity, BulletEntityModel<BulletEntity>>{
protected static final ResourceLocation TEXTURE = new ResourceLocation(FortuneAndGlory.MODID, "textures/entity/bullet.png");
public BulletEntityRender(EntityRendererManager rendererManagerIn) {
super(rendererManagerIn, new BulletEntityModel<>(), //shadowsize );
}
public void render(T entityIn, float entityYaw, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int packedLightIn) {
IVertexBuilder ivertexbuilder = net.minecraft.client.renderer.ItemRenderer.getBuffer(bufferIn, this.model.getRenderType(this.getEntityTexture(entityIn)), false, false);
model.render(matrixStackIn, ivertexbuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F,1.0F, 1.0F);
super.render(entityIn, entityYaw, partialTicks, matrixStackIn, bufferIn, packedLightIn);
}
@Override
public ResourceLocation getEntityTexture(BulletEntity entity) {
return TEXTURE;
}
}
if there are any errors please fix them. If this doesn't fix the problem it might be something else.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.