mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-12-19 15:09:18 +00:00
add experimental setting to force place custom blocks as early as possible
This commit is contained in:
@@ -244,6 +244,7 @@ public class IrisSettings {
|
|||||||
public boolean preventLeafDecay = true;
|
public boolean preventLeafDecay = true;
|
||||||
public boolean useMulticore = false;
|
public boolean useMulticore = false;
|
||||||
public boolean offsetNoiseTypes = false;
|
public boolean offsetNoiseTypes = false;
|
||||||
|
public boolean earlyCustomBlocks = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|||||||
@@ -20,7 +20,9 @@ package com.volmit.iris.engine;
|
|||||||
|
|
||||||
import com.volmit.iris.Iris;
|
import com.volmit.iris.Iris;
|
||||||
import com.volmit.iris.core.IrisSettings;
|
import com.volmit.iris.core.IrisSettings;
|
||||||
|
import com.volmit.iris.core.link.Identifier;
|
||||||
import com.volmit.iris.core.loader.IrisData;
|
import com.volmit.iris.core.loader.IrisData;
|
||||||
|
import com.volmit.iris.core.service.ExternalDataSVC;
|
||||||
import com.volmit.iris.engine.framework.Engine;
|
import com.volmit.iris.engine.framework.Engine;
|
||||||
import com.volmit.iris.engine.framework.EngineAssignedWorldManager;
|
import com.volmit.iris.engine.framework.EngineAssignedWorldManager;
|
||||||
import com.volmit.iris.engine.object.*;
|
import com.volmit.iris.engine.object.*;
|
||||||
@@ -424,18 +426,35 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ref = new WeakReference<>(e.getWorld());
|
var ref = new WeakReference<>(e.getWorld());
|
||||||
int x = e.getX(), z = e.getZ();
|
int cX = e.getX(), cZ = e.getZ();
|
||||||
J.s(() -> {
|
J.s(() -> {
|
||||||
World world = ref.get();
|
World world = ref.get();
|
||||||
if (world == null || !world.isChunkLoaded(x, z))
|
if (world == null || !world.isChunkLoaded(cX, cZ))
|
||||||
return;
|
return;
|
||||||
energy += 0.3;
|
energy += 0.3;
|
||||||
fixEnergy();
|
fixEnergy();
|
||||||
getEngine().cleanupMantleChunk(x, z);
|
getEngine().cleanupMantleChunk(cX, cZ);
|
||||||
}, IrisSettings.get().getPerformance().mantleCleanupDelay);
|
}, IrisSettings.get().getPerformance().mantleCleanupDelay);
|
||||||
|
|
||||||
if (generated) {
|
if (generated) {
|
||||||
//INMS.get().injectBiomesFromMantle(e, getMantle());
|
//INMS.get().injectBiomesFromMantle(e, getMantle());
|
||||||
|
|
||||||
|
if (!IrisSettings.get().getGenerator().earlyCustomBlocks) return;
|
||||||
|
e.addPluginChunkTicket(Iris.instance);
|
||||||
|
J.s(() -> {
|
||||||
|
var chunk = getMantle().getChunk(e).use();
|
||||||
|
int minY = getTarget().getWorld().minHeight();
|
||||||
|
try {
|
||||||
|
chunk.raiseFlagUnchecked(MantleFlag.CUSTOM, () -> {
|
||||||
|
chunk.iterate(Identifier.class, (x, y, z, v) -> {
|
||||||
|
Iris.service(ExternalDataSVC.class).processUpdate(getEngine(), e.getBlock(x & 15, y + minY, z & 15), v);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
chunk.release();
|
||||||
|
e.removePluginChunkTicket(Iris.instance);
|
||||||
|
}
|
||||||
|
}, RNG.r.i(20, 60));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -296,20 +296,20 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat
|
|||||||
try {
|
try {
|
||||||
Semaphore semaphore = new Semaphore(3);
|
Semaphore semaphore = new Semaphore(3);
|
||||||
chunk.raiseFlag(MantleFlag.ETCHED, () -> {
|
chunk.raiseFlag(MantleFlag.ETCHED, () -> {
|
||||||
chunk.raiseFlag(MantleFlag.TILE, run(semaphore, () -> {
|
chunk.raiseFlagUnchecked(MantleFlag.TILE, run(semaphore, () -> {
|
||||||
chunk.iterate(TileWrapper.class, (x, y, z, v) -> {
|
chunk.iterate(TileWrapper.class, (x, y, z, v) -> {
|
||||||
Block block = c.getBlock(x & 15, y + getWorld().minHeight(), z & 15);
|
Block block = c.getBlock(x & 15, y + getWorld().minHeight(), z & 15);
|
||||||
if (!TileData.setTileState(block, v.getData()))
|
if (!TileData.setTileState(block, v.getData()))
|
||||||
Iris.warn("Failed to set tile entity data at [%d %d %d | %s] for tile %s!", block.getX(), block.getY(), block.getZ(), block.getType().getKey(), v.getData().getMaterial().getKey());
|
Iris.warn("Failed to set tile entity data at [%d %d %d | %s] for tile %s!", block.getX(), block.getY(), block.getZ(), block.getType().getKey(), v.getData().getMaterial().getKey());
|
||||||
});
|
});
|
||||||
}, 0));
|
}, 0));
|
||||||
chunk.raiseFlag(MantleFlag.CUSTOM, run(semaphore, () -> {
|
chunk.raiseFlagUnchecked(MantleFlag.CUSTOM, run(semaphore, () -> {
|
||||||
chunk.iterate(Identifier.class, (x, y, z, v) -> {
|
chunk.iterate(Identifier.class, (x, y, z, v) -> {
|
||||||
Iris.service(ExternalDataSVC.class).processUpdate(this, c.getBlock(x & 15, y + getWorld().minHeight(), z & 15), v);
|
Iris.service(ExternalDataSVC.class).processUpdate(this, c.getBlock(x & 15, y + getWorld().minHeight(), z & 15), v);
|
||||||
});
|
});
|
||||||
}, 0));
|
}, 0));
|
||||||
|
|
||||||
chunk.raiseFlag(MantleFlag.UPDATE, run(semaphore, () -> {
|
chunk.raiseFlagUnchecked(MantleFlag.UPDATE, run(semaphore, () -> {
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
int[][] grid = new int[16][16];
|
int[][] grid = new int[16][16];
|
||||||
for (int x = 0; x < 16; x++) {
|
for (int x = 0; x < 16; x++) {
|
||||||
|
|||||||
@@ -181,6 +181,11 @@ public class MantleChunk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void raiseFlagUnchecked(MantleFlag flag, Runnable r) {
|
||||||
|
if (closed.get()) throw new IllegalStateException("Chunk is closed!");
|
||||||
|
if (flags.compareAndSet(flag.ordinal(), false, true)) r.run();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isFlagged(MantleFlag flag) {
|
public boolean isFlagged(MantleFlag flag) {
|
||||||
return flags.get(flag.ordinal());
|
return flags.get(flag.ordinal());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user