From e6c7958456097b7796394ec2f57649faf09814ca Mon Sep 17 00:00:00 2001 From: eerussianguy <59940116+eerussianguy@users.noreply.github.com> Date: Mon, 12 Dec 2022 13:23:32 -0500 Subject: [PATCH] Simplify tree grower patches (#9209) --- .../grower/AbstractMegaTreeGrower.java.patch | 33 ++++--------------- .../grower/AbstractTreeGrower.java.patch | 33 ++++--------------- .../event/ForgeEventFactory.java | 2 +- .../event/level/SaplingGrowTreeEvent.java | 19 ++++++++--- 4 files changed, 27 insertions(+), 60 deletions(-) diff --git a/patches/minecraft/net/minecraft/world/level/block/grower/AbstractMegaTreeGrower.java.patch b/patches/minecraft/net/minecraft/world/level/block/grower/AbstractMegaTreeGrower.java.patch index 41cecca3bc..4626b4796d 100644 --- a/patches/minecraft/net/minecraft/world/level/block/grower/AbstractMegaTreeGrower.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/grower/AbstractMegaTreeGrower.java.patch @@ -1,33 +1,12 @@ --- a/net/minecraft/world/level/block/grower/AbstractMegaTreeGrower.java +++ b/net/minecraft/world/level/block/grower/AbstractMegaTreeGrower.java -@@ -27,6 +_,14 @@ - return super.m_213817_(p_222891_, p_222892_, p_222893_, p_222894_, p_222895_); - } - -+ /** -+ * Forge: context-sensitive version to be able to use data pack provided features -+ */ -+ @Nullable -+ protected Holder> getConfiguredMegaFeature(ServerLevel level, ChunkGenerator chunkGenerator, BlockPos pos, BlockState state, RandomSource random, ResourceKey> featureKey) { -+ return level.m_8891_().m_175515_(Registries.f_256911_).m_203636_(featureKey).orElse(null); -+ } -+ - @Nullable - protected abstract ResourceKey> m_213566_(RandomSource p_222904_); - -@@ -35,11 +_,12 @@ - if (resourcekey == null) { +@@ -36,6 +_,9 @@ return false; } else { -- Holder> holder = p_222897_.m_8891_().m_175515_(Registries.f_256911_).m_203636_(resourcekey).orElse((Holder.Reference>)null); -- if (holder == null) { -+ Holder> holder = this.getConfiguredMegaFeature(p_222897_, p_222898_, p_222899_, p_222900_, p_222901_, resourcekey); -+ net.minecraftforge.event.level.SaplingGrowTreeEvent event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_222897_, p_222901_, p_222899_, holder); -+ if (event.getResult().equals(net.minecraftforge.eventbus.api.Event.Result.DENY) || event.getFeature() == null) { + Holder> holder = p_222897_.m_8891_().m_175515_(Registries.f_256911_).m_203636_(resourcekey).orElse((Holder.Reference>)null); ++ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_222897_, p_222901_, p_222899_, holder); ++ holder = event.getFeature(); ++ if (event.getResult() == net.minecraftforge.eventbus.api.Event.Result.DENY) return false; + if (holder == null) { return false; } else { -- ConfiguredFeature configuredfeature = holder.m_203334_(); -+ ConfiguredFeature configuredfeature = event.getFeature().m_203334_(); - BlockState blockstate = Blocks.f_50016_.m_49966_(); - p_222897_.m_7731_(p_222899_.m_7918_(p_222902_, 0, p_222903_), blockstate, 4); - p_222897_.m_7731_(p_222899_.m_7918_(p_222902_ + 1, 0, p_222903_), blockstate, 4); diff --git a/patches/minecraft/net/minecraft/world/level/block/grower/AbstractTreeGrower.java.patch b/patches/minecraft/net/minecraft/world/level/block/grower/AbstractTreeGrower.java.patch index 1868d0181e..98ec44c97e 100644 --- a/patches/minecraft/net/minecraft/world/level/block/grower/AbstractTreeGrower.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/grower/AbstractTreeGrower.java.patch @@ -1,33 +1,12 @@ --- a/net/minecraft/world/level/block/grower/AbstractTreeGrower.java +++ b/net/minecraft/world/level/block/grower/AbstractTreeGrower.java -@@ -14,6 +_,14 @@ - import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; - - public abstract class AbstractTreeGrower { -+ /** -+ * Forge: context-sensitive version to be able to use data pack provided features -+ */ -+ @Nullable -+ protected Holder> getConfiguredFeature(ServerLevel level, ChunkGenerator chunkGenerator, BlockPos pos, BlockState state, RandomSource random, boolean hasFlowers, ResourceKey> featureKey) { -+ return level.m_8891_().m_175515_(Registries.f_256911_).m_203636_(featureKey).orElse(null); -+ } -+ - @Nullable - protected abstract ResourceKey> m_213888_(RandomSource p_222910_, boolean p_222911_); - -@@ -22,11 +_,12 @@ - if (resourcekey == null) { +@@ -23,6 +_,9 @@ return false; } else { -- Holder> holder = p_222905_.m_8891_().m_175515_(Registries.f_256911_).m_203636_(resourcekey).orElse((Holder.Reference>)null); -- if (holder == null) { -+ Holder> holder = this.getConfiguredFeature(p_222905_, p_222906_, p_222907_, p_222908_, p_222909_, this.m_60011_(p_222905_, p_222907_), resourcekey); -+ net.minecraftforge.event.level.SaplingGrowTreeEvent event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_222905_, p_222909_, p_222907_, holder); -+ if (event.getResult().equals(net.minecraftforge.eventbus.api.Event.Result.DENY) || event.getFeature() == null) { + Holder> holder = p_222905_.m_8891_().m_175515_(Registries.f_256911_).m_203636_(resourcekey).orElse((Holder.Reference>)null); ++ var event = net.minecraftforge.event.ForgeEventFactory.blockGrowFeature(p_222905_, p_222909_, p_222907_, holder); ++ holder = event.getFeature(); ++ if (event.getResult() == net.minecraftforge.eventbus.api.Event.Result.DENY) return false; + if (holder == null) { return false; } else { -- ConfiguredFeature configuredfeature = holder.m_203334_(); -+ ConfiguredFeature configuredfeature = event.getFeature().m_203334_(); - BlockState blockstate = p_222905_.m_6425_(p_222907_).m_76188_(); - p_222905_.m_7731_(p_222907_, blockstate, 4); - if (configuredfeature.m_224953_(p_222905_, p_222906_, p_222909_, p_222907_)) { diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 80214a2d77..d7171fa3af 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -624,7 +624,7 @@ public class ForgeEventFactory return !blockGrowFeature(level, randomSource, pos, null).getResult().equals(Result.DENY); } - public static SaplingGrowTreeEvent blockGrowFeature(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> holder) + public static SaplingGrowTreeEvent blockGrowFeature(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> holder) { SaplingGrowTreeEvent event = new SaplingGrowTreeEvent(level, randomSource, pos, holder); MinecraftForge.EVENT_BUS.post(event); diff --git a/src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java b/src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java index d7770db2ab..8c4dfea3bf 100644 --- a/src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java +++ b/src/main/java/net/minecraftforge/event/level/SaplingGrowTreeEvent.java @@ -40,7 +40,7 @@ public class SaplingGrowTreeEvent extends LevelEvent private final RandomSource randomSource; private final BlockPos pos; @Nullable - private Holder> feature; + private Holder> feature; @Deprecated(forRemoval = true, since = "1.19.2") public SaplingGrowTreeEvent(LevelAccessor level, RandomSource randomSource, BlockPos pos) @@ -48,7 +48,7 @@ public class SaplingGrowTreeEvent extends LevelEvent this(level, randomSource, pos, null); } - public SaplingGrowTreeEvent(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> feature) + public SaplingGrowTreeEvent(LevelAccessor level, RandomSource randomSource, BlockPos pos, @Nullable Holder> feature) { super(level); this.randomSource = randomSource; @@ -76,15 +76,24 @@ public class SaplingGrowTreeEvent extends LevelEvent * {@return the holder of the feature which will be placed, possibly null} */ @Nullable - public Holder> getFeature() { + public Holder> getFeature() + { return feature; } - public void setFeature(@Nullable Holder> feature) { + /** + * @param feature a {@linkplain Holder} referencing a tree feature to be placed instead of the current feature. + */ + public void setFeature(@Nullable Holder> feature) + { this.feature = feature; } - public void setFeature(ResourceKey> featureKey) { + /** + * @param featureKey a {@linkplain ResourceKey} referencing a tree feature to be placed instead of the current feature. + */ + public void setFeature(ResourceKey> featureKey) + { this.feature = this.getLevel().registryAccess().registryOrThrow(Registries.CONFIGURED_FEATURE).getHolder(featureKey).orElse(null); } }