diff --git a/gradle.properties b/gradle.properties index 15d1888c5..3b969648b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,13 +11,13 @@ api_version = 0.15.1+build.380-1.16.1 # Mod mod_name = astromine -mod_version = 1.3.4 +mod_version = 1.3.5 mod_group = com.github.chainmailstudios version_meta = fabric-1.16.1 # Dependencies cardinal_components_version = 2.4.2 -spinnery_version = 3.1.12+fabric-1.16.x +spinnery_version = 3.1.14+fabric-1.16.x shapes_version = 2.0.0+build.10 patchouli_version = 1.16-37.21-FABRIC lba_version = 0.7.1-pre.4 diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/block/entity/VentBlockEntity.java b/src/main/java/com/github/chainmailstudios/astromine/common/block/entity/VentBlockEntity.java index 0ac204910..02670195c 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/block/entity/VentBlockEntity.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/block/entity/VentBlockEntity.java @@ -81,7 +81,7 @@ public void tick() { BlockPos output = position.offset(direction); - if (asEnergy().use(50) && world.getBlockState(output).getBlock() instanceof AirBlock) { + if (asEnergy().use(AstromineConfig.get().ventEnergyConsumed) && world.getBlockState(output).getBlock() instanceof AirBlock) { ComponentProvider componentProvider = ComponentProvider.fromWorld(world); WorldAtmosphereComponent atmosphereComponent = componentProvider.getComponent(AstromineComponentTypes.WORLD_ATMOSPHERE_COMPONENT); diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/MoonBiome.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/DepthScaleBiome.java similarity index 91% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/MoonBiome.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/biome/DepthScaleBiome.java index 63cd2cf64..afda9ffd9 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/MoonBiome.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/DepthScaleBiome.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world; +package com.github.chainmailstudios.astromine.common.world.biome; import net.minecraft.sound.BiomeMoodSound; @@ -29,8 +29,8 @@ import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder; -public class MoonBiome extends Biome { - public MoonBiome(float baseHeight, float variation) { +public class DepthScaleBiome extends Biome { + public DepthScaleBiome(float baseHeight, float variation) { super(new Settings().configureSurfaceBuilder(SurfaceBuilder.NOPE, SurfaceBuilder.STONE_CONFIG) .precipitation(Precipitation.NONE) .category(Category.NONE) diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/EarthSpaceBiome.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/EarthSpaceBiome.java similarity index 97% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/EarthSpaceBiome.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/biome/EarthSpaceBiome.java index c27ec5b1d..2b574600d 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/EarthSpaceBiome.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/EarthSpaceBiome.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world; +package com.github.chainmailstudios.astromine.common.world.biome; import com.github.chainmailstudios.astromine.registry.AstromineEntityTypes; import com.github.chainmailstudios.astromine.registry.AstromineFeatures; diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/MoonBiome.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/MoonBiome.java new file mode 100644 index 000000000..7070dcf2d --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/biome/MoonBiome.java @@ -0,0 +1,15 @@ +package com.github.chainmailstudios.astromine.common.world.biome; + +import com.github.chainmailstudios.astromine.registry.AstromineFeatures; + +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.decorator.CountDecoratorConfig; +import net.minecraft.world.gen.decorator.Decorator; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; + +public class MoonBiome extends DepthScaleBiome { + public MoonBiome(float baseHeight, float variation) { + super(baseHeight, variation); + this.addFeature(GenerationStep.Feature.RAW_GENERATION, AstromineFeatures.MOON_CRATER.configure(DefaultFeatureConfig.INSTANCE).createDecoratedFeature(Decorator.COUNT_HEIGHTMAP.configure(new CountDecoratorConfig(2)))); + } +} diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/feature/MoonCraterFeature.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/feature/MoonCraterFeature.java new file mode 100644 index 000000000..3b1dd9958 --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/feature/MoonCraterFeature.java @@ -0,0 +1,66 @@ +package com.github.chainmailstudios.astromine.common.world.feature; + +import java.util.Random; + +import com.github.chainmailstudios.astromine.common.noise.OpenSimplexNoise; +import com.mojang.serialization.Codec; + +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ServerWorldAccess; +import net.minecraft.world.gen.StructureAccessor; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import net.minecraft.world.gen.feature.Feature; + +public class MoonCraterFeature extends Feature { + private static final double SCALE = 1 / 19.42; + private long seed = 0; + private OpenSimplexNoise noise = new OpenSimplexNoise(0); + + public MoonCraterFeature(Codec configCodec) { + super(configCodec); + } + + @Override + public boolean generate(ServerWorldAccess world, StructureAccessor structureAccessor, ChunkGenerator generator, Random random, BlockPos pos, DefaultFeatureConfig config) { + if (this.seed != world.getSeed()) { + this.noise = new OpenSimplexNoise(world.getSeed()); + this.seed = world.getSeed(); + } + + int radius = random.nextInt(7) + 4; + + int radiusSquared = radius * radius; + + for (int x = -radius; x <= radius; x++) { + for (int z = -radius; z <= radius; z++) { + + for (int y = -radius; y <= radius; y++) { + int squareDistance = (x * x) + (y * y) + (z * z); + + if (squareDistance <= radiusSquared) { + BlockPos local = pos.add(x, y, z); + + double noiseX = local.getX() * SCALE; + double noiseY = local.getY() * SCALE; + double noiseZ = local.getZ() * SCALE; + + double noise = this.noise.sample(noiseX, noiseY, noiseZ); + noise += computeNoiseFalloff(y, radius); + + if (noise > 0 && !world.getBlockState(local).isAir()) { + world.setBlockState(local, Blocks.AIR.getDefaultState(), 3); + } + } + } + } + } + + return true; + } + + private double computeNoiseFalloff(int y, int radius) { + return -(2.0 / (y + radius + 0.5)); + } +} diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/mars/MarsBiomeSource.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/mars/MarsBiomeSource.java new file mode 100644 index 000000000..0627fb917 --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/mars/MarsBiomeSource.java @@ -0,0 +1,66 @@ +package com.github.chainmailstudios.astromine.common.world.generation.mars; + +import java.util.function.LongFunction; + +import com.github.chainmailstudios.astromine.common.world.layer.mars.MarsBiomeLayer; +import com.github.chainmailstudios.astromine.common.world.layer.mars.MarsRiverLayer; +import com.github.chainmailstudios.astromine.common.world.layer.util.PlainsOnlyLayer; +import com.google.common.collect.ImmutableList; +import com.mojang.serialization.Codec; + +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.layer.ScaleLayer; +import net.minecraft.world.biome.layer.SimpleLandNoiseLayer; +import net.minecraft.world.biome.layer.util.CachingLayerContext; +import net.minecraft.world.biome.layer.util.LayerFactory; +import net.minecraft.world.biome.layer.util.LayerSampleContext; +import net.minecraft.world.biome.layer.util.LayerSampler; +import net.minecraft.world.biome.source.BiomeLayerSampler; +import net.minecraft.world.biome.source.BiomeSource; + +public class MarsBiomeSource extends BiomeSource { + public static Codec CODEC = Codec.LONG.fieldOf("seed").xmap(MarsBiomeSource::new, (source) -> source.seed).stable().codec(); + private final long seed; + private final BiomeLayerSampler sampler; + + public MarsBiomeSource(long seed) { + super(ImmutableList.of()); + this.seed = seed; + this.sampler = build(seed); + } + + @Override + protected Codec method_28442() { + return CODEC; + } + + @Override + public BiomeSource withSeed(long seed) { + return new MarsBiomeSource(seed); + } + + @Override + public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) { + return sampler.sample(biomeX, biomeZ); + } + + public static BiomeLayerSampler build(long seed) { + return new BiomeLayerSampler(build((salt) -> new CachingLayerContext(25, seed, salt))); + } + + private static > LayerFactory build(LongFunction contextProvider) { + LayerFactory mainLayer = SimpleLandNoiseLayer.INSTANCE.create(contextProvider.apply(432L), PlainsOnlyLayer.INSTANCE.create(contextProvider.apply(543L))); + for (int i = 0; i < 7; i++) { + mainLayer = ScaleLayer.NORMAL.create(contextProvider.apply(43 + i), mainLayer); + } + + mainLayer = MarsRiverLayer.INSTANCE.create(contextProvider.apply(56L), mainLayer); + for (int i = 0; i < 2; i++) { + mainLayer = ScaleLayer.NORMAL.create(contextProvider.apply(473 + i), mainLayer); + } + + mainLayer = MarsBiomeLayer.INSTANCE.create(contextProvider.apply(721), mainLayer); + + return mainLayer; + } +} diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/mars/MarsChunkGenerator.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/mars/MarsChunkGenerator.java new file mode 100644 index 000000000..cd63f6146 --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/mars/MarsChunkGenerator.java @@ -0,0 +1,132 @@ +package com.github.chainmailstudios.astromine.common.world.generation.mars; + +import java.util.Arrays; +import java.util.Random; + +import com.github.chainmailstudios.astromine.common.miscellaneous.BiomeGenCache; +import com.github.chainmailstudios.astromine.common.noise.OctaveNoiseSampler; +import com.github.chainmailstudios.astromine.common.noise.OpenSimplexNoise; +import com.github.chainmailstudios.astromine.common.world.generation.moon.MoonBiomeSource; +import com.github.chainmailstudios.astromine.registry.AstromineBlocks; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.BlockView; +import net.minecraft.world.ChunkRegion; +import net.minecraft.world.Heightmap; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.source.BiomeSource; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.gen.ChunkRandom; +import net.minecraft.world.gen.StructureAccessor; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.chunk.StructuresConfig; +import net.minecraft.world.gen.chunk.VerticalBlockSample; + +public class MarsChunkGenerator extends ChunkGenerator { + public static Codec CODEC = RecordCodecBuilder.create(instance -> instance.group(BiomeSource.field_24713.fieldOf("biome_source").forGetter(gen -> gen.biomeSource), Codec.LONG.fieldOf("seed").forGetter(gen -> gen.seed)) + .apply(instance, MarsChunkGenerator::new)); + + private final BiomeSource biomeSource; + private final long seed; + private final OctaveNoiseSampler lowerInterpolatedNoise; + private final OctaveNoiseSampler upperInterpolatedNoise; + private final OctaveNoiseSampler interpolationNoise; + private final ThreadLocal cache; + public MarsChunkGenerator(BiomeSource biomeSource, long seed) { + super(biomeSource, new StructuresConfig(false)); + this.biomeSource = biomeSource; + this.seed = seed; + Random random = new Random(seed); + lowerInterpolatedNoise = new OctaveNoiseSampler<>(OpenSimplexNoise.class, random, 5, 140.43, 45, 10); + upperInterpolatedNoise = new OctaveNoiseSampler<>(OpenSimplexNoise.class, random, 5, 140.43, 45, 10); + interpolationNoise = new OctaveNoiseSampler<>(OpenSimplexNoise.class, random, 3, 80.32, 3, 3); + this.cache = ThreadLocal.withInitial(() -> new BiomeGenCache(biomeSource)); + } + + @Override + protected Codec method_28506() { + return CODEC; + } + + @Override + public ChunkGenerator withSeed(long seed) { + return new MarsChunkGenerator(new MoonBiomeSource(seed), seed); + } + + @Override + public void buildSurface(ChunkRegion region, Chunk chunk) { + // Unused. + } + + @Override + public void populateNoise(WorldAccess world, StructureAccessor accessor, Chunk chunk) { + int x1 = chunk.getPos().getStartX(); + int z1 = chunk.getPos().getStartZ(); + + int x2 = chunk.getPos().getEndX(); + int z2 = chunk.getPos().getEndZ(); + + ChunkRandom chunkRandom = new ChunkRandom(); + chunkRandom.setTerrainSeed(chunk.getPos().x, chunk.getPos().z); + + for (int x = x1; x <= x2; ++x) { + for (int z = z1; z <= z2; ++z) { + float depth = 0; + float scale = 0; + int i = 0; + + // Biome lerp + for (int x0 = -5; x0 <= 5; x0++) { + for (int z0 = -5; z0 <= 5; z0++) { + Biome biome = this.cache.get().getBiome((x + x0) >> 2, (z + z0) >> 2); + + i++; + depth += biome.getDepth(); + scale += biome.getScale(); + } + } + + depth /= i; + scale /= i; + + // Noise calculation + double noise = interpolationNoise.sample(x, z); + if (noise >= 1) { + noise = upperInterpolatedNoise.sample(x, z); + } else if (noise <= -1) { + noise = lowerInterpolatedNoise.sample(x, z); + } else { + noise = MathHelper.clampedLerp(lowerInterpolatedNoise.sample(x, z), upperInterpolatedNoise.sample(x, z), noise); + } + + int height = (int) (depth + (noise * scale)); + for (int y = 0; y <= height; ++y) { + chunk.setBlockState(new BlockPos(x, y, z), AstromineBlocks.MARS_SOIL.getDefaultState(), false); + if (y <= 5) { + if (chunkRandom.nextInt(y + 1) == 0) { + chunk.setBlockState(new BlockPos(x, y, z), Blocks.BEDROCK.getDefaultState(), false); + } + } + } + } + } + } + + @Override + public int getHeight(int x, int z, Heightmap.Type heightmapType) { + return 0; + } + + @Override + public BlockView getColumnSample(int x, int z) { + BlockState[] states = new BlockState[256]; + Arrays.fill(states, Blocks.AIR.getDefaultState()); + return new VerticalBlockSample(states); + } +} diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/MoonBiomeSource.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/moon/MoonBiomeSource.java similarity index 98% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/generation/MoonBiomeSource.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/generation/moon/MoonBiomeSource.java index 3d715217d..9ff246640 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/MoonBiomeSource.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/moon/MoonBiomeSource.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world.generation; +package com.github.chainmailstudios.astromine.common.world.generation.moon; import java.util.function.LongFunction; -import com.github.chainmailstudios.astromine.common.world.layer.MoonBiomeLayer; +import com.github.chainmailstudios.astromine.common.world.layer.moon.MoonBiomeLayer; import com.google.common.collect.ImmutableList; import com.mojang.serialization.Codec; diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/MoonChunkGenerator.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/moon/MoonChunkGenerator.java similarity index 99% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/generation/MoonChunkGenerator.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/generation/moon/MoonChunkGenerator.java index 52379ef23..77e5fd89d 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/MoonChunkGenerator.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/moon/MoonChunkGenerator.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world.generation; +package com.github.chainmailstudios.astromine.common.world.generation.moon; import java.util.Arrays; diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/EarthSpaceBiomeSource.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/space/EarthSpaceBiomeSource.java similarity index 99% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/generation/EarthSpaceBiomeSource.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/generation/space/EarthSpaceBiomeSource.java index de675cd24..25034325a 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/EarthSpaceBiomeSource.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/space/EarthSpaceBiomeSource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world.generation; +package com.github.chainmailstudios.astromine.common.world.generation.space; import com.github.chainmailstudios.astromine.registry.AstromineBiomes; import com.google.common.collect.ImmutableList; diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/EarthSpaceChunkGenerator.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/space/EarthSpaceChunkGenerator.java similarity index 99% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/generation/EarthSpaceChunkGenerator.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/generation/space/EarthSpaceChunkGenerator.java index 6bad18e80..71e4be166 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/EarthSpaceChunkGenerator.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/generation/space/EarthSpaceChunkGenerator.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world.generation; +package com.github.chainmailstudios.astromine.common.world.generation.space; import com.github.chainmailstudios.astromine.common.noise.OctaveNoiseSampler; import com.github.chainmailstudios.astromine.common.noise.OpenSimplexNoise; diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/mars/MarsBiomeLayer.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/mars/MarsBiomeLayer.java new file mode 100644 index 000000000..8844002ea --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/mars/MarsBiomeLayer.java @@ -0,0 +1,24 @@ +package com.github.chainmailstudios.astromine.common.world.layer.mars; + +import com.github.chainmailstudios.astromine.registry.AstromineBiomes; + +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.layer.type.ParentedLayer; +import net.minecraft.world.biome.layer.util.IdentityCoordinateTransformer; +import net.minecraft.world.biome.layer.util.LayerSampleContext; +import net.minecraft.world.biome.layer.util.LayerSampler; + +public enum MarsBiomeLayer implements ParentedLayer, IdentityCoordinateTransformer { + INSTANCE; + private static final int RIVER_ID = Registry.BIOME.getRawId(AstromineBiomes.MARS_RIVERBED); + private static final int MARS_ID = Registry.BIOME.getRawId(AstromineBiomes.MARS); + + @Override + public int sample(LayerSampleContext context, LayerSampler parent, int x, int z) { + if (parent.sample(x, z) == RIVER_ID) { + return RIVER_ID; + } + + return MARS_ID; + } +} diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/mars/MarsRiverLayer.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/mars/MarsRiverLayer.java new file mode 100644 index 000000000..8c8f43498 --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/mars/MarsRiverLayer.java @@ -0,0 +1,22 @@ +package com.github.chainmailstudios.astromine.common.world.layer.mars; + +import com.github.chainmailstudios.astromine.registry.AstromineBiomes; + +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.layer.type.CrossSamplingLayer; +import net.minecraft.world.biome.layer.util.LayerRandomnessSource; + +public enum MarsRiverLayer implements CrossSamplingLayer { + INSTANCE; + + public static final int RIVER_ID = Registry.BIOME.getRawId(AstromineBiomes.MARS_RIVERBED); + + public int sample(LayerRandomnessSource context, int n, int e, int s, int w, int center) { + int i = isValidForRiver(center); + return i == isValidForRiver(w) && i == isValidForRiver(n) && i == isValidForRiver(e) && i == isValidForRiver(s) ? -1 : RIVER_ID; + } + + private static int isValidForRiver(int value) { + return value >= 2 ? 2 + (value & 1) : value; + } +} \ No newline at end of file diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/MoonBiomeLayer.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/moon/MoonBiomeLayer.java similarity index 99% rename from src/main/java/com/github/chainmailstudios/astromine/common/world/layer/MoonBiomeLayer.java rename to src/main/java/com/github/chainmailstudios/astromine/common/world/layer/moon/MoonBiomeLayer.java index 6b4d9aacd..3bcc6fd29 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/MoonBiomeLayer.java +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/moon/MoonBiomeLayer.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.github.chainmailstudios.astromine.common.world.layer; +package com.github.chainmailstudios.astromine.common.world.layer.moon; import com.github.chainmailstudios.astromine.registry.AstromineBiomes; diff --git a/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/util/PlainsOnlyLayer.java b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/util/PlainsOnlyLayer.java new file mode 100644 index 000000000..97bfda5e7 --- /dev/null +++ b/src/main/java/com/github/chainmailstudios/astromine/common/world/layer/util/PlainsOnlyLayer.java @@ -0,0 +1,14 @@ +package com.github.chainmailstudios.astromine.common.world.layer.util; + +import net.minecraft.world.biome.layer.type.InitLayer; +import net.minecraft.world.biome.layer.util.IdentityCoordinateTransformer; +import net.minecraft.world.biome.layer.util.LayerRandomnessSource; + +public enum PlainsOnlyLayer implements InitLayer, IdentityCoordinateTransformer { + INSTANCE; + + @Override + public int sample(LayerRandomnessSource context, int x, int y) { + return 1; + } +} diff --git a/src/main/java/com/github/chainmailstudios/astromine/mixin/MiningToolItemMixin.java b/src/main/java/com/github/chainmailstudios/astromine/mixin/MiningToolItemMixin.java index a4d19dc36..6ff05805f 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/mixin/MiningToolItemMixin.java +++ b/src/main/java/com/github/chainmailstudios/astromine/mixin/MiningToolItemMixin.java @@ -33,6 +33,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import java.util.Optional; import java.util.UUID; @Mixin(MiningToolItem.class) @@ -42,6 +43,7 @@ public abstract class MiningToolItemMixin implements MiningToolItemAccess { @Override public double astromine_getAttackSpeed() { - return getAttributeModifiers(EquipmentSlot.MAINHAND).get(EntityAttributes.GENERIC_ATTACK_SPEED).stream().filter((EntityAttributeModifier modifier) -> modifier.getId().equals(UUID.fromString("FA233E1C-4180-4865-B01B-BCCE9785ACA3"))).findFirst().get().getValue(); + Optional opt = getAttributeModifiers(EquipmentSlot.MAINHAND).get(EntityAttributes.GENERIC_ATTACK_SPEED).stream().filter((EntityAttributeModifier modifier) -> modifier.getId().equals(UUID.fromString("FA233E1C-4180-4865-B01B-BCCE9785ACA3"))).findFirst(); + return opt.map(EntityAttributeModifier::getValue).orElse(0d); } } diff --git a/src/main/java/com/github/chainmailstudios/astromine/mixin/ServerChunkManagerMixin.java b/src/main/java/com/github/chainmailstudios/astromine/mixin/ServerChunkManagerMixin.java index 12cedd625..c473bd292 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/mixin/ServerChunkManagerMixin.java +++ b/src/main/java/com/github/chainmailstudios/astromine/mixin/ServerChunkManagerMixin.java @@ -26,10 +26,12 @@ import java.util.concurrent.Executor; import java.util.function.Supplier; -import com.github.chainmailstudios.astromine.common.world.generation.EarthSpaceBiomeSource; -import com.github.chainmailstudios.astromine.common.world.generation.EarthSpaceChunkGenerator; -import com.github.chainmailstudios.astromine.common.world.generation.MoonBiomeSource; -import com.github.chainmailstudios.astromine.common.world.generation.MoonChunkGenerator; +import com.github.chainmailstudios.astromine.common.world.generation.space.EarthSpaceBiomeSource; +import com.github.chainmailstudios.astromine.common.world.generation.space.EarthSpaceChunkGenerator; +import com.github.chainmailstudios.astromine.common.world.generation.mars.MarsBiomeSource; +import com.github.chainmailstudios.astromine.common.world.generation.mars.MarsChunkGenerator; +import com.github.chainmailstudios.astromine.common.world.generation.moon.MoonBiomeSource; +import com.github.chainmailstudios.astromine.common.world.generation.moon.MoonChunkGenerator; import com.mojang.datafixers.DataFixer; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -61,5 +63,8 @@ private void handleConstructor(ServerWorld world, LevelStorage.Session session, if (chunkGenerator instanceof MoonChunkGenerator) { this.chunkGenerator = new MoonChunkGenerator(new MoonBiomeSource(world.getSeed()), world.getSeed()); } + if (chunkGenerator instanceof MarsChunkGenerator) { + this.chunkGenerator = new MarsChunkGenerator(new MarsBiomeSource(world.getSeed()), world.getSeed()); + } } } diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBiomes.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBiomes.java index 3b792abc9..4cc8f89c8 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBiomes.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBiomes.java @@ -24,10 +24,12 @@ package com.github.chainmailstudios.astromine.registry; import com.github.chainmailstudios.astromine.AstromineCommon; -import com.github.chainmailstudios.astromine.common.world.EarthSpaceBiome; -import com.github.chainmailstudios.astromine.common.world.MoonBiome; -import com.github.chainmailstudios.astromine.common.world.generation.EarthSpaceBiomeSource; -import com.github.chainmailstudios.astromine.common.world.generation.MoonBiomeSource; +import com.github.chainmailstudios.astromine.common.world.biome.EarthSpaceBiome; +import com.github.chainmailstudios.astromine.common.world.biome.DepthScaleBiome; +import com.github.chainmailstudios.astromine.common.world.biome.MoonBiome; +import com.github.chainmailstudios.astromine.common.world.generation.space.EarthSpaceBiomeSource; +import com.github.chainmailstudios.astromine.common.world.generation.mars.MarsBiomeSource; +import com.github.chainmailstudios.astromine.common.world.generation.moon.MoonBiomeSource; import net.minecraft.util.registry.Registry; import net.minecraft.world.biome.Biome; @@ -37,16 +39,22 @@ public class AstromineBiomes { public static Biome MOON_FLATS; public static Biome MOON_HILLS; public static Biome MOON_LOWLANDS; + public static Biome MARS; + public static Biome MARS_RIVERBED; public static void initialize() { // Biome Sources Registry.register(Registry.BIOME_SOURCE, AstromineCommon.identifier("earth_space"), EarthSpaceBiomeSource.CODEC); Registry.register(Registry.BIOME_SOURCE, AstromineCommon.identifier("moon"), MoonBiomeSource.CODEC); + Registry.register(Registry.BIOME_SOURCE, AstromineCommon.identifier("mars"), MarsBiomeSource.CODEC); // Biomes ASTEROID_BELT = Registry.register(Registry.BIOME, AstromineCommon.identifier("asteroid_belt"), new EarthSpaceBiome()); MOON_FLATS = Registry.register(Registry.BIOME, AstromineCommon.identifier("moon_flats"), new MoonBiome(100, 20)); MOON_HILLS = Registry.register(Registry.BIOME, AstromineCommon.identifier("moon_hills"), new MoonBiome(105, 30)); MOON_LOWLANDS = Registry.register(Registry.BIOME, AstromineCommon.identifier("moon_lowlands"), new MoonBiome(93, 9)); + + MARS = Registry.register(Registry.BIOME, AstromineCommon.identifier("mars"), new DepthScaleBiome(100, 1)); + MARS_RIVERBED = Registry.register(Registry.BIOME, AstromineCommon.identifier("mars_riverbed"), new DepthScaleBiome(60, 0.1f)); } } diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBlocks.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBlocks.java index 0c190829a..25c030843 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBlocks.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineBlocks.java @@ -137,6 +137,7 @@ public class AstromineBlocks { public static final Block METEOR_STONE = register("meteor_stone", new Block(FabricBlockSettings.of(Material.STONE, MaterialColor.BLACK).requiresTool().breakByTool(FabricToolTags.PICKAXES, 3).strength(30, 1500)), AstromineItems.getBasicSettings().fireproof()); public static final Block ASTEROID_STONE = register("asteroid_stone", new Block(FabricBlockSettings.of(Material.STONE, MaterialColor.GRAY).requiresTool().breakByTool(FabricToolTags.PICKAXES, 3).strength(50, 1500)), AstromineItems.getBasicSettings().fireproof()); public static final Block MOON_STONE = register("moon_stone", new Block(FabricBlockSettings.of(Material.STONE, MaterialColor.GRAY).requiresTool().breakByTool(FabricToolTags.PICKAXES, 0).strength(1, 3)), AstromineItems.getBasicSettings()); + public static final Block MARS_SOIL = register("mars_soil", new Block(FabricBlockSettings.of(Material.SOIL, MaterialColor.GRAY).requiresTool().breakByTool(FabricToolTags.PICKAXES, 0).strength(0.5f, 0.75f)), AstromineItems.getBasicSettings()); public static final Block BLAZING_ASTEROID_STONE = register("blazing_asteroid_stone", new MagmaBlock(FabricBlockSettings.of(Material.STONE, MaterialColor.GRAY).requiresTool().breakByTool(FabricToolTags.PICKAXES, 3).strength(50, 1500).lightLevel((state) -> 3).ticksRandomly().allowsSpawning((state, world, pos, entityType) -> entityType.isFireImmune()).postProcess((state, world, pos) -> true).emissiveLighting((state, world, pos) -> true)), AstromineItems.getBasicSettings().fireproof()); public static final Block METEOR_STONE_SLAB = register("meteor_stone_slab", new SlabBlock(FabricBlockSettings.copyOf(METEOR_STONE)), AstromineItems.getBasicSettings().fireproof()); diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineChunkGenerators.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineChunkGenerators.java index cf1ee48f6..13a40e0ec 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineChunkGenerators.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineChunkGenerators.java @@ -24,8 +24,9 @@ package com.github.chainmailstudios.astromine.registry; import com.github.chainmailstudios.astromine.AstromineCommon; -import com.github.chainmailstudios.astromine.common.world.generation.EarthSpaceChunkGenerator; -import com.github.chainmailstudios.astromine.common.world.generation.MoonChunkGenerator; +import com.github.chainmailstudios.astromine.common.world.generation.space.EarthSpaceChunkGenerator; +import com.github.chainmailstudios.astromine.common.world.generation.mars.MarsChunkGenerator; +import com.github.chainmailstudios.astromine.common.world.generation.moon.MoonChunkGenerator; import net.minecraft.util.registry.Registry; @@ -33,5 +34,6 @@ public class AstromineChunkGenerators { public static void initialize() { Registry.register(Registry.CHUNK_GENERATOR, AstromineCommon.identifier("earth_space"), EarthSpaceChunkGenerator.CODEC); Registry.register(Registry.CHUNK_GENERATOR, AstromineCommon.identifier("moon"), MoonChunkGenerator.CODEC); + Registry.register(Registry.CHUNK_GENERATOR, AstromineCommon.identifier("mars"), MarsChunkGenerator.CODEC); } } diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineConfig.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineConfig.java index 11e91b00c..bd15ba6ea 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineConfig.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineConfig.java @@ -57,6 +57,9 @@ public class AstromineConfig implements ConfigData { @Comment("Gravity level in Moon") public double moonGravity = 0.03d; + @Comment("Gravity level in Mars") + public double marsGravity = 0.045d; + @Comment("Whether generation of Copper Ore in the Overworld is enabled.") public boolean overworldCopperOre = true; @@ -510,6 +513,9 @@ public class AstromineConfig implements ConfigData { @Comment("Energy for the Fluid Extractor actions.") public double fluidExtractorEnergyConsumed = 1024D; + @Comment("Energy for the Vent actions.") + public double ventEnergyConsumed = 1024D; + @Comment("Delay for the Block Placer actions (smaller is faster).") public long blockPlacerTimeConsumed = 40L; diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineDimensions.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineDimensions.java index cd4e4a80d..4dbf2d62f 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineDimensions.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineDimensions.java @@ -42,6 +42,8 @@ public class AstromineDimensions { public static final RegistryKey MOON_OPTIONS = register(Registry.DIMENSION_OPTIONS, AstromineCommon.identifier("moon")); public static final RegistryKey MOON_REGISTRY_KEY = register(Registry.DIMENSION_TYPE_KEY, AstromineCommon.identifier("moon")); + public static final RegistryKey MARS_REGISTRY_KEY = register(Registry.DIMENSION_TYPE_KEY, AstromineCommon.identifier("mars")); + public static RegistryKey register(RegistryKey> registry, Identifier identifier) { RegistryKey key = RegistryKey.of(registry, identifier); KEYS.add(key); diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineFeatures.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineFeatures.java index f358c3f88..223603142 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineFeatures.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineFeatures.java @@ -27,6 +27,7 @@ import com.github.chainmailstudios.astromine.common.world.feature.AsteroidOreFeature; import com.github.chainmailstudios.astromine.common.world.feature.MeteorFeature; import com.github.chainmailstudios.astromine.common.world.feature.MeteorGenerator; +import com.github.chainmailstudios.astromine.common.world.feature.MoonCraterFeature; import net.earthcomputer.libstructure.LibStructure; import net.minecraft.structure.StructurePieceType; import net.minecraft.util.registry.Registry; @@ -41,12 +42,7 @@ public class AstromineFeatures { public static Feature ASTEROID_ORES; - - public static final Feature ASTEROIDS = Registry.register( - Registry.FEATURE, - AstromineCommon.identifier("asteroids_feature"), - new AsteroidOreFeature(DefaultFeatureConfig.CODEC) - ); + public static Feature MOON_CRATER; public static final StructurePieceType METEOR = register(MeteorGenerator::new, "meteor"); @@ -56,6 +52,7 @@ public static StructurePieceType register(StructurePieceType pieceType, String i public static void initialize() { ASTEROID_ORES = Registry.register(Registry.FEATURE, AstromineCommon.identifier("asteroid_ores"), new AsteroidOreFeature(DefaultFeatureConfig.CODEC)); + MOON_CRATER = Registry.register(Registry.FEATURE, AstromineCommon.identifier("moon_crater"), new MoonCraterFeature(DefaultFeatureConfig.CODEC)); // initialize meteor structure/feature MeteorFeature meteor = new MeteorFeature(DefaultFeatureConfig.CODEC); diff --git a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineGravities.java b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineGravities.java index 636479497..4c7d39e30 100644 --- a/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineGravities.java +++ b/src/main/java/com/github/chainmailstudios/astromine/registry/AstromineGravities.java @@ -29,5 +29,6 @@ public class AstromineGravities { public static void initialize() { GravityRegistry.INSTANCE.register(AstromineDimensions.EARTH_SPACE_REGISTRY_KEY, AstromineConfig.get().spaceGravity); GravityRegistry.INSTANCE.register(AstromineDimensions.MOON_REGISTRY_KEY, AstromineConfig.get().moonGravity); + GravityRegistry.INSTANCE.register(AstromineDimensions.MARS_REGISTRY_KEY, AstromineConfig.get().marsGravity); } } diff --git a/src/main/resources/assets/astromine/blockstates/mars_soil.json b/src/main/resources/assets/astromine/blockstates/mars_soil.json new file mode 100644 index 000000000..55b14ad46 --- /dev/null +++ b/src/main/resources/assets/astromine/blockstates/mars_soil.json @@ -0,0 +1,9 @@ +{ + "variants": { + "": [ + { + "model": "astromine:block/mars_soil" + } + ] + } +} diff --git a/src/main/resources/assets/astromine/models/block/mars_soil.json b/src/main/resources/assets/astromine/models/block/mars_soil.json new file mode 100644 index 000000000..d45122626 --- /dev/null +++ b/src/main/resources/assets/astromine/models/block/mars_soil.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "astromine:block/mars_soil" + } +} diff --git a/src/main/resources/assets/astromine/models/item/mars_soil.json b/src/main/resources/assets/astromine/models/item/mars_soil.json new file mode 100644 index 000000000..ca2a763d9 --- /dev/null +++ b/src/main/resources/assets/astromine/models/item/mars_soil.json @@ -0,0 +1,3 @@ +{ + "parent": "astromine:block/mars_soil" +} diff --git a/src/main/resources/assets/astromine/textures/block/mars_soil.png b/src/main/resources/assets/astromine/textures/block/mars_soil.png new file mode 100644 index 000000000..093358deb Binary files /dev/null and b/src/main/resources/assets/astromine/textures/block/mars_soil.png differ diff --git a/src/main/resources/assets/astromine/textures/item/copper_boots.png b/src/main/resources/assets/astromine/textures/item/copper_boots.png deleted file mode 100644 index 755c563bf..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/copper_boots.png and /dev/null differ diff --git a/src/main/resources/assets/astromine/textures/item/copper_chestplate.png b/src/main/resources/assets/astromine/textures/item/copper_chestplate.png deleted file mode 100644 index 425b0aa58..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/copper_chestplate.png and /dev/null differ diff --git a/src/main/resources/assets/astromine/textures/item/copper_helmet.png b/src/main/resources/assets/astromine/textures/item/copper_helmet.png deleted file mode 100644 index f6704b35c..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/copper_helmet.png and /dev/null differ diff --git a/src/main/resources/assets/astromine/textures/item/copper_leggings.png b/src/main/resources/assets/astromine/textures/item/copper_leggings.png deleted file mode 100644 index 4626a8830..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/copper_leggings.png and /dev/null differ diff --git a/src/main/resources/assets/astromine/textures/item/tin_boots.png b/src/main/resources/assets/astromine/textures/item/tin_boots.png deleted file mode 100644 index 8dcc619a7..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/tin_boots.png and /dev/null differ diff --git a/src/main/resources/assets/astromine/textures/item/tin_chestplate.png b/src/main/resources/assets/astromine/textures/item/tin_chestplate.png deleted file mode 100644 index 3b7379cac..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/tin_chestplate.png and /dev/null differ diff --git a/src/main/resources/assets/astromine/textures/item/tin_leggings.png b/src/main/resources/assets/astromine/textures/item/tin_leggings.png deleted file mode 100644 index eae81c563..000000000 Binary files a/src/main/resources/assets/astromine/textures/item/tin_leggings.png and /dev/null differ diff --git a/src/main/resources/data/minecraft/dimension/astromine/mars.json b/src/main/resources/data/minecraft/dimension/astromine/mars.json new file mode 100644 index 000000000..27ded4da7 --- /dev/null +++ b/src/main/resources/data/minecraft/dimension/astromine/mars.json @@ -0,0 +1,11 @@ +{ + "generator": { + "type": "astromine:mars", + "biome_source": { + "type": "astromine:mars", + "seed": -1 + }, + "seed": -1 + }, + "type": "astromine:mars" +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/dimension_type/astromine/mars.json b/src/main/resources/data/minecraft/dimension_type/astromine/mars.json new file mode 100644 index 000000000..6b1424e27 --- /dev/null +++ b/src/main/resources/data/minecraft/dimension_type/astromine/mars.json @@ -0,0 +1,15 @@ +{ + "ultrawarm": false, + "natural": false, + "shrunk": false, + "ambient_light": 0.0, + "has_skylight": true, + "has_ceiling": false, + "infiniburn": "astromine:infiniburn_space", + "logical_height" : 256, + "has_raids" : false, + "respawn_anchor_works": false, + "bed_works" : false, + "piglin_safe" : false, + "fixed_time": 3000 +} \ No newline at end of file