Posted December 5, 20159 yr Hello! I am trying to get it to when I right-click the block (a block from my mod) the blockstate is full it will change to empty and it will drop two items. However when I right-click the block the items don't appear. The code below: @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { if (state.getValue(TYPE) == EnumType.FULL){ worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.EMPTY))); EntityItem entityitem1 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(Items.bucket, 1)); EntityItem entityitem2 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(OraniaItems.bucket_of_brine, 1)); worldIn.spawnEntityInWorld(entityitem1); worldIn.spawnEntityInWorld(entityitem2); return true; } return false; }
December 5, 20159 yr First check if this even returns true with System.out.println(); if(state.getValue(TYPE) == EnumType.FULL) Than, do what diesieben said, nothing is needed with registrations.
December 5, 20159 yr Author I know that it is true due it changing the blockstate, I just don't really understand diesieben07's reply.
December 6, 20159 yr Author So I should add an if statement like this: if (World.isRemote = false){ }
December 6, 20159 yr public boolean onBlockActivated(World worldIn .... Here on the method you already have an instance of "World" so use it If you are still not getting it: worldIn.isRemote instead of World.isRemote
December 7, 20159 yr Author I know I have an instance and but it give me an error: The final field World.isRemote cannot be assigned.
December 7, 20159 yr I know I have an instance and but it give me an error: The final field World.isRemote cannot be assigned. What exactly are you doing? Don't type World.isRemote, that will bring you errors. Type this: worldIn.isRemote
December 7, 20159 yr Author I already typed that (worldIn.isRemote = false) a while go. The error is he final field World.isRemote cannot be assigned (It red underlined isRemote).
December 7, 20159 yr Not sure if your just making a simple slip-up or don't know java well enough yet. A single equals is for assigning a value, a double equals is for comparing. (worldIn.isRemote = false) ^ This is trying to set the isRemote field to false, but you can't because its final. if (worldIn.isRemote == false) ^ this is what you want Or better yet: if (!worldIn.isRemote) It is the shortened form of: if (worldIn.isRemote != true) The exclamation mark represents not, so the statement is read as 'if world.isRemote is not true' thus its false.
December 7, 20159 yr As he mentioned above = is used to assign a value to a variable while == is for comparing. When you have a boolean you don't need to add the == part though because a boolean is always true or false. Adding ! Before your boolean is like saying "not" true.
December 7, 20159 yr Author #facepalm (I wanted to type the double equals but typed one) and I'm a Java noob and I agree that !worldin.isRemote is better. However getting the items is still not working.
December 7, 20159 yr Author (I put the entire onBlockActivated code) @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { // This is some other code go to the next // if (state.getValue(TYPE) == EnumType.EMPTY){ ItemStack itemstack = playerIn.getCurrentEquippedItem(); if (itemstack.getItem() == Items.water_bucket){ worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.FULL))); if (!playerIn.capabilities.isCreativeMode) { playerIn.destroyCurrentEquippedItem(); return true; } } } //This is the code I'm using if (!worldIn.isRemote){ if (state.getValue(TYPE) == EnumType.FULL){ worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.EMPTY))); EntityItem entityitem1 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(Items.bucket, 1)); EntityItem entityitem2 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(OraniaItems.bucket_of_brine, 1)); worldIn.spawnEntityInWorld(entityitem1); worldIn.spawnEntityInWorld(entityitem2); return true; } } return false; }
December 7, 20159 yr Author What I meant by This is some other code go to the next // is different code unrelated with my problem. I adjusted the code however it still does not work. @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { if (state.getValue(TYPE) == EnumType.EMPTY){ ItemStack itemstack = playerIn.getCurrentEquippedItem(); if (itemstack.getItem() == Items.water_bucket){ worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.FULL))); if (!playerIn.capabilities.isCreativeMode) { playerIn.destroyCurrentEquippedItem(); return true; } return false; } } if (!worldIn.isRemote){ if (state.getValue(TYPE) == EnumType.FULL){ worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.EMPTY))); EntityItem entityitem1 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(Items.bucket, 1)); EntityItem entityitem2 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(OraniaItems.bucket_of_brine, 1)); worldIn.spawnEntityInWorld(entityitem1); worldIn.spawnEntityInWorld(entityitem2); return true; } } return true; }
December 7, 20159 yr The first part should also be inside the isRemote check. Also, what I just noticed, why in the actual fuck are you using hitX, hitY, hitZ as the spawn coordinates of the item entity? I am not very sure if this is actually a thing (because i am a 1.8 noob) but i think that BlockPos has got a .getX(), geY(), getZ(). You already have a BlockPos instance on your method so use pos.getX(), pos.getY() and pos.getZ() instead of hitX, hitY, hitZ. If this is not a thing then ignore this comment. It is me being derpy on 1.8 forge.
December 7, 20159 yr Author Because of derpy code and typos that fixed the bug but created a crash. Then I fixed the crash. Thank for the help!
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.