Reduced updates

This commit is contained in:
cyberpwn 2021-09-12 10:42:36 -04:00
parent 2191b539e3
commit c4fe14bd45
11 changed files with 117 additions and 12 deletions

View File

@ -23,6 +23,7 @@ import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.service.ObjectSVC;
import com.volmit.iris.core.service.StudioSVC;
import com.volmit.iris.core.service.WandSVC;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.IObjectPlacer;
import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisObject;
@ -138,6 +139,11 @@ public class CommandObject implements DecreeExecutor {
tile.toBukkitTry(state);
state.update();
}
@Override
public Engine getEngine() {
return null;
}
};
}

View File

@ -138,6 +138,7 @@ public class TreeSVC implements IrisService {
List<BlockState> blockStateList = new KList<>();
KMap<Location, BlockData> dataCache = new KMap<>();
// TODO: REAL CLASSES!!!!
IObjectPlacer placer = new IObjectPlacer() {
@Override
@ -198,6 +199,11 @@ public class TreeSVC implements IrisService {
public void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile) {
}
@Override
public Engine getEngine() {
return engine;
}
};
object.place(

View File

@ -95,7 +95,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
public IrisWorldManager(Engine engine) {
super(engine);
chunkUpdater = new ChronoLatch(1000);
chunkUpdater = new ChronoLatch(3000);
cln = new ChronoLatch(60000);
cl = new ChronoLatch(3000);
ecl = new ChronoLatch(250);
@ -115,6 +115,11 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
if (getEngine().getWorld().hasRealWorld()) {
if(getEngine().getWorld().getPlayers().isEmpty())
{
return 5000;
}
if (chunkUpdater.flip()) {
updateChunks();
}
@ -156,7 +161,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
onAsyncTick();
}
return 250;
return 700;
}
};
looper.setPriority(Thread.MIN_PRIORITY);
@ -447,9 +452,6 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}));
energy += 0.3;
fixEnergy();
if (!getMantle().hasFlag(e.getX(), e.getZ(), MantleFlag.UPDATE)) {
J.a(() -> getEngine().updateChunk(e), 20);
}
}
private void spawn(IrisPosition block, IrisSpawner spawner, boolean initial) {

View File

@ -19,6 +19,7 @@
package com.volmit.iris.engine.framework.placer;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.IObjectPlacer;
import com.volmit.iris.engine.object.IrisObjectPlacement;
import com.volmit.iris.engine.object.TileData;
@ -30,11 +31,13 @@ public class HeightmapObjectPlacer implements IObjectPlacer {
private final long s;
private final IrisObjectPlacement config;
private final IObjectPlacer oplacer;
private final Engine engine;
public HeightmapObjectPlacer(RNG rng, int x, int yv, int z, IrisObjectPlacement config, IObjectPlacer oplacer) {
public HeightmapObjectPlacer(Engine engine, RNG rng, int x, int yv, int z, IrisObjectPlacement config, IObjectPlacer oplacer) {
s = rng.nextLong() + yv + z - x;
this.config = config;
this.oplacer = oplacer;
this.engine = engine;
}
public int getHighest(int param1Int1, int param1Int2, IrisData data) {
@ -81,4 +84,9 @@ public class HeightmapObjectPlacer implements IObjectPlacer {
public void setTile(int param1Int1, int param1Int2, int param1Int3, TileData<? extends TileState> param1TileData) {
oplacer.setTile(param1Int1, param1Int2, param1Int3, param1TileData);
}
@Override
public Engine getEngine() {
return null;
}
}

View File

@ -33,6 +33,7 @@ import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.TileData;
import com.volmit.iris.engine.platform.PlatformChunkGenerator;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.context.IrisContext;
import com.volmit.iris.util.math.AxisAlignedBB;
import com.volmit.iris.util.math.BlockPosition;
import com.volmit.iris.util.math.RNG;
@ -239,6 +240,11 @@ public class PlannedPiece {
tile.toBukkitTry(state);
state.update();
}
@Override
public Engine getEngine() {
return IrisContext.get().getEngine();
}
}, piece.getPlacementOptions(), rng, getData());
}
}

View File

