diff --git a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java index 293bdad1..98a8a70d 100644 --- a/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java +++ b/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/RegionLib.java @@ -33,6 +33,7 @@ import de.steamwar.linkage.Linked; import org.bukkit.entity.Player; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; +import org.luaj.vm2.lib.OneArgFunction; @Linked public class RegionLib implements LuaLib { @@ -43,8 +44,7 @@ public class RegionLib implements LuaLib { return "region"; } - @Override - public LuaTable get(Player player) { + private LuaTable create(Region region, Player player) { LuaTable table = LuaValue.tableOf(); table.set("name", getter(() -> Region.getRegion(player.getLocation()).getName())); @@ -74,4 +74,16 @@ public class RegionLib implements LuaLib { return table; } + + @Override + public LuaTable get(Player player) { + LuaTable table = create(Region.getRegion(player.getLocation()), player); + table.set("get", new OneArgFunction() { + @Override + public LuaValue call(LuaValue arg) { + return create(Region.getREGION_MAP().get(arg.checkjstring()), player); + } + }); + return table; + } } diff --git a/SCRIPT.md b/SCRIPT.md index 2267fdbf..7743dbf7 100644 --- a/SCRIPT.md +++ b/SCRIPT.md @@ -122,14 +122,15 @@ Es gibt folgende Funktionen: Das `region`-Modul stellt Funktion zur Verfügung, die die Region des Spielers betreffen. Es gibt folgende Funktionen: -| Name | Signature | Beschreibung | -|-----------|--------------------|------------------------------------------------------------------------------------------------------------| -| `name` | name(): String | Gibt den Regionsnamen | -| `type` | type(): String | Gibt den Regionstyp | -| `fire` | fire(): Boolean | Gibt den Fire-Modus der Region zurück | -| `freeze` | freeze(): Boolean | Gibt den Freeze-Modus der Region zurück | -| `protect` | protect(): Boolean | Gibt den Protect-Modus der Region zurück | -| `loader` | loader(): String | Gibt den Status des Loaders des Spielers zurück, die Werte sind: `OFF`, `SETUP`, `RUNNING`, `PAUSE`, `END` | +| Name | Signature | Beschreibung | +|-----------|---------------------|------------------------------------------------------------------------------------------------------------| +| `name` | name(): String | Gibt den Regionsnamen | +| `type` | type(): String | Gibt den Regionstyp | +| `fire` | fire(): Boolean | Gibt den Fire-Modus der Region zurück | +| `freeze` | freeze(): Boolean | Gibt den Freeze-Modus der Region zurück | +| `protect` | protect(): Boolean | Gibt den Protect-Modus der Region zurück | +| `loader` | loader(): String | Gibt den Status des Loaders des Spielers zurück, die Werte sind: `OFF`, `SETUP`, `RUNNING`, `PAUSE`, `END` | +| `get` | get(String): Region | Gibt die Region mit dem Namen zurück. Die Region ist gleich aufgebaut wie das Regions-Modul | Es gibt folgende weitere Module: diff --git a/sw.def.lua b/sw.def.lua index e99073af..55e417f7 100644 --- a/sw.def.lua +++ b/sw.def.lua @@ -127,28 +127,31 @@ function random.nextBool() return nil end ---@alias RegionType 'wg' | 'mwg' | 'as' | 'ws' | 'ws_inner' | 'ws_rumpf' | 'ws_rahmen' | 'spawn' ----@class region +---@class iregion ---@field tnt tnt ---@field trace trace +local iregion = {} + +---@class region: iregion region = {} ---@return string -function region.name() return nil end +function iregion.name() return nil end ---@return RegionType -function region.type() return nil end +function iregion.type() return nil end ---@return boolean -function region.fire() return nil end +function iregion.fire() return nil end ---@return boolean -function region.freeze() return nil end +function iregion.freeze() return nil end ---@return boolean -function region.protect() return nil end +function iregion.protect() return nil end ---@return string -function region.loader() return nil end +function iregion.loader() return nil end ---@alias TNTMode 'ALLOW' | 'DENY' | 'ONLY_TB' @@ -179,6 +182,10 @@ function trace.status() return nil end ---@return number function trace.time() return nil end +---@param name string +---@return iregion +function region.get(name) return nil end + ---@class Position ---@field x number ---@field y number