This commit is contained in:
Zoë
2022-07-14 19:50:25 -07:00
parent 04c6363469
commit 1003304fde
45 changed files with 189 additions and 221 deletions

View File

@@ -4,9 +4,6 @@ import ca.solostudios.strata.Versions;
import ca.solostudios.strata.version.Version;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
import com.dfsek.terra.api.world.biome.Biome;
public class BukkitAddon implements BaseAddon {
@@ -18,7 +15,7 @@ public class BukkitAddon implements BaseAddon {
this.terraBukkitPlugin = terraBukkitPlugin;
}
@Override
public Version getVersion() {
return VERSION;

View File

@@ -45,9 +45,8 @@ import com.dfsek.terra.bukkit.world.BukkitAdapter;
public class TerraBukkitPlugin extends JavaPlugin {
private static final Logger logger = LoggerFactory.getLogger(TerraBukkitPlugin.class);
private PlatformImpl platform;
private final Map<String, com.dfsek.terra.api.world.chunk.generation.ChunkGenerator> generatorMap = new HashMap<>();
private PlatformImpl platform;
@Override
public void onEnable() {

View File

@@ -1,7 +1,5 @@
package com.dfsek.terra.bukkit.generator;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
import org.bukkit.generator.BiomeProvider;
import org.bukkit.generator.WorldInfo;
import org.jetbrains.annotations.NotNull;
@@ -12,6 +10,7 @@ import java.util.stream.StreamSupport;
import com.dfsek.terra.api.Handle;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
public class BukkitBiomeProvider extends BiomeProvider implements Handle {
@@ -22,13 +21,13 @@ public class BukkitBiomeProvider extends BiomeProvider implements Handle {
@Override
public @NotNull org.bukkit.block.Biome getBiome(@NotNull WorldInfo worldInfo, int x, int y, int z) {
Biome biome = delegate.getBiome(x, y, z, worldInfo.getSeed());
return ((BukkitPlatformBiome)biome.getPlatformBiome().get()).getBukkitBiome();
return ((BukkitPlatformBiome) biome.getPlatformBiome().get()).getBukkitBiome();
}
@Override
public @NotNull List<org.bukkit.block.Biome> getBiomes(@NotNull WorldInfo worldInfo) {
return StreamSupport.stream(delegate.getBiomes().spliterator(), false)
.map(terraBiome -> ((BukkitPlatformBiome)terraBiome.getPlatformBiome().get()).getBukkitBiome())
.map(terraBiome -> ((BukkitPlatformBiome) terraBiome.getPlatformBiome().get()).getBukkitBiome())
.collect(Collectors.toList());
}

View File

@@ -46,7 +46,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
private ChunkGenerator delegate;
private ConfigPack pack;
public BukkitChunkGeneratorWrapper(ChunkGenerator delegate, ConfigPack pack, BlockState air) {
this.delegate = delegate;
this.pack = pack;
@@ -97,7 +97,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
public boolean shouldGenerateMobs() {
return true;
}
@Override
public boolean shouldGenerateStructures() {
return true;
@@ -117,7 +117,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
return delegate;
}
private record SeededVector(int x, int z, WorldProperties worldProperties) {
@Override
public boolean equals(Object obj) {
@@ -126,7 +126,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
}
return false;
}
@Override
public int hashCode() {
int code = x;

View File

@@ -1,12 +1,11 @@
package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
import org.bukkit.Bukkit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.dfsek.terra.bukkit.PlatformImpl;
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
public interface Initializer {

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.bukkit.world;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import org.bukkit.block.Biome;
import com.dfsek.terra.api.world.biome.PlatformBiome;
public interface BukkitPlatformBiome extends PlatformBiome {
Biome getBukkitBiome();

View File

@@ -1,9 +1,5 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.TagUtil;
import net.minecraft.core.Holder;
import net.minecraft.core.MappedRegistry;
import net.minecraft.core.WritableRegistry;
@@ -19,17 +15,18 @@ import java.util.Map;
import com.dfsek.terra.api.structure.configured.ConfiguredStructure;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.TagUtil;
import com.dfsek.terra.registry.master.ConfigRegistry;
public class AwfulBukkitHacks {
private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class);
public static final Map<Holder<net.minecraft.world.level.biome.Biome>, Map<ResourceLocation,
ProbabilityCollection<ConfiguredStructure>>>
TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>();
public static final Map<TagKey<Biome>, List<ResourceLocation>>
TERRA_BIOME_TAG_MAP = new HashMap<>();
private static final Logger LOGGER = LoggerFactory.getLogger(AwfulBukkitHacks.class);
public static void registerBiomes(ConfigRegistry configRegistry) {
try {
@@ -43,7 +40,7 @@ public class AwfulBukkitHacks {
}));
Reflection.MAPPED_REGISTRY.setFrozen((MappedRegistry<?>) biomeRegistry, true); // freeze registry again :)
TagUtil.registerBiomeTags(biomeRegistry);
} catch(SecurityException | IllegalArgumentException exception) {

View File

@@ -1,7 +1,5 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation;
@@ -15,10 +13,11 @@ import java.util.Objects;
import java.util.Optional;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties;
public class NMSBiomeInjector {
public static <T> Optional<Holder<T>> getEntry(Registry<T> registry, ResourceLocation identifier) {
return registry.getOptional(identifier)
.flatMap(registry::getResourceKey)
@@ -27,58 +26,58 @@ public class NMSBiomeInjector {
public static Biome createBiome(VanillaBiomeProperties vanillaBiomeProperties)
throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
BiomeGenerationSettings.Builder generationSettings = new BiomeGenerationSettings.Builder();
BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder();
net.minecraft.world.level.biome.Biome.BiomeBuilder builder = new BiomeBuilder();
effects.waterColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterColor()))
.waterFogColor(Objects.requireNonNull(vanillaBiomeProperties.getWaterFogColor()))
.fogColor(Objects.requireNonNull(vanillaBiomeProperties.getFogColor()))
.skyColor(Objects.requireNonNull(vanillaBiomeProperties.getSkyColor()))
.grassColorModifier(
Objects.requireNonNull(vanillaBiomeProperties.getGrassColorModifier()));
if(vanillaBiomeProperties.getFoliageColor() != null) {
effects.foliageColorOverride(vanillaBiomeProperties.getFoliageColor());
}
if(vanillaBiomeProperties.getGrassColor() != null) {
effects.grassColorOverride(vanillaBiomeProperties.getGrassColor());
}
if(vanillaBiomeProperties.getParticleConfig() != null) {
effects.ambientParticle(vanillaBiomeProperties.getParticleConfig());
}
if(vanillaBiomeProperties.getLoopSound() != null) {
effects.ambientLoopSound(vanillaBiomeProperties.getLoopSound());
}
if(vanillaBiomeProperties.getMoodSound() != null) {
effects.ambientMoodSound(vanillaBiomeProperties.getMoodSound());
}
if(vanillaBiomeProperties.getAdditionsSound() != null) {
effects.ambientAdditionsSound(vanillaBiomeProperties.getAdditionsSound());
}
if(vanillaBiomeProperties.getMusic() != null) {
effects.backgroundMusic(vanillaBiomeProperties.getMusic());
}
builder.precipitation(Objects.requireNonNull(vanillaBiomeProperties.getPrecipitation()));
builder.temperature(Objects.requireNonNull(vanillaBiomeProperties.getTemperature()));
builder.downfall(Objects.requireNonNull(vanillaBiomeProperties.getDownfall()));
builder.temperatureAdjustment(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier()));
builder.mobSpawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings()));
return builder
.specialEffects(effects.build())
.generationSettings(generationSettings.build())

View File

@@ -1,7 +1,5 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome;
import com.mojang.serialization.Codec;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
@@ -11,6 +9,7 @@ import net.minecraft.world.level.biome.Climate.Sampler;
import org.jetbrains.annotations.NotNull;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome;
public class NMSBiomeProvider extends BiomeSource {
@@ -34,6 +33,6 @@ public class NMSBiomeProvider extends BiomeSource {
@Override
public @NotNull Holder<Biome> getNoiseBiome(int x, int y, int z, @NotNull Sampler sampler) {
return biomeRegistry.getHolderOrThrow(((ProtoPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed)
.getPlatformBiome()).getBiome());
.getPlatformBiome()).getBiome());
}
}

View File

@@ -143,10 +143,10 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
*/
return vanilla.getBaseColumn(x, z, world, noiseConfig);
}
@Override
public void addDebugScreenInfo(@NotNull List<String> text, @NotNull RandomState noiseConfig, @NotNull BlockPos pos) {
}
@Override
@@ -187,7 +187,7 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
}
});
}
private List<ChunkPos> generateRingPositions(StructureSet holder, RandomState randomstate,
ConcentricRingsStructurePlacement concentricringsstructureplacement) { // Spigot
if(concentricringsstructureplacement.count() == 0) {

View File

@@ -38,13 +38,13 @@ public class NMSInjectListener implements Listener {
ChunkGenerator vanilla = serverWorld.getChunkSource().getGenerator();
NMSBiomeProvider provider = new NMSBiomeProvider(pack.getBiomeProvider(), craftWorld.getSeed());
NMSChunkGeneratorDelegate custom = new NMSChunkGeneratorDelegate(vanilla, pack, provider, craftWorld.getSeed());
custom.conf = vanilla.conf; // world config from Spigot
serverWorld.getChunkSource().chunkMap.generator = custom;
LOGGER.info("Successfully injected into world.");
INJECT_LOCK.unlock();
}
}

View File

@@ -3,32 +3,6 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1;
import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeAdditionsSoundTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeMoodSoundTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeParticleConfigTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.EntityTypeTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.MusicSoundTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SoundEventTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnCostConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnEntryTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnSettingsTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnTypeConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VillagerTypeTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
@@ -48,11 +22,28 @@ import net.minecraft.world.level.biome.MobSpawnSettings;
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
import org.bukkit.Bukkit;
import com.dfsek.terra.bukkit.PlatformImpl;
import java.util.List;
import java.util.Locale;
import com.dfsek.terra.api.addon.BaseAddon;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import com.dfsek.terra.bukkit.PlatformImpl;
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeAdditionsSoundTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeMoodSoundTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.BiomeParticleConfigTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.EntityTypeTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.MusicSoundTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SoundEventTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnCostConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnEntryTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnSettingsTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.SpawnTypeConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VillagerTypeTemplate;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.BiomeUtil;
public class NMSPlatform extends PlatformImpl {
@@ -84,7 +75,7 @@ public class NMSPlatform extends PlatformImpl {
.registerLoader(GrassColorModifier.class,
(type, o, loader, depthTracker) -> TemperatureModifier.valueOf(((String) o).toUpperCase(
Locale.ROOT)))
.registerLoader(MobCategory.class,(type, o, loader, depthTracker) -> MobCategory.valueOf((String) o))
.registerLoader(MobCategory.class, (type, o, loader, depthTracker) -> MobCategory.valueOf((String) o))
.registerLoader(AmbientParticleSettings.class, BiomeParticleConfigTemplate::new)
.registerLoader(SoundEvent.class, SoundEventTemplate::new)
.registerLoader(AmbientMoodSettings.class, BiomeMoodSoundTemplate::new)

View File

@@ -35,6 +35,7 @@ public class Reflection {
void setFrozen(MappedRegistry<?> instance, boolean frozen);
}
@Proxies(VillagerTypeProxy.class)
public interface VillagerTypeProxy {
@Static

View File

@@ -3,8 +3,10 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.Map;
import net.minecraft.resources.ResourceLocation;
import java.util.Map;
import com.dfsek.terra.api.structure.configured.ConfiguredStructure;
import com.dfsek.terra.api.util.collection.ProbabilityCollection;

View File

@@ -3,11 +3,11 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.api.util.Range;
import net.minecraft.sounds.Music;
import net.minecraft.sounds.SoundEvent;
import com.dfsek.terra.api.util.Range;
public class MusicSoundTemplate implements ObjectTemplate<Music> {
@Value("sound")
@@ -17,7 +17,7 @@ public class MusicSoundTemplate implements ObjectTemplate<Music> {
@Value("delay")
@Default
private Range delay = null;
@Value("replace-current-music")
@Default

View File

@@ -17,24 +17,21 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.MinecraftUtil;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
import net.minecraft.core.Registry;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome;
import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.util.MinecraftUtil;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
public class ProtoPlatformBiome implements PlatformBiome, BukkitPlatformBiome {
private final ResourceLocation identifier;
private final ResourceKey<Biome> biome;
public ProtoPlatformBiome(ResourceLocation identifier, ResourceKey<Biome> biome) {
this.identifier = identifier;
this.biome = biome;

View File

@@ -3,11 +3,11 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import com.dfsek.terra.api.util.Range;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
import com.dfsek.terra.api.util.Range;
public class SpawnEntryTemplate implements ObjectTemplate<SpawnerData> {
@Value("type")

View File

@@ -3,11 +3,12 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.List;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.level.biome.MobSpawnSettings;
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
import java.util.List;
public class SpawnSettingsTemplate implements ObjectTemplate<MobSpawnSettings> {
@Value("spawns")
@@ -27,7 +28,7 @@ public class SpawnSettingsTemplate implements ObjectTemplate<MobSpawnSettings> {
MobSpawnSettings.Builder builder = new MobSpawnSettings.Builder();
for(SpawnTypeConfig spawn : spawns) {
MobCategory group = spawn.getGroup();
for (SpawnerData entry : spawn.getEntry()) {
for(SpawnerData entry : spawn.getEntry()) {
builder.addSpawn(group, entry);
}
}

View File

@@ -3,10 +3,11 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
import java.util.List;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
import java.util.List;
public class SpawnTypeConfig implements ObjectTemplate<SpawnTypeConfig> {
@Value("group")

View File

@@ -3,10 +3,6 @@ package com.dfsek.terra.bukkit.nms.v1_19_R1.config;
import com.dfsek.tectonic.api.config.template.ConfigTemplate;
import com.dfsek.tectonic.api.config.template.annotations.Default;
import com.dfsek.tectonic.api.config.template.annotations.Value;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.Music;
import net.minecraft.sounds.SoundEvent;
@@ -18,6 +14,11 @@ import net.minecraft.world.level.biome.Biome.Precipitation;
import net.minecraft.world.level.biome.Biome.TemperatureModifier;
import net.minecraft.world.level.biome.BiomeSpecialEffects.GrassColorModifier;
import net.minecraft.world.level.biome.MobSpawnSettings;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.dfsek.terra.api.properties.Properties;

View File

@@ -1,10 +1,12 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1.util;
import com.dfsek.terra.bukkit.nms.v1_19_R1.Reflection;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.npc.VillagerType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,27 +15,24 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.npc.VillagerType;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.Reflection;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.FertilizableConfig;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.ProtoPlatformBiome;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties;
public class BiomeUtil {
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
public static final Map<Holder<net.minecraft.world.level.biome.Biome>, Map<ResourceLocation, FertilizableConfig>>
TERRA_BIOME_FERTILIZABLE_MAP = new HashMap<>();
public static final Map<TagKey<net.minecraft.world.level.biome.Biome>, List<ResourceLocation>>
TERRA_BIOME_TAG_MAP = new HashMap<>();
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
protected static ResourceKey<net.minecraft.world.level.biome.Biome> registerBiome(ResourceLocation identifier,
net.minecraft.world.level.biome.Biome biome) {
net.minecraft.world.level.biome.Biome biome) {
BuiltinRegistries.register(BuiltinRegistries.BIOME,
MinecraftUtil.registerKey(identifier)
.location(),
@@ -52,22 +51,22 @@ public class BiomeUtil {
* @param pack The ConfigPack this biome belongs to.
*/
public static void registerBiome(Biome biome, ConfigPack pack,
com.dfsek.terra.api.registry.key.RegistryKey id) {
com.dfsek.terra.api.registry.key.RegistryKey id) {
VanillaBiomeProperties vanillaBiomeProperties = biome.getContext().get(VanillaBiomeProperties.class);
net.minecraft.world.level.biome.Biome minecraftBiome = MinecraftUtil.createBiome(vanillaBiomeProperties);
ResourceLocation identifier = new ResourceLocation("terra", MinecraftUtil.createBiomeID(pack, id));
biome.setPlatformBiome(new ProtoPlatformBiome(identifier, registerBiome(identifier, minecraftBiome)));
Map villagerMap = Reflection.VILLAGER_TYPE.getByBiome();
villagerMap.put(ResourceKey.create(Registry.BIOME_REGISTRY, identifier),
Objects.requireNonNullElse(vanillaBiomeProperties.getVillagerType(), VillagerType.PLAINS));
TERRA_BIOME_FERTILIZABLE_MAP.put(Holder.direct(minecraftBiome), vanillaBiomeProperties.getFertilizables());
for(ResourceLocation tag : vanillaBiomeProperties.getTags()) {
TERRA_BIOME_TAG_MAP.getOrDefault(TagKey.create(Registry.BIOME_REGISTRY, tag), new ArrayList<>()).add(identifier);
}

View File

@@ -17,11 +17,12 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1.util;
import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.api.world.info.WorldProperties;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.LevelHeightAccessor;
import com.dfsek.terra.api.util.vector.Vector3;
import com.dfsek.terra.api.world.info.WorldProperties;
public final class MinecraftAdapter {

View File

@@ -1,13 +1,5 @@
package com.dfsek.terra.bukkit.nms.v1_19_R1.util;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
@@ -21,11 +13,19 @@ import net.minecraft.world.level.biome.BiomeSpecialEffects;
import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Locale;
import java.util.Objects;
import java.util.Optional;
import com.dfsek.terra.api.block.entity.BlockEntity;
import com.dfsek.terra.api.block.entity.Container;
import com.dfsek.terra.api.block.entity.MobSpawner;
import com.dfsek.terra.api.block.entity.Sign;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.bukkit.nms.v1_19_R1.config.VanillaBiomeProperties;
public final class MinecraftUtil {
@@ -110,7 +110,7 @@ public final class MinecraftUtil {
builder.temperatureAdjustment(Objects.requireNonNull(vanillaBiomeProperties.getTemperatureModifier()));
builder.mobSpawnSettings(Objects.requireNonNull(vanillaBiomeProperties.getSpawnSettings()));
return builder
.specialEffects(effects.build())
.generationSettings(generationSettings.build())

View File

@@ -36,7 +36,7 @@ public final class TagUtil {
logger.info("Doing data-driven biome tag garbage....");
logger.info("who let this data drive?");
Map<TagKey<Biome>, List<Holder<Biome>>> collect = tagsToMutableMap(registry);
BiomeUtil.TERRA_BIOME_TAG_MAP.forEach((tag, biomeList) -> {
collect.getOrDefault(tag, new ArrayList<>())
.addAll(biomeList.stream()
@@ -46,10 +46,10 @@ public final class TagUtil {
.map(Holder::direct)
.toList());
});
registry.resetTags();
registry.bindTags(ImmutableMap.copyOf(collect));
if(logger.isDebugEnabled()) {
registry.holders()
.map(e -> e.key().location() + ": " +