Created
November 11, 2015 04:48
-
-
Save Deamon5550/f107f7cb3dae0ebb0a9a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.thevoxelbox.biome; | |
import org.spongepowered.api.Game; | |
import org.spongepowered.api.data.DataContainer; | |
import org.spongepowered.api.data.MemoryDataContainer; | |
import org.spongepowered.api.event.Listener; | |
import org.spongepowered.api.event.game.state.GameInitializationEvent; | |
import org.spongepowered.api.event.game.state.GamePostInitializationEvent; | |
import org.spongepowered.api.event.world.LoadWorldEvent; | |
import org.spongepowered.api.plugin.Plugin; | |
import org.spongepowered.api.plugin.PluginContainer; | |
import org.spongepowered.api.world.World; | |
import org.spongepowered.api.world.WorldCreationSettings; | |
import org.spongepowered.api.world.biome.BiomeType; | |
import org.spongepowered.api.world.biome.BiomeTypes; | |
import org.spongepowered.api.world.extent.MutableBiomeArea; | |
import org.spongepowered.api.world.gen.BiomeGenerator; | |
import org.spongepowered.api.world.gen.WorldGenerator; | |
import org.spongepowered.api.world.gen.WorldGeneratorModifier; | |
import com.flowpowered.math.vector.Vector2i; | |
import com.google.inject.Inject; | |
@Plugin(id = "biome-plugin", name = "Biome Plugin") | |
public class BiomePlugin implements WorldGeneratorModifier { | |
public static BiomePlugin instance; | |
private BiomeType[] biomes; | |
@Inject private PluginContainer plugin; | |
public BiomePlugin() { | |
} | |
@Listener | |
public void onInitialize(GamePostInitializationEvent event) { | |
instance = this; | |
Game game = event.getGame(); | |
game.getRegistry().registerWorldGeneratorModifier(this); | |
this.biomes = game.getRegistry().getAllOf(BiomeType.class).toArray(new BiomeType[0]); | |
// System.out.println("Found " + this.biomes.length + " biomes"); | |
} | |
// @Listener | |
public void onWorldLoad(LoadWorldEvent event) { | |
World world = event.getTargetWorld(); | |
System.out.println("World load: " + world.getName() + " " + world.getDimension().getType().getName()); | |
System.out.println("Applying world gen modifier"); | |
WorldGenerator gen = world.getWorldGenerator(); | |
modifyWorldGenerator(world.getCreationSettings(), new MemoryDataContainer(), gen); | |
world.setWorldGenerator(gen); | |
} | |
@Override | |
public String getName() { | |
return plugin.getName(); | |
} | |
@Override | |
public void modifyWorldGenerator(WorldCreationSettings world, DataContainer settings, WorldGenerator worldGenerator) { | |
worldGenerator.setBiomeGenerator(new TestBiomeGenerator(this.biomes)); | |
} | |
@Override | |
public String getId() { | |
return plugin.getId(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.thevoxelbox.biome; | |
import org.spongepowered.api.world.biome.BiomeType; | |
import org.spongepowered.api.world.biome.BiomeTypes; | |
import org.spongepowered.api.world.extent.MutableBiomeArea; | |
import org.spongepowered.api.world.gen.BiomeGenerator; | |
import com.flowpowered.math.vector.Vector2i; | |
public class TestBiomeGenerator implements BiomeGenerator { | |
private static final int BIOME_SIZE = 2; | |
private final BiomeType[] biomes; | |
public TestBiomeGenerator(BiomeType[] b) { | |
this.biomes = new BiomeType[64]; | |
for (int i = 0; i < 64; i++) { | |
if (i < b.length) { | |
// System.out.println(i + " " + b[i]); | |
this.biomes[i] = b[i]; | |
} else { | |
this.biomes[i] = BiomeTypes.OCEAN; | |
} | |
} | |
} | |
@Override | |
public void generateBiomes(MutableBiomeArea buffer) { | |
Vector2i min = buffer.getBiomeMin().div(64); | |
int index = getIndex(min.getX(), min.getY()); | |
flood(buffer, this.biomes[index]); | |
// System.err.println("Flooding " + min.getX() + " " + min.getY() + " with " + this.biomes[index].getName()); | |
} | |
private int getIndex(int x, int y) { | |
x = (x / BIOME_SIZE) % 8; | |
y = (y / BIOME_SIZE) % 8; | |
if(x < 0) x += 8; | |
if(y < 0) y += 8; | |
return x + y * 8; | |
} | |
private void flood(MutableBiomeArea b, BiomeType type) { | |
for (int x = 0; x < b.getBiomeSize().getX(); x++) { | |
for (int y = 0; y < b.getBiomeSize().getY(); y++) { | |
b.setBiome(x + b.getBiomeMin().getX(), y + b.getBiomeMin().getY(), type); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment