Jump to content

[1.15.2] how to update blockstate for a farmland


Thomas107500

Recommended Posts

I have all the things set up, but i dont know how to check for water and hydrate it, it seems that there is suppose to be a updateTick() method for it but i can't find it anywhere, and check neighbor update wont work because it is not suitable for this case, so how am i suppose to update its blockstate? Do i really have to go for Tile Entity? I did see they used a tick() method from block class which is depreciated and i tried and its not ticking at all. So how exactly did they do that on vanilla?

Edited by Thomas107500
Link to comment
Share on other sites

23 minutes ago, Thomas107500 said:

i tried and its not ticking at all

What exactly did you try? Did you @Override the method?

Post code and logs please, it helps to see the big picture!

 

23 minutes ago, Thomas107500 said:

So how exactly did they do that on vanilla?

Did you look at farmland? And probably also at crop/bush blocks to make sure the logic is not in there.

Link to comment
Share on other sites

So what i did is this:

 

@Override

public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random rand) 
    {
        LOGGER.error("farmland tick called !!!");
        breakCrop(state, worldIn, pos);
        super.tick(state, worldIn, pos, rand);
    }

 

i am extending FarmlandBlock, so i called its super method, breakCrop is another static method i made and wanted to call, the super method basicly contains the code to attempt to check for water and change blockstate:

 

public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random rand) {
      if (!state.isValidPosition(worldIn, pos)) {
         turnToDirt(state, worldIn, pos);
      } else {
         int i = state.get(MOISTURE);
         if (!hasWater(worldIn, pos) && !worldIn.isRainingAt(pos.up())) {
            if (i > 0) {
               worldIn.setBlockState(pos, state.with(MOISTURE, Integer.valueOf(i - 1)), 2);
            } else if (!hasCrops(worldIn, pos)) {
               turnToDirt(state, worldIn, pos);
            }
         } else if (i < 7) {
            worldIn.setBlockState(pos, state.with(MOISTURE, Integer.valueOf(7)), 2);
         }

      }
   }

I tried stump on my farmland and it did turn to dirt, so something is running the turnToDirt static method from the super, but my logger message is not appearing on the console, so the tick method is not running.... so yeah i am kinda confused on that.....

Link to comment
Share on other sites

and for

49 minutes ago, Ugdhar said:

What exactly did you try? Did you @Override the method?

Post code and logs please, it helps to see the big picture!

 

Did you look at farmland? And probably also at crop/bush blocks to make sure the logic is not in there.

and for whether is the crop/bush blocks updating the blockstate, no i think not because even when plants are not there the farmland will get hydrated in vanilla, so i am kinda sure its not the crop/bush that do the blockstate update

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.