mirror of
https://github.com/BentoBoxWorld/Boxed.git
synced 2025-02-15 01:01:28 +01:00
Adds support for multiverse etc. by registering worlds
Must be used with BentoBox 1.24.0 #52
This commit is contained in:
parent
31020374ac
commit
db9af8051a
4
pom.xml
4
pom.xml
@ -59,13 +59,13 @@
|
|||||||
<powermock.version>2.0.9</powermock.version>
|
<powermock.version>2.0.9</powermock.version>
|
||||||
<!-- More visible way how to change dependency versions -->
|
<!-- More visible way how to change dependency versions -->
|
||||||
<spigot.version>1.20-R0.1-SNAPSHOT</spigot.version>
|
<spigot.version>1.20-R0.1-SNAPSHOT</spigot.version>
|
||||||
<bentobox.version>1.23.0</bentobox.version>
|
<bentobox.version>1.24.0-SNAPSHOT</bentobox.version>
|
||||||
<!-- Revision variable removes warning about dynamic version -->
|
<!-- Revision variable removes warning about dynamic version -->
|
||||||
<revision>${build.version}-SNAPSHOT</revision>
|
<revision>${build.version}-SNAPSHOT</revision>
|
||||||
<!-- Do not change unless you want different name for local builds. -->
|
<!-- Do not change unless you want different name for local builds. -->
|
||||||
<build.number>-LOCAL</build.number>
|
<build.number>-LOCAL</build.number>
|
||||||
<!-- This allows to change between versions. -->
|
<!-- This allows to change between versions. -->
|
||||||
<build.version>2.2.0</build.version>
|
<build.version>2.2.1</build.version>
|
||||||
|
|
||||||
<sonar.projectKey>BentoBoxWorld_Boxed</sonar.projectKey>
|
<sonar.projectKey>BentoBoxWorld_Boxed</sonar.projectKey>
|
||||||
<sonar.organization>bentobox-world</sonar.organization>
|
<sonar.organization>bentobox-world</sonar.organization>
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
package world.bentobox.boxed;
|
package world.bentobox.boxed;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Difficulty;
|
import org.bukkit.Difficulty;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -9,8 +13,8 @@ import org.bukkit.World.Environment;
|
|||||||
import org.bukkit.WorldCreator;
|
import org.bukkit.WorldCreator;
|
||||||
import org.bukkit.entity.SpawnCategory;
|
import org.bukkit.entity.SpawnCategory;
|
||||||
import org.bukkit.generator.BiomeProvider;
|
import org.bukkit.generator.BiomeProvider;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
|
import org.eclipse.jdt.annotation.NonNull;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
|
||||||
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
||||||
@ -21,13 +25,14 @@ import world.bentobox.bentobox.api.configuration.WorldSettings;
|
|||||||
import world.bentobox.bentobox.api.flags.Flag;
|
import world.bentobox.bentobox.api.flags.Flag;
|
||||||
import world.bentobox.bentobox.api.flags.Flag.Mode;
|
import world.bentobox.bentobox.api.flags.Flag.Mode;
|
||||||
import world.bentobox.bentobox.api.flags.Flag.Type;
|
import world.bentobox.bentobox.api.flags.Flag.Type;
|
||||||
|
import world.bentobox.bentobox.api.hooks.Hook;
|
||||||
|
import world.bentobox.bentobox.hooks.WorldManagementHook;
|
||||||
import world.bentobox.bentobox.managers.RanksManager;
|
import world.bentobox.bentobox.managers.RanksManager;
|
||||||
import world.bentobox.boxed.commands.AdminPlaceStructureCommand;
|
import world.bentobox.boxed.commands.AdminPlaceStructureCommand;
|
||||||
import world.bentobox.boxed.generators.biomes.BoxedBiomeGenerator;
|
import world.bentobox.boxed.generators.biomes.BoxedBiomeGenerator;
|
||||||
import world.bentobox.boxed.generators.biomes.NetherSeedBiomeGenerator;
|
import world.bentobox.boxed.generators.biomes.NetherSeedBiomeGenerator;
|
||||||
import world.bentobox.boxed.generators.biomes.SeedBiomeGenerator;
|
import world.bentobox.boxed.generators.biomes.SeedBiomeGenerator;
|
||||||
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator;
|
import world.bentobox.boxed.generators.chunks.AbstractBoxedChunkGenerator;
|
||||||
import world.bentobox.boxed.generators.chunks.BoxedBlockPopulator;
|
|
||||||
import world.bentobox.boxed.generators.chunks.BoxedChunkGenerator;
|
import world.bentobox.boxed.generators.chunks.BoxedChunkGenerator;
|
||||||
import world.bentobox.boxed.generators.chunks.BoxedSeedChunkGenerator;
|
import world.bentobox.boxed.generators.chunks.BoxedSeedChunkGenerator;
|
||||||
import world.bentobox.boxed.listeners.AdvancementListener;
|
import world.bentobox.boxed.listeners.AdvancementListener;
|
||||||
@ -65,9 +70,9 @@ public class Boxed extends GameModeAddon {
|
|||||||
private World baseWorldNether;
|
private World baseWorldNether;
|
||||||
private World seedWorld;
|
private World seedWorld;
|
||||||
private World seedWorldNether;
|
private World seedWorldNether;
|
||||||
|
private Map<World, ChunkGenerator> generatorMap = new HashMap<>();
|
||||||
//private World seedWorldEnd;
|
//private World seedWorldEnd;
|
||||||
private BiomeProvider boxedBiomeProvider;
|
private BiomeProvider boxedBiomeProvider;
|
||||||
private BlockPopulator boxedBlockPopulator;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
@ -188,21 +193,24 @@ public class Boxed extends GameModeAddon {
|
|||||||
.createWorld();
|
.createWorld();
|
||||||
baseWorldNether.setDifficulty(Difficulty.PEACEFUL);
|
baseWorldNether.setDifficulty(Difficulty.PEACEFUL);
|
||||||
baseWorldNether.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
baseWorldNether.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
||||||
|
generatorMap.put(baseWorldNether, seedBaseGen);
|
||||||
|
getPlugin().getIWM().addWorld(baseWorldNether, this);
|
||||||
copyChunks(baseWorldNether, seedBaseGen);
|
copyChunks(baseWorldNether, seedBaseGen);
|
||||||
// Create seed world
|
// Create seed world
|
||||||
// This copies a base world with custom biomes
|
// This copies a base world with custom biomes
|
||||||
log("Creating Boxed Biomed Nether world ...");
|
log("Creating Boxed Biomed Nether world ...");
|
||||||
|
BoxedSeedChunkGenerator seedWorldNetherGenerator = new BoxedSeedChunkGenerator(this, Environment.NETHER, new NetherSeedBiomeGenerator(this, seedBaseGen));
|
||||||
seedWorldNether = WorldCreator
|
seedWorldNether = WorldCreator
|
||||||
.name(worldName + "/" + SEED+NETHER)
|
.name(worldName + "/" + SEED+NETHER)
|
||||||
.generator(new BoxedSeedChunkGenerator(this, Environment.NETHER, new NetherSeedBiomeGenerator(this, seedBaseGen)))
|
.generator(seedWorldNetherGenerator)
|
||||||
.environment(Environment.NETHER)
|
.environment(Environment.NETHER)
|
||||||
.seed(getSettings().getSeed())
|
.seed(getSettings().getSeed())
|
||||||
.createWorld();
|
.createWorld();
|
||||||
seedWorldNether.setDifficulty(Difficulty.EASY);
|
seedWorldNether.setDifficulty(Difficulty.EASY);
|
||||||
|
|
||||||
seedWorldNether.setSpawnLocation(settings.getNetherSeedX(), 64, settings.getNetherSeedZ());
|
seedWorldNether.setSpawnLocation(settings.getNetherSeedX(), 64, settings.getNetherSeedZ());
|
||||||
|
generatorMap.put(seedWorldNether, seedWorldNetherGenerator);
|
||||||
|
getPlugin().getIWM().addWorld(seedWorldNether, this);
|
||||||
copyChunks(seedWorldNether, netherChunkGenerator);
|
copyChunks(seedWorldNether, netherChunkGenerator);
|
||||||
|
|
||||||
if (getServer().getWorld(worldName + NETHER) == null) {
|
if (getServer().getWorld(worldName + NETHER) == null) {
|
||||||
@ -224,14 +232,16 @@ public class Boxed extends GameModeAddon {
|
|||||||
.createWorld();
|
.createWorld();
|
||||||
baseWorld.setDifficulty(Difficulty.PEACEFUL);
|
baseWorld.setDifficulty(Difficulty.PEACEFUL);
|
||||||
baseWorld.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
baseWorld.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
||||||
|
generatorMap.put(baseWorld, seedBaseGen);
|
||||||
|
getPlugin().getIWM().addWorld(baseWorld, this);
|
||||||
copyChunks(baseWorld, seedBaseGen);
|
copyChunks(baseWorld, seedBaseGen);
|
||||||
// Create seed world
|
// Create seed world
|
||||||
// This copies a base world with custom biomes
|
// This copies a base world with custom biomes
|
||||||
log("Creating Boxed Biomed world ...");
|
log("Creating Boxed Biomed world ...");
|
||||||
|
BoxedSeedChunkGenerator seedWorldGenerator = new BoxedSeedChunkGenerator(this, Environment.NORMAL, new SeedBiomeGenerator(this, seedBaseGen));
|
||||||
seedWorld = WorldCreator
|
seedWorld = WorldCreator
|
||||||
.name(worldName + "/" + SEED)
|
.name(worldName + "/" + SEED)
|
||||||
.generator(new BoxedSeedChunkGenerator(this, Environment.NORMAL, new SeedBiomeGenerator(this, seedBaseGen)))
|
.generator(seedWorldGenerator)
|
||||||
.environment(Environment.NORMAL)
|
.environment(Environment.NORMAL)
|
||||||
.seed(getSettings().getSeed())
|
.seed(getSettings().getSeed())
|
||||||
.createWorld();
|
.createWorld();
|
||||||
@ -239,6 +249,8 @@ public class Boxed extends GameModeAddon {
|
|||||||
|
|
||||||
seedWorld.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
seedWorld.setSpawnLocation(settings.getSeedX(), 64, settings.getSeedZ());
|
||||||
|
|
||||||
|
generatorMap.put(seedWorld, seedWorldGenerator);
|
||||||
|
getPlugin().getIWM().addWorld(seedWorld, this);
|
||||||
copyChunks(seedWorld, chunkGenerator);
|
copyChunks(seedWorld, chunkGenerator);
|
||||||
|
|
||||||
|
|
||||||
@ -251,6 +263,26 @@ public class Boxed extends GameModeAddon {
|
|||||||
islandWorld = getWorld(worldName, World.Environment.NORMAL);
|
islandWorld = getWorld(worldName, World.Environment.NORMAL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a world with world management plugins
|
||||||
|
*
|
||||||
|
* @param world the World to register
|
||||||
|
* @param islandWorld true if this is an island world
|
||||||
|
*/
|
||||||
|
private void registerToWorldManagementPlugins(@NonNull World world) {
|
||||||
|
if (getPlugin().getHooks() != null) {
|
||||||
|
for (Hook hook : getPlugin().getHooks().getHooks()) {
|
||||||
|
if (hook instanceof final WorldManagementHook worldManagementHook) {
|
||||||
|
if (Bukkit.isPrimaryThread()) {
|
||||||
|
worldManagementHook.registerWorld(world, true);
|
||||||
|
} else {
|
||||||
|
Bukkit.getScheduler().runTask(getPlugin(), () -> worldManagementHook.registerWorld(world, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copies chunks from the seed world so they can be pasted in the game world
|
* Copies chunks from the seed world so they can be pasted in the game world
|
||||||
@ -307,10 +339,9 @@ public class Boxed extends GameModeAddon {
|
|||||||
worldName2 = env.equals(World.Environment.NETHER) ? worldName2 + NETHER : worldName2;
|
worldName2 = env.equals(World.Environment.NETHER) ? worldName2 + NETHER : worldName2;
|
||||||
worldName2 = env.equals(World.Environment.THE_END) ? worldName2 + THE_END : worldName2;
|
worldName2 = env.equals(World.Environment.THE_END) ? worldName2 + THE_END : worldName2;
|
||||||
boxedBiomeProvider = new BoxedBiomeGenerator(this);
|
boxedBiomeProvider = new BoxedBiomeGenerator(this);
|
||||||
boxedBlockPopulator = new BoxedBlockPopulator(this);
|
|
||||||
World w = WorldCreator
|
World w = WorldCreator
|
||||||
.name(worldName2)
|
.name(worldName2)
|
||||||
.generator(env.equals(World.Environment.NETHER) ? netherChunkGenerator : chunkGenerator)
|
.generator(getChunkGenerator(env))
|
||||||
.environment(env)
|
.environment(env)
|
||||||
.seed(seedWorld.getSeed()) // For development
|
.seed(seedWorld.getSeed()) // For development
|
||||||
.createWorld();
|
.createWorld();
|
||||||
@ -318,6 +349,8 @@ public class Boxed extends GameModeAddon {
|
|||||||
if (w != null) {
|
if (w != null) {
|
||||||
setSpawnRates(w);
|
setSpawnRates(w);
|
||||||
}
|
}
|
||||||
|
// Store main generators
|
||||||
|
generatorMap.put(w, getChunkGenerator(env));
|
||||||
return w;
|
return w;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -357,7 +390,12 @@ public class Boxed extends GameModeAddon {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
|
public @Nullable ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
|
||||||
return worldName.endsWith(NETHER) ? netherChunkGenerator : chunkGenerator;
|
for (Entry<World, ChunkGenerator> en : generatorMap.entrySet()) {
|
||||||
|
if (en.getKey().getName().equalsIgnoreCase(worldName)) {
|
||||||
|
return en.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -374,6 +412,9 @@ public class Boxed extends GameModeAddon {
|
|||||||
public void allLoaded() {
|
public void allLoaded() {
|
||||||
// Save settings. This will occur after all addons have loaded
|
// Save settings. This will occur after all addons have loaded
|
||||||
this.saveWorldSettings();
|
this.saveWorldSettings();
|
||||||
|
// Register generators for worlds with multiverse etc.
|
||||||
|
this.log("Registering Boxed worlds with other plugins (if applicable)...");
|
||||||
|
generatorMap.keySet().forEach(this::registerToWorldManagementPlugins);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -383,13 +424,6 @@ public class Boxed extends GameModeAddon {
|
|||||||
return advManager;
|
return advManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the boxedBlockPopulator
|
|
||||||
*/
|
|
||||||
public BlockPopulator getBoxedBlockPopulator() {
|
|
||||||
return boxedBlockPopulator;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isUsesNewChunkGeneration() {
|
public boolean isUsesNewChunkGeneration() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -45,9 +45,12 @@ import world.bentobox.boxed.Boxed;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BoxedChunkGenerator extends AbstractBoxedChunkGenerator {
|
public class BoxedChunkGenerator extends AbstractBoxedChunkGenerator {
|
||||||
|
|
||||||
|
private final BlockPopulator boxedBlockPopulator;
|
||||||
|
|
||||||
public BoxedChunkGenerator(Boxed addon) {
|
public BoxedChunkGenerator(Boxed addon) {
|
||||||
super(addon);
|
super(addon);
|
||||||
|
boxedBlockPopulator = new BoxedBlockPopulator(addon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -57,7 +60,10 @@ public class BoxedChunkGenerator extends AbstractBoxedChunkGenerator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BlockPopulator> getDefaultPopulators(World world) {
|
public List<BlockPopulator> getDefaultPopulators(World world) {
|
||||||
world.getPopulators().add(addon.getBoxedBlockPopulator());
|
// Only add it once
|
||||||
|
if (!world.getPopulators().contains(boxedBlockPopulator)) {
|
||||||
|
world.getPopulators().add(boxedBlockPopulator);
|
||||||
|
}
|
||||||
return world.getPopulators();
|
return world.getPopulators();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name: Boxed
|
name: Boxed
|
||||||
main: world.bentobox.boxed.Boxed
|
main: world.bentobox.boxed.Boxed
|
||||||
version: ${version}${build.number}
|
version: ${version}${build.number}
|
||||||
api-version: 1.22
|
api-version: 1.24
|
||||||
metrics: true
|
metrics: true
|
||||||
icon: "COMPOSTER"
|
icon: "COMPOSTER"
|
||||||
repository: "BentoBoxWorld/Boxed"
|
repository: "BentoBoxWorld/Boxed"
|
||||||
|
Loading…
Reference in New Issue
Block a user