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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I want to add trees to my mod but all the examples I've seen so far include data generation, and not json files. The json files for the blocks are not the issue here. Unless trees require certain json files as a structure, I'm certain I've got this part covered. The thing I'm looking for is probably a deferred register or any other way to register something as a tree so it will grow from a sapling. Here is what I currently have: public static final DeferredRegister<ConfiguredFeature<?, ?>> TREES = DeferredRegister.create(Registries.CONFIGURED_FEATURE, ExtinctionCraft.MOD_ID); // How do I register the tree? public static final ResourceKey<ConfiguredFeature<?, ?>> SEQUOIA_KEY = registerKey("sequoia"); public static void bootstrap(BootstapContext<ConfiguredFeature<?, ?>> context) { register(SEQUOIA_KEY, Feature.TREE, new TreeConfiguration.TreeConfigurationBuilder( BlockStateProvider.simple(ModBlocks.SEQUOIA_LOG.get()), new StraightTrunkPlacer(5, 4, 3), BlockStateProvider.simple(ModBlocks.SEQUOIA_LEAVES.get()), new PineFoliagePlacer(ConstantInt.of(3), ConstantInt.of(2), ConstantInt.of(3)), new TwoLayersFeatureSize(1, 0, 2)).build()); } public static ResourceKey<ConfiguredFeature<?, ?>> registerKey(String name) { return ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(ExtinctionCraft.MOD_ID, name)); } private static <FC extends FeatureConfiguration, F extends Feature<FC>> void register(BootstapContext<ConfiguredFeature<?, ?>> context, ResourceKey<ConfiguredFeature<?, ?>> key, F feature, FC configuration) { context.register(key, new ConfiguredFeature<>(feature, configuration)); } I also have this Grower class: public class SequoiaGrower extends AbstractTreeGrower { @Nullable @Override protected ResourceKey<ConfiguredFeature<?, ?>> getConfiguredFeature(RandomSource pRandom, boolean pHasFlowers) { return ModConfiguredFeatures.SEQUOIA_KEY; } } And the registry of the blocks that make up the tree (excluding wood blocks that I have registered but that don't make up part of a tree): public static final RegistryObject<Block> SEQUOIA_LOG = registerBlock("sequoia_log", () -> new ModFlammableRotatedPillarBlock(BlockBehaviour.Properties.copy(Blocks.OAK_LOG).strength(3))); public static final RegistryObject<Block> SEQUOIA_LEAVES = registerBlock("sequoia_leaves", () -> new ModLeavesBlock(BlockBehaviour.Properties.copy(Blocks.OAK_LEAVES))); public static final RegistryObject<Block> SEQUOIA_SAPLING = registerBlock("sequoia_sapling", () -> new SaplingBlock(new SequoiaGrower(), BlockBehaviour.Properties.copy(Blocks.OAK_SAPLING)));   How do I move on from here? Examples of your code are welcome too.
    • These libraries failed to download. Try again. com.google.code.findbugs:jsr305:3.0.2 commons-io:commons-io:2.4
    • Make a test just with Forge - without any mods Then add the latest.log from your logs-folder
    • Make a test with a custom directory https://minecrafthopper.net/help/guides/changing-game-directory/
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.