Implemented internal Chunk generators. Now multiverse can have its own custom chunk generators. Implemented the void generator (very useful). Added world type "VOID" in environments list. When create or import a world with type VOID the world will be added as a NORMAL world with "multiverse:void" generator

This commit is contained in:
MarcoLvr 2024-09-22 01:08:08 +02:00
parent 38f97a81c8
commit cd30254090
7 changed files with 105 additions and 2 deletions

View File

@ -78,6 +78,7 @@ import com.onarandombox.MultiverseCore.destination.PlayerDestination;
import com.onarandombox.MultiverseCore.destination.WorldDestination; import com.onarandombox.MultiverseCore.destination.WorldDestination;
import com.onarandombox.MultiverseCore.event.MVDebugModeEvent; import com.onarandombox.MultiverseCore.event.MVDebugModeEvent;
import com.onarandombox.MultiverseCore.event.MVVersionEvent; import com.onarandombox.MultiverseCore.event.MVVersionEvent;
import com.onarandombox.MultiverseCore.generators.InternalChunkGeneratorManager;
import com.onarandombox.MultiverseCore.listeners.MVAsyncPlayerChatListener; import com.onarandombox.MultiverseCore.listeners.MVAsyncPlayerChatListener;
import com.onarandombox.MultiverseCore.listeners.MVChatListener; import com.onarandombox.MultiverseCore.listeners.MVChatListener;
import com.onarandombox.MultiverseCore.listeners.MVEntityListener; import com.onarandombox.MultiverseCore.listeners.MVEntityListener;
@ -281,6 +282,11 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
this.messaging = new MVMessaging(); this.messaging = new MVMessaging();
this.economist = new MVEconomist(this); this.economist = new MVEconomist(this);
//VoidGen start
// Initialize internal chunk generator manager
InternalChunkGeneratorManager.init();
//VoidGen end
// Load the defaultWorldGenerators // Load the defaultWorldGenerators
this.worldManager.getDefaultWorldGenerators(); this.worldManager.getDefaultWorldGenerators();

View File