@ -28,6 +28,7 @@ import com.volmit.iris.engine.object.IrisDimension;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.TileData;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.context.IrisContext;
import com.volmit.iris.util.data.B;
import com.volmit.iris.util.documentation.BlockCoordinates;
import com.volmit.iris.util.documentation.ChunkCoordinates;
@ -203,6 +204,7 @@ public interface EngineMantle extends IObjectPlacer {
int xx = i + x;
int zz = j + z;
burst.queue(() -> {
IrisContext.touch(getEngine().getContext());
MantleChunk mc = getMantle().getChunk(xx, zz);
for (MantleComponent k : getComponents()) {

View File

@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableList;
import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.data.cache.Cache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.object.IObjectPlacer;
import com.volmit.iris.engine.object.IrisPosition;
import com.volmit.iris.engine.object.TileData;
@ -201,6 +202,11 @@ public class MantleWriter implements IObjectPlacer {
getEngineMantle().setTile(xx, yy, zz, tile);
}
@Override
public Engine getEngine() {
return getEngineMantle().getEngine();
}
/**
* Set a sphere into the mantle
*

View File

@ -19,6 +19,7 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.framework.Engine;
import org.bukkit.block.TileState;
import org.bukkit.block.data.BlockData;
@ -44,4 +45,6 @@ public interface IObjectPlacer {
boolean isDebugSmartBore();
void setTile(int xx, int yy, int zz, TileData<? extends TileState> tile);
Engine getEngine();
}

View File

@ -22,9 +22,11 @@ import com.volmit.iris.Iris;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.core.loader.IrisRegistrant;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.framework.Engine;
import com.volmit.iris.engine.framework.placer.HeightmapObjectPlacer;
import com.volmit.iris.util.collection.KList;
import com.volmit.iris.util.collection.KMap;
import com.volmit.iris.util.context.IrisContext;
import com.volmit.iris.util.data.B;
import com.volmit.iris.util.interpolation.IrisInterpolation;
import com.volmit.iris.util.json.JSONObject;
@ -32,6 +34,7 @@ import com.volmit.iris.util.math.AxisAlignedBB;
import com.volmit.iris.util.math.BlockPosition;
import com.volmit.iris.util.math.Position2;
import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.matter.MatterMarker;
import com.volmit.iris.util.plugin.VolmitSender;
import com.volmit.iris.util.scheduling.IrisLock;
import lombok.EqualsAndHashCode;
@ -484,7 +487,7 @@ public class IrisObject extends IrisRegistrant {
}
public int place(int x, int yv, int z, IObjectPlacer oplacer, IrisObjectPlacement config, RNG rng, Consumer<BlockPosition> listener, CarveResult c, IrisData rdata) {
IObjectPlacer placer = (config.getHeightmap() != null) ? new HeightmapObjectPlacer(rng, x, yv, z, config, oplacer) : oplacer;
IObjectPlacer placer = (config.getHeightmap() != null) ? new HeightmapObjectPlacer(IrisContext.get().getEngine(), rng, x, yv, z, config, oplacer) : oplacer;
if (config.isSmartBore()) {
ensureSmartBored(placer.isDebugSmartBore());
@ -634,7 +637,36 @@ public class IrisObject extends IrisRegistrant {
int lowest = Integer.MAX_VALUE;
y += yrand;
readLock.lock();
KMap<BlockVector, String> markers = null;
try {
if(config.getMarkers().isNotEmpty() && placer.getEngine() != null)
{
markers = new KMap<>();
for(IrisObjectMarker j : config.getMarkers())
{
int max = j.getMaximumMarkers();
for(BlockVector i : getBlocks().k().shuffle())
{
BlockData data = getBlocks().get(i);
for (BlockData k : j.getMark(rdata)) {
if (j.isExact() ? k.matches(data) : k.getMaterial().equals(data.getMaterial())) {
boolean a = !blocks.containsKey(new BlockVector(i.clone().add(new BlockVector(0, 1, 0))));
boolean fff = !blocks.containsKey(new BlockVector(i.clone().add(new BlockVector(0, 2, 0))));
if((j.isEmptyAbove() && a && fff) || !j.isEmptyAbove())
{
markers.put(i, j.getMarker());
}
}
}
}
}
}
for (BlockVector g : getBlocks().keySet()) {
BlockData d;
TileData<? extends TileState> tile = null;
@ -720,6 +752,11 @@ public class IrisObject extends IrisRegistrant {
listener.accept(new BlockPosition(xx, yy, zz));
}
if(markers != null && markers.containsKey(g))
{
placer.getEngine().getMantle().getMantle().set(xx,yy,zz,new MatterMarker(markers.get(g)));
}
if (!data.getMaterial().equals(Material.AIR) && !data.getMaterial().equals(Material.CAVE_AIR)) {
placer.set(xx, yy, zz, data);

View File

@ -18,10 +18,13 @@
package com.volmit.iris.engine.object;
import com.volmit.iris.core.loader.IrisData;
import com.volmit.iris.engine.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc;
import com.volmit.iris.engine.object.annotations.MaxNumber;
import com.volmit.iris.engine.object.annotations.MinNumber;
import com.volmit.iris.engine.object.annotations.RegistryListResource;
import com.volmit.iris.engine.object.annotations.Required;
import com.volmit.iris.engine.object.annotations.Snippet;
import com.volmit.iris.util.collection.KList;
@ -29,6 +32,7 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.bukkit.block.data.BlockData;
@Snippet("object-marker")
@Accessors(chain = true)
@ -47,11 +51,33 @@ public class IrisObjectMarker {
@Desc("The maximum amount of markers to place. Use these sparingly!")
private int maximumMarkers = 8;
@MinNumber(0.01)
@MaxNumber(1)
@Desc("The percentage of blocks in this object to check.")
private double checkRatio = 0.33;
@Desc("If true, markers will only be placed here if there is 2 air blocks above it.")
private boolean emptyAbove = true;
@Desc("If true, markers will only be placed if the block matches the mark list perfectly.")
private boolean exact = false;
@Required
@RegistryListResource(IrisMarker.class)
@Desc("The marker to add")
private String marker;
private final transient AtomicCache<KList<BlockData>> findData = new AtomicCache<>();
public KList<BlockData> getMark(IrisData rdata) {
return findData.aquire(() ->
{
KList<BlockData> b = new KList<>();
for (IrisBlockData i : mark) {
BlockData bx = i.getBlockData(rdata);
if (bx != null) {
b.add(bx);
}
}
return b;
});
}
}

View File

@ -82,6 +82,9 @@ public class IrisObjectPlacement {
@MinNumber(0)
@Desc("When bore is enabled, expand max-y of the cuboid it removes")
private int boreExtendMaxY = 0;
@ArrayType(min = 1,type = IrisObjectMarker.class)
@Desc("Add markers to blocks in this object")
private KList<IrisObjectMarker> markers = new KList<>();
@MaxNumber(64)
@MinNumber(-1)
@Desc("When bore is enabled, lower min-y of the cuboid it removes")