mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 17:37:42 +01:00
233 lines
14 KiB
Diff
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
|
|
|