Skip to content

Commit

Permalink
add biome registry and fix dynamic registries
Browse files Browse the repository at this point in the history
Signed-off-by: shedaniel <daniel@shedaniel.me>
  • Loading branch information
shedaniel committed Aug 15, 2020
1 parent 3b18890 commit 9569c41
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 3 deletions.
@@ -0,0 +1,80 @@
package me.shedaniel.cloth.api.dynamic.registry.v1;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import net.minecraft.util.registry.DynamicRegistryManager;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.carver.ConfiguredCarver;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.ConfiguredStructureFeature;

import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

public final class BiomesRegistry {
public static void registerFeature(DynamicRegistryManager manager, Biome biome, GenerationStep.Feature generationStep, RegistryKey<ConfiguredFeature<?, ?>> configuredFeature) {
registerFeature(manager, biome, generationStep, () -> manager.get(Registry.CONFIGURED_FEATURE_WORLDGEN).get(configuredFeature));
}

public static void registerFeature(DynamicRegistryManager manager, Biome biome, GenerationStep.Feature generationStep, Supplier<ConfiguredFeature<?, ?>> configuredFeature) {
GenerationSettings generationSettings = biome.getGenerationSettings();

List<List<Supplier<ConfiguredFeature<?, ?>>>> features = generationSettings.features;
if (features instanceof ImmutableList) {
features = generationSettings.features = Lists.newArrayList(features);
}

for (int i = features.size(); i <= generationStep.ordinal(); i++) {
features.add(Lists.newArrayList());
}

List<Supplier<ConfiguredFeature<?, ?>>> suppliers = features.get(generationStep.ordinal());
if (suppliers instanceof ImmutableList) {
features.set(generationStep.ordinal(), suppliers = Lists.newArrayList(suppliers));
}

suppliers.add(configuredFeature);
}

public static void registerStructure(DynamicRegistryManager manager, Biome biome, RegistryKey<ConfiguredStructureFeature<?, ?>> configuredStructure) {
registerStructure(manager, biome, () -> manager.get(Registry.CONFIGURED_STRUCTURE_FEATURE_WORLDGEN).get(configuredStructure));
}

public static void registerStructure(DynamicRegistryManager manager, Biome biome, Supplier<ConfiguredStructureFeature<?, ?>> configuredStructure) {
GenerationSettings generationSettings = biome.getGenerationSettings();

List<Supplier<ConfiguredStructureFeature<?, ?>>> structures = generationSettings.structureFeatures;
if (structures instanceof ImmutableList) {
structures = generationSettings.structureFeatures = Lists.newArrayList(structures);
}

structures.add(configuredStructure);
}

public static void registerCarver(DynamicRegistryManager manager, Biome biome, GenerationStep.Carver carver, RegistryKey<ConfiguredCarver<?>> configuredCarver) {
registerCarver(manager, biome, carver, () -> manager.get(Registry.CONFIGURED_CARVER_WORLDGEN).get(configuredCarver));
}

public static void registerCarver(DynamicRegistryManager manager, Biome biome, GenerationStep.Carver carver, Supplier<ConfiguredCarver<?>> configuredCarver) {
GenerationSettings generationSettings = biome.getGenerationSettings();

Map<GenerationStep.Carver, List<Supplier<ConfiguredCarver<?>>>> carvers = generationSettings.carvers;
if (carvers instanceof ImmutableMap) {
carvers = generationSettings.carvers = Maps.newLinkedHashMap(carvers);
}

List<Supplier<ConfiguredCarver<?>>> suppliers = carvers.get(carver);
if (suppliers instanceof ImmutableList) {
carvers.put(carver, suppliers = Lists.newArrayList(suppliers));
}

suppliers.add(configuredCarver);
}
}
Expand Up @@ -120,6 +120,6 @@ private static void afterLoad(DynamicRegistryManager.Impl manager, RegistryOps<?
@Unique
private static <E> void afterLoad(RegistryKey<Registry<E>> registryKey, DynamicRegistryManager manager, Map<Identifier, Set<Identifier>> map) {
Set<Identifier> identifiers = map.getOrDefault(registryKey.getValue(), Collections.emptySet());
acceptEvents(registryKey, manager, valueKey -> identifiers.contains(valueKey.getValue()));
acceptEvents(registryKey, manager, valueKey -> !identifiers.contains(valueKey.getValue()));
}
}
@@ -1,2 +1,8 @@
accessWidener v1 named
accessible class net/minecraft/util/registry/DynamicRegistryManager$Info
accessible class net/minecraft/util/registry/DynamicRegistryManager$Info
accessible field net/minecraft/world/biome/GenerationSettings features Ljava/util/List;
mutable field net/minecraft/world/biome/GenerationSettings features Ljava/util/List;
accessible field net/minecraft/world/biome/GenerationSettings structureFeatures Ljava/util/List;
mutable field net/minecraft/world/biome/GenerationSettings structureFeatures Ljava/util/List;
accessible field net/minecraft/world/biome/GenerationSettings carvers Ljava/util/Map;
mutable field net/minecraft/world/biome/GenerationSettings carvers Ljava/util/Map;
2 changes: 1 addition & 1 deletion gradle.properties
Expand Up @@ -4,5 +4,5 @@ minecraft_version=1.16.2
yarn_version=1.16.2+build.1+legacy.20w09a+build.8
fabric_loader_version=0.9.1+build.205
fabric_version=0.17.2+build.396-1.16
mod_version=1.2.0
mod_version=1.2.1
cloth_basic_math=0.5.1

0 comments on commit 9569c41

Please sign in to comment.