lua parser and vendor count fix

master
Thomas Rudin 2018-10-28 17:04:21 +01:00
parent fa5cf693c3
commit ab8edda173
4 changed files with 81 additions and 2 deletions

View File

@ -111,6 +111,14 @@
<version>25.0-jre</version>
</dependency>
<!-- lua parser -->
<dependency>
<groupId>org.luaj</groupId>
<artifactId>luaj-jse</artifactId>
<version>3.0.1</version>
</dependency>
<!-- xml bind -->
<dependency>

View File

@ -7,7 +7,9 @@ import io.rudin.minetest.tileserver.parser.Inventory;
import io.rudin.minetest.tileserver.parser.Item;
import io.rudin.minetest.tileserver.parser.Metadata;
import io.rudin.minetest.tileserver.service.EventBus;
import io.rudin.minetest.tileserver.util.LuaParser;
import org.jooq.DSLContext;
import org.luaj.vm2.LuaTable;
import javax.inject.Inject;
import java.util.Map;
@ -78,14 +80,17 @@ main={size=90}
Inventory give = inv.get("given_item");
Inventory main = inv.get("main");
String settings = map.get("settings");
LuaTable settingsTable = LuaParser.parseMap(settings);
if (pay.items.isEmpty() || give.items.isEmpty())
return;
String in_item = pay.items.get(0).name;
int in_count = Math.max(1, pay.items.get(0).count);
int in_count = Math.max(1, settingsTable.get("input_item_qty").toint());
String out_item = give.items.get(0).name;
int out_count = Math.max(1, give.items.get(0).count);
int out_count = Math.max(1, settingsTable.get("output_item_qty").toint());
if (in_item == null || out_item == null)
//Nothing to sell yet

View File

@ -0,0 +1,35 @@
package io.rudin.minetest.tileserver.util;
import org.luaj.vm2.LuaTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.HashMap;
import java.util.Map;
public class LuaParser {
private static ScriptEngineManager mgr = new ScriptEngineManager();
private static ScriptEngine engine = mgr.getEngineByName("luaj");
private static final Logger logger = LoggerFactory.getLogger(LuaParser.class);
public static LuaTable parseMap(String str) {
try {
Object result = engine.eval(str);
if (result instanceof LuaTable) {
return (LuaTable) result;
}
return null;
} catch (ScriptException e){
throw new IllegalArgumentException("parseMap", e);
}
}
}

View File

@ -0,0 +1,31 @@
package io.rudin.minetest.tileserver;
import io.rudin.minetest.tileserver.util.LuaParser;
import org.junit.Assert;
import org.junit.Test;
import org.luaj.vm2.LuaTable;
import javax.script.ScriptException;
import java.util.Map;
public class LuaParserTest {
static final String MAP_STR = "return {[\"admin_vendor\"] = true, [\"depositor\"] = false, [\"split_incoming_stacks\"] = false,\n" +
" [\"output_item\"] = \"currency:minegeld\", [\"quit\"] = true, [\"accept_worn_input\"] = true, [\"digiline_channel\"] = \"\", [\"output_item_qty\"] = 1,\n" +
" [\"auto_sort\"] = false, [\"input_item\"] = \"default:coal_lump\", [\"currency_eject\"] = false, [\"accept_output_only\"] = false, [\"co_sellers\"] = \"\",\n" +
" [\"accept_worn_output\"] = true, [\"banned_buyers\"] = \"\", [\"input_item_qty\"] = 1, [\"inactive_force\"] = false}";
@Test
public void testMap() throws ScriptException {
LuaTable map = LuaParser.parseMap(MAP_STR);
Assert.assertNotNull(map);
Assert.assertEquals(true, map.get("admin_vendor").checkboolean());
Assert.assertEquals("currency:minegeld", map.get("output_item").tojstring());
Assert.assertEquals(1, map.get("output_item_qty").toint());
}
}