From 761015b6a8c961922f1f215cd51772850250e673 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Tue, 24 Sep 2024 01:39:53 +0700 Subject: [PATCH] feat: implemented default module for easy start --- .../ru/dragonestia/msb3/api/Bootstrap.java | 5 ++ .../dragonestia/msb3/api/ServerBootstrap.java | 2 + .../msb3/api/module/FlatWorldModule.java | 69 +++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 api/src/main/java/ru/dragonestia/msb3/api/module/FlatWorldModule.java diff --git a/api/src/main/java/ru/dragonestia/msb3/api/Bootstrap.java b/api/src/main/java/ru/dragonestia/msb3/api/Bootstrap.java index 111c35e..0252e10 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/Bootstrap.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/Bootstrap.java @@ -1,10 +1,15 @@ package ru.dragonestia.msb3.api; +import net.minestom.server.entity.GameMode; +import ru.dragonestia.msb3.api.module.FlatWorldModule; + public class Bootstrap { public static void main(String[] args) { var boot = new ServerBootstrap(); + FlatWorldModule.init(GameMode.ADVENTURE); + boot.start("0.0.0.0", 25565); } } diff --git a/api/src/main/java/ru/dragonestia/msb3/api/ServerBootstrap.java b/api/src/main/java/ru/dragonestia/msb3/api/ServerBootstrap.java index cd81fa6..f2442e2 100644 --- a/api/src/main/java/ru/dragonestia/msb3/api/ServerBootstrap.java +++ b/api/src/main/java/ru/dragonestia/msb3/api/ServerBootstrap.java @@ -28,6 +28,8 @@ public class ServerBootstrap { server = MinecraftServer.init(); + MinecraftServer.setBrandName("Dragonestia"); + init(); } diff --git a/api/src/main/java/ru/dragonestia/msb3/api/module/FlatWorldModule.java b/api/src/main/java/ru/dragonestia/msb3/api/module/FlatWorldModule.java new file mode 100644 index 0000000..9191861 --- /dev/null +++ b/api/src/main/java/ru/dragonestia/msb3/api/module/FlatWorldModule.java @@ -0,0 +1,69 @@ +package ru.dragonestia.msb3.api.module; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.coordinate.Pos; +import net.minestom.server.entity.GameMode; +import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.minestom.server.instance.Chunk; +import net.minestom.server.instance.DynamicChunk; +import net.minestom.server.instance.IChunkLoader; +import net.minestom.server.instance.Instance; +import net.minestom.server.instance.block.Block; +import net.minestom.server.world.DimensionType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.CompletableFuture; + +public class FlatWorldModule { + + private static boolean used = false; + + private FlatWorldModule() {} + + public static synchronized void init(GameMode gameMode) { + if (used) return; + used = true; + + var dimension = MinecraftServer.getDimensionTypeRegistry().register("msb3:full_bright", DimensionType.builder() + .ambientLight(2f) + .build()); + + var instance = MinecraftServer.getInstanceManager().createInstanceContainer(dimension, new IChunkLoader() { + @Override + public @NotNull CompletableFuture<@Nullable Chunk> loadChunk(@NotNull Instance instance, int chunkX, int chunkZ) { + return CompletableFuture.supplyAsync(() -> { + var chunk = new DynamicChunk(instance, chunkX, chunkZ); + for (int x = 0; x < 16; x++) { + for (int z = 0; z < 16; z++) { + for (int y = 0; y <= 10; y++) { + var block = switch (y) { + case 10 -> Block.GRASS_BLOCK; + case 9, 8, 7 -> Block.DIRT; + case 0 -> Block.BEDROCK; + default -> Block.STONE; + }; + chunk.setBlock(x, y, z, block); + } + } + } + return chunk; + }); + } + + @Override + public @NotNull CompletableFuture saveChunk(@NotNull Chunk chunk) { + return new CompletableFuture<>(); + } + }); + + MinecraftServer.getGlobalEventHandler().addListener(AsyncPlayerConfigurationEvent.class, event -> { + var player = event.getPlayer(); + + player.setRespawnPoint(new Pos(0, 11, 0)); + player.setGameMode(gameMode); + + event.setSpawningInstance(instance); + }); + } +}