From bc5ece085c5d321d1f3378f00b9981c77ff37235 Mon Sep 17 00:00:00 2001 From: Ghoulboy Date: Fri, 20 Jan 2023 18:07:44 +0100 Subject: [PATCH] Added `thickHugeFungusGrowthFix` rule (#1458) --- src/main/java/carpet/CarpetSettings.java | 10 ++++++++ .../carpet/mixins/HugeFungusFeatureMixin.java | 24 +++++++++++++++++++ src/main/resources/carpet.mixins.json | 1 + 3 files changed, 35 insertions(+) create mode 100644 src/main/java/carpet/mixins/HugeFungusFeatureMixin.java diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index f52fa3b3..3fe4c006 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -1051,4 +1051,14 @@ public class CarpetSettings ) public static int sculkSensorRange = 8; + public enum FungusFixMode { + FALSE, VANILLA, ALL; + } + + @Rule( + desc = "Allows to grow nether trees with 3x3 base with bonemeal", + extra = {"Setting to 'all' will make all nether fungi grow into 3x3 trees", "Setting to 'vanilla' will make 6% of all nether fungi grow into 3x3 trees", "(this being consistent with worldgen)", "Fixes [MC-215169](https://bugs.mojang.com/browse/MC-215169)."}, + category = {SURVIVAL, BUGFIX} + ) + public static FungusFixMode thickHugeFungusGrowthFix = FungusFixMode.FALSE; } diff --git a/src/main/java/carpet/mixins/HugeFungusFeatureMixin.java b/src/main/java/carpet/mixins/HugeFungusFeatureMixin.java new file mode 100644 index 00000000..3fb870cd --- /dev/null +++ b/src/main/java/carpet/mixins/HugeFungusFeatureMixin.java @@ -0,0 +1,24 @@ +package carpet.mixins; + +import carpet.CarpetSettings; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.levelgen.feature.HugeFungusConfiguration; +import net.minecraft.world.level.levelgen.feature.HugeFungusFeature; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArgs; +import org.spongepowered.asm.mixin.injection.invoke.arg.Args; + +import static carpet.CarpetSettings.FungusFixMode.*; + +@Mixin(HugeFungusFeature.class) +public class HugeFungusFeatureMixin { + @ModifyArgs(method = "place", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/levelgen/feature/HugeFungusFeature;placeStem(Lnet/minecraft/world/level/LevelAccessor;Lnet/minecraft/util/RandomSource;Lnet/minecraft/world/level/levelgen/feature/HugeFungusConfiguration;Lnet/minecraft/core/BlockPos;IZ)V")) + private void mixin(Args args) { + boolean natural = !((HugeFungusConfiguration) args.get(2)).planted; + args.set(5, natural && ((boolean) args.get(5)) || + !natural && (CarpetSettings.thickHugeFungusGrowthFix.equals(ALL) || + CarpetSettings.thickHugeFungusGrowthFix.equals(VANILLA) && ((RandomSource) args.get(1)).nextFloat() < 0.06F) + ); + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index ddc27dbb..a963ad4f 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -26,6 +26,7 @@ "FlowingFluid_liquidDamageDisabledMixin", "ServerStatus_motdMixin", "MinecraftServer_pingPlayerSampleLimit", + "HugeFungusFeatureMixin", "MinecraftServer_coreMixin",