Jump to content

Recommended Posts

Posted

I have isolated the error to this block because with the line that loads it commented out, it works fine. With the block loaded, it gives me this stack trace when I try to load a world:


java.lang.OutOfMemoryError: Java heap space

    at java.util.Arrays.copyOf(Arrays.java:2245)

    at java.util.Arrays.copyOf(Arrays.java:2219)

    at java.util.ArrayList.grow(ArrayList.java:213)

    at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:187)

    at java.util.ArrayList.add(ArrayList.java:411)

    at net.minecraft.util.AABBPool.getAABB(AABBPool.java:51)

    at net.minecraft.block.Block.getCollisionBoundingBoxFromPool(Block.java:593)

    at net.minecraft.block.Block.addCollisionBoxesToList(Block.java:559)

    at net.minecraft.world.World.getCollidingBoundingBoxes(World.java:1681)

    at net.minecraft.entity.player.EntityPlayerMP.<init>(EntityPlayerMP.java:178)

    at net.minecraft.server.management.ServerConfigurationManager.createPlayerForUser(ServerConfigurationManager.java:383)

    at net.minecraft.server.integrated.IntegratedServerListenThread.networkTick(IntegratedServerListenThread.java:91)

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

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

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

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

    at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)



 

I started my Minecraft passing in 2GB as the JVM memory allocation, and it took up all of it, so I think there must be a problem in my code. (I can consistently trigger or avoid it by commenting/uncommenting the part in my main class that loads the block below.)

 

The block itself:

 


package planetguy.Gizmos.timebomb;

 

import java.util.Random;

 

import planetguy.Gizmos.ConfigHolder;

 

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.client.renderer.texture.IconRegister;

import net.minecraft.creativetab.CreativeTabs;

import net.minecraft.entity.EntityLiving;

import net.minecraft.entity.item.EntityTNTPrimed;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.util.Icon;

import net.minecraft.world.World;

 

public class BlockTimeBomb extends Block{

 

    private Icon topTex;

    private Icon bottomTex;

 

    public BlockTimeBomb(int id) {

        super(id, Material.tnt);

        this.setTickRandomly(true);

        this.setCreativeTab(CreativeTabs.tabRedstone);

        // TODO Auto-generated constructor stub

    }

   

    public void registerIcons(IconRegister ir){

        System.out.println("GraviBomb textures loading");

        topTex=ir.registerIcon(ConfigHolder.modName+":"+"bombTop");

        bottomTex=ir.registerIcon(ConfigHolder.modName+":"+"bombBottom");

    }

 

    @SideOnly(Side.CLIENT)

    public Icon getBlockTextureFromSideAndMetadata(int side, int meta){

        if(side==0||side==1){

            return topTex;

        }

        if(meta%2==0){//We're a plain time bomb

           

        }else{//Fork bomb >

           

        }

        return topTex;

    }

 

    public void updateTick(World w, int x, int y, int z, Random r){

        int curMeta=w.getBlockMetadata(x,y,z);

        int a=r.nextInt(5);

        if(a==0){

            curMeta+=2;

        }

        if(curMeta>15){

            w.spawnEntityInWorld(new EntityTNTPrimed(w, (double)((float)x + 0.5F), (double)((float)y + 0.5F), (double)((float)z + 0.5F), (EntityLiving) null));

        }

        w.setBlockMetadataWithNotify(x, y, z, curMeta, 0x02);

       

    }     

   

    public boolean onBlockActivated(World w, int x, int y, int z, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9){

        fork(w,x,y,z);

        return true;

    }

 

    /** The fork method for the fork bomb variant of the time bomb. Moves the bomb to all available spaces

    * around it, or if there isn't space leaves it where it is.

    *

    */

    private void fork(World w, int x, int y, int z){

 

        if(w.getBlockMetadata(x, y, z)%2!=1||!ConfigHolder.allowFB){

            return;

        }

        boolean hasReplaced=false;

        int meta=w.getBlockMetadata(x, y, z);

        if(w.getBlockMaterial(x+1, y, z)==Material.air){

            w.setBlock(x+1, y, z, ConfigHolder.timeExplosivesID, meta, 0x02);

            hasReplaced=true;

        }

        if(w.getBlockMaterial(x-1, y, z)==Material.air){

            w.setBlock(x-1, y, z, ConfigHolder.timeExplosivesID, meta, 0x02);

            hasReplaced=true;

        }

        if(w.getBlockMaterial(x, y+1, z)==Material.air){

            w.setBlock(x, y+1, z, ConfigHolder.timeExplosivesID, meta, 0x02);

            hasReplaced=true;

        }

        if(w.getBlockMaterial(x, y-1, z)==Material.air){

            w.setBlock(x, y-1, z, ConfigHolder.timeExplosivesID, meta, 0x02);

            hasReplaced=true;

        }

        if(w.getBlockMaterial(x, y, z+1)==Material.air){

            w.setBlock(x, y, z+1, ConfigHolder.timeExplosivesID, meta, 0x02);

            hasReplaced=true;

        }

        if(w.getBlockMaterial(x, y, z-1)==Material.air){

            w.setBlock(x, y, z-1, ConfigHolder.timeExplosivesID, meta, 0x02);

            hasReplaced=true;

        }

        if(hasReplaced){

            w.setBlockToAir(x, y, z);

        }

    }

}

Can anyone help me with this one?

Posted

Looks like the fork bit is capable of infinite recursion to me.

I don't see it. I don't think it calls itself, and I don't see how changing blocks would fire an onBlockActivated event in any changed.

I'm not even at the stage of having a testable fork bomb yet, but when this crashed my game it was partly through wgen and hadn't started lighting. Swamp biomes look funny with the mushrooms hovering in midair and no leaves on the trees.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

×
×
  • Create New...