Engine Tier 3

This commit is contained in:
Brian Neumann-Fopiano
2026-06-11 16:18:48 -04:00
parent 1a834ed6f6
commit 6c5e991051
17 changed files with 74 additions and 101 deletions
-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/wand/WandSelection.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/TerrainChunk.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/Engine.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/LootProvider.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/IrisWorldManager.java
art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java
art/arcane/iris/engine/mantle/components/MantleObjectComponent.java
art/arcane/iris/engine/mantle/EngineMantle.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/IrisFloatingChildBiomeModifier.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/coral/CoralGenerator.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/FormationGenerator.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/IrisBlockData.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/IrisCompat.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/IrisLootTable.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/IrisObjectRotation.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/DummyBiomeProvider.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/Iris.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.EqualsAndHashCode;
import lombok.ToString;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import java.io.File;
import java.util.*;
@@ -49,7 +47,6 @@ import java.util.*;
@EqualsAndHashCode(exclude = "data")
@ToString(exclude = "data")
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 int GRID_BOUNDS_CACHE_SIZE = 8192;
private static final int HEIGHT_BOUNDS_GRID = 4;
@@ -692,7 +692,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
}
int cX = e.getX(), cZ = e.getZ();
Long key = Cache.key(e);
Long key = Cache.key(cX, cZ);
cleanup.put(key, cleanupService.schedule(() -> {
cleanup.remove(key);
getEngine().cleanupMantleChunk(cX, cZ);
@@ -701,7 +701,7 @@ public class IrisWorldManager extends EngineAssignedWorldManager {
@Override
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) {
future.cancel(false);
}
@@ -31,19 +31,11 @@ import art.arcane.volmlib.util.math.RNG;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import art.arcane.iris.spi.PlatformBlockState;
import lombok.Getter;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import java.util.function.Predicate;
public class IrisDecorantActuator extends EngineAssignedActuator<PlatformBlockState> {
private static final Predicate<PlatformBlockState> PREDICATE_SOLID = (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 static final Predicate<PlatformBlockState> PREDICATE_SOLID = (s) -> s != null && !B.isAirOrFluid(s);
private final RNG rng;
@Getter
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))
&& 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,
realX, Math.round(i + 1), Math.round(x + i - 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() {
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.volmlib.util.math.RNG;
import art.arcane.volmlib.util.scheduling.PrecisionStopwatch;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.util.common.data.B;
import lombok.Getter;
import org.bukkit.Material;
public class IrisTerrainNormalActuator extends EngineAssignedActuator<PlatformBlockState> {
private static final PlatformBlockState AIR = BukkitBlockState.of(Material.AIR.createBlockData());
private static final PlatformBlockState BEDROCK = BukkitBlockState.of(Material.BEDROCK.createBlockData());
private static final PlatformBlockState LAVA = BukkitBlockState.of(Material.LAVA.createBlockData());
private static final PlatformBlockState GLASS = BukkitBlockState.of(Material.GLASS.createBlockData());
private static final PlatformBlockState CAVE_AIR = BukkitBlockState.of(Material.CAVE_AIR.createBlockData());
private static final PlatformBlockState AIR = B.getState("AIR");
private static final PlatformBlockState BEDROCK = B.getState("BEDROCK");
private static final PlatformBlockState LAVA = B.getState("LAVA");
private static final PlatformBlockState GLASS = B.getState("GLASS");
private static final PlatformBlockState CAVE_AIR = B.getState("CAVE_AIR");
@Getter
private final RNG rng;
@Getter
@@ -19,13 +19,8 @@
package art.arcane.iris.engine.data.cache;
import art.arcane.volmlib.util.cache.CacheKey;
import org.bukkit.Chunk;
public interface Cache<V> {
static long key(Chunk chunk) {
return CacheKey.key(chunk);
}
static long key(int x, int 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.math.RNG;
import art.arcane.iris.spi.PlatformBlockState;
import org.bukkit.block.data.BlockData;
public class IrisCeilingDecorator extends IrisEngineDecorator {
private final RNG partRNG;
@@ -53,7 +52,7 @@ public class IrisCeilingDecorator extends IrisEngineDecorator {
if (!decorator.isStacking()) {
if (caveSkipFluid) {
PlatformBlockState state = data.get(x, height, z);
if (B.isFluid(state == null ? null : (BlockData) state.nativeHandle())) {
if (B.isFluid(state)) {
return;
}
}
@@ -185,13 +185,13 @@ public interface EngineMantle extends MatterGenerator {
}
@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()) {
return;
}
UpperDimensionContext upperCtx = getEngine().getUpperContext();
boolean protectUpper = t == BlockData.class && upperCtx != null;
boolean protectUpper = upperCtx != null;
MantleChunk<Matter> chunk = getMantle().getChunk(x, z).use();
try {
@@ -209,14 +209,14 @@ public interface EngineMantle extends MatterGenerator {
int rawUpper = upperCtx.getUpperSurfaceY(worldX, worldZ);
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);
if (y < upperYs[colIdx]) {
blocks.set(lx, y, lz, BukkitBlockState.of(value));
}
});
} 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 {
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.modifier.*;
import art.arcane.iris.util.common.scheduling.J;
import org.bukkit.block.data.BlockData;
import java.util.concurrent.atomic.AtomicLong;
@@ -77,7 +76,7 @@ public class ModeOverworld extends IrisEngineMode implements EngineMode {
if (shouldBypassMantleStages(getEngine())) {
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 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 it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import lombok.Data;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.PlatformBlockState;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import java.util.Arrays;
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_TOTAL_WEIGHT = 8;
private final RNG rng;
private final PlatformBlockState AIR = BukkitBlockState.of(Material.CAVE_AIR.createBlockData());
private final PlatformBlockState LAVA = BukkitBlockState.of(Material.LAVA.createBlockData());
private final PlatformBlockState AIR = B.getState("CAVE_AIR");
private final PlatformBlockState LAVA = B.getState("LAVA");
private final IrisDecorantActuator decorant;
public IrisCarveModifier(Engine engine) {
@@ -123,9 +120,8 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
}
PlatformBlockState current = output.getRaw(rx, yy, rz);
BlockData currentRaw = current == null ? null : (BlockData) current.nativeHandle();
if (B.isFluid(currentRaw)) {
if (B.isFluid(current)) {
return;
}
@@ -147,7 +143,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
walls.put(rx - 1, yy, rz, c);
}
if (currentRaw.getMaterial().isAir()) {
if (current.isAir()) {
return;
}
@@ -181,7 +177,7 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
PlatformBlockState data = biome.getWall().get(rng, worldX, yy, worldZ, getData());
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);
}
}
@@ -418,14 +414,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
break;
}
BlockData down = unwrap(output.getRaw(rx, fy, rz));
PlatformBlockState down = output.getRaw(rx, fy, rz);
if (!B.isSolid(down)) {
break;
}
PlatformBlockState layer = floorLayers.get(i);
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;
}
@@ -440,14 +436,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
break;
}
BlockData up = unwrap(output.getRaw(rx, cy, rz));
PlatformBlockState up = output.getRaw(rx, cy, rz);
if (!B.isSolid(up)) {
continue;
}
PlatformBlockState layer = ceilingLayers.get(i);
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;
}
@@ -460,11 +456,11 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
int maxY = output.getHeight();
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);
}
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);
}
@@ -505,14 +501,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
int y = zone.floor - i - 1;
PlatformBlockState b = blocks.get(i);
BlockData down = unwrap(output.getRaw(rx, y, rz));
PlatformBlockState down = output.getRaw(rx, y, rz);
if (!B.isSolid(down)) {
continue;
}
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;
}
@@ -528,14 +524,14 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
}
PlatformBlockState b = blocks.get(i);
BlockData up = unwrap(output.getRaw(rx, cy, rz));
PlatformBlockState up = output.getRaw(rx, cy, rz);
if (!B.isSolid(up)) {
continue;
}
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;
}
@@ -543,9 +539,9 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
}
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());
} 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());
}
}
@@ -597,10 +593,6 @@ public class IrisCarveModifier extends EngineAssignedModifier<PlatformBlockState
return resolvedBiome;
}
private static BlockData unwrap(PlatformBlockState state) {
return state == null ? null : (BlockData) state.nativeHandle();
}
private IrisBiome resolveCustomBiome(Map<String, IrisBiome> customBiomeCache, String customBiome) {
if (customBiomeCache.containsKey(customBiome)) {
return customBiomeCache.get(customBiome);
@@ -18,11 +18,6 @@
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.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -69,8 +64,8 @@ public class FloatingObjectFootprint {
int[] globalHighestKx = {0};
int[] globalHighestKz = {0};
obj.getBlocks().forEach((BlockVector key, PlatformBlockState bd) -> {
if (!B.isSolid((BlockData) bd.nativeHandle())) {
obj.getBlocks().forEach((key, bd) -> {
if (!bd.isSolid()) {
return;
}
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.engine.framework.Engine;
import org.bukkit.block.data.BlockData;
import art.arcane.iris.engine.object.annotations.*;
import art.arcane.volmlib.util.collection.KMap;
import art.arcane.volmlib.util.collection.KSet;
@@ -45,7 +44,7 @@ public class IrisCaveShape {
return cache.computeIfAbsent(randomRotation(rng), pos -> {
var rotated = new KSet<IrisPosition>();
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())));
});
return rotated;
@@ -96,10 +96,6 @@ public class IrisColor {
});
}
public org.bukkit.Color getBukkitColor() {
return org.bukkit.Color.fromRGB(getColor().getRGB());
}
public int getAsRGB() {
if (hex != null) {
try {
@@ -21,13 +21,13 @@ package art.arcane.iris.engine.object;
import art.arcane.iris.core.loader.IrisData;
import art.arcane.iris.engine.data.cache.AtomicCache;
import art.arcane.iris.engine.object.annotations.*;
import art.arcane.iris.util.common.data.B;
import art.arcane.volmlib.util.collection.KList;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import art.arcane.iris.spi.PlatformBlockState;
import lombok.experimental.Accessors;
import org.bukkit.block.data.BlockData;
@Snippet("object-loot")
@Accessors(chain = true)
@@ -67,9 +67,8 @@ public class IrisObjectLoot implements IObjectLoot {
}
public boolean matchesFilter(IrisData manager, PlatformBlockState data) {
BlockData raw = (BlockData) data.nativeHandle();
for (PlatformBlockState filterState : getFilter(manager)) {
if (((BlockData) filterState.nativeHandle()).matches(raw)) return true;
if (B.matches(filterState, data)) return true;
}
return false;
}
@@ -281,12 +281,12 @@ public class IrisProceduralTree implements IrisProceduralPlacement {
if (new java.io.File("plugins/Iris/goldendebug.txt").isFile()) {
for (IrisObject object : baked) {
long digest = 0L;
for (java.util.Map.Entry<org.bukkit.util.BlockVector, art.arcane.iris.spi.PlatformBlockState> entry : object.getBlocks()) {
long position = ((long) entry.getKey().getBlockX() << 40) ^ ((long) entry.getKey().getBlockY() << 20) ^ entry.getKey().getBlockZ();
digest ^= Long.rotateLeft(position * 0x9E3779B97F4A7C15L ^ entry.getValue().key().hashCode(), (int) (position & 63));
}
art.arcane.iris.Iris.info("Goldendebug bake: " + object.getLoadKey() + " blocks=" + object.getBlocks().size() + " digest=" + Long.toHexString(digest));
long[] digest = new long[]{0L};
object.getBlocks().forEach((vector, state) -> {
long position = ((long) vector.getBlockX() << 40) ^ ((long) vector.getBlockY() << 20) ^ vector.getBlockZ();
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[0]));
}
}
@@ -24,14 +24,13 @@ import art.arcane.iris.engine.framework.Engine;
import art.arcane.iris.engine.framework.WrongEngineBroException;
import art.arcane.iris.engine.object.IrisBiome;
import art.arcane.iris.engine.platform.studio.EnginedStudioGenerator;
import art.arcane.iris.platform.bukkit.BukkitBlockState;
import art.arcane.iris.spi.PlatformBlockState;
import org.bukkit.Material;
import art.arcane.iris.util.common.data.B;
import java.util.Objects;
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 int width;
private final int biomeSize;
@@ -136,6 +136,14 @@ public class B {
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) {
return BASE.isDeepSlate(blockData);
}
@@ -164,6 +172,10 @@ public class 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() {
return BASE.getAir();
}
@@ -180,6 +192,10 @@ public class B {
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) {
return BASE.getOrNull(bdxf);
}
@@ -233,6 +249,10 @@ public class B {
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) {
return BASE.get(find);
}
@@ -241,6 +261,14 @@ public class B {
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) {
return BASE.isAirOrFluid(d);
}