BSkyBlock/src/main/java/world/bentobox/bskyblock/BSkyBlock.java

137 lines
4.5 KiB
Java
Raw Normal View History

package world.bentobox.bskyblock;
2018-07-30 01:57:42 +02:00
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.bukkit.generator.ChunkGenerator;
import org.eclipse.jdt.annotation.NonNull;
2018-07-30 01:57:42 +02:00
import world.bentobox.bentobox.api.addons.GameModeAddon;
2018-08-06 16:40:16 +02:00
import world.bentobox.bentobox.api.configuration.Config;
import world.bentobox.bentobox.api.configuration.WorldSettings;
import world.bentobox.bskyblock.commands.AdminCommand;
import world.bentobox.bskyblock.commands.IslandCommand;
import world.bentobox.bskyblock.generators.ChunkGeneratorWorld;
2018-07-30 01:57:42 +02:00
/**
* Main BSkyBlock class - provides an island minigame in the sky
* @author tastybento
* @author Poslovitch
*/
public class BSkyBlock extends GameModeAddon {
private static final String NETHER = "_nether";
private static final String THE_END = "_the_end";
2018-07-30 01:57:42 +02:00
// Settings
private Settings settings;
private ChunkGeneratorWorld chunkGenerator;
2018-07-30 01:57:42 +02:00
@Override
public void onLoad() {
// Save the default config from config.yml
saveDefaultConfig();
// Load settings from config.yml. This will check if there are any issues with it too.
2019-01-03 00:57:26 +01:00
loadSettings();
// Chunk generator
chunkGenerator = settings.isUseOwnGenerator() ? null : new ChunkGeneratorWorld(this);
// Register commands
playerCommand = new IslandCommand(this);
adminCommand = new AdminCommand(this);
2019-01-03 00:57:26 +01:00
}
private void loadSettings() {
// Load settings again to get worlds
2018-08-06 16:40:16 +02:00
settings = new Config<>(this, Settings.class).loadConfigObject();
2019-01-03 00:57:26 +01:00
if (settings == null) {
// Disable
logError("BSkyBlock settings could not load! Addon disabled.");
setState(State.DISABLED);
2019-03-09 08:11:37 +01:00
return;
2019-01-03 00:57:26 +01:00
}
2019-03-23 23:45:17 +01:00
this.saveWorldSettings();
2019-03-09 08:11:37 +01:00
2018-07-30 01:57:42 +02:00
}
@Override
public void onEnable(){
// Nothing to do here
2018-07-30 01:57:42 +02:00
}
@Override
public void onDisable() {
2019-03-08 08:34:27 +01:00
// Nothing to do here
2018-07-30 01:57:42 +02:00
}
2019-01-03 00:57:26 +01:00
@Override
public void onReload() {
loadSettings();
}
2018-07-30 01:57:42 +02:00
/**
* @return the settings
*/
public Settings getSettings() {
return settings;
}
@Override
public void createWorlds() {
2019-05-15 18:32:48 +02:00
String worldName = settings.getWorldName().toLowerCase();
if (getServer().getWorld(worldName) == null) {
2019-03-09 08:11:37 +01:00
log("Creating BSkyBlock world ...");
}
// Create the world if it does not exist
islandWorld = getWorld(worldName, World.Environment.NORMAL, chunkGenerator);
// Make the nether if it does not exist
if (settings.isNetherGenerate()) {
if (getServer().getWorld(worldName + NETHER) == null) {
log("Creating BSkyBlock's Nether...");
}
netherWorld = settings.isNetherIslands() ? getWorld(worldName, World.Environment.NETHER, chunkGenerator) : getWorld(worldName, World.Environment.NETHER, null);
}
// Make the end if it does not exist
if (settings.isEndGenerate()) {
if (getServer().getWorld(worldName + THE_END) == null) {
log("Creating BSkyBlock's End World...");
}
endWorld = settings.isEndIslands() ? getWorld(worldName, World.Environment.THE_END, chunkGenerator) : getWorld(worldName, World.Environment.THE_END, null);
}
}
/**
* Gets a world or generates a new world if it does not exist
* @param worldName2 - the overworld name
* @param env - the environment
* @param chunkGenerator2 - the chunk generator. If <tt>null</tt> then the generator will not be specified
* @return world loaded or generated
*/
private World getWorld(String worldName2, Environment env, ChunkGeneratorWorld chunkGenerator2) {
// Set world name
worldName2 = env.equals(World.Environment.NETHER) ? worldName2 + NETHER : worldName2;
worldName2 = env.equals(World.Environment.THE_END) ? worldName2 + THE_END : worldName2;
WorldCreator wc = WorldCreator.name(worldName2).type(WorldType.FLAT).environment(env);
return settings.isUseOwnGenerator() ? wc.createWorld() : wc.generator(chunkGenerator2).createWorld();
}
@Override
public WorldSettings getWorldSettings() {
2019-03-08 08:34:27 +01:00
return getSettings();
}
@Override
public @NonNull ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
return chunkGenerator;
}
2019-03-23 23:45:17 +01:00
@Override
public void saveWorldSettings() {
if (settings != null) {
new Config<>(this, Settings.class).saveConfigObject(settings);
}
}
2018-07-30 01:57:42 +02:00
}