OrangeVillager61 Posted December 5, 2015 Share Posted December 5, 2015 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; } Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 5, 2015 Author Share Posted December 5, 2015 So I register it via server? Quote Link to comment Share on other sites More sharing options...
FLUFFY2 Posted December 5, 2015 Share Posted December 5, 2015 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. Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 5, 2015 Author Share Posted December 5, 2015 I know that it is true due it changing the blockstate, I just don't really understand diesieben07's reply. Quote Link to comment Share on other sites More sharing options...
FLUFFY2 Posted December 5, 2015 Share Posted December 5, 2015 Now I am telling you, you should only act on the client. *server* Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 6, 2015 Author Share Posted December 6, 2015 So I should add an if statement like this: if (World.isRemote = false){ } Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 6, 2015 Author Share Posted December 6, 2015 Doing that gives me an error that World.isRemote is not a static field. Quote Link to comment Share on other sites More sharing options...
Cerandior Posted December 6, 2015 Share Posted December 6, 2015 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 Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 7, 2015 Author Share Posted December 7, 2015 I know I have an instance and but it give me an error: The final field World.isRemote cannot be assigned. Quote Link to comment Share on other sites More sharing options...
Cerandior Posted December 7, 2015 Share Posted December 7, 2015 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 Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 7, 2015 Author Share Posted December 7, 2015 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). Quote Link to comment Share on other sites More sharing options...
ShetiPhian Posted December 7, 2015 Share Posted December 7, 2015 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. Quote Link to comment Share on other sites More sharing options...
Cerandior Posted December 7, 2015 Share Posted December 7, 2015 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. Quote Link to comment Share on other sites More sharing options...
FLUFFY2 Posted December 7, 2015 Share Posted December 7, 2015 diesieben you will need more tea that you can possibly imagine for this OP. Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 7, 2015 Author Share Posted December 7, 2015 #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. Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 7, 2015 Author Share Posted December 7, 2015 (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; } Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 7, 2015 Author Share Posted December 7, 2015 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; } Quote Link to comment Share on other sites More sharing options...
Cerandior Posted December 7, 2015 Share Posted December 7, 2015 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. Quote Link to comment Share on other sites More sharing options...
OrangeVillager61 Posted December 7, 2015 Author Share Posted December 7, 2015 Because of derpy code and typos that fixed the bug but created a crash. Then I fixed the crash. Thank for the help! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.