mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
fix tag registration
This commit is contained in:
+4
-5
@@ -20,6 +20,7 @@ package com.dfsek.terra.fabric.generation;
|
|||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.util.registry.RegistryEntry;
|
import net.minecraft.util.registry.RegistryEntry;
|
||||||
|
import net.minecraft.world.biome.Biome;
|
||||||
import net.minecraft.world.biome.source.BiomeSource;
|
import net.minecraft.world.biome.source.BiomeSource;
|
||||||
import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler;
|
import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler;
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ public class TerraBiomeSource extends BiomeSource {
|
|||||||
.stream(pack.getBiomeProvider()
|
.stream(pack.getBiomeProvider()
|
||||||
.getBiomes()
|
.getBiomes()
|
||||||
.spliterator(), false)
|
.spliterator(), false)
|
||||||
.map(b -> ((ProtoPlatformBiome) b.getPlatformBiome()).getDelegate()));
|
.map(b -> biomes.getOrCreateEntry(((ProtoPlatformBiome) b.getPlatformBiome()).getDelegate())));
|
||||||
this.biomeRegistry = biomes;
|
this.biomeRegistry = biomes;
|
||||||
this.seed = seed;
|
this.seed = seed;
|
||||||
this.pack = pack;
|
this.pack = pack;
|
||||||
@@ -68,13 +69,11 @@ public class TerraBiomeSource extends BiomeSource {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RegistryEntry<net.minecraft.world.biome.Biome> getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) {
|
public RegistryEntry<net.minecraft.world.biome.Biome> getBiome(int biomeX, int biomeY, int biomeZ, MultiNoiseSampler noiseSampler) {
|
||||||
return biomeRegistry.entryOf(((ProtoPlatformBiome) pack
|
return biomeRegistry.getOrCreateEntry(((ProtoPlatformBiome) pack
|
||||||
.getBiomeProvider()
|
.getBiomeProvider()
|
||||||
.getBiome(biomeX << 2, biomeZ << 2, seed)
|
.getBiome(biomeX << 2, biomeZ << 2, seed)
|
||||||
.getPlatformBiome())
|
.getPlatformBiome())
|
||||||
.getDelegate()
|
.getDelegate());
|
||||||
.getKey()
|
|
||||||
.orElseThrow());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BiomeProvider getProvider() {
|
public BiomeProvider getProvider() {
|
||||||
|
|||||||
+1
@@ -1,6 +1,7 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
package com.dfsek.terra.fabric.mixin.lifecycle;
|
||||||
|
|
||||||
import net.minecraft.server.DataPackContents;
|
import net.minecraft.server.DataPackContents;
|
||||||
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
import net.minecraft.util.registry.DynamicRegistryManager;
|
import net.minecraft.util.registry.DynamicRegistryManager;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ public final class FabricUtil {
|
|||||||
private static final Map<Identifier, List<Identifier>>
|
private static final Map<Identifier, List<Identifier>>
|
||||||
TERRA_BIOME_MAP = new HashMap<>();
|
TERRA_BIOME_MAP = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate.
|
* Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate.
|
||||||
*
|
*
|
||||||
@@ -83,23 +84,23 @@ public final class FabricUtil {
|
|||||||
public static void registerBiome(Biome biome, ConfigPack pack,
|
public 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;
|
||||||
RegistryEntry<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
RegistryKey<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
||||||
|
|
||||||
|
|
||||||
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
||||||
} else {
|
} else {
|
||||||
net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, vanilla.value());
|
net.minecraft.world.biome.Biome minecraftBiome = createBiome(biome, registry.get(vanilla));
|
||||||
|
|
||||||
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
Identifier identifier = new Identifier("terra", FabricUtil.createBiomeID(pack, id));
|
||||||
|
|
||||||
if(registry.containsId(identifier)) {
|
if(registry.containsId(identifier)) {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow());
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(FabricUtil.getEntry(registry, identifier).orElseThrow().getKey().orElseThrow());
|
||||||
} else {
|
} else {
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, registerKey(identifier).getValue(), minecraftBiome));
|
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry, registerKey(identifier).getValue(), minecraftBiome).getKey().orElseThrow());
|
||||||
}
|
}
|
||||||
|
|
||||||
TERRA_BIOME_MAP.computeIfAbsent(vanilla.getKey().orElseThrow().getValue(), i -> new ArrayList<>()).add(identifier);
|
TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +121,7 @@ public final class FabricUtil {
|
|||||||
.ifPresentOrElse(vanilla -> terraBiomes.forEach(tb -> getEntry(registry, tb)
|
.ifPresentOrElse(vanilla -> terraBiomes.forEach(tb -> getEntry(registry, tb)
|
||||||
.ifPresentOrElse(
|
.ifPresentOrElse(
|
||||||
terra -> {
|
terra -> {
|
||||||
logger.debug(vanilla.getKey().orElseThrow().getValue() + " (vanilla for " +
|
logger.info(vanilla.getKey().orElseThrow().getValue() + " (vanilla for " +
|
||||||
terra.getKey().orElseThrow().getValue() + ": " +
|
terra.getKey().orElseThrow().getValue() + ": " +
|
||||||
vanilla.streamTags().toList());
|
vanilla.streamTags().toList());
|
||||||
|
|
||||||
@@ -219,6 +220,6 @@ public final class FabricUtil {
|
|||||||
public static <T> Optional<RegistryEntry<T>> getEntry(Registry<T> registry, Identifier identifier) {
|
public static <T> Optional<RegistryEntry<T>> getEntry(Registry<T> registry, Identifier identifier) {
|
||||||
return registry.getOrEmpty(identifier)
|
return registry.getOrEmpty(identifier)
|
||||||
.flatMap(registry::getKey)
|
.flatMap(registry::getKey)
|
||||||
.flatMap(registry::getEntry);
|
.map(registry::getOrCreateEntry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package com.dfsek.terra.fabric.util;
|
|||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import net.minecraft.util.registry.RegistryEntry;
|
import net.minecraft.util.registry.RegistryEntry;
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.biome.Biome;
|
import net.minecraft.world.biome.Biome;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -30,14 +31,14 @@ import com.dfsek.terra.api.world.biome.PlatformBiome;
|
|||||||
public class ProtoPlatformBiome implements PlatformBiome {
|
public class ProtoPlatformBiome implements PlatformBiome {
|
||||||
private final Identifier identifier;
|
private final Identifier identifier;
|
||||||
|
|
||||||
private RegistryEntry<Biome> delegate;
|
private RegistryKey<Biome> delegate;
|
||||||
|
|
||||||
public ProtoPlatformBiome(Identifier identifier) {
|
public ProtoPlatformBiome(Identifier identifier) {
|
||||||
this.identifier = identifier;
|
this.identifier = identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegistryEntry<Biome> get(Registry<net.minecraft.world.biome.Biome> registry) {
|
public RegistryKey<Biome> get(Registry<net.minecraft.world.biome.Biome> registry) {
|
||||||
return FabricUtil.getEntry(registry, identifier).orElseThrow();
|
return FabricUtil.getEntry(registry, identifier).orElseThrow().getKey().orElseThrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -45,11 +46,11 @@ public class ProtoPlatformBiome implements PlatformBiome {
|
|||||||
return identifier;
|
return identifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegistryEntry<Biome> getDelegate() {
|
public RegistryKey<Biome> getDelegate() {
|
||||||
return delegate;
|
return delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDelegate(RegistryEntry<Biome> delegate) {
|
public void setDelegate(RegistryKey<Biome> delegate) {
|
||||||
this.delegate = Objects.requireNonNull(delegate);
|
this.delegate = Objects.requireNonNull(delegate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user