Skip to content

Commit

Permalink
Merge pull request #19 from TheNextLvl-net/2.0.0
Browse files Browse the repository at this point in the history
2.0.0
  • Loading branch information
NonSwag committed Aug 15, 2024
2 parents 3cbd72b + f5b6e66 commit 746e714
Show file tree
Hide file tree
Showing 98 changed files with 2,591 additions and 1,842 deletions.
2 changes: 1 addition & 1 deletion api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ java {
}

group = "net.thenextlvl.worlds"
version = "1.2.5"
version = "2.0.0"

repositories {
mavenCentral()
Expand Down
13 changes: 13 additions & 0 deletions api/src/main/java/net/thenextlvl/worlds/api/WorldsProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package net.thenextlvl.worlds.api;

import net.thenextlvl.worlds.api.link.LinkController;
import net.thenextlvl.worlds.api.view.GeneratorView;
import net.thenextlvl.worlds.api.view.LevelView;

public interface WorldsProvider {
GeneratorView generatorView();

LevelView levelView();

LinkController linkController();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package net.thenextlvl.worlds.api.event;

import lombok.Getter;
import org.bukkit.World;
import org.bukkit.event.HandlerList;
import org.bukkit.event.world.WorldEvent;

public class WorldDeleteEvent extends WorldEvent {
private static final @Getter HandlerList handlerList = new HandlerList();

public WorldDeleteEvent(World world) {
super(world, false);
}

@Override
public HandlerList getHandlers() {
return getHandlerList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package net.thenextlvl.worlds.api.event;

import org.bukkit.World;

public class WorldRegenerateEvent extends WorldDeleteEvent {
public WorldRegenerateEvent(World world) {
super(world);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
@FieldsAreNotNullByDefault
@ParametersAreNotNullByDefault
@MethodsReturnNotNullByDefault
package net.thenextlvl.worlds.preset.adapter;
package net.thenextlvl.worlds.api.event;

import core.annotation.FieldsAreNotNullByDefault;
import core.annotation.MethodsReturnNotNullByDefault;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.thenextlvl.worlds.api.link;

import org.bukkit.NamespacedKey;
import org.bukkit.PortalType;
import org.bukkit.World;

import java.util.Optional;

public interface LinkController {
Optional<NamespacedKey> getTarget(World world, PortalType type);

Optional<NamespacedKey> getTarget(World world, Relative relative);

Optional<NamespacedKey> getTarget(World world, World.Environment type);

boolean canLink(World source, World destination);

boolean link(World source, World destination);

boolean unlink(World source, Relative relative);
}
38 changes: 38 additions & 0 deletions api/src/main/java/net/thenextlvl/worlds/api/link/Relative.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.thenextlvl.worlds.api.link;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.key.Keyed;
import org.bukkit.NamespacedKey;
import org.bukkit.World;

import java.util.Arrays;
import java.util.Optional;

@Getter
@RequiredArgsConstructor
@Accessors(fluent = true)
public enum Relative implements Keyed {
OVERWORLD(new NamespacedKey("relative", "overworld")),
NETHER(new NamespacedKey("relative", "nether")),
THE_END(new NamespacedKey("relative", "the_end"));

private final NamespacedKey key;

public static Optional<Relative> valueOf(Key key) {
return Arrays.stream(values())
.filter(value -> value.key().equals(key))
.findAny();
}

public static Optional<Relative> valueOf(World.Environment environment) {
return Optional.ofNullable(switch (environment) {
case NORMAL -> Relative.OVERWORLD;
case NETHER -> Relative.NETHER;
case THE_END -> Relative.THE_END;
default -> null;
});
}
}
10 changes: 10 additions & 0 deletions api/src/main/java/net/thenextlvl/worlds/api/model/LevelExtras.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package net.thenextlvl.worlds.api.model;

import org.bukkit.NamespacedKey;
import org.jetbrains.annotations.Nullable;

public record LevelExtras(
@Nullable NamespacedKey key,
boolean enabled
) {
}
14 changes: 14 additions & 0 deletions api/src/main/java/net/thenextlvl/worlds/api/model/WorldPreset.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.thenextlvl.worlds.api.model;

import net.kyori.adventure.key.Key;
import net.kyori.adventure.key.Keyed;

public record WorldPreset(Key key) implements Keyed {
public static final WorldPreset AMPLIFIED = new WorldPreset(Key.key("minecraft", "amplified"));
public static final WorldPreset CHECKERBOARD = new WorldPreset(Key.key("minecraft", "checkerboard"));
public static final WorldPreset DEBUG = new WorldPreset(Key.key("minecraft", "debug"));
public static final WorldPreset FLAT = new WorldPreset(Key.key("minecraft", "flat"));
public static final WorldPreset LARGE_BIOMES = new WorldPreset(Key.key("minecraft", "large_biomes"));
public static final WorldPreset NORMAL = new WorldPreset(Key.key("minecraft", "noise"));
public static final WorldPreset SINGLE_BIOME = new WorldPreset(Key.key("minecraft", "fixed"));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@TypesAreNotNullByDefault
@FieldsAreNotNullByDefault
@ParametersAreNotNullByDefault
@MethodsReturnNotNullByDefault
package net.thenextlvl.worlds.api.model;

import core.annotation.FieldsAreNotNullByDefault;
import core.annotation.MethodsReturnNotNullByDefault;
import core.annotation.ParametersAreNotNullByDefault;
import core.annotation.TypesAreNotNullByDefault;
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package net.thenextlvl.worlds.preset;
package net.thenextlvl.worlds.api.preset;

import com.google.common.base.Preconditions;

public record Biome(String provider, String biome) {
Biome(org.bukkit.block.Biome biome) {
this(biome.key().namespace(), biome.key().value());
}

public static Biome minecraft(String biome) {
return new Biome("minecraft", biome);
}

public static Biome bukkit(org.bukkit.block.Biome biome) {
return new Biome(biome.key().namespace(), biome.key().value());
}

public static Biome literal(String string) {
var split = string.split(":", 2);
Preconditions.checkArgument(split.length == 2, "Not a valid biome: " + string);
Expand Down
14 changes: 14 additions & 0 deletions api/src/main/java/net/thenextlvl/worlds/api/preset/Layer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package net.thenextlvl.worlds.api.preset;

import org.bukkit.Material;

public record Layer(String block, int height) {
Layer(Material material, int height) {
this(material.key().asString(), height);
}

@Override
public String toString() {
return height() != 1 ? height() + "*" + block() : block();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.thenextlvl.worlds.preset;
package net.thenextlvl.worlds.api.preset;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
Expand All @@ -10,13 +10,13 @@
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import net.thenextlvl.worlds.preset.adapter.BiomeTypeAdapter;
import net.thenextlvl.worlds.preset.adapter.StructureTypeAdapter;
import net.thenextlvl.worlds.api.preset.adapter.BiomeTypeAdapter;
import net.thenextlvl.worlds.api.preset.adapter.StructureTypeAdapter;
import org.bukkit.Material;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedHashSet;
import java.util.stream.Collectors;

@Getter
@Setter
Expand All @@ -27,9 +27,9 @@ public class Preset {
private boolean features;
private boolean decoration;

private final List<Layer> layers = new ArrayList<>();
private LinkedHashSet<Layer> layers = new LinkedHashSet<>();
@SerializedName("structure_overrides")
private final List<Structure> structures = new ArrayList<>();
private LinkedHashSet<Structure> structures = new LinkedHashSet<>();

/**
* Add a layer to the preset
Expand Down Expand Up @@ -66,23 +66,22 @@ public boolean saveToFile(File file, boolean force) {
return true;
}

/**
* Serialize this preset into a json object.
*
* @return the serialized preset as a JsonObject
*/
public JsonObject serialize() {
return gson.toJsonTree(this).getAsJsonObject();
}

private static final Gson gson = new GsonBuilder()
.registerTypeAdapter(Structure.class, new StructureTypeAdapter())
.registerTypeAdapter(Material.class, MaterialAdapter.NotNull.INSTANCE)
.registerTypeAdapter(Biome.class, new BiomeTypeAdapter())
.setPrettyPrinting()
.create();

/**
* Serialize a preset into a json object
*
* @param preset the preset to serialize
* @return the serialized preset
*/
public static JsonObject serialize(Preset preset) {
return gson.toJsonTree(preset).getAsJsonObject();
}

/**
* Deserialize a json object into a preset
*
Expand All @@ -92,4 +91,12 @@ public static JsonObject serialize(Preset preset) {
public static Preset deserialize(JsonObject object) {
return gson.fromJson(object, Preset.class);
}

@Override
public String toString() {
var layers = layers().stream()
.map(Layer::toString)
.collect(Collectors.joining(","));
return layers + ";" + biome();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.thenextlvl.worlds.preset;
package net.thenextlvl.worlds.api.preset;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package net.thenextlvl.worlds.preset;
package net.thenextlvl.worlds.api.preset;

import org.bukkit.Material;

Expand Down
16 changes: 16 additions & 0 deletions api/src/main/java/net/thenextlvl/worlds/api/preset/Structure.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.thenextlvl.worlds.api.preset;

public record Structure(String structure) {
Structure(org.bukkit.generator.structure.Structure structure) {
this(structure.key().asString());
}

public static Structure minecraft(String structure) {
return new Structure("minecraft:" + structure);
}

@Override
public String toString() {
return structure();
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package net.thenextlvl.worlds.preset.adapter;
package net.thenextlvl.worlds.api.preset.adapter;

import com.google.gson.*;
import net.thenextlvl.worlds.preset.Biome;
import net.thenextlvl.worlds.api.preset.Biome;

import java.lang.reflect.Type;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package net.thenextlvl.worlds.preset.adapter;
package net.thenextlvl.worlds.api.preset.adapter;

import com.google.gson.*;
import net.thenextlvl.worlds.preset.Structure;
import net.thenextlvl.worlds.api.preset.Structure;

import java.lang.reflect.Type;

public class StructureTypeAdapter implements JsonSerializer<Structure>, JsonDeserializer<Structure> {
@Override
public Structure deserialize(JsonElement element, Type type, JsonDeserializationContext context) throws JsonParseException {
return Structure.literal(element.getAsString());
return new Structure(element.getAsString());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@TypesAreNotNullByDefault
@FieldsAreNotNullByDefault
@ParametersAreNotNullByDefault
@MethodsReturnNotNullByDefault
package net.thenextlvl.worlds.api.preset.adapter;

import core.annotation.FieldsAreNotNullByDefault;
import core.annotation.MethodsReturnNotNullByDefault;
import core.annotation.ParametersAreNotNullByDefault;
import core.annotation.TypesAreNotNullByDefault;
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@TypesAreNotNullByDefault
@FieldsAreNotNullByDefault
@ParametersAreNotNullByDefault
@MethodsReturnNotNullByDefault
package net.thenextlvl.worlds.api.preset;

import core.annotation.FieldsAreNotNullByDefault;
import core.annotation.MethodsReturnNotNullByDefault;
import core.annotation.ParametersAreNotNullByDefault;
import core.annotation.TypesAreNotNullByDefault;
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.thenextlvl.worlds.api.view;

import org.bukkit.plugin.Plugin;

public interface GeneratorView {
boolean hasGenerator(Plugin plugin);

boolean hasChunkGenerator(Class<? extends Plugin> clazz);

boolean hasBiomeProvider(Class<? extends Plugin> clazz);
}
Loading

0 comments on commit 746e714

Please sign in to comment.