diff --git a/common/src/main/java/org/figuramc/figura/avatar/Avatar.java b/common/src/main/java/org/figuramc/figura/avatar/Avatar.java index a7ce224bd..3fad0dbb9 100644 --- a/common/src/main/java/org/figuramc/figura/avatar/Avatar.java +++ b/common/src/main/java/org/figuramc/figura/avatar/Avatar.java @@ -478,6 +478,10 @@ public boolean totemEvent() { return isCancelled(loaded ? run("TOTEM",tick) : null); } + public void customEvent(String event) { + if (loaded) run(event,tick); + } + // -- rendering events -- // diff --git a/common/src/main/java/org/figuramc/figura/lua/api/event/EventsAPI.java b/common/src/main/java/org/figuramc/figura/lua/api/event/EventsAPI.java index 9153ba877..41bb57fab 100644 --- a/common/src/main/java/org/figuramc/figura/lua/api/event/EventsAPI.java +++ b/common/src/main/java/org/figuramc/figura/lua/api/event/EventsAPI.java @@ -1,11 +1,12 @@ package org.figuramc.figura.lua.api.event; import com.mojang.datafixers.util.Pair; +import org.figuramc.figura.FiguraMod; +import org.figuramc.figura.avatar.Avatar; +import org.figuramc.figura.avatar.AvatarManager; import org.figuramc.figura.entries.FiguraEvent; -import org.figuramc.figura.entries.FiguraVanillaPart; import org.figuramc.figura.lua.LuaNotNil; import org.figuramc.figura.lua.LuaWhitelist; -import org.figuramc.figura.lua.api.vanilla_model.VanillaPart; import org.figuramc.figura.lua.docs.LuaFieldDoc; import org.figuramc.figura.lua.docs.LuaMetamethodDoc; import org.figuramc.figura.lua.docs.LuaMetamethodDoc.LuaMetamethodOverload; @@ -148,6 +149,26 @@ public Map getEvents() { return events; } + @LuaWhitelist + @LuaMethodDoc("events.new_event") + public LuaEvent newEvent(@LuaNotNil String name) { + name = name.toUpperCase(Locale.US); + LuaEvent ev = events.get(name); + if(ev != null) throw new LuaError("Event \"" + name + "\" already exists!"); + LuaEvent event = new LuaEvent(); + events.put(name, event); + return event; + } + + @LuaWhitelist + @LuaMethodDoc("events.fire_event") + public void fireEvent(@LuaNotNil String name) { + Avatar avatar = AvatarManager.getAvatarForPlayer(FiguraMod.getLocalPlayerUUID()); + if (avatar != null) { + avatar.customEvent(name); + } + } + @LuaWhitelist @LuaMetamethodDoc(overloads = @LuaMetamethodOverload( types = {LuaEvent.class, EventsAPI.class, String.class}, diff --git a/common/src/main/java/org/figuramc/figura/lua/api/event/LuaEvent.java b/common/src/main/java/org/figuramc/figura/lua/api/event/LuaEvent.java index a740b6476..dbbd67741 100644 --- a/common/src/main/java/org/figuramc/figura/lua/api/event/LuaEvent.java +++ b/common/src/main/java/org/figuramc/figura/lua/api/event/LuaEvent.java @@ -2,6 +2,8 @@ import com.google.common.collect.HashMultimap; import org.figuramc.figura.FiguraMod; +import org.figuramc.figura.avatar.Avatar; +import org.figuramc.figura.avatar.AvatarManager; import org.figuramc.figura.lua.LuaNotNil; import org.figuramc.figura.lua.LuaWhitelist; import org.figuramc.figura.lua.docs.LuaMetamethodDoc; @@ -9,10 +11,7 @@ import org.figuramc.figura.lua.docs.LuaMethodDoc; import org.figuramc.figura.lua.docs.LuaMethodOverload; import org.figuramc.figura.lua.docs.LuaTypeDoc; -import org.luaj.vm2.LuaError; -import org.luaj.vm2.LuaFunction; -import org.luaj.vm2.LuaTable; -import org.luaj.vm2.Varargs; +import org.luaj.vm2.*; import java.util.Deque; import java.util.Set; @@ -82,6 +81,18 @@ private Varargs callPiped(Varargs args) { return vars; } + @LuaWhitelist + @LuaMethodDoc("event.run") + public LuaEvent run(Object... args){ + Avatar avatar = AvatarManager.getAvatarForPlayer(FiguraMod.getLocalPlayerUUID()); + if (avatar != null) { + if (args != null) avatar.run(this,avatar.tick,args); + else avatar.run(this,avatar.tick); + } + return this; + } + + @LuaWhitelist @LuaMethodDoc( overloads = {