Jump to content

Recommended Posts

Posted

Whenever I try to spawn my mob, it crashes the game. As I look into what caused it, most of the errors point to the spawn egg. I'm still unsure and need some help with the problem. Here is the crash log:

---- Minecraft Crash Report ----
// Ooh. Shiny.

Time: 7/19/14 10:22 PM
Description: Unexpected error

java.lang.NullPointerException: Unexpected error
at net.minecraft.client.network.NetHandlerPlayClient.handleSpawnMob(NetHandlerPlayClient.java:864)
at net.minecraft.network.play.server.S0FPacketSpawnMob.processPacket(S0FPacketSpawnMob.java:129)
at net.minecraft.network.play.server.S0FPacketSpawnMob.processPacket(S0FPacketSpawnMob.java:222)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:247)
at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:321)
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1693)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
at net.minecraft.client.Minecraft.run(Minecraft.java:961)
at net.minecraft.client.main.Main.main(Main.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at GradleStart.bounce(GradleStart.java:108)
at GradleStart.startClient(GradleStart.java:101)
at GradleStart.main(GradleStart.java:66)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
at net.minecraft.client.network.NetHandlerPlayClient.handleSpawnMob(NetHandlerPlayClient.java:864)
at net.minecraft.network.play.server.S0FPacketSpawnMob.processPacket(S0FPacketSpawnMob.java:129)
at net.minecraft.network.play.server.S0FPacketSpawnMob.processPacket(S0FPacketSpawnMob.java:222)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:247)
at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:321)

