From 9d644782a862f80b1d80e3ca011853acf4c3860a Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 26 Jul 2023 00:40:52 +0200 Subject: [PATCH] Hotfix: Add Better Inventory item() Function Signed-off-by: Chaoscaot --- .../script/lua/libs/InventoryLib.java | 31 +++++++++++++++++++ SCRIPT.md | 8 ++--- 2 files changed, 35 insertions(+), 4 deletions(-) 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..b1557d62 100644 --- a/SCRIPT.md +++ b/SCRIPT.md @@ -214,10 +214,10 @@ 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 | +| `item` | 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, Function\, List) | Füge eine Lore an das Item hinzu | +| -"- | setItem(Number, String, String, Function\, List, Boolean) | Gebe an, ob das Item enchanted sein soll | +| -"- | setItem(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 |