diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/InventoryLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/InventoryLib.java index 3bc90ac2..392580f4 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/InventoryLib.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/InventoryLib.java @@ -87,6 +87,37 @@ public class InventoryLib implements LuaLib { } }); + table.set("item", new VarArgFunction() { + @Override + public Varargs invoke(Varargs args) { + int slot = args.checkint(1); + Material material = SWItem.getMaterial(args.checkjstring(2)); + String name = ChatColor.translateAlternateColorCodes('&', args.checkjstring(3)); + LuaFunction handler = args.checkfunction(4); + SWItem item = new SWItem(material, name, clickType -> handler.call(LuaValue.valueOf(clickType.name()))); + + if (args.narg() >= 5) { + LuaTable lore = args.checktable(5); + List loreList = new ArrayList<>(lore.length()); + for (int i = 1; i <= lore.length(); i++) { + loreList.add(ChatColor.translateAlternateColorCodes('&', lore.get(i).checkjstring())); + } + item.setLore(loreList); + } + + if (args.narg() >= 6) { + item.setEnchanted(args.checkboolean(6)); + } + + if (args.narg() >= 7) { + item.getItemStack().setAmount(args.checkint(7)); + } + + inventory.setItem(slot, item); + return LuaValue.NIL; + } + }); + table.set("setCloseHandler", new OneArgFunction() { @Override public LuaValue call(LuaValue arg) { diff --git a/SCRIPT.md b/SCRIPT.md index 3b24b460..36008925 100644 --- a/SCRIPT.md +++ b/SCRIPT.md @@ -212,14 +212,14 @@ Es gibt folgende Funktionen: Das `Inventory`-Objekt hat folgende Funktionen: -| Name | Signature | Beschreibung | -|-------------------|-----------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `setItem` | setItem(Number, String, String, Function\) | Setze ein Item mit dem Typen des ersten Strings an den Slot (Startet bei 0) mit dem Namen des zweiten Strings mit einem Klick-Handler der den Klick-Typen rein gibt (z.B. `LEFT`, `SHIFT_LEFT`, `RIGHT`, `SHIFT_RIGHT`) | -| -"- | setItem(Number, String, String, List, Function\) | Füge eine Lore an das Item hinzu | -| -"- | setItem(Number, String, String, List, Boolean, Function\) | Gebe an, ob das Item enchanted sein soll | -| -"- | setItem(Number, String, String, List, Boolean, Number, Function\) | Gebe die Anzahl der Items an | -| `setCloseHandler` | setCloseHandler(Function\) | Gebe einen Handler an, der beim schließen des Inventares ausgeführt wird | -| `open` | open() | Öffne das Inventar | +| Name | Signature | Beschreibung | +|-------------------|--------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `item` | item(Number, String, String, Function\) | Setze ein Item mit dem Typen des ersten Strings an den Slot (Startet bei 0) mit dem Namen des zweiten Strings mit einem Klick-Handler der den Klick-Typen rein gibt (z.B. `LEFT`, `SHIFT_LEFT`, `RIGHT`, `SHIFT_RIGHT`) | +| -"- | item(Number, String, String, Function\, List) | Füge eine Lore an das Item hinzu | +| -"- | item(Number, String, String, Function\, List, Boolean) | Gebe an, ob das Item enchanted sein soll | +| -"- | item(Number, String, String, Function\, List, Boolean, Number) | Gebe die Anzahl der Items an | +| `setCloseHandler` | setCloseHandler(Function\) | Gebe einen Handler an, der beim schließen des Inventares ausgeführt wird | +| `open` | open() | Öffne das Inventar | Siehe auch: [Inventory Beispiel](#inventory-1)