Currency Seams

This commit is contained in:
Brian Neumann-Fopiano committed 2026-06-12 02:42:13 -04:00
1 parent 1c08eb23b2
commit 4568f0b4b6
2 files changed
+43 -2

No files matched your search

@@ -21,6 +21,7 @@ package art.arcane.iris.platform.bukkit;
import art.arcane.iris.core.nms.INMS; import art.arcane.iris.core.nms.INMS;
import art.arcane.iris.spi.PlatformBlockState; import art.arcane.iris.spi.PlatformBlockState;
import art.arcane.iris.util.common.data.B; import art.arcane.iris.util.common.data.B;
import art.arcane.iris.util.common.data.IrisCustomData;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
@@ -37,6 +38,8 @@ public final class BukkitBlockState implements PlatformBlockState {
private final BlockData data; private final BlockData data;
private final String key; private final String key;
private final String namespace; private final String namespace;
private volatile Boolean air;
private volatile Boolean solid;
private BukkitBlockState(BlockData data, String key) { private BukkitBlockState(BlockData data, String key) {
this.data = data; this.data = data;
@@ -45,10 +48,29 @@ public final class BukkitBlockState implements PlatformBlockState {
} }
public static BukkitBlockState of(BlockData data) { public static BukkitBlockState of(BlockData data) {
if (data instanceof IrisCustomData custom) {
return new BukkitBlockState(data, custom.getAsString());
}
String key = data.getAsString(); String key = data.getAsString();
return CACHE.computeIfAbsent(key, (String k) -> new BukkitBlockState(data, k)); return CACHE.computeIfAbsent(key, (String k) -> new BukkitBlockState(data, k));
} }
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (!(other instanceof BukkitBlockState state)) {
return false;
}
return data.equals(state.data);
}
@Override
public int hashCode() {
return key.hashCode();
}
private static String parseNamespace(String key) { private static String parseNamespace(String key) {
String base = key; String base = key;
int bracket = base.indexOf('['); int bracket = base.indexOf('[');
@@ -99,12 +121,22 @@ public final class BukkitBlockState implements PlatformBlockState {
@Override @Override
public boolean isAir() { public boolean isAir() {
return B.isAir(data); Boolean cached = air;
if (cached == null) {
cached = B.isAir(data);
air = cached;
}
return cached;
} }
@Override @Override
public boolean isSolid() { public boolean isSolid() {
return B.isSolid(data); Boolean cached = solid;
if (cached == null) {
cached = B.isSolid(data);
solid = cached;
}
return cached;
} }
@Override @Override
@@ -192,6 +192,15 @@ public class B {
return BASE.get(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) { public static boolean isStorage(BlockData mat) {
return BASE.isStorage(mat); return BASE.isStorage(mat);
} }