mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-04-13 03:06:12 +00:00
Iris doesnt need worlds anymore
This commit is contained in:
@@ -1,66 +0,0 @@
|
||||
package com.volmit.iris.gen.bindings;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
|
||||
public abstract class BukkitTerrainProvider extends ChunkGenerator implements TerrainProvider
|
||||
{
|
||||
private final TerrainTarget target;
|
||||
|
||||
public BukkitTerrainProvider(TerrainTarget target)
|
||||
{
|
||||
this.target = target;
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract void generate(Random random, int x, int z, TerrainChunk chunk);
|
||||
|
||||
@Override
|
||||
public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome)
|
||||
{
|
||||
TerrainChunk terrain = TerrainChunk.create(world);
|
||||
generate(random, x, z, terrain);
|
||||
return terrain;
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract boolean canSpawn(World world, int x, int z);
|
||||
|
||||
@Override
|
||||
public boolean canSpawnDefault(World world, int x, int z)
|
||||
{
|
||||
return super.canSpawn(world, x, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract List<BlockPopulator> getDefaultPopulators(World world);
|
||||
|
||||
@Override
|
||||
public abstract Location getFixedSpawnLocation(World world, Random random);
|
||||
|
||||
@Override
|
||||
public abstract boolean isParallelCapable();
|
||||
|
||||
@Override
|
||||
public abstract boolean shouldGenerateCaves();
|
||||
|
||||
@Override
|
||||
public abstract boolean shouldGenerateDecorations();
|
||||
|
||||
@Override
|
||||
public abstract boolean shouldGenerateMobs();
|
||||
|
||||
@Override
|
||||
public abstract boolean shouldGenerateStructures();
|
||||
|
||||
@Override
|
||||
public TerrainTarget getTarget()
|
||||
{
|
||||
return target;
|
||||
}
|
||||
}
|
||||
1305
src/main/java/com/volmit/iris/gen/scaffold/HeightedFakeWorld.java
Normal file
1305
src/main/java/com/volmit/iris/gen/scaffold/HeightedFakeWorld.java
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
package com.volmit.iris.gen.bindings;
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import com.volmit.iris.gen.IrisChunkGenerator;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public class IrisGenConfiguration
|
||||
{
|
||||
private TerrainTarget target;
|
||||
|
||||
@Builder.Default
|
||||
private int threads = 16;
|
||||
|
||||
@Builder.Default
|
||||
private String dimension = "";
|
||||
|
||||
public IrisChunkGenerator buildGenerator()
|
||||
{
|
||||
return new IrisChunkGenerator(this);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.volmit.iris.gen.bindings;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
|
||||
import org.bukkit.generator.ChunkGenerator.ChunkData;
|
||||
import org.bukkit.material.MaterialData;
|
||||
|
||||
@@ -16,39 +16,26 @@ public class IrisTerrainChunk implements TerrainChunk
|
||||
private final Biome[] biome2D;
|
||||
private final IrisBiomeStorage biome3D;
|
||||
private final ChunkData rawChunkData;
|
||||
private final Constructor<?> construct = buildConstruct();
|
||||
private final BiomeGrid storage;
|
||||
|
||||
public IrisTerrainChunk(int maxHeight)
|
||||
{
|
||||
rawChunkData = createChunkData(maxHeight);
|
||||
biome2D = Iris.biome3d ? null : new Biome[256];
|
||||
biome3D = Iris.biome3d ? new IrisBiomeStorage() : null;
|
||||
this(null, maxHeight);
|
||||
}
|
||||
|
||||
private Constructor<?> buildConstruct()
|
||||
public IrisTerrainChunk(BiomeGrid storage, int maxHeight)
|
||||
{
|
||||
try
|
||||
{
|
||||
Class<?> chunkDatazz = Class.forName("org.bukkit.craftbukkit." + Iris.nmsTag() + ".generator.CraftChunkData");
|
||||
Constructor<?> construct = chunkDatazz.getConstructor(int.class);
|
||||
construct.setAccessible(true);
|
||||
return construct;
|
||||
}
|
||||
|
||||
catch(Throwable e)
|
||||
{
|
||||
Iris.error("Failed create construct for ChunkData(int)");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
this.storage = storage;
|
||||
rawChunkData = createChunkData(maxHeight);
|
||||
biome2D = storage != null ? null : Iris.biome3d ? null : new Biome[256];
|
||||
biome3D = storage != null ? null : Iris.biome3d ? new IrisBiomeStorage() : null;
|
||||
}
|
||||
|
||||
private ChunkData createChunkData(int maxHeight)
|
||||
{
|
||||
try
|
||||
{
|
||||
return (ChunkData) construct.newInstance(maxHeight);
|
||||
return Bukkit.createChunkData(new HeightedFakeWorld(maxHeight));
|
||||
}
|
||||
|
||||
catch(Throwable e)
|
||||
@@ -62,6 +49,11 @@ public class IrisTerrainChunk implements TerrainChunk
|
||||
@Override
|
||||
public Biome getBiome(int x, int z)
|
||||
{
|
||||
if(storage != null)
|
||||
{
|
||||
return storage.getBiome(x, z);
|
||||
}
|
||||
|
||||
if(biome2D != null)
|
||||
{
|
||||
return biome2D[(z << 4) | x];
|
||||
@@ -73,6 +65,11 @@ public class IrisTerrainChunk implements TerrainChunk
|
||||
@Override
|
||||
public Biome getBiome(int x, int y, int z)
|
||||
{
|
||||
if(storage != null)
|
||||
{
|
||||
return storage.getBiome(x, y, z);
|
||||
}
|
||||
|
||||
if(biome2D != null)
|
||||
{
|
||||
return biome2D[(z << 4) | x];
|
||||
@@ -84,6 +81,12 @@ public class IrisTerrainChunk implements TerrainChunk
|
||||
@Override
|
||||
public void setBiome(int x, int z, Biome bio)
|
||||
{
|
||||
if(storage != null)
|
||||
{
|
||||
storage.setBiome(x, z, bio);
|
||||
return;
|
||||
}
|
||||
|
||||
if(biome2D != null)
|
||||
{
|
||||
biome2D[(z << 4) | x] = bio;
|
||||
@@ -96,6 +99,12 @@ public class IrisTerrainChunk implements TerrainChunk
|
||||
@Override
|
||||
public void setBiome(int x, int y, int z, Biome bio)
|
||||
{
|
||||
if(storage != null)
|
||||
{
|
||||
storage.setBiome(x, y, z, bio);
|
||||
return;
|
||||
}
|
||||
|
||||
if(biome2D != null)
|
||||
{
|
||||
biome2D[(z << 4) | x] = bio;
|
||||
@@ -177,4 +186,10 @@ public class IrisTerrainChunk implements TerrainChunk
|
||||
{
|
||||
return rawChunkData.getData(x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChunkData getRaw()
|
||||
{
|
||||
return rawChunkData;
|
||||
}
|
||||
}
|
||||
|
||||
23
src/main/java/com/volmit/iris/gen/scaffold/IrisWorlds.java
Normal file
23
src/main/java/com/volmit/iris/gen/scaffold/IrisWorlds.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import org.bukkit.World;
|
||||
|
||||
import com.volmit.iris.gen.IrisChunkGenerator;
|
||||
|
||||
public class IrisWorlds
|
||||
{
|
||||
public boolean isIrisWorld(World world)
|
||||
{
|
||||
return world.getGenerator() instanceof Provisioned;
|
||||
}
|
||||
|
||||
public IrisChunkGenerator getProvider(World world)
|
||||
{
|
||||
if(isIrisWorld(world))
|
||||
{
|
||||
return (IrisChunkGenerator) ((Provisioned) world.getGenerator()).getProvider();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
public interface Provisioned
|
||||
{
|
||||
public TerrainProvider getProvider();
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.volmit.iris.gen.bindings;
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Biome;
|
||||
@@ -18,6 +18,16 @@ public interface TerrainChunk extends BiomeGrid, ChunkData
|
||||
return new IrisTerrainChunk(maxHeight);
|
||||
}
|
||||
|
||||
public static TerrainChunk create(World world, BiomeGrid grid)
|
||||
{
|
||||
return create(world.getMaxHeight(), grid);
|
||||
}
|
||||
|
||||
public static TerrainChunk create(int maxHeight, BiomeGrid grid)
|
||||
{
|
||||
return new IrisTerrainChunk(grid, maxHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get biome at x, z within chunk being generated
|
||||
*
|
||||
@@ -114,4 +124,6 @@ public interface TerrainChunk extends BiomeGrid, ChunkData
|
||||
* outside the chunk's bounds
|
||||
*/
|
||||
public BlockData getBlockData(int x, int y, int z);
|
||||
|
||||
public ChunkData getRaw();
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.volmit.iris.gen.bindings;
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
|
||||
public interface TerrainProvider
|
||||
@@ -13,21 +11,17 @@ public interface TerrainProvider
|
||||
|
||||
public void generate(Random random, int x, int z, TerrainChunk chunk);
|
||||
|
||||
public boolean canSpawn(World world, int x, int z);
|
||||
public boolean canSpawn(int x, int z);
|
||||
|
||||
public boolean canSpawnDefault(World world, int x, int z);
|
||||
|
||||
public List<BlockPopulator> getDefaultPopulators(World world);
|
||||
|
||||
public Location getFixedSpawnLocation(World world, Random random);
|
||||
public List<BlockPopulator> getPopulators();
|
||||
|
||||
public boolean isParallelCapable();
|
||||
|
||||
public boolean shouldGenerateMobs();
|
||||
|
||||
public boolean shouldGenerateCaves();
|
||||
|
||||
|
||||
public boolean shouldGenerateDecorations();
|
||||
|
||||
public boolean shouldGenerateMobs();
|
||||
|
||||
public boolean shouldGenerateStructures();
|
||||
public boolean shouldGenerateVanillaStructures();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package com.volmit.iris.gen.bindings;
|
||||
package com.volmit.iris.gen.scaffold;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.World.Environment;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.volmit.iris.util.KList;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -16,6 +20,20 @@ public class TerrainTarget
|
||||
private Environment environment;
|
||||
private String name;
|
||||
private File folder;
|
||||
private static final KList<Player> emptyPlayers = new KList<>();
|
||||
private World realWorld;
|
||||
|
||||
public void setRealWorld(World realWorld)
|
||||
{
|
||||
if(this.realWorld == null || realWorld != this.realWorld)
|
||||
{
|
||||
this.realWorld = realWorld;
|
||||
this.seed = realWorld.getSeed();
|
||||
this.folder = realWorld.getWorldFolder();
|
||||
this.environment = realWorld.getEnvironment();
|
||||
this.name = realWorld.getName();
|
||||
}
|
||||
}
|
||||
|
||||
public static TerrainTarget from(World world)
|
||||
{
|
||||
@@ -25,7 +43,61 @@ public class TerrainTarget
|
||||
.seed(world.getSeed())
|
||||
.folder(world.getWorldFolder())
|
||||
.name(world.getName())
|
||||
.realWorld(world)
|
||||
.build();
|
||||
//@done
|
||||
}
|
||||
|
||||
public List<Player> getPlayers()
|
||||
{
|
||||
return realWorld != null ? realWorld.getPlayers() : emptyPlayers;
|
||||
}
|
||||
|
||||
public boolean isWorld(World world)
|
||||
{
|
||||
return world.getName().equals(getName()) && world.getSeed() == getSeed() && getEnvironment().equals(world.getEnvironment()) && world.getWorldFolder().equals(getFolder());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
if(this == obj)
|
||||
return true;
|
||||
if(obj == null)
|
||||
return false;
|
||||
if(getClass() != obj.getClass())
|
||||
return false;
|
||||
TerrainTarget other = (TerrainTarget) obj;
|
||||
if(environment != other.environment)
|
||||
return false;
|
||||
if(folder == null)
|
||||
{
|
||||
if(other.folder != null)
|
||||
return false;
|
||||
}
|
||||
else if(!folder.equals(other.folder))
|
||||
return false;
|
||||
if(name == null)
|
||||
{
|
||||
if(other.name != null)
|
||||
return false;
|
||||
}
|
||||
else if(!name.equals(other.name))
|
||||
return false;
|
||||
if(seed != other.seed)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((environment == null) ? 0 : environment.hashCode());
|
||||
result = prime * result + ((folder == null) ? 0 : folder.hashCode());
|
||||
result = prime * result + ((name == null) ? 0 : name.hashCode());
|
||||
result = prime * result + (int) (seed ^ (seed >>> 32));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user