Engine Tier 3

This commit is contained in:
Brian Neumann-Fopiano committed 2026-06-12 02:44:05 -04:00
1 parent 1a834ed6f6
commit 6c5e991051
17 files changed
+74 -101

No files matched your search

-12
View File
@@ -97,13 +97,9 @@ art/arcane/iris/core/tools/IrisWorldCreator.java
art/arcane/iris/core/tools/TreePlausibilizer.java art/arcane/iris/core/tools/TreePlausibilizer.java
art/arcane/iris/core/wand/WandSelection.java art/arcane/iris/core/wand/WandSelection.java
art/arcane/iris/engine/actuator/IrisBiomeActuator.java art/arcane/iris/engine/actuator/IrisBiomeActuator.java
art/arcane/iris/engine/actuator/IrisDecorantActuator.java
art/arcane/iris/engine/actuator/IrisTerrainNormalActuator.java
art/arcane/iris/engine/data/cache/Cache.java
art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java
art/arcane/iris/engine/data/chunk/TerrainChunk.java art/arcane/iris/engine/data/chunk/TerrainChunk.java
art/arcane/iris/engine/decorator/DecoratorCore.java art/arcane/iris/engine/decorator/DecoratorCore.java
art/arcane/iris/engine/decorator/IrisCeilingDecorator.java
art/arcane/iris/engine/framework/BlockUpdater.java art/arcane/iris/engine/framework/BlockUpdater.java
art/arcane/iris/engine/framework/Engine.java art/arcane/iris/engine/framework/Engine.java
art/arcane/iris/engine/framework/EngineAssignedWorldManager.java art/arcane/iris/engine/framework/EngineAssignedWorldManager.java
@@ -111,15 +107,12 @@ art/arcane/iris/engine/framework/EnginePlayer.java
art/arcane/iris/engine/framework/EngineWorldManager.java art/arcane/iris/engine/framework/EngineWorldManager.java
art/arcane/iris/engine/framework/LootProvider.java art/arcane/iris/engine/framework/LootProvider.java
art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java
art/arcane/iris/engine/IrisComplex.java
art/arcane/iris/engine/IrisEngineEffects.java art/arcane/iris/engine/IrisEngineEffects.java
art/arcane/iris/engine/IrisWorldManager.java art/arcane/iris/engine/IrisWorldManager.java
art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java
art/arcane/iris/engine/mantle/components/MantleObjectComponent.java art/arcane/iris/engine/mantle/components/MantleObjectComponent.java
art/arcane/iris/engine/mantle/EngineMantle.java art/arcane/iris/engine/mantle/EngineMantle.java
art/arcane/iris/engine/mantle/MantleWriter.java art/arcane/iris/engine/mantle/MantleWriter.java
art/arcane/iris/engine/mode/ModeOverworld.java
art/arcane/iris/engine/modifier/IrisCarveModifier.java
art/arcane/iris/engine/modifier/IrisDepositModifier.java art/arcane/iris/engine/modifier/IrisDepositModifier.java
art/arcane/iris/engine/modifier/IrisFloatingChildBiomeModifier.java art/arcane/iris/engine/modifier/IrisFloatingChildBiomeModifier.java
art/arcane/iris/engine/modifier/IrisPerfectionModifier.java art/arcane/iris/engine/modifier/IrisPerfectionModifier.java
@@ -128,7 +121,6 @@ art/arcane/iris/engine/object/annotations/functions/LootTableKeyFunction.java
art/arcane/iris/engine/object/BlockDataMergeSupport.java art/arcane/iris/engine/object/BlockDataMergeSupport.java
art/arcane/iris/engine/object/coral/CoralGenerator.java art/arcane/iris/engine/object/coral/CoralGenerator.java
art/arcane/iris/engine/object/crystal/CrystalGenerator.java art/arcane/iris/engine/object/crystal/CrystalGenerator.java
art/arcane/iris/engine/object/FloatingObjectFootprint.java
art/arcane/iris/engine/object/formation/FormationBlockResolver.java art/arcane/iris/engine/object/formation/FormationBlockResolver.java
art/arcane/iris/engine/object/formation/FormationGenerator.java art/arcane/iris/engine/object/formation/FormationGenerator.java
art/arcane/iris/engine/object/fungi/FungusGenerator.java art/arcane/iris/engine/object/fungi/FungusGenerator.java
@@ -141,8 +133,6 @@ art/arcane/iris/engine/object/IrisBiomeCustomParticle.java
art/arcane/iris/engine/object/IrisBiomeCustomSpawn.java art/arcane/iris/engine/object/IrisBiomeCustomSpawn.java
art/arcane/iris/engine/object/IrisBlockData.java art/arcane/iris/engine/object/IrisBlockData.java
art/arcane/iris/engine/object/IrisBlockDrops.java art/arcane/iris/engine/object/IrisBlockDrops.java
art/arcane/iris/engine/object/IrisCaveShape.java
art/arcane/iris/engine/object/IrisColor.java
art/arcane/iris/engine/object/IrisCommandRegistry.java art/arcane/iris/engine/object/IrisCommandRegistry.java
art/arcane/iris/engine/object/IrisCompat.java art/arcane/iris/engine/object/IrisCompat.java
art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java
@@ -157,7 +147,6 @@ art/arcane/iris/engine/object/IrisEntitySpawn.java
art/arcane/iris/engine/object/IrisLoot.java art/arcane/iris/engine/object/IrisLoot.java
art/arcane/iris/engine/object/IrisLootTable.java art/arcane/iris/engine/object/IrisLootTable.java
art/arcane/iris/engine/object/IrisObject.java art/arcane/iris/engine/object/IrisObject.java
art/arcane/iris/engine/object/IrisObjectLoot.java
art/arcane/iris/engine/object/IrisObjectPlacement.java art/arcane/iris/engine/object/IrisObjectPlacement.java
art/arcane/iris/engine/object/IrisObjectRotation.java art/arcane/iris/engine/object/IrisObjectRotation.java
art/arcane/iris/engine/object/IrisObjectTranslate.java art/arcane/iris/engine/object/IrisObjectTranslate.java
@@ -181,7 +170,6 @@ art/arcane/iris/engine/object/tree/TreePlausibility.java
art/arcane/iris/engine/platform/BukkitChunkGenerator.java art/arcane/iris/engine/platform/BukkitChunkGenerator.java
art/arcane/iris/engine/platform/DummyBiomeProvider.java art/arcane/iris/engine/platform/DummyBiomeProvider.java
art/arcane/iris/engine/platform/DummyChunkGenerator.java art/arcane/iris/engine/platform/DummyChunkGenerator.java
art/arcane/iris/engine/platform/studio/generators/BiomeBuffetGenerator.java
art/arcane/iris/engine/platform/studio/generators/ObjectStudioGenerator.java art/arcane/iris/engine/platform/studio/generators/ObjectStudioGenerator.java
art/arcane/iris/Iris.java art/arcane/iris/Iris.java
art/arcane/iris/platform/bukkit/BukkitBiome.java art/arcane/iris/platform/bukkit/BukkitBiome.java
@@ -39,8 +39,6 @@ import art.arcane.iris.util.project.stream.interpolation.Interpolated;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import java.io.File; import java.io.File;
import java.util.*; import java.util.*;
@@ -49,7 +47,6 @@ import java.util.*;
@EqualsAndHashCode(exclude = "data") @EqualsAndHashCode(exclude = "data")
@ToString(exclude = "data") @ToString(exclude = "data")
public class IrisComplex implements DataProvider { public class IrisComplex implements DataProvider {
private static final BlockData AIR = Material.AIR.createBlockData();
private static final NoiseBounds ZERO_NOISE_BOUNDS = new NoiseBounds(0D, 0D); private static final NoiseBounds ZERO_NOISE_BOUNDS = new NoiseBounds(0D, 0D);
private static final int GRID_BOUNDS_CACHE_SIZE = 8192; private static final int GRID_BOUNDS_CACHE_SIZE = 8192;
private static final int HEIGHT_BOUNDS_GRID = 4; private static final int HEIGHT_BOUNDS_GRID = 4;
@@ -692,7 +692,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
} }
int cX = e.getX(), cZ = e.getZ(); int cX = e.getX(), cZ = e.getZ();
Long key = Cache.key(e); Long key = Cache.key(cX, cZ);
cleanup.put(key, cleanupService.schedule(() -> { cleanup.put(key, cleanupService.schedule(() -> {
cleanup.remove(key); cleanup.remove(key);
getEngine().cleanupMantleChunk(cX, cZ); getEngine().cleanupMantleChunk(cX, cZ);
@@ -701,7 +701,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
@Override @Override
public void onChunkUnload(Chunk e) { public void onChunkUnload(Chunk e) {
final var future = cleanup.remove(Cache.key(e)); final var future = cleanup.remove(Cache.key(e.getX(), e.getZ()));
if (future != null) { if (future != null) {
future.cancel(false); future.cancel(false);
} }
@@ -31,19 +31,11 @@ import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import java.util.function.Predicate; import java.util.function.Predicate;
public class IrisDecorantActuator extends EngineAssignedActuator<PlatformBlockState> { public class IrisDecorantActuator extends EngineAssignedActuator<PlatformBlockState> {
private static final Predicate<PlatformBlockState> PREDICATE_SOLID = (s) -> { private static final Predicate<PlatformBlockState> PREDICATE_SOLID = (s) -> s != null && !B.isAirOrFluid(s);
if (s == null) {
return false;
}
BlockData b = (BlockData) s.nativeHandle();
return !b.getMaterial().isAir() && !b.getMaterial().equals(Material.WATER) && !b.getMaterial().equals(Material.LAVA);
};
private final RNG rng; private final RNG rng;
@Getter @Getter
private final EngineDecorator surfaceDecorator; private final EngineDecorator surfaceDecorator;
@@ -96,7 +88,7 @@ public class IrisDecorantActuator extends EngineAssignedActuator<PlatformBlockSt
} }
if (height < getDimension().getFluidHeight() && PREDICATE_SOLID.test(output.get(i, height, j)) if (height < getDimension().getFluidHeight() && PREDICATE_SOLID.test(output.get(i, height, j))
&& height + 1 < output.getHeight() && B.isWater(unwrap(output.get(i, height + 1, j)))) { && height + 1 < output.getHeight() && B.isWater(output.get(i, height + 1, j))) {
getSeaSurfaceDecorator().decorate(i, j, getSeaSurfaceDecorator().decorate(i, j,
realX, Math.round(i + 1), Math.round(x + i - 1), realX, Math.round(i + 1), Math.round(x + i - 1),
realZ, Math.round(z + j + 1), Math.round(z + j - 1), realZ, Math.round(z + j + 1), Math.round(z + j - 1),
@@ -142,8 +134,4 @@ public class IrisDecorantActuator extends EngineAssignedActuator<PlatformBlockSt
private boolean shouldRayDecorate() { private boolean shouldRayDecorate() {
return false; // TODO CAVES return false; // TODO CAVES
} }
private static BlockData unwrap(PlatformBlockState state) {
return state == null ? null : (BlockData) state.nativeHandle();
}
} }
@@ -33,17 +33,16 @@ import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.iris.util.project.hunk.Hunk;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.util.common.data.B;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Material;
public class IrisTerrainNormalActuator extends EngineAssignedActuator<PlatformBlockState> { public class IrisTerrainNormalActuator extends EngineAssignedActuator<PlatformBlockState> {
private static final PlatformBlockState AIR = BukkitBlockState.of(Material.AIR.createBlockData()); private static final PlatformBlockState AIR = B.getState("AIR");
private static final PlatformBlockState BEDROCK = BukkitBlockState.of(Material.BEDROCK.createBlockData()); private static final PlatformBlockState BEDROCK = B.getState("BEDROCK");
private static final PlatformBlockState LAVA = BukkitBlockState.of(Material.LAVA.createBlockData()); private static final PlatformBlockState LAVA = B.getState("LAVA");
private static final PlatformBlockState GLASS = BukkitBlockState.of(Material.GLASS.createBlockData()); private static final PlatformBlockState GLASS = B.getState("GLASS");
private static final PlatformBlockState CAVE_AIR = BukkitBlockState.of(Material.CAVE_AIR.createBlockData()); private static final PlatformBlockState CAVE_AIR = B.getState("CAVE_AIR");
@Getter @Getter
private final RNG rng; private final RNG rng;
@Getter @Getter
@@ -19,13 +19,8 @@
package art.arcane.iris.engine.data.cache; package art.arcane.iris.engine.data.cache;
import art.arcane.volmlib.util.cache.CacheKey; import art.arcane.volmlib.util.cache.CacheKey;
import org.bukkit.Chunk;
public interface Cache<V> { public interface Cache<V> {
static long key(Chunk chunk) {
return CacheKey.key(chunk);
}
static long key(int x, int z) { static long key(int x, int z) {
return CacheKey.key(x, z); return CacheKey.key(x, z);
} }
@@ -28,7 +28,6 @@ import art.arcane.iris.util.project.hunk.Hunk;
import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.BlockCoordinates;
import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.math.RNG;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import org.bukkit.block.data.BlockData;
public class IrisCeilingDecorator extends IrisEngineDecorator { public class IrisCeilingDecorator extends IrisEngineDecorator {
private final RNG partRNG; private final RNG partRNG;
@@ -53,7 +52,7 @@ public class IrisCeilingDecorator extends IrisEngineDecorator {
if (!decorator.isStacking()) { if (!decorator.isStacking()) {
if (caveSkipFluid) { if (caveSkipFluid) {
PlatformBlockState state = data.get(x, height, z); PlatformBlockState state = data.get(x, height, z);
if (B.isFluid(state == null ? null : (BlockData) state.nativeHandle())) { if (B.isFluid(state)) {
return; return;
} }
} }
@@ -185,13 +185,13 @@ public interface EngineMantle extends MatterGenerator {
} }
@ChunkCoordinates @ChunkCoordinates
default void insertMatter(int x, int z, Class<BlockData> t, Hunk<PlatformBlockState> blocks, boolean multicore) { default void insertMatter(int x, int z, Hunk<PlatformBlockState> blocks, boolean multicore) {
if (!getEngine().getDimension().isUseMantle()) { if (!getEngine().getDimension().isUseMantle()) {
return; return;
} }
UpperDimensionContext upperCtx = getEngine().getUpperContext(); UpperDimensionContext upperCtx = getEngine().getUpperContext();
boolean protectUpper = t == BlockData.class && upperCtx != null; boolean protectUpper = upperCtx != null;
MantleChunk<Matter> chunk = getMantle().getChunk(x, z).use(); MantleChunk<Matter> chunk = getMantle().getChunk(x, z).use();
try { try {
@@ -209,14 +209,14 @@ public interface EngineMantle extends MatterGenerator {
int rawUpper = upperCtx.getUpperSurfaceY(worldX, worldZ); int rawUpper = upperCtx.getUpperSurfaceY(worldX, worldZ);
upperYs[i] = Math.max(rawUpper, he + gap); upperYs[i] = Math.max(rawUpper, he + gap);
} }
chunk.iterate(t, (lx, y, lz, value) -> { chunk.iterate(BlockData.class, (lx, y, lz, value) -> {
int colIdx = (lx << 4) | (lz & 15); int colIdx = (lx << 4) | (lz & 15);
if (y < upperYs[colIdx]) { if (y < upperYs[colIdx]) {
blocks.set(lx, y, lz, BukkitBlockState.of(value)); blocks.set(lx, y, lz, BukkitBlockState.of(value));
} }
}); });
} else { } else {
chunk.iterate(t, (lx, y, lz, value) -> blocks.set(lx, y, lz, BukkitBlockState.of(value))); chunk.iterate(BlockData.class, (lx, y, lz, value) -> blocks.set(lx, y, lz, BukkitBlockState.of(value)));
} }
} finally { } finally {
chunk.release(); chunk.release();
@@ -28,7 +28,6 @@ import art.arcane.iris.engine.framework.EngineStage;
import art.arcane.iris.engine.framework.IrisEngineMode; import art.arcane.iris.engine.framework.IrisEngineMode;
import art.arcane.iris.engine.modifier.*; import art.arcane.iris.engine.modifier.*;
import art.arcane.iris.util.common.scheduling.J; import art.arcane.iris.util.common.scheduling.J;
import org.bukkit.block.data.BlockData;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@@ -77,7 +76,7 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode {
if (shouldBypassMantleStages(getEngine())) { if (shouldBypassMantleStages(getEngine())) {
return; return;
} }
getMantle().insertMatter(x >> 4, z >> 4, BlockData.class, K, m); getMantle().insertMatter(x >> 4, z >> 4, K, m);
}; };
EngineStage sFloatingTerrainSolid = (x, z, k, p, m, c) -> floatingChildBiomes.modify(x, z, k, m, c); EngineStage sFloatingTerrainSolid = (x, z, k, p, m, c) -> floatingChildBiomes.modify(x, z, k, m, c);
EngineStage sFloatingDecorate = (x, z, k, p, m, c) -> floatingChildBiomes.decorateColumns(x, z, k, m, c); EngineStage sFloatingDecorate = (x, z, k, p, m, c) -> floatingChildBiomes.decorateColumns(x, z, k, m, c);
@@ -44,10 +44,7 @@ import art.arcane.volmlib.util.matter.slices.MarkerMatter;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch; import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import lombok.Data; import lombok.Data;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@@ -59,8 +56,8 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
private static final int CAVE_BIOME_BLEND_CENTER_WEIGHT = 4; private static final int CAVE_BIOME_BLEND_CENTER_WEIGHT = 4;
private static final int CAVE_BIOME_BLEND_TOTAL_WEIGHT = 8; private static final int CAVE_BIOME_BLEND_TOTAL_WEIGHT = 8;
private final RNG rng; private final RNG rng;
private final PlatformBlockState AIR = BukkitBlockState.of(Material.CAVE_AIR.createBlockData()); private final PlatformBlockState AIR = B.getState("CAVE_AIR");
private final PlatformBlockState LAVA = BukkitBlockState.of(Material.LAVA.createBlockData()); private final PlatformBlockState LAVA = B.getState("LAVA");
private final IrisDecorantActuator decorant; private final IrisDecorantActuator decorant;
public IrisCarveModifier(Engine engine) { public IrisCarveModifier(Engine engine) {
@@ -123,9 +120,8 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
} }
PlatformBlockState current = output.getRaw(rx, yy, rz); PlatformBlockState current = output.getRaw(rx, yy, rz);
BlockData currentRaw = current == null ? null : (BlockData) current.nativeHandle();
if (B.isFluid(currentRaw)) { if (B.isFluid(current)) {
return; return;
} }
@@ -147,7 +143,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
walls.put(rx - 1, yy, rz, c); walls.put(rx - 1, yy, rz, c);
} }
if (currentRaw.getMaterial().isAir()) { if (current.isAir()) {
return; return;
} }
@@ -181,7 +177,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
PlatformBlockState data = biome.getWall().get(rng, worldX, yy, worldZ, getData()); PlatformBlockState data = biome.getWall().get(rng, worldX, yy, worldZ, getData());
int columnIndex = PowerOfTwoCoordinates.packLocal16(rx, rz); int columnIndex = PowerOfTwoCoordinates.packLocal16(rx, rz);
if (data != null && B.isSolid(unwrap(output.getRaw(rx, yy, rz))) && yy < surfaceHeights[columnIndex]) { if (data != null && B.isSolid(output.getRaw(rx, yy, rz)) && yy < surfaceHeights[columnIndex]) {
output.setRaw(rx, yy, rz, data); output.setRaw(rx, yy, rz, data);
} }
} }
@@ -418,14 +414,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
break; break;
} }
BlockData down = unwrap(output.getRaw(rx, fy, rz)); PlatformBlockState down = output.getRaw(rx, fy, rz);
if (!B.isSolid(down)) { if (!B.isSolid(down)) {
break; break;
} }
PlatformBlockState layer = floorLayers.get(i); PlatformBlockState layer = floorLayers.get(i);
if (B.isOre(down)) { if (B.isOre(down)) {
output.setRaw(rx, fy, rz, BukkitBlockState.of(B.toDeepSlateOre(down, unwrap(layer)))); output.setRaw(rx, fy, rz, B.toDeepSlateOre(down, layer));
continue; continue;
} }
@@ -440,14 +436,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
break; break;
} }
BlockData up = unwrap(output.getRaw(rx, cy, rz)); PlatformBlockState up = output.getRaw(rx, cy, rz);
if (!B.isSolid(up)) { if (!B.isSolid(up)) {
continue; continue;
} }
PlatformBlockState layer = ceilingLayers.get(i); PlatformBlockState layer = ceilingLayers.get(i);
if (B.isOre(up)) { if (B.isOre(up)) {
output.setRaw(rx, cy, rz, BukkitBlockState.of(B.toDeepSlateOre(up, unwrap(layer)))); output.setRaw(rx, cy, rz, B.toDeepSlateOre(up, layer));
continue; continue;
} }
@@ -460,11 +456,11 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
int maxY = output.getHeight(); int maxY = output.getHeight();
String customBiome = ""; String customBiome = "";
if (zone.ceiling + 1 < maxY && B.isDecorant(unwrap(output.getRaw(rx, zone.ceiling + 1, rz)))) { if (zone.ceiling + 1 < maxY && B.isDecorant(output.getRaw(rx, zone.ceiling + 1, rz))) {
output.setRaw(rx, zone.ceiling + 1, rz, AIR); output.setRaw(rx, zone.ceiling + 1, rz, AIR);
} }
if (B.isDecorant(unwrap(output.getRaw(rx, zone.ceiling, rz)))) { if (B.isDecorant(output.getRaw(rx, zone.ceiling, rz))) {
output.setRaw(rx, zone.ceiling, rz, AIR); output.setRaw(rx, zone.ceiling, rz, AIR);
} }
@@ -505,14 +501,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
int y = zone.floor - i - 1; int y = zone.floor - i - 1;
PlatformBlockState b = blocks.get(i); PlatformBlockState b = blocks.get(i);
BlockData down = unwrap(output.getRaw(rx, y, rz)); PlatformBlockState down = output.getRaw(rx, y, rz);
if (!B.isSolid(down)) { if (!B.isSolid(down)) {
continue; continue;
} }
if (B.isOre(down)) { if (B.isOre(down)) {
output.setRaw(rx, y, rz, BukkitBlockState.of(B.toDeepSlateOre(down, unwrap(b)))); output.setRaw(rx, y, rz, B.toDeepSlateOre(down, b));
continue; continue;
} }
@@ -528,14 +524,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
} }
PlatformBlockState b = blocks.get(i); PlatformBlockState b = blocks.get(i);
BlockData up = unwrap(output.getRaw(rx, cy, rz)); PlatformBlockState up = output.getRaw(rx, cy, rz);
if (!B.isSolid(up)) { if (!B.isSolid(up)) {
continue; continue;
} }
if (B.isOre(up)) { if (B.isOre(up)) {
output.setRaw(rx, cy, rz, BukkitBlockState.of(B.toDeepSlateOre(up, unwrap(b)))); output.setRaw(rx, cy, rz, B.toDeepSlateOre(up, b));
continue; continue;
} }
@@ -543,9 +539,9 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
} }
for (IrisDecorator decorator : biome.getDecorators()) { for (IrisDecorator decorator : biome.getDecorators()) {
if (decorator.getPartOf().equals(IrisDecorationPart.NONE) && zone.getFloor() > 0 && B.isSolid(unwrap(output.getRaw(rx, zone.getFloor() - 1, rz)))) { if (decorator.getPartOf().equals(IrisDecorationPart.NONE) && zone.getFloor() > 0 && B.isSolid(output.getRaw(rx, zone.getFloor() - 1, rz))) {
decorant.getSurfaceDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getFloor() - 1, zone.airThickness()); decorant.getSurfaceDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getFloor() - 1, zone.airThickness());
} else if (decorator.getPartOf().equals(IrisDecorationPart.CEILING) && zone.getCeiling() + 1 < maxY && B.isSolid(unwrap(output.getRaw(rx, zone.getCeiling() + 1, rz)))) { } else if (decorator.getPartOf().equals(IrisDecorationPart.CEILING) && zone.getCeiling() + 1 < maxY && B.isSolid(output.getRaw(rx, zone.getCeiling() + 1, rz))) {
decorant.getCeilingDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getCeiling(), zone.airThickness()); decorant.getCeilingDecorator().decorate(rx, rz, xx, xx, xx, zz, zz, zz, output, biome, zone.getCeiling(), zone.airThickness());
} }
} }
@@ -597,10 +593,6 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
return resolvedBiome; return resolvedBiome;
} }
private static BlockData unwrap(PlatformBlockState state) {
return state == null ? null : (BlockData) state.nativeHandle();
}
private IrisBiome resolveCustomBiome(Map<String, IrisBiome> customBiomeCache, String customBiome) { private IrisBiome resolveCustomBiome(Map<String, IrisBiome> customBiomeCache, String customBiome) {
if (customBiomeCache.containsKey(customBiome)) { if (customBiomeCache.containsKey(customBiome)) {
return customBiomeCache.get(customBiome); return customBiomeCache.get(customBiome);
@@ -18,11 +18,6 @@
package art.arcane.iris.engine.object; package art.arcane.iris.engine.object;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.util.common.data.B;
import org.bukkit.block.data.BlockData;
import org.bukkit.util.BlockVector;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -69,8 +64,8 @@ public class FloatingObjectFootprint {
int[] globalHighestKx = {0}; int[] globalHighestKx = {0};
int[] globalHighestKz = {0}; int[] globalHighestKz = {0};
obj.getBlocks().forEach((BlockVector key, PlatformBlockState bd) -> { obj.getBlocks().forEach((key, bd) -> {
if (!B.isSolid((BlockData) bd.nativeHandle())) { if (!bd.isSolid()) {
return; return;
} }
int kx = key.getBlockX(); int kx = key.getBlockX();
@@ -2,7 +2,6 @@ package art.arcane.iris.engine.object;
import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.platform.bukkit.BukkitPlatform;
import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.Engine;
import org.bukkit.block.data.BlockData;
import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet; import art.arcane.volmlib.util.collection.KSet;
@@ -45,7 +44,7 @@ public class IrisCaveShape {
return cache.computeIfAbsent(randomRotation(rng), pos -> { return cache.computeIfAbsent(randomRotation(rng), pos -> {
var rotated = new KSet<IrisPosition>(); var rotated = new KSet<IrisPosition>();
engine.getData().getObjectLoader().load(object).getBlocks().forEach((vector, data) -> { engine.getData().getObjectLoader().load(object).getBlocks().forEach((vector, data) -> {
if (((BlockData) data.nativeHandle()).getMaterial().isAir()) return; if (data.isAir()) return;
rotated.add(BukkitPlatform.positionOf(objectRotation.rotate(vector, pos.getX(), pos.getY(), pos.getZ()))); rotated.add(BukkitPlatform.positionOf(objectRotation.rotate(vector, pos.getX(), pos.getY(), pos.getZ())));
}); });
return rotated; return rotated;
@@ -96,10 +96,6 @@ public class IrisColor {
}); });
} }
public org.bukkit.Color getBukkitColor() {
return org.bukkit.Color.fromRGB(getColor().getRGB());
}
public int getAsRGB() { public int getAsRGB() {
if (hex != null) { if (hex != null) {
try { try {
@@ -21,13 +21,13 @@ package art.arcane.iris.engine.object;
import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.loader.IrisData;
import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.data.cache.AtomicCache;
import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.engine.object.annotations.*;
import art.arcane.iris.util.common.data.B;
import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KList;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.bukkit.block.data.BlockData;
@Snippet("object-loot") @Snippet("object-loot")
@Accessors(chain = true) @Accessors(chain = true)
@@ -67,9 +67,8 @@ public class IrisObjectLoot implements IObjectLoot {
} }
public boolean matchesFilter(IrisData manager, PlatformBlockState data) { public boolean matchesFilter(IrisData manager, PlatformBlockState data) {
BlockData raw = (BlockData) data.nativeHandle();
for (PlatformBlockState filterState : getFilter(manager)) { for (PlatformBlockState filterState : getFilter(manager)) {
if (((BlockData) filterState.nativeHandle()).matches(raw)) return true; if (B.matches(filterState, data)) return true;
} }
return false; return false;
} }
@@ -281,12 +281,12 @@ public class IrisProceduralTree implements IrisProceduralPlacement {
if (new java.io.File("plugins/Iris/goldendebug.txt").isFile()) { if (new java.io.File("plugins/Iris/goldendebug.txt").isFile()) {
for (IrisObject object : baked) { for (IrisObject object : baked) {
long digest = 0L; long[] digest = new long[]{0L};
for (java.util.Map.Entry<org.bukkit.util.BlockVector, art.arcane.iris.spi.PlatformBlockState> entry : object.getBlocks()) { object.getBlocks().forEach((vector, state) -> {
long position = ((long) entry.getKey().getBlockX() << 40) ^ ((long) entry.getKey().getBlockY() << 20) ^ entry.getKey().getBlockZ(); long position = ((long) vector.getBlockX() << 40) ^ ((long) vector.getBlockY() << 20) ^ vector.getBlockZ();
digest ^= Long.rotateLeft(position * 0x9E3779B97F4A7C15L ^ entry.getValue().key().hashCode(), (int) (position & 63)); digest[0] ^= Long.rotateLeft(position * 0x9E3779B97F4A7C15L ^ state.key().hashCode(), (int) (position & 63));
} });
art.arcane.iris.Iris.info("Goldendebug bake: " + object.getLoadKey() + " blocks=" + object.getBlocks().size() + " digest=" + Long.toHexString(digest)); art.arcane.iris.Iris.info("Goldendebug bake: " + object.getLoadKey() + " blocks=" + object.getBlocks().size() + " digest=" + Long.toHexString(digest[0]));
} }
} }
@@ -24,14 +24,13 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.WrongEngineBroException; import art.arcane.iris.engine.framework.WrongEngineBroException;
import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.platform.studio.EnginedStudioGenerator; import art.arcane.iris.engine.platform.studio.EnginedStudioGenerator;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import org.bukkit.Material; import art.arcane.iris.util.common.data.B;
import java.util.Objects; import java.util.Objects;
public class BiomeBuffetGenerator extends EnginedStudioGenerator { public class BiomeBuffetGenerator extends EnginedStudioGenerator {
private static final PlatformBlockState FLOOR = BukkitBlockState.of(Material.BARRIER.createBlockData()); private static final PlatformBlockState FLOOR = B.getState("BARRIER");
private final IrisBiome[] biomes; private final IrisBiome[] biomes;
private final int width; private final int width;
private final int biomeSize; private final int biomeSize;
@@ -136,6 +136,14 @@ public class B {
return BASE.toDeepSlateOre(block, ore); return BASE.toDeepSlateOre(block, ore);
} }
public static art.arcane.iris.spi.PlatformBlockState toDeepSlateOre(art.arcane.iris.spi.PlatformBlockState block, art.arcane.iris.spi.PlatformBlockState ore) {
return art.arcane.iris.platform.bukkit.BukkitBlockState.of(BASE.toDeepSlateOre((BlockData) block.nativeHandle(), (BlockData) ore.nativeHandle()));
}
public static boolean isOre(art.arcane.iris.spi.PlatformBlockState state) {
return BASE.isOre(state == null ? null : (BlockData) state.nativeHandle());
}
public static boolean isDeepSlate(BlockData blockData) { public static boolean isDeepSlate(BlockData blockData) {
return BASE.isDeepSlate(blockData); return BASE.isDeepSlate(blockData);
} }
@@ -164,6 +172,10 @@ public class B {
return BASE.isWater(b); return BASE.isWater(b);
} }
public static boolean isWater(art.arcane.iris.spi.PlatformBlockState state) {
return BASE.isWater(state == null ? null : (BlockData) state.nativeHandle());
}
public static BlockData getAir() { public static BlockData getAir() {
return BASE.getAir(); return BASE.getAir();
} }
@@ -180,6 +192,10 @@ public class B {
return BASE.isSolid(mat); return BASE.isSolid(mat);
} }
public static boolean isSolid(art.arcane.iris.spi.PlatformBlockState state) {
return BASE.isSolid(state == null ? null : (BlockData) state.nativeHandle());
}
public static BlockData getOrNull(String bdxf) { public static BlockData getOrNull(String bdxf) {
return BASE.getOrNull(bdxf); return BASE.getOrNull(bdxf);
} }
@@ -233,6 +249,10 @@ public class B {
return BASE.isDecorant(m); return BASE.isDecorant(m);
} }
public static boolean isDecorant(art.arcane.iris.spi.PlatformBlockState state) {
return BASE.isDecorant(state == null ? null : (BlockData) state.nativeHandle());
}
public static KList<BlockData> get(KList<String> find) { public static KList<BlockData> get(KList<String> find) {
return BASE.get(find); return BASE.get(find);
} }
@@ -241,6 +261,14 @@ public class B {
return BASE.isFluid(d); return BASE.isFluid(d);
} }
public static boolean isFluid(art.arcane.iris.spi.PlatformBlockState state) {
return BASE.isFluid(state == null ? null : (BlockData) state.nativeHandle());
}
public static boolean matches(art.arcane.iris.spi.PlatformBlockState filter, art.arcane.iris.spi.PlatformBlockState state) {
return ((BlockData) filter.nativeHandle()).matches((BlockData) state.nativeHandle());
}
public static boolean isAirOrFluid(BlockData d) { public static boolean isAirOrFluid(BlockData d) {
return BASE.isAirOrFluid(d); return BASE.isAirOrFluid(d);
} }