Jump to content

[solved][1.7.10] Crash with particles


SCAREX

Recommended Posts

Recently I had to create a smoke grenade. In order to do this, I used particles but the problem was that the player could deactivate them in the options so I used another way to do it. All were fine during a time but after my game crashes with different crash reports :

 

[02:20:38] [Client thread/INFO] [sTDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:388]: ---- Minecraft Crash Report ----

// Uh... Did I do that?

 

Time: 03/07/15 02:20

Description: Ticking entity

 

java.lang.NullPointerException: Ticking entity

at net.minecraft.entity.Entity.moveEntity(Entity.java:709)

at net.minecraft.entity.EntityLivingBase.moveEntityWithHeading(EntityLivingBase.java:1680)

at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2023)

at net.minecraft.entity.EntityLiving.onLivingUpdate(EntityLiving.java:431)

at net.minecraft.entity.EntityAgeable.onLivingUpdate(EntityAgeable.java:138)

at net.minecraft.entity.passive.EntityAnimal.onLivingUpdate(EntityAnimal.java:56)

at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:1816)

at net.minecraft.entity.EntityLiving.onUpdate(EntityLiving.java:250)

at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2298)

at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:684)

at net.minecraft.world.World.updateEntity(World.java:2258)

at net.minecraft.world.World.updateEntities(World.java:2108)

at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

 

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

---------------------------------------------------------------------------------------

 

-- Head --

Stacktrace:

at net.minecraft.entity.Entity.moveEntity(Entity.java:709)

at net.minecraft.entity.EntityLivingBase.moveEntityWithHeading(EntityLivingBase.java:1680)

at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2023)

at net.minecraft.entity.EntityLiving.onLivingUpdate(EntityLiving.java:431)

at net.minecraft.entity.EntityAgeable.onLivingUpdate(EntityAgeable.java:138)

at net.minecraft.entity.passive.EntityAnimal.onLivingUpdate(EntityAnimal.java:56)

at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:1816)

at net.minecraft.entity.EntityLiving.onUpdate(EntityLiving.java:250)

at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2298)

at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:684)

at net.minecraft.world.World.updateEntity(World.java:2258)

 

-- Entity being ticked --

Details:

Entity Type: Pig (net.minecraft.entity.passive.EntityPig)

Entity ID: 688

Entity Name: Pig

Entity's Exact location: -479,50, 70,00, 77,50

Entity's Block location: World: (-480,70,77), Chunk: (at 0,4,13 in -30,4; contains blocks -480,0,64 to -465,255,79), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)

Entity's Momentum: 0,00, -0,08, 0,00

Stacktrace:

at net.minecraft.world.World.updateEntities(World.java:2108)

at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)

 

-- Affected level --

Details:

Level name: New World

All players: 1 total; [EntityPlayerMP['SCAREXgaming'/595, l='New World', x=-223,77, y=79,01, z=180,91]]

Chunk stats: ServerChunkCache: 1237 Drop: 0

Level seed: -2073836179758848201

Level generator: ID 00 - default, ver 1. Features enabled: true

Level generator options:

Level spawn location: World: (-152,64,256), Chunk: (at 8,4,0 in -10,16; contains blocks -160,0,256 to -145,255,271), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)

Level time: 1217482 game time, 6000 day time

Level dimension: 0

Level storage version: 0x04ABD - Anvil

Level weather: Rain time: 68985 (now: false), thunder time: 48921 (now: false)

Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true

Stacktrace:

at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)

at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)

at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)

at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)

at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

-- System Details --

Details:

Minecraft Version: 1.7.10

Operating System: Windows 8.1 (amd64) version 6.3

Java Version: 1.7.0_71, Oracle Corporation

Java VM Version: Java HotSpot 64-Bit Server VM (mixed mode), Oracle Corporation

Memory: 2019293568 bytes (1925 MB) / 2340945920 bytes (2232 MB) up to 4772069376 bytes (4551 MB)

JVM Flags: 2 total; -Xmx5G -Xms2G

AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95

FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1481 4 mods loaded, 4 mods active

States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

UCHIJAAAAAAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)

UCHIJAAAAAAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1481-1.7.10.jar)

