From 2f2b6dc654d7bb79c5dd1343c2bd23ba7aa650e4 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 18 Mar 2021 15:05:37 +0300 Subject: [PATCH] Set spawn point option --- .../mixin/common/ServerWorldMixin.java | 15 ++++++++++++++- .../world/generator/GeneratorOptions.java | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/mixin/common/ServerWorldMixin.java b/src/main/java/ru/betterend/mixin/common/ServerWorldMixin.java index afecf839..35a1f5e2 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerWorldMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerWorldMixin.java @@ -9,6 +9,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.metadata.ModMetadata; @@ -17,6 +18,7 @@ import net.minecraft.nbt.NbtIo; import net.minecraft.server.MinecraftServer; import net.minecraft.server.WorldGenerationProgressListener; import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; import net.minecraft.world.dimension.DimensionType; @@ -26,6 +28,7 @@ import net.minecraft.world.level.ServerWorldProperties; import net.minecraft.world.level.storage.LevelStorage; import ru.betterend.BetterEnd; import ru.betterend.util.DataFixerUtil; +import ru.betterend.world.generator.GeneratorOptions; @Mixin(ServerWorld.class) public class ServerWorldMixin { @@ -56,7 +59,17 @@ public class ServerWorldMixin { be_writeDataFile(beData, version); } } - + + @Inject(method = "getSpawnPos", at = @At("HEAD"), cancellable = true) + private void be_getSpawnPos(CallbackInfoReturnable info) { + if (GeneratorOptions.changeSpawn()) { + if (((ServerWorld) (Object) this).getRegistryKey() == World.END) { + info.setReturnValue(GeneratorOptions.getSpawn()); + info.cancel(); + } + } + } + private void be_writeDataFile(File file, String version) { CompoundTag root = new CompoundTag(); root.putString("version", version); diff --git a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java index cdfec463..7e5cc0ee 100644 --- a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java +++ b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java @@ -1,5 +1,6 @@ package ru.betterend.world.generator; +import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import ru.betterend.config.Configs; @@ -20,6 +21,8 @@ public class GeneratorOptions { public static LayerOptions bigOptions; public static LayerOptions mediumOptions; public static LayerOptions smallOptions; + private static boolean changeSpawn; + private static BlockPos spawn; public static void init() { biomeSizeLand = Configs.GENERATOR_CONFIG.getInt("biomeMap", "biomeSizeLand", 256); @@ -38,6 +41,12 @@ public class GeneratorOptions { bigOptions = new LayerOptions("customGenerator.layers.bigIslands", Configs.GENERATOR_CONFIG, 300, 200, 70, 10, false); mediumOptions = new LayerOptions("customGenerator.layers.mediumIslands", Configs.GENERATOR_CONFIG, 150, 100, 70, 20, true); smallOptions = new LayerOptions("customGenerator.layers.smallIslands", Configs.GENERATOR_CONFIG, 60, 50, 70, 30, false); + changeSpawn = Configs.GENERATOR_CONFIG.getBoolean("spawn", "changeSpawn", false); + spawn = new BlockPos( + Configs.GENERATOR_CONFIG.getInt("spawn.point", "x", 20), + Configs.GENERATOR_CONFIG.getInt("spawn.point", "y", 65), + Configs.GENERATOR_CONFIG.getInt("spawn.point", "z", 0) + ); } public static int getBiomeSizeLand() { @@ -91,4 +100,12 @@ public class GeneratorOptions { public static int getEndCityFailChance() { return endCityFailChance; } + + public static boolean changeSpawn() { + return changeSpawn; + } + + public static BlockPos getSpawn() { + return spawn; + } }