Jump to content

Recommended Posts

Posted

My custom flower keeps crashing from the "canBlockStay" part of my code. Not sure what the problem is because its mostly copied from the minecraft BlockFlower class.

public class BlockOrangeFlower extends Block implements IPlantable {

public BlockOrangeFlower(int par1, Material par2Material) {
	super(par1, par2Material);
	this.setTickRandomly(true);
	float f = 0.2F;
	this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 3.0F,
			0.5F + f);
	this.setCreativeTab(CreativeTabs.tabDecorations);
	this.setStepSound(soundGrassFootstep);
}

public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) {
	return super.canPlaceBlockAt(par1World, par2, par3, par4)
			&& canBlockStay(par1World, par2, par3, par4);
}

/**
 * Gets passed in the blockID of the block below and supposed to return true
 * if its allowed to grow on the type of blockID passed in. Args: blockID
 */
protected boolean canThisPlantGrowOnThisBlockID(int par1) {
	return par1 == Block.grass.blockID || par1 == Block.dirt.blockID
			|| par1 == Block.tilledField.blockID;
}

/**
 * Lets the block know when one of its neighbor changes. Doesn't know which
 * neighbor changed (coordinates passed are their own) Args: x, y, z,
 * neighbor blockID
 */
public void onNeighborBlockChange(World par1World, int par2, int par3,
		int par4, int par5) {
	super.onNeighborBlockChange(par1World, par2, par3, par4, par5);
	this.checkFlowerChange(par1World, par2, par3, par4);
}

/**
 * Ticks the block if it's been scheduled
 */
public void updateTick(World par1World, int par2, int par3, int par4,
		Random par5Random) {
	this.checkFlowerChange(par1World, par2, par3, par4);
}

protected final void checkFlowerChange(World par1World, int par2, int par3,
		int par4) {
	if (!this.canBlockStay(par1World, par2, par3, par4)) {
		this.dropBlockAsItem(par1World, par2, par3, par4,
				par1World.getBlockMetadata(par2, par3, par4), 0);
		par1World.setBlockToAir(par2, par3, par4);
	}
}

/**
 * Can this block stay at this position. Similar to canPlaceBlockAt except
 * gets checked often with plants.
 */
public boolean canBlockStay(World par1World, int par2, int par3, int par4) {
	Block soil = blocksList[par1World.getBlockId(par2, par3 - 1, par4)];
	return (par1World.getFullBlockLightValue(par2, par3, par4) >= 8 || par1World
			.canBlockSeeTheSky(par2, par3, par4))
			&& (soil != null && soil.canSustainPlant(par1World, par2,
					par3 - 1, par4, ForgeDirection.UP, this));
}

/**
 * Returns a bounding box from the pool of bounding boxes (this means this
 * box can change after the pool has been cleared to be reused)
 */
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World,
		int par2, int par3, int par4) {
	return null;
}

/**
 * Is this block (a) opaque and (b) a full 1m cube? This determines whether
 * or not to render the shared face of two adjacent blocks and also whether
 * the player can attach torches, redstone wire, etc to this block.
 */
public boolean isOpaqueCube() {
	return false;
}

/**
 * If this block doesn't render as an ordinary block it will return False
 * (examples: signs, buttons, stairs, etc)
 */
public boolean renderAsNormalBlock() {
	return false;
}

/**
 * The type of render function that is called for this block
 */
public int getRenderType() {
	return 1;
}

@Override
public EnumPlantType getPlantType(World world, int x, int y, int z) {
	// TODO Auto-generated method stub
	return null;
}

@Override
public int getPlantID(World world, int x, int y, int z) {
	// TODO Auto-generated method stub
	return 0;
}

@Override
public int getPlantMetadata(World world, int x, int y, int z) {
	// TODO Auto-generated method stub
	return 0;
}

@SideOnly(Side.CLIENT)
public void registerIcons(IconRegister par1IconRegister) {

	this.blockIcon = par1IconRegister.registerIcon(Main.modid + ":"
			+ this.getUnlocalizedName2());

}

}

 

Crash:

  java.lang.NullPointerException
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.block.Block.canSustainPlant(Block.java:2213)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at derek.main.BlockOrangeFlower.canBlockStay(BlockOrangeFlower.java:79)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at derek.main.BlockOrangeFlower.canPlaceBlockAt(BlockOrangeFlower.java:31)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.block.Block.canPlaceBlockOnSide(Block.java:939)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.block.Block.canPlaceBlockOnSide(Block.java:921)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.world.World.canPlaceEntityOnSide(World.java:3773)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.item.ItemBlock.canPlaceItemBlockOnSide(ItemBlock.java:180)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.client.multiplayer.PlayerControllerMP.onPlayerRightClick(PlayerControllerMP.java:376)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.clickMouse(Minecraft.java:1315)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1799)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:834)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at net.minecraft.client.Minecraft.run(Minecraft.java:759)
2013-04-26 23:51:08 [iNFO] [sTDERR] 	at java.lang.Thread.run(Unknown Source)

 

Any help appreciated.

Posted

You're getting a crash because the canBlockSustainPlant method wants an EnumPlantType, so change getPlantType to this:

 

@Override
public EnumPlantType getPlantType(World world, int x, int y, int z) {
	return EnumPlantType.Plains;
}

 

Hope that helped ;)

Writing a steampunk mod called MineTech, and author of a long dead fishing mod

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.