UCHIJAAAAAAAAA Forge{10.13.4.1481} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1481-1.7.10.jar)

UCHIJAAAAAAAAA hilium{1.0.0} [Hilium Mod] (bin)

GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.

Profiler Position: N/A (disabled)

Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used

Player Count: 1 / 8; [EntityPlayerMP['SCAREXgaming'/595, l='New World', x=-223,77, y=79,01, z=180,91]]

Type: Integrated Server (map_client.txt)

Is Modded: Definitely; Client brand changed to 'fml,forge'

[02:20:38] [Client thread/INFO] [sTDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:393]: #@!@# Game crashed! Crash report saved to: #@!@# .\crash-reports\crash-2015-07-03_02.20.38-server.txt

[02:20:38] [Client thread/INFO] [FML]: Waiting for the server to terminate/save.

[02:20:38] [server thread/INFO]: Saving worlds

[02:20:38] [server thread/INFO]: Saving chunks for level 'New World'/Overworld

[02:20:38] [server thread/INFO]: Saving chunks for level 'New World'/Nether

[02:20:38] [server thread/INFO]: Saving chunks for level 'New World'/The End

[02:20:38] [server thread/INFO] [FML]: Unloading dimension 0

[02:20:38] [server thread/INFO] [FML]: Unloading dimension -1

[02:20:38] [server thread/INFO] [FML]: Unloading dimension 1

[02:20:38] [server thread/INFO] [FML]: Applying holder lookups

[02:20:38] [server thread/INFO] [FML]: Holder lookups applied

