Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class CreateCommand extends CoreCommand {
@CommandCompletion("@empty @environments @flags:groupName=" + Flags.NAME)
@Syntax("<name> <environment> [--seed <seed> --generator <generator[:id]> --world-type <worldtype> " +
"--adjust-spawn --no-structures --generate-bonus-chest --force-spawn-position <x,y,z:pitch:yaw> " +
"--biome <biome> --properties <prop1=value1,prop2=value2,...>]")
"--biome <biome> --generator-settings <json-settings> --properties <prop1=value1,prop2=value2,...>]")
@Description("{@@mv-core.create.description}")
void onCreateCommand(
MVCommandIssuer issuer,
Expand All @@ -73,7 +73,7 @@ void onCreateCommand(
@Optional
@Syntax("[--seed <seed> --generator <generator[:id]> --world-type <worldtype> --adjust-spawn " +
"--no-structures --generate-bonus-chest --force-spawn-position <x,y,z:pitch:yaw> --biome <biome> " +
"--properties <prop1=value1,prop2=value2,...>]")
"--generator-settings <json-settings> --properties <prop1=value1,prop2=value2,...>]")
@Description("{@@mv-core.create.flags.description}")
String[] flagArray) {
ParsedCommandFlags parsedFlags = flags.parse(flagArray);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ void onImportCommand(
worldManager.importWorld(ImportWorldOptions.worldName(worldName)
.biome(parsedFlags.flagValue(flags.biome, ""))
.environment(environment)
.generator(parsedFlags.flagValue(flags.generator, String.class))
.generator(parsedFlags.flagValue(flags.generator))
.generatorSettings(parsedFlags.flagValue(flags.generatorSettings, ""))
.useSpawnAdjust(!parsedFlags.hasFlag(flags.noAdjustSpawn))
.doFolderCheck(!parsedFlags.hasFlag(flags.skipFolderCheck)))
.onSuccess(newWorld -> {
Expand Down Expand Up @@ -110,6 +111,11 @@ private Flags(@NotNull CommandFlagsManager flagsManager, @NotNull GeneratorProvi
private final CommandFlag skipFolderCheck = flag(CommandFlag.builder("--skip-folder-check")
.addAlias("-f")
.build());

private final CommandValueFlag<String> generatorSettings = flag(CommandValueFlag
.builder("--generator-settings", String.class)
.addAlias("-gs")
.build());
}

@Service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@
outMap.put("World Type", world.getWorldType().map(WorldType::getName).getOrNull());
outMap.put("Biome", world.getBiome());
outMap.put("Generator", world.getGenerator());
outMap.put("Generator Settings", world.getGeneratorSettings());

Check warning on line 107 in src/main/java/org/mvplugins/multiverse/core/commands/InfoCommand.java

View workflow job for this annotation

GitHub Actions / checkstyle / checkstyle

[checkstyle] reported by reviewdog 🐶 Use a single space to separate non-whitespace characters. Raw Output: /github/workspace/src/main/java/org/mvplugins/multiverse/core/commands/InfoCommand.java:107:43: warning: Use a single space to separate non-whitespace characters. (com.puppycrawl.tools.checkstyle.checks.whitespace.SingleSpaceSeparatorCheck)
outMap.put("Generate Structures", world.canGenerateStructures().map(String::valueOf).getOrNull());

outMap.put("Auto Load", String.valueOf(world.isAutoLoad()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,19 @@ public String getGenerator() {
return worldConfig.getGenerator();
}

/**
* Gets the generator settings used to create this world. You cannot change this after world creation.
* Changing this manually in config on existing world will have no effect on the world generation.
*
* @return The generator settings string.
*
* @since 5.7
*/
@ApiStatus.AvailableSince("5.7")
public String getGeneratorSettings() {
return worldConfig.getGeneratorSettings();
}

/**
* Gets whether or not this world will display in chat, mvw and mvl regardless if a user has the
* access permissions to go to this world.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,14 @@ Try<Void> setEnvironment(World.Environment environment) {
return configHandle.set(configNodes.environment, environment);
}

String getGeneratorSettings() {
return configHandle.get(configNodes.generatorSettings);
}

Try<Void> setGeneratorSettings(String generatorSettings) {
return configHandle.set(configNodes.generatorSettings, generatorSettings);
}

String getLegacyWorldName() {
return configHandle.get(configNodes.legacyWorldName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,10 @@ public Object serialize(EntitySpawnConfig object, Class<EntitySpawnConfig> type)
.defaultValue(World.Environment.NORMAL)
.hidden());

final ConfigNode<String> generatorSettings = node(ConfigNode.builder("read-only.generator-settings", String.class)
.defaultValue("")
.hidden());

final ConfigNode<String> legacyWorldName = node(ConfigNode.builder("read-only.legacy-world-name", String.class)
.hidden());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,10 +290,11 @@ private Attempt<LoadedMultiverseWorld, CreateFailureReason> doCreateWorld(
.mapAttempt(this::createBukkitWorld)
.transform(CreateFailureReason.WORLD_CREATOR_FAILED)
.map(bukkitWorld -> newLoadedMultiverseWorld(
bukkitWorld,
generatorString,
options.biome(),
options.useSpawnAdjust()))
bukkitWorld,
generatorString,
options.biome(),
options.generatorSettings(),
options.useSpawnAdjust()))
.peek(loadedWorld -> postCreateWorld(loadedWorld, options));
}

Expand Down Expand Up @@ -354,7 +355,8 @@ private Attempt<LoadedMultiverseWorld, ImportFailureReason> doImportWorld(
ImportWorldOptions options = keyOrNameWithOptions.options();
String generatorString = generatorProvider.parseGeneratorString(keyOrName.usableName(), options.generator());
WorldCreator worldCreator = WorldCreatorCompatibility.ofKeyOrName(keyOrName)
.environment(options.environment());
.environment(options.environment())
.generatorSettings(options.generatorSettings());

return addBiomeProviderToCreator(worldCreator, keyOrName.usableName(), options.biome())
.mapAttempt(creator -> addGeneratorToCreator(creator, generatorString))
Expand All @@ -364,6 +366,7 @@ private Attempt<LoadedMultiverseWorld, ImportFailureReason> doImportWorld(
bukkitWorld,
generatorString,
options.biome(),
options.generatorSettings(),
options.useSpawnAdjust()))
.peek(loadedWorld -> pluginManager.callEvent(new MVWorldImportedEvent(loadedWorld)));
}
Expand All @@ -385,6 +388,7 @@ private Attempt<LoadedMultiverseWorld, ImportFailureReason> doImportBukkitWorld(
bukkitWorld,
generatorProvider.parseGeneratorString(keyOrName.usableName(), options.generator()),
options.biome(),
options.generatorSettings(),
options.useSpawnAdjust());
pluginManager.callEvent(new MVWorldImportedEvent(loadedWorld));
return Attempt.success(loadedWorld);
Expand All @@ -405,13 +409,18 @@ private MultiverseWorld newMultiverseWorld(WorldConfig worldConfig) {
* @param adjustSpawn Whether to adjust spawn.
*/
private LoadedMultiverseWorld newLoadedMultiverseWorld(
@NotNull World world, @Nullable String generator, @Nullable String biome, boolean adjustSpawn) {
@NotNull World world,
@Nullable String generator,
@Nullable String biome,
@Nullable String generatorSettings,
boolean adjustSpawn) {
WorldConfig worldConfig = worldsConfigManager.addWorldConfig(world.getKey());

// Properties from multiverse input
worldConfig.setAdjustSpawn(adjustSpawn);
worldConfig.setGenerator(generator == null ? "" : generator);
worldConfig.setBiome(biome == null ? "" : biome);
worldConfig.setGeneratorSettings(generatorSettings == null ? "" : generatorSettings);

// Properties from the bukkit world
worldConfig.setLegacyWorldName(world.getName());
Expand Down Expand Up @@ -870,6 +879,7 @@ public Attempt<LoadedMultiverseWorld, RegenFailureReason> regenWorld(@NotNull Re
.environment(world.getEnvironment())
.generateStructures(world.canGenerateStructures().getOrElse(true))
.generator(world.getGenerator())
.generatorSettings(world.getGeneratorSettings())
.seed(options.seed())
.useSpawnAdjust(!shouldKeepSpawnLocation && world.getAdjustSpawn())
.worldType(world.getWorldType().getOrElse(WorldType.NORMAL))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ public final class ImportWorldOptions {
private String biome = "";
private World.Environment environment = World.Environment.NORMAL;
private String generator = null;
private String generatorSettings = "";
private boolean useSpawnAdjust = true;
private boolean doFolderCheck = true;

Expand Down Expand Up @@ -153,6 +154,32 @@ public final class ImportWorldOptions {
return generator;
}

/**
* Sets the custom generator settings string used when creating the world.
*
* @param generatorSettingsInput The custom generator settings string, or null to use the default settings.
* @return This {@link ImportWorldOptions} instance.
*
* @since 5.7
*/
@ApiStatus.AvailableSince("5.7")
public @NotNull ImportWorldOptions generatorSettings(@NotNull String generatorSettingsInput) {
this.generatorSettings = generatorSettingsInput;
return this;
}

/**
* Gets the custom generator settings string used when creating the world.
*
* @return The custom generator settings string, or null if none was set.
*
* @since 5.7
*/
@ApiStatus.AvailableSince("5.7")
public @NotNull String generatorSettings() {
return generatorSettings;
}

/**
* Sets whether multiverse will search for a safe spawn location.
*
Expand Down
2 changes: 2 additions & 0 deletions src/test/resources/worlds/default_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ world:
world-blacklist: []
read-only:
environment: normal
generator-settings: ''
legacy-world-name: world
seed: -9223372036854775808
version: 1.3
Expand Down Expand Up @@ -155,6 +156,7 @@ world_nether:
world-blacklist: []
read-only:
environment: nether
generator-settings: ''
legacy-world-name: world_nether
seed: -9223372036854775808
version: 1.3
1 change: 1 addition & 0 deletions src/test/resources/worlds/delete_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ world_nether:
world-blacklist: []
read-only:
environment: nether
generator-settings: ''
legacy-world-name: world_nether
seed: -9223372036854775808
version: 1.3
2 changes: 2 additions & 0 deletions src/test/resources/worlds/edgecase_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ world:
- 2
read-only:
environment: normal
generator-settings: ''
legacy-world-name: world
seed: -9223372036854775808
version: 1.3
Expand Down Expand Up @@ -157,6 +158,7 @@ world_nether:
world-blacklist: []
read-only:
environment: nether
generator-settings: ''
legacy-world-name: world_nether
seed: -9223372036854775808
version: 1.3
3 changes: 3 additions & 0 deletions src/test/resources/worlds/migrated_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ world_the_end:
world-blacklist: []
read-only:
environment: the_end
generator-settings: ''
legacy-world-name: world_the_end
seed: -5176596003035866649
version: 1.3
Expand Down Expand Up @@ -156,6 +157,7 @@ world[dot]a[dot]b:
- test
read-only:
environment: normal
generator-settings: ''
legacy-world-name: world.a.b
seed: -5176596003035866649
version: 1.3
Expand Down Expand Up @@ -237,6 +239,7 @@ world[dot]a[dot]c:
- test
read-only:
environment: normal
generator-settings: ''
legacy-world-name: world.a.c
seed: -5176596003035866649
version: 1.3
3 changes: 3 additions & 0 deletions src/test/resources/worlds/newworld_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ world:
world-blacklist: []
read-only:
environment: normal
generator-settings: ''
legacy-world-name: world
seed: -9223372036854775808
version: 1.3
Expand Down Expand Up @@ -155,6 +156,7 @@ world_nether:
world-blacklist: []
read-only:
environment: nether
generator-settings: ''
legacy-world-name: world_nether
seed: -9223372036854775808
version: 1.3
Expand Down Expand Up @@ -230,6 +232,7 @@ minecraft:new[dot]world:
world-blacklist: []
read-only:
environment: normal
generator-settings: ''
legacy-world-name: null
seed: -9223372036854775808
version: 1.3
2 changes: 2 additions & 0 deletions src/test/resources/worlds/properties_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ world:
world-blacklist: []
read-only:
environment: NORMAL
generator-settings: ''
legacy-world-name: world
seed: -9223372036854775808
version: 1.3
Expand Down Expand Up @@ -150,6 +151,7 @@ world_nether:
world-blacklist: []
read-only:
environment: NETHER
generator-settings: ''
legacy-world-name: world_nether
seed: -9223372036854775808
version: 1.3
2 changes: 2 additions & 0 deletions src/test/resources/worlds/updated_worlds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ world:
world-blacklist: []
read-only:
environment: normal
generator-settings: ''
legacy-world-name: world
seed: -9223372036854775808
version: 1.3
Expand Down Expand Up @@ -157,6 +158,7 @@ world_nether:
world-blacklist: []
read-only:
environment: nether
generator-settings: ''
legacy-world-name: world_nether
seed: -9223372036854775808
version: 1.3
Loading