Sealed Seam

This commit is contained in:
Brian Neumann-Fopiano
2026-06-11 16:53:30 -04:00
parent df888e5516
commit af3035088a
8 changed files with 70 additions and 33 deletions
@@ -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<String> 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<String> 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());
}
@@ -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);
}
@@ -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");
@@ -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<String> lore = new KList<>();
@@ -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;
}
@@ -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<String, Object> serializeTile(Location location) {
return INMS.get().serializeTile(location);
}
public static void deserializeTile(KMap<String, Object> properties, Location location) {
INMS.get().deserializeTile(properties, location);
}
public static ItemStack applyCustomNbt(ItemStack itemStack, KMap<String, Object> customNbt) {
return INMS.get().applyCustomNbt(itemStack, customNbt);
}
public static int dataPackFormat() {
return INMS.get().getDataVersion().getPackFormat();
}
@Override
public String platformName() {
return "bukkit";
@@ -50,6 +50,16 @@ public final class BukkitStructureHooks implements PlatformStructureHooks {
return new ArrayList<>(INMS.get().getObjectFeatureKeys());
}
@Override
public List<String> reachableStructureKeys(PlatformWorld world) {
return new ArrayList<>(INMS.get().getReachableStructureKeys(BukkitPlatform.unwrapWorld(world)));
}
@Override
public List<String> 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);
@@ -32,6 +32,10 @@ public interface PlatformStructureHooks {
List<String> objectFeatureKeys();
List<String> reachableStructureKeys(PlatformWorld world);
List<String> 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);