-- Affected level --
Details:
Level name: MpServer
All players: 1 total; [EntityClientPlayerMP['ForgeDevName'/245, l='MpServer', x=1057.32, y=5.62, z=597.92]]
Chunk stats: MultiplayerChunkCache: 25, 25
Level seed: 0
Level generator: ID 01 - flat, ver 0. Features enabled: false
Level generator options: 
Level spawn location: World: (1059,4,600), Chunk: (at 3,0,8 in 66,37; contains blocks 1056,0,592 to 1071,255,607), Region: (2,1; contains chunks 64,32 to 95,63, blocks 1024,0,512 to 1535,255,1023)
Level time: 3369 game time, 3369 day time
Level dimension: 0
Level storage version: 0x00000 - Unknown?
Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
Forced entities: 55 total; [EntityVillager['Villager'/137, l='MpServer', x=1062.44, y=4.00, z=622.31], EntityVillager['Villager'/136, l='MpServer', x=1069.10, y=5.00, z=615.50], EntityVillager['Villager'/139, l='MpServer', x=1063.94, y=5.00, z=616.13], EntityVillager['Villager'/138, l='MpServer', x=1065.50, y=5.00, z=620.25], EntityVillager['Villager'/141, l='MpServer', x=1072.00, y=4.00, z=634.97], EntityVillager['Villager'/140, l='MpServer', x=1068.50, y=5.00, z=631.50], EntitySlime['Slime'/142, l='MpServer', x=1048.03, y=4.61, z=622.67], EntitySlime['Slime'/133, l='MpServer', x=1059.26, y=4.41, z=579.00], EntitySlime['Slime'/135, l='MpServer', x=1077.59, y=4.65, z=583.23], EntitySlime['Slime'/134, l='MpServer', x=1073.17, y=4.00, z=587.84], EntityItem['item.item.rottenFlesh'/48781, l='MpServer', x=1093.34, y=4.13, z=629.28], EntityChicken['Chicken'/158, l='MpServer', x=1084.53, y=4.00, z=578.44], EntityHorse['Donkey'/159, l='MpServer', x=1086.00, y=4.00, z=567.06], EntitySlime['Slime'/171, l='MpServer', x=1077.78, y=4.00, z=635.22], EntitySlime['Slime'/170, l='MpServer', x=1079.69, y=5.00, z=633.50], EntityVillager['Villager'/169, l='MpServer', x=1085.88, y=5.50, z=628.50], EntityVillager['Villager'/168, l='MpServer', x=1087.88, y=5.00, z=627.25], EntitySlime['Slime'/172, l='MpServer', x=1083.22, y=4.00, z=631.22], EntityVillager['Villager'/163, l='MpServer', x=1087.38, y=6.00, z=617.69], EntityChicken['Chicken'/162, l='MpServer', x=1087.41, y=4.00, z=578.56], EntityCow['Cow'/161, l='MpServer', x=1087.50, y=4.00, z=564.91], EntityChicken['Chicken'/160, l='MpServer', x=1079.56, y=4.00, z=572.44], EntityVillager['Villager'/167, l='MpServer', x=1080.13, y=5.00, z=632.44], EntitySlime['Slime'/19948, l='MpServer', x=1048.03, y=4.00, z=635.10], EntityVillager['Villager'/166, l='MpServer', x=1079.50, y=5.00, z=631.50], EntityZombie['Zombie'/52349, l='MpServer', x=1089.53, y=4.00, z=624.50], EntityVillager['Villager'/165, l='MpServer', x=1075.25, y=4.00, z=614.44], EntityVillager['Villager'/164, l='MpServer', x=1086.50, y=5.00, z=617.06], EntityVillager['Villager'/186, l='MpServer', x=1101.50, y=5.00, z=616.50], EntityVillager['Villager'/187, l='MpServer', x=1098.50, y=5.00, z=608.50], EntityVillager['Villager'/184, l='MpServer', x=1091.63, y=4.00, z=599.31], EntityVillager['Villager'/185, l='MpServer', x=1089.44, y=5.00, z=599.13], EntityVillager['Villager'/190, l='MpServer', x=1090.44, y=5.00, z=610.97], EntityVillager['Villager'/191, l='MpServer', x=1100.66, y=4.00, z=611.56], EntityVillager['Villager'/188, l='MpServer', x=1098.31, y=4.00, z=615.16], EntityVillager['Villager'/189, l='MpServer', x=1100.13, y=5.00, z=609.44], EntityChicken['Chicken'/178, l='MpServer', x=1093.44, y=4.00, z=570.38], EntityHorse['Donkey'/179, l='MpServer', x=1093.00, y=4.00, z=564.59], EntityCow['Cow'/182, l='MpServer', x=1096.88, y=4.00, z=562.97], EntityHorse['Donkey'/183, l='MpServer', x=1091.00, y=4.00, z=564.16], EntityHorse['Donkey'/180, l='MpServer', x=1091.41, y=4.00, z=561.47], EntityCow['Cow'/181, l='MpServer', x=1094.75, y=4.00, z=561.56], EntityClientPlayerMP['ForgeDevName'/245, l='MpServer', x=1057.32, y=5.62, z=597.92], EntityVillager['Villager'/192, l='MpServer', x=1089.41, y=4.00, z=611.13], EntitySlime['Slime'/195, l='MpServer', x=1100.34, y=4.00, z=638.34], EntityBat['Bat'/194, l='MpServer', x=1088.59, y=7.02, z=637.53], EntitySheep['Sheep'/93, l='MpServer', x=1029.91, y=4.00, z=595.97], EntityHorse['Horse'/119, l='MpServer', x=1028.19, y=4.00, z=582.59], EntityChicken['Chicken'/118, l='MpServer', x=1033.47, y=4.00, z=574.56], EntityChicken['Chicken'/117, l='MpServer', x=1034.53, y=4.00, z=566.59], EntitySheep['Sheep'/116, l='MpServer', x=1029.16, y=4.00, z=573.50], EntityHorse['Horse'/115, l='MpServer', x=1031.19, y=4.00, z=571.59], EntityItem['item.item.slimeball'/125, l='MpServer', x=1046.16, y=4.13, z=607.88], EntityChicken['Chicken'/121, l='MpServer', x=1024.59, y=4.00, z=574.63], EntityHorse['Horse'/120, l='MpServer', x=1026.50, y=4.00, z=579.84]]
Retry entities: 0 total; []
Server brand: fml,forge
Server type: Integrated singleplayer server
Stacktrace:
at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:417)
at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2568)
at net.minecraft.client.Minecraft.run(Minecraft.java:990)
at net.minecraft.client.main.Main.main(Main.java:164)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:134)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at GradleStart.bounce(GradleStart.java:108)
at GradleStart.startClient(GradleStart.java:101)
at GradleStart.main(GradleStart.java:66)

 

Like I said I can't quite figure out the problem and where/how to fix it.

If needed, here is the mob I made:

 

Register in the main mod file:

