From a8598ad700593ae7591a7f5d304e77c2c7611daa Mon Sep 17 00:00:00 2001 From: DeadlyMC Date: Thu, 6 Jun 2019 16:26:24 +0530 Subject: [PATCH] desertShrubs --- src/main/java/carpet/CarpetSettings.java | 2 +- .../java/carpet/mixins/SaplingBlockMixin.java | 32 +++++++++++++++++++ src/main/resources/carpet.mixins.json | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/main/java/carpet/mixins/SaplingBlockMixin.java diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 064e7020..74f638d2 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -115,7 +115,7 @@ public class CarpetSettings .isACommand().boolAccelerate().defaultFalse(), rule("renewableSponges", "experimental feature", "Guardians turn into Elder Guardian when struck by lightning").wip(), rule("movableTileEntities", "experimental", "Pistons can push tile entities, like hoppers, chests etc.").boolAccelerate(), - rule("desertShrubs", "feature", "Saplings turn into dead shrubs in hot climates and no water access when it attempts to grow into a tree").wip(), + rule("desertShrubs", "feature", "Saplings turn into dead shrubs in hot climates and no water access when it attempts to grow into a tree"), rule("silverFishDropGravel", "experimental", "Silverfish drop a gravel item when breaking out of a block"), rule("summonNaturalLightning","creative", "summoning a lightning bolt has all the side effects of natural lightning"), rule("commandSpawn", "commands", "Enables /spawn command for spawn tracking").isACommand(), diff --git a/src/main/java/carpet/mixins/SaplingBlockMixin.java b/src/main/java/carpet/mixins/SaplingBlockMixin.java new file mode 100644 index 00000000..81760d3b --- /dev/null +++ b/src/main/java/carpet/mixins/SaplingBlockMixin.java @@ -0,0 +1,32 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import carpet.helpers.BlockSaplingHelper; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.SaplingBlock; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IWorld; +import net.minecraft.world.biome.Biomes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Random; + +@Mixin(SaplingBlock.class) +public abstract class SaplingBlockMixin +{ + @Inject(method = "generate", at = @At(value = "INVOKE", shift = At.Shift.BEFORE, + target = "Lnet/minecraft/block/sapling/SaplingGenerator;generate(Lnet/minecraft/world/IWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Ljava/util/Random;)Z"), + cancellable = true) + private void onGenerate(IWorld iWorld_1, BlockPos blockPos_1, BlockState blockState_1, Random random_1, CallbackInfo ci) + { + if(CarpetSettings.getBool("desertShrubs") && iWorld_1.getBiome(blockPos_1) == Biomes.DESERT && !BlockSaplingHelper.hasWater(iWorld_1, blockPos_1)) + { + iWorld_1.setBlockState(blockPos_1, Blocks.DEAD_BUSH.getDefaultState(), 3); + ci.cancel(); + } + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index 79c9ad10..c7e0d541 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -50,6 +50,7 @@ "GravityStructureProcessorMixin", "ServerPlayNetworkHandler_scarpetEventsMixin", "ServerPlayerInteractionManager_scarpetEventsMixin", + "SaplingBlockMixin", "EntityMixin", "DirectionMixin",