diff --git a/adapters/bukkit/plugin/src/main/java/art/arcane/iris/core/commands/CommandWhat.java b/adapters/bukkit/plugin/src/main/java/art/arcane/iris/core/commands/CommandWhat.java index 30317a471..1b59d8d50 100644 --- a/adapters/bukkit/plugin/src/main/java/art/arcane/iris/core/commands/CommandWhat.java +++ b/adapters/bukkit/plugin/src/main/java/art/arcane/iris/core/commands/CommandWhat.java @@ -18,6 +18,8 @@ package art.arcane.iris.core.commands; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.Iris; import art.arcane.iris.core.edit.BlockSignal; @@ -26,7 +28,6 @@ import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.object.IrisBiome; import art.arcane.iris.engine.object.IrisRegion; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.director.DirectorExecutor; import art.arcane.volmlib.util.director.DirectorOrigin; import art.arcane.volmlib.util.director.annotations.Director; @@ -119,31 +120,31 @@ public class CommandWhat implements DirectorExecutor { sender().sendMessage("Material: " + C.GREEN + bd.getMaterial().name()); sender().sendMessage("Full: " + C.WHITE + bd.getAsString(true)); - if (B.isStorage(bd)) { + if (BukkitBlockResolution.isStorage(bd)) { sender().sendMessage(C.YELLOW + "* Storage Block (Loot Capable)"); } - if (B.isLit(bd)) { + if (BukkitBlockResolution.isLit(bd)) { sender().sendMessage(C.YELLOW + "* Lit Block (Light Capable)"); } - if (B.isFoliage(bd)) { + if (BukkitBlockResolution.isFoliage(bd)) { sender().sendMessage(C.YELLOW + "* Foliage Block"); } - if (B.isDecorant(bd)) { + if (BukkitBlockResolution.isDecorant(bd)) { sender().sendMessage(C.YELLOW + "* Decorant Block"); } - if (B.isFluid(bd)) { + if (BukkitBlockResolution.isFluid(bd)) { sender().sendMessage(C.YELLOW + "* Fluid Block"); } - if (B.isFoliagePlantable(bd)) { + if (BukkitBlockResolution.isFoliagePlantable(bd)) { sender().sendMessage(C.YELLOW + "* Plantable Foliage Block"); } - if (B.isSolid(bd)) { + if (BukkitBlockResolution.isSolid(bd)) { sender().sendMessage(C.YELLOW + "* Solid Block"); } } diff --git a/core/purity-allowlist.txt b/core/purity-allowlist.txt index 9bf47abec..6c2d4e3a1 100644 --- a/core/purity-allowlist.txt +++ b/core/purity-allowlist.txt @@ -1,3 +1,6 @@ +art/arcane/iris/core/IrisRuntimeSchedulerMode.java +art/arcane/iris/core/IrisWorlds.java +art/arcane/iris/core/ServerConfigurator.java art/arcane/iris/core/datapack/DatapackIngestService.java art/arcane/iris/core/edit/BlockSignal.java art/arcane/iris/core/edit/DustRevealer.java @@ -5,8 +8,6 @@ art/arcane/iris/core/events/IrisEngineEvent.java art/arcane/iris/core/events/IrisEngineHotloadEvent.java art/arcane/iris/core/events/IrisLootEvent.java art/arcane/iris/core/gui/PregeneratorJob.java -art/arcane/iris/core/IrisRuntimeSchedulerMode.java -art/arcane/iris/core/IrisWorlds.java art/arcane/iris/core/lifecycle/BukkitPublicBackend.java art/arcane/iris/core/lifecycle/CapabilitySnapshot.java art/arcane/iris/core/lifecycle/PaperLibBootstrap.java @@ -18,6 +19,10 @@ art/arcane/iris/core/lifecycle/WorldLifecycleStaging.java art/arcane/iris/core/lifecycle/WorldLifecycleSupport.java art/arcane/iris/core/lifecycle/WorldsProviderBackend.java art/arcane/iris/core/link/CustomItemsDataProvider.java +art/arcane/iris/core/link/ExternalDataProvider.java +art/arcane/iris/core/link/Identifier.java +art/arcane/iris/core/link/MultiverseCoreLink.java +art/arcane/iris/core/link/WorldEditLink.java art/arcane/iris/core/link/data/CraftEngineDataProvider.java art/arcane/iris/core/link/data/EcoItemsDataProvider.java art/arcane/iris/core/link/data/ExecutableItemsDataProvider.java @@ -28,14 +33,10 @@ art/arcane/iris/core/link/data/MMOItemsDataProvider.java art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java art/arcane/iris/core/link/data/MythicMobsDataProvider.java art/arcane/iris/core/link/data/NexoDataProvider.java -art/arcane/iris/core/link/ExternalDataProvider.java -art/arcane/iris/core/link/Identifier.java -art/arcane/iris/core/link/MultiverseCoreLink.java -art/arcane/iris/core/link/WorldEditLink.java -art/arcane/iris/core/nms/datapack/v1206/DataFixerV1206.java art/arcane/iris/core/nms/INMS.java art/arcane/iris/core/nms/INMSBinding.java art/arcane/iris/core/nms/MinecraftVersion.java +art/arcane/iris/core/nms/datapack/v1206/DataFixerV1206.java art/arcane/iris/core/nms/v1X/NMSBinding1X.java art/arcane/iris/core/pack/IrisPack.java art/arcane/iris/core/pregenerator/DeepSearchPregenerator.java @@ -57,12 +58,11 @@ art/arcane/iris/core/runtime/WorldRuntimeControlBackend.java art/arcane/iris/core/runtime/WorldRuntimeControlService.java art/arcane/iris/core/safeguard/Mode.java art/arcane/iris/core/safeguard/task/Tasks.java -art/arcane/iris/core/ServerConfigurator.java art/arcane/iris/core/service/BoardSVC.java art/arcane/iris/core/service/ExternalDataSVC.java art/arcane/iris/core/service/GlobalCacheSVC.java -art/arcane/iris/core/service/ObjectStudioSaveService.java art/arcane/iris/core/service/ObjectSVC.java +art/arcane/iris/core/service/ObjectStudioSaveService.java art/arcane/iris/core/service/StudioSVC.java art/arcane/iris/core/service/TreeSVC.java art/arcane/iris/core/structure/BulkStructureImporter.java @@ -77,6 +77,8 @@ art/arcane/iris/core/tools/IrisReflectiveAPI.java art/arcane/iris/core/tools/IrisToolbelt.java art/arcane/iris/core/tools/IrisWorldCreator.java art/arcane/iris/core/tools/TreePlausibilizer.java +art/arcane/iris/engine/IrisEngineEffects.java +art/arcane/iris/engine/IrisWorldManager.java art/arcane/iris/engine/actuator/IrisBiomeActuator.java art/arcane/iris/engine/data/chunk/LinkedTerrainChunk.java art/arcane/iris/engine/data/chunk/TerrainChunk.java @@ -88,24 +90,15 @@ 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/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/mantle/components/MantleFloatingObjectComponent.java +art/arcane/iris/engine/mantle/components/MantleObjectComponent.java art/arcane/iris/engine/modifier/IrisDepositModifier.java art/arcane/iris/engine/modifier/IrisFloatingChildBiomeModifier.java art/arcane/iris/engine/modifier/IrisPerfectionModifier.java art/arcane/iris/engine/modifier/IrisPostModifier.java -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/formation/FormationBlockResolver.java -art/arcane/iris/engine/object/formation/FormationGenerator.java -art/arcane/iris/engine/object/fungi/FungusGenerator.java -art/arcane/iris/engine/object/fungi/FungusStemBuilder.java art/arcane/iris/engine/object/IPostBlockAccess.java art/arcane/iris/engine/object/IrisAttributeModifier.java art/arcane/iris/engine/object/IrisBiome.java @@ -141,10 +134,17 @@ art/arcane/iris/engine/object/IrisVillagerTrade.java art/arcane/iris/engine/object/IrisWorld.java art/arcane/iris/engine/object/LegacyTileData.java art/arcane/iris/engine/object/PotionEffectTypes.java +art/arcane/iris/engine/object/TileData.java +art/arcane/iris/engine/object/annotations/functions/LootTableKeyFunction.java +art/arcane/iris/engine/object/coral/CoralGenerator.java +art/arcane/iris/engine/object/crystal/CrystalGenerator.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 +art/arcane/iris/engine/object/fungi/FungusStemBuilder.java art/arcane/iris/engine/object/ruin/RuinBlockCanvas.java art/arcane/iris/engine/object/ruin/RuinDecoratorApplier.java art/arcane/iris/engine/object/ruin/RuinGenerator.java -art/arcane/iris/engine/object/TileData.java art/arcane/iris/engine/object/tree/ProceduralTreeGenerator.java art/arcane/iris/engine/object/tree/TreeBlockResolver.java art/arcane/iris/engine/object/tree/TreePlausibility.java @@ -153,6 +153,7 @@ art/arcane/iris/engine/platform/DummyBiomeProvider.java art/arcane/iris/engine/platform/DummyChunkGenerator.java art/arcane/iris/engine/platform/studio/generators/ObjectStudioGenerator.java art/arcane/iris/platform/bukkit/BukkitBiome.java +art/arcane/iris/platform/bukkit/BukkitBlockResolution.java art/arcane/iris/platform/bukkit/BukkitBlockState.java art/arcane/iris/platform/bukkit/BukkitEntityType.java art/arcane/iris/platform/bukkit/BukkitItem.java @@ -160,18 +161,17 @@ art/arcane/iris/platform/bukkit/BukkitPlatform.java art/arcane/iris/platform/bukkit/BukkitRegistries.java art/arcane/iris/platform/bukkit/BukkitScheduler.java art/arcane/iris/platform/bukkit/BukkitWorld.java -art/arcane/iris/util/common/data/B.java art/arcane/iris/util/common/data/IrisCustomData.java +art/arcane/iris/util/common/data/VectorMap.java art/arcane/iris/util/common/data/registry/Attributes.java art/arcane/iris/util/common/data/registry/KeyedRegistry.java art/arcane/iris/util/common/data/registry/Materials.java art/arcane/iris/util/common/data/registry/Particles.java art/arcane/iris/util/common/data/registry/RegistryTypeAdapter.java art/arcane/iris/util/common/data/registry/RegistryUtil.java -art/arcane/iris/util/common/data/VectorMap.java +art/arcane/iris/util/common/director/DirectorExecutor.java art/arcane/iris/util/common/director/context/VectorContextHandler.java art/arcane/iris/util/common/director/context/WorldContextHandler.java -art/arcane/iris/util/common/director/DirectorExecutor.java art/arcane/iris/util/common/director/handlers/BlockVectorHandler.java art/arcane/iris/util/common/director/handlers/PlayerHandler.java art/arcane/iris/util/common/director/handlers/VectorHandler.java @@ -188,8 +188,6 @@ art/arcane/iris/util/common/math/VectorMath.java art/arcane/iris/util/common/misc/Bindings.java art/arcane/iris/util/common/nbt/mca/Chunk.java art/arcane/iris/util/common/nbt/mca/NBTWorld.java -art/arcane/iris/util/common/plugin/chunk/ChunkTickets.java -art/arcane/iris/util/common/plugin/chunk/TicketHolder.java art/arcane/iris/util/common/plugin/Chunks.java art/arcane/iris/util/common/plugin/CommandDummy.java art/arcane/iris/util/common/plugin/IController.java @@ -200,6 +198,8 @@ art/arcane/iris/util/common/plugin/RouterCommand.java art/arcane/iris/util/common/plugin/VirtualCommand.java art/arcane/iris/util/common/plugin/VolmitPlugin.java art/arcane/iris/util/common/plugin/VolmitSender.java +art/arcane/iris/util/common/plugin/chunk/ChunkTickets.java +art/arcane/iris/util/common/plugin/chunk/TicketHolder.java art/arcane/iris/util/common/reflect/KeyedType.java art/arcane/iris/util/common/reflect/OldEnum.java art/arcane/iris/util/common/scheduling/J.java @@ -209,8 +209,8 @@ art/arcane/iris/util/project/hunk/view/ChunkDataHunkHolder.java art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java art/arcane/iris/util/project/hunk/view/ChunkHunkView.java art/arcane/iris/util/project/matter/IrisMatterSupport.java +art/arcane/iris/util/project/matter/WorldMatter.java art/arcane/iris/util/project/matter/slices/EntityMatter.java art/arcane/iris/util/project/matter/slices/TileMatter.java -art/arcane/iris/util/project/matter/WorldMatter.java art/arcane/iris/util/project/sentry/Attachments.java art/arcane/iris/util/project/sentry/ServerID.java diff --git a/core/src/main/java/art/arcane/iris/core/link/data/CraftEngineDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/CraftEngineDataProvider.java index 6e9ed81df..50411a82d 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/CraftEngineDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/CraftEngineDataProvider.java @@ -1,12 +1,13 @@ package art.arcane.iris.core.link.data; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.link.ExternalDataProvider; import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.nms.container.BlockProperty; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.data.cache.Cache; import art.arcane.iris.engine.framework.Engine; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.math.RNG; @@ -89,7 +90,7 @@ public class CraftEngineDataProvider extends ExternalDataProvider { throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); } - return IrisCustomData.of(B.getAir(), ExternalDataSVC.buildState(blockId, state)); + return IrisCustomData.of(BukkitBlockResolution.getAir(), ExternalDataSVC.buildState(blockId, state)); } @Override diff --git a/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java index 988fb1b05..7f05c16bc 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/KGeneratorsDataProvider.java @@ -1,11 +1,12 @@ package art.arcane.iris.core.link.data; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.link.ExternalDataProvider; import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import me.kryniowesegryderiusz.kgenerators.Main; import me.kryniowesegryderiusz.kgenerators.api.KGeneratorsAPI; @@ -48,7 +49,7 @@ public class KGeneratorsDataProvider extends ExternalDataProvider { if (block.getType() != Material.STRUCTURE_VOID) return; var existing = KGeneratorsAPI.getLoadedGeneratorLocation(block.getLocation()); if (existing != null) return; - block.setBlockData(B.getAir(), false); + block.setBlockData(BukkitBlockResolution.getAir(), false); var gen = Main.getGenerators().get(blockId.key()); if (gen == null) return; var loc = new GeneratorLocation(-1, gen, block.getLocation(), Main.getPlacedGenerators().getChunkInfo(block.getChunk()), null, null); diff --git a/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java index c74cdba04..c927759fe 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/MythicCrucibleDataProvider.java @@ -18,6 +18,8 @@ package art.arcane.iris.core.link.data; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.core.link.ExternalDataProvider; import art.arcane.iris.core.link.Identifier; @@ -27,7 +29,6 @@ import art.arcane.iris.core.nms.container.BlockProperty; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import io.lumine.mythic.bukkit.BukkitAdapter; import io.lumine.mythic.bukkit.utils.serialize.Chroma; @@ -72,7 +73,7 @@ public class MythicCrucibleDataProvider extends ExternalDataProvider { CustomBlockItemContext blockItemContext = crucibleItem.getBlockData(); FurnitureItemContext furnitureItemContext = crucibleItem.getFurnitureData(); if (furnitureItemContext != null) { - return IrisCustomData.of(B.getAir(), ExternalDataSVC.buildState(blockId, state)); + return IrisCustomData.of(BukkitBlockResolution.getAir(), ExternalDataSVC.buildState(blockId, state)); } else if (blockItemContext != null) { return blockItemContext.getBlockData(); } diff --git a/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java b/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java index 7a81c0dcc..c9390a1bc 100644 --- a/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java +++ b/core/src/main/java/art/arcane/iris/core/link/data/NexoDataProvider.java @@ -1,5 +1,7 @@ package art.arcane.iris.core.link.data; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import com.nexomc.nexo.api.NexoBlocks; import com.nexomc.nexo.api.NexoFurniture; import com.nexomc.nexo.api.NexoItems; @@ -12,7 +14,6 @@ import art.arcane.iris.core.nms.container.BlockProperty; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.framework.Engine; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import org.bukkit.Color; import org.bukkit.block.Block; @@ -51,7 +52,7 @@ public class NexoDataProvider extends ExternalDataProvider { throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); return IrisCustomData.of(data, blockState); } else if (NexoFurniture.isFurniture(blockId.key())) { - return IrisCustomData.of(B.getAir(), blockState); + return IrisCustomData.of(BukkitBlockResolution.getAir(), blockState); } throw new MissingResourceException("Failed to find BlockData!", blockId.namespace(), blockId.key()); diff --git a/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java b/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java index 999d2fd95..9605bea5b 100644 --- a/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java +++ b/core/src/main/java/art/arcane/iris/core/project/SchemaBuilder.java @@ -18,6 +18,8 @@ package art.arcane.iris.core.project; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.spi.IrisServices; import art.arcane.iris.core.link.Identifier; @@ -31,7 +33,6 @@ import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.core.nms.INMS; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.json.JSONArray; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.iris.util.common.reflect.KeyedType; @@ -275,7 +276,7 @@ public class SchemaBuilder { ja.put(i); } - for (String i : B.getBlockTypes()) { + for (String i : BukkitBlockResolution.getBlockTypes()) { ja.put(i); } @@ -330,7 +331,7 @@ public class SchemaBuilder { if (!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", B.getItemTypes()); + j.put("enum", BukkitBlockResolution.getItemTypes()); definitions.put(key, j); } @@ -438,7 +439,7 @@ public class SchemaBuilder { JSONArray any = new JSONArray(); prop.put("anyOf", any); - B.getBlockStates().forEach((blocks, properties) -> { + BukkitBlockResolution.getBlockStates().forEach((blocks, properties) -> { if (blocks.isEmpty()) return; String raw = blocks.getFirst().replace(':', '_'); @@ -570,7 +571,7 @@ public class SchemaBuilder { ja.put(i); } - for (String i : B.getBlockTypes()) { + for (String i : BukkitBlockResolution.getBlockTypes()) { ja.put(i); } @@ -588,7 +589,7 @@ public class SchemaBuilder { if (!definitions.containsKey(key)) { JSONObject j = new JSONObject(); - j.put("enum", B.getItemTypes()); + j.put("enum", BukkitBlockResolution.getItemTypes()); definitions.put(key, j); } diff --git a/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java b/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java index be7c559ae..387bbe54d 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java +++ b/core/src/main/java/art/arcane/iris/core/tools/IrisReflectiveAPI.java @@ -1,6 +1,7 @@ package art.arcane.iris.core.tools; -import art.arcane.iris.util.common.data.B; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import org.bukkit.World; import org.bukkit.block.data.BlockData; @@ -19,7 +20,7 @@ public class IrisReflectiveAPI { } public static void registerCustomBlockData(String namespace, String key, BlockData blockData) { - B.registerCustomBlockData(namespace, key, blockData); + BukkitBlockResolution.registerCustomBlockData(namespace, key, blockData); } public static void retainMantleData(String classname) { diff --git a/core/src/main/java/art/arcane/iris/core/tools/TreePlausibilizer.java b/core/src/main/java/art/arcane/iris/core/tools/TreePlausibilizer.java index f3cfb70f4..1b777d62b 100644 --- a/core/src/main/java/art/arcane/iris/core/tools/TreePlausibilizer.java +++ b/core/src/main/java/art/arcane/iris/core/tools/TreePlausibilizer.java @@ -18,8 +18,9 @@ package art.arcane.iris.core.tools; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.engine.object.IrisObject; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.VectorMap; import org.bukkit.Axis; import org.bukkit.Tag; @@ -47,8 +48,8 @@ public final class TreePlausibilizer { {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1} }; - private static final BlockData FALLBACK_LOG = B.get("minecraft:oak_log[axis=y]"); - private static final BlockData FALLBACK_LEAF = B.get("minecraft:oak_leaves[distance=1,persistent=false,waterlogged=false]"); + private static final BlockData FALLBACK_LOG = BukkitBlockResolution.get("minecraft:oak_log[axis=y]"); + private static final BlockData FALLBACK_LEAF = BukkitBlockResolution.get("minecraft:oak_leaves[distance=1,persistent=false,waterlogged=false]"); private TreePlausibilizer() { } diff --git a/core/src/main/java/art/arcane/iris/engine/decorator/DecoratorCore.java b/core/src/main/java/art/arcane/iris/engine/decorator/DecoratorCore.java index 25b76f65f..9af15220e 100644 --- a/core/src/main/java/art/arcane/iris/engine/decorator/DecoratorCore.java +++ b/core/src/main/java/art/arcane/iris/engine/decorator/DecoratorCore.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.decorator; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.mantle.EngineMantle; import art.arcane.iris.engine.object.IrisBiome; @@ -26,7 +28,6 @@ import art.arcane.iris.engine.object.IrisDecorator; import art.arcane.iris.platform.bukkit.BukkitBlockState; import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.spi.PlatformBlockState; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.math.RNG; import org.bukkit.Material; @@ -103,7 +104,7 @@ final class DecoratorCore { BlockData top = rawBd.clone(); ((Bisected) top).setHalf(Bisected.Half.TOP); try { - if (!caveSkipFluid || !B.isFluid(unwrap(data.get(x, height + 2, z)))) { + if (!caveSkipFluid || !BukkitBlockResolution.isFluid(unwrap(data.get(x, height + 2, z)))) { data.set(x, height + 2, z, BukkitBlockState.of(top)); } } catch (Throwable e) { @@ -114,7 +115,7 @@ final class DecoratorCore { bd = BukkitBlockState.of(bottom); } - if (B.isAir(unwrap(data.get(x, height + 1, z)))) { + if (BukkitBlockResolution.isAir(unwrap(data.get(x, height + 1, z)))) { data.set(x, height + 1, z, fixFacesForHunk(bd, data, x, z, realX, height + 1, realZ, mantle)); } } @@ -132,7 +133,7 @@ final class DecoratorCore { } if (decorator.getForceBlock() != null) { - if (caveSkipFluid && B.isFluid(unwrap(bdx))) { + if (caveSkipFluid && BukkitBlockResolution.isFluid(unwrap(bdx))) { return; } data.set(x, height, z, fixFacesForHunk( @@ -156,7 +157,7 @@ final class DecoratorCore { BlockData top = rawBd.clone(); ((Bisected) top).setHalf(Bisected.Half.TOP); try { - if (!caveSkipFluid || !B.isFluid(unwrap(data.get(x, height + 2, z)))) { + if (!caveSkipFluid || !BukkitBlockResolution.isFluid(unwrap(data.get(x, height + 2, z)))) { data.set(x, height + 2, z, BukkitBlockState.of(top)); } } catch (Throwable e) { @@ -167,7 +168,7 @@ final class DecoratorCore { bd = BukkitBlockState.of(bottom); } - if (B.isAir(unwrap(data.get(x, height + 1, z)))) { + if (BukkitBlockResolution.isAir(unwrap(data.get(x, height + 1, z)))) { data.set(x, height + 1, z, fixFacesForHunk(bd, data, x, z, realX, height + 1, realZ, mantle)); } } @@ -196,7 +197,7 @@ final class DecoratorCore { int stack = computeStack(decorator, rng, realX, realZ, irisData, effectiveMax); if (stack == 1) { - if (opts.caveSkipFluid && B.isFluid(unwrap(data.get(x, height, z)))) { + if (opts.caveSkipFluid && BukkitBlockResolution.isFluid(unwrap(data.get(x, height, z)))) { return; } data.set(x, height, z, decorator.pickBlockDataTop(rng, irisData, realX, realZ)); @@ -224,7 +225,7 @@ final class DecoratorCore { break; } - if (opts.caveSkipFluid && B.isFluid(unwrap(data.get(x, height + 1 + i, z)))) { + if (opts.caveSkipFluid && BukkitBlockResolution.isFluid(unwrap(data.get(x, height + 1 + i, z)))) { break; } @@ -242,7 +243,7 @@ final class DecoratorCore { int stack = computeStack(decorator, rng, realX, realZ, irisData, max); if (stack == 1) { - if (opts.caveSkipFluid && B.isFluid(unwrap(data.get(x, height, z)))) { + if (opts.caveSkipFluid && BukkitBlockResolution.isFluid(unwrap(data.get(x, height, z)))) { return; } data.set(x, height, z, fixFacesForHunk( @@ -266,7 +267,7 @@ final class DecoratorCore { bd = BukkitBlockState.of(dripstoneBlock(stack, i, BlockFace.DOWN)); } - if (opts.caveSkipFluid && B.isFluid(unwrap(data.get(x, h, z)))) { + if (opts.caveSkipFluid && BukkitBlockResolution.isFluid(unwrap(data.get(x, h, z)))) { break; } data.set(x, h, z, fixFacesForHunk(bd, data, x, z, realX, h, realZ, mantle)); @@ -336,7 +337,7 @@ final class DecoratorCore { static PlatformBlockState fixFacesForHunk(PlatformBlockState b, Hunk hunk, int rX, int rZ, int x, int y, int z, EngineMantle mantle) { BlockData rawB = unwrap(b); - if (!B.isVineBlock(rawB)) { + if (!BukkitBlockResolution.isVineBlock(rawB)) { return b; } MultipleFacing data = (MultipleFacing) rawB.clone(); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/Engine.java b/core/src/main/java/art/arcane/iris/engine/framework/Engine.java index 26c73a273..684fb397c 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/Engine.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/Engine.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.framework; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisServices; import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.events.IrisLootEvent; @@ -46,7 +48,6 @@ import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.iris.util.project.context.IrisContext; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.DataProvider; import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.documentation.BlockCoordinates; @@ -328,7 +329,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat } BlockData blockData = (BlockData) data.nativeHandle(); - if (B.isUpdatable(blockData)) { + if (BukkitBlockResolution.isUpdatable(blockData)) { getMantle().updateBlock(x, y, z); } if (blockData instanceof IrisCustomData) { @@ -405,14 +406,14 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat x &= 15; z &= 15; Block block = c.getBlock(x, y, z); - if (!B.isFluid(block.getBlockData())) { + if (!BukkitBlockResolution.isFluid(block.getBlockData())) { return; } - boolean u = B.isAir(block.getRelative(BlockFace.DOWN).getBlockData()) - || B.isAir(block.getRelative(BlockFace.WEST).getBlockData()) - || B.isAir(block.getRelative(BlockFace.EAST).getBlockData()) - || B.isAir(block.getRelative(BlockFace.SOUTH).getBlockData()) - || B.isAir(block.getRelative(BlockFace.NORTH).getBlockData()); + boolean u = BukkitBlockResolution.isAir(block.getRelative(BlockFace.DOWN).getBlockData()) + || BukkitBlockResolution.isAir(block.getRelative(BlockFace.WEST).getBlockData()) + || BukkitBlockResolution.isAir(block.getRelative(BlockFace.EAST).getBlockData()) + || BukkitBlockResolution.isAir(block.getRelative(BlockFace.SOUTH).getBlockData()) + || BukkitBlockResolution.isAir(block.getRelative(BlockFace.NORTH).getBlockData()); if (u) grid[x][z] = Math.max(grid[x][z], y); }); @@ -511,11 +512,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat Block block = c.getBlock(x, y, z); BlockData data = block.getBlockData(); blockUpdatedMetric(); - if (B.isStorage(data)) { + if (BukkitBlockResolution.isStorage(data)) { RNG rx = rf.nextParallelRNG(BlockPosition.toLong(x, y, z)); InventorySlotType slot = null; - if (B.isStorageChest(data)) { + if (BukkitBlockResolution.isStorageChest(data)) { slot = InventorySlotType.STORAGE; } @@ -608,7 +609,7 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat PlacedObject po = getObjectPlacement(rx, ry, rz, mc); if (po != null && po.getPlacement() != null) { - if (B.isStorageChest(b.getBlockData())) { + if (BukkitBlockResolution.isStorageChest(b.getBlockData())) { IrisLootTable table = po.getPlacement().getTable(BukkitBlockState.of(b.getBlockData()), getData()); if (table != null) { tables.add(table); diff --git a/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java b/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java index d9812664e..9fddc2d50 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/placer/WorldObjectPlacer.java @@ -1,5 +1,7 @@ package art.arcane.iris.engine.framework.placer; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.tools.IrisToolbelt; import art.arcane.iris.engine.data.cache.Cache; @@ -14,7 +16,6 @@ import art.arcane.iris.platform.bukkit.BukkitBlockState; import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.spi.PlatformBlockState; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.math.RNG; import art.arcane.volmlib.util.matter.MatterCavern; @@ -59,7 +60,7 @@ public class WorldObjectPlacer implements IObjectPlacer { if (y <= world.getMinHeight() || block.getType() == Material.BEDROCK) return; InventorySlotType slot = null; - if (B.isStorageChest(d)) { + if (BukkitBlockResolution.isStorageChest(d)) { slot = InventorySlotType.STORAGE; } diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java b/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java index c8f2910ce..b2c9abae1 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/MantleWriter.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.mantle; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.util.project.matter.TileWrapper; import com.google.common.collect.ImmutableList; @@ -32,7 +34,6 @@ import art.arcane.iris.engine.object.IrisPosition; import art.arcane.iris.engine.object.TileData; import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.volmlib.util.documentation.ChunkCoordinates; import art.arcane.volmlib.util.function.Function3; @@ -299,7 +300,7 @@ public class MantleWriter implements IObjectPlacer, AutoCloseable { @Override public boolean isSolid(int x, int y, int z) { - return B.isSolid((BlockData) get(x, y, z).nativeHandle()); + return BukkitBlockResolution.isSolid((BlockData) get(x, y, z).nativeHandle()); } @Override diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java index 515ed2f57..50635a3e5 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleFloatingObjectComponent.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.mantle.components; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.IrisComplex; import art.arcane.iris.engine.data.cache.Cache; @@ -37,7 +39,6 @@ import art.arcane.iris.engine.object.IrisObjectRotation; import art.arcane.iris.engine.object.IrisObjectTranslate; import art.arcane.iris.engine.object.ObjectPlaceMode; import art.arcane.iris.spi.IrisLogging; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.iris.util.project.context.ChunkContext; import art.arcane.volmlib.util.collection.KList; @@ -453,7 +454,7 @@ public class MantleFloatingObjectComponent extends IrisMantleComponent { BlockData data = (BlockData) state.nativeHandle(); PlatformBlockState existingState = placer.get(x, y, z); BlockData existing = existingState == null ? null : (BlockData) existingState.nativeHandle(); - boolean wouldReplace = existing != null && B.isSolid(existing) && B.isVineBlock(data); + boolean wouldReplace = existing != null && BukkitBlockResolution.isSolid(existing) && BukkitBlockResolution.isVineBlock(data); boolean placesBlock = !data.getMaterial().equals(Material.AIR) && !data.getMaterial().equals(Material.CAVE_AIR) && !wouldReplace; return data instanceof IrisCustomData || placesBlock; } diff --git a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java index 904181a12..9989d4c25 100644 --- a/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java +++ b/core/src/main/java/art/arcane/iris/engine/mantle/components/MantleObjectComponent.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.mantle.components; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.IrisSettings; import art.arcane.iris.engine.data.cache.Cache; import art.arcane.iris.engine.IrisComplex; @@ -35,7 +37,6 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.collection.KSet; import art.arcane.iris.util.project.context.ChunkedDoubleDataCache; import art.arcane.iris.util.project.context.ChunkContext; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.project.stream.ProceduralStream; import art.arcane.volmlib.util.documentation.BlockCoordinates; import art.arcane.volmlib.util.documentation.ChunkCoordinates; @@ -583,7 +584,7 @@ public class MantleObjectComponent extends IrisMantleComponent { if (marker != null) { writer.setData(b.getX(), b.getY(), b.getZ(), marker); } - if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && B.isStorageChest(unwrap(data))) { + if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && BukkitBlockResolution.isStorageChest(unwrap(data))) { writer.setData(b.getX(), b.getY(), b.getZ(), MatterStructurePOI.BURIED_TREASURE); } }, null, getData()); @@ -598,7 +599,7 @@ public class MantleObjectComponent extends IrisMantleComponent { if (marker != null) { writer.setData(b.getX(), b.getY(), b.getZ(), marker); } - if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && B.isStorageChest(unwrap(data))) { + if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && BukkitBlockResolution.isStorageChest(unwrap(data))) { writer.setData(b.getX(), b.getY(), b.getZ(), MatterStructurePOI.BURIED_TREASURE); } }, null, getData()); @@ -610,7 +611,7 @@ public class MantleObjectComponent extends IrisMantleComponent { if (marker != null) { writer.setData(b.getX(), b.getY(), b.getZ(), marker); } - if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && B.isStorageChest(unwrap(data))) { + if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && BukkitBlockResolution.isStorageChest(unwrap(data))) { writer.setData(b.getX(), b.getY(), b.getZ(), MatterStructurePOI.BURIED_TREASURE); } }, null, getData()); @@ -807,7 +808,7 @@ public class MantleObjectComponent extends IrisMantleComponent { if (marker != null) { writer.setData(b.getX(), b.getY(), b.getZ(), marker); } - if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && B.isStorageChest(unwrap(data))) { + if (effectivePlacement.isDolphinTarget() && effectivePlacement.isUnderwater() && BukkitBlockResolution.isStorageChest(unwrap(data))) { writer.setData(b.getX(), b.getY(), b.getZ(), MatterStructurePOI.BURIED_TREASURE); } }, null, getData()); @@ -987,7 +988,7 @@ public class MantleObjectComponent extends IrisMantleComponent { if (marker != null) { writer.setData(b.getX(), b.getY(), b.getZ(), marker); } - if (placement.isDolphinTarget() && placement.isUnderwater() && B.isStorageChest(unwrap(data))) { + if (placement.isDolphinTarget() && placement.isUnderwater() && BukkitBlockResolution.isStorageChest(unwrap(data))) { writer.setData(b.getX(), b.getY(), b.getZ(), MatterStructurePOI.BURIED_TREASURE); } }, null, getData()); diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java index 310ef8e26..bd73dcb25 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisDepositModifier.java @@ -18,11 +18,12 @@ package art.arcane.iris.engine.modifier; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedModifier; import art.arcane.iris.engine.object.*; import art.arcane.iris.util.project.context.ChunkContext; -import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.data.HeightMap; import art.arcane.iris.util.project.hunk.Hunk; import art.arcane.volmlib.util.mantle.runtime.MantleChunk; @@ -141,7 +142,7 @@ public class IrisDepositModifier extends EngineAssignedModifier 0) { - BlockData rawFluid = B.get(entry.getFluidBlock()); + BlockData rawFluid = BukkitBlockResolution.get(entry.getFluidBlock()); if (rawFluid == null) { - rawFluid = B.get("minecraft:water"); + rawFluid = BukkitBlockResolution.get("minecraft:water"); } PlatformBlockState fluid = BukkitBlockState.of(rawFluid); int fluidCap = Math.min(sample.thickness - 1, localFluidHeight); @@ -323,7 +325,7 @@ public class IrisFloatingChildBiomeModifier extends EngineAssignedModifier 0 && fluidTopY + 1 < chunkHeight && B.isAir(unwrap(output.get(xf, fluidTopY + 1, zf)))) { + if (fluidTopY > 0 && fluidTopY + 1 < chunkHeight && BukkitBlockResolution.isAir(unwrap(output.get(xf, fluidTopY + 1, zf)))) { try { seaSurfaceDecorator.decorate(xf, zf, wx, wx + 1, wx - 1, wz, wz + 1, wz - 1, output, target, fluidTopY, chunkHeight); } catch (Throwable e) { diff --git a/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java b/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java index b7834a43d..1ff3a2b3e 100644 --- a/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java +++ b/core/src/main/java/art/arcane/iris/engine/modifier/IrisPerfectionModifier.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.modifier; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.engine.framework.Engine; import art.arcane.iris.engine.framework.EngineAssignedModifier; import art.arcane.iris.util.project.context.ChunkContext; @@ -103,7 +105,7 @@ public class IrisPerfectionModifier extends EngineAssignedModifier= 0; k--) { PlatformBlockState b = output.get(finalI, k, j); BlockData rawB = unwrap(b); - boolean now = b != null && !(B.isAir(rawB) || B.isFluid(rawB)); + boolean now = b != null && !(BukkitBlockResolution.isAir(rawB) || BukkitBlockResolution.isFluid(rawB)); if (now != inside) { inside = now; @@ -127,16 +129,16 @@ public class IrisPerfectionModifier extends EngineAssignedModifier BlockData bc = (BlockData) getPostBlock(x, hc, z, currentPostX, currentPostZ, currentData).nativeHandle(); BlockData bd = (BlockData) getPostBlock(x, hd, z, currentPostX, currentPostZ, currentData).nativeHandle(); g = 0; - g = B.isSolid(ba) ? g + 1 : g; - g = B.isSolid(bb) ? g + 1 : g; - g = B.isSolid(bc) ? g + 1 : g; - g = B.isSolid(bd) ? g + 1 : g; + g = BukkitBlockResolution.isSolid(ba) ? g + 1 : g; + g = BukkitBlockResolution.isSolid(bb) ? g + 1 : g; + g = BukkitBlockResolution.isSolid(bc) ? g + 1 : g; + g = BukkitBlockResolution.isSolid(bd) ? g + 1 : g; if (g >= 3) { setPostBlock(x, h + 1, z, getPostBlock(x, h, z, currentPostX, currentPostZ, currentData), currentPostX, currentPostZ, currentData); @@ -183,7 +185,7 @@ public class IrisPostModifier extends EngineAssignedModifier if (d != null) { BlockData rawD = (BlockData) d.nativeHandle(); - boolean cancel = B.isAir(rawD); + boolean cancel = BukkitBlockResolution.isAir(rawD); if (rawD.getMaterial().equals(Material.SNOW) && h + 1 <= getDimension().getFluidHeight()) { cancel = true; @@ -229,23 +231,23 @@ public class IrisPostModifier extends EngineAssignedModifier // Foliage b = (BlockData) getPostBlock(x, h + 1, z, currentPostX, currentPostZ, currentData).nativeHandle(); - if (B.isVineBlock(b) && b instanceof MultipleFacing) { + if (BukkitBlockResolution.isVineBlock(b) && b instanceof MultipleFacing) { MultipleFacing f = (MultipleFacing) b.clone(); int finalH = h + 1; f.getAllowedFaces().forEach(face -> { BlockData d = (BlockData) getPostBlock(x + face.getModX(), finalH + face.getModY(), z + face.getModZ(), currentPostX, currentPostZ, currentData).nativeHandle(); - f.setFace(face, !B.isAir(d) && !B.isVineBlock(d)); + f.setFace(face, !BukkitBlockResolution.isAir(d) && !BukkitBlockResolution.isVineBlock(d)); }); if (!f.equals(b)) { setPostBlock(x, h + 1, z, BukkitBlockState.of(f), currentPostX, currentPostZ, currentData); } } - if (B.isFoliage(b) || b.getMaterial().equals(Material.DEAD_BUSH)) { + if (BukkitBlockResolution.isFoliage(b) || b.getMaterial().equals(Material.DEAD_BUSH)) { Material onto = ((BlockData) getPostBlock(x, h, z, currentPostX, currentPostZ, currentData).nativeHandle()).getMaterial(); - if (!B.canPlaceOnto(b.getMaterial(), onto) && !B.isDecorant(b)) { + if (!BukkitBlockResolution.canPlaceOnto(b.getMaterial(), onto) && !BukkitBlockResolution.isDecorant(b)) { setPostBlock(x, h + 1, z, AIR, currentPostX, currentPostZ, currentData); } } @@ -263,7 +265,7 @@ public class IrisPostModifier extends EngineAssignedModifier public boolean isSolid(int x, int y, int z, int currentPostX, int currentPostZ, Hunk currentData) { BlockData d = (BlockData) getPostBlock(x, y, z, currentPostX, currentPostZ, currentData).nativeHandle(); - return d.getMaterial().isSolid() && !B.isVineBlock(d); + return d.getMaterial().isSolid() && !BukkitBlockResolution.isVineBlock(d); } public boolean isSolidNonSlab(int x, int y, int z, int currentPostX, int currentPostZ, Hunk currentData) { diff --git a/core/src/main/java/art/arcane/iris/engine/object/BlockDataMergeSupport.java b/core/src/main/java/art/arcane/iris/engine/object/BlockDataMergeSupport.java index f2f7de9dd..4c1867062 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/BlockDataMergeSupport.java +++ b/core/src/main/java/art/arcane/iris/engine/object/BlockDataMergeSupport.java @@ -2,7 +2,7 @@ package art.arcane.iris.engine.object; import art.arcane.iris.platform.bukkit.BukkitBlockState; import art.arcane.iris.spi.PlatformBlockState; -import art.arcane.iris.util.common.data.B; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; import org.bukkit.block.data.BlockData; import java.util.function.Function; @@ -12,7 +12,7 @@ final class BlockDataMergeSupport { } static PlatformBlockState merge(PlatformBlockState base, PlatformBlockState update) { - BlockData merged = merge((BlockData) base.nativeHandle(), (BlockData) update.nativeHandle(), B::get); + BlockData merged = merge((BlockData) base.nativeHandle(), (BlockData) update.nativeHandle(), BukkitBlockResolution::get); return merged == null ? null : BukkitBlockState.of(merged); } diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java b/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java index 3f1104ac3..7035c7416 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisBlockData.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.loader.IrisRegistrant; @@ -173,7 +175,7 @@ public class IrisBlockData extends IrisRegistrant { IrisLogging.debug("Block Data used " + sx + " (CUSTOM)"); } - BlockData bx = B.get(sx); + BlockData bx = BukkitBlockResolution.get(sx); if (bx != null) { return BukkitBlockState.of(bx); @@ -186,7 +188,7 @@ public class IrisBlockData extends IrisRegistrant { } String ss = keyify(getBlock()) + computeProperties(); - b = B.get(ss); + b = BukkitBlockResolution.get(ss); if (debug) { IrisLogging.debug("Block Data used " + ss); diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java index 11fd89d31..4c1e1f0a2 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCompat.java @@ -18,10 +18,11 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisLogging; import com.google.gson.Gson; import art.arcane.volmlib.util.collection.KList; -import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.io.IO; import art.arcane.volmlib.util.json.JSONObject; import art.arcane.iris.util.common.scheduling.J; @@ -266,7 +267,7 @@ public class IrisCompat { String buf = n; int err = 16; - BlockData tx = B.getOrNull(buf, false); + BlockData tx = BukkitBlockResolution.getOrNull(buf, false); if (tx != null) { return tx; @@ -276,7 +277,7 @@ public class IrisCompat { while (true) { if (err-- <= 0) { IrisLogging.error("Can't find block data for " + n); - return B.getNoCompat("STONE"); + return BukkitBlockResolution.getNoCompat("STONE"); } String m = buf; if (m.contains("[")) { @@ -300,14 +301,14 @@ public class IrisCompat { } IrisLogging.error("Can't find block data for " + n); - return B.getNoCompat("STONE"); + return BukkitBlockResolution.getNoCompat("STONE"); } } public Material getItem(String n) { String buf = n; int err = 16; - Material txf = B.getMaterialOrNull(buf); + Material txf = BukkitBlockResolution.getMaterialOrNull(buf); if (txf != null) { return txf; @@ -318,7 +319,7 @@ public class IrisCompat { searching: while (true) { if (nomore < 0) { - return B.getMaterial("STONE"); + return BukkitBlockResolution.getMaterial("STONE"); } nomore--; @@ -343,7 +344,7 @@ public class IrisCompat { } buf = n; - BlockData tx = B.getOrNull(buf, false); + BlockData tx = BukkitBlockResolution.getOrNull(buf, false); if (tx != null) { return tx.getMaterial(); @@ -353,13 +354,13 @@ public class IrisCompat { searching: while (true) { if (nomore < 0) { - return B.getMaterial("STONE"); + return BukkitBlockResolution.getMaterial("STONE"); } nomore--; if (err-- <= 0) { - return B.getMaterial("STONE"); + return BukkitBlockResolution.getMaterial("STONE"); } for (IrisCompatabilityBlockFilter i : blockFilters) { @@ -375,7 +376,7 @@ public class IrisCompat { } } - return B.getMaterial("STONE"); + return BukkitBlockResolution.getMaterial("STONE"); } } } diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java index 5d063dc6a..dd8d1fd8d 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityBlockFilter.java @@ -18,11 +18,12 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Required; import art.arcane.iris.spi.IrisLogging; -import art.arcane.iris.util.common.data.B; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -51,13 +52,13 @@ public class IrisCompatabilityBlockFilter { } public BlockData getFind() { - return findData.aquire(() -> B.get(when)); + return findData.aquire(() -> BukkitBlockResolution.get(when)); } public BlockData getReplace() { return replaceData.aquire(() -> { - BlockData b = B.getOrNull(supplement, false); + BlockData b = BukkitBlockResolution.getOrNull(supplement, false); if (b == null) { return null; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java index c6518add5..ef960581d 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisCompatabilityItemFilter.java @@ -18,11 +18,12 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.Desc; import art.arcane.iris.engine.object.annotations.Required; -import art.arcane.iris.util.common.data.B; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @@ -48,13 +49,13 @@ public class IrisCompatabilityItemFilter { } public Material getFind() { - return findData.aquire(() -> B.getMaterial(when)); + return findData.aquire(() -> BukkitBlockResolution.getMaterial(when)); } public Material getReplace() { return replaceData.aquire(() -> { - Material b = B.getMaterialOrNull(supplement); + Material b = BukkitBlockResolution.getMaterialOrNull(supplement); if (b == null) { return null; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisDepositVariant.java b/core/src/main/java/art/arcane/iris/engine/object/IrisDepositVariant.java index 85997ce16..459808e57 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisDepositVariant.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisDepositVariant.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.Desc; @@ -25,7 +27,6 @@ import art.arcane.iris.engine.object.annotations.MaxNumber; import art.arcane.iris.engine.object.annotations.MinNumber; import art.arcane.iris.engine.object.annotations.Required; import art.arcane.iris.engine.object.annotations.Snippet; -import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.collection.KMap; import lombok.AllArgsConstructor; import lombok.Data; @@ -75,8 +76,8 @@ public class IrisDepositVariant { KMap out = new KMap<>(); for (java.util.Map.Entry entry : remap.entrySet()) { - BlockData source = B.getOrNull(entry.getKey(), false); - BlockData target = B.getOrNull(entry.getValue(), true); + BlockData source = BukkitBlockResolution.getOrNull(entry.getKey(), false); + BlockData target = BukkitBlockResolution.getOrNull(entry.getValue(), true); if (source == null || target == null) { continue; diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java b/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java index 10bfcb34b..7aeb52946 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisLoot.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisServices; import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.service.ExternalDataSVC; @@ -27,7 +29,6 @@ import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.spi.IrisLogging; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.format.C; import art.arcane.volmlib.util.format.Form; import art.arcane.volmlib.util.math.RNG; @@ -108,7 +109,7 @@ public class IrisLoot { private KMap customNbt; public Material getType() { - return B.getMaterial(type); + return BukkitBlockResolution.getMaterial(type); } public ItemStack get(boolean debug, RNG rng) { diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java b/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java index a7b2c4982..1b17ab5a2 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisObject.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.loader.IrisRegistrant; @@ -328,7 +330,7 @@ public class IrisObject extends IrisRegistrant { for (int i = 0; i < s; i++) { Vector3i pos = new Vector3i(din.readShort(), din.readShort(), din.readShort()); - BlockData data = B.get(din.readUTF()); + BlockData data = BukkitBlockResolution.get(din.readUTF()); if (isStructureMarker(data)) { continue; } @@ -370,7 +372,7 @@ public class IrisObject extends IrisRegistrant { for (i = 0; i < s; i++) { Vector3i pos = new Vector3i(din.readShort(), din.readShort(), din.readShort()); - BlockData data = B.get(palette.get(din.readShort())); + BlockData data = BukkitBlockResolution.get(palette.get(din.readShort())); if (isStructureMarker(data)) { continue; } @@ -1098,7 +1100,7 @@ public class IrisObject extends IrisRegistrant { zz += config.warp(rng, i.getZ() + z, i.getY() + y, i.getX() + x, getLoader()); } - if (yv < 0 && (config.getMode().equals(ObjectPlaceMode.PAINT)) && !B.isVineBlock((BlockData) data.nativeHandle())) { + if (yv < 0 && (config.getMode().equals(ObjectPlaceMode.PAINT)) && !BukkitBlockResolution.isVineBlock((BlockData) data.nativeHandle())) { yy = (int) Math.round(i.getY()) + Math.floorDiv(h, 2) + placer.getHighest(xx, zz, getLoader(), config.isUnderwater()); } @@ -1124,13 +1126,13 @@ public class IrisObject extends IrisRegistrant { data = BukkitBlockState.of(waterlogged); } - if (B.isVineBlock((BlockData) data.nativeHandle())) { + if (BukkitBlockResolution.isVineBlock((BlockData) data.nativeHandle())) { MultipleFacing f = (MultipleFacing) ((BlockData) data.nativeHandle()).clone(); boolean facesChanged = false; for (BlockFace face : f.getAllowedFaces()) { PlatformBlockState facingState = placer.get(xx + face.getModX(), yy + face.getModY(), zz + face.getModZ()); BlockData facingBlock = facingState == null ? null : (BlockData) facingState.nativeHandle(); - if (B.isSolid(facingBlock) && !B.isVineBlock(facingBlock)) { + if (BukkitBlockResolution.isSolid(facingBlock) && !BukkitBlockResolution.isVineBlock(facingBlock)) { f.setFace(face, true); facesChanged = true; } @@ -1151,7 +1153,7 @@ public class IrisObject extends IrisRegistrant { PlatformBlockState existingState = placer.get(xx, yy, zz); BlockData existingRaw = existingState == null ? null : (BlockData) existingState.nativeHandle(); BlockData rawData = (BlockData) data.nativeHandle(); - boolean wouldReplace = B.isSolid(existingRaw) && B.isVineBlock(rawData); + boolean wouldReplace = BukkitBlockResolution.isSolid(existingRaw) && BukkitBlockResolution.isVineBlock(rawData); boolean place = !rawData.getMaterial().equals(Material.AIR) && !rawData.getMaterial().equals(Material.CAVE_AIR) && !wouldReplace; if (rawData instanceof IrisCustomData || place) { @@ -1368,7 +1370,7 @@ public class IrisObject extends IrisRegistrant { for (int j = lowest + y; j > lowerBound; j--) { PlatformBlockState fluidState = placer.get(xx, j, zz); - if (B.isFluid(fluidState == null ? null : (BlockData) fluidState.nativeHandle())) { + if (BukkitBlockResolution.isFluid(fluidState == null ? null : (BlockData) fluidState.nativeHandle())) { break; } if (eroding) { @@ -1384,13 +1386,13 @@ public class IrisObject extends IrisRegistrant { } } - if (B.isVineBlock((BlockData) d.nativeHandle())) { + if (BukkitBlockResolution.isVineBlock((BlockData) d.nativeHandle())) { MultipleFacing f = (MultipleFacing) ((BlockData) d.nativeHandle()).clone(); boolean facesChanged = false; for (BlockFace face : f.getAllowedFaces()) { PlatformBlockState facingState = placer.get(xx + face.getModX(), j + face.getModY(), zz + face.getModZ()); BlockData facingBlock = facingState == null ? null : (BlockData) facingState.nativeHandle(); - if (B.isSolid(facingBlock) && !B.isVineBlock(facingBlock)) { + if (BukkitBlockResolution.isSolid(facingBlock) && !BukkitBlockResolution.isVineBlock(facingBlock)) { f.setFace(face, true); facesChanged = true; } @@ -1497,7 +1499,7 @@ public class IrisObject extends IrisRegistrant { targetY = Math.max(worldMin + 1, Math.min(worldMax, targetY)); if (targetY > origY) { PlatformBlockState fill = complex != null ? complex.getRockStream().get(cx, cz) : null; - if (fill == null || B.isAir((BlockData) fill.nativeHandle())) { + if (fill == null || BukkitBlockResolution.isAir((BlockData) fill.nativeHandle())) { fill = STONE; } for (int yy = origY + 1; yy <= targetY; yy++) { @@ -1568,7 +1570,7 @@ public class IrisObject extends IrisRegistrant { } BlockData raw = (BlockData) existing.nativeHandle(); - return B.isWater(raw) || B.isWaterLogged(raw); + return BukkitBlockResolution.isWater(raw) || BukkitBlockResolution.isWaterLogged(raw); } public IrisObject rotateCopy(IrisObjectRotation rt) { diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java b/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java index 4221fb4b5..c6e93bf4a 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisObjectPlacement.java @@ -18,6 +18,8 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.framework.Engine; @@ -26,7 +28,6 @@ import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.spi.PlatformBlockState; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.DataProvider; import art.arcane.volmlib.util.data.WeightedRandom; import art.arcane.volmlib.util.math.RNG; @@ -321,7 +322,7 @@ public class IrisObjectPlacement { public IrisLootTable getTable(PlatformBlockState state, IrisData dataManager) { TableCache cache = getCache(dataManager); BlockData data = (BlockData) state.nativeHandle(); - if (B.isStorageChest(data)) { + if (BukkitBlockResolution.isStorageChest(data)) { IrisLootTable picked = null; if (cache.exact.containsKey(data.getMaterial()) && cache.exact.get(data.getMaterial()).containsKey(data)) { picked = cache.exact.get(data.getMaterial()).get(data).pullRandom(); diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisProceduralBlocks.java b/core/src/main/java/art/arcane/iris/engine/object/IrisProceduralBlocks.java index a848295fe..8f97e10ca 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisProceduralBlocks.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisProceduralBlocks.java @@ -18,10 +18,11 @@ package art.arcane.iris.engine.object; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.platform.bukkit.BukkitBlockState; import art.arcane.iris.spi.PlatformBlockState; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.math.Vector3i; import art.arcane.volmlib.util.math.RNG; import org.bukkit.block.data.BlockData; @@ -48,7 +49,7 @@ public final class IrisProceduralBlocks { return state == null ? null : ((BlockData) state.nativeHandle()).clone(); } if (block != null && !block.isEmpty()) { - BlockData bd = B.getOrNull(block, false); + BlockData bd = BukkitBlockResolution.getOrNull(block, false); return bd == null ? null : bd.clone(); } return null; diff --git a/core/src/main/java/art/arcane/iris/engine/object/tree/TreeBlockResolver.java b/core/src/main/java/art/arcane/iris/engine/object/tree/TreeBlockResolver.java index f77d1c334..3bf810f29 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/tree/TreeBlockResolver.java +++ b/core/src/main/java/art/arcane/iris/engine/object/tree/TreeBlockResolver.java @@ -18,12 +18,13 @@ package art.arcane.iris.engine.object.tree; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.engine.object.IrisMaterialPalette; import art.arcane.iris.engine.object.IrisProceduralTree; import art.arcane.iris.engine.object.IrisTreeDecorator; import art.arcane.iris.spi.PlatformBlockState; -import art.arcane.iris.util.common.data.B; import art.arcane.volmlib.util.math.RNG; import org.bukkit.Axis; import org.bukkit.Material; @@ -106,10 +107,10 @@ public final class TreeBlockResolver { } if (tree.getWeightedSecondaryLeaves() != null && !tree.getWeightedSecondaryLeaves().isEmpty()) { String picked = pickWeighted(tree, posRng); - return picked == null ? null : cloneOrNull(B.getOrNull(picked, false)); + return picked == null ? null : cloneOrNull(BukkitBlockResolution.getOrNull(picked, false)); } if (tree.getSecondaryLeaves() != null && !tree.getSecondaryLeaves().isEmpty()) { - return cloneOrNull(B.getOrNull(tree.getSecondaryLeaves(), false)); + return cloneOrNull(BukkitBlockResolution.getOrNull(tree.getSecondaryLeaves(), false)); } return null; } @@ -139,7 +140,7 @@ public final class TreeBlockResolver { return state == null ? null : ((BlockData) state.nativeHandle()).clone(); } if (block != null && !block.isEmpty()) { - return cloneOrNull(B.getOrNull(block, false)); + return cloneOrNull(BukkitBlockResolution.getOrNull(block, false)); } return null; } diff --git a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockResolution.java b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockResolution.java new file mode 100644 index 000000000..461623353 --- /dev/null +++ b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockResolution.java @@ -0,0 +1,284 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2026 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package art.arcane.iris.platform.bukkit; + +import art.arcane.iris.core.IrisSettings; +import art.arcane.iris.core.link.Identifier; +import art.arcane.iris.core.link.data.DataType; +import art.arcane.iris.core.nms.INMS; +import art.arcane.iris.core.nms.container.BlockProperty; +import art.arcane.iris.core.service.ExternalDataSVC; +import art.arcane.iris.engine.object.IrisCompat; +import art.arcane.iris.spi.IrisLogging; +import art.arcane.iris.spi.IrisServices; +import art.arcane.iris.util.common.data.registry.Materials; +import art.arcane.iris.util.common.reflect.KeyedType; +import art.arcane.volmlib.util.collection.KList; +import art.arcane.volmlib.util.collection.KMap; +import art.arcane.volmlib.util.data.BSupport; +import it.unimi.dsi.fastutil.ints.IntSet; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.block.data.BlockData; + +import java.util.List; +import java.util.Locale; +import java.util.Optional; + +public final class BukkitBlockResolution { + private static final BSupportImpl BASE = new BSupportImpl(); + + private BukkitBlockResolution() { + } + + private static final class BSupportImpl extends BSupport { + @Override + protected void warn(String message) { + IrisLogging.warn(message); + } + + @Override + protected void debug(String message) { + IrisLogging.debug(message); + } + + @Override + protected void reportError(Throwable throwable) { + IrisLogging.reportError(throwable); + } + + @Override + protected void error(String message) { + IrisLogging.error(message); + } + + @Override + protected Material shortGrassMaterial() { + return Materials.GRASS; + } + + @Override + protected void appendExtraFoliageMaterials(IntSet foliage) { + } + + @Override + protected boolean includeLitInUpdatable() { + return false; + } + + @Override + protected BlockData resolveCompatBlock(String bdxf) { + if (bdxf.contains(":")) { + if (bdxf.startsWith("minecraft:")) { + return IrisServices.get(IrisCompat.class).getBlock(bdxf); + } + return null; + } + return IrisServices.get(IrisCompat.class).getBlock(bdxf); + } + + @Override + protected BlockData resolveExternalBlockData(String ix) { + if (ix.startsWith("minecraft:") || !ix.contains(":")) { + return null; + } + + Identifier key = Identifier.fromString(ix); + Optional bd = IrisServices.get(ExternalDataSVC.class).getBlockData(key); + debug("Loading block data " + key); + return bd.orElse(null); + } + + @Override + protected boolean shouldPreventLeafDecay() { + return IrisSettings.get().getGenerator().isPreventLeafDecay(); + } + + @Override + protected void appendExternalBlockTypes(KList blockTypes) { + for (Identifier id : IrisServices.get(ExternalDataSVC.class).getAllIdentifiers(DataType.BLOCK)) { + blockTypes.add(id.toString()); + } + } + + @Override + protected void appendExternalItemTypes(KList itemTypes) { + for (Identifier id : IrisServices.get(ExternalDataSVC.class).getAllIdentifiers(DataType.ITEM)) { + itemTypes.add(id.toString()); + } + } + + @Override + protected KMap, List> loadExternalBlockStates() { + KMap, List> flipped = new KMap<>(); + INMS.get().getBlockProperties().forEach((k, v) -> { + NamespacedKey key = KeyedType.getKey(k); + String serialized = key == null ? k.name().toLowerCase(Locale.ROOT) : key.toString(); + flipped.computeIfAbsent(v, $ -> new KList<>()).add(serialized); + }); + + var emptyStates = flipped.computeIfAbsent(new KList<>(0), $ -> new KList<>()); + for (var pair : IrisServices.get(ExternalDataSVC.class).getAllBlockProperties()) { + if (pair.getB().isEmpty()) { + emptyStates.add(pair.getA().toString()); + } else { + flipped.computeIfAbsent(pair.getB(), $ -> new KList<>()).add(pair.getA().toString()); + } + } + + KMap, List> states = new KMap<>(); + flipped.forEach((k, v) -> { + var old = states.put(v, k); + if (old != null) { + error("Duplicate block state: " + v + " (" + old + " and " + k + ")"); + } + }); + + return states; + } + } + + public static BlockData toDeepSlateOre(BlockData block, BlockData ore) { + return BASE.toDeepSlateOre(block, ore); + } + + public static boolean isDeepSlate(BlockData blockData) { + return BASE.isDeepSlate(blockData); + } + + public static boolean isOre(BlockData blockData) { + return BASE.isOre(blockData); + } + + public static boolean canPlaceOnto(Material mat, Material onto) { + return BASE.canPlaceOnto(mat, onto); + } + + public static boolean isFoliagePlantable(BlockData d) { + return BASE.isFoliagePlantable(d); + } + + public static boolean isFoliagePlantable(Material d) { + return BASE.isFoliagePlantable(d); + } + + public static boolean isWater(BlockData b) { + return BASE.isWater(b); + } + + public static BlockData getAir() { + return BASE.getAir(); + } + + public static Material getMaterialOrNull(String bdx) { + return BASE.getMaterialOrNull(bdx); + } + + public static Material getMaterial(String bdx) { + return BASE.getMaterial(bdx); + } + + public static boolean isSolid(BlockData mat) { + return BASE.isSolid(mat); + } + + public static BlockData getOrNull(String bdxf) { + return BASE.getOrNull(bdxf); + } + + public static BlockData getOrNull(String bdxf, boolean warn) { + return BASE.getOrNull(bdxf, warn); + } + + public static BlockData getNoCompat(String bdxf) { + return BASE.getNoCompat(bdxf); + } + + public static BlockData get(String bdxf) { + return BASE.get(bdxf); + } + + public static boolean isStorage(BlockData mat) { + return BASE.isStorage(mat); + } + + public static boolean isStorageChest(BlockData mat) { + return BASE.isStorageChest(mat); + } + + public static boolean isLit(BlockData mat) { + return BASE.isLit(mat); + } + + public static boolean isUpdatable(BlockData mat) { + return BASE.isUpdatable(mat); + } + + public static boolean isFoliage(Material d) { + return BASE.isFoliage(d); + } + + public static boolean isFoliage(BlockData d) { + return BASE.isFoliage(d); + } + + public static boolean isDecorant(BlockData m) { + return BASE.isDecorant(m); + } + + public static KList get(KList find) { + return BASE.get(find); + } + + public static boolean isFluid(BlockData d) { + return BASE.isFluid(d); + } + + public static boolean isAirOrFluid(BlockData d) { + return BASE.isAirOrFluid(d); + } + + public static boolean isAir(BlockData d) { + return BASE.isAir(d); + } + + public static synchronized String[] getBlockTypes() { + return BASE.getBlockTypes(); + } + + public static synchronized KMap, List> getBlockStates() { + return BASE.getBlockStates(); + } + + public static String[] getItemTypes() { + return BASE.getItemTypes(); + } + + public static boolean isWaterLogged(BlockData b) { + return BASE.isWaterLogged(b); + } + + public static void registerCustomBlockData(String namespace, String key, BlockData blockData) { + BASE.registerCustomBlockData(namespace, key, blockData); + } + + public static boolean isVineBlock(BlockData data) { + return BASE.isVineBlock(data); + } +} diff --git a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockState.java b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockState.java index c0513856f..57aac5217 100644 --- a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockState.java +++ b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitBlockState.java @@ -20,7 +20,6 @@ package art.arcane.iris.platform.bukkit; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.spi.PlatformBlockState; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import org.bukkit.Bukkit; import org.bukkit.block.data.BlockData; @@ -40,6 +39,10 @@ public final class BukkitBlockState implements PlatformBlockState { private final String namespace; private volatile Boolean air; private volatile Boolean solid; + private volatile Boolean fluid; + private volatile Boolean water; + private volatile Boolean foliage; + private volatile Boolean decorant; private BukkitBlockState(BlockData data, String key) { this.data = data; @@ -123,7 +126,7 @@ public final class BukkitBlockState implements PlatformBlockState { public boolean isAir() { Boolean cached = air; if (cached == null) { - cached = B.isAir(data); + cached = BukkitBlockResolution.isAir(data); air = cached; } return cached; @@ -133,12 +136,107 @@ public final class BukkitBlockState implements PlatformBlockState { public boolean isSolid() { Boolean cached = solid; if (cached == null) { - cached = B.isSolid(data); + cached = BukkitBlockResolution.isSolid(data); solid = cached; } return cached; } + @Override + public boolean isFluid() { + Boolean cached = fluid; + if (cached == null) { + cached = BukkitBlockResolution.isFluid(data); + fluid = cached; + } + return cached; + } + + @Override + public boolean isWater() { + Boolean cached = water; + if (cached == null) { + cached = BukkitBlockResolution.isWater(data); + water = cached; + } + return cached; + } + + @Override + public boolean isWaterLogged() { + return BukkitBlockResolution.isWaterLogged(data); + } + + @Override + public boolean isLit() { + return BukkitBlockResolution.isLit(data); + } + + @Override + public boolean isUpdatable() { + return BukkitBlockResolution.isUpdatable(data); + } + + @Override + public boolean isFoliage() { + Boolean cached = foliage; + if (cached == null) { + cached = BukkitBlockResolution.isFoliage(data); + foliage = cached; + } + return cached; + } + + @Override + public boolean isFoliagePlantable() { + return BukkitBlockResolution.isFoliagePlantable(data); + } + + @Override + public boolean isDecorant() { + Boolean cached = decorant; + if (cached == null) { + cached = BukkitBlockResolution.isDecorant(data); + decorant = cached; + } + return cached; + } + + @Override + public boolean isStorage() { + return BukkitBlockResolution.isStorage(data); + } + + @Override + public boolean isStorageChest() { + return BukkitBlockResolution.isStorageChest(data); + } + + @Override + public boolean isOre() { + return BukkitBlockResolution.isOre(data); + } + + @Override + public boolean isDeepSlate() { + return BukkitBlockResolution.isDeepSlate(data); + } + + @Override + public boolean isVineBlock() { + return BukkitBlockResolution.isVineBlock(data); + } + + @Override + public boolean canPlaceOnto(PlatformBlockState onto) { + return BukkitBlockResolution.canPlaceOnto(data.getMaterial(), ((BlockData) onto.nativeHandle()).getMaterial()); + } + + @Override + public boolean matches(PlatformBlockState state) { + return data.matches((BlockData) state.nativeHandle()); + } + @Override public boolean hasTileEntity() { return INMS.get().hasTile(data.getMaterial()); diff --git a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitRegistries.java b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitRegistries.java index 5b4bf20aa..bd8112cec 100644 --- a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitRegistries.java +++ b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitRegistries.java @@ -24,7 +24,6 @@ import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformEntityType; import art.arcane.iris.spi.PlatformItem; import art.arcane.iris.spi.PlatformRegistries; -import art.arcane.iris.util.common.data.B; import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.Registry; @@ -41,10 +40,32 @@ import java.util.List; public final class BukkitRegistries implements PlatformRegistries { @Override public PlatformBlockState block(String key) { - BlockData data = B.get(key); + BlockData data = BukkitBlockResolution.get(key); return data == null ? null : BukkitBlockState.of(data); } + @Override + public PlatformBlockState blockOrNull(String key) { + BlockData data = BukkitBlockResolution.getOrNull(key); + return data == null ? null : BukkitBlockState.of(data); + } + + @Override + public PlatformBlockState blockOrNull(String key, boolean warn) { + BlockData data = BukkitBlockResolution.getOrNull(key, warn); + return data == null ? null : BukkitBlockState.of(data); + } + + @Override + public PlatformBlockState air() { + return BukkitBlockState.of(BukkitBlockResolution.getAir()); + } + + @Override + public PlatformBlockState deepSlateOre(PlatformBlockState block, PlatformBlockState ore) { + return BukkitBlockState.of(BukkitBlockResolution.toDeepSlateOre((BlockData) block.nativeHandle(), (BlockData) ore.nativeHandle())); + } + @Override public PlatformBiome biome(String key) { NamespacedKey namespacedKey = NamespacedKey.fromString(key); diff --git a/core/src/main/java/art/arcane/iris/util/common/data/B.java b/core/src/main/java/art/arcane/iris/util/common/data/B.java index 3a7d1f7e3..ba174c1b4 100644 --- a/core/src/main/java/art/arcane/iris/util/common/data/B.java +++ b/core/src/main/java/art/arcane/iris/util/common/data/B.java @@ -1,309 +1,107 @@ package art.arcane.iris.util.common.data; +import art.arcane.iris.spi.IrisPlatforms; +import art.arcane.iris.spi.PlatformBlockState; import art.arcane.volmlib.util.collection.KList; -import art.arcane.volmlib.util.collection.KMap; -import art.arcane.volmlib.util.data.BSupport; -import art.arcane.iris.spi.IrisLogging; -import art.arcane.iris.spi.IrisServices; -import art.arcane.iris.engine.object.IrisCompat; -import art.arcane.iris.core.IrisSettings; -import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.link.data.DataType; -import art.arcane.iris.core.nms.INMS; -import art.arcane.iris.core.nms.container.BlockProperty; -import art.arcane.iris.core.service.ExternalDataSVC; -import art.arcane.iris.util.common.data.registry.Materials; -import art.arcane.iris.util.common.reflect.KeyedType; -import it.unimi.dsi.fastutil.ints.IntSet; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.block.data.BlockData; - -import java.util.List; -import java.util.Locale; -import java.util.Optional; public class B { - private static final BSupportImpl BASE = new BSupportImpl(); + public static PlatformBlockState getState(String bdxf) { + return IrisPlatforms.get().registries().block(bdxf); + } - private static final class BSupportImpl extends BSupport { - @Override - protected void warn(String message) { - IrisLogging.warn(message); - } - - @Override - protected void debug(String message) { - IrisLogging.debug(message); - } - - @Override - protected void reportError(Throwable throwable) { - IrisLogging.reportError(throwable); - } - - @Override - protected void error(String message) { - IrisLogging.error(message); - } - - @Override - protected Material shortGrassMaterial() { - return Materials.GRASS; - } - - @Override - protected void appendExtraFoliageMaterials(IntSet foliage) { - // Iris has no extra foliage materials beyond Bukkit Material. - } - - @Override - protected boolean includeLitInUpdatable() { - return false; - } - - @Override - protected BlockData resolveCompatBlock(String bdxf) { - if (bdxf.contains(":")) { - if (bdxf.startsWith("minecraft:")) { - return IrisServices.get(IrisCompat.class).getBlock(bdxf); - } - return null; - } - return IrisServices.get(IrisCompat.class).getBlock(bdxf); - } - - @Override - protected BlockData resolveExternalBlockData(String ix) { - if (ix.startsWith("minecraft:") || !ix.contains(":")) { - return null; - } - - Identifier key = Identifier.fromString(ix); - Optional bd = IrisServices.get(ExternalDataSVC.class).getBlockData(key); - debug("Loading block data " + key); - return bd.orElse(null); - } - - @Override - protected boolean shouldPreventLeafDecay() { - return IrisSettings.get().getGenerator().isPreventLeafDecay(); - } - - @Override - protected void appendExternalBlockTypes(KList blockTypes) { - for (Identifier id : IrisServices.get(ExternalDataSVC.class).getAllIdentifiers(DataType.BLOCK)) { - blockTypes.add(id.toString()); - } - } - - @Override - protected void appendExternalItemTypes(KList itemTypes) { - for (Identifier id : IrisServices.get(ExternalDataSVC.class).getAllIdentifiers(DataType.ITEM)) { - itemTypes.add(id.toString()); - } - } - - @Override - protected KMap, List> loadExternalBlockStates() { - KMap, List> flipped = new KMap<>(); - INMS.get().getBlockProperties().forEach((k, v) -> { - NamespacedKey key = KeyedType.getKey(k); - String serialized = key == null ? k.name().toLowerCase(Locale.ROOT) : key.toString(); - flipped.computeIfAbsent(v, $ -> new KList<>()).add(serialized); - }); - - var emptyStates = flipped.computeIfAbsent(new KList<>(0), $ -> new KList<>()); - for (var pair : IrisServices.get(ExternalDataSVC.class).getAllBlockProperties()) { - if (pair.getB().isEmpty()) { - emptyStates.add(pair.getA().toString()); - } else { - flipped.computeIfAbsent(pair.getB(), $ -> new KList<>()).add(pair.getA().toString()); - } - } - - KMap, List> states = new KMap<>(); - flipped.forEach((k, v) -> { - var old = states.put(v, k); - if (old != null) { - error("Duplicate block state: " + v + " (" + old + " and " + k + ")"); - } - }); - - return states; + public static PlatformBlockState getStateOrNull(String bdxf) { + return IrisPlatforms.get().registries().blockOrNull(bdxf); + } + + public static PlatformBlockState getStateOrNull(String bdxf, boolean warn) { + return IrisPlatforms.get().registries().blockOrNull(bdxf, warn); + } + + public static KList getStates(KList find) { + KList states = new KList<>(find.size()); + for (String key : find) { + states.add(getState(key)); } + return states; } - public static BlockData toDeepSlateOre(BlockData block, BlockData ore) { - return BASE.toDeepSlateOre(block, ore); + public static PlatformBlockState getAirState() { + return IrisPlatforms.get().registries().air(); } - 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 PlatformBlockState toDeepSlateOre(PlatformBlockState block, PlatformBlockState ore) { + return IrisPlatforms.get().registries().deepSlateOre(block, ore); } - public static boolean isOre(art.arcane.iris.spi.PlatformBlockState state) { - return BASE.isOre(state == null ? null : (BlockData) state.nativeHandle()); + public static boolean isAir(PlatformBlockState state) { + return state == null || state.isAir(); } - public static boolean isDeepSlate(BlockData blockData) { - return BASE.isDeepSlate(blockData); + public static boolean isSolid(PlatformBlockState state) { + return state != null && state.isSolid(); } - public static boolean isOre(BlockData blockData) { - return BASE.isOre(blockData); + public static boolean isFluid(PlatformBlockState state) { + return state != null && state.isFluid(); } - public static boolean canPlaceOnto(Material mat, Material onto) { - return BASE.canPlaceOnto(mat, onto); + public static boolean isAirOrFluid(PlatformBlockState state) { + return state == null || state.isAirOrFluid(); } - public static boolean canPlaceOnto(art.arcane.iris.spi.PlatformBlockState mat, art.arcane.iris.spi.PlatformBlockState onto) { - return BASE.canPlaceOnto(((BlockData) mat.nativeHandle()).getMaterial(), ((BlockData) onto.nativeHandle()).getMaterial()); + public static boolean isWater(PlatformBlockState state) { + return state != null && state.isWater(); } - public static boolean isFoliagePlantable(BlockData d) { - return BASE.isFoliagePlantable(d); + public static boolean isWaterLogged(PlatformBlockState state) { + return state != null && state.isWaterLogged(); } - public static boolean isFoliagePlantable(Material d) { - return BASE.isFoliagePlantable(d); + public static boolean isLit(PlatformBlockState state) { + return state != null && state.isLit(); } - public static boolean isWater(BlockData b) { - return BASE.isWater(b); + public static boolean isUpdatable(PlatformBlockState state) { + return state != null && state.isUpdatable(); } - public static boolean isWater(art.arcane.iris.spi.PlatformBlockState state) { - return BASE.isWater(state == null ? null : (BlockData) state.nativeHandle()); + public static boolean isFoliage(PlatformBlockState state) { + return state != null && state.isFoliage(); } - public static BlockData getAir() { - return BASE.getAir(); + public static boolean isFoliagePlantable(PlatformBlockState state) { + return state != null && state.isFoliagePlantable(); } - public static Material getMaterialOrNull(String bdx) { - return BASE.getMaterialOrNull(bdx); + public static boolean isDecorant(PlatformBlockState state) { + return state != null && state.isDecorant(); } - public static Material getMaterial(String bdx) { - return BASE.getMaterial(bdx); + public static boolean isStorage(PlatformBlockState state) { + return state != null && state.isStorage(); } - public static boolean isSolid(BlockData mat) { - return BASE.isSolid(mat); + public static boolean isStorageChest(PlatformBlockState state) { + return state != null && state.isStorageChest(); } - public static boolean isSolid(art.arcane.iris.spi.PlatformBlockState state) { - return BASE.isSolid(state == null ? null : (BlockData) state.nativeHandle()); + public static boolean isOre(PlatformBlockState state) { + return state != null && state.isOre(); } - public static BlockData getOrNull(String bdxf) { - return BASE.getOrNull(bdxf); + public static boolean isDeepSlate(PlatformBlockState state) { + return state != null && state.isDeepSlate(); } - public static BlockData getOrNull(String bdxf, boolean warn) { - return BASE.getOrNull(bdxf, warn); + public static boolean isVineBlock(PlatformBlockState state) { + return state != null && state.isVineBlock(); } - public static BlockData getNoCompat(String bdxf) { - return BASE.getNoCompat(bdxf); + public static boolean canPlaceOnto(PlatformBlockState mat, PlatformBlockState onto) { + return mat != null && onto != null && mat.canPlaceOnto(onto); } - public static BlockData get(String bdxf) { - return BASE.get(bdxf); - } - - public static art.arcane.iris.spi.PlatformBlockState getState(String bdxf) { - return art.arcane.iris.platform.bukkit.BukkitBlockState.of(BASE.get(bdxf)); - } - - public static art.arcane.iris.spi.PlatformBlockState getStateOrNull(String bdxf) { - BlockData data = BASE.getOrNull(bdxf); - return data == null ? null : art.arcane.iris.platform.bukkit.BukkitBlockState.of(data); - } - - public static boolean isStorage(BlockData mat) { - return BASE.isStorage(mat); - } - - public static boolean isStorageChest(BlockData mat) { - return BASE.isStorageChest(mat); - } - - public static boolean isLit(BlockData mat) { - return BASE.isLit(mat); - } - - public static boolean isUpdatable(BlockData mat) { - return BASE.isUpdatable(mat); - } - - public static boolean isFoliage(Material d) { - return BASE.isFoliage(d); - } - - public static boolean isFoliage(BlockData d) { - return BASE.isFoliage(d); - } - - public static boolean isDecorant(BlockData 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 get(KList find) { - return BASE.get(find); - } - - public static boolean isFluid(BlockData 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) { - return BASE.isAirOrFluid(d); - } - - public static boolean isAirOrFluid(art.arcane.iris.spi.PlatformBlockState state) { - return BASE.isAirOrFluid((BlockData) state.nativeHandle()); - } - - public static boolean isAir(BlockData d) { - return BASE.isAir(d); - } - - public synchronized static String[] getBlockTypes() { - return BASE.getBlockTypes(); - } - - public synchronized static KMap, List> getBlockStates() { - return BASE.getBlockStates(); - } - - public static String[] getItemTypes() { - return BASE.getItemTypes(); - } - - public static boolean isWaterLogged(BlockData b) { - return BASE.isWaterLogged(b); - } - - public static void registerCustomBlockData(String namespace, String key, BlockData blockData) { - BASE.registerCustomBlockData(namespace, key, blockData); - } - - public static boolean isVineBlock(BlockData data) { - return BASE.isVineBlock(data); + public static boolean matches(PlatformBlockState filter, PlatformBlockState state) { + return filter != null && state != null && filter.matches(state); } } diff --git a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java index 251967cd7..678a6ff55 100644 --- a/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java +++ b/core/src/main/java/art/arcane/iris/util/common/nbt/mca/NBTWorld.java @@ -18,6 +18,8 @@ package art.arcane.iris.util.nbt.common.mca; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.spi.IrisLogging; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.data.cache.Cache; @@ -25,7 +27,6 @@ import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.nbt.mca.MCAWorldStoreSupport; import art.arcane.volmlib.util.nbt.mca.MCAWorldRuntimeSupport; import art.arcane.volmlib.util.nbt.mca.NBTWorldSupport; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.reflect.KeyedType; import art.arcane.volmlib.util.math.M; import art.arcane.volmlib.util.nbt.tag.CompoundTag; @@ -40,10 +41,10 @@ import java.util.Map; import java.util.Locale; public class NBTWorld { - private static final BlockData AIR = B.get("AIR"); + private static final BlockData AIR = BukkitBlockResolution.get("AIR"); private static final NBTWorldSupport.BlockStateCodec BLOCK_STATE_CODEC = NBTWorldSupport.blockStateCodec( - blockStateString -> B.getOrNull(blockStateString, true), - B::getAir, + blockStateString -> BukkitBlockResolution.getOrNull(blockStateString, true), + BukkitBlockResolution::getAir, blockData -> blockData.getAsString(true), blockData -> { NamespacedKey key = KeyedType.getKey(blockData.getMaterial()); diff --git a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java index 09e8122df..85f9be732 100644 --- a/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java +++ b/core/src/main/java/art/arcane/iris/util/project/hunk/view/ChunkDataHunkView.java @@ -18,9 +18,10 @@ package art.arcane.iris.util.project.hunk.view; +import art.arcane.iris.platform.bukkit.BukkitBlockResolution; + import art.arcane.iris.platform.bukkit.BukkitBlockState; import art.arcane.iris.spi.PlatformBlockState; -import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.IrisCustomData; import art.arcane.iris.util.project.hunk.Hunk; import org.bukkit.block.data.BlockData; @@ -28,7 +29,7 @@ import org.bukkit.generator.ChunkGenerator.ChunkData; @SuppressWarnings("ClassCanBeRecord") public class ChunkDataHunkView implements Hunk { - private static final BlockData AIR = B.getAir(); + private static final BlockData AIR = BukkitBlockResolution.getAir(); private final art.arcane.volmlib.util.hunk.view.ChunkDataHunkView view; diff --git a/spi/src/main/java/art/arcane/iris/spi/PlatformBlockState.java b/spi/src/main/java/art/arcane/iris/spi/PlatformBlockState.java index a7d3c9e68..a9e348d82 100644 --- a/spi/src/main/java/art/arcane/iris/spi/PlatformBlockState.java +++ b/spi/src/main/java/art/arcane/iris/spi/PlatformBlockState.java @@ -30,6 +30,40 @@ public interface PlatformBlockState { boolean isSolid(); + boolean isFluid(); + + boolean isWater(); + + boolean isWaterLogged(); + + boolean isLit(); + + boolean isUpdatable(); + + boolean isFoliage(); + + boolean isFoliagePlantable(); + + boolean isDecorant(); + + boolean isStorage(); + + boolean isStorageChest(); + + boolean isOre(); + + boolean isDeepSlate(); + + boolean isVineBlock(); + + boolean canPlaceOnto(PlatformBlockState onto); + + boolean matches(PlatformBlockState state); + + default boolean isAirOrFluid() { + return isAir() || isFluid(); + } + boolean hasTileEntity(); PlatformBlockState withProperty(String name, String value); diff --git a/spi/src/main/java/art/arcane/iris/spi/PlatformRegistries.java b/spi/src/main/java/art/arcane/iris/spi/PlatformRegistries.java index 194db1b10..783081269 100644 --- a/spi/src/main/java/art/arcane/iris/spi/PlatformRegistries.java +++ b/spi/src/main/java/art/arcane/iris/spi/PlatformRegistries.java @@ -26,6 +26,14 @@ import java.util.List; public interface PlatformRegistries { PlatformBlockState block(String key); + PlatformBlockState blockOrNull(String key); + + PlatformBlockState blockOrNull(String key, boolean warn); + + PlatformBlockState air(); + + PlatformBlockState deepSlateOre(PlatformBlockState block, PlatformBlockState ore); + PlatformBiome biome(String key); PlatformItem item(String key);