This commit is contained in:
repixelatedmc 2024-08-19 20:33:26 +02:00
parent 3f66634e5f
commit 8a753b42f8
3 changed files with 35 additions and 2 deletions

View File

@ -127,6 +127,10 @@ public interface INMSBinding {
boolean registerBiome(String dimensionId, IrisBiomeCustom biome, boolean replace); 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); boolean dumpRegistry(File... folders);
void injectBukkit(); void injectBukkit();

View File

@ -22,6 +22,7 @@ import com.volmit.iris.Iris;
import com.volmit.iris.core.gui.components.RenderType; import com.volmit.iris.core.gui.components.RenderType;
import com.volmit.iris.core.loader.IrisData; import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.loader.IrisRegistrant; 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.IrisComplex;
import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine; import com.volmit.iris.engine.framework.Engine;
@ -195,8 +196,13 @@ public class IrisBiome extends IrisRegistrant implements IRare {
} }
public KList<IrisBiomeCustom> getCustomDerivitives() { public KList<IrisBiomeCustom> getCustomDerivitives() {
if (customDerivitives == null || customDerivitives.isEmpty()) if (customDerivitives == null || customDerivitives.isEmpty()) {
setCustomDerivitives(new KList<>(new IrisBiomeCustom().setId(getLoadKey().replaceAll("\\s", "").replaceAll("[^a-z0-9/._-]", "")))); 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; return customDerivitives;
} }

View File

@ -64,6 +64,7 @@ import net.minecraft.world.RandomSequences;
import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelHeightAccessor; 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.ProtoChunk;
import net.minecraft.world.level.chunk.UpgradeData; import net.minecraft.world.level.chunk.UpgradeData;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
@ -493,6 +494,7 @@ public class NMSBinding implements INMSBinding {
@Override @Override
public int countCustomBiomes() { public int countCustomBiomes() {
// todo inaccurate shit
AtomicInteger a = new AtomicInteger(0); AtomicInteger a = new AtomicInteger(0);
getCustomBiomeRegistry().keySet().forEach((i) -> { getCustomBiomeRegistry().keySet().forEach((i) -> {
@ -673,6 +675,27 @@ public class NMSBinding implements INMSBinding {
return register(Registries.BIOME, new ResourceLocation(dimensionId, biome.getId()), biomeBase, replace); 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 <T> Optional<T> decode(Codec<T> codec, String json) { private <T> Optional<T> decode(Codec<T> codec, String json) {
return codec.decode(JsonOps.INSTANCE, GsonHelper.parse(json)).get().left().map(Pair::getFirst); return codec.decode(JsonOps.INSTANCE, GsonHelper.parse(json)).get().left().map(Pair::getFirst);
} }