Skip to content

Commit d1dc57c

Browse files
committed
Resolve issue with FAPI blocking non-FAPI modded biomes in the End.
- Prevent FAPI crash when it sees our biomes
1 parent 79131bc commit d1dc57c

File tree

5 files changed

+35
-37
lines changed

5 files changed

+35
-37
lines changed

common/src/main/java/com/terraformersmc/biolith/impl/Biolith.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.terraformersmc.biolith.impl.commands.BiolithCommands;
55
import com.terraformersmc.biolith.impl.compat.BiolithCompat;
66
import com.terraformersmc.biolith.impl.config.BiolithConfigManager;
7+
import net.minecraft.util.Identifier;
78
import org.slf4j.Logger;
89
import org.slf4j.LoggerFactory;
910

@@ -25,4 +26,8 @@ public static void init() {
2526
public static BiolithConfigManager getConfigManager() {
2627
return CONFIG_MANAGER;
2728
}
29+
30+
public static Identifier id(String name) {
31+
return Identifier.of(MOD_ID, name);
32+
}
2833
}

fabric/src/main/java/com/terraformersmc/biolith/impl/BiolithInit.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@
33
import com.terraformersmc.biolith.impl.biome.BiomeCoordinator;
44
import com.terraformersmc.biolith.impl.compat.BiolithCompat;
55
import com.terraformersmc.biolith.impl.data.BiomePlacementLoader;
6-
import com.terraformersmc.biolith.impl.data.IdentifiableResourceReloaderWrapper;
76
import com.terraformersmc.biolith.impl.data.SurfaceGenerationLoader;
87
import net.fabricmc.api.ModInitializer;
98
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
10-
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
9+
import net.fabricmc.fabric.api.resource.v1.ResourceLoader;
1110
import net.minecraft.resource.ResourceType;
1211

1312
public class BiolithInit implements ModInitializer {
@@ -24,8 +23,9 @@ public void onInitialize() {
2423
ServerLifecycleEvents.SERVER_STOPPED.register(BiomeCoordinator::handleServerStopped);
2524

2625
// Implement our resource reloaders The Fabric Way (tm).
27-
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new IdentifiableResourceReloaderWrapper("biome_placement_loader", new BiomePlacementLoader()));
28-
ResourceManagerHelper.get(ResourceType.SERVER_DATA).registerReloadListener(new IdentifiableResourceReloaderWrapper("surface_generation_loader", new SurfaceGenerationLoader()));
26+
ResourceLoader serverDataLoader = ResourceLoader.get(ResourceType.SERVER_DATA);
27+
serverDataLoader.registerReloader(Biolith.id("biome_placement_loader"), new BiomePlacementLoader());
28+
serverDataLoader.registerReloader(Biolith.id("surface_generation_loader"), new SurfaceGenerationLoader());
2929

3030
// Call loader-agnostic init.
3131
Biolith.init();

fabric/src/main/java/com/terraformersmc/biolith/impl/data/IdentifiableResourceReloaderWrapper.java

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.terraformersmc.biolith.impl.mixin;
2+
3+
import net.fabricmc.fabric.impl.biome.TheEndBiomeData;
4+
import net.minecraft.registry.entry.RegistryEntry;
5+
import net.minecraft.world.biome.Biome;
6+
import net.minecraft.world.biome.source.util.MultiNoiseUtil;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
11+
12+
@Mixin(TheEndBiomeData.Overrides.class)
13+
public class MixinFapiTheEndBiomeDataOverrides {
14+
/*
15+
* Not only is FAPI not responsible for End biome placement under Biolith, but also they arbitrarily decided
16+
* to block mods from adding End biomes via alternative means. We bypass their picker to avoid this check.
17+
*/
18+
@Inject(method = "pick(IIILnet/minecraft/world/biome/source/util/MultiNoiseUtil$MultiNoiseSampler;Lnet/minecraft/registry/entry/RegistryEntry;)Lnet/minecraft/registry/entry/RegistryEntry;",
19+
at = @At("HEAD"),
20+
cancellable = true
21+
)
22+
private void biolith$bypassBiomeAPI(int x, int y, int z, MultiNoiseUtil.MultiNoiseSampler noise, RegistryEntry<Biome> vanillaBiome, CallbackInfoReturnable<RegistryEntry<Biome>> cir) {
23+
cir.setReturnValue(vanillaBiome);
24+
}
25+
}

fabric/src/main/resources/biolith.fabric.mixins.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"compatibilityLevel": "JAVA_17",
66
"plugin": "com.terraformersmc.biolith.impl.mixin.BiolithFabricMixinConfigPlugin",
77
"mixins": [
8+
"MixinFapiTheEndBiomeDataOverrides",
89
"MixinFapiTheEndBiomes",
910
"MixinMBBiomeSource",
1011
"MixinSaveLoader",

0 commit comments

Comments
 (0)