Move classes implementing Bukkit/Minecraft API to a separate package

These classes don't play nice with the @ParametersAreNonnullByDefault annotation (since the Bukkit/Minecraft code omits those annotations), so those classes had to be moved to a package that does not have that annotation.
This commit is contained in:
Rutger Kok 2018-09-02 10:04:00 +02:00
parent 0ef5faa3a0
commit 21c5f961fa
9 changed files with 55 additions and 33 deletions

View File

@ -1,4 +1,7 @@
/**
* Decorations are flowers, ores, trees and even villages strongholds.
*/
@ParametersAreNonnullByDefault
package nl.rutgerkok.worldgeneratorapi.decoration;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@ -7,13 +7,14 @@ import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
import net.minecraft.server.v1_13_R2.BiomeBase;
import net.minecraft.server.v1_13_R2.WorldChunkManager;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
final class BiomeGeneratorImpl implements BiomeGenerator {
public final class BiomeGeneratorImpl implements BiomeGenerator {
private final WorldChunkManager internal;
BiomeGeneratorImpl(WorldChunkManager worldChunkManager) {
public BiomeGeneratorImpl(WorldChunkManager worldChunkManager) {
internal = Objects.requireNonNull(worldChunkManager, "worldChunkManager");
}

View File

@ -18,6 +18,7 @@ import nl.rutgerkok.worldgeneratorapi.WorldGenerator;
import nl.rutgerkok.worldgeneratorapi.WorldGeneratorApi;
import nl.rutgerkok.worldgeneratorapi.WorldRef;
import nl.rutgerkok.worldgeneratorapi.event.WorldGeneratorInitEvent;
import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.DummyBukkitChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.property.PropertyRegistry;
public class WorldGeneratorApiImpl extends JavaPlugin implements WorldGeneratorApi, Listener {

View File

@ -18,6 +18,7 @@ import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
import nl.rutgerkok.worldgeneratorapi.WorldGenerator;
import nl.rutgerkok.worldgeneratorapi.WorldRef;
import nl.rutgerkok.worldgeneratorapi.decoration.WorldDecorator;
import nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides.InjectedChunkGenerator;
final class WorldGeneratorImpl implements WorldGenerator {

View File

@ -0,0 +1,25 @@
package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import net.minecraft.server.v1_13_R2.BiomeBase;
class CustomBiomeGrid implements BiomeGrid {
final BiomeBase[] biomeArray;
CustomBiomeGrid(BiomeBase[] biome) {
this.biomeArray = biome;
}
@Override
public Biome getBiome(final int x, final int z) {
return CraftBlock.biomeBaseToBiome(this.biomeArray[z << 4 | x]);
}
@Override
public void setBiome(final int x, final int z, final Biome bio) {
this.biomeArray[z << 4 | x] = CraftBlock.biomeToBiomeBase(bio);
}
}

View File

@ -1,4 +1,4 @@
package nl.rutgerkok.worldgeneratorapi.internal;
package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import java.util.ArrayList;
import java.util.List;
@ -21,11 +21,11 @@ import nl.rutgerkok.worldgeneratorapi.WorldGeneratorApi;
* brand new world), {@link #getDefaultPopulators(World)} takes over this task.
*
*/
final class DummyBukkitChunkGenerator extends ChunkGenerator {
public final class DummyBukkitChunkGenerator extends ChunkGenerator {
private final WorldGeneratorApi impl;
DummyBukkitChunkGenerator(WorldGeneratorApi impl) {
public DummyBukkitChunkGenerator(WorldGeneratorApi impl) {
this.impl = Objects.requireNonNull(impl);
}

View File

@ -1,11 +1,9 @@
package nl.rutgerkok.worldgeneratorapi.internal;
package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Objects;
import org.bukkit.block.Biome;
import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
import org.bukkit.craftbukkit.v1_13_R2.generator.CraftChunkData;
import org.bukkit.generator.ChunkGenerator.BiomeGrid;
import org.bukkit.generator.ChunkGenerator.ChunkData;
@ -34,26 +32,10 @@ import net.minecraft.server.v1_13_R2.WorldServer;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator;
import nl.rutgerkok.worldgeneratorapi.BaseChunkGenerator.GeneratingChunk;
import nl.rutgerkok.worldgeneratorapi.BiomeGenerator;
import nl.rutgerkok.worldgeneratorapi.internal.BiomeGeneratorImpl;
import nl.rutgerkok.worldgeneratorapi.internal.WorldDecoratorImpl;
final class InjectedChunkGenerator extends ChunkGeneratorAbstract<GeneratorSettingsDefault> {
private static class CustomBiomeGrid implements BiomeGrid {
private final BiomeBase[] biomeArray;
private CustomBiomeGrid(BiomeBase[] biome) {
this.biomeArray = biome;
}
@Override
public Biome getBiome(final int x, final int z) {
return CraftBlock.biomeBaseToBiome(this.biomeArray[z << 4 | x]);
}
@Override
public void setBiome(final int x, final int z, final Biome bio) {
this.biomeArray[z << 4 | x] = CraftBlock.biomeToBiomeBase(bio);
}
}
public final class InjectedChunkGenerator extends ChunkGeneratorAbstract<GeneratorSettingsDefault> {
private final org.bukkit.World world;
@ -63,12 +45,12 @@ final class InjectedChunkGenerator extends ChunkGeneratorAbstract<GeneratorSetti
private final MobSpawnerPhantom phantomSpawner = new MobSpawnerPhantom();
private final GeneratorSettingsDefault defaultSettings = new GeneratorSettingsDefault();
private final NoiseGenerator3 surfaceNoise;
final WorldDecoratorImpl worldDecorator = new WorldDecoratorImpl();
public final WorldDecoratorImpl worldDecorator = new WorldDecoratorImpl();
private BaseChunkGenerator baseChunkGenerator;
private final BiomeGenerator biomeGenerator;
InjectedChunkGenerator(WorldServer world, BaseChunkGenerator baseChunkGenerator) {
public InjectedChunkGenerator(WorldServer world, BaseChunkGenerator baseChunkGenerator) {
super(world, world.getChunkProvider().getChunkGenerator().getWorldChunkManager());
this.world = world.getWorld();
@ -182,11 +164,11 @@ final class InjectedChunkGenerator extends ChunkGeneratorAbstract<GeneratorSetti
}
}
BaseChunkGenerator getBaseChunkGenerator() {
public BaseChunkGenerator getBaseChunkGenerator() {
return baseChunkGenerator;
}
BiomeGenerator getBiomeGenerator() {
public BiomeGenerator getBiomeGenerator() {
return biomeGenerator;
}
@ -212,7 +194,7 @@ final class InjectedChunkGenerator extends ChunkGeneratorAbstract<GeneratorSetti
return world.getSeaLevel() + 1;
}
void setBaseChunkGenerator(BaseChunkGenerator baseChunkGenerator) {
public void setBaseChunkGenerator(BaseChunkGenerator baseChunkGenerator) {
this.baseChunkGenerator = Objects.requireNonNull(baseChunkGenerator, "baseChunkGenerator");
}

View File

@ -0,0 +1,6 @@
/**
* Classes that implement Bukkit or Minecraft API themselves. This package is
* not annotated as {@code @ParametersAreNonnullByDefault}, as this would make
* it annoying to implement the unannotated Bukkit API.
*/
package nl.rutgerkok.worldgeneratorapi.internal.bukkitoverrides;

View File

@ -3,4 +3,7 @@
* author; then we can try to design a public API for it, or find some
* alternative.
*/
@ParametersAreNonnullByDefault
package nl.rutgerkok.worldgeneratorapi.internal;
import javax.annotation.ParametersAreNonnullByDefault;