This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
ScriptCraft/src/main/java/com/thebrokenrail/scriptcraft/bridge/TagBridges.java

76 lines
2.6 KiB
Java

package com.thebrokenrail.scriptcraft.bridge;
import com.thebrokenrail.scriptcraft.util.Util;
import net.minecraft.nbt.AbstractListTag;
import net.minecraft.nbt.AbstractNumberTag;
import net.minecraft.nbt.ByteTag;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.DoubleTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
@SuppressWarnings({"rawtypes", "unchecked"})
class TagBridges {
private static Object[] toOut(Tag obj) {
Object[] out = new Object[2];
out[0] = false;
if (obj instanceof StringTag) {
out[1] = obj.asString();
} else if (obj instanceof AbstractNumberTag) {
out[1] = ((AbstractNumberTag) obj).getNumber().doubleValue();
} else if (obj instanceof AbstractListTag) {
out[0] = true;
out[1] = obj;
} else if (obj instanceof CompoundTag) {
out[1] = obj;
}
return out;
}
private static Tag toTag(Object obj) {
if (obj instanceof Tag) {
return (Tag) obj;
} else if (obj instanceof Boolean) {
return ByteTag.of((Boolean) obj);
} else if (obj instanceof Double) {
return DoubleTag.of((Double) obj);
} else if (obj instanceof String) {
return StringTag.of((String) obj);
} else {
return null;
}
}
static void register() {
Bridges.addBridge("CompoundTag.get", args -> {
CompoundTag tag = (CompoundTag) args[0];
Tag obj = tag.get((String) args[1]);
return toOut(obj);
});
Bridges.addBridge("CompoundTag.set", args -> {
CompoundTag tag = (CompoundTag) args[0];
tag.put((String) args[1], toTag(args[2]));
return null;
});
Bridges.addBridge("CompoundTag.keys", args -> {
CompoundTag tag = (CompoundTag) args[0];
return tag.getKeys().toArray(new String[0]);
});
Bridges.addBridge("ListTag.get", args -> {
AbstractListTag<?> tag = (AbstractListTag<?>) args[0];
Tag obj = tag.get((int) Util.toDouble(args[1], 0));
return toOut(obj);
});
Bridges.addBridge("ListTag.set", args -> {
AbstractListTag tag = (AbstractListTag) args[0];
tag.set((int) Util.toDouble(args[1], 0), toTag(args[2]));
return null;
});
Bridges.addBridge("ListTag.size", args -> {
AbstractListTag<?> tag = (AbstractListTag<?>) args[0];
return tag.size();
});
}
}