mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-15 07:01:36 +08:00
18c3716c49
This enables us a fast reference to the entities current chunk instead of having to look it up by hashmap lookups. We also store counts by type to further enable other performance optimizations in later patches.
313 lines
14 KiB
Diff
313 lines
14 KiB
Diff
From e894331adaa569423be8472929da3a809c4106bb Mon Sep 17 00:00:00 2001
|
|
From: Byteflux <byte@byteflux.net>
|
|
Date: Wed, 2 Mar 2016 02:17:54 -0600
|
|
Subject: [PATCH] Generator Settings
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
index db09711e4..7e5cd8042 100644
|
|
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
|
@@ -147,4 +147,34 @@ public class PaperWorldConfig {
|
|
disableEndCredits = getBoolean("game-mechanics.disable-end-credits", false);
|
|
log("End credits disabled: " + disableEndCredits);
|
|
}
|
|
+
|
|
+ public boolean generateCanyon;
|
|
+ public boolean generateCaves;
|
|
+ public boolean generateDungeon;
|
|
+ public boolean generateFortress;
|
|
+ public boolean generateMineshaft;
|
|
+ public boolean generateMonument;
|
|
+ public boolean generateStronghold;
|
|
+ public boolean generateTemple;
|
|
+ public boolean generateVillage;
|
|
+ public boolean generateFlatBedrock;
|
|
+ public boolean disableExtremeHillsEmeralds;
|
|
+ public boolean disableExtremeHillsMonsterEggs;
|
|
+ public boolean disableMesaAdditionalGold;
|
|
+
|
|
+ private void generatorSettings() {
|
|
+ generateCanyon = getBoolean("generator-settings.canyon", true);
|
|
+ generateCaves = getBoolean("generator-settings.caves", true);
|
|
+ generateDungeon = getBoolean("generator-settings.dungeon", true);
|
|
+ generateFortress = getBoolean("generator-settings.fortress", true);
|
|
+ generateMineshaft = getBoolean("generator-settings.mineshaft", true);
|
|
+ generateMonument = getBoolean("generator-settings.monument", true);
|
|
+ generateStronghold = getBoolean("generator-settings.stronghold", true);
|
|
+ generateTemple = getBoolean("generator-settings.temple", true);
|
|
+ generateVillage = getBoolean("generator-settings.village", true);
|
|
+ generateFlatBedrock = getBoolean("generator-settings.flat-bedrock", false);
|
|
+ disableExtremeHillsEmeralds = getBoolean("generator-settings.disable-extreme-hills-emeralds", false);
|
|
+ disableExtremeHillsMonsterEggs = getBoolean("generator-settings.disable-extreme-hills-monster-eggs", false);
|
|
+ disableMesaAdditionalGold = getBoolean("generator-settings.disable-mesa-additional-gold", false);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java
|
|
index 1b7599769..ab6db7468 100644
|
|
--- a/src/main/java/net/minecraft/server/BiomeBase.java
|
|
+++ b/src/main/java/net/minecraft/server/BiomeBase.java
|
|
@@ -176,7 +176,7 @@ public abstract class BiomeBase {
|
|
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition();
|
|
|
|
for (int l1 = 255; l1 >= 0; --l1) {
|
|
- if (l1 <= random.nextInt(5)) {
|
|
+ if (l1 <= (world.paperConfig.generateFlatBedrock ? 0 : random.nextInt(5))) { // Paper - Configurable flat bedrock
|
|
chunksnapshot.a(k1, l1, j1, BiomeBase.c);
|
|
} else {
|
|
IBlockData iblockdata2 = chunksnapshot.a(k1, l1, j1);
|
|
diff --git a/src/main/java/net/minecraft/server/BiomeBigHills.java b/src/main/java/net/minecraft/server/BiomeBigHills.java
|
|
index 9c39bf7af..61680ab50 100644
|
|
--- a/src/main/java/net/minecraft/server/BiomeBigHills.java
|
|
+++ b/src/main/java/net/minecraft/server/BiomeBigHills.java
|
|
@@ -32,6 +32,9 @@ public class BiomeBigHills extends BiomeBase {
|
|
int k;
|
|
int l;
|
|
|
|
+ // Paper start - Disable extreme hills emeralds
|
|
+ if (!world.paperConfig.disableExtremeHillsEmeralds) {
|
|
+
|
|
for (j = 0; j < i; ++j) {
|
|
k = random.nextInt(16);
|
|
l = random.nextInt(28) + 4;
|
|
@@ -43,6 +46,12 @@ public class BiomeBigHills extends BiomeBase {
|
|
}
|
|
}
|
|
|
|
+ }
|
|
+ // Paper end block
|
|
+
|
|
+ // Paper start - Disable extreme hills monster eggs
|
|
+ if (!world.paperConfig.disableExtremeHillsMonsterEggs) {
|
|
+
|
|
for (i = 0; i < 7; ++i) {
|
|
j = random.nextInt(16);
|
|
k = random.nextInt(64);
|
|
@@ -50,6 +59,9 @@ public class BiomeBigHills extends BiomeBase {
|
|
this.x.generate(world, random, blockposition.a(j, k, l));
|
|
}
|
|
|
|
+ }
|
|
+ // Paper end block
|
|
+
|
|
}
|
|
|
|
public void a(World world, Random random, ChunkSnapshot chunksnapshot, int i, int j, double d0) {
|
|
diff --git a/src/main/java/net/minecraft/server/BiomeMesa.java b/src/main/java/net/minecraft/server/BiomeMesa.java
|
|
index f2dd96a32..67f8ad8ed 100644
|
|
--- a/src/main/java/net/minecraft/server/BiomeMesa.java
|
|
+++ b/src/main/java/net/minecraft/server/BiomeMesa.java
|
|
@@ -99,7 +99,7 @@ public class BiomeMesa extends BiomeBase {
|
|
chunksnapshot.a(l, i2, k, BiomeMesa.a);
|
|
}
|
|
|
|
- if (i2 <= random.nextInt(5)) {
|
|
+ if (i2 <= (world.paperConfig.generateFlatBedrock ? 0 : random.nextInt(5))) { // Paper - Configurable flat bedrock
|
|
chunksnapshot.a(l, i2, k, BiomeMesa.c);
|
|
} else if (l1 < 15 || this.I) {
|
|
IBlockData iblockdata2 = chunksnapshot.a(l, i2, k);
|
|
@@ -259,6 +259,7 @@ public class BiomeMesa extends BiomeBase {
|
|
|
|
protected void a(World world, Random random) {
|
|
super.a(world, random);
|
|
+ if (world.paperConfig.disableMesaAdditionalGold) return; // Paper
|
|
this.a(world, random, 20, this.n, 32, 80);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderFlat.java b/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
|
index 1452ff657..8b1b79380 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
|
@@ -26,7 +26,7 @@ public class ChunkProviderFlat implements ChunkGenerator {
|
|
if (flag) {
|
|
Map map = this.d.b();
|
|
|
|
- if (map.containsKey("village")) {
|
|
+ if (map.containsKey("village") && world.paperConfig.generateVillage) { // Paper
|
|
Map map1 = (Map) map.get("village");
|
|
|
|
if (!map1.containsKey("size")) {
|
|
@@ -36,19 +36,19 @@ public class ChunkProviderFlat implements ChunkGenerator {
|
|
this.e.put("Village", new WorldGenVillage(map1));
|
|
}
|
|
|
|
- if (map.containsKey("biome_1")) {
|
|
+ if (map.containsKey("biome_1") && world.paperConfig.generateTemple) { // Paper
|
|
this.e.put("Temple", new WorldGenLargeFeature((Map) map.get("biome_1")));
|
|
}
|
|
|
|
- if (map.containsKey("mineshaft")) {
|
|
+ if (map.containsKey("mineshaft") && world.paperConfig.generateMineshaft) { // Paper
|
|
this.e.put("Mineshaft", new WorldGenMineshaft((Map) map.get("mineshaft")));
|
|
}
|
|
|
|
- if (map.containsKey("stronghold")) {
|
|
+ if (map.containsKey("stronghold") && world.paperConfig.generateStronghold) { // Paper
|
|
this.e.put("Stronghold", new WorldGenStronghold((Map) map.get("stronghold")));
|
|
}
|
|
|
|
- if (map.containsKey("oceanmonument")) {
|
|
+ if (map.containsKey("oceanmonument") && world.paperConfig.generateMonument) { // Paper
|
|
this.e.put("Monument", new WorldGenMonument((Map) map.get("oceanmonument")));
|
|
}
|
|
}
|
|
@@ -61,7 +61,7 @@ public class ChunkProviderFlat implements ChunkGenerator {
|
|
this.i = new WorldGenLakes(Blocks.LAVA);
|
|
}
|
|
|
|
- this.g = this.d.b().containsKey("dungeon");
|
|
+ this.g = world.paperConfig.generateDungeon && this.d.b().containsKey("dungeon"); // Paper
|
|
int j = 0;
|
|
int k = 0;
|
|
boolean flag1 = true;
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
|
index 22a24a39f..ee9e00e64 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
|
@@ -160,32 +160,32 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
|
this.a(i, j, chunksnapshot);
|
|
this.D = this.n.getWorldChunkManager().getBiomeBlock(this.D, i * 16, j * 16, 16, 16);
|
|
this.a(i, j, chunksnapshot, this.D);
|
|
- if (this.s.r) {
|
|
+ if (this.s.r && this.n.paperConfig.generateCaves) { // Paper
|
|
this.v.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
- if (this.s.A) {
|
|
+ if (this.s.A && this.n.paperConfig.generateCanyon) { // Paper
|
|
this.A.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
if (this.o) {
|
|
- if (this.s.w) {
|
|
+ if (this.s.w && this.n.paperConfig.generateMineshaft) { // Paper
|
|
this.y.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
- if (this.s.v) {
|
|
+ if (this.s.v&& this.n.paperConfig.generateVillage) { // Paper
|
|
this.x.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
- if (this.s.u) {
|
|
+ if (this.s.u && this.n.paperConfig.generateStronghold) { // Paper
|
|
this.w.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
- if (this.s.x) {
|
|
+ if (this.s.x && this.n.paperConfig.generateTemple) { // Paper
|
|
this.z.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
- if (this.s.y) {
|
|
+ if (this.s.y && this.n.paperConfig.generateMonument) { // Paper
|
|
this.B.a(this.n, i, j, chunksnapshot);
|
|
}
|
|
|
|
@@ -329,23 +329,23 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
|
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j);
|
|
|
|
if (this.o) {
|
|
- if (this.s.w) {
|
|
+ if (this.s.w && this.n.paperConfig.generateMineshaft) { // Paper
|
|
this.y.a(this.n, this.i, chunkcoordintpair);
|
|
}
|
|
|
|
- if (this.s.v) {
|
|
+ if (this.s.v && this.n.paperConfig.generateVillage) { // Paper
|
|
flag = this.x.a(this.n, this.i, chunkcoordintpair);
|
|
}
|
|
|
|
- if (this.s.u) {
|
|
+ if (this.s.u && this.n.paperConfig.generateStronghold) { // Paper
|
|
this.w.a(this.n, this.i, chunkcoordintpair);
|
|
}
|
|
|
|
- if (this.s.x) {
|
|
+ if (this.s.x && this.n.paperConfig.generateTemple) { // Paper
|
|
this.z.a(this.n, this.i, chunkcoordintpair);
|
|
}
|
|
|
|
- if (this.s.y) {
|
|
+ if (this.s.y && this.n.paperConfig.generateMonument) { // Paper
|
|
this.B.a(this.n, this.i, chunkcoordintpair);
|
|
}
|
|
|
|
@@ -374,7 +374,7 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
|
}
|
|
}
|
|
|
|
- if (this.s.s) {
|
|
+ if (this.s.s && this.n.paperConfig.generateDungeon) { // Paper
|
|
for (k1 = 0; k1 < this.s.t; ++k1) {
|
|
l1 = this.i.nextInt(16) + 8;
|
|
i2 = this.i.nextInt(256);
|
|
@@ -443,23 +443,23 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
|
|
|
public void recreateStructures(Chunk chunk, int i, int j) {
|
|
if (this.o) {
|
|
- if (this.s.w) {
|
|
+ if (this.s.w && this.n.paperConfig.generateMineshaft) { // Paper
|
|
this.y.a(this.n, i, j, (ChunkSnapshot) null);
|
|
}
|
|
|
|
- if (this.s.v) {
|
|
+ if (this.s.v && this.n.paperConfig.generateVillage) { // Paper
|
|
this.x.a(this.n, i, j, (ChunkSnapshot) null);
|
|
}
|
|
|
|
- if (this.s.u) {
|
|
+ if (this.s.u && this.n.paperConfig.generateStronghold) { // Paper
|
|
this.w.a(this.n, i, j, (ChunkSnapshot) null);
|
|
}
|
|
|
|
- if (this.s.x) {
|
|
+ if (this.s.x && this.n.paperConfig.generateTemple) { // Paper
|
|
this.z.a(this.n, i, j, (ChunkSnapshot) null);
|
|
}
|
|
|
|
- if (this.s.y) {
|
|
+ if (this.s.y && this.n.paperConfig.generateMonument) { // Paper
|
|
this.B.a(this.n, i, j, (ChunkSnapshot) null);
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkProviderHell.java b/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
|
index 9f738749f..12bc10ff0 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
|
@@ -151,7 +151,10 @@ public class ChunkProviderHell implements ChunkGenerator {
|
|
IBlockData iblockdata1 = ChunkProviderHell.b;
|
|
|
|
for (int l1 = 127; l1 >= 0; --l1) {
|
|
- if (l1 < 127 - this.p.nextInt(5) && l1 > this.p.nextInt(5)) {
|
|
+ // Paper start - Configurable flat bedrock worldgen
|
|
+ if (l1 < 127 - (n.paperConfig.generateFlatBedrock ? 0 : this.p.nextInt(5)) &&
|
|
+ l1 > (n.paperConfig.generateFlatBedrock ? 0 : this.p.nextInt(5))) {
|
|
+ // Paper end
|
|
IBlockData iblockdata2 = chunksnapshot.a(i1, l1, l);
|
|
|
|
if (iblockdata2.getBlock() != null && iblockdata2.getMaterial() != Material.AIR) {
|
|
@@ -384,6 +387,6 @@ public class ChunkProviderHell implements ChunkGenerator {
|
|
}
|
|
|
|
public void recreateStructures(Chunk chunk, int i, int j) {
|
|
- this.I.a(this.n, i, j, (ChunkSnapshot) null);
|
|
+ if (this.n.paperConfig.generateFortress) this.I.a(this.n, i, j, (ChunkSnapshot) null);
|
|
}
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
|
|
index 66a80a776..34fd7edfe 100644
|
|
--- a/src/main/java/net/minecraft/server/StructureGenerator.java
|
|
+++ b/src/main/java/net/minecraft/server/StructureGenerator.java
|
|
@@ -128,6 +128,7 @@ public abstract class StructureGenerator extends WorldGenBase {
|
|
}
|
|
|
|
public boolean a(World world, BlockPosition blockposition) {
|
|
+ if (this.g == null) return false; // Paper
|
|
this.a(world);
|
|
ObjectIterator objectiterator = this.c.values().iterator();
|
|
|
|
--
|
|
2.18.0
|
|
|