diff --git a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModificationContext.java b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModificationContext.java index bfab7d842..7f327bb97 100644 --- a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModificationContext.java +++ b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModificationContext.java @@ -17,6 +17,7 @@ package net.fabricmc.fabric.api.biome.v1; import java.util.Optional; +import java.util.OptionalInt; import java.util.function.BiPredicate; import org.jetbrains.annotations.NotNull; @@ -127,6 +128,14 @@ public interface BiomeModificationContext { setFoliageColor(Optional.of(color)); } + /** + * @see BiomeEffects#getFoliageColor() + * @see BiomeEffects.Builder#foliageColor(int) + */ + default void setFoliageColor(OptionalInt color) { + color.ifPresentOrElse(this::setFoliageColor, this::clearFoliageColor); + } + /** * @see BiomeEffects#getFoliageColor() * @see BiomeEffects.Builder#foliageColor(int) @@ -149,6 +158,14 @@ public interface BiomeModificationContext { setGrassColor(Optional.of(color)); } + /** + * @see BiomeEffects#getGrassColor() + * @see BiomeEffects.Builder#grassColor(int) + */ + default void setGrassColor(OptionalInt color) { + color.ifPresentOrElse(this::setGrassColor, this::clearGrassColor); + } + /** * @see BiomeEffects#getGrassColor() * @see BiomeEffects.Builder#grassColor(int) diff --git a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModifications.java b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModifications.java index c7e0b6466..d1d258973 100644 --- a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModifications.java +++ b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/api/biome/v1/BiomeModifications.java @@ -79,7 +79,7 @@ public final class BiomeModifications { // We need the entity type to be registered, or we cannot deduce an ID otherwise Identifier id = Registries.ENTITY_TYPE.getId(entityType); - Preconditions.checkState(id != Registries.ENTITY_TYPE.getDefaultId(), "Unregistered entity type: %s", entityType); + Preconditions.checkState(Registries.ENTITY_TYPE.getKey(entityType).isPresent(), "Unregistered entity type: %s", entityType); create(id).add(ModificationPhase.ADDITIONS, biomeSelector, context -> { context.getSpawnSettings().addSpawn(spawnGroup, new SpawnSettings.SpawnEntry(entityType, weight, minGroupSize, maxGroupSize)); diff --git a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationContextImpl.java b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationContextImpl.java index dee45579a..ebc875cbc 100644 --- a/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationContextImpl.java +++ b/fabric-biome-api-v1/src/main/java/net/fabricmc/fabric/impl/biome/modification/BiomeModificationContextImpl.java @@ -31,20 +31,21 @@ import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import net.minecraft.registry.RegistryKeys; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.entry.RegistryEntryList; import net.minecraft.sound.BiomeAdditionsSound; import net.minecraft.sound.BiomeMoodSound; import net.minecraft.sound.MusicSound; import net.minecraft.sound.SoundEvent; import net.minecraft.util.collection.Pool; -import net.minecraft.registry.DynamicRegistryManager; -import net.minecraft.registry.Registry; -import net.minecraft.registry.entry.RegistryEntry; -import net.minecraft.registry.entry.RegistryEntryList; -import net.minecraft.registry.RegistryKey; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.biome.BiomeParticleConfig; @@ -301,7 +302,11 @@ public class BiomeModificationContextImpl implements BiomeModificationContext { @Override public boolean removeCarver(GenerationStep.Carver step, RegistryKey<ConfiguredCarver<?>> configuredCarverKey) { ConfiguredCarver<?> carver = getEntry(carvers, configuredCarverKey).value(); - List<RegistryEntry<ConfiguredCarver<?>>> genCarvers = new ArrayList<>(generationSettings.carvers.get(step).stream().toList()); + RegistryEntryList<ConfiguredCarver<?>> carvers = generationSettings.carvers.get(step); + + if (carvers == null) return false; + + List<RegistryEntry<ConfiguredCarver<?>>> genCarvers = new ArrayList<>(carvers.stream().toList()); if (genCarvers.removeIf(entry -> entry.value() == carver)) { generationSettings.carvers.put(step, RegistryEntryList.of(genCarvers)); @@ -311,7 +316,9 @@ public class BiomeModificationContextImpl implements BiomeModificationContext { return false; } - private <T> RegistryEntryList<T> plus(RegistryEntryList<T> values, RegistryEntry<T> entry) { + private <T> RegistryEntryList<T> plus(@Nullable RegistryEntryList<T> values, RegistryEntry<T> entry) { + if (values == null) return RegistryEntryList.of(entry); + List<RegistryEntry<T>> list = new ArrayList<>(values.stream().toList()); list.add(entry); return RegistryEntryList.of(list);