SteamWar/BauSystem2.0
Archiviert
12
0

Script System Lua #178

Zusammengeführt
YoyoNow hat 16 Commits von lua nach master 2023-07-17 16:44:04 +02:00 zusammengeführt
3 geänderte Dateien mit 34 neuen und 21 gelöschten Zeilen
Nur Änderungen aus Commit 5a09ece591 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.script.event;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.script.ScriptRunner; import de.steamwar.bausystem.features.script.ScriptRunner;
import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin; import de.steamwar.bausystem.features.script.lua.SteamWarGlobalLuaPlugin;
import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.region.utils.RegionType;
@ -53,9 +54,9 @@ public class EventListener implements Listener {
private static final Map<Player, Long> LAST_FS = new HashMap<>(); private static final Map<Player, Long> LAST_FS = new HashMap<>();
{ static {
Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> {
Chaoscaot markierte diese Unterhaltung als gelöst
Review

Nur ein Aufruf von System.currentTimeMillis() pro Tick. Zeit abzufragen kann (relativ) teuer sein.

Nur ein Aufruf von System.currentTimeMillis() pro Tick. Zeit abzufragen kann (relativ) teuer sein.
Review

FunFact: Das hab ich aus dem Live-Code kopiert

kann man aber noch fixen

FunFact: Das hab ich aus dem Live-Code kopiert kann man aber noch fixen
LAST_FS.entrySet().removeIf(entry -> System.currentTimeMillis() - entry.getValue() > 200); LAST_FS.entrySet().removeIf(entry -> TPSUtils.currentTick.get() - entry.getValue() > 4);
}, 2, 2); }, 2, 2);
} }
@ -64,21 +65,21 @@ public class EventListener implements Listener {
ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfJoin, LuaValue.NIL); ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfJoin, LuaValue.NIL);
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfLeave, LuaValue.NIL); ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.SelfLeave, LuaValue.NIL);
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
if (LAST_FS.containsKey(event.getPlayer())) { if (LAST_FS.containsKey(event.getPlayer())) {
event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DoubleSwap, LuaValue.NIL)); event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DoubleSwap, LuaValue.NIL));
} else { } else {
LAST_FS.put(event.getPlayer(), System.currentTimeMillis()); LAST_FS.put(event.getPlayer(), TPSUtils.currentTick.get());
} }
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onBlockPlace(BlockPlaceEvent event) { public void onBlockPlace(BlockPlaceEvent event) {
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("x", event.getBlock().getX()); table.set("x", event.getBlock().getX());
@ -88,7 +89,7 @@ public class EventListener implements Listener {
event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.PlaceBlock, table)); event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.PlaceBlock, table));
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
table.set("x", event.getBlock().getX()); table.set("x", event.getBlock().getX());
@ -100,7 +101,7 @@ public class EventListener implements Listener {
private final Set<Player> ignore = new HashSet<>(); private final Set<Player> ignore = new HashSet<>();
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (ignore.remove(event.getPlayer())) { if (ignore.remove(event.getPlayer())) {
return; return;
@ -126,7 +127,7 @@ public class EventListener implements Listener {
} }
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onEntitySpawn(EntitySpawnEvent event) { public void onEntitySpawn(EntitySpawnEvent event) {
if (event.getEntityType() != EntityType.PRIMED_TNT) { if (event.getEntityType() != EntityType.PRIMED_TNT) {
return; return;
@ -140,7 +141,7 @@ public class EventListener implements Listener {
} }
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onEntityExplode(EntityExplodeEvent event) { public void onEntityExplode(EntityExplodeEvent event) {
if (event.getEntityType() != EntityType.PRIMED_TNT) { if (event.getEntityType() != EntityType.PRIMED_TNT) {
return; return;
@ -165,7 +166,7 @@ public class EventListener implements Listener {
event.setCancelled(cancel); event.setCancelled(cancel);
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onPlayerDropItem(PlayerDropItemEvent event) { public void onPlayerDropItem(PlayerDropItemEvent event) {
ignore.add(event.getPlayer()); ignore.add(event.getPlayer());
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();
@ -173,7 +174,7 @@ public class EventListener implements Listener {
event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DropItem, table)); event.setCancelled(ScriptRunner.callEvent(event.getPlayer(), SteamWarGlobalLuaPlugin.EventType.DropItem, table));
} }
@EventHandler @EventHandler(priority = EventPriority.HIGH)
public void onEntityDeath(EntityDeathEvent event) { public void onEntityDeath(EntityDeathEvent event) {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
LuaTable table = new LuaTable(); LuaTable table = new LuaTable();

Datei anzeigen

@ -41,17 +41,17 @@ public class PlayerLib implements LuaLib {
table.set("chat", new Print(player)); table.set("chat", new Print(player));
table.set("actionbar", new SendActionbar(player)); table.set("actionbar", new SendActionbar(player));
table.set("x", getterAndSetter(player.getLocation()::getX, player.getLocation()::setX)); table.set("x", getterAndSetter(() -> player.getLocation().getX(), player.getLocation()::setX));
table.set("y", getterAndSetter(player.getLocation()::getY, player.getLocation()::setY)); table.set("y", getterAndSetter(() -> player.getLocation().getY(), player.getLocation()::setY));
table.set("z", getterAndSetter(player.getLocation()::getZ, player.getLocation()::setZ)); table.set("z", getterAndSetter(() -> player.getLocation().getZ(), player.getLocation()::setZ));
table.set("yaw", getterAndSetter(player.getLocation()::getYaw, player.getLocation()::setYaw)); table.set("yaw", getterAndSetter(() -> player.getLocation().getYaw(), player.getLocation()::setYaw));
table.set("pitch", getterAndSetter(player.getLocation()::getPitch, player.getLocation()::setPitch)); table.set("pitch", getterAndSetter(() -> player.getLocation().getPitch(), player.getLocation()::setPitch));
table.set("sneaking", getter(player::isSneaking)); table.set("sneaking", getter(player::isSneaking));
table.set("sprinting", getter(player::isSprinting)); table.set("sprinting", getter(player::isSprinting));
table.set("slot", getterAndSetter(player.getInventory()::getHeldItemSlot, player.getInventory()::setHeldItemSlot)); table.set("slot", getterAndSetter(() -> player.getInventory().getHeldItemSlot(), player.getInventory()::setHeldItemSlot));
table.set("item", getter(player.getInventory().getItemInMainHand().getType()::name)); table.set("item", getter(() -> player.getInventory().getItemInMainHand().getType().name()));
table.set("offHandItem", getter(player.getInventory().getItemInOffHand().getType()::name)); table.set("offHandItem", getter(() -> player.getInventory().getItemInOffHand().getType().name()));
return table; return table;
} }

Datei anzeigen

@ -18,6 +18,8 @@
* [BlockEvent](#blockevent) * [BlockEvent](#blockevent)
* [InteractEvent](#interactevent) * [InteractEvent](#interactevent)
* [Position](#position) * [Position](#position)
* [Instabile APIs](#instabile-apis)
* [_worldedit](#worldedit)
* [Beispiele](#beispiele) * [Beispiele](#beispiele)
* [Hello, World!](#hello-world) * [Hello, World!](#hello-world)
* [Code](#code) * [Code](#code)
@ -173,7 +175,7 @@ Es gibt folgende Variablen:
| Name | Beschreibung | | Name | Beschreibung |
|----------|----------------------------------| |----------|----------------------------------|
| `events` | Siehe: [Event Type](#event-type) | | `events` | Siehe: [Event Type](#eventtypen) |
## Hotkeys ## Hotkeys
@ -242,6 +244,16 @@ Die Position ist ein Objekt mit folgenden Variablen:
| `y` | Die Y-Koordinate | | `y` | Die Y-Koordinate |
| `z` | Die Z-Koordinate | | `z` | Die Z-Koordinate |
# Instabile APIs
Hier sind einige APIs aufgelistet, die nicht stabil sind und sich jederzeit ändern können.
## _worldedit
| Name | Signatur | Beschreibung |
|-------------|-----------------------------------------------------------|-----------------------------------|
| `selection` | selection(Liste\<Pos>), selection(): {min: Pos, max: Pos} | Die aktuelle auswahl des Spielers |
# Beispiele # Beispiele