From 82338c90ca57e68c838386c28c583d87a7ebce24 Mon Sep 17 00:00:00 2001 From: JIBSIL Date: Wed, 2 Jul 2025 15:27:41 -0400 Subject: [PATCH 01/10] Add native event timings --- src/main/java/ch/njol/skript/events/EvtProfileEvent.java | 4 ++++ .../ch/njol/skript/events/bukkit/ProfileCompletedEvent.java | 4 ++++ src/main/java/ch/njol/skript/timings/Profiler.java | 4 ++++ src/main/java/ch/njol/skript/timings/ProfilerAPI.java | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 src/main/java/ch/njol/skript/events/EvtProfileEvent.java create mode 100644 src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java create mode 100644 src/main/java/ch/njol/skript/timings/Profiler.java create mode 100644 src/main/java/ch/njol/skript/timings/ProfilerAPI.java diff --git a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java new file mode 100644 index 00000000000..3be4c69b33e --- /dev/null +++ b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java @@ -0,0 +1,4 @@ +package ch.njol.skript.events; + +public class EvtTimingCreated { +} diff --git a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java new file mode 100644 index 00000000000..1cf0559ee5e --- /dev/null +++ b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java @@ -0,0 +1,4 @@ +package ch.njol.skript.events.bukkit; + +public class ProfileCompletedEvent { +} diff --git a/src/main/java/ch/njol/skript/timings/Profiler.java b/src/main/java/ch/njol/skript/timings/Profiler.java new file mode 100644 index 00000000000..d21af02ddc5 --- /dev/null +++ b/src/main/java/ch/njol/skript/timings/Profiler.java @@ -0,0 +1,4 @@ +package ch.njol.skript.timings; + +public class Profiler { +} diff --git a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java new file mode 100644 index 00000000000..9b596026684 --- /dev/null +++ b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java @@ -0,0 +1,4 @@ +package ch.njol.skript.timings; + +public class ProfilerAPI { +} From 1fffbaade55d719217a1e9acf4e258e501be698d Mon Sep 17 00:00:00 2001 From: JIBSIL Date: Wed, 2 Jul 2025 15:29:02 -0400 Subject: [PATCH 02/10] Add native event timings --- .../ch/njol/skript/SkriptEventHandler.java | 12 +++++ .../ch/njol/skript/command/ScriptCommand.java | 4 +- .../java/ch/njol/skript/effects/Delay.java | 11 ++++ .../ch/njol/skript/effects/EffTeleport.java | 11 ++++ .../njol/skript/events/EvtProfileEvent.java | 51 ++++++++++++++++++- .../events/bukkit/ProfileCompletedEvent.java | 31 ++++++++++- .../java/ch/njol/skript/lang/Section.java | 7 ++- .../java/ch/njol/skript/lang/SkriptEvent.java | 2 +- .../java/ch/njol/skript/timings/Profiler.java | 42 +++++++++++++++ .../ch/njol/skript/timings/ProfilerAPI.java | 43 ++++++++++++++++ .../java/ch/njol/skript/util/AsyncEffect.java | 11 ++++ 11 files changed, 219 insertions(+), 6 deletions(-) diff --git a/src/main/java/ch/njol/skript/SkriptEventHandler.java b/src/main/java/ch/njol/skript/SkriptEventHandler.java index 40e650da25a..269adaf0fa2 100644 --- a/src/main/java/ch/njol/skript/SkriptEventHandler.java +++ b/src/main/java/ch/njol/skript/SkriptEventHandler.java @@ -2,10 +2,13 @@ import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.Trigger; +import ch.njol.skript.timings.Profiler; +import ch.njol.skript.timings.ProfilerAPI; import ch.njol.skript.timings.SkriptTimings; import ch.njol.skript.util.Task; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import org.apache.maven.model.Profile; import org.bukkit.Bukkit; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; @@ -162,8 +165,17 @@ private static void execute(Trigger trigger, Event event) { Runnable execute = () -> { logTriggerStart(trigger); Object timing = SkriptTimings.start(trigger.getDebugLabel()); + + boolean skipProfiling = ProfilerAPI.isFiringProfilerEvent.get(); + Profiler profiler = skipProfiling ? null : ProfilerAPI.start(trigger.getDebugLabel()); + trigger.execute(event); SkriptTimings.stop(timing); + + if(!skipProfiling) { + ProfilerAPI.stop(profiler); + } + logTriggerEnd(trigger); }; diff --git a/src/main/java/ch/njol/skript/command/ScriptCommand.java b/src/main/java/ch/njol/skript/command/ScriptCommand.java index 48d6c01dbbc..31de74ec2bb 100644 --- a/src/main/java/ch/njol/skript/command/ScriptCommand.java +++ b/src/main/java/ch/njol/skript/command/ScriptCommand.java @@ -205,7 +205,9 @@ public ScriptCommand( this.arguments = arguments; trigger = new Trigger(script, "command /" + name, new SimpleEvent(), ScriptLoader.loadItems(node)); - trigger.setLineNumber(node.getLine()); + int lineNumber = node.getLine(); + trigger.setLineNumber(lineNumber); + trigger.setDebugLabel(script.nameAndPath() + ".sk: line " + lineNumber + " part of command /" + name); bukkitCommand = setupBukkitCommand(); } diff --git a/src/main/java/ch/njol/skript/effects/Delay.java b/src/main/java/ch/njol/skript/effects/Delay.java index 72e1a0dd786..86d05670b5a 100644 --- a/src/main/java/ch/njol/skript/effects/Delay.java +++ b/src/main/java/ch/njol/skript/effects/Delay.java @@ -11,6 +11,8 @@ import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.Trigger; import ch.njol.skript.lang.TriggerItem; +import ch.njol.skript.timings.Profiler; +import ch.njol.skript.timings.ProfilerAPI; import ch.njol.skript.timings.SkriptTimings; import ch.njol.skript.util.Timespan; import ch.njol.skript.variables.Variables; @@ -80,6 +82,14 @@ protected TriggerItem walk(Event event) { Variables.setLocalVariables(event, localVars); Object timing = null; // Timings reference must be kept so that it can be stopped after TriggerItem execution + Profiler profiler = null; + + if (ProfilerAPI.enabled()) { + Trigger trigger = getTrigger(); + if (trigger != null) + profiler = ProfilerAPI.start(trigger.getDebugLabel()); + } + if (SkriptTimings.enabled()) { // getTrigger call is not free, do it only if we must Trigger trigger = getTrigger(); if (trigger != null) @@ -90,6 +100,7 @@ protected TriggerItem walk(Event event) { Variables.removeLocals(event); // Clean up local vars, we may be exiting now SkriptTimings.stop(timing); // Stop timing if it was even started + ProfilerAPI.stop(profiler); }, Math.max(duration.getAs(Timespan.TimePeriod.TICK), 1)); // Minimum delay is one tick, less than it is useless! } return null; diff --git a/src/main/java/ch/njol/skript/effects/EffTeleport.java b/src/main/java/ch/njol/skript/effects/EffTeleport.java index 1dc3fe781b4..5aae44fda8e 100644 --- a/src/main/java/ch/njol/skript/effects/EffTeleport.java +++ b/src/main/java/ch/njol/skript/effects/EffTeleport.java @@ -6,6 +6,8 @@ import ch.njol.skript.lang.*; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.sections.EffSecSpawn.SpawnEvent; +import ch.njol.skript.timings.Profiler; +import ch.njol.skript.timings.ProfilerAPI; import ch.njol.skript.timings.SkriptTimings; import ch.njol.skript.util.Direction; import ch.njol.skript.variables.Variables; @@ -150,6 +152,7 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye // Continue the rest of the trigger if there is one Object timing = null; + Profiler profiler = null; if (next != null) { if (SkriptTimings.enabled()) { Trigger trigger = getTrigger(); @@ -158,10 +161,18 @@ public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelaye } } + if (ProfilerAPI.enabled()) { + Trigger trigger = getTrigger(); + if (trigger != null) { + profiler = ProfilerAPI.start(trigger.getDebugLabel()); + } + } + TriggerItem.walk(next, event); } Variables.removeLocals(event); // Clean up local vars, we may be exiting now SkriptTimings.stop(timing); + ProfilerAPI.stop(profiler); }); return null; } diff --git a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java index 3be4c69b33e..ff323968b22 100644 --- a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java +++ b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java @@ -1,4 +1,51 @@ package ch.njol.skript.events; -public class EvtTimingCreated { -} +import ch.njol.skript.Skript; +import ch.njol.skript.events.bukkit.ProfileCompletedEvent; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; +import ch.njol.skript.registrations.EventValues; +import ch.njol.skript.util.Getter; + +public class EvtProfileEvent extends SkriptEvent { + static { + Skript.registerEvent("Profiler Event Available", EvtProfileEvent.class, ProfileCompletedEvent.class, + "(profile|profiler) [event] (complete|completed|available)" + ).description( + "Called after a new profiler event is available" + ).since("2.11"); + + EventValues.registerEventValue( + ProfileCompletedEvent.class, + String.class, + ProfileCompletedEvent::getName + ); + + EventValues.registerEventValue( + ProfileCompletedEvent.class, + Number.class, + ProfileCompletedEvent::getDurationMs + ); + } + + @Override + public boolean init(final Literal[] args, final int matchedPattern, final ParseResult parser) { + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { return "profile event complete"; } + + @Override + public boolean isEventPrioritySupported() { + return false; + } + + @Override + public boolean check(Event event) { + return event instanceof ProfileCompletedEvent; + } +} \ No newline at end of file diff --git a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java index 1cf0559ee5e..a8ea5b5ac3b 100644 --- a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java +++ b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java @@ -1,4 +1,33 @@ package ch.njol.skript.events.bukkit; -public class ProfileCompletedEvent { +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class ProfileCompletedEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + private final String sectionName; + private final double durationMs; + + public ProfileCompletedEvent(String sectionName, double durationMs) { + this.sectionName = sectionName; + this.durationMs = durationMs; + } + + public String getName() { + return sectionName; + } + + public double getDurationMs() { + return durationMs; + } + + @Override + public @NotNull HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } } diff --git a/src/main/java/ch/njol/skript/lang/Section.java b/src/main/java/ch/njol/skript/lang/Section.java index cd4a2093faf..31e58993872 100644 --- a/src/main/java/ch/njol/skript/lang/Section.java +++ b/src/main/java/ch/njol/skript/lang/Section.java @@ -10,6 +10,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.skriptlang.skript.lang.script.Script; import java.util.ArrayList; import java.util.Iterator; @@ -137,7 +138,11 @@ protected final Trigger loadCode(SectionNode sectionNode, String name, @Nullable // return the parser to its original state parser.restoreBackup(parserBackup); - return new Trigger(parser.getCurrentScript(), name, skriptEvent, triggerItems); + Script script = parser.getCurrentScript(); + Trigger trigger = new Trigger(script, name, skriptEvent, triggerItems); + trigger.setDebugLabel(script.nameAndPath() + ".sk: line " + sectionNode.getLine() + " as part of section"); + + return trigger; } /** diff --git a/src/main/java/ch/njol/skript/lang/SkriptEvent.java b/src/main/java/ch/njol/skript/lang/SkriptEvent.java index c7eb245fb22..162b261dec8 100644 --- a/src/main/java/ch/njol/skript/lang/SkriptEvent.java +++ b/src/main/java/ch/njol/skript/lang/SkriptEvent.java @@ -132,7 +132,7 @@ public boolean load() { trigger = new Trigger(script, expr, this, items); int lineNumber = source.getLine(); trigger.setLineNumber(lineNumber); // Set line number for debugging - trigger.setDebugLabel(script + ": line " + lineNumber); + trigger.setDebugLabel(script.nameAndPath() + ".sk: line " + lineNumber + " (expr " + expr + ")"); } finally { getParser().deleteCurrentEvent(); } diff --git a/src/main/java/ch/njol/skript/timings/Profiler.java b/src/main/java/ch/njol/skript/timings/Profiler.java index d21af02ddc5..5ce66ddac9b 100644 --- a/src/main/java/ch/njol/skript/timings/Profiler.java +++ b/src/main/java/ch/njol/skript/timings/Profiler.java @@ -1,4 +1,46 @@ package ch.njol.skript.timings; +import ch.njol.skript.Skript; + +/** + * Profiler instance for the ProfilerAPI + * Equivalent to a Timing + */ public class Profiler { + private final String name; + private long startTime = 0; + private long totalTime = 0; + private boolean running = false; + + public Profiler(String name) { + this.name = name; + } + + public void start() { + if (running) return; // prevent double-starts + startTime = System.nanoTime(); + running = true; + } + + public void stop() { + if (!running) return; // prevent stop without start + long endTime = System.nanoTime(); + long duration = endTime - startTime; + totalTime += duration; + running = false; + + Skript.debug("[Profiler] " + name + " took " + (duration / 1_000_000.0) + " ms"); + } + + public long getTimeNanos() { + return totalTime; + } + + public double getTime() { + return totalTime / 1_000_000.0; + } + + public String getName() { + return name; + } } diff --git a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java index 9b596026684..fa0fc3f1d4c 100644 --- a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java +++ b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java @@ -1,4 +1,47 @@ package ch.njol.skript.timings; +import ch.njol.skript.Skript; +import ch.njol.skript.events.bukkit.ProfileCompletedEvent; +import ch.njol.skript.timings.Profiler; +import org.bukkit.Bukkit; +import org.jetbrains.annotations.Nullable; + +/** + * Timings alternative for post-timings removal + */ public class ProfilerAPI { + + private static volatile boolean enabled = true; + public static final ThreadLocal isFiringProfilerEvent = ThreadLocal.withInitial(() -> false); + + @Nullable + public static Profiler start(String name) { + if (!enabled()) // Timings disabled :( + return null; + Profiler profiler = new Profiler(name); + profiler.start(); + return profiler; + } + + public static void stop(@Nullable Profiler profiler) { + if (profiler == null) // Timings disabled... + return; + profiler.stop(); + + if (isFiringProfilerEvent.get()) return; + isFiringProfilerEvent.set(true); + try { + Bukkit.getPluginManager().callEvent(new ProfileCompletedEvent(profiler.getName(), profiler.getTime())); + } finally { + isFiringProfilerEvent.set(false); + } + } + + public static boolean enabled() { + return enabled; + } + + public static void setEnabled(boolean flag) { + enabled = flag; + } } diff --git a/src/main/java/ch/njol/skript/util/AsyncEffect.java b/src/main/java/ch/njol/skript/util/AsyncEffect.java index 7786185f1ea..4eacf1bd1d7 100644 --- a/src/main/java/ch/njol/skript/util/AsyncEffect.java +++ b/src/main/java/ch/njol/skript/util/AsyncEffect.java @@ -1,5 +1,7 @@ package ch.njol.skript.util; +import ch.njol.skript.timings.Profiler; +import ch.njol.skript.timings.ProfilerAPI; import org.bukkit.Bukkit; import org.bukkit.event.Event; import org.jetbrains.annotations.Nullable; @@ -44,18 +46,27 @@ protected TriggerItem walk(Event e) { if (getNext() != null) { Bukkit.getScheduler().runTask(Skript.getInstance(), () -> { // Walk to next item synchronously Object timing = null; + Profiler profiler = null; if (SkriptTimings.enabled()) { // getTrigger call is not free, do it only if we must Trigger trigger = getTrigger(); if (trigger != null) { timing = SkriptTimings.start(trigger.getDebugLabel()); } } + + if(ProfilerAPI.enabled()) { + Trigger trigger = getTrigger(); + if(trigger != null) { + profiler = ProfilerAPI.start(trigger.getDebugLabel()); + } + } TriggerItem.walk(getNext(), e); Variables.removeLocals(e); // Clean up local vars, we may be exiting now SkriptTimings.stop(timing); // Stop timing if it was even started + ProfilerAPI.stop(profiler); }); } else { Variables.removeLocals(e); From b97a905428b8dcd83a348e365a352b50f52bb668 Mon Sep 17 00:00:00 2001 From: JIBSIL <40243545+JIBSIL@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:17:07 -0400 Subject: [PATCH 03/10] Fix spacing issues Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com> Co-authored-by: Eren <67760502+erenkarakal@users.noreply.github.com> --- src/main/java/ch/njol/skript/SkriptEventHandler.java | 2 +- src/main/java/ch/njol/skript/events/EvtProfileEvent.java | 7 +++++-- .../njol/skript/events/bukkit/ProfileCompletedEvent.java | 1 + src/main/java/ch/njol/skript/timings/Profiler.java | 1 + src/main/java/ch/njol/skript/timings/ProfilerAPI.java | 1 + src/main/java/ch/njol/skript/util/AsyncEffect.java | 4 ++-- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/SkriptEventHandler.java b/src/main/java/ch/njol/skript/SkriptEventHandler.java index 269adaf0fa2..8c24937fdd1 100644 --- a/src/main/java/ch/njol/skript/SkriptEventHandler.java +++ b/src/main/java/ch/njol/skript/SkriptEventHandler.java @@ -172,7 +172,7 @@ private static void execute(Trigger trigger, Event event) { trigger.execute(event); SkriptTimings.stop(timing); - if(!skipProfiling) { + if (!skipProfiling) { ProfilerAPI.stop(profiler); } diff --git a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java index ff323968b22..f1bc7c3210a 100644 --- a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java +++ b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java @@ -37,7 +37,9 @@ public boolean init(final Literal[] args, final int matchedPattern, final Par } @Override - public String toString(@Nullable Event event, boolean debug) { return "profile event complete"; } + public String toString(@Nullable Event event, boolean debug) { + return "profile event complete"; + } @Override public boolean isEventPrioritySupported() { @@ -48,4 +50,5 @@ public boolean isEventPrioritySupported() { public boolean check(Event event) { return event instanceof ProfileCompletedEvent; } -} \ No newline at end of file + +} diff --git a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java index a8ea5b5ac3b..15748f1d456 100644 --- a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java +++ b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java @@ -30,4 +30,5 @@ public double getDurationMs() { public static HandlerList getHandlerList() { return handlers; } + } diff --git a/src/main/java/ch/njol/skript/timings/Profiler.java b/src/main/java/ch/njol/skript/timings/Profiler.java index 5ce66ddac9b..2391fb1c9bc 100644 --- a/src/main/java/ch/njol/skript/timings/Profiler.java +++ b/src/main/java/ch/njol/skript/timings/Profiler.java @@ -43,4 +43,5 @@ public double getTime() { public String getName() { return name; } + } diff --git a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java index fa0fc3f1d4c..036bf274606 100644 --- a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java +++ b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java @@ -44,4 +44,5 @@ public static boolean enabled() { public static void setEnabled(boolean flag) { enabled = flag; } + } diff --git a/src/main/java/ch/njol/skript/util/AsyncEffect.java b/src/main/java/ch/njol/skript/util/AsyncEffect.java index 4eacf1bd1d7..9785bb3a878 100644 --- a/src/main/java/ch/njol/skript/util/AsyncEffect.java +++ b/src/main/java/ch/njol/skript/util/AsyncEffect.java @@ -54,9 +54,9 @@ protected TriggerItem walk(Event e) { } } - if(ProfilerAPI.enabled()) { + if (ProfilerAPI.enabled()) { Trigger trigger = getTrigger(); - if(trigger != null) { + if (trigger != null) { profiler = ProfilerAPI.start(trigger.getDebugLabel()); } } From 75f97fa0f7fbbac8c0ed4df9906549203220fc24 Mon Sep 17 00:00:00 2001 From: JIBSIL <40243545+JIBSIL@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:19:00 -0400 Subject: [PATCH 04/10] Remove erroneous import --- src/main/java/ch/njol/skript/SkriptEventHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/SkriptEventHandler.java b/src/main/java/ch/njol/skript/SkriptEventHandler.java index 8c24937fdd1..7da235a6a1a 100644 --- a/src/main/java/ch/njol/skript/SkriptEventHandler.java +++ b/src/main/java/ch/njol/skript/SkriptEventHandler.java @@ -8,7 +8,6 @@ import ch.njol.skript.util.Task; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; -import org.apache.maven.model.Profile; import org.bukkit.Bukkit; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; From 345534980d1d547bbb4a934531acc96a10cde614 Mon Sep 17 00:00:00 2001 From: JIBSIL <40243545+JIBSIL@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:19:56 -0400 Subject: [PATCH 05/10] Fix version on profiler event Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com> --- src/main/java/ch/njol/skript/events/EvtProfileEvent.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java index f1bc7c3210a..db78831ee5b 100644 --- a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java +++ b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java @@ -13,10 +13,9 @@ public class EvtProfileEvent extends SkriptEvent { static { Skript.registerEvent("Profiler Event Available", EvtProfileEvent.class, ProfileCompletedEvent.class, - "(profile|profiler) [event] (complete|completed|available)" - ).description( - "Called after a new profiler event is available" - ).since("2.11"); + "(profile|profiler) [event] (complete|completed|available)") + .description("Called after a new profiler event is available") + .since("INSERT VERSION"); EventValues.registerEventValue( ProfileCompletedEvent.class, From d005af4a7c80e7759ba6f5ba85437b633169b70d Mon Sep 17 00:00:00 2001 From: JIBSIL <40243545+JIBSIL@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:22:43 -0400 Subject: [PATCH 06/10] Add javadocs to ProfileCompletedEvent --- .../events/bukkit/ProfileCompletedEvent.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java index 15748f1d456..51f95fab1f9 100644 --- a/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java +++ b/src/main/java/ch/njol/skript/events/bukkit/ProfileCompletedEvent.java @@ -4,31 +4,56 @@ import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; +/** + * Represents a custom event triggered when a profiling section is completed. + * This event holds information about the name of the profiling section and + * the time it took to complete in milliseconds. + */ public class ProfileCompletedEvent extends Event { private static final HandlerList handlers = new HandlerList(); private final String sectionName; private final double durationMs; + /** + * Constructs a new ProfileCompletedEvent. + * @param sectionName the name of the profiling section + * @param durationMs the duration in milliseconds the section took to execute + */ public ProfileCompletedEvent(String sectionName, double durationMs) { this.sectionName = sectionName; this.durationMs = durationMs; } + /** + * Gets the name of the profiling section that was completed. + * @return the name of the completed profiling section + */ public String getName() { return sectionName; } + /** + * Gets the duration in milliseconds that the profiling section took to complete. + * @return the execution time of the section in milliseconds + */ public double getDurationMs() { return durationMs; } + /** + * Gets the list of handlers registered for this event. + * @return the list of handlers + */ @Override public @NotNull HandlerList getHandlers() { return handlers; } + /** + * Gets the static handler list for this event class. + * @return the static handler list + */ public static HandlerList getHandlerList() { return handlers; } - } From 607eb2c3273e5163aae48bdff450f96b8cd6f787 Mon Sep 17 00:00:00 2001 From: JIBSIL Date: Wed, 2 Jul 2025 16:32:24 -0400 Subject: [PATCH 07/10] Remove references to timings in documentation --- src/main/java/ch/njol/skript/timings/Profiler.java | 3 ++- src/main/java/ch/njol/skript/timings/ProfilerAPI.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/ch/njol/skript/timings/Profiler.java b/src/main/java/ch/njol/skript/timings/Profiler.java index 2391fb1c9bc..27f89fff250 100644 --- a/src/main/java/ch/njol/skript/timings/Profiler.java +++ b/src/main/java/ch/njol/skript/timings/Profiler.java @@ -4,7 +4,8 @@ /** * Profiler instance for the ProfilerAPI - * Equivalent to a Timing + * Each profiler times how long it takes for a given trigger to complete, + * along with the invocator script information */ public class Profiler { private final String name; diff --git a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java index 036bf274606..d43e5a7c865 100644 --- a/src/main/java/ch/njol/skript/timings/ProfilerAPI.java +++ b/src/main/java/ch/njol/skript/timings/ProfilerAPI.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable; /** - * Timings alternative for post-timings removal + * Profiler API for timing how long a given event takes */ public class ProfilerAPI { From e0530c4182bf9a9a62ede468525de894b734c2e4 Mon Sep 17 00:00:00 2001 From: JIBSIL <40243545+JIBSIL@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:34:31 -0400 Subject: [PATCH 08/10] Remove final from profile event init Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com> --- src/main/java/ch/njol/skript/events/EvtProfileEvent.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java index db78831ee5b..62bb269d014 100644 --- a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java +++ b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java @@ -31,7 +31,7 @@ public class EvtProfileEvent extends SkriptEvent { } @Override - public boolean init(final Literal[] args, final int matchedPattern, final ParseResult parser) { + public boolean init(Literal[] args, int matchedPattern, ParseResult parser) { return true; } From 87885e42f92b83be2c47e0e0d9311ed0a44c99cf Mon Sep 17 00:00:00 2001 From: JIBSIL <40243545+JIBSIL@users.noreply.github.com> Date: Wed, 2 Jul 2025 16:36:23 -0400 Subject: [PATCH 09/10] Fix method order --- src/main/java/ch/njol/skript/events/EvtProfileEvent.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java index 62bb269d014..539fd642ea6 100644 --- a/src/main/java/ch/njol/skript/events/EvtProfileEvent.java +++ b/src/main/java/ch/njol/skript/events/EvtProfileEvent.java @@ -36,8 +36,8 @@ public boolean init(Literal[] args, int matchedPattern, ParseResult parser) { } @Override - public String toString(@Nullable Event event, boolean debug) { - return "profile event complete"; + public boolean check(Event event) { + return event instanceof ProfileCompletedEvent; } @Override @@ -46,8 +46,8 @@ public boolean isEventPrioritySupported() { } @Override - public boolean check(Event event) { - return event instanceof ProfileCompletedEvent; + public String toString(@Nullable Event event, boolean debug) { + return "profile event complete"; } } From c203803e9e608256a71b3539a9fda7ccd3f191df Mon Sep 17 00:00:00 2001 From: JIBSIL Date: Wed, 2 Jul 2025 16:39:29 -0400 Subject: [PATCH 10/10] Be more specific with Section debug info --- src/main/java/ch/njol/skript/lang/Section.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/njol/skript/lang/Section.java b/src/main/java/ch/njol/skript/lang/Section.java index 31e58993872..4738815443f 100644 --- a/src/main/java/ch/njol/skript/lang/Section.java +++ b/src/main/java/ch/njol/skript/lang/Section.java @@ -140,7 +140,7 @@ protected final Trigger loadCode(SectionNode sectionNode, String name, @Nullable Script script = parser.getCurrentScript(); Trigger trigger = new Trigger(script, name, skriptEvent, triggerItems); - trigger.setDebugLabel(script.nameAndPath() + ".sk: line " + sectionNode.getLine() + " as part of section"); + trigger.setDebugLabel(script.nameAndPath() + ".sk: line " + sectionNode.getLine() + " as part of section " + name); return trigger; }