package org.openautonomousconnection.luascript.events; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import java.util.List; import java.util.Map; /** * Coerces common Java values into Lua values. */ public final class JavaToLua { private JavaToLua() { } public static LuaValue coerce(Object v) { if (v == null) return LuaValue.NIL; if (v instanceof LuaValue lv) return lv; if (v instanceof String s) return LuaValue.valueOf(s); if (v instanceof Boolean b) return LuaValue.valueOf(b); if (v instanceof Integer i) return LuaValue.valueOf(i); if (v instanceof Long l) return LuaValue.valueOf(l); if (v instanceof Float f) return LuaValue.valueOf(f); if (v instanceof Double d) return LuaValue.valueOf(d); if (v instanceof Map m) { LuaTable t = new LuaTable(); for (Map.Entry e : m.entrySet()) { Object k = e.getKey(); if (k == null) continue; t.set(String.valueOf(k), coerce(e.getValue())); } return t; } if (v instanceof List list) { LuaTable t = new LuaTable(); int i = 1; for (Object o : list) { t.set(i++, coerce(o)); } return t; } return LuaValue.valueOf(String.valueOf(v)); } }