QOL #203
@ -0,0 +1,130 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2023 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.bausystem.features.script.lua.libs;
|
||||
|
||||
import de.steamwar.linkage.Linked;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.luaj.vm2.LuaError;
|
||||
import org.luaj.vm2.LuaTable;
|
||||
import org.luaj.vm2.LuaValue;
|
||||
import org.luaj.vm2.lib.OneArgFunction;
|
||||
import org.luaj.vm2.lib.ThreeArgFunction;
|
||||
import org.luaj.vm2.lib.ZeroArgFunction;
|
||||
|
||||
@Linked
|
||||
public class BossbarLib implements LuaLib {
|
||||
@Override
|
||||
public String name() {
|
||||
return "bossbar";
|
||||
}
|
||||
|
||||
@Override
|
||||
public LuaTable get(Player player) {
|
||||
LuaTable table = new LuaTable();
|
||||
|
||||
table.set("create", new ThreeArgFunction() {
|
||||
|
||||
@Override
|
||||
public LuaValue call(LuaValue arg1, LuaValue arg2, LuaValue arg3) {
|
||||
String title = arg1.checkjstring();
|
||||
BarStyle style;
|
||||
BarColor color;
|
||||
try {
|
||||
color = BarColor.valueOf(arg2.checkjstring());
|
||||
style = BarStyle.valueOf(arg3.checkjstring());
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new LuaError("Invalid color or style");
|
||||
}
|
||||
BossBar bossBar = Bukkit.createBossBar(title, color, style);
|
||||
bossBar.addPlayer(player);
|
||||
|
||||
LuaTable bbTable = new LuaTable();
|
||||
|
||||
bbTable.set("title", getterAndSetter("title", bossBar::getTitle, bossBar::setTitle));
|
||||
bbTable.set("style", getterAndSetter("style", () -> bossBar.getStyle().name(), s -> {
|
||||
try {
|
||||
bossBar.setStyle(BarStyle.valueOf(s));
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new LuaError("Invalid style");
|
||||
}
|
||||
}));
|
||||
bbTable.set("color", getterAndSetter("color", () -> bossBar.getColor().name(), s -> {
|
||||
try {
|
||||
bossBar.setColor(BarColor.valueOf(s));
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new LuaError("Invalid color");
|
||||
}
|
||||
}));
|
||||
bbTable.set("progress", getterAndSetter("progress", bossBar::getProgress, bossBar::setProgress));
|
||||
bbTable.set("visible", getterAndSetter("visible", bossBar::isVisible, bossBar::setVisible));
|
||||
bbTable.set("hasFlag", new OneArgFunction() {
|
||||
@Override
|
||||
public LuaValue call(LuaValue arg) {
|
||||
try {
|
||||
return LuaValue.valueOf(bossBar.hasFlag(BarFlag.valueOf(arg.checkjstring())));
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new LuaError("Invalid flag");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
bbTable.set("addFlag", new OneArgFunction() {
|
||||
@Override
|
||||
public LuaValue call(LuaValue arg) {
|
||||
try {
|
||||
bossBar.addFlag(BarFlag.valueOf(arg.checkjstring()));
|
||||
return LuaValue.TRUE;
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new LuaError("Invalid flag");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
bbTable.set("removeFlag", new OneArgFunction() {
|
||||
@Override
|
||||
public LuaValue call(LuaValue arg) {
|
||||
try {
|
||||
bossBar.removeFlag(BarFlag.valueOf(arg.checkjstring()));
|
||||
return LuaValue.TRUE;
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new LuaError("Invalid flag");
|
||||
}
|
||||
}
|
||||
});
|
||||
bbTable.set("destroy", new ZeroArgFunction() {
|
||||
@Override
|
||||
public LuaValue call() {
|
||||
bossBar.removeAll();
|
||||
return LuaValue.NIL;
|
||||
}
|
||||
});
|
||||
|
||||
return table;
|
||||
}
|
||||
});
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
@ -23,6 +23,7 @@ import de.steamwar.bausystem.features.loader.Loader;
|
||||
import de.steamwar.bausystem.features.tracer.record.ActiveTracer;
|
||||
import de.steamwar.bausystem.features.tracer.record.AutoTraceRecorder;
|
||||
import de.steamwar.bausystem.features.tracer.record.Recorder;
|
||||
import de.steamwar.bausystem.region.GlobalRegion;
|
||||
import de.steamwar.bausystem.region.Region;
|
||||
import de.steamwar.bausystem.region.flags.Flag;
|
||||
import de.steamwar.bausystem.region.flags.flagvalues.FireMode;
|
||||
@ -49,7 +50,14 @@ public class RegionLib implements LuaLib {
|
||||
LuaTable table = LuaValue.tableOf();
|
||||
|
||||
table.set("name", getter(() -> region.get().getName()));
|
||||
table.set("type", getter(() -> region.get().getPrototype().getName()));
|
||||
table.set("type", getter(() -> {
|
||||
Region region1 = region.get();
|
||||
if (region1 instanceof GlobalRegion) {
|
||||
return "global";
|
||||
} else {
|
||||
return region1.getPrototype().getName();
|
||||
}
|
||||
}));
|
||||
|
||||
LuaValue tntLib = LuaValue.tableOf();
|
||||
tntLib.set("mode", getter(() -> region.get().getPlain(Flag.TNT, TNTMode.class).name()));
|
||||
@ -87,7 +95,7 @@ public class RegionLib implements LuaLib {
|
||||
}
|
||||
});
|
||||
|
||||
table.set("list", getter(() -> LuaValue.listOf(Region.getREGION_MAP().values().stream().map(region -> create(() -> region, player)).toArray(LuaValue[]::new))));
|
||||
table.set("list", getter(() -> LuaValue.listOf(Region.getREGION_MAP().values().stream().map(region -> create(() -> region, player)).toArray(LuaTable[]::new))));
|
||||
|
||||
return table;
|
||||
}
|
||||
|
51
sw.def.lua
51
sw.def.lua
@ -344,3 +344,54 @@ function command(command, handler) end
|
||||
---@param handler fun(pressed: boolean): void
|
||||
---@return void
|
||||
function hotkey(trigger, handler) end
|
||||
|
||||
---@class bossbar
|
||||
bossbar = {}
|
||||
|
||||
---@alias BossBarColor 'PINK' | 'BLUE' | 'RED' | 'GREEN' | 'YELLOW' | 'PURPLE' | 'WHITE'
|
||||
---@alias BossBarStyle 'SEGMENTED_6' | 'SEGMENTED_10' | 'SEGMENTED_12' | 'SEGMENTED_20' | 'SOLID'
|
||||
---@alias BossBarFlag 'DARKEN_SKY' | 'PLAY_BOSS_MUSIC' | 'CREATE_FOG'
|
||||
|
||||
---@class BossBar
|
||||
local BossBar = {}
|
||||
|
||||
---@param title string
|
||||
---@param color BossBarColor
|
||||
---@param style BossBarStyle
|
||||
---@return BossBar
|
||||
function bossbar.create(title, color, style) return nil end
|
||||
|
||||
---@return string
|
||||
---@overload fun(title: string): void
|
||||
function BossBar.title() end
|
||||
|
||||
---@return BossBarColor
|
||||
---@overload fun(color: BossBarColor): void
|
||||
function BossBar.color() end
|
||||
|
||||
---@return BossBarStyle
|
||||
---@overload fun(style: BossBarStyle): void
|
||||
function BossBar.style() end
|
||||
|
||||
---@return number
|
||||
---@overload fun(progress: number): void
|
||||
function BossBar.progress() end
|
||||
|
||||
---@return boolean
|
||||
---@overload fun(visible: boolean): void
|
||||
function BossBar.visible() end
|
||||
|
||||
---@return boolean
|
||||
---@param flag BossBarFlag
|
||||
function BossBar.hasFlag(flag) return nil end
|
||||
|
||||
---@return void
|
||||
---@param flag BossBarFlag
|
||||
function BossBar.addFlag(flag) end
|
||||
|
||||
---@return boolean
|
||||
---@param flag BossBarFlag
|
||||
function BossBar.removeFlag(flag) return nil end
|
||||
|
||||
---@return void
|
||||
function BossBar.destroy() end
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren