From 0f0d271f3770dc20a45a2ebdc5de2b018432b20f Mon Sep 17 00:00:00 2001 From: rutgerkok Date: Wed, 12 Feb 2014 21:35:16 +0100 Subject: [PATCH] Fix MCPC+ compatibility when used as a Bukkit plugin Terrain Control now accepts more orders in which methods can be called. You can't use TC as a Forge mod at the moment on MCPC+, but that will be fixed soon. --- .../terraincontrol/bukkit/BukkitWorld.java | 2 +- .../bukkit/TCChunkGenerator.java | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/BukkitWorld.java b/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/BukkitWorld.java index 83399bd54..128654c1a 100644 --- a/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/BukkitWorld.java +++ b/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/BukkitWorld.java @@ -696,7 +696,7 @@ public void enable(org.bukkit.World world) this.netherFortress = new NetherFortressGen(); case NotGenerate: case TerrainTest: - this.generator.Init(this); + this.generator.onInitialize(this); break; case Default: break; diff --git a/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/TCChunkGenerator.java b/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/TCChunkGenerator.java index 441984890..0894504b0 100644 --- a/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/TCChunkGenerator.java +++ b/platforms/bukkit/src/main/java/com/khorn/terraincontrol/bukkit/TCChunkGenerator.java @@ -17,12 +17,34 @@ public class TCChunkGenerator extends ChunkGenerator private ArrayList BlockPopulator = new ArrayList(); private boolean NotGenerate = false; private TCPlugin plugin; + public TCChunkGenerator(TCPlugin _plugin) { this.plugin = _plugin; } - public void Init(BukkitWorld _world) + /** + * Initializes the world if it hasn't already been initialized. + * + * @param world + * The world of this generator. + */ + private void makeSureWorldIsInitialized(World world) + { + if (this.chunkProviderTC == null) + { + // Not yet initialized, do it now + this.plugin.onWorldInit(world); + } + } + + /** + * Called whenever a BukkitWorld instance becomes available. + * + * @param _world + * The BukkitWorld instance. + */ + public void onInitialize(BukkitWorld _world) { this.chunkProviderTC = new ChunkProviderTC(_world.getSettings(), _world); @@ -38,14 +60,15 @@ public void Init(BukkitWorld _world) @Override public List getDefaultPopulators(World world) { - this.plugin.onWorldInit(world); + makeSureWorldIsInitialized(world); + return this.BlockPopulator; } @Override public boolean canSpawn(World world, int x, int z) { - this.plugin.onWorldInit(world); + makeSureWorldIsInitialized(world); Material material = world.getHighestBlockAt(x, z).getType(); return material.isSolid(); @@ -54,6 +77,8 @@ public boolean canSpawn(World world, int x, int z) @Override public byte[][] generateBlockSections(World world, Random random, int x, int z, BiomeGrid biomes) { + makeSureWorldIsInitialized(world); + if (this.NotGenerate) return new byte[16][]; byte[] BlockArray = this.chunkProviderTC.generate(x, z);