mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 14:21:08 +00:00
register structures to Terra biomes
This commit is contained in:
@@ -20,10 +20,6 @@ package com.dfsek.terra.fabric;
|
|||||||
import ca.solostudios.strata.Versions;
|
import ca.solostudios.strata.Versions;
|
||||||
import ca.solostudios.strata.version.Version;
|
import ca.solostudios.strata.version.Version;
|
||||||
import com.dfsek.tectonic.exception.ConfigException;
|
import com.dfsek.tectonic.exception.ConfigException;
|
||||||
|
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
|
||||||
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -37,6 +33,7 @@ import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
|||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.util.generic.pair.Pair.Mutable;
|
import com.dfsek.terra.api.util.generic.pair.Pair.Mutable;
|
||||||
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;
|
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.event.BiomeRegistrationEvent;
|
import com.dfsek.terra.fabric.event.BiomeRegistrationEvent;
|
||||||
@@ -91,12 +88,7 @@ public final class FabricAddon implements BaseAddon {
|
|||||||
Registry<net.minecraft.world.biome.Biome> biomeRegistry = event.getRegistryManager().get(Registry.BIOME_KEY);
|
Registry<net.minecraft.world.biome.Biome> biomeRegistry = event.getRegistryManager().get(Registry.BIOME_KEY);
|
||||||
terraFabricPlugin.getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
terraFabricPlugin.getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
||||||
pack.getCheckedRegistry(Biome.class)
|
pack.getCheckedRegistry(Biome.class)
|
||||||
.forEach((id, biome) -> {
|
.forEach((id, biome) -> FabricUtil.registerBiome(biome, pack, event.getRegistryManager(), id));
|
||||||
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
|
||||||
net.minecraft.world.biome.Biome fabricBiome = FabricUtil.createBiome(biome, pack, event.getRegistryManager());
|
|
||||||
|
|
||||||
FabricUtil.registerOrOverwrite(biomeRegistry, Registry.BIOME_KEY, identifier, fabricBiome);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
logger.info("Biomes registered.");
|
logger.info("Biomes registered.");
|
||||||
})
|
})
|
||||||
|
|||||||
-6
@@ -190,12 +190,6 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setStructureStarts(DynamicRegistryManager dynamicRegistryManager, StructureAccessor structureAccessor, Chunk chunk,
|
|
||||||
StructureManager structureManager, long worldSeed) {
|
|
||||||
super.setStructureStarts(dynamicRegistryManager, structureAccessor, chunk, structureManager, worldSeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Chunk> populateNoise(Executor executor, Blender arg, StructureAccessor structureAccessor, Chunk chunk) {
|
public CompletableFuture<Chunk> populateNoise(Executor executor, Blender arg, StructureAccessor structureAccessor, Chunk chunk) {
|
||||||
return CompletableFuture.supplyAsync(() -> {
|
return CompletableFuture.supplyAsync(() -> {
|
||||||
|
|||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
package com.dfsek.terra.fabric.mixin;
|
||||||
|
|
||||||
|
import com.dfsek.terra.fabric.util.FabricUtil;
|
||||||
|
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
|
import net.minecraft.world.biome.Biome;
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredStructureFeature;
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredStructureFeatures;
|
||||||
|
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 java.util.Set;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
|
||||||
|
@Mixin(ConfiguredStructureFeatures.class)
|
||||||
|
public class ConfiguredStructureFeaturesMixin {
|
||||||
|
@Inject(method = "register(Ljava/util/function/BiConsumer;Lnet/minecraft/world/gen/feature/ConfiguredStructureFeature;Lnet/minecraft/util/registry/RegistryKey;)V", at = @At("HEAD"))
|
||||||
|
private static void addStructuresToTerraBiomes(BiConsumer<ConfiguredStructureFeature<?, ?>, RegistryKey<Biome>> registrar,
|
||||||
|
ConfiguredStructureFeature<?, ?> feature,
|
||||||
|
RegistryKey<Biome> biome,
|
||||||
|
CallbackInfo ci) {
|
||||||
|
if(FabricUtil.getTerraVanillaBiomes().containsKey(biome)) {
|
||||||
|
FabricUtil.getTerraVanillaBiomes().get(biome).forEach(biomeRegistryKey -> registrar.accept(feature, biomeRegistryKey));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "register(Ljava/util/function/BiConsumer;Lnet/minecraft/world/gen/feature/ConfiguredStructureFeature;Ljava/util/Set;)V",
|
||||||
|
at = @At("HEAD"))
|
||||||
|
private static void addStructuresToTerraBiomes(BiConsumer<ConfiguredStructureFeature<?, ?>, RegistryKey<Biome>> registrar,
|
||||||
|
ConfiguredStructureFeature<?, ?> feature, Set<RegistryKey<Biome>> biomes,
|
||||||
|
CallbackInfo ci) {
|
||||||
|
biomes.forEach(biome -> {
|
||||||
|
if(FabricUtil.getTerraVanillaBiomes().containsKey(biome)) {
|
||||||
|
FabricUtil.getTerraVanillaBiomes().get(biome).forEach(biomeRegistryKey -> registrar.accept(feature, biomeRegistryKey));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,7 +33,9 @@ import net.minecraft.world.biome.GenerationSettings;
|
|||||||
import net.minecraft.world.gen.GenerationStep;
|
import net.minecraft.world.gen.GenerationStep;
|
||||||
import net.minecraft.world.gen.carver.ConfiguredCarver;
|
import net.minecraft.world.gen.carver.ConfiguredCarver;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
@@ -48,6 +50,10 @@ import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor;
|
|||||||
|
|
||||||
|
|
||||||
public final class FabricUtil {
|
public final class FabricUtil {
|
||||||
|
|
||||||
|
private static final Map<RegistryKey<net.minecraft.world.biome.Biome>, List<RegistryKey<net.minecraft.world.biome.Biome>>>
|
||||||
|
terraVanillaBiomes = new HashMap<>();
|
||||||
|
|
||||||
public static String createBiomeID(ConfigPack pack, String biomeID) {
|
public static String createBiomeID(ConfigPack pack, String biomeID) {
|
||||||
return pack.getID().toLowerCase() + "/" + biomeID.toLowerCase(Locale.ROOT);
|
return pack.getID().toLowerCase() + "/" + biomeID.toLowerCase(Locale.ROOT);
|
||||||
}
|
}
|
||||||
@@ -57,10 +63,8 @@ public final class FabricUtil {
|
|||||||
*
|
*
|
||||||
* @param biome The Terra BiomeBuilder.
|
* @param biome The Terra BiomeBuilder.
|
||||||
* @param pack The ConfigPack this biome belongs to.
|
* @param pack The ConfigPack this biome belongs to.
|
||||||
*
|
|
||||||
* @return The Minecraft delegate biome.
|
|
||||||
*/
|
*/
|
||||||
public static net.minecraft.world.biome.Biome createBiome(Biome biome, ConfigPack pack, DynamicRegistryManager registryManager) {
|
public static void registerBiome(Biome biome, ConfigPack pack, DynamicRegistryManager registryManager, String id) {
|
||||||
// BiomeTemplate template = biome.getTemplate();
|
// BiomeTemplate template = biome.getTemplate();
|
||||||
Map<String, Integer> colors = new HashMap<>(); // template.getColors();
|
Map<String, Integer> colors = new HashMap<>(); // template.getColors();
|
||||||
|
|
||||||
@@ -133,7 +137,7 @@ public final class FabricUtil {
|
|||||||
accessor.getFoliageColor().ifPresent(effects::foliageColor);
|
accessor.getFoliageColor().ifPresent(effects::foliageColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new net.minecraft.world.biome.Biome.Builder()
|
net.minecraft.world.biome.Biome minecraftBiome = new net.minecraft.world.biome.Biome.Builder()
|
||||||
.precipitation(vanilla.getPrecipitation())
|
.precipitation(vanilla.getPrecipitation())
|
||||||
.category(vanilla.getCategory())
|
.category(vanilla.getCategory())
|
||||||
.temperature(vanilla.getTemperature())
|
.temperature(vanilla.getTemperature())
|
||||||
@@ -142,6 +146,16 @@ public final class FabricUtil {
|
|||||||
.spawnSettings(vanilla.getSpawnSettings())
|
.spawnSettings(vanilla.getSpawnSettings())
|
||||||
.generationSettings(generationSettings.build())
|
.generationSettings(generationSettings.build())
|
||||||
.build();
|
.build();
|
||||||
|
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
||||||
|
FabricUtil.registerOrOverwrite(biomeRegistry, Registry.BIOME_KEY, identifier, minecraftBiome);
|
||||||
|
|
||||||
|
terraVanillaBiomes.computeIfAbsent(biomeRegistry.getKey(vanilla).orElseThrow(), b -> new ArrayList<>()).add(
|
||||||
|
biomeRegistry.getKey(minecraftBiome).orElseThrow());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<RegistryKey<net.minecraft.world.biome.Biome>, List<RegistryKey<net.minecraft.world.biome.Biome>>> getTerraVanillaBiomes() {
|
||||||
|
return terraVanillaBiomes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> void registerOrOverwrite(Registry<T> registry, RegistryKey<Registry<T>> key, Identifier identifier, T item) {
|
public static <T> void registerOrOverwrite(Registry<T> registry, RegistryKey<Registry<T>> key, Identifier identifier, T item) {
|
||||||
|
|||||||
@@ -5,11 +5,12 @@
|
|||||||
"compatibilityLevel": "JAVA_16",
|
"compatibilityLevel": "JAVA_16",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"CommandManagerMixin",
|
"CommandManagerMixin",
|
||||||
|
"ConfiguredStructureFeaturesMixin",
|
||||||
"ServerWorldMixin",
|
"ServerWorldMixin",
|
||||||
"access.StructureAccessorAccessor",
|
|
||||||
"access.BiomeEffectsAccessor",
|
"access.BiomeEffectsAccessor",
|
||||||
"access.MobSpawnerLogicAccessor",
|
"access.MobSpawnerLogicAccessor",
|
||||||
"access.StateAccessor",
|
"access.StateAccessor",
|
||||||
|
"access.StructureAccessorAccessor",
|
||||||
"implementations.BiomeMixin",
|
"implementations.BiomeMixin",
|
||||||
"implementations.block.BlockEntityMixin",
|
"implementations.block.BlockEntityMixin",
|
||||||
"implementations.block.BlockMixin",
|
"implementations.block.BlockMixin",
|
||||||
|
|||||||
Reference in New Issue
Block a user