Status
Fixed
Issue description
Issue: Created a custom mob model in Qubble, exported it as a .JAVA file, imported it into MCreator. Spawned a mob: mob was invisible, but a shadow appeared. Upon attacking the shadow, the mob appears briefly during the damage animation, then disappears again.
I've included the code for the mob entity in the blockquote below.
package net.mcreator.testtest;
import org.lwjgl.opengl.GL11;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.common.registry.EntityEntryBuilder;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.World;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.DamageSource;
import net.minecraft.item.Item;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIPanic;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAILeapAtTarget;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.EnumCreatureAttribute;
import net.minecraft.entity.EntityCreature;
import net.minecraft.entity.Entity;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.model.ModelBase;
import java.util.Iterator;
import java.util.ArrayList;
public class MCreatorBongo extends testtest.ModElement {
public static final int ENTITYID = 2;
public static final int ENTITYID_RANGED = 3;
public MCreatorBongo(testtest instance) {
super(instance);
instance.entities.add(() -> EntityEntryBuilder.create().entity(EntityCustom.class).id(new ResourceLocation("testtest", "bongo"), ENTITYID)
.name("bongo").tracker(64, 1, true).egg(-1, -1).build());
}
private Biome[] allbiomes(net.minecraft.util.registry.RegistryNamespaced<ResourceLocation, Biome> in) {
Iterator<Biome> itr = in.iterator();
ArrayList<Biome> ls = new ArrayList<Biome>();
while (itr.hasNext())
ls.add(itr.next());
return ls.toArray(new Biome[ls.size()]);
}
@SideOnly(Side.CLIENT)
@Override
public void preInit(FMLPreInitializationEvent event) {
RenderingRegistry.registerEntityRenderingHandler(EntityCustom.class, renderManager -> {
return new RenderLiving(renderManager, new ModelPiggo(), 0.5f) {
protected ResourceLocation getEntityTexture(Entity entity) {
return new ResourceLocation("testtest:textures/piggo.png");
}
};
});
}
public static class EntityCustom extends EntityCreature {
public EntityCustom(World world) {
super(world);
setSize(0.6f, 1.8f);
experienceValue = 5;
this.isImmuneToFire = false;
setNoAI(!true);
enablePersistence();
this.tasks.addTask(1, new EntityAIWander(this, 1));
this.tasks.addTask(2, new EntityAILookIdle(this));
this.tasks.addTask(3, new EntityAISwimming(this));
this.tasks.addTask(4, new EntityAILeapAtTarget(this, (float) 0.8));
this.tasks.addTask(5, new EntityAIPanic(this, 1.2));
this.targetTasks.addTask(6, new EntityAIHurtByTarget(this, false));
}
@Override
public EnumCreatureAttribute getCreatureAttribute() {
return EnumCreatureAttribute.UNDEFINED;
}
@Override
protected boolean canDespawn() {
return false;
}
@Override
protected Item getDropItem() {
return null;
}
@Override
public net.minecraft.util.SoundEvent getAmbientSound() {
return (net.minecraft.util.SoundEvent) net.minecraft.util.SoundEvent.REGISTRY.getObject(new ResourceLocation("testtest:gargle.sound"));
}
@Override
public net.minecraft.util.SoundEvent getHurtSound(DamageSource ds) {
return (net.minecraft.util.SoundEvent) net.minecraft.util.SoundEvent.REGISTRY.getObject(new ResourceLocation(""));
}
@Override
public net.minecraft.util.SoundEvent getDeathSound() {
return (net.minecraft.util.SoundEvent) net.minecraft.util.SoundEvent.REGISTRY.getObject(new ResourceLocation(""));
}
@Override
protected float getSoundVolume() {
return 1.0F;
}
@Override
protected void applyEntityAttributes() {
super.applyEntityAttributes();
if (this.getEntityAttribute(SharedMonsterAttributes.ARMOR) != null)
this.getEntityAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(0D);
if (this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED) != null)
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.3D);
if (this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH) != null)
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10D);
if (this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE) != null)
this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(3D);
}
}
/**
* Piggo by Unknown
*/
@SideOnly(Side.CLIENT)
public static class ModelPiggo extends ModelBase {
public ModelRenderer Body;
public ModelRenderer LLeg;
public ModelRenderer RLeg;
public ModelRenderer RArm;
public ModelRenderer LArm;
public ModelRenderer Head;
public ModelPiggo() {
this.textureWidth = 64;
this.textureHeight = 40;
this.Body = new ModelRenderer(this, 20, 26);
this.Body.setRotationPoint(0.0F, 0.0F, 0.0F);
this.Body.addBox(0.0F, 0.0F, 0.0F, 8, 10, 4);
this.LLeg = new ModelRenderer(this, 0, 0);
this.LLeg.setRotationPoint(0.0F, 10.0F, 0.0F);
this.LLeg.addBox(0.0F, 0.0F, 0.0F, 4, 8, 4);
this.RLeg = new ModelRenderer(this, 48, 0);
this.RLeg.setRotationPoint(4.0F, 10.0F, 0.0F);
this.RLeg.addBox(0.0F, 0.0F, 0.0F, 4, 8, 4);
this.RArm = new ModelRenderer(this, 48, 16);
this.RArm.setRotationPoint(8.0F, 0.0F, 0.0F);
this.RArm.addBox(0.0F, 0.0F, 0.0F, 4, 20, 4);
this.LArm = new ModelRenderer(this, 0, 16);
this.LArm.setRotationPoint(-4.0F, 0.0F, 0.0F);
this.LArm.addBox(0.0F, 0.0F, 0.0F, 4, 20, 4);
this.Head = new ModelRenderer(this, 16, 0);
this.Head.setRotationPoint(0.0F, -8.0F, -2.0F);
this.Head.addBox(0.0F, 0.0F, 0.0F, 8, 8, 8);
}
@Override
public void render(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float rotationYaw, float rotationPitch,
float scale) {
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.0F);
this.Body.render(scale);
GlStateManager.disableBlend();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.0F);
this.LLeg.render(scale);
GlStateManager.disableBlend();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.0F);
this.RLeg.render(scale);
GlStateManager.disableBlend();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.0F);
this.RArm.render(scale);
GlStateManager.disableBlend();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.0F);
this.LArm.render(scale);
GlStateManager.disableBlend();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1.0F, 1.0F, 1.0F, 0.0F);
this.Head.render(scale);
GlStateManager.disableBlend();
}
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity e) {
super.setRotationAngles(f, f1, f2, f3, f4, f5, e);
this.Head.rotateAngleY = f3 / (180F / (float) Math.PI);
this.Head.rotateAngleX = f4 / (180F / (float) Math.PI);
this.LArm.rotateAngleX = MathHelper.cos(f * 1.0F) * -1.0F * f1;
this.RArm.rotateAngleX = MathHelper.cos(f * 1.0F) * 1.0F * f1;
this.RLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + (float) Math.PI) * 2.0F * f1 * 0.5F;
this.LLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 2.0F * f1 * 0.5F;
}
}
}
The issue is most likely caused by this part of the custom model:
I have not seen a code like this in this part of the model yet. This is most likely a specific of the Modeler you use and does not seem to work. Try to remove all GlStateMapper related methods and try importing the model again. Or use another modeler such as BlockBench or Cubik if this does not work.