Start work on detaching dimensions from json

Changes to be committed:
	new file:   src/main/java/org/dimdev/dimdoors/mixin/ChunkGeneratorSettingsAccessor.java
	modified:   src/main/java/org/dimdev/dimdoors/rift/targets/EscapeTarget.java
	modified:   src/main/java/org/dimdev/dimdoors/world/ModDimensions.java
	modified:   src/main/java/org/dimdev/dimdoors/world/limbo/LimboChunkGenerator.java
	modified:   src/main/resources/data/dimdoors/dimension/limbo.json
	modified:   src/main/resources/dimdoors.mixins.json
This commit is contained in:
SD 2020-09-09 17:51:43 +05:30
parent 502d86f514
commit e8d86f7461
No known key found for this signature in database
GPG key ID: E36B57EE08544BC5
6 changed files with 60 additions and 26 deletions

View file

@ -0,0 +1,17 @@
package org.dimdev.dimdoors.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import net.minecraft.block.BlockState;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.chunk.GenerationShapeConfig;
import net.minecraft.world.gen.chunk.StructuresConfig;
@Mixin(ChunkGeneratorSettings.class)
public interface ChunkGeneratorSettingsAccessor {
@Invoker("<init>")
static ChunkGeneratorSettings invokeInit(StructuresConfig structuresConfig, GenerationShapeConfig generationShapeConfig, BlockState defaultBlock, BlockState defaultFluid, int bedrockCeilingY, int bedrockFloorY, int seaLevel, boolean mobGenerationDisabled) {
throw new AssertionError();
}
}

View file

@ -54,8 +54,8 @@ public class EscapeTarget extends VirtualTarget implements EntityTarget { // TOD
chat(entity, new TranslatableText("rifts.destinations.escape.rift_has_closed")); chat(entity, new TranslatableText("rifts.destinations.escape.rift_has_closed"));
} }
if (!entity.getEntityWorld().isClient) { if (!entity.getEntityWorld().isClient) {
if (ModDimensions.limboDimension != null) { if (ModDimensions.LIMBO_DIMENSION != null) {
entity.moveToWorld(ModDimensions.limboDimension); entity.moveToWorld(ModDimensions.LIMBO_DIMENSION);
entity.setPos(location.getX(), location.getY(), location.getZ()); entity.setPos(location.getX(), location.getY(), location.getZ());
} }
} }

View file