[02:20:38] [server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded.

[02:20:38] [Client thread/INFO] [FML]: Server terminated.

AL lib: (EE) alc_cleanup: 1 device not closed

 

My class : (EntityGrenade.class)

public void performAction(MovingObjectPosition mop) {
	switch (this.metadata) {
	case 1:
		if (this.fuse > 0) {
			for (int i = 0; i < 4; i++) {
				Minecraft mc = Minecraft.getMinecraft();
				if (mc.renderViewEntity != null && mc.effectRenderer != null) {
					float multi = 1.6F;
					double x = this.posX + this.rand.nextGaussian() * multi;
					double y = this.posY + ((this.rand.nextDouble() - 0.2D) * 3) * multi;
					double z = this.posZ + this.rand.nextGaussian() * multi;

					double d = mc.renderViewEntity.posX - x;
					double d1 = mc.renderViewEntity.posY - y;
					double d2 = mc.renderViewEntity.posZ - z;
					if (d * d + d1 * d1 + d2 * d2 <= 1024.0D) mc.effectRenderer.addEffect(new EntitySmokeFX(this.worldObj, x, y, z, 0.0D, 0.0D, 0.0D, 2.0F)); // Particles are created here
				}
			}
			if (this.fuse >= 20) this.setDead();
		}
		break;
	default:
		if (!this.worldObj.isRemote && this.fuse >= 40 || (mop != null && mop.entityHit != null)) {
			this.setDead();
			this.worldObj.createExplosion(this, this.posX, this.posY + 1.0D, this.posZ, 3.4F, this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"));
		}
		break;
	}
}

 

The crash report is not always the same : the entity type change every time. Once it was an EntityItem and another time a particle.

 

But the NPE is in these loops :

List list = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(p_70091_1_, p_70091_3_, p_70091_5_));

            for (int i = 0; i < list.size(); ++i)
            {
                p_70091_3_ = ((AxisAlignedBB)list.get(i)).calculateYOffset(this.boundingBox, p_70091_3_); // here (Entity.class:692)
            }

            this.boundingBox.offset(0.0D, p_70091_3_, 0.0D);

            if (!this.field_70135_K && d7 != p_70091_3_)
            {
                p_70091_5_ = 0.0D;
                p_70091_3_ = 0.0D;
                p_70091_1_ = 0.0D;
            }

            boolean flag1 = this.onGround || d7 != p_70091_3_ && d7 < 0.0D;
            int j;

            for (j = 0; j < list.size(); ++j)
            {
                p_70091_1_ = ((AxisAlignedBB)list.get(j)).calculateXOffset(this.boundingBox, p_70091_1_); // Or here (Entity.class:709)
            }

            this.boundingBox.offset(p_70091_1_, 0.0D, 0.0D);

            if (!this.field_70135_K && d6 != p_70091_1_)
            {
                p_70091_5_ = 0.0D;
                p_70091_3_ = 0.0D;
                p_70091_1_ = 0.0D;
            }

            for (j = 0; j < list.size(); ++j)
            {
                p_70091_5_ = ((AxisAlignedBB)list.get(j)).calculateZOffset(this.boundingBox, p_70091_5_); // Or here (Entity.class:723)
            }

 

The only thing that can cause a NPE is the method "calculateYOffset" / "calculateXOffset" / "calculateZOffset". But when I see the code when the list comes from :

public List getCollidingBoundingBoxes(Entity p_72945_1_, AxisAlignedBB p_72945_2_)
    {
        this.collidingBoundingBoxes.clear();
        int i = MathHelper.floor_double(p_72945_2_.minX);
        int j = MathHelper.floor_double(p_72945_2_.maxX + 1.0D);
        int k = MathHelper.floor_double(p_72945_2_.minY);
        int l = MathHelper.floor_double(p_72945_2_.maxY + 1.0D);
        int i1 = MathHelper.floor_double(p_72945_2_.minZ);
        int j1 = MathHelper.floor_double(p_72945_2_.maxZ + 1.0D);

        for (int k1 = i; k1 < j; ++k1)
        {
            for (int l1 = i1; l1 < j1; ++l1)
            {
                if (this.blockExists(k1, 64, l1))
                {
                    for (int i2 = k - 1; i2 < l; ++i2)
                    {
                        Block block;

                        if (k1 >= -30000000 && k1 < 30000000 && l1 >= -30000000 && l1 < 30000000)
                        {
                            block = this.getBlock(k1, i2, l1);
                        }
                        else
                        {
                            block = Blocks.stone;
                        }

                        block.addCollisionBoxesToList(this, k1, i2, l1, p_72945_2_, this.collidingBoundingBoxes, p_72945_1_);
                    }
                }
            }
        }

        double d0 = 0.25D;
        List list = this.getEntitiesWithinAABBExcludingEntity(p_72945_1_, p_72945_2_.expand(d0, d0, d0));

        for (int j2 = 0; j2 < list.size(); ++j2)
        {
            AxisAlignedBB axisalignedbb1 = ((Entity)list.get(j2)).getBoundingBox();

            if (axisalignedbb1 != null && axisalignedbb1.intersectsWith(p_72945_2_)) // NullPointerCheck with "axisalignedbb1 != null"
            {
                this.collidingBoundingBoxes.add(axisalignedbb1);
            }

            axisalignedbb1 = p_72945_1_.getCollisionBox((Entity)list.get(j2));

            if (axisalignedbb1 != null && axisalignedbb1.intersectsWith(p_72945_2_)) // Same here
            {
                this.collidingBoundingBoxes.add(axisalignedbb1);
            }
        }

        return this.collidingBoundingBoxes;
    }

 

So it can't be the source of the crash. If you know why, tell me, it's been 4 days since I'm looking for an answer but it seems impossible for me.

 

Forge version : tested in 1.7.10-10.13.4.1448 and 1.7.10-10.13.4.1481.

Link to comment
Share on other sites

Hi

 

It looks to me like your performAction method is being called on the server, in which case this code gets executed on the server, which is bound to cause trouble

Minecraft mc = Minecraft.getMinecraft();

...

mc.effectRenderer.addEffect(..);

 

You need to make sure you only spawn EntityFX on the client.

 

-TGG

 

Link to comment
Share on other sites

Before I used if (this.worldObj.isRemote) but no particles appeared. I think it's because the particles are entities, and entities need to be spawned from the server.

Hi

EntityFX might look like Entity, but they're not.  You should 100% never spawn them on the server.

 

Something like this code, executed on the client only, should work just fine.  It does for me.

      FlameBreathFX flameBreathFX = 
             new FlameBreathFX(world, x, y, z, velocityX, velocityY, velocityZ);
      Minecraft.getMinecraft().effectRenderer.addEffect(flameBreathFX);

where
public class FlameBreathFX extends EntityFX {
}

 

-TGG

Link to comment
Share on other sites

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.