diff --git a/common/src/main/java/net/satisfy/farm_and_charm/core/block/FertilizedFarmlandBlock.java b/common/src/main/java/net/satisfy/farm_and_charm/core/block/FertilizedFarmlandBlock.java index 12e7d242..b524caf0 100644 --- a/common/src/main/java/net/satisfy/farm_and_charm/core/block/FertilizedFarmlandBlock.java +++ b/common/src/main/java/net/satisfy/farm_and_charm/core/block/FertilizedFarmlandBlock.java @@ -48,7 +48,7 @@ private float getGrowthChance(ServerLevel serverLevel, BlockPos blockPos) { } private void applyBonemealEffect(ServerLevel serverLevel, BlockPos blockPos, RandomSource randomSource) { - if (PlatformHelper.isBonemealEffectEnabled()) { + if (!PlatformHelper.isBonemealEffectEnabled()) { return; } BlockPos posAbove = blockPos.above(); diff --git a/common/src/main/java/net/satisfy/farm_and_charm/core/mixin/CropBlockMixin.java b/common/src/main/java/net/satisfy/farm_and_charm/core/mixin/CropBlockMixin.java index f5878f1d..47e52f41 100644 --- a/common/src/main/java/net/satisfy/farm_and_charm/core/mixin/CropBlockMixin.java +++ b/common/src/main/java/net/satisfy/farm_and_charm/core/mixin/CropBlockMixin.java @@ -5,7 +5,10 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.FarmBlock; import net.minecraft.world.level.block.state.BlockState; import net.satisfy.farm_and_charm.core.registry.ObjectRegistry; import net.satisfy.farm_and_charm.platform.PlatformHelper; @@ -51,5 +54,49 @@ private void mayPlaceOn(BlockState blockState, BlockGetter blockGetter, BlockPos cir.setReturnValue(true); } } + + @Inject(method = "getGrowthSpeed", at = @At("HEAD"), cancellable = true) + private static void getGrowthSpeed(Block block, BlockGetter blockGetter, BlockPos blockPos, CallbackInfoReturnable cir) { + float value = 1.0F; + BlockPos below = blockPos.below(); + + for (int i = -1; i <= 1; ++i) { + for (int j = -1; j <= 1; ++j) { + float g = 0.0F; + BlockState blockState = blockGetter.getBlockState(below.offset(i, 0, j)); + if (blockState.is(Blocks.FARMLAND)) { + g = 1.0F; + if ((Integer)blockState.getValue(FarmBlock.MOISTURE) > 0) { + g = 3.0F; + } + } else if (blockState.is(ObjectRegistry.FERTILIZED_FARM_BLOCK.get())) { + g = 4.0F; + } + + if (i != 0 || j != 0) { + g /= 4.0F; + } + + value += g; + } + } + + BlockPos north = blockPos.north(); + BlockPos south = blockPos.south(); + BlockPos west = blockPos.west(); + BlockPos east = blockPos.east(); + boolean isFertilized1 = blockGetter.getBlockState(west).is(block) || blockGetter.getBlockState(east).is(block); + boolean isFertilized2 = blockGetter.getBlockState(north).is(block) || blockGetter.getBlockState(south).is(block); + if (isFertilized1 && isFertilized2) { + value /= 2.0F; + } else { + boolean isFertilized3 = blockGetter.getBlockState(west.north()).is(block) || blockGetter.getBlockState(east.north()).is(block) || blockGetter.getBlockState(east.south()).is(block) || blockGetter.getBlockState(west.south()).is(block); + if (isFertilized3) { + value /= 2.0F; + } + } + + cir.setReturnValue(value); + } }