@ -1,7 +1,11 @@
package org.dimdev.dimdoors.world; package org.dimdev.dimdoors.world;
import java.util.Optional;
import java.util.OptionalLong; import java.util.OptionalLong;
import com.google.common.collect.ImmutableMap;
import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.mixin.ChunkGeneratorSettingsAccessor;
import org.dimdev.dimdoors.mixin.DimensionTypeAccessor; import org.dimdev.dimdoors.mixin.DimensionTypeAccessor;
import org.dimdev.dimdoors.world.limbo.LimboBiomeSource; import org.dimdev.dimdoors.world.limbo.LimboBiomeSource;
import org.dimdev.dimdoors.world.limbo.LimboChunkGenerator; import org.dimdev.dimdoors.world.limbo.LimboChunkGenerator;
@ -14,6 +18,11 @@ import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey; import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.dimension.DimensionType; import net.minecraft.world.dimension.DimensionType;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
import net.minecraft.world.gen.chunk.GenerationShapeConfig;
import net.minecraft.world.gen.chunk.NoiseSamplingConfig;
import net.minecraft.world.gen.chunk.SlideConfig;
import net.minecraft.world.gen.chunk.StructuresConfig;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
@ -26,13 +35,15 @@ public final class ModDimensions {
public static final RegistryKey<DimensionType> LIMBO_TYPE = RegistryKey.of(Registry.DIMENSION_TYPE_KEY, new Identifier("dimdoors:limbo")); public static final RegistryKey<DimensionType> LIMBO_TYPE = RegistryKey.of(Registry.DIMENSION_TYPE_KEY, new Identifier("dimdoors:limbo"));
public static final RegistryKey<DimensionType> POCKET_TYPE = RegistryKey.of(Registry.DIMENSION_TYPE_KEY, new Identifier("dimdoors:personal_pockets")); public static final RegistryKey<DimensionType> POCKET_TYPE = RegistryKey.of(Registry.DIMENSION_TYPE_KEY, new Identifier("dimdoors:personal_pockets"));
public static DimensionType limboDimensionType = DimensionTypeAccessor.invokeInit(OptionalLong.of(6000), false, false, false, false, 4.0, false, false, true, false, 256, BlockTags.INFINIBURN_OVERWORLD.getId(), DimensionType.THE_END_ID, 0.1F); public static DimensionType LIMBO_DIMENSION_TYPE = DimensionTypeAccessor.invokeInit(OptionalLong.of(6000), false, false, false, false, 4.0, false, false, true, false, 256, BlockTags.INFINIBURN_OVERWORLD.getId(), DimensionType.THE_END_ID, 0.1F);
public static DimensionType pocketDimensionType = DimensionTypeAccessor.invokeInit(OptionalLong.empty(), true, false, false, false, 4.0, false, false, true, false, 256, BlockTags.INFINIBURN_OVERWORLD.getId(), DimensionType.THE_END_ID, 0.1F); public static DimensionType POCKET_DIMENSION_TYPE = DimensionTypeAccessor.invokeInit(OptionalLong.empty(), true, false, false, false, 4.0, false, false, true, false, 256, BlockTags.INFINIBURN_OVERWORLD.getId(), DimensionType.THE_END_ID, 0.1F);
public static ServerWorld limboDimension; public static final ChunkGeneratorSettings LIMBO_CHUNK_GENERATOR_SETTINGS;
public static ServerWorld personalPocketDimension;
public static ServerWorld publicPocketDimension; public static ServerWorld LIMBO_DIMENSION;
public static ServerWorld dungeonPocketDimension; public static ServerWorld PERSONAL_POCKET_DIMENSION;
public static ServerWorld PUBLIC_POCKET_DIMENSION;
public static ServerWorld DUNGEON_POCKET_DIMENSION;
public static boolean isDimDoorsPocketDimension(World world) { public static boolean isDimDoorsPocketDimension(World world) {
return isDimDoorsPocketDimension(world.getRegistryKey()); return isDimDoorsPocketDimension(world.getRegistryKey());
@ -43,20 +54,26 @@ public final class ModDimensions {
} }
public static boolean isLimboDimension(World world) { public static boolean isLimboDimension(World world) {
return world.getRegistryKey() == LIMBO || world.getDimension() == limboDimensionType || world == limboDimension; return world.getRegistryKey() == LIMBO || world.getDimension() == LIMBO_DIMENSION_TYPE || world == LIMBO_DIMENSION;
} }
public static void init() { public static void init() {
ServerLifecycleEvents.SERVER_STARTED.register(server -> { ServerLifecycleEvents.SERVER_STARTED.register(server -> {
ModDimensions.limboDimensionType = server.getRegistryManager().getDimensionTypes().get(LIMBO_TYPE); ModDimensions.LIMBO_DIMENSION_TYPE = server.getRegistryManager().getDimensionTypes().get(LIMBO_TYPE);
ModDimensions.pocketDimensionType = server.getRegistryManager().getDimensionTypes().get(POCKET_TYPE); ModDimensions.POCKET_DIMENSION_TYPE = server.getRegistryManager().getDimensionTypes().get(POCKET_TYPE);
ModDimensions.limboDimension = server.getWorld(LIMBO); ModDimensions.LIMBO_DIMENSION = server.getWorld(LIMBO);
ModDimensions.personalPocketDimension = server.getWorld(PERSONAL); ModDimensions.PERSONAL_POCKET_DIMENSION = server.getWorld(PERSONAL);
ModDimensions.publicPocketDimension = server.getWorld(PUBLIC); ModDimensions.PUBLIC_POCKET_DIMENSION = server.getWorld(PUBLIC);
ModDimensions.dungeonPocketDimension = server.getWorld(DUNGEON); ModDimensions.DUNGEON_POCKET_DIMENSION = server.getWorld(DUNGEON);
}); });
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("dimdoors", "blank"), BlankChunkGenerator.CODEC); Registry.register(Registry.CHUNK_GENERATOR, new Identifier("dimdoors", "blank"), BlankChunkGenerator.CODEC);
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("dimdoors", "limbo_chunk_generator"), LimboChunkGenerator.CODEC); Registry.register(Registry.CHUNK_GENERATOR, new Identifier("dimdoors", "limbo_chunk_generator"), LimboChunkGenerator.CODEC);
Registry.register(Registry.BIOME_SOURCE, new Identifier("dimdoors", "limbo_biome_source"), LimboBiomeSource.CODEC); Registry.register(Registry.BIOME_SOURCE, new Identifier("dimdoors", "limbo_biome_source"), LimboBiomeSource.CODEC);
} }
static {
StructuresConfig limboStructuresConfig = new StructuresConfig(Optional.of(StructuresConfig.DEFAULT_STRONGHOLD), ImmutableMap.of());
GenerationShapeConfig limboShapeConfig = new GenerationShapeConfig(128, new NoiseSamplingConfig(0.94213419649817745, 1.102539814507745, 80, 120), new SlideConfig(-1, 3, 0), new SlideConfig(60, 2, 2), 2, 4, 1, -0.16875, true, true, true, true);
LIMBO_CHUNK_GENERATOR_SETTINGS = ChunkGeneratorSettingsAccessor.invokeInit(limboStructuresConfig, limboShapeConfig, ModBlocks.UNRAVELLED_FABRIC.getDefaultState(), ModBlocks.ETERNAL_FLUID.getDefaultState(), 5, -1, 8, false);
}
} }

View file