EntityRegistry.registerGlobalEntityID(EXP_Loader.class, "EXP_Loader", 614);

	EntityRegistry.addSpawn(EXP_Loader.class, 6, 1, 6, EnumCreatureType.monster, BiomeGenBase.plains);
	RenderingRegistry.registerEntityRenderingHandler(EXP_Loader.class, new RenderEXP_Loader(new ModelEXP_Loader(), 0.6F));
	registerEntityEgg(EXP_Loader.class, 0xA60000 , 0x000000);

 

Here is the Entity file

package com.natin.borderlands2mod.entities.robots;

import net.minecraft.entity.Entity;
import net.minecraft.entity.SharedMonsterAttributes;
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.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.effect.EntityLightningBolt;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityOcelot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;

import com.natin.borderlands2mod.entities.AI.EXP_Loader_AI;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class EXP_Loader extends EntityMob
{
    /**
     * Time when this creeper was last in an active state (Messed up code here, probably causes creeper animation to go
     * weird)
     */
    private int lastActiveTime;

    /**
     * The amount of time since the creeper was close enough to the player to ignite
     */
    private int timeSinceIgnited;
    private int fuseTime = 30;

    /** Explosion radius for this creeper. */
    private int explosionRadius = 5;

    public EXP_Loader(World par1World)
    {
        super(par1World);
        this.tasks.addTask(1, new EntityAISwimming(this));
        this.tasks.addTask(2, new EXP_Loader_AI(this));
        this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityOcelot.class, 6.0F, 1.0D, 1.2D));
        this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, false));
        this.tasks.addTask(5, new EntityAIWander(this, 0.8D));
        this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
        this.tasks.addTask(6, new EntityAILookIdle(this));
        this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
        this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false));
    }

    protected void applyEntityAttributes()
    {
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.25D);
        	
        //Max Health
      	this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
      		
      	//following range
  		this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(16.0D);
      		
     	//knockback resistance
   		this.getEntityAttribute(SharedMonsterAttributes.knockbackResistance).setBaseValue(0.0D);
      		

    
    }

    /**
     * Returns true if the newer Entity AI code should be run
     */
    public boolean isAIEnabled()
    {
        return true;
    }

    /**
     * The number of iterations PathFinder.getSafePoint will execute before giving up.
     */
    public int getMaxSafePointTries()
    {
        return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
    }

    /**
     * Called when the mob is falling. Calculates and applies fall damage.
     */
    protected void fall(float par1)
    {
        super.fall(par1);
        this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + par1 * 1.5F);

        if (this.timeSinceIgnited > this.fuseTime - 5)
        {
            this.timeSinceIgnited = this.fuseTime - 5;
        }
    }

    protected void entityInit()
    {
        super.entityInit();
        this.dataWatcher.addObject(16, Byte.valueOf((byte) - 1));
        this.dataWatcher.addObject(17, Byte.valueOf((byte)0));
    }

    /**
     * (abstract) Protected helper method to write subclass entity data to NBT.
     */
    public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.writeEntityToNBT(par1NBTTagCompound);

        if (this.dataWatcher.getWatchableObjectByte(17) == 1)
        {
            par1NBTTagCompound.setBoolean("powered", true);
        }

        par1NBTTagCompound.setShort("Fuse", (short)this.fuseTime);
        par1NBTTagCompound.setByte("ExplosionRadius", (byte)this.explosionRadius);
    }

    /**
     * (abstract) Protected helper method to read subclass entity data from NBT.
     */
    public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound)
    {
        super.readEntityFromNBT(par1NBTTagCompound);
        this.dataWatcher.updateObject(17, Byte.valueOf((byte)(par1NBTTagCompound.getBoolean("powered") ? 1 : 0)));

        if (par1NBTTagCompound.hasKey("Fuse"))
        {
            this.fuseTime = par1NBTTagCompound.getShort("Fuse");
        }

        if (par1NBTTagCompound.hasKey("ExplosionRadius"))
        {
            this.explosionRadius = par1NBTTagCompound.getByte("ExplosionRadius");
        }
    }

    /**
     * Called to update the entity's position/logic.
     */
    public void onUpdate()
    {
        if (this.isEntityAlive())
        {
            this.lastActiveTime = this.timeSinceIgnited;
            int i = this.getCreeperState();

            if (i > 0 && this.timeSinceIgnited == 0)
            {
                this.playSound("random.fuse", 1.0F, 0.5F);
            }

            this.timeSinceIgnited += i;

            if (this.timeSinceIgnited < 0)
            {
                this.timeSinceIgnited = 0;
            }

            if (this.timeSinceIgnited >= this.fuseTime)
            {
                this.timeSinceIgnited = this.fuseTime;

                if (!this.worldObj.isRemote)
                {
                    boolean flag = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing");

                    if (this.getPowered())
                    {
                        this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)(this.explosionRadius * 2), flag);
                    }
                    else
                    {
                        this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius, flag);
                    }

                    this.setDead();
                }
            }
        }

        super.onUpdate();
    }

    /**
     * Returns the sound this mob makes when it is hurt.
     */
    protected String getHurtSound()
    {
        return "mob.creeper.say";
    }

    /**
     * Returns the sound this mob makes on death.
     */
    protected String getDeathSound()
    {
        return "mob.creeper.death";
    }

    /**
     * Called when the mob's health reaches 0.
     */
  

    public boolean attackEntityAsMob(Entity par1Entity)
    {
        return true;
    }

    /**
     * Returns true if the creeper is powered by a lightning bolt.
     */
    public boolean getPowered()
    {
        return this.dataWatcher.getWatchableObjectByte(17) == 1;
    }

    @SideOnly(Side.CLIENT)

    /**
     * Params: (Float)Render tick. Returns the intensity of the creeper's flash when it is ignited.
     */
    public float getCreeperFlashIntensity(float par1)
    {
        return ((float)this.lastActiveTime + (float)(this.timeSinceIgnited - this.lastActiveTime) * par1) / (float)(this.fuseTime - 2);
    }

    /**
     * Returns the item ID for the item the mob drops on death.
     */
    protected Item getDropItemId()
    {
        return Items.gunpowder;
    }

    /**
     * Returns the current state of creeper, -1 is idle, 1 is 'in fuse'
     */
    public int getCreeperState()
    {
        return this.dataWatcher.getWatchableObjectByte(16);
    }

    /**
     * Sets the state of creeper, -1 to idle and 1 to be 'in fuse'
     */
    public void setCreeperState(int par1)
    {
        this.dataWatcher.updateObject(16, Byte.valueOf((byte)par1));
    }

    /**
     * Called when a lightning bolt hits the entity.
     */
    public void onStruckByLightning(EntityLightningBolt par1EntityLightningBolt)
    {
        super.onStruckByLightning(par1EntityLightningBolt);
        this.dataWatcher.updateObject(17, Byte.valueOf((byte)1));
    }
}

 

