From 8a753b42f8df6d359b2d66060c60ceaf08f7ea25 Mon Sep 17 00:00:00 2001 From: repixelatedmc Date: Mon, 19 Aug 2024 20:33:26 +0200 Subject: [PATCH] weeee --- .../com/volmit/iris/core/nms/INMSBinding.java | 4 ++++ .../volmit/iris/engine/object/IrisBiome.java | 10 ++++++-- .../iris/core/nms/v1_20_R3/NMSBinding.java | 23 +++++++++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java b/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java index c5802717d..848282e52 100644 --- a/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java +++ b/core/src/main/java/com/volmit/iris/core/nms/INMSBinding.java @@ -127,6 +127,10 @@ public interface INMSBinding { boolean registerBiome(String dimensionId, IrisBiomeCustom biome, boolean replace); + default boolean registerReplacement(String dimensionId, String key, Biome biome) { + throw new IllegalStateException("Unsupported registerReplacement"); + } + boolean dumpRegistry(File... folders); void injectBukkit(); diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisBiome.java b/core/src/main/java/com/volmit/iris/engine/object/IrisBiome.java index 63181e0ae..3f4958052 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisBiome.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisBiome.java @@ -22,6 +22,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.gui.components.RenderType; import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisRegistrant; +import com.volmit.iris.core.nms.INMS; import com.volmit.iris.engine.IrisComplex; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.framework.Engine; @@ -195,8 +196,13 @@ public class IrisBiome extends IrisRegistrant implements IRare { } public KList getCustomDerivitives() { - if (customDerivitives == null || customDerivitives.isEmpty()) - setCustomDerivitives(new KList<>(new IrisBiomeCustom().setId(getLoadKey().replaceAll("\\s", "").replaceAll("[^a-z0-9/._-]", "")))); + if (customDerivitives == null || customDerivitives.isEmpty()) { + String biomeID = getLoadKey().replaceAll("\\s", "").replaceAll("[^a-z0-9/._-]", ""); + setCustomDerivitives(new KList<>(new IrisBiomeCustom().setId(biomeID))); + String dimID = getLoader().getEngine().getDimension().getLoadKey(); + String x = getLoader().getEngine().getDimension().getLoadKey() + ":" + biomeID; + INMS.get().registerReplacement(dimID, x, this.getDerivative()); + } return customDerivitives; } diff --git a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java index edbd353b6..31881880e 100644 --- a/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java +++ b/nms/v1_20_R3/src/main/java/com/volmit/iris/core/nms/v1_20_R3/NMSBinding.java @@ -64,6 +64,7 @@ import net.minecraft.world.RandomSequences; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelHeightAccessor; +import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraft.world.level.chunk.ProtoChunk; import net.minecraft.world.level.chunk.UpgradeData; import net.minecraft.world.level.dimension.DimensionType; @@ -493,6 +494,7 @@ public class NMSBinding implements INMSBinding { @Override public int countCustomBiomes() { + // todo inaccurate shit AtomicInteger a = new AtomicInteger(0); getCustomBiomeRegistry().keySet().forEach((i) -> { @@ -673,6 +675,27 @@ public class NMSBinding implements INMSBinding { return register(Registries.BIOME, new ResourceLocation(dimensionId, biome.getId()), biomeBase, replace); } + @Override + public boolean registerReplacement(String dimensionId, String key, Biome biome) { + var registry = getCustomBiomeRegistry(); + var location = new ResourceLocation(dimensionId, key); + if (registry.containsKey(location)) return false; + + var base = registry.get(new ResourceLocation(biome.getKey().toString())); + if (base == null) throw new IllegalArgumentException("Base biome not found: " + biome.getKey()); + var clone = new net.minecraft.world.level.biome.Biome.BiomeBuilder() + .hasPrecipitation(base.climateSettings.hasPrecipitation()) + .temperature(base.climateSettings.temperature()) + .temperatureAdjustment(base.climateSettings.temperatureModifier()) + .downfall(base.climateSettings.downfall()) + .generationSettings(base.getGenerationSettings()) + .specialEffects(base.getSpecialEffects()) + .mobSpawnSettings(MobSpawnSettings.EMPTY) + .build(); + + return register(Registries.BIOME, location, clone, false); + } + private Optional decode(Codec codec, String json) { return codec.decode(JsonOps.INSTANCE, GsonHelper.parse(json)).get().left().map(Pair::getFirst); }