diff --git a/core/src/main/java/art/arcane/iris/engine/framework/StructureReachability.java b/core/src/main/java/art/arcane/iris/engine/framework/StructureReachability.java index 601b21359..79be4da4b 100644 --- a/core/src/main/java/art/arcane/iris/engine/framework/StructureReachability.java +++ b/core/src/main/java/art/arcane/iris/engine/framework/StructureReachability.java @@ -19,8 +19,8 @@ package art.arcane.iris.engine.framework; import art.arcane.iris.core.loader.IrisData; -import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.object.IrisWorld; +import art.arcane.iris.platform.bukkit.BukkitWorld; import art.arcane.iris.spi.IrisPlatforms; import art.arcane.volmlib.util.collection.KList; @@ -85,7 +85,7 @@ public final class StructureReachability { return Collections.emptySet(); } Set reachable = new LinkedHashSet<>(); - for (String key : INMS.get().getReachableStructureKeys(world.realWorld())) { + for (String key : IrisPlatforms.get().structureHooks().reachableStructureKeys(new BukkitWorld(world.realWorld()))) { if (key != null && !key.isEmpty()) { reachable.add(key.toLowerCase()); } @@ -108,7 +108,7 @@ public final class StructureReachability { return missing; } Set possible = new LinkedHashSet<>(); - for (String key : INMS.get().getPossibleBiomeKeys(world.realWorld())) { + for (String key : IrisPlatforms.get().structureHooks().possibleBiomeKeys(new BukkitWorld(world.realWorld()))) { if (key != null) { possible.add(key.toLowerCase()); } 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 edaa492b8..3e13f0771 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 @@ -22,10 +22,10 @@ import art.arcane.iris.Iris; import art.arcane.iris.core.link.Identifier; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.core.loader.IrisRegistrant; -import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; import art.arcane.iris.platform.bukkit.BukkitBlockState; +import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.spi.PlatformBlockState; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; @@ -215,7 +215,7 @@ public class IrisBlockData extends IrisRegistrant { entity.putIfAbsent("id", Identifier.fromString(id).toString()); } - if (!INMS.get().hasTile(type) || tileData == null || tileData.isEmpty()) + if (!BukkitPlatform.hasTile(type) || tileData == null || tileData.isEmpty()) return null; return new TileData(type, this.tileData); } diff --git a/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java b/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java index 6ea6c9192..c95c02044 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java +++ b/core/src/main/java/art/arcane/iris/engine/object/IrisDimension.java @@ -23,9 +23,9 @@ import art.arcane.iris.core.IrisSettings; import art.arcane.iris.core.ServerConfigurator.DimensionHeight; import art.arcane.iris.core.loader.IrisData; import art.arcane.iris.platform.bukkit.BukkitBlockState; +import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.core.loader.IrisRegistrant; -import art.arcane.iris.core.nms.INMS; import art.arcane.iris.core.nms.datapack.IDataFixer; import art.arcane.iris.core.nms.datapack.IDataFixer.Dimension; import art.arcane.iris.engine.data.cache.AtomicCache; @@ -601,7 +601,7 @@ public class IrisDimension extends IrisRegistrant { "max_format": {} } } - """.replace("{}", INMS.get().getDataVersion().getPackFormat() + ""); + """.replace("{}", BukkitPlatform.dataPackFormat() + ""); for (File datapacks : folders) { File mcm = new File(datapacks, "iris/pack.mcmeta"); 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 dcb54de31..029c389ea 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 @@ -20,10 +20,10 @@ package art.arcane.iris.engine.object; import art.arcane.iris.Iris; import art.arcane.iris.core.link.Identifier; -import art.arcane.iris.core.nms.INMS; import art.arcane.iris.core.service.ExternalDataSVC; import art.arcane.iris.engine.data.cache.AtomicCache; import art.arcane.iris.engine.object.annotations.*; +import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.volmlib.util.collection.KList; import art.arcane.volmlib.util.collection.KMap; import art.arcane.iris.util.common.data.B; @@ -37,17 +37,17 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.bukkit.DyeColor; import org.bukkit.Material; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.Damageable; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.LeatherArmorMeta; -import org.bukkit.inventory.meta.components.CustomModelDataComponent; -import org.bukkit.material.Colorable; - -import java.awt.*; -import java.util.List; -import java.util.Optional; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.components.CustomModelDataComponent; +import org.bukkit.material.Colorable; + +import java.awt.*; +import java.util.List; +import java.util.Optional; @Snippet("loot") @Accessors(chain = true) @@ -116,7 +116,7 @@ public class IrisLoot { if (is == null) return new ItemStack(Material.AIR); is.setItemMeta(applyProperties(is, rng, debug, null)); - return INMS.get().applyCustomNbt(is, customNbt); + return BukkitPlatform.applyCustomNbt(is, customNbt); } catch (Throwable e) { Iris.reportError(e); return new ItemStack(Material.AIR); @@ -134,7 +134,7 @@ public class IrisLoot { if (is == null) return null; is.setItemMeta(applyProperties(is, rng, debug, table)); - return INMS.get().applyCustomNbt(is, customNbt); + return BukkitPlatform.applyCustomNbt(is, customNbt); } catch (Throwable e) { //Iris.reportError(e); e.printStackTrace(); @@ -178,11 +178,11 @@ public class IrisLoot { m.addItemFlags(i); } - if (getCustomModel() != null) { - CustomModelDataComponent customModelData = m.getCustomModelDataComponent(); - customModelData.setFloats(List.of(getCustomModel().floatValue())); - m.setCustomModelDataComponent(customModelData); - } + if (getCustomModel() != null) { + CustomModelDataComponent customModelData = m.getCustomModelDataComponent(); + customModelData.setFloats(List.of(getCustomModel().floatValue())); + m.setCustomModelDataComponent(customModelData); + } if (is.getType().getMaxDurability() > 0 && m instanceof Damageable d) { int max = is.getType().getMaxDurability(); @@ -198,9 +198,9 @@ public class IrisLoot { colorable.setColor(getDyeColor()); } - if (displayName != null) { - m.setDisplayName(C.translateAlternateColorCodes('&', displayName)); - } + if (displayName != null) { + m.setDisplayName(C.translateAlternateColorCodes('&', displayName)); + } KList lore = new KList<>(); diff --git a/core/src/main/java/art/arcane/iris/engine/object/TileData.java b/core/src/main/java/art/arcane/iris/engine/object/TileData.java index ad5679e9f..74108393c 100644 --- a/core/src/main/java/art/arcane/iris/engine/object/TileData.java +++ b/core/src/main/java/art/arcane/iris/engine/object/TileData.java @@ -22,7 +22,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.Strictness; import art.arcane.iris.Iris; -import art.arcane.iris.core.nms.INMS; +import art.arcane.iris.platform.bukkit.BukkitPlatform; import art.arcane.iris.util.common.reflect.KeyedType; import art.arcane.volmlib.util.collection.KMap; import lombok.*; @@ -56,7 +56,7 @@ public class TileData implements Cloneable { } public static TileData getTileState(Block block, boolean useLegacy) { - if (!INMS.get().hasTile(block.getType())) + if (!BukkitPlatform.hasTile(block.getType())) return null; if (useLegacy) { var legacy = LegacyTileData.fromBukkit(block.getState()); @@ -91,14 +91,14 @@ public class TileData implements Cloneable { if (material == null) throw new IllegalStateException("Material not set"); if (block.getType() != material) throw new IllegalStateException("Material mismatch: " + block.getType() + " vs " + material); - INMS.get().deserializeTile(properties, block.getLocation()); + BukkitPlatform.deserializeTile(properties, block.getLocation()); } public TileData fromBukkit(Block block) { if (material != null && block.getType() != material) throw new IllegalStateException("Material mismatch: " + block.getType() + " vs " + material); if (material == null) material = block.getType(); - properties = INMS.get().serializeTile(block.getLocation()); + properties = BukkitPlatform.serializeTile(block.getLocation()); return this; } diff --git a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java index e07bf8c7d..c20a291da 100644 --- a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java +++ b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java @@ -31,9 +31,11 @@ import art.arcane.iris.spi.PlatformScheduler; import art.arcane.iris.spi.PlatformStructureHooks; import art.arcane.iris.spi.PlatformWorld; import art.arcane.iris.util.common.scheduling.J; +import art.arcane.volmlib.util.collection.KMap; import art.arcane.volmlib.util.math.Vector3d; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; @@ -41,6 +43,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; +import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; import java.io.File; @@ -105,6 +108,26 @@ public final class BukkitPlatform implements IrisPlatform { return INMS.get().getBoundingbox(type); } + public static boolean hasTile(Material material) { + return INMS.get().hasTile(material); + } + + public static KMap serializeTile(Location location) { + return INMS.get().serializeTile(location); + } + + public static void deserializeTile(KMap properties, Location location) { + INMS.get().deserializeTile(properties, location); + } + + public static ItemStack applyCustomNbt(ItemStack itemStack, KMap customNbt) { + return INMS.get().applyCustomNbt(itemStack, customNbt); + } + + public static int dataPackFormat() { + return INMS.get().getDataVersion().getPackFormat(); + } + @Override public String platformName() { return "bukkit"; diff --git a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitStructureHooks.java b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitStructureHooks.java index 758a3d77b..3d7db5a16 100644 --- a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitStructureHooks.java +++ b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitStructureHooks.java @@ -50,6 +50,16 @@ public final class BukkitStructureHooks implements PlatformStructureHooks { return new ArrayList<>(INMS.get().getObjectFeatureKeys()); } + @Override + public List reachableStructureKeys(PlatformWorld world) { + return new ArrayList<>(INMS.get().getReachableStructureKeys(BukkitPlatform.unwrapWorld(world))); + } + + @Override + public List possibleBiomeKeys(PlatformWorld world) { + return new ArrayList<>(INMS.get().getPossibleBiomeKeys(BukkitPlatform.unwrapWorld(world))); + } + @Override public boolean placeFeature(PlatformWorld world, int x, int y, int z, String featureKey, long seed) { return INMS.get().placeFeature(BukkitPlatform.unwrapWorld(world), x, y, z, featureKey, seed); diff --git a/spi/src/main/java/art/arcane/iris/spi/PlatformStructureHooks.java b/spi/src/main/java/art/arcane/iris/spi/PlatformStructureHooks.java index 022519367..10af4583e 100644 --- a/spi/src/main/java/art/arcane/iris/spi/PlatformStructureHooks.java +++ b/spi/src/main/java/art/arcane/iris/spi/PlatformStructureHooks.java @@ -32,6 +32,10 @@ public interface PlatformStructureHooks { List objectFeatureKeys(); + List reachableStructureKeys(PlatformWorld world); + + List possibleBiomeKeys(PlatformWorld world); + boolean placeFeature(PlatformWorld world, int x, int y, int z, String featureKey, long seed); int[] placeStructure(PlatformWorld world, int chunkX, int chunkZ, String structureKey, long seed, int maxSpan);