9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-26 10:39:07 +00:00
This commit is contained in:
cyberpwn
2022-09-14 13:30:39 -04:00
parent 2ad9a525bd
commit 60843b3bb9
5 changed files with 49 additions and 27 deletions

View File

@@ -58,6 +58,8 @@ public interface INMSBinding {
Object getCustomBiomeBaseFor(String mckey);
Object getCustomBiomeBaseHolderFor(String mckey);
int getBiomeBaseIdForKey(String key);
String getKeyForBiomeBase(Object biomeBase);
Object getBiomeBase(World world, Biome biome);

View File

@@ -22,7 +22,6 @@ package com.volmit.iris.core.nms.v19_2;
import com.volmit.iris.Iris;
import com.volmit.iris.core.nms.INMSBinding;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.IrisBiome;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.hunk.Hunk;
import com.volmit.iris.util.mantle.Mantle;
@@ -196,7 +195,7 @@ public class NMSBinding19_2 implements INMSBinding {
@Override
public int getTrueBiomeBaseId(Object biomeBase) {
return getCustomBiomeRegistry().getId((net.minecraft.world.level.biome.Biome) biomeBase);
return getCustomBiomeRegistry().getId(((Holder<net.minecraft.world.level.biome.Biome>) biomeBase).value());
}
@Override
@@ -218,6 +217,10 @@ public class NMSBinding19_2 implements INMSBinding {
return getCustomBiomeRegistry().getHolder(getTrueBiomeBaseId(getCustomBiomeRegistry().get(new ResourceLocation(mckey)))).get();
}
public int getBiomeBaseIdForKey(String key) {
return getCustomBiomeRegistry().getId(getCustomBiomeRegistry().get(new ResourceLocation(key)));
}
@Override
public String getKeyForBiomeBase(Object biomeBase) {
return getCustomBiomeRegistry().getKey((net.minecraft.world.level.biome.Biome) biomeBase).getPath(); // something, not something:something
@@ -404,19 +407,23 @@ public class NMSBinding19_2 implements INMSBinding {
@Override
public void injectBiomesFromMantle(Chunk e, Mantle mantle) {
LevelChunk chunk = ((CraftChunk)e).getHandle();
AtomicInteger c = new AtomicInteger();
AtomicInteger r = new AtomicInteger();
mantle.iterateChunk(e.getX(), e.getZ(), MatterBiomeInject.class, (x,y,z,b) -> {
if(b != null) {
if(b.isCustom()) {
chunk.setBiome(x, y, z, (Holder<net.minecraft.world.level.biome.Biome>) getBiomeBaseFromId(b.getBiomeId()));
c.getAndIncrement();
}
else {
chunk.setBiome(x, y, z, (Holder<net.minecraft.world.level.biome.Biome>) getBiomeBase(e.getWorld(), b.getBiome()));
r.getAndIncrement();
}
}
});
chunk.setUnsaved(true);
Iris.info("Injected " + c.get() + " custom biomes and " + r.get() + " vanilla biomes into chunk " + e.getX() + "," + e.getZ());
}
private static Object getFor(Class<?> type, Object source) {

View File

@@ -124,6 +124,11 @@ public class NMSBinding1X implements INMSBinding {
return null;
}
@Override
public int getBiomeBaseIdForKey(String key) {
return 0;
}
@Override
public String getKeyForBiomeBase(Object biomeBase) {
return null;

View File

@@ -479,12 +479,8 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
fixEnergy();
getEngine().cleanupMantleChunk(e.getX(), e.getZ());
if(generated && !injectBiomes.isEmpty()) {
Position2 p = new Position2(e.getX(), e.getZ());
if(injectBiomes.remove(p)) {
INMS.get().injectBiomesFromMantle(e, getMantle());
}
if(generated) {
INMS.get().injectBiomesFromMantle(e, getMantle());
}
}

View File

@@ -52,30 +52,42 @@ public class IrisBiomeActuator extends EngineAssignedActuator<Biome> {
@BlockCoordinates
@Override
public void onActuate(int x, int z, Hunk<Biome> h, boolean multicore, ChunkContext context) {
PrecisionStopwatch p = PrecisionStopwatch.start();
try
{
PrecisionStopwatch p = PrecisionStopwatch.start();
for(int xf = 0; xf < h.getWidth(); xf++) {
IrisBiome ib;
for(int zf = 0; zf < h.getDepth(); zf++) {
ib = context.getBiome().get(xf, zf);
int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData()));
MatterBiomeInject matter = null;
int m = 0;
for(int xf = 0; xf < h.getWidth(); xf++) {
IrisBiome ib;
for(int zf = 0; zf < h.getDepth(); zf++) {
ib = context.getBiome().get(xf, zf);
int maxHeight = (int) (getComplex().getFluidHeight() + ib.getMaxWithObjectHeight(getData()));
MatterBiomeInject matter = null;
if(ib.isCustom()) {
IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z);
Object biomeBase = INMS.get().getCustomBiomeBaseHolderFor(getDimension().getLoadKey() + ":" + custom.getId());
matter = BiomeInjectMatter.get(INMS.get().getTrueBiomeBaseId(biomeBase));
} else {
Biome v = ib.getSkyBiome(rng, x, 0, z);
matter = BiomeInjectMatter.get(v);
}
if(ib.isCustom()) {
IrisBiomeCustom custom = ib.getCustomBiome(rng, x, 0, z);
matter = BiomeInjectMatter.get(INMS.get().getBiomeBaseIdForKey(getDimension().getLoadKey() + ":" + custom.getId()));
} else {
Biome v = ib.getSkyBiome(rng, x, 0, z);
matter = BiomeInjectMatter.get(v);
}
for(int i = 0; i < maxHeight; i++) {
getEngine().getMantle().getMantle().set(x, i, z, matter);
m++;
}
for(int i = 0; i < maxHeight; i++) {
getEngine().getMantle().getMantle().set(x, i, z, matter);
}
}
getEngine().getMetrics().getBiome().put(p.getMilliseconds());
Iris.info("Biome Actuator: " + p.getMilliseconds() + "ms");
Iris.info("Mantle: " + m + " blocks");
}
getEngine().getMetrics().getBiome().put(p.getMilliseconds());
catch(Throwable e)
{
e.printStackTrace();
}
}
}