diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e6b4b7..e459665 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +**Beta 0.0.7** +* Fix Structure Generation + **Beta 0.0.6** * Remove ``DamageSourceAccessor`` diff --git a/gradle.properties b/gradle.properties index 0fb3cd9..90a823a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ org.gradle.jvmargs = -Xmx1G fabric_loader_version = 0.9.0+build.204 # Mod Properties - mod_version = 0.0.6 + mod_version = 0.0.7 maven_group = com.thebrokenrail # Dependencies @@ -19,6 +19,6 @@ org.gradle.jvmargs = -Xmx1G modmenu_version = 1.14.6+build.31 cloth_config_version = 4.7.0-unstable autoconfig_version = 3.2.0-unstable - libstructure_version = 1.4.1 + libstructure_version = 1.5 roughlyenoughitems_version = 5.2.3 jetbrains_annotations_version = 19.0.0 diff --git a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java index 7c4b1f7..79c784f 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java +++ b/src/main/java/com/thebrokenrail/energonrelics/EnergonRelics.java @@ -157,7 +157,7 @@ public final class EnergonRelics implements ModInitializer { Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "defensive_laser_core"), DEFENSIVE_LASER_CORE_ITEM); DEFENSIVE_LASER_BLOCK.register("defensive_laser"); - StructureGeneratorBlock.register(); + StructureGeneratorBlock.registerBlocks(); BLOCK_BREAKER_BLOCK.register("block_breaker"); diff --git a/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java b/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java index e13cab0..4be1b72 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java +++ b/src/main/java/com/thebrokenrail/energonrelics/block/structure/StructureGeneratorBlock.java @@ -24,9 +24,11 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.chunk.StructureConfig; +import net.minecraft.world.gen.feature.ConfiguredStructureFeature; import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.StructureFeature; @@ -119,19 +121,23 @@ public class StructureGeneratorBlock extends SimpleBlockWithEntity { LibStructure.registerStructure(new Identifier(EnergonRelics.NAMESPACE, name), block.feature, GenerationStep.Feature.UNDERGROUND_STRUCTURES, block.structureConfig, block.feature.configure(FeatureConfig.DEFAULT)); } - public static void register() { + public static void registerBlocks() { for (Map.Entry entry : blocks.entrySet()) { entry.getValue().register(entry.getKey()); } } - public static void addToBiome(GenerationSettings.Builder builder) { + public static void addToBiome(Biome biome) { + registerStructures(); for (Map.Entry entry : blocks.entrySet()) { - builder.structureFeature(entry.getValue().feature.configure(DefaultFeatureConfig.INSTANCE)); + ConfiguredStructureFeature feature = entry.getValue().feature.configure(DefaultFeatureConfig.INSTANCE); + biome.getGenerationSettings().getStructureFeatures().add(() -> feature); } } - static { - create("research_complex", (world, random, transformations) -> new ResearchComplexStartPart(new ResearchComplexState(world, random), transformations), new StructureConfig(32, 8, 14357618)); + public static void registerStructures() { + if (blocks.size() == 0) { + create("research_complex", (world, random, transformations) -> new ResearchComplexStartPart(new ResearchComplexState(world, random), transformations), new StructureConfig(32, 8, 14357618)); + } } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/mixin/GenerationSettingsAccessor.java b/src/main/java/com/thebrokenrail/energonrelics/mixin/GenerationSettingsAccessor.java new file mode 100644 index 0000000..c6f6dcf --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/mixin/GenerationSettingsAccessor.java @@ -0,0 +1,20 @@ +package com.thebrokenrail.energonrelics.mixin; + +import net.minecraft.world.biome.GenerationSettings; +import net.minecraft.world.gen.feature.ConfiguredStructureFeature; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; +import java.util.function.Supplier; + +@Mixin(GenerationSettings.class) +public interface GenerationSettingsAccessor { + @Accessor + List>> getStructureFeatures(); + + @Mutable + @Accessor + void setStructureFeatures(List>> structureFeatures); +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinBootstrap.java b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinBootstrap.java new file mode 100644 index 0000000..a01adcc --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinBootstrap.java @@ -0,0 +1,16 @@ +package com.thebrokenrail.energonrelics.mixin; + +import com.thebrokenrail.energonrelics.block.structure.StructureGeneratorBlock; +import net.minecraft.Bootstrap; +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; + +@Mixin(Bootstrap.class) +public class MixinBootstrap { + @Inject(at = @At("TAIL"), method = "initialize") + private static void initialize(CallbackInfo info) { + StructureGeneratorBlock.registerStructures(); + } +} diff --git a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinDefaultBiomeFeatures.java b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinDefaultBiomeFeatures.java index df2eec7..e15f09d 100644 --- a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinDefaultBiomeFeatures.java +++ b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinDefaultBiomeFeatures.java @@ -1,7 +1,6 @@ package com.thebrokenrail.energonrelics.mixin; import com.thebrokenrail.energonrelics.EnergonRelics; -import com.thebrokenrail.energonrelics.block.structure.StructureGeneratorBlock; import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.feature.DefaultBiomeFeatures; @@ -16,9 +15,4 @@ public class MixinDefaultBiomeFeatures { private static void addDefaultOres(GenerationSettings.Builder builder, CallbackInfo info) { builder.feature(GenerationStep.Feature.UNDERGROUND_ORES, EnergonRelics.VERIDIUM_ORE_FEATURE); } - - @Inject(at = @At("RETURN"), method = "addDefaultUndergroundStructures") - private static void addDefaultUndergroundStructures(GenerationSettings.Builder builder, CallbackInfo info) { - StructureGeneratorBlock.addToBiome(builder); - } } diff --git a/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinMinecraftServer.java b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinMinecraftServer.java new file mode 100644 index 0000000..351d456 --- /dev/null +++ b/src/main/java/com/thebrokenrail/energonrelics/mixin/MixinMinecraftServer.java @@ -0,0 +1,47 @@ +package com.thebrokenrail.energonrelics.mixin; + +import com.mojang.authlib.GameProfileRepository; +import com.mojang.authlib.minecraft.MinecraftSessionService; +import com.mojang.datafixers.DataFixer; +import com.thebrokenrail.energonrelics.block.structure.StructureGeneratorBlock; +import net.minecraft.resource.ResourcePackManager; +import net.minecraft.resource.ServerResourceManager; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.WorldGenerationProgressListenerFactory; +import net.minecraft.util.UserCache; +import net.minecraft.util.registry.DynamicRegistryManager; +import net.minecraft.util.registry.Registry; +import net.minecraft.world.SaveProperties; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.StructureFeature; +import net.minecraft.world.level.storage.LevelStorage; +import org.spongepowered.asm.mixin.Final; +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; + +import java.net.Proxy; +import java.util.ArrayList; + +@Mixin(MinecraftServer.class) +public class MixinMinecraftServer { + @Shadow + @Final + protected DynamicRegistryManager.Impl registryManager; + + @Inject(at = @At("TAIL"), method = "") + private void init(Thread thread, DynamicRegistryManager.Impl impl, LevelStorage.Session session, SaveProperties saveProperties, ResourcePackManager resourcePackManager, Proxy proxy, DataFixer dataFixer, ServerResourceManager serverResourceManager, MinecraftSessionService minecraftSessionService, GameProfileRepository gameProfileRepository, UserCache userCache, WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo info) { + if (registryManager.getOptional(Registry.BIOME_KEY).isPresent()) { + for (Biome biome : registryManager.getOptional(Registry.BIOME_KEY).get()) { + // Make Mutable + ((GenerationSettingsAccessor) biome.getGenerationSettings()).setStructureFeatures(new ArrayList<>(((GenerationSettingsAccessor) biome.getGenerationSettings()).getStructureFeatures())); + + if (biome.getGenerationSettings().hasStructureFeature(StructureFeature.MINESHAFT)) { + StructureGeneratorBlock.addToBiome(biome); + } + } + } + } +} diff --git a/src/main/resources/energonrelics.mixins.json b/src/main/resources/energonrelics.mixins.json index 659f58a..509788d 100644 --- a/src/main/resources/energonrelics.mixins.json +++ b/src/main/resources/energonrelics.mixins.json @@ -9,9 +9,12 @@ ], "mixins": [ "BrewingRecipeRegistryAccessor", + "GenerationSettingsAccessor", + "MixinBootstrap", "MixinDefaultBiomeFeatures", "MixinEntity", "MixinLivingEntity", + "MixinMinecraftServer", "MixinWorld" ], "injectors": {