diff --git a/worldgeneratorapi-impl/pom.xml b/worldgeneratorapi-impl/pom.xml
index 29dbf07..4f862db 100644
--- a/worldgeneratorapi-impl/pom.xml
+++ b/worldgeneratorapi-impl/pom.xml
@@ -71,7 +71,7 @@
org.spigotmc
spigot
- 1.13.2-R0.1-SNAPSHOT
+ 1.14-R0.1-SNAPSHOT
provided
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BaseChunkGeneratorImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BaseChunkGeneratorImpl.java
index 80c15f1..2da2bcf 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BaseChunkGeneratorImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BaseChunkGeneratorImpl.java
@@ -3,18 +3,18 @@ package nl.rutgerkok.worldgeneratorapi.internal;
import java.util.Objects;
import org.bukkit.World;
-import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
-import org.bukkit.craftbukkit.v1_13_R2.generator.NormalChunkGenerator;
+import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
-import net.minecraft.server.v1_13_R2.ChunkGenerator;
-import net.minecraft.server.v1_13_R2.ChunkGeneratorAbstract;
-import net.minecraft.server.v1_13_R2.ChunkProviderDebug;
-import net.minecraft.server.v1_13_R2.ChunkProviderFlat;
-import net.minecraft.server.v1_13_R2.ChunkProviderGenerate;
-import net.minecraft.server.v1_13_R2.ChunkProviderHell;
-import net.minecraft.server.v1_13_R2.ChunkProviderTheEnd;
-import net.minecraft.server.v1_13_R2.SeededRandom;
-import net.minecraft.server.v1_13_R2.WorldServer;
+import net.minecraft.server.v1_14_R1.ChunkGenerator;
+import net.minecraft.server.v1_14_R1.ChunkGeneratorAbstract;
+import net.minecraft.server.v1_14_R1.ChunkProviderDebug;
+import net.minecraft.server.v1_14_R1.ChunkProviderFlat;
+import net.minecraft.server.v1_14_R1.ChunkProviderGenerate;
+import net.minecraft.server.v1_14_R1.ChunkProviderHell;
+import net.minecraft.server.v1_14_R1.ChunkProviderTheEnd;
+import net.minecraft.server.v1_14_R1.GeneratorAccess;
+import net.minecraft.server.v1_14_R1.SeededRandom;
+import net.minecraft.server.v1_14_R1.WorldServer;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.ChunkDataImpl;
import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.InjectedChunkGenerator;
@@ -38,20 +38,11 @@ final class BaseChunkGeneratorImpl implements BaseChunkGenerator {
static BaseChunkGenerator fromMinecraft(World world) {
WorldServer worldServer = ((CraftWorld) world).getHandle();
ChunkGenerator> chunkGenerator = worldServer.getChunkProvider().getChunkGenerator();
- if (chunkGenerator instanceof NormalChunkGenerator>) {
- try {
- chunkGenerator = (ChunkGenerator>) ReflectionUtil
- .getFieldOfType(chunkGenerator, ChunkGenerator.class)
- .get(chunkGenerator);
- } catch (IllegalAccessException e) {
- throw new RuntimeException("Error getting chunkGenerator from NormalChunkGenerator", e);
- }
- }
if (chunkGenerator instanceof InjectedChunkGenerator) {
return ((InjectedChunkGenerator) chunkGenerator).getBaseChunkGenerator();
}
if (isSupported(chunkGenerator)) {
- return new BaseChunkGeneratorImpl(chunkGenerator);
+ return new BaseChunkGeneratorImpl(worldServer, chunkGenerator);
}
throw new UnsupportedOperationException(
@@ -71,11 +62,13 @@ final class BaseChunkGeneratorImpl implements BaseChunkGenerator {
}
private final ChunkGenerator> internal;
+ private final GeneratorAccess world;
- private BaseChunkGeneratorImpl(ChunkGenerator> chunkGenerator) {
+ private BaseChunkGeneratorImpl(GeneratorAccess world, ChunkGenerator> chunkGenerator) {
if (chunkGenerator instanceof InjectedChunkGenerator) {
throw new IllegalArgumentException("Double-wrapping");
}
+ this.world = Objects.requireNonNull(world, "world");
this.internal = Objects.requireNonNull(chunkGenerator, "internal");
}
@@ -87,13 +80,13 @@ final class BaseChunkGeneratorImpl implements BaseChunkGenerator {
// Make sure this matches isSupported above
if (internal instanceof ChunkProviderGenerate) {
- ((ChunkProviderGenerate) internal).a(chunk.getChunkX(), chunk.getChunkZ(), blocks.getHandle());
+ ((ChunkProviderGenerate) internal).buildNoise(world, blocks.getHandle());
} else if (internal instanceof ChunkProviderFlat) {
- ((ChunkProviderFlat) internal).a(chunk.getChunkX(), chunk.getChunkZ(), blocks.getHandle());
+ ((ChunkProviderFlat) internal).buildNoise(world, blocks.getHandle());
} else if (internal instanceof ChunkProviderHell) {
- ((ChunkProviderHell) internal).a(chunk.getChunkX(), chunk.getChunkZ(), blocks.getHandle());
+ ((ChunkProviderHell) internal).buildNoise(world, blocks.getHandle());
} else if (internal instanceof ChunkProviderTheEnd) {
- ((ChunkProviderTheEnd) internal).a(chunk.getChunkX(), chunk.getChunkZ(), blocks.getHandle());
+ ((ChunkProviderTheEnd) internal).buildNoise(world, blocks.getHandle());
} else if (internal instanceof ChunkProviderDebug) {
// Generate nothing - there is no base terrain
} else {
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BiomeGeneratorImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BiomeGeneratorImpl.java
index f2dd69c..60957bd 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BiomeGeneratorImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/BiomeGeneratorImpl.java
@@ -3,10 +3,10 @@ package nl.rutgerkok.worldgeneratorapi.internal;
import java.util.Objects;
import org.bukkit.block.Biome;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
-import net.minecraft.server.v1_13_R2.BiomeBase;
-import net.minecraft.server.v1_13_R2.WorldChunkManager;
+import net.minecraft.server.v1_14_R1.BiomeBase;
+import net.minecraft.server.v1_14_R1.WorldChunkManager;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
public final class BiomeGeneratorImpl implements BiomeGenerator {
@@ -30,7 +30,8 @@ public final class BiomeGeneratorImpl implements BiomeGenerator {
@Override
public Biome[] getZoomedOutBiomes(int minX, int minZ, int xSize, int zSize) {
- BiomeBase[] biomeArray = internal.getBiomes(minX, minZ, xSize, zSize);
+ // Last parameter doesn't seem to be used anywhere V
+ BiomeBase[] biomeArray = internal.a(minX, minZ, xSize, zSize, false);
Biome[] biomes = new Biome[xSize * zSize];
for (int i = 0; i < xSize * zSize; i++) {
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/DecorationAreaImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/DecorationAreaImpl.java
index d8c281f..0ebb4cc 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/DecorationAreaImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/DecorationAreaImpl.java
@@ -6,58 +6,72 @@ import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBanner;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBeacon;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlockEntityState;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlockState;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBrewingStand;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftChest;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftCommandBlock;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftComparator;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftCreatureSpawner;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftDaylightDetector;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftDispenser;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftDropper;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftEnchantingTable;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftEndGateway;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftEnderChest;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftFurnace;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftHopper;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftJukebox;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftShulkerBox;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftSign;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftSkull;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftStructureBlock;
-import org.bukkit.craftbukkit.v1_13_R2.block.data.CraftBlockData;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBanner;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBarrel;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBeacon;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBell;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlastFurnace;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlockEntityState;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlockState;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBrewingStand;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftCampfire;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftChest;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftCommandBlock;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftComparator;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftCreatureSpawner;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftDaylightDetector;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftDispenser;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftDropper;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftEnchantingTable;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftEndGateway;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftEnderChest;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftFurnace;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftHopper;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftJigsaw;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftJukebox;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftLectern;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftShulkerBox;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftSign;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftSkull;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftSmoker;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftStructureBlock;
+import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData;
-import net.minecraft.server.v1_13_R2.BlockPosition;
-import net.minecraft.server.v1_13_R2.IBlockData;
-import net.minecraft.server.v1_13_R2.IChunkAccess;
-import net.minecraft.server.v1_13_R2.NBTTagCompound;
-import net.minecraft.server.v1_13_R2.RegionLimitedWorldAccess;
-import net.minecraft.server.v1_13_R2.TileEntity;
-import net.minecraft.server.v1_13_R2.TileEntityBanner;
-import net.minecraft.server.v1_13_R2.TileEntityBeacon;
-import net.minecraft.server.v1_13_R2.TileEntityBrewingStand;
-import net.minecraft.server.v1_13_R2.TileEntityChest;
-import net.minecraft.server.v1_13_R2.TileEntityCommand;
-import net.minecraft.server.v1_13_R2.TileEntityComparator;
-import net.minecraft.server.v1_13_R2.TileEntityDispenser;
-import net.minecraft.server.v1_13_R2.TileEntityDropper;
-import net.minecraft.server.v1_13_R2.TileEntityEnchantTable;
-import net.minecraft.server.v1_13_R2.TileEntityEndGateway;
-import net.minecraft.server.v1_13_R2.TileEntityEnderChest;
-import net.minecraft.server.v1_13_R2.TileEntityFurnace;
-import net.minecraft.server.v1_13_R2.TileEntityHopper;
-import net.minecraft.server.v1_13_R2.TileEntityJukeBox;
-import net.minecraft.server.v1_13_R2.TileEntityLightDetector;
-import net.minecraft.server.v1_13_R2.TileEntityMobSpawner;
-import net.minecraft.server.v1_13_R2.TileEntityShulkerBox;
-import net.minecraft.server.v1_13_R2.TileEntitySign;
-import net.minecraft.server.v1_13_R2.TileEntitySkull;
-import net.minecraft.server.v1_13_R2.TileEntityStructure;
-import net.minecraft.server.v1_13_R2.BlockPosition.MutableBlockPosition;
+import net.minecraft.server.v1_14_R1.BlockPosition;
+import net.minecraft.server.v1_14_R1.BlockPosition.MutableBlockPosition;
+import net.minecraft.server.v1_14_R1.IBlockData;
+import net.minecraft.server.v1_14_R1.IChunkAccess;
+import net.minecraft.server.v1_14_R1.NBTTagCompound;
+import net.minecraft.server.v1_14_R1.RegionLimitedWorldAccess;
+import net.minecraft.server.v1_14_R1.TileEntity;
+import net.minecraft.server.v1_14_R1.TileEntityBanner;
+import net.minecraft.server.v1_14_R1.TileEntityBarrel;
+import net.minecraft.server.v1_14_R1.TileEntityBeacon;
+import net.minecraft.server.v1_14_R1.TileEntityBell;
+import net.minecraft.server.v1_14_R1.TileEntityBlastFurnace;
+import net.minecraft.server.v1_14_R1.TileEntityBrewingStand;
+import net.minecraft.server.v1_14_R1.TileEntityCampfire;
+import net.minecraft.server.v1_14_R1.TileEntityChest;
+import net.minecraft.server.v1_14_R1.TileEntityCommand;
+import net.minecraft.server.v1_14_R1.TileEntityComparator;
+import net.minecraft.server.v1_14_R1.TileEntityDispenser;
+import net.minecraft.server.v1_14_R1.TileEntityDropper;
+import net.minecraft.server.v1_14_R1.TileEntityEnchantTable;
+import net.minecraft.server.v1_14_R1.TileEntityEndGateway;
+import net.minecraft.server.v1_14_R1.TileEntityEnderChest;
+import net.minecraft.server.v1_14_R1.TileEntityFurnace;
+import net.minecraft.server.v1_14_R1.TileEntityHopper;
+import net.minecraft.server.v1_14_R1.TileEntityJigsaw;
+import net.minecraft.server.v1_14_R1.TileEntityJukeBox;
+import net.minecraft.server.v1_14_R1.TileEntityLectern;
+import net.minecraft.server.v1_14_R1.TileEntityLightDetector;
+import net.minecraft.server.v1_14_R1.TileEntityMobSpawner;
+import net.minecraft.server.v1_14_R1.TileEntityShulkerBox;
+import net.minecraft.server.v1_14_R1.TileEntitySign;
+import net.minecraft.server.v1_14_R1.TileEntitySkull;
+import net.minecraft.server.v1_14_R1.TileEntitySmoker;
+import net.minecraft.server.v1_14_R1.TileEntityStructure;
import nl.rutgerkok.worldgeneratorapi.decoration.DecorationArea;
class DecorationAreaImpl implements DecorationArea {
@@ -98,17 +112,27 @@ class DecorationAreaImpl implements DecorationArea {
Material material = CraftBlockData.fromData(internal.getType(position)).getMaterial();
// This code is based on the following: (this code is similar, in that it
// creates tile entities that have not been added to a world)
- // https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/browse/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java?at=421c1728c81e2f729dff88da2ac96535d2b8e5e8#227
+ // https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/browse/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBlockState.java?at=a2d787f6ebeb72fa7d5750788221fb9a0d838ac4#290
// If new tile entities are added, don't forget to add them here
switch (material) {
- case SIGN:
- case WALL_SIGN:
+ case ACACIA_SIGN:
+ case ACACIA_WALL_SIGN:
+ case BIRCH_SIGN:
+ case BIRCH_WALL_SIGN:
+ case DARK_OAK_SIGN:
+ case DARK_OAK_WALL_SIGN:
+ case JUNGLE_SIGN:
+ case JUNGLE_WALL_SIGN:
+ case OAK_SIGN:
+ case OAK_WALL_SIGN:
+ case SPRUCE_SIGN:
+ case SPRUCE_WALL_SIGN:
return new CraftSign(material, (TileEntitySign) tileEntity);
case CHEST:
case TRAPPED_CHEST:
return new CraftChest(material, (TileEntityChest) tileEntity);
case FURNACE:
- return new CraftFurnace(material, (TileEntityFurnace) tileEntity);
+ return new CraftFurnace<>(material, (TileEntityFurnace) tileEntity);
case DISPENSER:
return new CraftDispenser(material, (TileEntityDispenser) tileEntity);
case DROPPER:
@@ -203,6 +227,21 @@ class DecorationAreaImpl implements DecorationArea {
return new CraftDaylightDetector(material, (TileEntityLightDetector) tileEntity);
case COMPARATOR:
return new CraftComparator(material, (TileEntityComparator) tileEntity);
+ case BARREL:
+ return new CraftBarrel(material, (TileEntityBarrel) tileEntity);
+ case BELL:
+ return new CraftBell(material, (TileEntityBell) tileEntity);
+ case BLAST_FURNACE:
+ return new CraftBlastFurnace(material, (TileEntityBlastFurnace) tileEntity);
+ case CAMPFIRE:
+ return new CraftCampfire(material, (TileEntityCampfire) tileEntity);
+ case JIGSAW:
+ return new CraftJigsaw(material, (TileEntityJigsaw) tileEntity);
+ case LECTERN:
+ return new CraftLectern(material, (TileEntityLectern) tileEntity);
+ case SMOKER:
+ return new CraftSmoker(material, (TileEntitySmoker) tileEntity);
+
default:
return new CraftBlockState(material);
}
@@ -240,10 +279,10 @@ class DecorationAreaImpl implements DecorationArea {
// Update TileEntity data
if (blockState instanceof CraftBlockEntityState) {
- IChunkAccess chunk = internal.y(position);
+ IChunkAccess chunk = internal.x(position);
NBTTagCompound tag = ((CraftBlockEntityState>) blockState).getSnapshotNBT();
TileEntity tileEntity = TileEntity.create(tag);
- chunk.a(position, tileEntity);
+ chunk.setTileEntity(position, tileEntity);
}
}
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/PropertyRegistryImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/PropertyRegistryImpl.java
index 3167915..948bdfb 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/PropertyRegistryImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/PropertyRegistryImpl.java
@@ -12,11 +12,11 @@ import org.bukkit.Keyed;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.block.Biome;
-import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
+import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
-import net.minecraft.server.v1_13_R2.BiomeBase;
-import net.minecraft.server.v1_13_R2.Biomes;
+import net.minecraft.server.v1_14_R1.BiomeBase;
+import net.minecraft.server.v1_14_R1.Biomes;
import nl.rutgerkok.worldgeneratorapi.WorldGeneratorApi;
import nl.rutgerkok.worldgeneratorapi.WorldRef;
import nl.rutgerkok.worldgeneratorapi.property.FloatProperty;
@@ -57,11 +57,11 @@ public final class PropertyRegistryImpl implements PropertyRegistry {
public PropertyRegistryImpl() {
addMinecraftBiomeFloatProperty(TEMPERATURE, BiomeBase::getTemperature);
addMinecraftBiomeFloatProperty(WETNESS, BiomeBase::getHumidity);
- addMinecraftBiomeFloatProperty(BASE_HEIGHT, BiomeBase::h);
- addMinecraftBiomeFloatProperty(HEIGHT_VARIATION, BiomeBase::l);
+ addMinecraftBiomeFloatProperty(BASE_HEIGHT, BiomeBase::g);
+ addMinecraftBiomeFloatProperty(HEIGHT_VARIATION, BiomeBase::k);
addMinecraftWorldProperty(WORLD_SEED, world -> (Long) world.getSeed(), -1L);
addMinecraftWorldFloatProperty(SEA_LEVEL, world -> (float) world.getSeaLevel(), (world, level) -> {
- ((CraftWorld) world).getHandle().b(level.intValue());
+ ((CraftWorld) world).getHandle().c(level.intValue());
if (world.getSeaLevel() != level.intValue()) {
throw new UnsupportedOperationException("Failed to set sea level to " + level.intValue());
}
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldDecoratorImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldDecoratorImpl.java
index b5af9aa..ca8a963 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldDecoratorImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldDecoratorImpl.java
@@ -1,7 +1,6 @@
package nl.rutgerkok.worldgeneratorapi.internal;
import java.util.BitSet;
-import java.util.Collections;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.List;
@@ -12,15 +11,15 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
-import net.minecraft.server.v1_13_R2.BiomeBase;
-import net.minecraft.server.v1_13_R2.BlockFalling;
-import net.minecraft.server.v1_13_R2.BlockPosition;
-import net.minecraft.server.v1_13_R2.ChunkGenerator;
-import net.minecraft.server.v1_13_R2.RegionLimitedWorldAccess;
-import net.minecraft.server.v1_13_R2.SeededRandom;
-import net.minecraft.server.v1_13_R2.WorldGenCarverWrapper;
-import net.minecraft.server.v1_13_R2.WorldGenFeatureConfiguration;
-import net.minecraft.server.v1_13_R2.WorldGenStage;
+import net.minecraft.server.v1_14_R1.BiomeBase;
+import net.minecraft.server.v1_14_R1.BlockPosition;
+import net.minecraft.server.v1_14_R1.ChunkCoordIntPair;
+import net.minecraft.server.v1_14_R1.ChunkGenerator;
+import net.minecraft.server.v1_14_R1.IChunkAccess;
+import net.minecraft.server.v1_14_R1.RegionLimitedWorldAccess;
+import net.minecraft.server.v1_14_R1.SeededRandom;
+import net.minecraft.server.v1_14_R1.WorldGenCarverWrapper;
+import net.minecraft.server.v1_14_R1.WorldGenStage;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator.GeneratingChunk;
import nl.rutgerkok.worldgeneratorapi.decoration.BaseDecorationType;
@@ -52,19 +51,23 @@ public final class WorldDecoratorImpl implements WorldDecorator {
private final Map> customBaseDecorations = new ConcurrentHashMap<>();
private final Set disabledBaseDecorations = EnumSet.noneOf(BaseDecorationType.class);
+ private BiomeBase getCarvingBiome(IChunkAccess ichunkaccess) {
+ return ichunkaccess.getBiome(BlockPosition.ZERO);
+ }
+
@Override
public List getCustomBaseDecorations(BaseDecorationType type) {
Objects.requireNonNull(type, "type");
return customBaseDecorations.computeIfAbsent(type, t -> new CopyOnWriteArrayList<>());
}
+
@Override
public List getCustomDecorations(DecorationType type) {
Objects.requireNonNull(type, "type");
return customDecorations.computeIfAbsent(type, t -> new CopyOnWriteArrayList<>());
}
-
public boolean isDefaultEnabled(BaseDecorationType type) {
return !this.disabledBaseDecorations.contains(type);
}
@@ -89,29 +92,27 @@ public final class WorldDecoratorImpl implements WorldDecorator {
}
}
- @SuppressWarnings("deprecation")
- public void spawnCarvers(RegionLimitedWorldAccess world, WorldGenStage.Features stage, SeededRandom seededrandom) {
+ public void spawnCarvers(IChunkAccess ichunkaccess, WorldGenStage.Features stage, int seaLevel, long seed) {
+ SeededRandom seededrandom = new SeededRandom(seed);
DecorationType decorationType = CARVER_TRANSLATION.get(stage);
if (!this.disabledDecorations.contains(decorationType)) {
- // Spawn default carvers (code based on ChunkGeneratorAbstract.addFeatures)
- int chunkX = world.a();
- int chunkZ = world.b();
- BitSet bitset = world.getChunkAt(chunkX, chunkZ).a(stage);
- for (int lookingChunkX = chunkX - 8; lookingChunkX <= chunkX + 8; ++lookingChunkX) {
- for (int lookingChunkZ = chunkZ - 8; lookingChunkZ <= chunkZ + 8; ++lookingChunkZ) {
- BiomeBase biome = world.getChunkProvider().getChunkGenerator()
- .getWorldChunkManager()
- .getBiome(new BlockPosition(lookingChunkX * 16, 0, lookingChunkZ * 16), null);
- List> list = biome == null ? Collections.emptyList() : biome.a(stage);
+ // Spawn default carvers (code based on ChunkGenerator.doCarving)
+ ChunkCoordIntPair chunkcoordintpair = ichunkaccess.getPos();
+ int i = chunkcoordintpair.x;
+ int j = chunkcoordintpair.z;
+ BitSet bitset = ichunkaccess.a(stage);
+
+ for (int k = i - 8; k <= i + 8; ++k) {
+ for (int l = j - 8; l <= j + 8; ++l) {
+ List> list = this.getCarvingBiome(ichunkaccess).a(stage);
ListIterator> listiterator = list.listIterator();
+
while (listiterator.hasNext()) {
- int i2 = listiterator.nextIndex();
+ int i1 = listiterator.nextIndex();
WorldGenCarverWrapper> worldgencarverwrapper = listiterator.next();
- seededrandom.c(world.getMinecraftWorld().getSeed() + i2, lookingChunkX, lookingChunkZ);
- if (worldgencarverwrapper.a(world, seededrandom, lookingChunkX, lookingChunkZ,
- WorldGenFeatureConfiguration.e)) {
- worldgencarverwrapper.a(world, seededrandom, lookingChunkX, lookingChunkZ, chunkX, chunkZ,
- bitset, WorldGenFeatureConfiguration.e);
+ seededrandom.c(seed + i1, k, l);
+ if (worldgencarverwrapper.a(seededrandom, k, l)) {
+ worldgencarverwrapper.a(ichunkaccess, seededrandom, seaLevel, k, l, i, j, bitset);
}
}
}
@@ -119,14 +120,7 @@ public final class WorldDecoratorImpl implements WorldDecorator {
}
// Spawn custom carvers
- List decorations = this.customDecorations.get(decorationType);
- if (decorations == null) {
- return;
- }
- DecorationArea decorationArea = new DecorationAreaImpl(world);
- for (Decoration decoration : decorations) {
- decoration.decorate(decorationArea, seededrandom);
- }
+ // TODO re-enable now that it operates
}
public void spawnCustomBaseDecorations(BaseDecorationType type, GeneratingChunk chunk) {
@@ -142,7 +136,6 @@ public final class WorldDecoratorImpl implements WorldDecorator {
}
public void spawnDecorations(ChunkGenerator> chunkGenerator, RegionLimitedWorldAccess populationArea) {
- BlockFalling.instaFall = true;
int i = populationArea.a();
int j = populationArea.b();
int k = i * 16;
@@ -175,7 +168,6 @@ public final class WorldDecoratorImpl implements WorldDecorator {
decorationIndex++;
}
}
- BlockFalling.instaFall = false;
}
}
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldGeneratorImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldGeneratorImpl.java
index 792b9b3..889eeb6 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldGeneratorImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/WorldGeneratorImpl.java
@@ -6,13 +6,12 @@ import java.util.Objects;
import javax.annotation.Nullable;
import org.bukkit.World;
-import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
-import net.minecraft.server.v1_13_R2.ChunkGenerator;
-import net.minecraft.server.v1_13_R2.ChunkProviderServer;
-import net.minecraft.server.v1_13_R2.ChunkTaskScheduler;
-import net.minecraft.server.v1_13_R2.WorldChunkManager;
-import net.minecraft.server.v1_13_R2.WorldServer;
+import net.minecraft.server.v1_14_R1.ChunkGenerator;
+import net.minecraft.server.v1_14_R1.ChunkProviderServer;
+import net.minecraft.server.v1_14_R1.WorldChunkManager;
+import net.minecraft.server.v1_14_R1.WorldServer;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
import nl.rutgerkok.worldgeneratorapi.WorldGenerator;
@@ -75,6 +74,13 @@ final class WorldGeneratorImpl implements WorldGenerator {
return worldRef;
}
+ private Class> nmsClass(String simpleName) throws ClassNotFoundException {
+ // Returns a class in the net.mineraft.server package
+ Class> exampleNmsClass = ChunkGenerator.class;
+ String name = exampleNmsClass.getName().replace(exampleNmsClass.getSimpleName(), simpleName);
+ return Class.forName(name);
+ }
+
/**
* Injects {@link InjectedChunkGenerator} into the world, so that we can
* customize how blocks are generated.
@@ -91,10 +97,15 @@ final class WorldGeneratorImpl implements WorldGenerator {
Field chunkGeneratorField = ReflectionUtil.getFieldOfType(chunkProvider, ChunkGenerator.class);
chunkGeneratorField.set(chunkProvider, injected);
- Field chunkTaskSchedulerField = ReflectionUtil.getFieldOfType(chunkProvider, ChunkTaskScheduler.class);
- ChunkTaskScheduler scheduler = (ChunkTaskScheduler) chunkTaskSchedulerField.get(chunkProvider);
- chunkGeneratorField = ReflectionUtil.getFieldOfType(scheduler, ChunkGenerator.class);
- chunkGeneratorField.set(scheduler, injected);
+ try {
+ Field chunkTaskSchedulerField = ReflectionUtil.getFieldOfType(chunkProvider,
+ nmsClass("ChunkTaskScheduler"));
+ Object scheduler = chunkTaskSchedulerField.get(chunkProvider);
+ chunkGeneratorField = ReflectionUtil.getFieldOfType(scheduler, ChunkGenerator.class);
+ chunkGeneratorField.set(scheduler, injected);
+ } catch (ClassNotFoundException e) {
+ // Ignore, we're not on Paper but on Spigot
+ }
this.injected = injected;
} catch (ReflectiveOperationException e) {
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/BiomeGridImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/BiomeGridImpl.java
index f4c840b..16bb574 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/BiomeGridImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/BiomeGridImpl.java
@@ -1,10 +1,10 @@
package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import org.bukkit.block.Biome;
-import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
+import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
-import net.minecraft.server.v1_13_R2.BiomeBase;
+import net.minecraft.server.v1_14_R1.BiomeBase;
public final class BiomeGridImpl implements BiomeGrid {
private final BiomeBase[] biomeArray;
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/ChunkDataImpl.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/ChunkDataImpl.java
index 6d20cba..4b8162b 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/ChunkDataImpl.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/ChunkDataImpl.java
@@ -2,22 +2,29 @@ package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
-import org.bukkit.craftbukkit.v1_13_R2.block.data.CraftBlockData;
+import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData;
import org.bukkit.generator.ChunkGenerator.ChunkData;
-import net.minecraft.server.v1_13_R2.BlockPosition.MutableBlockPosition;
-import net.minecraft.server.v1_13_R2.IBlockData;
-import net.minecraft.server.v1_13_R2.IChunkAccess;
+import net.minecraft.server.v1_14_R1.BlockPosition.MutableBlockPosition;
+import net.minecraft.server.v1_14_R1.HeightMap;
+import net.minecraft.server.v1_14_R1.IBlockData;
+import net.minecraft.server.v1_14_R1.IChunkAccess;
+import net.minecraft.server.v1_14_R1.ProtoChunk;
public final class ChunkDataImpl implements ChunkData {
- private final IChunkAccess internal;
+ private final ProtoChunk internal;
+ private final HeightMap heightmap;
+ private final HeightMap heightmap1;
private final int xOffset;
private final int zOffset;
private final MutableBlockPosition reusableBlockPos = new MutableBlockPosition();
- ChunkDataImpl(IChunkAccess internal) {
+ ChunkDataImpl(ProtoChunk internal) {
this.internal = internal;
+ this.heightmap = internal.b(HeightMap.Type.OCEAN_FLOOR_WG);
+ this.heightmap1 = internal.b(HeightMap.Type.WORLD_SURFACE_WG);
+
this.xOffset = internal.getPos().x * 16;
this.zOffset = internal.getPos().z * 16;
}
@@ -60,6 +67,8 @@ public final class ChunkDataImpl implements ChunkData {
}
private void setBlock(int x, int y, int z, IBlockData blockData) {
+ heightmap.a(x, y, z, blockData);
+ heightmap1.a(x, y, z, blockData);
reusableBlockPos.c(xOffset + x, y, zOffset + z);
internal.setType(reusableBlockPos, blockData, false);
}
diff --git a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/InjectedChunkGenerator.java b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/InjectedChunkGenerator.java
index a320d8a..eba1708 100644
--- a/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/InjectedChunkGenerator.java
+++ b/worldgeneratorapi-impl/src/main/java/nl/rutgerkok/worldgeneratorapi/internal/bukkitoverrides/InjectedChunkGenerator.java
@@ -6,26 +6,27 @@ import java.util.Objects;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import org.bukkit.generator.ChunkGenerator.ChunkData;
-import net.minecraft.server.v1_13_R2.BiomeBase;
-import net.minecraft.server.v1_13_R2.BiomeBase.BiomeMeta;
-import net.minecraft.server.v1_13_R2.BlockPosition;
-import net.minecraft.server.v1_13_R2.ChunkCoordIntPair;
-import net.minecraft.server.v1_13_R2.ChunkGeneratorAbstract;
-import net.minecraft.server.v1_13_R2.ChunkStatus;
-import net.minecraft.server.v1_13_R2.EnumCreatureType;
-import net.minecraft.server.v1_13_R2.GeneratorSettingsDefault;
-import net.minecraft.server.v1_13_R2.HeightMap;
-import net.minecraft.server.v1_13_R2.IChunkAccess;
-import net.minecraft.server.v1_13_R2.MobSpawnerPhantom;
-import net.minecraft.server.v1_13_R2.NoiseGenerator3;
-import net.minecraft.server.v1_13_R2.RegionLimitedWorldAccess;
-import net.minecraft.server.v1_13_R2.SeededRandom;
-import net.minecraft.server.v1_13_R2.SpawnerCreature;
-import net.minecraft.server.v1_13_R2.World;
-import net.minecraft.server.v1_13_R2.WorldGenFeatureSwampHut;
-import net.minecraft.server.v1_13_R2.WorldGenStage;
-import net.minecraft.server.v1_13_R2.WorldGenerator;
-import net.minecraft.server.v1_13_R2.WorldServer;
+import net.minecraft.server.v1_14_R1.BiomeBase;
+import net.minecraft.server.v1_14_R1.BiomeBase.BiomeMeta;
+import net.minecraft.server.v1_14_R1.BlockPosition;
+import net.minecraft.server.v1_14_R1.ChunkCoordIntPair;
+import net.minecraft.server.v1_14_R1.ChunkGeneratorAbstract;
+import net.minecraft.server.v1_14_R1.EnumCreatureType;
+import net.minecraft.server.v1_14_R1.GeneratorAccess;
+import net.minecraft.server.v1_14_R1.GeneratorSettingsDefault;
+import net.minecraft.server.v1_14_R1.HeightMap.Type;
+import net.minecraft.server.v1_14_R1.IChunkAccess;
+import net.minecraft.server.v1_14_R1.MobSpawnerCat;
+import net.minecraft.server.v1_14_R1.MobSpawnerPatrol;
+import net.minecraft.server.v1_14_R1.MobSpawnerPhantom;
+import net.minecraft.server.v1_14_R1.NoiseGenerator3;
+import net.minecraft.server.v1_14_R1.ProtoChunk;
+import net.minecraft.server.v1_14_R1.RegionLimitedWorldAccess;
+import net.minecraft.server.v1_14_R1.SeededRandom;
+import net.minecraft.server.v1_14_R1.SpawnerCreature;
+import net.minecraft.server.v1_14_R1.WorldGenStage;
+import net.minecraft.server.v1_14_R1.WorldGenerator;
+import net.minecraft.server.v1_14_R1.WorldServer;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator.GeneratingChunk;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
@@ -43,7 +44,7 @@ public final class InjectedChunkGenerator extends ChunkGeneratorAbstract getMobsFor(EnumCreatureType enumcreaturetype, BlockPosition blockposition) {
- final BiomeBase biomebase = this.a.getBiome(blockposition);
- return (enumcreaturetype == EnumCreatureType.MONSTER
- && ((WorldGenFeatureSwampHut) WorldGenerator.l).d(this.a, blockposition))
- ? WorldGenerator.l.d()
- : ((enumcreaturetype == EnumCreatureType.MONSTER && WorldGenerator.n.b(this.a, blockposition))
- ? WorldGenerator.n.d()
- : biomebase.getMobs(enumcreaturetype));
+ if (WorldGenerator.SWAMP_HUT.c(this.a, blockposition)) {
+ if (enumcreaturetype == EnumCreatureType.MONSTER) {
+ return WorldGenerator.SWAMP_HUT.e();
+ }
+ if (enumcreaturetype == EnumCreatureType.CREATURE) {
+ return WorldGenerator.SWAMP_HUT.f();
+ }
+ } else if (enumcreaturetype == EnumCreatureType.MONSTER) {
+ if (WorldGenerator.PILLAGER_OUTPOST.a(this.a, blockposition)) {
+ return WorldGenerator.PILLAGER_OUTPOST.e();
+ }
+
+ if (WorldGenerator.OCEAN_MONUMENT.a(this.a, blockposition)) {
+ return WorldGenerator.OCEAN_MONUMENT.e();
+ }
+ }
+
+ return super.getMobsFor(enumcreaturetype, blockposition);
}
@Override
- public GeneratorSettingsDefault getSettings() {
- return defaultSettings;
+ public int getSeaLevel() {
+ return world.getSeaLevel();
}
@Override
@@ -203,8 +244,6 @@ public final class InjectedChunkGenerator extends ChunkGeneratorAbstract world(args.getArgument(0)));
diff --git a/worldgeneratorapi/pom.xml b/worldgeneratorapi/pom.xml
index 3c46b61..ca4264a 100644
--- a/worldgeneratorapi/pom.xml
+++ b/worldgeneratorapi/pom.xml
@@ -69,7 +69,7 @@
org.spigotmc
spigot-api
- 1.13.1-R0.1-SNAPSHOT
+ 1.14-R0.1-SNAPSHOT
provided