diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index c351b1b9..337072c3 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -2,6 +2,7 @@ package ru.betterend; import net.fabricmc.api.ModInitializer; import ru.betterend.registry.BiomeRegistry; +import ru.betterend.registry.FeatureRegistry; import ru.betterend.util.Logger; import ru.betterend.world.generator.BetterEndBiomeSource; @@ -11,6 +12,7 @@ public class BetterEnd implements ModInitializer { @Override public void onInitialize() { + FeatureRegistry.register(); BiomeRegistry.register(); BetterEndBiomeSource.register(); } diff --git a/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java b/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java index b65770da..636211d5 100644 --- a/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/BackgroundRendererMixin.java @@ -1,6 +1,7 @@ package ru.betterend.mixin.client; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -30,6 +31,14 @@ public class BackgroundRendererMixin { private static final float SKY_RED = 21F / 255F; private static final float SKY_GREEN = 16F / 255F; private static final float SKY_BLUE = 20F / 255F; + //private static final float NORMAL = 0.12757292F; + + @Shadow + private static float red; + @Shadow + private static float green; + @Shadow + private static float blue; @Inject(method = "render", at = @At("RETURN")) private static void onRender(Camera camera, float tickDelta, ClientWorld world, int i, float f, CallbackInfo info) { @@ -39,6 +48,9 @@ public class BackgroundRendererMixin { FluidState fluidState = camera.getSubmergedFluidState(); if (fluidState.isEmpty() && world.getDimension().hasEnderDragonFight()) { RenderSystem.clearColor(SKY_RED, SKY_GREEN, SKY_BLUE, 0); + //red /= NORMAL; + //green /= NORMAL; + //blue /= NORMAL; } } diff --git a/src/main/java/ru/betterend/registry/BiomeRegistry.java b/src/main/java/ru/betterend/registry/BiomeRegistry.java index 96b3e319..c6262729 100644 --- a/src/main/java/ru/betterend/registry/BiomeRegistry.java +++ b/src/main/java/ru/betterend/registry/BiomeRegistry.java @@ -11,7 +11,7 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeKeys; -import ru.betterend.world.biome.BiomeDefinition; +import ru.betterend.world.biome.BiomeFoggyMushroomland; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.generator.BiomePicker; import ru.betterend.world.generator.BiomeType; @@ -22,12 +22,12 @@ public class BiomeRegistry { public static final BiomePicker LAND_BIOMES = new BiomePicker(); public static final BiomePicker VOID_BIOMES = new BiomePicker(); - public static final EndBiome END = registerBiome(BiomeKeys.THE_END, BiomeType.LAND); - public static final EndBiome END_BARRENS = registerBiome(BiomeKeys.END_BARRENS, BiomeType.VOID); - public static final EndBiome END_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND); - public static final EndBiome END_MIDLANDS = registerBiome(BiomeKeys.END_MIDLANDS, BiomeType.LAND); - public static final EndBiome SMALL_END_ISLANDS = registerBiome(BiomeKeys.SMALL_END_ISLANDS, BiomeType.VOID); - public static final EndBiome TEST = registerBiome(new EndBiome(new BiomeDefinition("test").setFogColor(255, 0, 0).setFogDensity(10)), BiomeType.VOID); + public static final EndBiome END = registerBiome(BiomeKeys.THE_END, BiomeType.LAND, true); + public static final EndBiome END_BARRENS = registerBiome(BiomeKeys.END_BARRENS, BiomeType.VOID, true); + public static final EndBiome END_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND, false); + public static final EndBiome END_MIDLANDS = registerBiome(BiomeKeys.END_MIDLANDS, BiomeType.LAND, false); + public static final EndBiome SMALL_END_ISLANDS = registerBiome(BiomeKeys.SMALL_END_ISLANDS, BiomeType.VOID, true); + public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new BiomeFoggyMushroomland(), BiomeType.LAND); public static void register() {} @@ -39,9 +39,9 @@ public class BiomeRegistry { BiomeRegistry.MUTABLE.put(biomeRegistry.getOrThrow(BiomeRegistry.getBiomeKey(biome)), biome); } - public static EndBiome registerBiome(RegistryKey key, BiomeType type) { + public static EndBiome registerBiome(RegistryKey key, BiomeType type, boolean addToGen) { EndBiome endBiome = new EndBiome(BuiltinRegistries.BIOME.get(key)); - addToPicker(endBiome, type); + if (addToGen) addToPicker(endBiome, type); makeLink(endBiome); return endBiome; } diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java new file mode 100644 index 00000000..03c66246 --- /dev/null +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -0,0 +1,10 @@ +package ru.betterend.registry; + +import ru.betterend.world.features.EndFeature; +import ru.betterend.world.features.StoneSpiralFeature; + +public class FeatureRegistry { + public static final EndFeature STONE_SPIRAL = new EndFeature("stone_spiral", new StoneSpiralFeature()); + + public static void register() {} +} diff --git a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java index c543cfea..e28ab6ea 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java +++ b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java @@ -26,6 +26,7 @@ import net.minecraft.world.gen.feature.ConfiguredStructureFeature; import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders; import ru.betterend.BetterEnd; import ru.betterend.util.MHelper; +import ru.betterend.world.features.EndFeature; public class BiomeDefinition { private final List> structures = Lists.newArrayList(); @@ -43,41 +44,12 @@ public class BiomeDefinition { private int fogColor = 3344392; private float fogDensity = 1F; - private boolean stalactites = true; - private boolean bnStructures = true; - private final Identifier id; public BiomeDefinition(String name) { this.id = new Identifier(BetterEnd.MOD_ID, name); } - public BiomeDefinition setStalactites(boolean value) { - stalactites = value; - return this; - } - - public BiomeDefinition setBNStructures(boolean value) { - bnStructures = value; - return this; - } - - public BiomeDefinition setDefaultOres(boolean value) { - return this; - } - - public BiomeDefinition setDefaultStructureFeatures(boolean value) { - return this; - } - - public BiomeDefinition setDefaultFeatures(boolean value) { - return this; - } - - public BiomeDefinition setDefaultMobs(boolean value) { - return this; - } - public BiomeDefinition setParticleConfig(BiomeParticleConfig config) { this.particleConfig = config; return this; @@ -97,10 +69,17 @@ public class BiomeDefinition { } public BiomeDefinition addStructureFeature(ConfiguredStructureFeature feature) { - System.out.println("Structure " + feature); structures.add(feature); return this; } + + public BiomeDefinition addFeature(EndFeature feature) { + FeatureInfo info = new FeatureInfo(); + info.featureStep = feature.getFeatureStep(); + info.feature = feature.getFeatureConfigured(); + features.add(info); + return this; + } public BiomeDefinition addFeature(Feature featureStep, ConfiguredFeature feature) { FeatureInfo info = new FeatureInfo(); @@ -208,12 +187,4 @@ public class BiomeDefinition { public float getFodDensity() { return fogDensity; } - - public boolean hasStalactites() { - return stalactites; - } - - public boolean hasBNStructures() { - return bnStructures; - } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java new file mode 100644 index 00000000..b0cee8eb --- /dev/null +++ b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java @@ -0,0 +1,12 @@ +package ru.betterend.world.biome; + +import ru.betterend.registry.FeatureRegistry; + +public class BiomeFoggyMushroomland extends EndBiome { + public BiomeFoggyMushroomland() { + super(new BiomeDefinition("foggy_mushroomland") + .setFogColor(41, 122, 173) + .setFogDensity(5) + .addFeature(FeatureRegistry.STONE_SPIRAL)); + } +} diff --git a/src/main/java/ru/betterend/world/features/EndFeature.java b/src/main/java/ru/betterend/world/features/EndFeature.java new file mode 100644 index 00000000..832e2275 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/EndFeature.java @@ -0,0 +1,46 @@ +package ru.betterend.world.features; + +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.BuiltinRegistries; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.decorator.ChanceDecoratorConfig; +import net.minecraft.world.gen.decorator.ConfiguredDecorator; +import net.minecraft.world.gen.decorator.Decorator; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import net.minecraft.world.gen.feature.Feature; +import net.minecraft.world.gen.feature.FeatureConfig; +import ru.betterend.BetterEnd; + +public class EndFeature { + private final Feature feature; + private final ConfiguredFeature featureConfigured; + private final GenerationStep.Feature featureStep; + + public EndFeature(String name, Feature feature, GenerationStep.Feature featureStep, ConfiguredDecorator configuredDecorator) { + Identifier id = new Identifier(BetterEnd.MOD_ID, name); + this.featureStep = featureStep; + this.feature = Registry.register(Registry.FEATURE, id, feature); + this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(configuredDecorator)); + } + + public EndFeature(String name, Feature feature) { + Identifier id = new Identifier(BetterEnd.MOD_ID, name); + this.featureStep = GenerationStep.Feature.VEGETAL_DECORATION; + this.feature = Registry.register(Registry.FEATURE, id, feature); + this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(Decorator.CHANCE.configure(new ChanceDecoratorConfig(100)))); + } + + public Feature getFeature() { + return feature; + } + + public ConfiguredFeature getFeatureConfigured() { + return featureConfigured; + } + + public GenerationStep.Feature getFeatureStep() { + return featureStep; + } +} diff --git a/src/main/java/ru/betterend/world/features/StoneSpiralFeature.java b/src/main/java/ru/betterend/world/features/StoneSpiralFeature.java new file mode 100644 index 00000000..8d6ceb84 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/StoneSpiralFeature.java @@ -0,0 +1,33 @@ +package ru.betterend.world.features; + +import java.util.Random; + +import net.minecraft.block.Blocks; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.Heightmap.Type; +import net.minecraft.world.StructureWorldAccess; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import net.minecraft.world.gen.feature.Feature; + +public class StoneSpiralFeature extends Feature { + public StoneSpiralFeature() { + super(DefaultFeatureConfig.CODEC); + } + + @Override + public boolean generate(StructureWorldAccess world, ChunkGenerator generator, Random random, BlockPos pos, DefaultFeatureConfig config) { + BlockPos topPos = world.getTopPosition(Type.WORLD_SURFACE, pos); + Direction offset = Direction.NORTH; + + System.out.println(topPos); + + for (int y = 1; y <= 15; y++) { + offset = offset.rotateYClockwise(); + world.setBlockState(topPos.up(y).offset(offset), Blocks.STONE.getDefaultState(), 3); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java index 9a01cc8f..ce17476b 100644 --- a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java +++ b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java @@ -57,7 +57,7 @@ public class BetterEndBiomeSource extends BiomeSource { float height = TheEndBiomeSource.getNoiseAt(noise, (int) i * 2 + 1, (int) j * 2 + 1); - EndBiome netherBiome = height < 20.0F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); + EndBiome netherBiome = height < -20.0F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); if (biomeX == 0 && biomeZ == 0) { mapLand.clearCache(); mapVoid.clearCache();