@ -13,6 +13,7 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.mixin.ChunkGeneratorAccessor; import org.dimdev.dimdoors.mixin.ChunkGeneratorAccessor;
import org.dimdev.dimdoors.world.ModDimensions;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
@ -58,8 +59,6 @@ public class LimboChunkGenerator extends ChunkGenerator {
public static final Codec<LimboChunkGenerator> CODEC = RecordCodecBuilder.create((instance) -> { public static final Codec<LimboChunkGenerator> CODEC = RecordCodecBuilder.create((instance) -> {
return instance.group(BiomeSource.CODEC.fieldOf("biome_source").forGetter((chunkGenerator) -> { return instance.group(BiomeSource.CODEC.fieldOf("biome_source").forGetter((chunkGenerator) -> {
return chunkGenerator.biomeSource; return chunkGenerator.biomeSource;
}), ChunkGeneratorSettings.REGISTRY_CODEC.fieldOf("settings").forGetter((chunkGenerator) -> {
return chunkGenerator.settings;
})).apply(instance, instance.stable(LimboChunkGenerator::new)); })).apply(instance, instance.stable(LimboChunkGenerator::new));
}); });
private static final float[] NOISE_WEIGHT_TABLE = Util.make(new float[13824], (array) -> { private static final float[] NOISE_WEIGHT_TABLE = Util.make(new float[13824], (array) -> {
@ -99,15 +98,15 @@ public class LimboChunkGenerator extends ChunkGenerator {
private final long worldSeed; private final long worldSeed;
private final int worldHeight; private final int worldHeight;
public LimboChunkGenerator(BiomeSource biomeSource, Supplier<ChunkGeneratorSettings> supplier) { public LimboChunkGenerator(BiomeSource biomeSource) {
this(biomeSource, biomeSource, supplier); this(biomeSource, biomeSource);
} }
private LimboChunkGenerator(BiomeSource biomeSource, BiomeSource biomeSource2, Supplier<ChunkGeneratorSettings> supplier) { private LimboChunkGenerator(BiomeSource biomeSource, BiomeSource biomeSource2) {
super(biomeSource, biomeSource2, supplier.get().getStructuresConfig(), new Random().nextLong()); super(biomeSource, biomeSource2, ModDimensions.LIMBO_CHUNK_GENERATOR_SETTINGS.getStructuresConfig(), new Random().nextLong());
this.worldSeed = ((ChunkGeneratorAccessor) this).getWorldSeed(); this.worldSeed = ((ChunkGeneratorAccessor) this).getWorldSeed();
ChunkGeneratorSettings chunkGeneratorSettings = supplier.get(); ChunkGeneratorSettings chunkGeneratorSettings = ModDimensions.LIMBO_CHUNK_GENERATOR_SETTINGS;
this.settings = supplier; this.settings = () -> ModDimensions.LIMBO_CHUNK_GENERATOR_SETTINGS;
GenerationShapeConfig generationShapeConfig = chunkGeneratorSettings.getGenerationShapeConfig(); GenerationShapeConfig generationShapeConfig = chunkGeneratorSettings.getGenerationShapeConfig();
this.worldHeight = generationShapeConfig.getHeight(); this.worldHeight = generationShapeConfig.getHeight();
this.verticalNoiseResolution = generationShapeConfig.getSizeVertical() * 4; this.verticalNoiseResolution = generationShapeConfig.getSizeVertical() * 4;
@ -164,7 +163,7 @@ public class LimboChunkGenerator extends ChunkGenerator {
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public ChunkGenerator withSeed(long seed) { public ChunkGenerator withSeed(long seed) {
return new LimboChunkGenerator(this.biomeSource.withSeed(seed), this.settings); return new LimboChunkGenerator(this.biomeSource.withSeed(seed));
} }
private double sampleNoise(int x, int y, int z, double horizontalScale, double verticalScale, double horizontalStretch, double verticalStretch) { private double sampleNoise(int x, int y, int z, double horizontalScale, double verticalScale, double horizontalStretch, double verticalStretch) {

View file

@ -24,8 +24,8 @@
"size_vertical": 4, "size_vertical": 4,
"height": 128, "height": 128,
"sampling": { "sampling": {
"xz_scale": 0.9999999814507745, "xz_scale": 0.94213419649817745,
"y_scale": 1.502539814507745, "y_scale": 1.102539814507745,
"xz_factor": 80, "xz_factor": 80,
"y_factor": 120 "y_factor": 120
}, },

View file

@ -5,6 +5,7 @@
"mixins": [ "mixins": [
"BuiltinBiomesAccessor", "BuiltinBiomesAccessor",
"ChunkGeneratorAccessor", "ChunkGeneratorAccessor",
"ChunkGeneratorSettingsAccessor",
"DefaultBiomeFeaturesMixin", "DefaultBiomeFeaturesMixin",
"DimensionTypeAccessor", "DimensionTypeAccessor",
"DirectionAccessor", "DirectionAccessor",