Jump to content

[1.19.2] [SOLVED] How can i make a farmland wet in an area of 3x3?


lvcas

Recommended Posts

I making a block that can irrigate an area of 3x3 and this is how is should be like.

image.png
 

Once you click to activate the block, the particles are added to the area that will be irrigated. The problem i'm having is that i don't know how to make the farmland wet. I've tried to do so, asked ChatGPT for help but could not get to any result.
 

Full code of the custom block.

Spoiler
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.util.RandomSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;

public class BaseIrrigatorBlock extends Block {
    public static final BooleanProperty IRRIGATING = BooleanProperty.create("irrigating");
    public BaseIrrigatorBlock(Properties properties) {
        super(properties);
    }

    private static final VoxelShape SHAPE =
            Block.box(0, 0, 0, 15.99, 6.5, 16);

    @Override
    public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource rand) {
        if (state.getValue(BaseIrrigatorBlock.IRRIGATING)) {
            for (int i = 0; i < 9; i++) {
                double xOffset = rand.nextDouble() * 3 - 1.5;
                double zOffset = rand.nextDouble() * 3 - 1.5;

                level.addParticle(
                        ParticleTypes.RAIN,
                        pos.getX() + 0.5 + xOffset,
                        pos.getY() + 0.5,
                        pos.getZ() + 0.5 + zOffset,
                        0,
                        0.05d,
                        0d);
            }
        }
    }
  
  	private void moistenFarmland() {
    	// method to make farmland wet in the area
    }

    @Override
    public InteractionResult use(BlockState state, Level level, BlockPos blockPos, Player player, InteractionHand hand, BlockHitResult hitResult) {
        if (!level.isClientSide() && hand == InteractionHand.MAIN_HAND) {
            level.setBlock(blockPos, state.cycle(IRRIGATING), 3);
        }

        return super.use(state, level, blockPos, player, hand, hitResult);
    }

    @Override
    protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
        builder.add(IRRIGATING);
    }

    @Override
    public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) {
        return SHAPE;
    }
}

 

How can i make the farmland wet? Should i receive any parameters in the moistenFarmland method? If so, what parameters?

Edited by lvcas
Solved
Link to comment
Share on other sites

Did you take a look at the FarmBlock class, and see how Minecraft checks/sets moisture?

Looks like perhaps it's done in the randomTick method for that block:

p_221140_.setBlock(p_221141_, p_221139_.setValue(MOISTURE, Integer.valueOf(7)), 2);

See what you can cobble together, and if it doesn't work, show what you tried and what the results were vs. what you expect.

Also a github repo of your project so it can be cloned/downloaded and built/run/debugged would be useful for others to help find errors as well. :)

Link to comment
Share on other sites

On 8/8/2023 at 3:43 AM, lvcas said:

I've tried to do so, asked ChatGPT for help but could not get to any result.

took me a while to stop shuddering.
you asked a guessing engine how to do something?

 

you have two options: one -
look inside the game code. if you have no patience to do so, you will not make a decent mod. ever. 
option two - ask living people on forge forum or NF discord.

Link to comment
Share on other sites

On 8/11/2023 at 4:21 PM, MFMods said:

took me a while to stop shuddering.
you asked a guessing engine how to do something?

 

you have two options: one -
look inside the game code. if you have no patience to do so, you will not make a decent mod. ever. 
option two - ask living people on forge forum or NF discord.

Well, ChatGPT actually helped me tbh haha
I've looked through the game code and it helped me a lot too and eventually i made it work, with some bugs but it's working.
Gonna join forge discord and ask for help there! Thanks!

Link to comment
Share on other sites

  • lvcas changed the title to [1.19.2] [SOLVED] How can i make a farmland wet in an area of 3x3?

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.



×
×
  • Create New...

Important Information

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