mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-26 22:10:18 +00:00
Engine Tier 3
This commit is contained in:
1 parent
1a834ed6f6
commit
6c5e991051
17 files changed
+74
-101
No files matched your search
@@ -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]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user