Sorry, here they are:
Registration, registered under the FMLPreInitialisationEvent in the main modclass,
package com.brickfix.roleplaymod.entity;
import com.brickfix.roleplaymod.RoleplayMod;
import net.minecraft.entity.EntityList;
import net.minecraftforge.fml.common.registry.EntityRegistry;
public class RPEntities
{
public static void mainRegistry()
{
registerEntity();
}
public static void registerEntity()
{
createEntity(EntityTestMob.class, "TestMob", 0xE80C0C, 0x0CE876);
}
public static void createEntity(Class entityClass, String entityName, int solidColour, int spotColour)
{
int randomId = EntityRegistry.findGlobalUniqueEntityId();
EntityRegistry.registerGlobalEntityID(entityClass, entityName, randomId);
EntityRegistry.registerModEntity(entityClass, entityName, randomId, RoleplayMod.instance, 32, 1, true);
createEgg(randomId, solidColour, spotColour);
}
private static void createEgg(int randomId, int solidColour, int spotColour)
{
EntityList.entityEggs.put(Integer.valueOf(randomId), new EntityList.EntityEggInfo(randomId, solidColour, spotColour));
}
}
The Entity class:
package com.brickfix.roleplaymod.entity;
import java.util.Random;
import com.brickfix.roleplaymod.ExtendedPlayerData;
import com.brickfix.roleplaymod.RoleplayMod;
import com.brickfix.roleplaymod.container.ContainerNPC;
import com.brickfix.roleplaymod.util.SpeechFactory;
import com.google.common.base.Predicate;
import net.minecraft.block.BlockAnvil;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityAgeable;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IRangedAttackMob;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIArrowAttack;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIAvoidEntity;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAIPanic;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAITempt;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.monster.EntityCaveSpider;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntitySpider;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.passive.EntityOcelot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.inventory.AnimalChest;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.DamageSource;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IInteractionObject;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
public class EntityTestMob extends EntityAgeable
{
public EntityTestMob(World worldIn)
{
super(worldIn);
this.setSize(1.0F, 2.0F);
this.setEntityToolsAndArmor();
this.tasks.addTask(0, new EntityAIWander(this, 0.5D));
this.tasks.addTask(2, new EntityAILookIdle(this));
this.tasks.addTask(3, new EntityAISwimming(this));
this.tasks.addTask(4, new EntityAITempt(this, 0.6D, Items.apple, false));
this.tasks.addTask(5, new EntityAIAvoidEntity(this, new Predicate()
{
public boolean shallAvoid(Entity entity)
{
return entity instanceof EntityCreeper;
}
public boolean apply(Object entityObject)
{
return this.shallAvoid((Entity)entityObject);
}
}, 6.0F, 1.0D, 1.2D));
this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityZombie.class, 1.0D, true));
this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntitySkeleton.class, 1.0D, true));
this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntitySpider.class, 1.0D, true));
this.tasks.addTask(1, new EntityAIAttackOnCollide(this, EntityCaveSpider.class, 1.0D, true));
this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityZombie.class, true));
this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntitySkeleton.class, true));
this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntitySpider.class, true));
this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityCaveSpider.class, true));
this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0]));
}
@Override
protected void entityInit()
{
super.entityInit();
Random rnd = new Random();
byte b = (byte)(rnd.nextInt(2));
this.dataWatcher.addObject(13, new Byte((byte)b));
}
@Override
public boolean canDespawn()
{
return false;
}
public boolean isAIEnabled()
{
return true;
}
public boolean interact(EntityPlayer player)
{
ItemStack item = player.inventory.getCurrentItem();
boolean flag = item != null && item.getItem() == Items.spawn_egg;
if (!flag && !this.worldObj.isRemote)
{
if (player.isSneaking()) player.openGui(RoleplayMod.instance, 0, worldObj, this.getEntityId(), 0, 0);
else
{
ChatComponentText message = new SpeechFactory().createNewMessage(this, player);
//ChatComponentText message2 = new ChatComponentText("Your current popularity is " + ExtendedPlayerData.get(player).getAlignment());
player.addChatMessage(message);
//player.addChatMessage(message2);
//if (this.getNPCType() == 1) this.setNPCType(0);
//else this.setNPCType(1);
}
return true;
}
else return super.interact(player);
}
protected void applyEntityAttributes()
{
super.applyEntityAttributes();
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.5D);;
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage);
this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(2.0D);
}
@Override
public EntityAgeable createChild(EntityAgeable ageable)
{
return new EntityTestMob(worldObj);
}
protected void setEntityToolsAndArmor()
{
Random rnd = new Random();
int k=0;
int ran1 = rnd.nextInt(5);
int ran2;
ItemStack item = null;
do
{
ran2=rnd.nextInt(3);
switch(k)
{
case 0:
if (ran2 == 0) item = new ItemStack(Items.stone_pickaxe);
else if (ran2==1) item = new ItemStack(Items.stone_sword);
else if (ran2==2) item = new ItemStack(Items.stone_axe);
break;
case 4:
if (ran2==0) item = new ItemStack(Items.leather_boots);
else if (ran2==1) item = new ItemStack(Items.iron_boots);
else if (ran2==2) item = new ItemStack(Items.chainmail_boots);
break;
case 3:
if (ran2==0) item = new ItemStack(Items.leather_leggings);
else if (ran2==2) item = new ItemStack(Items.chainmail_leggings);
break;
case 2:
if (ran2==0) item = new ItemStack(Items.leather_chestplate);
else if (ran2==2) item = new ItemStack(Items.chainmail_chestplate);
break;
case 1:
if (ran2==0) item = new ItemStack(Items.chainmail_helmet);
}
this.setCurrentItemOrArmor(k, item);
k++;
}
while (k<ran1);
}
@Override
public boolean attackEntityAsMob(Entity entity)
{
float f = (float)this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue();
int i = 0;
if (entity instanceof EntityLivingBase)
{
f += EnchantmentHelper.func_152377_a(this.getHeldItem(), ((EntityLivingBase)entity).getCreatureAttribute());
i += EnchantmentHelper.getKnockbackModifier(this);
}
boolean flag = entity.attackEntityFrom(DamageSource.causeMobDamage(this), f);
if (flag)
{
if (i > 0)
{
entity.addVelocity((double)(-MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F) * (float)i * 0.5F), 0.1D, (double)(MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F) * (float)i * 0.5F));
this.motionX *= 0.6D;
this.motionZ *= 0.6D;
}
int j = EnchantmentHelper.getFireAspectModifier(this);
if (j > 0)
{
entity.setFire(j * 4);
}
this.func_174815_a(this, entity);
}
return flag;
}
public void setNPCType(int i)
{
this.dataWatcher.updateObject(13, Byte.valueOf((byte)i));
}
public int getNPCType()
{
return this.dataWatcher.getWatchableObjectByte(13);
}
@Override
public void writeEntityToNBT(NBTTagCompound tag)
{
super.writeEntityToNBT(tag);
tag.setByte("NPCType", (byte)this.getNPCType());
}
@Override
public void readEntityFromNBT(NBTTagCompound tag)
{
super.readEntityFromNBT(tag);
if (tag.hasKey("NPCType"))
{
byte b0 = tag.getByte("NPCType");
this.setNPCType(b0);
System.out.println("The type of the NPC is " + b0);
}
}
}
And the render class:
package com.brickfix.roleplaymod.rendering;
import com.brickfix.roleplaymod.entity.EntityTestMob;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.layers.LayerBipedArmor;
import net.minecraft.client.renderer.entity.layers.LayerCustomHead;
import net.minecraft.client.renderer.entity.layers.LayerHeldItem;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
public class TestMobRenderer extends RenderLiving
{
private static final ResourceLocation civilianTexture = new ResourceLocation("roleplaymod:textures/entities/rpgnpcs/testmob.png");
private static final ResourceLocation guardianTexture = new ResourceLocation("roleplaymod:textures/entities/rpgnpcs/NPCWarrior.png");
public ModelBiped modelBipedMain;
public TestMobRenderer(RenderManager renderManager, ModelBase model, float f)
{
super(renderManager, model, f);
this.addLayer(new LayerHeldItem(this));
LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this)
{
protected void noClueWhatThisDoes()
{
this.field_177186_d = new ModelBiped(1.0F);
this.field_177189_c = new ModelBiped(0.5F);
}
};
this.addLayer(layerbipedarmor);
}
@Override
protected ResourceLocation getEntityTexture(Entity entity)
{
return this.getEntityTextureFromType((EntityTestMob) entity);
}
protected ResourceLocation getEntityTextureFromType(EntityTestMob entity)
{
return entity.getNPCType() == 1 ? this.guardianTexture : this.civilianTexture;
}
}
Thanks again for any help (: