mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-23 16:49:10 +00:00
dont crash on minecraft:reload
This commit is contained in:
@@ -85,7 +85,6 @@ public final class FabricAddon implements BaseAddon {
|
|||||||
.then(event -> {
|
.then(event -> {
|
||||||
logger.info("Registering biomes...");
|
logger.info("Registering biomes...");
|
||||||
|
|
||||||
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) -> FabricUtil.registerBiome(biome, pack, event.getRegistryManager(), id));
|
.forEach((id, biome) -> FabricUtil.registerBiome(biome, pack, event.getRegistryManager(), id));
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ package com.dfsek.terra.fabric.generation;
|
|||||||
|
|
||||||
import com.dfsek.terra.fabric.data.Codecs;
|
import com.dfsek.terra.fabric.data.Codecs;
|
||||||
|
|
||||||
|
import com.dfsek.terra.fabric.util.ProtoPlatformBiome;
|
||||||
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
@@ -72,11 +74,7 @@ public class TerraBiomeSource extends BiomeSource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public net.minecraft.world.biome.Biome getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) {
|
public net.minecraft.world.biome.Biome getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) {
|
||||||
Biome biome = pack.getBiomeProvider().getBiome(biomeX << 2, biomeZ << 2, seed);
|
return ((ProtoPlatformBiome) pack.getBiomeProvider().getBiome(biomeX << 2, biomeZ << 2, seed).getPlatformBiome()).getDelegate();
|
||||||
return terraToMinecraft.computeIfAbsent(biome,
|
|
||||||
b -> biomeRegistry
|
|
||||||
.get(new Identifier("terra", FabricUtil
|
|
||||||
.createBiomeID(pack, pack.key(b.getID())))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BiomeProvider getProvider() {
|
public BiomeProvider getProvider() {
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.OptionalInt;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.api.block.entity.BlockEntity;
|
import com.dfsek.terra.api.block.entity.BlockEntity;
|
||||||
@@ -141,26 +142,19 @@ public final class FabricUtil {
|
|||||||
.generationSettings(generationSettings.build())
|
.generationSettings(generationSettings.build())
|
||||||
.build();
|
.build();
|
||||||
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
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());
|
|
||||||
|
|
||||||
|
if(!biomeRegistry.containsId(identifier)) {
|
||||||
|
Registry.register(biomeRegistry, identifier, minecraftBiome);
|
||||||
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(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() {
|
public static Map<RegistryKey<net.minecraft.world.biome.Biome>, List<RegistryKey<net.minecraft.world.biome.Biome>>> getTerraVanillaBiomes() {
|
||||||
return terraVanillaBiomes;
|
return terraVanillaBiomes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> void registerOrOverwrite(Registry<T> registry, RegistryKey<Registry<T>> key, Identifier identifier, T item) {
|
|
||||||
if(registry.containsId(identifier)) {
|
|
||||||
((MutableRegistry<T>) registry).set(registry.getRawId(registry.get(identifier)), RegistryKey.of(key, identifier), item,
|
|
||||||
Lifecycle.stable());
|
|
||||||
} else {
|
|
||||||
Registry.register(registry, identifier, item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BlockEntity createState(WorldAccess worldAccess, BlockPos pos) {
|
public static BlockEntity createState(WorldAccess worldAccess, BlockPos pos) {
|
||||||
net.minecraft.block.entity.BlockEntity entity = worldAccess.getBlockEntity(pos);
|
net.minecraft.block.entity.BlockEntity entity = worldAccess.getBlockEntity(pos);
|
||||||
if(entity instanceof SignBlockEntity) {
|
if(entity instanceof SignBlockEntity) {
|
||||||
|
|||||||
@@ -22,10 +22,14 @@ import net.minecraft.util.registry.Registry;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.world.biome.PlatformBiome;
|
import com.dfsek.terra.api.world.biome.PlatformBiome;
|
||||||
|
|
||||||
|
import net.minecraft.world.biome.Biome;
|
||||||
|
|
||||||
|
|
||||||
public class ProtoPlatformBiome implements PlatformBiome {
|
public class ProtoPlatformBiome implements PlatformBiome {
|
||||||
private final Identifier identifier;
|
private final Identifier identifier;
|
||||||
|
|
||||||
|
private Biome delegate;
|
||||||
|
|
||||||
public ProtoPlatformBiome(Identifier identifier) {
|
public ProtoPlatformBiome(Identifier identifier) {
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
||||||
}
|
}
|
||||||
@@ -38,4 +42,12 @@ public class ProtoPlatformBiome implements PlatformBiome {
|
|||||||
public Object getHandle() {
|
public Object getHandle() {
|
||||||
return identifier;
|
return identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Biome getDelegate() {
|
||||||
|
return delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDelegate(Biome delegate) {
|
||||||
|
this.delegate = delegate;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user