And yes, I wanted this thing to explode so I copied the creeper's whole file into it and just made some changes.

I need help figuring out what's causing the problem, and how to fix it.

Thanks in advance

Posted

EntityRegistry.registerGlobalEntityID(EXP_Loader.class, "EXP_Loader", 614);

1. 614 is a way to high number for an entity ID! Max. allowed is 255.

2. Do not use this method for registering entities. Use registerModEntity instead.

 

RenderingRegistry.registerEntityRenderingHandler(EXP_Loader.class, new RenderEXP_Loader(new ModelEXP_Loader(), 0.6F));

Make sure this is only called on the client, through a proxy, or you'll crash a server for sure.

 

registerEntityEgg(EXP_Loader.class, 0xA60000 , 0x000000);

What's the code for this?

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Posted

Here's the code for registerEntityEgg:

public static void registerEntityEgg(Class<? extends Entity> entity, int primaryColor, int secondaryColor)
{
	int id = getUniqueEntityId();
	EntityList.IDtoClassMapping.put(id, entity);
	EntityList.entityEggs.put(id, new EntityEggInfo(id, primaryColor, secondaryColor));
}

 

I'll try making a proxy and tell you how it works out

Posted

hm, I always suggest using a custom item which mimics the mob spawn egg, since the mob spawn egg relies on the vanilla entity id's, which can't get over 255 as previously mentioned.

It's also likely that this is causing it to crash.

Don't ask for support per PM! They'll get ignored! | If a post helped you, click the "Thank You" button at the top right corner of said post! |

mah twitter

This thread makes me sad because people just post copy-paste-ready code when it's obvious that the OP has little to no programming experience. This is not how learning works.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.