mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 06:40:55 +00:00
add vanilla bonemeal flowers to Terra biomes
This commit is contained in:
-21
@@ -1,21 +0,0 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.access;
|
|
||||||
|
|
||||||
import net.minecraft.world.biome.GenerationSettings;
|
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
|
||||||
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 {
|
|
||||||
@Mutable
|
|
||||||
@Accessor("flowerFeatures")
|
|
||||||
void setFlowerFeatures(Supplier<List<ConfiguredFeature<?, ?>>> flowerFeatures);
|
|
||||||
|
|
||||||
@Accessor("flowerFeatures")
|
|
||||||
Supplier<List<ConfiguredFeature<?, ?>>> getFlowerFeaturesSupplier();
|
|
||||||
}
|
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
package com.dfsek.terra.fabric.mixin.compat;
|
||||||
|
|
||||||
|
import com.dfsek.terra.fabric.util.FloraFeatureHolder;
|
||||||
|
|
||||||
|
import net.minecraft.world.biome.GenerationSettings;
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
|
import org.spongepowered.asm.mixin.Implements;
|
||||||
|
import org.spongepowered.asm.mixin.Interface;
|
||||||
|
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.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@Mixin(GenerationSettings.class)
|
||||||
|
@Implements(@Interface(iface = FloraFeatureHolder.class, prefix = "terra$"))
|
||||||
|
public class GenerationSettingsFloraFeaturesMixin {
|
||||||
|
private List<ConfiguredFeature<?, ?>> flora;
|
||||||
|
|
||||||
|
public void terra$setFloraFeatures(List<ConfiguredFeature<?, ?>> features) {
|
||||||
|
this.flora = features;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "getFlowerFeatures", cancellable = true, at = @At("HEAD"))
|
||||||
|
public void inject(CallbackInfoReturnable<List<ConfiguredFeature<?, ?>>> cir) {
|
||||||
|
if(flora != null) {
|
||||||
|
cir.setReturnValue(flora);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -21,5 +21,6 @@ public class DataPackContentsMixin {
|
|||||||
private void injectReload(DynamicRegistryManager dynamicRegistryManager, CallbackInfo ci) {
|
private void injectReload(DynamicRegistryManager dynamicRegistryManager, CallbackInfo ci) {
|
||||||
Registry<Biome> biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY);
|
Registry<Biome> biomeRegistry = dynamicRegistryManager.get(Registry.BIOME_KEY);
|
||||||
TagUtil.registerTags(biomeRegistry);
|
TagUtil.registerTags(biomeRegistry);
|
||||||
|
BiomeUtil.registerFlora(biomeRegistry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import com.dfsek.terra.api.world.biome.Biome;
|
|||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
import com.dfsek.terra.fabric.FabricEntryPoint;
|
||||||
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.config.VanillaBiomeProperties;
|
import com.dfsek.terra.fabric.config.VanillaBiomeProperties;
|
||||||
import com.dfsek.terra.fabric.mixin.access.GenerationSettingsAccessor;
|
|
||||||
|
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
@@ -14,6 +13,7 @@ import net.minecraft.util.registry.RegistryKey;
|
|||||||
import net.minecraft.world.biome.Biome.Builder;
|
import net.minecraft.world.biome.Biome.Builder;
|
||||||
import net.minecraft.world.biome.BiomeEffects;
|
import net.minecraft.world.biome.BiomeEffects;
|
||||||
import net.minecraft.world.biome.GenerationSettings;
|
import net.minecraft.world.biome.GenerationSettings;
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -41,6 +41,7 @@ public final class BiomeUtil {
|
|||||||
pack.getCheckedRegistry(Biome.class)
|
pack.getCheckedRegistry(Biome.class)
|
||||||
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
||||||
});
|
});
|
||||||
|
registerFlora(BuiltinRegistries.BIOME);
|
||||||
logger.info("Terra biomes registered.");
|
logger.info("Terra biomes registered.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +51,7 @@ public final class BiomeUtil {
|
|||||||
* @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.
|
||||||
*/
|
*/
|
||||||
public static void registerBiome(Biome biome, ConfigPack pack,
|
private static void registerBiome(Biome biome, ConfigPack pack,
|
||||||
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
||||||
Registry<net.minecraft.world.biome.Biome> registry = BuiltinRegistries.BIOME;
|
Registry<net.minecraft.world.biome.Biome> registry = BuiltinRegistries.BIOME;
|
||||||
RegistryKey<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
RegistryKey<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
||||||
@@ -78,6 +79,26 @@ public final class BiomeUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void registerFlora(Registry<net.minecraft.world.biome.Biome> biomes) {
|
||||||
|
logger.info("Injecting flora into Terra biomes...");
|
||||||
|
TERRA_BIOME_MAP
|
||||||
|
.forEach((vb, terraBiomes) ->
|
||||||
|
biomes.getOrEmpty(vb)
|
||||||
|
.ifPresentOrElse(vanilla -> terraBiomes
|
||||||
|
.forEach(tb -> biomes.getOrEmpty(tb)
|
||||||
|
.ifPresentOrElse(
|
||||||
|
terra -> {
|
||||||
|
List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf(vanilla.getGenerationSettings().getFlowerFeatures());
|
||||||
|
logger.debug("Injecting flora into biome {} : {}", tb, flowerFeatures);
|
||||||
|
((FloraFeatureHolder) terra.getGenerationSettings()).setFloraFeatures(flowerFeatures);
|
||||||
|
},
|
||||||
|
() -> logger.error(
|
||||||
|
"No such biome: {}",
|
||||||
|
tb))),
|
||||||
|
() -> logger.error("No vanilla biome: {}", vb)));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static Map<Identifier, List<Identifier>> getTerraBiomeMap() {
|
public static Map<Identifier, List<Identifier>> getTerraBiomeMap() {
|
||||||
return Map.copyOf(TERRA_BIOME_MAP);
|
return Map.copyOf(TERRA_BIOME_MAP);
|
||||||
}
|
}
|
||||||
@@ -133,18 +154,13 @@ public final class BiomeUtil {
|
|||||||
.category(vanilla.getCategory());
|
.category(vanilla.getCategory());
|
||||||
}
|
}
|
||||||
|
|
||||||
GenerationSettings settings = generationSettings.build();
|
|
||||||
|
|
||||||
((GenerationSettingsAccessor) settings)
|
|
||||||
.setFlowerFeatures(((GenerationSettingsAccessor) vanilla.getGenerationSettings())
|
|
||||||
.getFlowerFeaturesSupplier());
|
|
||||||
|
|
||||||
return builder
|
return builder
|
||||||
.temperature(vanilla.getTemperature())
|
.temperature(vanilla.getTemperature())
|
||||||
.downfall(vanilla.getDownfall())
|
.downfall(vanilla.getDownfall())
|
||||||
.effects(effects.build())
|
.effects(effects.build())
|
||||||
.spawnSettings(vanilla.getSpawnSettings())
|
.spawnSettings(vanilla.getSpawnSettings())
|
||||||
.generationSettings(settings)
|
.generationSettings(generationSettings.build())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.dfsek.terra.fabric.util;
|
||||||
|
|
||||||
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public interface FloraFeatureHolder {
|
||||||
|
void setFloraFeatures(List<ConfiguredFeature<?, ?>> features);
|
||||||
|
}
|
||||||
@@ -4,10 +4,10 @@
|
|||||||
"package": "com.dfsek.terra.fabric.mixin",
|
"package": "com.dfsek.terra.fabric.mixin",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"access.GenerationSettingsAccessor",
|
|
||||||
"access.MobSpawnerLogicAccessor",
|
"access.MobSpawnerLogicAccessor",
|
||||||
"access.StateAccessor",
|
"access.StateAccessor",
|
||||||
"access.StructureAccessorAccessor",
|
"access.StructureAccessorAccessor",
|
||||||
|
"compat.GenerationSettingsFloraFeaturesMixin",
|
||||||
"implementations.BiomeMixin",
|
"implementations.BiomeMixin",
|
||||||
"implementations.HandleImplementationMixin",
|
"implementations.HandleImplementationMixin",
|
||||||
"implementations.block.BlockMixin",
|
"implementations.block.BlockMixin",
|
||||||
|
|||||||
Reference in New Issue
Block a user