From 627963836384be8fcdec42abbfa9560893855bf1 Mon Sep 17 00:00:00 2001 From: Christian Bergschneider Date: Thu, 2 Jan 2025 12:27:40 +0100 Subject: [PATCH] feat: implement platform biome --- .../terra/minestom/MinestomPlatform.java | 13 ++++++-- .../terra/minestom/biome/MinestomBiome.java | 17 ++++++++++ .../minestom/biome/MinestomBiomeLoader.java | 31 +++++++++++++++++++ 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiome.java create mode 100644 platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiomeLoader.java diff --git a/platforms/minestom/src/main/java/com/dfsek/terra/minestom/MinestomPlatform.java b/platforms/minestom/src/main/java/com/dfsek/terra/minestom/MinestomPlatform.java index 2cac94575..3e778039d 100644 --- a/platforms/minestom/src/main/java/com/dfsek/terra/minestom/MinestomPlatform.java +++ b/platforms/minestom/src/main/java/com/dfsek/terra/minestom/MinestomPlatform.java @@ -5,12 +5,16 @@ import com.dfsek.tectonic.api.TypeRegistry; import com.dfsek.tectonic.api.loader.type.TypeLoader; import com.dfsek.terra.AbstractPlatform; +import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.entity.EntityType; import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent; import com.dfsek.terra.api.handle.ItemHandle; import com.dfsek.terra.api.handle.WorldHandle; import com.dfsek.terra.api.world.biome.PlatformBiome; +import com.dfsek.terra.minestom.biome.MinestomBiomeLoader; +import com.dfsek.terra.minestom.entity.MinestomEntityType; import com.dfsek.terra.minestom.item.MinestomItemHandle; import com.dfsek.terra.minestom.world.MinestomWorldHandle; @@ -33,7 +37,10 @@ public final class MinestomPlatform extends AbstractPlatform { @Override public void register(TypeRegistry registry) { super.register(registry); - registry.registerLoader(PlatformBiome.class, (TypeLoader) (annotatedType, o, configLoader, depthTracker) -> () -> o); + registry + .registerLoader(PlatformBiome.class, new MinestomBiomeLoader()) + .registerLoader(EntityType.class, (TypeLoader) (annotatedType, o, configLoader, depthTracker) -> new MinestomEntityType((String) o)) + .registerLoader(BlockState.class, (TypeLoader) (annotatedType, o, configLoader, depthTracker) -> worldHandle.createBlockState((String) o)); } @Override @@ -59,13 +66,13 @@ public final class MinestomPlatform extends AbstractPlatform { @Override public @NotNull File getDataFolder() { File file = new File("./terra/"); - if (!file.exists()) file.mkdirs(); + if(!file.exists()) file.mkdirs(); return file; } public static MinestomPlatform getInstance() { - if (INSTANCE == null) { + if(INSTANCE == null) { INSTANCE = new MinestomPlatform(); } return INSTANCE; diff --git a/platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiome.java b/platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiome.java new file mode 100644 index 000000000..a4c146359 --- /dev/null +++ b/platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiome.java @@ -0,0 +1,17 @@ +package com.dfsek.terra.minestom.biome; + +import com.dfsek.terra.api.world.biome.PlatformBiome; + +import net.minestom.server.world.biome.Biome; + + +public class MinestomBiome implements PlatformBiome { + private final Biome biome; + + public MinestomBiome(Biome biome) { this.biome = biome; } + + @Override + public Biome getHandle() { + return biome; + } +} diff --git a/platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiomeLoader.java b/platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiomeLoader.java new file mode 100644 index 000000000..f74ba415e --- /dev/null +++ b/platforms/minestom/src/main/java/com/dfsek/terra/minestom/biome/MinestomBiomeLoader.java @@ -0,0 +1,31 @@ +package com.dfsek.terra.minestom.biome; + +import com.dfsek.tectonic.api.depth.DepthTracker; +import com.dfsek.tectonic.api.exception.LoadException; +import com.dfsek.tectonic.api.loader.ConfigLoader; +import com.dfsek.tectonic.api.loader.type.TypeLoader; + +import com.dfsek.terra.api.world.biome.PlatformBiome; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.registry.DynamicRegistry; +import net.minestom.server.utils.NamespaceID; +import net.minestom.server.world.biome.Biome; +import org.jetbrains.annotations.NotNull; + +import java.lang.reflect.AnnotatedType; + + +public class MinestomBiomeLoader implements TypeLoader { + private final DynamicRegistry biomeRegistry = MinecraftServer.getBiomeRegistry(); + + @Override + public PlatformBiome load(@NotNull AnnotatedType annotatedType, @NotNull Object o, @NotNull ConfigLoader configLoader, + DepthTracker depthTracker) throws LoadException { + String id = (String) o; + NamespaceID biomeID = NamespaceID.from(id); + Biome biome = biomeRegistry.get(biomeID); + if (biome == null) throw new LoadException("Biome %s does not exist in registry".formatted(id), depthTracker); + return new MinestomBiome(biome); + } +}