mirror of
https://github.com/BentoBoxWorld/Boxed.git
synced 2024-06-24 10:04:49 +02:00
Fix water below y=0 issue
This commit is contained in:
parent
52a5aea3e0
commit
8392af1913
|
@ -23,6 +23,7 @@ import world.bentobox.bentobox.api.flags.Flag.Mode;
|
||||||
import world.bentobox.bentobox.api.flags.Flag.Type;
|
import world.bentobox.bentobox.api.flags.Flag.Type;
|
||||||
import world.bentobox.bentobox.managers.RanksManager;
|
import world.bentobox.bentobox.managers.RanksManager;
|
||||||
import world.bentobox.boxed.generators.biomes.BoxedBiomeGenerator;
|
import world.bentobox.boxed.generators.biomes.BoxedBiomeGenerator;
|
||||||
|
import world.bentobox.boxed.generators.biomes.NetherSeedBiomeGenerator;
|
||||||
import world.bentobox.boxed.generators.biomes.SeedBiomeGenerator;
|
import world.bentobox.boxed.generators.biomes.SeedBiomeGenerator;
|
||||||
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator;
|
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator;
|
||||||
import world.bentobox.boxed.generators.chunks.BoxedBlockPopulator;
|
import world.bentobox.boxed.generators.chunks.BoxedBlockPopulator;
|
||||||
|
@ -59,6 +60,7 @@ public class Boxed extends GameModeAddon {
|
||||||
private AdvancementsManager advManager;
|
private AdvancementsManager advManager;
|
||||||
private AbstractBoxedChunkGenerator netherChunkGenerator;
|
private AbstractBoxedChunkGenerator netherChunkGenerator;
|
||||||
private World baseWorld;
|
private World baseWorld;
|
||||||
|
private World baseWorldNether;
|
||||||
private World seedWorld;
|
private World seedWorld;
|
||||||
private World seedWorldNether;
|
private World seedWorldNether;
|
||||||
//private World seedWorldEnd;
|
//private World seedWorldEnd;
|
||||||
|
@ -166,16 +168,34 @@ public class Boxed extends GameModeAddon {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createNether(String worldName) {
|
private void createNether(String worldName) {
|
||||||
|
// Create vanilla seed nether world
|
||||||
log("Creating Boxed Seed Nether world ...");
|
log("Creating Boxed Seed Nether world ...");
|
||||||
seedWorldNether = WorldCreator
|
// This creates a vanilla base world with biomes
|
||||||
.name(SEED + NETHER)
|
AbstractBoxedChunkGenerator seedBaseGen = new BoxedSeedChunkGenerator(this, Environment.NETHER);
|
||||||
.generator(new BoxedSeedChunkGenerator(this, Environment.NETHER))
|
baseWorldNether = WorldCreator
|
||||||
|
.name(SEED+NETHER+BASE)
|
||||||
|
.generator(seedBaseGen)
|
||||||
.environment(Environment.NETHER)
|
.environment(Environment.NETHER)
|
||||||
.seed(getSettings().getSeed())
|
.seed(getSettings().getSeed())
|
||||||
.createWorld();
|
.createWorld();
|
||||||
seedWorldNether.setDifficulty(Difficulty.EASY); // No damage wanted in this world.
|
baseWorldNether.setDifficulty(Difficulty.PEACEFUL);
|
||||||
|
baseWorldNether.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
||||||
|
copyChunks(baseWorldNether, seedBaseGen);
|
||||||
|
// Create seed world
|
||||||
|
// This copies a base world with custom biomes
|
||||||
|
log("Creating Boxed Biomed Nether world ...");
|
||||||
|
|
||||||
copyChunks(seedWorldNether, this.netherChunkGenerator);
|
seedWorldNether = WorldCreator
|
||||||
|
.name(SEED+NETHER)
|
||||||
|
.generator(new BoxedSeedChunkGenerator(this, Environment.NETHER, new NetherSeedBiomeGenerator(this, seedBaseGen)))
|
||||||
|
.environment(Environment.NETHER)
|
||||||
|
.seed(getSettings().getSeed())
|
||||||
|
.createWorld();
|
||||||
|
seedWorldNether.setDifficulty(Difficulty.EASY);
|
||||||
|
|
||||||
|
seedWorldNether.setSpawnLocation(settings.getNetherSeedX(), 64, settings.getNetherSeedZ());
|
||||||
|
|
||||||
|
copyChunks(seedWorldNether, netherChunkGenerator);
|
||||||
|
|
||||||
if (getServer().getWorld(worldName + NETHER) == null) {
|
if (getServer().getWorld(worldName + NETHER) == null) {
|
||||||
log("Creating Boxed's Nether...");
|
log("Creating Boxed's Nether...");
|
||||||
|
|
|
@ -120,8 +120,6 @@ public abstract class AbstractSeedBiomeProvider extends BiomeProvider {
|
||||||
int yy = Math.max(Math.min(y * 4, worldInfo.getMaxHeight()), worldInfo.getMinHeight()); // To handle bug in Spigot
|
int yy = Math.max(Math.min(y * 4, worldInfo.getMaxHeight()), worldInfo.getMinHeight()); // To handle bug in Spigot
|
||||||
|
|
||||||
Biome b = snapshot.getBiome(xx, yy, zz);
|
Biome b = snapshot.getBiome(xx, yy, zz);
|
||||||
if (y > DEPTH )
|
|
||||||
BentoBox.getInstance().logDebug("Returning vanilla biome " + b + " for " + worldInfo.getName() + " " + x + " " + y + " " + z);
|
|
||||||
return Objects.requireNonNull(b);
|
return Objects.requireNonNull(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +141,7 @@ public abstract class AbstractSeedBiomeProvider extends BiomeProvider {
|
||||||
}
|
}
|
||||||
Vector s = new Vector(x, 0, z);
|
Vector s = new Vector(x, 0, z);
|
||||||
Vector l = getClosestIsland(s);
|
Vector l = getClosestIsland(s);
|
||||||
BentoBox.getInstance().logDebug("Closest island is " + Util.xyz(l));
|
//BentoBox.getInstance().logDebug("Closest island is " + Util.xyz(l));
|
||||||
double dis = l.distance(s);
|
double dis = l.distance(s);
|
||||||
double d = dis / dist; // Normalize
|
double d = dis / dist; // Normalize
|
||||||
Vector direction = s.subtract(l);
|
Vector direction = s.subtract(l);
|
||||||
|
|
|
@ -1,45 +1,17 @@
|
||||||
package world.bentobox.boxed.generators.chunks;
|
package world.bentobox.boxed.generators.chunks;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.ChunkSnapshot;
|
import org.bukkit.ChunkSnapshot;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Banner;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.BlockState;
|
|
||||||
import org.bukkit.block.CreatureSpawner;
|
|
||||||
import org.bukkit.block.Sign;
|
|
||||||
import org.bukkit.entity.AbstractHorse;
|
|
||||||
import org.bukkit.entity.Ageable;
|
|
||||||
import org.bukkit.entity.ChestedHorse;
|
|
||||||
import org.bukkit.entity.Horse;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.entity.Tameable;
|
|
||||||
import org.bukkit.entity.Villager;
|
|
||||||
import org.bukkit.generator.BiomeProvider;
|
|
||||||
import org.bukkit.generator.BlockPopulator;
|
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.generator.WorldInfo;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.material.Attachable;
|
|
||||||
import org.bukkit.material.Colorable;
|
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
|
||||||
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock;
|
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock;
|
||||||
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintCreatureSpawner;
|
|
||||||
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity;
|
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity;
|
||||||
import world.bentobox.bentobox.util.Pair;
|
import world.bentobox.bentobox.util.Pair;
|
||||||
import world.bentobox.boxed.Boxed;
|
import world.bentobox.boxed.Boxed;
|
||||||
|
@ -80,10 +52,12 @@ public abstract class AbstractBoxedChunkGenerator extends ChunkGenerator {
|
||||||
protected abstract List<ChestData> getChests(Chunk chunk);
|
protected abstract List<ChestData> getChests(Chunk chunk);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Get the chunk snapshot for these chunk coords or null if there is none.
|
||||||
* @param x chunk x
|
* @param x chunk x
|
||||||
* @param z chunk z
|
* @param z chunk z
|
||||||
* @return chunk snapshot or null if there is none
|
* @return chunk snapshot or null if there is none
|
||||||
*/
|
*/
|
||||||
|
@Nullable
|
||||||
public ChunkSnapshot getChunk(int x, int z) {
|
public ChunkSnapshot getChunk(int x, int z) {
|
||||||
return chunks.get(new Pair<>(x, z)).snapshot;
|
return chunks.get(new Pair<>(x, z)).snapshot;
|
||||||
}
|
}
|
||||||
|
@ -94,34 +68,6 @@ public abstract class AbstractBoxedChunkGenerator extends ChunkGenerator {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void generateNoise(WorldInfo worldInfo, Random r, int chunkX, int chunkZ, ChunkData cd) {
|
|
||||||
|
|
||||||
int height = worldInfo.getMaxHeight();
|
|
||||||
int minY = worldInfo.getMinHeight();
|
|
||||||
int xx = repeatCalc(chunkX);
|
|
||||||
int zz = repeatCalc(chunkZ);
|
|
||||||
Pair<Integer, Integer> coords = new Pair<>(xx, zz);
|
|
||||||
if (!chunks.containsKey(coords)) {
|
|
||||||
// This should never be needed because islands should abut each other
|
|
||||||
cd.setRegion(0, minY, 0, 16, 0, 16, Material.WATER);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Copy the chunk
|
|
||||||
ChunkSnapshot chunk = chunks.get(coords).snapshot;
|
|
||||||
copyChunkVerbatim(cd, chunk, minY, height);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void copyChunkVerbatim(ChunkData cd, ChunkSnapshot chunk, int minY, int height) {
|
|
||||||
for (int x = 0; x < 16; x ++) {
|
|
||||||
for (int z = 0; z < 16; z++) {
|
|
||||||
for (int y = minY; y < height; y++) {
|
|
||||||
cd.setBlock(x, y, z, chunk.getBlockData(x, y, z));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the repeating value for a given size
|
* Calculates the repeating value for a given size
|
||||||
|
|
|
@ -3,17 +3,14 @@ package world.bentobox.boxed.generators.chunks;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.ChunkSnapshot;
|
import org.bukkit.ChunkSnapshot;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Banner;
|
import org.bukkit.block.Banner;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
@ -30,22 +27,18 @@ import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.generator.BiomeProvider;
|
import org.bukkit.generator.BiomeProvider;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
|
||||||
import org.bukkit.generator.WorldInfo;
|
import org.bukkit.generator.WorldInfo;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.material.Attachable;
|
|
||||||
import org.bukkit.material.Colorable;
|
import org.bukkit.material.Colorable;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
|
import world.bentobox.bentobox.BentoBox;
|
||||||
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock;
|
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintBlock;
|
||||||
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintCreatureSpawner;
|
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintCreatureSpawner;
|
||||||
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity;
|
import world.bentobox.bentobox.blueprints.dataobjects.BlueprintEntity;
|
||||||
import world.bentobox.bentobox.util.Pair;
|
import world.bentobox.bentobox.util.Pair;
|
||||||
import world.bentobox.boxed.Boxed;
|
import world.bentobox.boxed.Boxed;
|
||||||
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator.ChestData;
|
|
||||||
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator.ChunkStore;
|
|
||||||
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator.EntityData;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Chunk generator for all environments
|
* Chunk generator for all environments
|
||||||
|
@ -196,4 +189,32 @@ public class BoxedChunkGenerator extends AbstractBoxedChunkGenerator {
|
||||||
return cs;
|
return cs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void generateNoise(WorldInfo worldInfo, Random r, int chunkX, int chunkZ, ChunkData cd) {
|
||||||
|
int height = worldInfo.getMaxHeight();
|
||||||
|
int minY = worldInfo.getMinHeight();
|
||||||
|
int xx = repeatCalc(chunkX);
|
||||||
|
int zz = repeatCalc(chunkZ);
|
||||||
|
ChunkSnapshot chunk = this.getChunk(xx,zz);
|
||||||
|
if (chunk == null) {
|
||||||
|
// This should never be needed because islands should abut each other
|
||||||
|
//cd.setRegion(0, minY, 0, 16, 0, 16, Material.WATER);
|
||||||
|
BentoBox.getInstance().logDebug("No chunks found for " + xx + " " + zz);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Copy the chunk
|
||||||
|
copyChunkVerbatim(cd, chunk, minY, height);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void copyChunkVerbatim(ChunkData cd, ChunkSnapshot chunk, int minY, int height) {
|
||||||
|
for (int x = 0; x < 16; x ++) {
|
||||||
|
for (int z = 0; z < 16; z++) {
|
||||||
|
for (int y = minY; y < height; y++) {
|
||||||
|
cd.setBlock(x, y, z, chunk.getBlockData(x, y, z));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user