Files
Purpur/patches/server/0097-Allow-beehives-to-generate-with-saplings.patch

233 lines
14 KiB
Diff

From 6ae6c2225a23e5c65f3c362d5ae6fcda80bf94a8 Mon Sep 17 00:00:00 2001
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
Date: Sat, 4 Jan 2020 11:41:38 -0600
Subject: [PATCH] Allow beehives to generate with saplings
---
.../net/minecraft/server/BlockSapling.java | 3 ++
.../server/WorldGenFeatureTreeBeehive.java | 21 ++++++++++--
.../minecraft/server/WorldGenGroundBush.java | 10 +++---
.../server/WorldGenTreeAbstract.java | 2 +-
.../server/WorldGenTreeProvider.java | 16 +++++++--
.../server/WorldGenTreeProviderBirch.java | 10 +++++-
.../server/WorldGenTreeProviderOak.java | 33 ++++++++++++++++++-
.../net/pl3x/purpur/PurpurWorldConfig.java | 5 +++
8 files changed, 88 insertions(+), 12 deletions(-)
diff --git a/src/main/java/net/minecraft/server/BlockSapling.java b/src/main/java/net/minecraft/server/BlockSapling.java
index 54c49e9ef9..425beb43cc 100644
--- a/src/main/java/net/minecraft/server/BlockSapling.java
+++ b/src/main/java/net/minecraft/server/BlockSapling.java
@@ -17,6 +17,7 @@ public class BlockSapling extends BlockPlant implements IBlockFragilePlantElemen
protected static final VoxelShape b = Block.a(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D);
private final WorldGenTreeProvider c;
public static TreeType treeType; // CraftBukkit
+ public static boolean growing = false; // Purpur
protected BlockSapling(WorldGenTreeProvider worldgentreeprovider, Block.Info block_info) {
super(block_info);
@@ -65,7 +66,9 @@ public class BlockSapling extends BlockPlant implements IBlockFragilePlantElemen
if ((Integer) iblockdata.get(BlockSapling.STAGE) == 0) {
worldserver.setTypeAndData(blockposition, (IBlockData) iblockdata.a((IBlockState) BlockSapling.STAGE), 4);
} else {
+ growing = true; // Purpur
this.c.a(worldserver, worldserver.getChunkProvider().getChunkGenerator(), blockposition, iblockdata, random);
+ growing = false; // Purpur
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java b/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java
index 4fbc53068f..e85e096cd6 100644
--- a/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java
+++ b/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java
@@ -24,6 +24,19 @@ public class WorldGenFeatureTreeBeehive extends WorldGenFeatureTree {
@Override
public void a(GeneratorAccess generatoraccess, Random random, List<BlockPosition> list, List<BlockPosition> list1, Set<BlockPosition> set, StructureBoundingBox structureboundingbox) {
if (random.nextFloat() < this.b) {
+ // Purpur start
+ if (BlockSapling.growing) {
+ MinecraftServer.getServer().scheduleOnMain(() -> {
+ generate(generatoraccess, random, list, list1, set, structureboundingbox);
+ });
+ } else {
+ generate(generatoraccess, random, list, list1, set, structureboundingbox);
+ }
+ }
+ }
+
+ private void generate(GeneratorAccess generatoraccess, Random random, List<BlockPosition> list, List<BlockPosition> list1, Set<BlockPosition> set, StructureBoundingBox structureboundingbox) {
+ // Purpur end
EnumDirection enumdirection = BlockBeehive.a[random.nextInt(BlockBeehive.a.length)];
int i = !list1.isEmpty() ? Math.max(((BlockPosition) list1.get(0)).getY() - 1, ((BlockPosition) list.get(0)).getY()) : Math.min(((BlockPosition) list.get(0)).getY() + 1 + random.nextInt(3), ((BlockPosition) list.get(list.size() - 1)).getY());
List<BlockPosition> list2 = (List) list.stream().filter((blockposition) -> {
@@ -50,11 +63,15 @@ public class WorldGenFeatureTreeBeehive extends WorldGenFeatureTree {
}
}
- }
+ //} // Purpur
}
@Override
public <T> T a(DynamicOps<T> dynamicops) {
- return (new Dynamic(dynamicops, dynamicops.createMap(ImmutableMap.of(dynamicops.createString("type"), dynamicops.createString(IRegistry.w.getKey(this.a).toString()), dynamicops.createString("probability"), dynamicops.createFloat(this.b))))).getValue();
+ // Purpur start - decompile error
+ ImmutableMap.Builder<T, T> builder = ImmutableMap.builder();
+ builder.put(dynamicops.createString("type"), dynamicops.createString(IRegistry.w.getKey(this.a).toString())).put(dynamicops.createString("probability"), dynamicops.createFloat(this.b));
+ return (new Dynamic<T>(dynamicops, dynamicops.createMap(builder.build()))).getValue();
+ // Purpur end
}
}
diff --git a/src/main/java/net/minecraft/server/WorldGenGroundBush.java b/src/main/java/net/minecraft/server/WorldGenGroundBush.java
index bd756fd201..815ec6c6bb 100644
--- a/src/main/java/net/minecraft/server/WorldGenGroundBush.java
+++ b/src/main/java/net/minecraft/server/WorldGenGroundBush.java
@@ -38,10 +38,12 @@ public class WorldGenGroundBush extends WorldGenTreeAbstract<WorldGenFeatureTree
return true;
}
+ // Purpur - this doesnt belong here...
// CraftBukkit start - decompile error
- @Override
- public boolean generate(GeneratorAccess generatoraccess, ChunkGenerator<? extends GeneratorSettingsDefault> chunkgenerator, Random random, BlockPosition blockposition, WorldGenFeatureTreeConfiguration fc) {
- return super.a(generatoraccess, chunkgenerator, random, blockposition, fc);
- }
+ //@Override
+ //public boolean generate(GeneratorAccess generatoraccess, ChunkGenerator<? extends GeneratorSettingsDefault> chunkgenerator, Random random, BlockPosition blockposition, WorldGenFeatureTreeConfiguration fc) {
+ // return super.a(generatoraccess, chunkgenerator, random, blockposition, fc);
+ //}
// CraftBukkit end
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java b/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java
index b7c1919ae4..0e5db4e3b2 100644
--- a/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java
+++ b/src/main/java/net/minecraft/server/WorldGenTreeAbstract.java
@@ -117,7 +117,7 @@ public abstract class WorldGenTreeAbstract<T extends WorldGenFeatureTreeConfigur
iworldwriter.setTypeAndData(blockposition, iblockdata, 19);
}
- public final boolean a(GeneratorAccess generatoraccess, ChunkGenerator<? extends GeneratorSettingsDefault> chunkgenerator, Random random, BlockPosition blockposition, T t0) {
+ public final boolean generate(GeneratorAccess generatoraccess, ChunkGenerator<? extends GeneratorSettingsDefault> chunkgenerator, Random random, BlockPosition blockposition, T t0) { // Purpur
Set<BlockPosition> set = Sets.newHashSet();
Set<BlockPosition> set1 = Sets.newHashSet();
Set<BlockPosition> set2 = Sets.newHashSet();
diff --git a/src/main/java/net/minecraft/server/WorldGenTreeProvider.java b/src/main/java/net/minecraft/server/WorldGenTreeProvider.java
index 17ee097ac8..69ddae1bcc 100644
--- a/src/main/java/net/minecraft/server/WorldGenTreeProvider.java
+++ b/src/main/java/net/minecraft/server/WorldGenTreeProvider.java
@@ -8,11 +8,11 @@ public abstract class WorldGenTreeProvider {
public WorldGenTreeProvider() {}
- @Nullable
- protected abstract WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> b(Random random);
+ @Nullable protected WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> getFeature(GeneratorAccess generatoraccess, BiomeBase biome) { return b(generatoraccess.getRandom()); } // Purpur
+ @Nullable protected abstract WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> b(Random random);
public boolean a(GeneratorAccess generatoraccess, ChunkGenerator<?> chunkgenerator, BlockPosition blockposition, IBlockData iblockdata, Random random) {
- WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> worldgenfeatureconfigured = this.b(random);
+ WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> worldgenfeatureconfigured = getFeature(generatoraccess, generatoraccess.getBiome(blockposition)); // Purpur
if (worldgenfeatureconfigured == null) {
return false;
@@ -65,6 +65,16 @@ public abstract class WorldGenTreeProvider {
BlockSapling.treeType = TreeType.MEGA_REDWOOD;
} else if (worldgentreeabstract.c == BiomeDecoratorGroups.MEGA_JUNGLE_TREE) {
BlockSapling.treeType = TreeType.JUNGLE;
+ } else if (worldgentreeabstract.c == BiomeDecoratorGroups.k) {
+ BlockSapling.treeType = TreeType.TREE;
+ } else if (worldgentreeabstract.c == BiomeDecoratorGroups.l) {
+ BlockSapling.treeType = TreeType.BIG_TREE;
+ } else if (worldgentreeabstract.c == BiomeDecoratorGroups.m) {
+ BlockSapling.treeType = TreeType.TREE;
+ } else if (worldgentreeabstract.c == BiomeDecoratorGroups.n) {
+ BlockSapling.treeType = TreeType.BIG_TREE;
+ } else if (worldgentreeabstract.c == BiomeDecoratorGroups.o) {
+ BlockSapling.treeType = TreeType.BIRCH;
} else {
throw new IllegalArgumentException("Unknown tree generator " + worldgentreeabstract);
}
diff --git a/src/main/java/net/minecraft/server/WorldGenTreeProviderBirch.java b/src/main/java/net/minecraft/server/WorldGenTreeProviderBirch.java
index 0915718854..55c4ec0e55 100644
--- a/src/main/java/net/minecraft/server/WorldGenTreeProviderBirch.java
+++ b/src/main/java/net/minecraft/server/WorldGenTreeProviderBirch.java
@@ -10,6 +10,14 @@ public class WorldGenTreeProviderBirch extends WorldGenTreeProvider {
@Nullable
@Override
protected WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> b(Random random) {
- return WorldGenerator.NORMAL_TREE.b((WorldGenFeatureConfiguration) BiomeDecoratorGroups.BIRCH_TREE);
+ return WorldGenerator.NORMAL_TREE.b(BiomeDecoratorGroups.BIRCH_TREE); // Purpur - decompile error
}
+
+ // Purpur start
+ @Override
+ protected WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> getFeature(GeneratorAccess generatoraccess, BiomeBase biome) {
+ if (!generatoraccess.getMinecraftWorld().purpurConfig.beeHivesGenerateFromSaplings) return b(generatoraccess.getRandom());
+ return WorldGenerator.NORMAL_TREE.b(biome == Biomes.FLOWER_FOREST ? BiomeDecoratorGroups.o : BiomeDecoratorGroups.BIRCH_TREE);
+ }
+ // Purpur end
}
diff --git a/src/main/java/net/minecraft/server/WorldGenTreeProviderOak.java b/src/main/java/net/minecraft/server/WorldGenTreeProviderOak.java
index 1998d19776..b9264c84c9 100644
--- a/src/main/java/net/minecraft/server/WorldGenTreeProviderOak.java
+++ b/src/main/java/net/minecraft/server/WorldGenTreeProviderOak.java
@@ -10,6 +10,37 @@ public class WorldGenTreeProviderOak extends WorldGenTreeProvider {
@Nullable
@Override
protected WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> b(Random random) {
- return random.nextInt(10) == 0 ? WorldGenerator.FANCY_TREE.b((WorldGenFeatureConfiguration) BiomeDecoratorGroups.FANCY_TREE) : WorldGenerator.NORMAL_TREE.b((WorldGenFeatureConfiguration) BiomeDecoratorGroups.NORMAL_TREE);
+ return random.nextInt(10) == 0 ? WorldGenerator.FANCY_TREE.b(BiomeDecoratorGroups.FANCY_TREE) : WorldGenerator.NORMAL_TREE.b(BiomeDecoratorGroups.NORMAL_TREE); // Purpur - decompile error
}
+
+ // Purpur start
+ @Override
+ protected WorldGenFeatureConfigured<WorldGenFeatureSmallTreeConfigurationConfiguration, ?> getFeature(GeneratorAccess generatoraccess, BiomeBase biome) {
+ if (!generatoraccess.getMinecraftWorld().purpurConfig.beeHivesGenerateFromSaplings) return b(generatoraccess.getRandom());
+ boolean fancy = generatoraccess.getRandom().nextInt(10) == 0;
+ boolean more = biome == Biomes.PLAINS || biome == Biomes.SUNFLOWER_PLAINS;
+ boolean bees = more || biome == Biomes.FLOWER_FOREST;
+ if (fancy) {
+ if (bees) {
+ if (more) {
+ return WorldGenerator.FANCY_TREE.b(BiomeDecoratorGroups.l);
+ } else {
+ return WorldGenerator.FANCY_TREE.b(BiomeDecoratorGroups.n);
+ }
+ } else {
+ return WorldGenerator.FANCY_TREE.b(BiomeDecoratorGroups.FANCY_TREE);
+ }
+ } else {
+ if (bees) {
+ if (more) {
+ return WorldGenerator.NORMAL_TREE.b(BiomeDecoratorGroups.k);
+ } else {
+ return WorldGenerator.NORMAL_TREE.b(BiomeDecoratorGroups.m);
+ }
+ } else {
+ return WorldGenerator.NORMAL_TREE.b(BiomeDecoratorGroups.NORMAL_TREE);
+ }
+ }
+ }
+ // Purpur end
}
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 57fbb298d3..340697ae53 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -144,6 +144,11 @@ public class PurpurWorldConfig {
milkCuresBadOmen = getBoolean("milk-cures-bad-omen", milkCuresBadOmen);
}
+ public boolean beeHivesGenerateFromSaplings = false;
+ private void beehiveSettings() {
+ beeHivesGenerateFromSaplings = getBoolean("beehive.can-generate-from-saplings", beeHivesGenerateFromSaplings);
+ }
+
public boolean hayBlockFallDamage = true;
private void hayBlockFallDamage() {
hayBlockFallDamage = getBoolean("hay-block-fall-damage", hayBlockFallDamage);
--
2.24.0