@ -90,6 +90,12 @@ public class CreateCommand extends MultiverseCommand {
return; return;
} }
//VoidGen start
if(env.equalsIgnoreCase("VOID")) {
env = "NORMAL";
generator = "multiverse:void";
}
//VoidGen end
Environment environment = EnvironmentCommand.getEnvFromString(env); Environment environment = EnvironmentCommand.getEnvFromString(env);
if (environment == null) { if (environment == null) {
sender.sendMessage(ChatColor.RED + "That is not a valid environment."); sender.sendMessage(ChatColor.RED + "That is not a valid environment.");
@ -100,7 +106,12 @@ public class CreateCommand extends MultiverseCommand {
// If they didn't specify a type, default to NORMAL // If they didn't specify a type, default to NORMAL
if (typeString == null) { if (typeString == null) {
typeString = "NORMAL"; typeString = "NORMAL";
//VoidGen start
} else if(typeString.equalsIgnoreCase("VOID")) {
typeString = "NORMAL";
generator = "multiverse:void";
} }
//VoidGen end
WorldType type = EnvironmentCommand.getWorldTypeFromString(typeString); WorldType type = EnvironmentCommand.getWorldTypeFromString(typeString);
if (type == null) { if (type == null) {
sender.sendMessage(ChatColor.RED + "That is not a valid World Type."); sender.sendMessage(ChatColor.RED + "That is not a valid World Type.");
@ -108,6 +119,7 @@ public class CreateCommand extends MultiverseCommand {
return; return;
} }
// Determine if the generator is valid. #918 // Determine if the generator is valid. #918
if (generator != null) { if (generator != null) {
List<String> genarray = new ArrayList<String>(Arrays.asList(generator.split(":"))); List<String> genarray = new ArrayList<String>(Arrays.asList(generator.split(":")));
if (genarray.size() < 2) { if (genarray.size() < 2) {

View File

@ -45,6 +45,9 @@ public class EnvironmentCommand extends MultiverseCommand {
sender.sendMessage(ChatColor.GREEN + "NORMAL"); sender.sendMessage(ChatColor.GREEN + "NORMAL");
sender.sendMessage(ChatColor.RED + "NETHER"); sender.sendMessage(ChatColor.RED + "NETHER");
sender.sendMessage(ChatColor.AQUA + "END"); sender.sendMessage(ChatColor.AQUA + "END");
//VoidGen start
sender.sendMessage(ChatColor.WHITE + "VOID");
//VoidGen end
} }
/** /**
* Shows all valid known world types to a {@link CommandSender}. * Shows all valid known world types to a {@link CommandSender}.

View File

@ -106,6 +106,12 @@ public class ImportCommand extends MultiverseCommand {
} }
String env = args.get(1); String env = args.get(1);
//VoidGen start
if(env.equalsIgnoreCase("VOID")){
env = "NORMAL";
generator = "multiverse:void";
}
//VoidGen end
Environment environment = EnvironmentCommand.getEnvFromString(env); Environment environment = EnvironmentCommand.getEnvFromString(env);
if (environment == null) { if (environment == null) {
sender.sendMessage(ChatColor.RED + "That is not a valid environment."); sender.sendMessage(ChatColor.RED + "That is not a valid environment.");
@ -113,6 +119,7 @@ public class ImportCommand extends MultiverseCommand {
return; return;
} }
if (!worldFile.exists()) { if (!worldFile.exists()) {
sender.sendMessage(ChatColor.RED + "FAILED."); sender.sendMessage(ChatColor.RED + "FAILED.");
String worldList = this.getPotentialWorldStrings(); String worldList = this.getPotentialWorldStrings();

View File

@ -0,0 +1,43 @@
package com.onarandombox.MultiverseCore.generators;
import com.onarandombox.MultiverseCore.generators.impl.MultiverseVoidGenerator;
import org.bukkit.generator.ChunkGenerator;
import java.util.Map;
//VoidGen start
public class InternalChunkGeneratorManager {
private final Map<String, ChunkGenerator> generators;
private static InternalChunkGeneratorManager instance;
public static InternalChunkGeneratorManager get() {
if (instance == null) {
throw new IllegalStateException("InternalChunkGeneratorManager has not been initialized yet.");
}
return instance;
}
public static void init(){
new InternalChunkGeneratorManager();
}
public InternalChunkGeneratorManager() {
instance = this;
//register internal generators instances (singleton)
generators = Map.of(
"VOID", new MultiverseVoidGenerator()
);
}
public boolean exists(String generator){
return generators.containsKey(generator);
}
public ChunkGenerator getGenerator(String generator){
return generators.getOrDefault(generator.toUpperCase(), null);
}
}
//VoidGen end

View File

@ -0,0 +1,22 @@
package com.onarandombox.MultiverseCore.generators.impl;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.generator.ChunkGenerator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Random;
public class MultiverseVoidGenerator extends ChunkGenerator {
@Override
public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull ChunkGenerator.BiomeGrid biome) {
return createChunkData(world);
}
@Override
public @Nullable Location getFixedSpawnLocation(@NotNull World world, @NotNull Random random) {
return new Location(world,0, 64, 0);
}
}

View File

@ -17,6 +17,7 @@ import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter; import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.api.WorldPurger; import com.onarandombox.MultiverseCore.api.WorldPurger;
import com.onarandombox.MultiverseCore.event.MVWorldDeleteEvent; import com.onarandombox.MultiverseCore.event.MVWorldDeleteEvent;
import com.onarandombox.MultiverseCore.generators.InternalChunkGeneratorManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameRule; import org.bukkit.GameRule;
import org.bukkit.Location; import org.bukkit.Location;
@ -257,7 +258,12 @@ public class WorldManager implements MVWorldManager {
// TODO: Use the fancy kind with the commandSender // TODO: Use the fancy kind with the commandSender
if (generator != null && generator.length() != 0) { if (generator != null && generator.length() != 0) {
//VoidGen start
if(generator.startsWith("multiverse:"))
c.generator(InternalChunkGeneratorManager.get().getGenerator(generator.split(":")[1]));
else
c.generator(generator); c.generator(generator);
//VoidGen end
} }
c.environment(env); c.environment(env);
if (type != null) { if (type != null) {
@ -305,7 +311,11 @@ public class WorldManager implements MVWorldManager {
if (generator == null) { if (generator == null) {
return null; return null;
} }
//VoidGen start
if(generator.equalsIgnoreCase("multiverse")){
return InternalChunkGeneratorManager.get().getGenerator(generatorID);
}
//VoidGen end
final Plugin myPlugin = this.plugin.getServer().getPluginManager().getPlugin(generator); final Plugin myPlugin = this.plugin.getServer().getPluginManager().getPlugin(generator);
if (myPlugin == null) { if (myPlugin == null) {
return null; return null;