From 672314884ea0d571b7778fba008955d872ffd6d0 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Mon, 15 Sep 2025 00:47:47 +0200
Subject: [PATCH 01/23] Init commit
---
.../java/ch/njol/skript/doc/Category.java | 62 +++++++++++++++++++
.../java/ch/njol/skript/doc/CategoryImpl.java | 51 +++++++++++++++
.../ch/njol/skript/doc/JSONGenerator.java | 51 +++++++++++++++
.../skriptlang/skript/addon/AddonModule.java | 18 ++++++
.../damagesource/DamageSourceModule.java | 3 +
.../skript/registration/SyntaxOrigin.java | 52 ++++++++++++++++
6 files changed, 237 insertions(+)
create mode 100644 src/main/java/ch/njol/skript/doc/Category.java
create mode 100644 src/main/java/ch/njol/skript/doc/CategoryImpl.java
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
new file mode 100644
index 00000000000..5c8b9bebf15
--- /dev/null
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -0,0 +1,62 @@
+package ch.njol.skript.doc;
+
+import com.google.common.base.Preconditions;
+import org.jetbrains.annotations.NotNull;
+import org.skriptlang.skript.addon.AddonModule;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Represents a category a documented element can belong to.
+ */
+public interface Category {
+
+ Category ENTITIES = of("Entities", 200, "entity", "entities", "animal", "panda", "allay",
+ "zombie", "goat", "horse", "pig", "fish", "villager", "bee");
+ Category BREEDING = of("Breeding");
+ Category PLAYERS = of("Players", 250, "player", "operator");
+ Category DAMAGE_SOURCES = of("Damage Sources", 250, "damage source");
+ Category BLOCKS = of("Blocks", "block");
+ Category STRINGS = of("Strings", "string", "text");
+ Category COMMANDS = of("Commands", "command");
+ Category ITEMS = of("Items", "item", "enchantment", "lore", "tooltip", "banner");
+ Category WORLDS = of("Worlds", 400, "world");
+ Category SCRIPTS = of("Scripts", "script");
+ Category DISPLAYS = of("Displays", 50, "display");
+ Category TIME = of("Time", "time", "unix");
+ Category UUIDS = of("UUIDs", 300, "uuid");
+ Category DATES = of("Dates", 300, "date");
+ Category MATH = of("Math", 50, "angle", "degree", "radian",
+ "arithmetic", "vector", "vectors", "nan", "round", "rounds", "root", "quaternion", "permutations",
+ "combinations", "numbers", "infinity", "exponential");
+
+ @NotNull String name();
+
+ int priority();
+
+ @NotNull Set keywords();
+
+ @NotNull Set modules();
+
+ static Category of(@NotNull String name, int priority, String @NotNull ... keywords) {
+ Preconditions.checkNotNull(name, "name cannot be null");
+ for (String keyword : keywords) {
+ Preconditions.checkNotNull(keyword, "keywords cannot have null values");
+ }
+
+ return new CategoryImpl(name, priority, new HashSet<>(Set.of(keywords)));
+ }
+
+ static Category of(@NotNull String name, @NotNull String... keywords) {
+ return of(name, 100, keywords);
+ }
+
+ /**
+ * @return All registered categories.
+ */
+ static Set values() {
+ return CategoryImpl.getInstances();
+ }
+
+}
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
new file mode 100644
index 00000000000..2653cd86fa4
--- /dev/null
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -0,0 +1,51 @@
+package ch.njol.skript.doc;
+
+import org.jetbrains.annotations.NotNull;
+import org.skriptlang.skript.addon.AddonModule;
+import org.skriptlang.skript.util.Priority;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+final class CategoryImpl implements Category {
+
+ private static final Set instances = new HashSet<>();
+ private final String name;
+ private final int priority;
+ private final Set keywords;
+ private final Set modules;
+
+ public static Set getInstances() {
+ return instances;
+ }
+
+ CategoryImpl(String name, int priority, Set keywords) {
+ instances.add(this);
+ this.name = name;
+ this.priority = priority;
+ this.keywords = keywords.stream().map(String::toLowerCase).collect(Collectors.toSet());
+ this.modules = new HashSet<>();
+ }
+
+ @Override
+ public @NotNull String name() {
+ return name;
+ }
+
+ @Override
+ public int priority() {
+ return priority;
+ }
+
+ @Override
+ public @NotNull Set keywords() {
+ return keywords;
+ }
+
+ @Override
+ public @NotNull Set modules() {
+ return modules;
+ }
+
+}
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index d30d0f039ac..e764e86246e 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -11,6 +11,7 @@
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.registrations.EventValues.EventValueInfo;
import ch.njol.skript.util.Version;
+import com.google.common.base.Joiner;
import com.google.common.collect.Multimap;
import com.google.gson.*;
import org.bukkit.event.Cancellable;
@@ -18,8 +19,11 @@
import org.bukkit.event.block.BlockCanBuildEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.lang.structure.Structure;
import org.skriptlang.skript.lang.structure.StructureInfo;
+import org.skriptlang.skript.registration.SyntaxOrigin;
+import org.skriptlang.skript.registration.SyntaxOrigin.ElementOrigin;
import java.io.File;
import java.io.IOException;
@@ -126,6 +130,9 @@ private static JsonObject generatedAnnotatedElement(SyntaxElementInfo> syntaxI
Keywords keywords = syntaxClass.getAnnotation(Keywords.class);
syntaxJsonObject.add("keywords", keywords == null ? null : convertToJsonArray(keywords.value()));
+ syntaxJsonObject.addProperty("category", getCategory(syntaxInfo.origin(), name.value(),
+ description == null ? null : description.value(), syntaxInfo.getPatterns()));
+
return syntaxJsonObject;
}
@@ -148,6 +155,7 @@ private static JsonObject generateEventElement(SkriptEventInfo> info) {
syntaxJsonObject.add("examples", convertToJsonArray(info.getExamples()));
syntaxJsonObject.add("eventValues", getEventValues(info));
syntaxJsonObject.add("keywords", convertToJsonArray(info.getKeywords()));
+ syntaxJsonObject.addProperty("category", getCategory(info.origin(), info.getName(), info.getDescription(), info.getPatterns()));
return syntaxJsonObject;
}
@@ -294,6 +302,8 @@ private static JsonObject generateClassInfoElement(ClassInfo> classInfo) {
syntaxJsonObject.add("description", convertToJsonArray(classInfo.getDescription()));
syntaxJsonObject.add("requirements", convertToJsonArray(classInfo.getRequiredPlugins()));
syntaxJsonObject.add("examples", convertToJsonArray(classInfo.getExamples()));
+ syntaxJsonObject.addProperty("category", getCategory(null,
+ Objects.requireNonNullElse(classInfo.getDocName(), classInfo.getCodeName()), classInfo.getDescription(), null));
return syntaxJsonObject;
}
@@ -332,6 +342,7 @@ private static JsonObject generateFunctionElement(JavaFunction> function) {
String functionSignature = function.getSignature().toString(false, false);
functionJsonObject.add("patterns", convertToJsonArray(functionSignature));
+ functionJsonObject.addProperty("category", getCategory(null, function.getName(), function.getDescription(), null));
return functionJsonObject;
}
@@ -382,6 +393,46 @@ private static JsonArray cleanPatterns(String... strings) {
return convertToJsonArray(strings);
}
+ private static @Nullable String getCategory(SyntaxOrigin origin, String name, String[] description, String[] patterns) {
+ if (origin instanceof ElementOrigin elementOrigin) {
+ for (Category category : Category.values()) {
+ if (category.modules().contains(elementOrigin.module())) {
+ return category.name();
+ }
+ }
+ }
+
+ if (patterns == null) patterns = new String[] { "" };
+ String first = getCategory(String.join("", patterns));
+ if (first != null) {
+ return first;
+ } else {
+ if (description == null) description = new String[] { "" };
+ return getCategory(name + String.join("", description) + String.join("", patterns));
+ }
+ }
+
+ private static @Nullable String getCategory(String patterns) {
+ Set options = new HashSet<>();
+
+ for (Category value : Category.values()) {
+ for (String keyword : value.keywords()) {
+ if (patterns.toLowerCase().contains(keyword)) {
+ options.add(value);
+ break;
+ }
+ }
+ }
+
+ if (options.isEmpty()) {
+ return null;
+ } else if (options.size() == 1) {
+ return options.stream().findAny().orElseThrow().name();
+ } else {
+ return options.stream().max(Comparator.comparingInt(Category::priority)).orElseThrow().name();
+ }
+ }
+
/**
* Writes the documentation JsonObject to an output path
*
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 16a414ddfa6..1a5295b3bb7 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -2,6 +2,9 @@
import org.jetbrains.annotations.ApiStatus;
import org.skriptlang.skript.Skript;
+import org.skriptlang.skript.registration.SyntaxInfo;
+import org.skriptlang.skript.registration.SyntaxOrigin;
+import org.skriptlang.skript.registration.SyntaxRegistry.Key;
/**
* A module is a component of a {@link SkriptAddon} used for registering syntax and other {@link Skript} components.
@@ -44,4 +47,19 @@ default boolean canLoad(SkriptAddon addon) {
return true;
}
+ /**
+ * Registers syntax such that it belongs to the current module.
+ *
+ * @param addon The addon this module belongs to.
+ * @param registry The registry to add this syntax to.
+ * @param cls The syntax info.
+ * @param The type of syntax.
+ */
+ default > void register(SkriptAddon addon, Key registry, I cls) {
+ //noinspection unchecked
+ addon.syntaxRegistry().register(registry, (I) cls.toBuilder()
+ .origin(SyntaxOrigin.of(addon, this))
+ .build());
+ }
+
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index 3a286a3c218..1e557885ffb 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -3,6 +3,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.registry.RegistryClassInfo;
+import ch.njol.skript.doc.Category;
import ch.njol.skript.expressions.base.EventValueExpression;
import ch.njol.skript.registrations.Classes;
import ch.njol.skript.registrations.EventValues;
@@ -25,6 +26,8 @@ public boolean canLoad(SkriptAddon addon) {
@Override
public void init(SkriptAddon addon) {
+ Category.DAMAGE_SOURCES.modules().add(this);
+
Classes.registerClass(new ClassInfo<>(DamageSource.class, "damagesource")
.user("damage ?sources?")
.name("Damage Source")
diff --git a/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java b/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java
index b5e8aa9d552..d5d2c70540e 100644
--- a/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java
+++ b/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java
@@ -2,6 +2,7 @@
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
+import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
/**
@@ -52,6 +53,57 @@ public SkriptAddon addon() {
}
+ /**
+ * Constructs a syntax origin from an addon and module.
+ * @param addon The addon to construct this origin from.
+ * @param module The module to include in this origin.
+ * @return An origin pointing to the provided addon and module.
+ */
+ @Contract("_, _ -> new")
+ static SyntaxOrigin of(SkriptAddon addon, AddonModule module) {
+ return new ElementOrigin(addon, module);
+ }
+
+ /**
+ * An origin describing the addon and module a syntax has originated from.
+ * @see SyntaxOrigin#of(SkriptAddon, AddonModule)
+ */
+ final class ElementOrigin implements SyntaxOrigin {
+
+ private final SkriptAddon addon;
+ private final AddonModule module;
+
+ private ElementOrigin(SkriptAddon addon, AddonModule module) {
+ this.addon = addon.unmodifiableView();
+ this.module = module;
+ }
+
+ /**
+ * @return A string representing the name of the addon this origin describes.
+ * Equivalent to {@link SkriptAddon#name()}.
+ */
+ @Override
+ public String name() {
+ return addon.name();
+ }
+
+ /**
+ * @return An unmodifiable view of the addon this origin describes.
+ * @see SkriptAddon#unmodifiableView()
+ */
+ public SkriptAddon addon() {
+ return addon;
+ }
+
+ /**
+ * @return The module used for registering this element.
+ */
+ public AddonModule module() {
+ return module;
+ }
+
+ }
+
/**
* @return A string representing this origin.
*/
From 421380634a708fc4f445932d584fae1971c46bcd Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Mon, 15 Sep 2025 21:49:04 +0200
Subject: [PATCH 02/23] add example
---
.../java/ch/njol/skript/doc/Category.java | 21 +++++++++++++-----
.../java/ch/njol/skript/doc/CategoryImpl.java | 14 ++++++++----
.../ch/njol/skript/doc/JSONGenerator.java | 12 ++++++++--
.../damagesource/DamageSourceModule.java | 6 ++++-
.../elements/CondScalesWithDifficulty.java | 22 +++++++++----------
5 files changed, 52 insertions(+), 23 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
index 5c8b9bebf15..a9493e9b1f7 100644
--- a/src/main/java/ch/njol/skript/doc/Category.java
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -2,6 +2,7 @@
import com.google.common.base.Preconditions;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.AddonModule;
import java.util.HashSet;
@@ -10,7 +11,8 @@
/**
* Represents a category a documented element can belong to.
*/
-public interface Category {
+public sealed interface Category
+ permits CategoryImpl {
Category ENTITIES = of("Entities", 200, "entity", "entities", "animal", "panda", "allay",
"zombie", "goat", "horse", "pig", "fish", "villager", "bee");
@@ -31,13 +33,22 @@ public interface Category {
"arithmetic", "vector", "vectors", "nan", "round", "rounds", "root", "quaternion", "permutations",
"combinations", "numbers", "infinity", "exponential");
+ /**
+ * @return The display name of this category.
+ */
@NotNull String name();
- int priority();
-
- @NotNull Set keywords();
+ /**
+ * Adds a module to this category.
+ *
+ * @param module The module to add.
+ */
+ void addModule(@NotNull AddonModule module);
- @NotNull Set modules();
+ /**
+ * @return The modules that are represented by this category.
+ */
+ @Unmodifiable @NotNull Set modules();
static Category of(@NotNull String name, int priority, String @NotNull ... keywords) {
Preconditions.checkNotNull(name, "name cannot be null");
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index 2653cd86fa4..b502920c524 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -1,9 +1,10 @@
package ch.njol.skript.doc;
+import com.google.common.base.Preconditions;
import org.jetbrains.annotations.NotNull;
import org.skriptlang.skript.addon.AddonModule;
-import org.skriptlang.skript.util.Priority;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@@ -33,19 +34,24 @@ public static Set getInstances() {
return name;
}
- @Override
public int priority() {
return priority;
}
- @Override
public @NotNull Set keywords() {
return keywords;
}
+ @Override
+ public void addModule(@NotNull AddonModule module) {
+ Preconditions.checkNotNull(module, "module cannot be null");
+
+ modules.add(module);
+ }
+
@Override
public @NotNull Set modules() {
- return modules;
+ return Collections.unmodifiableSet(modules);
}
}
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index e764e86246e..fe5888e34fd 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -416,7 +416,11 @@ private static JsonArray cleanPatterns(String... strings) {
Set options = new HashSet<>();
for (Category value : Category.values()) {
- for (String keyword : value.keywords()) {
+ if (!(value instanceof CategoryImpl impl)) {
+ break;
+ }
+
+ for (String keyword : impl.keywords()) {
if (patterns.toLowerCase().contains(keyword)) {
options.add(value);
break;
@@ -429,7 +433,11 @@ private static JsonArray cleanPatterns(String... strings) {
} else if (options.size() == 1) {
return options.stream().findAny().orElseThrow().name();
} else {
- return options.stream().max(Comparator.comparingInt(Category::priority)).orElseThrow().name();
+ return options.stream()
+ .filter(it -> it instanceof CategoryImpl)
+ .map(it -> (CategoryImpl) it)
+ .max(Comparator.comparingInt(CategoryImpl::priority))
+ .orElseThrow().name();
}
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index 1e557885ffb..3694c87b01f 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -14,6 +14,8 @@
import org.bukkit.event.entity.EntityDeathEvent;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
+import org.skriptlang.skript.bukkit.damagesource.elements.CondScalesWithDifficulty;
+import org.skriptlang.skript.registration.SyntaxRegistry;
import java.io.IOException;
@@ -26,7 +28,7 @@ public boolean canLoad(SkriptAddon addon) {
@Override
public void init(SkriptAddon addon) {
- Category.DAMAGE_SOURCES.modules().add(this);
+ Category.DAMAGE_SOURCES.addModule(this);
Classes.registerClass(new ClassInfo<>(DamageSource.class, "damagesource")
.user("damage ?sources?")
@@ -57,6 +59,8 @@ public void init(SkriptAddon addon) {
@Override
public void load(SkriptAddon addon) {
+ register(addon, SyntaxRegistry.CONDITION, CondScalesWithDifficulty.info());
+
try {
Skript.getAddonInstance().loadClasses("org.skriptlang.skript.bukkit.damagesource", "elements");
} catch (IOException e) {
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
index 0b1f2c2a72a..1d9060d5694 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
@@ -1,6 +1,5 @@
package org.skriptlang.skript.bukkit.damagesource.elements;
-import ch.njol.skript.Skript;
import ch.njol.skript.conditions.base.PropertyCondition;
import ch.njol.skript.doc.*;
import ch.njol.skript.lang.Expression;
@@ -11,24 +10,25 @@
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Does Scale With Difficulty")
@Description("Whether the damage from a damage source scales with the difficulty of the server.")
@Example("""
- on death:
- if event-damage source scales damage with difficulty:
- """)
+ on death:
+ if event-damage source scales damage with difficulty:
+ """)
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class CondScalesWithDifficulty extends PropertyCondition implements DamageSourceExperimentSyntax {
- static {
- Skript.registerCondition(CondScalesWithDifficulty.class,
- "%damagesources% ((does|do) scale|scales) damage with difficulty",
- "%damagesources% (do not|don't|does not|doesn't) scale damage with difficulty",
- "%damagesources%'[s] damage ((does|do) scale|scales) with difficulty",
- "%damagesources%'[s] damage (do not|don't|does not|doesn't) scale with difficulty");
+ public static SyntaxInfo info() {
+ return SyntaxInfo.builder(CondScalesWithDifficulty.class)
+ .addPatterns("%damagesources% ((does|do) scale|scales) damage with difficulty",
+ "%damagesources% (do not|don't|does not|doesn't) scale damage with difficulty",
+ "%damagesources%'[s] damage ((does|do) scale|scales) with difficulty",
+ "%damagesources%'[s] damage (do not|don't|does not|doesn't) scale with difficulty")
+ .build();
}
@Override
From aa11019b4ecab4dbd57e38732fc677d740d93cf9 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Mon, 15 Sep 2025 22:25:10 +0200
Subject: [PATCH 03/23] Move to new registration API
---
.../java/ch/njol/skript/doc/Category.java | 31 ++++++++++---------
.../java/ch/njol/skript/doc/CategoryImpl.java | 8 +----
.../ch/njol/skript/doc/JSONGenerator.java | 11 ++-----
.../skriptlang/skript/addon/AddonModule.java | 16 ++++++++++
.../damagesource/DamageSourceModule.java | 17 +++++-----
.../elements/CondScalesWithDifficulty.java | 1 +
.../elements/CondWasIndirect.java | 13 ++++----
.../elements/ExprCausingEntity.java | 8 +++--
.../elements/ExprCreatedDamageSource.java | 9 ++++--
.../elements/ExprDamageLocation.java | 9 ++++--
.../damagesource/elements/ExprDamageType.java | 9 ++++--
.../elements/ExprDirectEntity.java | 10 ++++--
.../elements/ExprFoodExhaustion.java | 9 ++++--
.../elements/ExprSecDamageSource.java | 9 ++++++
.../elements/ExprSourceLocation.java | 9 ++++--
15 files changed, 105 insertions(+), 64 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
index a9493e9b1f7..49a830e6a08 100644
--- a/src/main/java/ch/njol/skript/doc/Category.java
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -14,22 +14,22 @@
public sealed interface Category
permits CategoryImpl {
- Category ENTITIES = of("Entities", 200, "entity", "entities", "animal", "panda", "allay",
+ Category ENTITIES = of("Entities", "entity", "entities", "animal", "panda", "allay",
"zombie", "goat", "horse", "pig", "fish", "villager", "bee");
Category BREEDING = of("Breeding");
- Category PLAYERS = of("Players", 250, "player", "operator");
- Category DAMAGE_SOURCES = of("Damage Sources", 250, "damage source");
+ Category PLAYERS = of("Players", "player", "operator");
+ Category DAMAGE_SOURCES = of("Damage Sources", "damage source");
Category BLOCKS = of("Blocks", "block");
Category STRINGS = of("Strings", "string", "text");
Category COMMANDS = of("Commands", "command");
Category ITEMS = of("Items", "item", "enchantment", "lore", "tooltip", "banner");
- Category WORLDS = of("Worlds", 400, "world");
+ Category WORLDS = of("Worlds", "world");
Category SCRIPTS = of("Scripts", "script");
- Category DISPLAYS = of("Displays", 50, "display");
+ Category DISPLAYS = of("Displays", "display");
Category TIME = of("Time", "time", "unix");
- Category UUIDS = of("UUIDs", 300, "uuid");
- Category DATES = of("Dates", 300, "date");
- Category MATH = of("Math", 50, "angle", "degree", "radian",
+ Category UUIDS = of("UUIDs", "uuid");
+ Category DATES = of("Dates", "date");
+ Category MATH = of("Math", "angle", "degree", "radian",
"arithmetic", "vector", "vectors", "nan", "round", "rounds", "root", "quaternion", "permutations",
"combinations", "numbers", "infinity", "exponential");
@@ -50,17 +50,20 @@ public sealed interface Category
*/
@Unmodifiable @NotNull Set modules();
- static Category of(@NotNull String name, int priority, String @NotNull ... keywords) {
+ /**
+ * Creates a new category.
+ *
+ * @param name The name.
+ * @param keywords The keywords.
+ * @return The new category.
+ */
+ static Category of(@NotNull String name, String @NotNull ... keywords) {
Preconditions.checkNotNull(name, "name cannot be null");
for (String keyword : keywords) {
Preconditions.checkNotNull(keyword, "keywords cannot have null values");
}
- return new CategoryImpl(name, priority, new HashSet<>(Set.of(keywords)));
- }
-
- static Category of(@NotNull String name, @NotNull String... keywords) {
- return of(name, 100, keywords);
+ return new CategoryImpl(name, new HashSet<>(Set.of(keywords)));
}
/**
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index b502920c524..f64503cf00f 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -13,7 +13,6 @@ final class CategoryImpl implements Category {
private static final Set instances = new HashSet<>();
private final String name;
- private final int priority;
private final Set keywords;
private final Set modules;
@@ -21,10 +20,9 @@ public static Set getInstances() {
return instances;
}
- CategoryImpl(String name, int priority, Set keywords) {
+ CategoryImpl(String name, Set keywords) {
instances.add(this);
this.name = name;
- this.priority = priority;
this.keywords = keywords.stream().map(String::toLowerCase).collect(Collectors.toSet());
this.modules = new HashSet<>();
}
@@ -34,10 +32,6 @@ public static Set getInstances() {
return name;
}
- public int priority() {
- return priority;
- }
-
public @NotNull Set keywords() {
return keywords;
}
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index fe5888e34fd..03de8516014 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -172,7 +172,7 @@ private static JsonArray getEventValues(SkriptEventInfo> info) {
Multimap, EventValueInfo, ?>> allEventValues = EventValues.getPerEventEventValues();
for (Class extends Event> supportedEvent : info.events) {
for (Class extends Event> event : allEventValues.keySet()) {
- if (!event.isAssignableFrom(supportedEvent)) {
+ if (event == null || !event.isAssignableFrom(supportedEvent)) {
continue;
}
@@ -430,15 +430,8 @@ private static JsonArray cleanPatterns(String... strings) {
if (options.isEmpty()) {
return null;
- } else if (options.size() == 1) {
- return options.stream().findAny().orElseThrow().name();
- } else {
- return options.stream()
- .filter(it -> it instanceof CategoryImpl)
- .map(it -> (CategoryImpl) it)
- .max(Comparator.comparingInt(CategoryImpl::priority))
- .orElseThrow().name();
}
+ return options.stream().findAny().orElseThrow().name();
}
/**
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 1a5295b3bb7..777f04d2001 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -6,6 +6,8 @@
import org.skriptlang.skript.registration.SyntaxOrigin;
import org.skriptlang.skript.registration.SyntaxRegistry.Key;
+import java.util.Set;
+
/**
* A module is a component of a {@link SkriptAddon} used for registering syntax and other {@link Skript} components.
*
@@ -62,4 +64,18 @@ default > void register(SkriptAddon addon, Key regist
.build());
}
+ /**
+ * Registers syntax such that it belongs to the current module.
+ *
+ * @param addon The addon this module belongs to.
+ * @param registry The registry to add this syntax to.
+ * @param classes The syntax infos.
+ * @param The type of syntax.
+ */
+ default > void register(SkriptAddon addon, Key registry, Set classes) {
+ for (I cls : classes) {
+ register(addon, registry, cls);
+ }
+ }
+
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index 3694c87b01f..d3157fda6c8 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -14,10 +14,10 @@
import org.bukkit.event.entity.EntityDeathEvent;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
-import org.skriptlang.skript.bukkit.damagesource.elements.CondScalesWithDifficulty;
+import org.skriptlang.skript.bukkit.damagesource.elements.*;
import org.skriptlang.skript.registration.SyntaxRegistry;
-import java.io.IOException;
+import java.util.Set;
public class DamageSourceModule implements AddonModule {
@@ -59,13 +59,14 @@ public void init(SkriptAddon addon) {
@Override
public void load(SkriptAddon addon) {
- register(addon, SyntaxRegistry.CONDITION, CondScalesWithDifficulty.info());
+ register(addon, SyntaxRegistry.CONDITION,
+ Set.of(CondScalesWithDifficulty.info(), CondWasIndirect.info()));
- try {
- Skript.getAddonInstance().loadClasses("org.skriptlang.skript.bukkit.damagesource", "elements");
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
+ register(addon, SyntaxRegistry.EXPRESSION,
+ Set.of(ExprCausingEntity.info(), ExprCreatedDamageSource.info(),
+ ExprDamageLocation.info(), ExprDamageType.info(),
+ ExprDirectEntity.info(), ExprFoodExhaustion.info(),
+ ExprSecDamageSource.info(), ExprSourceLocation.info()));
}
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
index 1d9060d5694..e855e49dccd 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
@@ -24,6 +24,7 @@ public class CondScalesWithDifficulty extends PropertyCondition im
public static SyntaxInfo info() {
return SyntaxInfo.builder(CondScalesWithDifficulty.class)
+ .supplier(CondScalesWithDifficulty::new)
.addPatterns("%damagesources% ((does|do) scale|scales) damage with difficulty",
"%damagesources% (do not|don't|does not|doesn't) scale damage with difficulty",
"%damagesources%'[s] damage ((does|do) scale|scales) with difficulty",
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java
index c9ee8dafd92..a0de9806a91 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java
@@ -11,6 +11,7 @@
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Was Indirectly Caused")
@Description({
@@ -24,14 +25,14 @@
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class CondWasIndirect extends PropertyCondition implements DamageSourceExperimentSyntax {
- static {
- Skript.registerCondition(CondWasIndirect.class, ConditionType.PROPERTY,
- "%damagesources% (was|were) ([:in]directly caused|caused [:in]directly)",
- "%damagesources% (was not|wasn't|were not|weren't) ([:in]directly caused|caused [:in]directly)"
- );
+ public static SyntaxInfo info() {
+ return SyntaxInfo.builder(CondWasIndirect.class)
+ .supplier(CondWasIndirect::new)
+ .addPatterns("%damagesources% (was|were) ([:in]directly caused|caused [:in]directly)",
+ "%damagesources% (was not|wasn't|were not|weren't) ([:in]directly caused|caused [:in]directly)")
+ .build();
}
private boolean indirect;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
index 46cbac41fec..8e8695eaf69 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
@@ -14,6 +14,7 @@
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Damage Source - Causing Entity")
@Description({
@@ -37,8 +38,11 @@ set the damage location to location(0, 0, 10)
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprCausingEntity extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- static {
- registerDefault(ExprCausingEntity.class, Entity.class, "(causing|responsible) entity", "damagesources");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprCausingEntity.class, Entity.class)
+ .supplier(ExprCausingEntity::new)
+ .addPatterns(getDefaultPatterns("(causing|responsible) entity", "damagesources"))
+ .build();
}
private boolean isEvent;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
index 6efbec5f8c2..d849edee931 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
@@ -7,6 +7,7 @@
import org.bukkit.damage.DamageSource;
import org.bukkit.event.Event;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Created Damage Source")
@Description("Get the created damage source being created/modified in a 'custom damage source' section.")
@@ -16,11 +17,13 @@
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class ExprCreatedDamageSource extends EventValueExpression implements EventRestrictedSyntax {
- static {
- register(ExprCreatedDamageSource.class, DamageSource.class, "created damage source");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprCreatedDamageSource.class, DamageSource.class)
+ .supplier(ExprCreatedDamageSource::new)
+ .addPatterns("created damage source")
+ .build();
}
public ExprCreatedDamageSource() {
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
index 8ef78b71d15..6e03d995233 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
@@ -14,6 +14,7 @@
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Damage Source - Damage Location")
@Description({
@@ -34,11 +35,13 @@ set the damage location to location(0, 0, 10)
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class ExprDamageLocation extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- static {
- registerDefault(ExprDamageLocation.class, Location.class, "damage location", "damagesources");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprDamageLocation.class, Location.class)
+ .supplier(ExprDamageLocation::new)
+ .addPatterns(getDefaultPatterns("damage location", "damagesources"))
+ .build();
}
private boolean isEvent;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
index 54171a3c407..ae1851fbcee 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
@@ -14,6 +14,7 @@
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Damage Source - Damage Type")
@Description({
@@ -34,11 +35,13 @@ set the damage location to location(0, 0, 10)
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class ExprDamageType extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- static {
- registerDefault(ExprDamageType.class, DamageType.class, "damage type", "damagesources");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprDamageType.class, DamageType.class)
+ .supplier(ExprDamageType::new)
+ .addPatterns(getDefaultPatterns("damage type", "damagesources"))
+ .build();
}
private boolean isEvent;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
index 9561eba3360..914cb4a2421 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
@@ -9,11 +9,13 @@
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import org.bukkit.damage.DamageSource;
+import org.bukkit.damage.DamageType;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Damage Source - Direct Entity")
@Description({
@@ -35,11 +37,13 @@ set the damage location to location(0, 0, 10)
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class ExprDirectEntity extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- static {
- registerDefault(ExprDirectEntity.class, Entity.class, "direct entity", "damagesources");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprDirectEntity.class, Entity.class)
+ .supplier(ExprDirectEntity::new)
+ .addPatterns(getDefaultPatterns("direct entity", "damagesources"))
+ .build();
}
private boolean isEvent;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
index 11752bb491f..3c4d9eed4ca 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
@@ -5,6 +5,7 @@
import org.bukkit.damage.DamageSource;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Damage Source - Food Exhaustion")
@Description("The amount of hunger exhaustion caused by a damage source.")
@@ -14,11 +15,13 @@
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class ExprFoodExhaustion extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- static {
- registerDefault(ExprFoodExhaustion.class, Float.class, "food exhaustion", "damagesources");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprFoodExhaustion.class, Float.class)
+ .supplier(ExprFoodExhaustion::new)
+ .addPatterns(getDefaultPatterns("food exhaustion", "damagesources"))
+ .build();
}
@Override
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java
index 6c7168a3788..70fa103630e 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java
@@ -26,6 +26,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -80,6 +81,14 @@ public DamageSourceSectionEvent() {}
}
}
+
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprSecDamageSource.class, DamageSource.class)
+ .supplier(ExprSecDamageSource::new)
+ .addPatterns("[a] custom damage source [(with|using) [the|a] [damage type [of]] %-damagetype%]")
+ .build();
+ }
+
static {
Skript.registerExpression(ExprSecDamageSource.class, DamageSource.class, ExpressionType.COMBINED,
"[a] custom damage source [(with|using) [the|a] [damage type [of]] %-damagetype%]");
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
index 291e649a7e7..d00938019f2 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
@@ -6,6 +6,7 @@
import org.bukkit.damage.DamageSource;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
+import org.skriptlang.skript.registration.DefaultSyntaxInfos;
@Name("Damage Source - Source Location")
@Description({
@@ -20,11 +21,13 @@
""")
@Since("2.12")
@RequiredPlugins("Minecraft 1.20.4+")
-@SuppressWarnings("UnstableApiUsage")
public class ExprSourceLocation extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- static {
- registerDefault(ExprSourceLocation.class, Location.class, "source location", "damagesources");
+ public static DefaultSyntaxInfos.Expression info() {
+ return DefaultSyntaxInfos.Expression.builder(ExprSourceLocation.class, Location.class)
+ .supplier(ExprSourceLocation::new)
+ .addPatterns(getDefaultPatterns("source location", "damagesources"))
+ .build();
}
@Override
From d4c7b512dad8508e2ee87f8c669782afa037263a Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Wed, 17 Sep 2025 13:07:06 +0200
Subject: [PATCH 04/23] wait :(
---
.../java/ch/njol/skript/doc/Category.java | 41 ++++++++-----------
.../java/ch/njol/skript/doc/CategoryImpl.java | 4 ++
.../ch/njol/skript/doc/JSONGenerator.java | 26 ++++++++----
3 files changed, 39 insertions(+), 32 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
index 49a830e6a08..2fa7d7cf4d2 100644
--- a/src/main/java/ch/njol/skript/doc/Category.java
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -11,25 +11,24 @@
/**
* Represents a category a documented element can belong to.
*/
-public sealed interface Category
- permits CategoryImpl {
+public interface Category {
- Category ENTITIES = of("Entities", "entity", "entities", "animal", "panda", "allay",
+ Category ENTITIES = new CategoryImpl("Entities", "entity", "entities", "animal", "panda", "allay",
"zombie", "goat", "horse", "pig", "fish", "villager", "bee");
- Category BREEDING = of("Breeding");
- Category PLAYERS = of("Players", "player", "operator");
- Category DAMAGE_SOURCES = of("Damage Sources", "damage source");
- Category BLOCKS = of("Blocks", "block");
- Category STRINGS = of("Strings", "string", "text");
- Category COMMANDS = of("Commands", "command");
- Category ITEMS = of("Items", "item", "enchantment", "lore", "tooltip", "banner");
- Category WORLDS = of("Worlds", "world");
- Category SCRIPTS = of("Scripts", "script");
- Category DISPLAYS = of("Displays", "display");
- Category TIME = of("Time", "time", "unix");
- Category UUIDS = of("UUIDs", "uuid");
- Category DATES = of("Dates", "date");
- Category MATH = of("Math", "angle", "degree", "radian",
+ Category BREEDING = new CategoryImpl("Breeding");
+ Category PLAYERS = new CategoryImpl("Players", "player", "operator");
+ Category DAMAGE_SOURCES = new CategoryImpl("Damage Sources", "damage source");
+ Category BLOCKS = new CategoryImpl("Blocks", "block");
+ Category STRINGS = new CategoryImpl("Strings", "string", "text");
+ Category COMMANDS = new CategoryImpl("Commands", "command");
+ Category ITEMS = new CategoryImpl("Items", "item", "enchantment", "lore", "tooltip", "banner");
+ Category WORLDS = new CategoryImpl("Worlds", "world");
+ Category SCRIPTS = new CategoryImpl("Scripts", "script");
+ Category DISPLAYS = new CategoryImpl("Displays", "display");
+ Category TIME = new CategoryImpl("Time", "time", "unix");
+ Category UUIDS = new CategoryImpl("UUIDs", "uuid");
+ Category DATES = new CategoryImpl("Dates", "date");
+ Category MATH = new CategoryImpl("Math", "angle", "degree", "radian",
"arithmetic", "vector", "vectors", "nan", "round", "rounds", "root", "quaternion", "permutations",
"combinations", "numbers", "infinity", "exponential");
@@ -54,16 +53,12 @@ public sealed interface Category
* Creates a new category.
*
* @param name The name.
- * @param keywords The keywords.
* @return The new category.
*/
- static Category of(@NotNull String name, String @NotNull ... keywords) {
+ static Category of(@NotNull String name) {
Preconditions.checkNotNull(name, "name cannot be null");
- for (String keyword : keywords) {
- Preconditions.checkNotNull(keyword, "keywords cannot have null values");
- }
- return new CategoryImpl(name, new HashSet<>(Set.of(keywords)));
+ return new CategoryImpl(name, new HashSet<>());
}
/**
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index f64503cf00f..6181279061b 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -20,6 +20,10 @@ public static Set getInstances() {
return instances;
}
+ CategoryImpl(String name, String... keywords) {
+ this(name, new HashSet<>(Set.of(keywords)));
+ }
+
CategoryImpl(String name, Set keywords) {
instances.add(this);
this.name = name;
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index 03de8516014..8a9a9babc16 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -22,6 +22,7 @@
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.lang.structure.Structure;
import org.skriptlang.skript.lang.structure.StructureInfo;
+import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.registration.SyntaxOrigin;
import org.skriptlang.skript.registration.SyntaxOrigin.ElementOrigin;
@@ -84,7 +85,8 @@ private static JsonArray convertToJsonArray(String @Nullable ... strings) {
* @param syntaxInfo the syntax info element to generate the documentation object of
* @return the JsonObject representing the documentation of the provided syntax element
*/
- private static JsonObject generatedAnnotatedElement(SyntaxElementInfo> syntaxInfo) {
+ // TODO WAIT FOR JSONGENERATOR IMPROVEMENTS
+ private static JsonObject generatedAnnotatedElement(SyntaxInfo> syntaxInfo) {
Class> syntaxClass = syntaxInfo.getElementClass();
Name name = syntaxClass.getAnnotation(Name.class);
if (name == null || syntaxClass.getAnnotation(NoDoc.class) != null)
@@ -394,22 +396,28 @@ private static JsonArray cleanPatterns(String... strings) {
}
private static @Nullable String getCategory(SyntaxOrigin origin, String name, String[] description, String[] patterns) {
+ System.out.println("x");
if (origin instanceof ElementOrigin elementOrigin) {
+ System.out.println("===");
for (Category category : Category.values()) {
+ System.out.println(category.name());
+ System.out.println(Arrays.toString(category.modules().stream().map(it -> it.getClass().getSimpleName()).toArray()));
if (category.modules().contains(elementOrigin.module())) {
return category.name();
}
}
}
- if (patterns == null) patterns = new String[] { "" };
- String first = getCategory(String.join("", patterns));
- if (first != null) {
- return first;
- } else {
- if (description == null) description = new String[] { "" };
- return getCategory(name + String.join("", description) + String.join("", patterns));
- }
+ return null;
+
+// if (patterns == null) patterns = new String[] { "" };
+// String first = getCategory(String.join("", patterns));
+// if (first != null) {
+// return first;
+// } else {
+// if (description == null) description = new String[] { "" };
+// return getCategory(name + String.join("", description) + String.join("", patterns));
+// }
}
private static @Nullable String getCategory(String patterns) {
From 34bc9264f0e3ffdce633c15f690f295b812930d8 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Wed, 17 Sep 2025 23:14:13 +0200
Subject: [PATCH 05/23] Add location, fix merge
---
.../java/ch/njol/skript/doc/Category.java | 1 +
.../ch/njol/skript/doc/JSONGenerator.java | 36 +++++++++----------
2 files changed, 17 insertions(+), 20 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
index 2fa7d7cf4d2..8329944b749 100644
--- a/src/main/java/ch/njol/skript/doc/Category.java
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -28,6 +28,7 @@ public interface Category {
Category TIME = new CategoryImpl("Time", "time", "unix");
Category UUIDS = new CategoryImpl("UUIDs", "uuid");
Category DATES = new CategoryImpl("Dates", "date");
+ Category LOCATIONS = new CategoryImpl("Locations", "location");
Category MATH = new CategoryImpl("Math", "angle", "degree", "radian",
"arithmetic", "vector", "vectors", "nan", "round", "rounds", "root", "quaternion", "permutations",
"combinations", "numbers", "infinity", "exponential");
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index d6fc4d252c8..a55313e9e00 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -21,12 +21,14 @@
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
import org.skriptlang.skript.lang.structure.Structure;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
import org.skriptlang.skript.registration.SyntaxInfo;
+import org.skriptlang.skript.registration.SyntaxOrigin;
import org.skriptlang.skript.registration.SyntaxOrigin.ElementOrigin;
import org.skriptlang.skript.registration.SyntaxRegistry;
@@ -161,7 +163,7 @@ private static JsonObject generatedAnnotatedElement(SyntaxInfo> syntaxInfo) {
syntaxJsonObject.add("keywords", keywords == null ? null : convertToJsonArray(keywords.value()));
syntaxJsonObject.addProperty("category", getCategory(syntaxInfo.origin(), name.value(),
- description == null ? null : description.value(), syntaxInfo.getPatterns()));
+ description == null ? null : List.of(description.value()), syntaxInfo.patterns()));
if (syntaxInfo instanceof SyntaxInfo.Expression, ?> expression) {
syntaxJsonObject.add("returns", getExpressionReturnTypes(expression));
@@ -228,8 +230,7 @@ private static JsonObject generateEventElement(BukkitSyntaxInfos.Event> info)
syntaxJsonObject.add("requirements", convertToJsonArray(info.requiredPlugins().toArray(new String[0])));
syntaxJsonObject.add("examples", convertToJsonArray(info.examples().toArray(new String[0])));
syntaxJsonObject.add("eventValues", getEventValues(info));
- syntaxJsonObject.add("keywords", convertToJsonArray(info.getKeywords()));
- syntaxJsonObject.addProperty("category", getCategory(info.origin(), info.getName(), info.getDescription(), info.getPatterns()));
+ syntaxJsonObject.addProperty("category", getCategory(info.origin(), info.name(), info.description(), info.patterns()));
return syntaxJsonObject;
}
@@ -376,7 +377,8 @@ private static JsonObject generateClassInfoElement(ClassInfo> classInfo) {
syntaxJsonObject.add("requirements", convertToJsonArray(classInfo.getRequiredPlugins()));
syntaxJsonObject.add("examples", convertToJsonArray(classInfo.getExamples()));
syntaxJsonObject.addProperty("category", getCategory(null,
- Objects.requireNonNullElse(classInfo.getDocName(), classInfo.getCodeName()), classInfo.getDescription(), null));
+ Objects.requireNonNullElse(classInfo.getDocName(), classInfo.getCodeName()),
+ List.of(classInfo.getDescription()), null));
return syntaxJsonObject;
}
@@ -415,7 +417,7 @@ private static JsonObject generateFunctionElement(JavaFunction> function) {
String functionSignature = function.getSignature().toString(false, false);
functionJsonObject.add("patterns", convertToJsonArray(functionSignature));
- functionJsonObject.addProperty("category", getCategory(null, function.getName(), function.getDescription(), null));
+ functionJsonObject.addProperty("category", getCategory(null, function.getName(), List.of(function.getDescription()), null));
return functionJsonObject;
}
@@ -467,29 +469,23 @@ private static JsonArray cleanPatterns(String... strings) {
return convertToJsonArray(strings);
}
- private static @Nullable String getCategory(SyntaxOrigin origin, String name, String[] description, String[] patterns) {
- System.out.println("x");
+ private static @Nullable String getCategory(SyntaxOrigin origin, String name, Collection description, Collection patterns) {
if (origin instanceof ElementOrigin elementOrigin) {
- System.out.println("===");
for (Category category : Category.values()) {
- System.out.println(category.name());
- System.out.println(Arrays.toString(category.modules().stream().map(it -> it.getClass().getSimpleName()).toArray()));
if (category.modules().contains(elementOrigin.module())) {
return category.name();
}
}
}
- return null;
-
-// if (patterns == null) patterns = new String[] { "" };
-// String first = getCategory(String.join("", patterns));
-// if (first != null) {
-// return first;
-// } else {
-// if (description == null) description = new String[] { "" };
-// return getCategory(name + String.join("", description) + String.join("", patterns));
-// }
+ if (patterns == null) patterns = List.of();
+ String first = getCategory(String.join("", patterns));
+ if (first != null) {
+ return first;
+ } else {
+ if (description == null) description = List.of();
+ return getCategory(name + String.join("", description) + String.join("", patterns));
+ }
}
private static @Nullable String getCategory(String patterns) {
From 5616181c21c6b2a651c3d2d3c37dfdbc94a20caf Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Wed, 17 Sep 2025 23:21:43 +0200
Subject: [PATCH 06/23] Remove set from register
---
src/main/java/org/skriptlang/skript/addon/AddonModule.java | 3 ++-
.../skript/bukkit/damagesource/DamageSourceModule.java | 6 +++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 777f04d2001..beca701b2a0 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -72,7 +72,8 @@ default > void register(SkriptAddon addon, Key regist
* @param classes The syntax infos.
* @param The type of syntax.
*/
- default > void register(SkriptAddon addon, Key registry, Set classes) {
+ @SuppressWarnings("unchecked")
+ default > void register(SkriptAddon addon, Key registry, I... classes) {
for (I cls : classes) {
register(addon, registry, cls);
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index d3157fda6c8..a1b4cf12be9 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -60,13 +60,13 @@ public void init(SkriptAddon addon) {
@Override
public void load(SkriptAddon addon) {
register(addon, SyntaxRegistry.CONDITION,
- Set.of(CondScalesWithDifficulty.info(), CondWasIndirect.info()));
+ CondScalesWithDifficulty.info(), CondWasIndirect.info());
register(addon, SyntaxRegistry.EXPRESSION,
- Set.of(ExprCausingEntity.info(), ExprCreatedDamageSource.info(),
+ ExprCausingEntity.info(), ExprCreatedDamageSource.info(),
ExprDamageLocation.info(), ExprDamageType.info(),
ExprDirectEntity.info(), ExprFoodExhaustion.info(),
- ExprSecDamageSource.info(), ExprSourceLocation.info()));
+ ExprSecDamageSource.info(), ExprSourceLocation.info());
}
}
From 6fe255e216ab81229a15c3e30055d9fcf51e5f30 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Thu, 18 Sep 2025 00:10:13 +0200
Subject: [PATCH 07/23] Make CategoryImpl use classes instead of instances
---
src/main/java/ch/njol/skript/doc/Category.java | 5 ++---
src/main/java/ch/njol/skript/doc/CategoryImpl.java | 6 +++---
.../java/org/skriptlang/skript/addon/AddonModule.java | 9 +++++++++
.../java/org/skriptlang/skript/addon/SkriptAddon.java | 6 ++++++
.../skript/bukkit/damagesource/DamageSourceModule.java | 10 ++++++----
5 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
index 8329944b749..5fb00798d4b 100644
--- a/src/main/java/ch/njol/skript/doc/Category.java
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -2,7 +2,6 @@
import com.google.common.base.Preconditions;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.AddonModule;
import java.util.HashSet;
@@ -43,12 +42,12 @@ public interface Category {
*
* @param module The module to add.
*/
- void addModule(@NotNull AddonModule module);
+ void addModule(@NotNull Class extends AddonModule> module);
/**
* @return The modules that are represented by this category.
*/
- @Unmodifiable @NotNull Set modules();
+ Set> modules();
/**
* Creates a new category.
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index 6181279061b..95cd655c09b 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -14,7 +14,7 @@ final class CategoryImpl implements Category {
private static final Set instances = new HashSet<>();
private final String name;
private final Set keywords;
- private final Set modules;
+ private final Set> modules;
public static Set getInstances() {
return instances;
@@ -41,14 +41,14 @@ public static Set getInstances() {
}
@Override
- public void addModule(@NotNull AddonModule module) {
+ public void addModule(@NotNull Class extends AddonModule> module) {
Preconditions.checkNotNull(module, "module cannot be null");
modules.add(module);
}
@Override
- public @NotNull Set modules() {
+ public Set> modules() {
return Collections.unmodifiableSet(modules);
}
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index beca701b2a0..305b171db0f 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -1,6 +1,8 @@
package org.skriptlang.skript.addon;
+import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.Skript;
import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.registration.SyntaxOrigin;
@@ -49,6 +51,13 @@ default boolean canLoad(SkriptAddon addon) {
return true;
}
+ /**
+ * @return The category to which this module belongs, or null if this module belongs to no category.
+ */
+ default @Nullable Category category() {
+ return null;
+ }
+
/**
* Registers syntax such that it belongs to the current module.
*
diff --git a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
index d99ac58085b..d65b8182e06 100644
--- a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
+++ b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
@@ -1,5 +1,6 @@
package org.skriptlang.skript.addon;
+import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
import org.skriptlang.skript.Skript;
@@ -97,6 +98,11 @@ default void loadModules(AddonModule... modules) {
for (AddonModule module : filtered) {
module.init(this);
+
+ Category category = module.category();
+ if (category != null) {
+ category.addModule(module.getClass());
+ }
}
for (AddonModule module : filtered) {
module.load(this);
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index a1b4cf12be9..90f0fa33388 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -12,13 +12,12 @@
import org.bukkit.damage.DamageType;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
+import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.damagesource.elements.*;
import org.skriptlang.skript.registration.SyntaxRegistry;
-import java.util.Set;
-
public class DamageSourceModule implements AddonModule {
@Override
@@ -28,8 +27,6 @@ public boolean canLoad(SkriptAddon addon) {
@Override
public void init(SkriptAddon addon) {
- Category.DAMAGE_SOURCES.addModule(this);
-
Classes.registerClass(new ClassInfo<>(DamageSource.class, "damagesource")
.user("damage ?sources?")
.name("Damage Source")
@@ -69,4 +66,9 @@ public void load(SkriptAddon addon) {
ExprSecDamageSource.info(), ExprSourceLocation.info());
}
+ @Override
+ public @Nullable Category category() {
+ return Category.DAMAGE_SOURCES;
+ }
+
}
From afd70a7e4c26763086f24564c45c413591045901 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Thu, 18 Sep 2025 00:24:02 +0200
Subject: [PATCH 08/23] Add docs, bug fix
---
.../ch/njol/skript/doc/JSONGenerator.java | 38 ++++++++++++++-----
.../skriptlang/skript/addon/AddonModule.java | 4 +-
.../skriptlang/skript/addon/SkriptAddon.java | 6 +--
3 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index a55313e9e00..181d9b12d1e 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -21,7 +21,6 @@
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
@@ -162,7 +161,7 @@ private static JsonObject generatedAnnotatedElement(SyntaxInfo> syntaxInfo) {
Keywords keywords = syntaxClass.getAnnotation(Keywords.class);
syntaxJsonObject.add("keywords", keywords == null ? null : convertToJsonArray(keywords.value()));
- syntaxJsonObject.addProperty("category", getCategory(syntaxInfo.origin(), name.value(),
+ syntaxJsonObject.addProperty("category", getCategoryName(syntaxInfo.origin(), name.value(),
description == null ? null : List.of(description.value()), syntaxInfo.patterns()));
if (syntaxInfo instanceof SyntaxInfo.Expression, ?> expression) {
@@ -230,7 +229,7 @@ private static JsonObject generateEventElement(BukkitSyntaxInfos.Event> info)
syntaxJsonObject.add("requirements", convertToJsonArray(info.requiredPlugins().toArray(new String[0])));
syntaxJsonObject.add("examples", convertToJsonArray(info.examples().toArray(new String[0])));
syntaxJsonObject.add("eventValues", getEventValues(info));
- syntaxJsonObject.addProperty("category", getCategory(info.origin(), info.name(), info.description(), info.patterns()));
+ syntaxJsonObject.addProperty("category", getCategoryName(info.origin(), info.name(), info.description(), info.patterns()));
return syntaxJsonObject;
}
@@ -376,7 +375,7 @@ private static JsonObject generateClassInfoElement(ClassInfo> classInfo) {
syntaxJsonObject.add("description", convertToJsonArray(classInfo.getDescription()));
syntaxJsonObject.add("requirements", convertToJsonArray(classInfo.getRequiredPlugins()));
syntaxJsonObject.add("examples", convertToJsonArray(classInfo.getExamples()));
- syntaxJsonObject.addProperty("category", getCategory(null,
+ syntaxJsonObject.addProperty("category", getCategoryName(null,
Objects.requireNonNullElse(classInfo.getDocName(), classInfo.getCodeName()),
List.of(classInfo.getDescription()), null));
@@ -417,7 +416,7 @@ private static JsonObject generateFunctionElement(JavaFunction> function) {
String functionSignature = function.getSignature().toString(false, false);
functionJsonObject.add("patterns", convertToJsonArray(functionSignature));
- functionJsonObject.addProperty("category", getCategory(null, function.getName(), List.of(function.getDescription()), null));
+ functionJsonObject.addProperty("category", getCategoryName(null, function.getName(), List.of(function.getDescription()), null));
return functionJsonObject;
}
@@ -469,10 +468,25 @@ private static JsonArray cleanPatterns(String... strings) {
return convertToJsonArray(strings);
}
- private static @Nullable String getCategory(SyntaxOrigin origin, String name, Collection description, Collection patterns) {
+ /**
+ * Returns the category name of an element given its origin, name, description and patterns.
+ *
+ * Attempts to find a category by using pattern first.
+ * If this has no results, then it will use the name and description.
+ *
+ * @param origin The origin of this element.
+ * @param name The name of this element.
+ * @param description The description of this element.
+ * @param patterns The patterns of this element.
+ * @return The category name, or null if none is found.
+ */
+ private static @Nullable String getCategoryName(
+ @Nullable SyntaxOrigin origin, @NotNull String name,
+ @Nullable Collection description, @Nullable Collection patterns
+ ) {
if (origin instanceof ElementOrigin elementOrigin) {
for (Category category : Category.values()) {
- if (category.modules().contains(elementOrigin.module())) {
+ if (category.modules().contains(elementOrigin.module().getClass())) {
return category.name();
}
}
@@ -488,7 +502,13 @@ private static JsonArray cleanPatterns(String... strings) {
}
}
- private static @Nullable String getCategory(String patterns) {
+ /**
+ * Attempts to find a category based on the input.
+ *
+ * @param input The input.
+ * @return A category, or null if none is found.
+ */
+ private static @Nullable String getCategory(String input) {
Set options = new HashSet<>();
for (Category value : Category.values()) {
@@ -497,7 +517,7 @@ private static JsonArray cleanPatterns(String... strings) {
}
for (String keyword : impl.keywords()) {
- if (patterns.toLowerCase().contains(keyword)) {
+ if (input.toLowerCase().contains(keyword)) {
options.add(value);
break;
}
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 305b171db0f..8f63da14cb8 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -52,7 +52,9 @@ default boolean canLoad(SkriptAddon addon) {
}
/**
- * @return The category to which this module belongs, or null if this module belongs to no category.
+ * Returns the documentation category which this module belongs to.
+ *
+ * @return The category of this module, or null if this module belongs to no category.
*/
default @Nullable Category category() {
return null;
diff --git a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
index d65b8182e06..ed1aa62130d 100644
--- a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
+++ b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
@@ -98,15 +98,15 @@ default void loadModules(AddonModule... modules) {
for (AddonModule module : filtered) {
module.init(this);
+ }
+ for (AddonModule module : filtered) {
+ module.load(this);
Category category = module.category();
if (category != null) {
category.addModule(module.getClass());
}
}
- for (AddonModule module : filtered) {
- module.load(this);
- }
}
/**
From 1d926c8ebcd04b9c8be605e1bc2b3c4eaa046da8 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Thu, 18 Sep 2025 00:32:00 +0200
Subject: [PATCH 09/23] Add multiple categories per module
---
.../ch/njol/skript/doc/JSONGenerator.java | 44 ++++++++++---------
.../skriptlang/skript/addon/AddonModule.java | 7 +--
.../skriptlang/skript/addon/SkriptAddon.java | 6 ++-
.../damagesource/DamageSourceModule.java | 7 ++-
4 files changed, 36 insertions(+), 28 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index 181d9b12d1e..55266cc9200 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -161,13 +161,13 @@ private static JsonObject generatedAnnotatedElement(SyntaxInfo> syntaxInfo) {
Keywords keywords = syntaxClass.getAnnotation(Keywords.class);
syntaxJsonObject.add("keywords", keywords == null ? null : convertToJsonArray(keywords.value()));
- syntaxJsonObject.addProperty("category", getCategoryName(syntaxInfo.origin(), name.value(),
- description == null ? null : List.of(description.value()), syntaxInfo.patterns()));
-
if (syntaxInfo instanceof SyntaxInfo.Expression, ?> expression) {
syntaxJsonObject.add("returns", getExpressionReturnTypes(expression));
}
+ syntaxJsonObject.add("categories", getCategoriesArray(syntaxInfo.origin(), name.value(),
+ description == null ? null : List.of(description.value()), syntaxInfo.patterns()));
+
return syntaxJsonObject;
}
@@ -229,7 +229,7 @@ private static JsonObject generateEventElement(BukkitSyntaxInfos.Event> info)
syntaxJsonObject.add("requirements", convertToJsonArray(info.requiredPlugins().toArray(new String[0])));
syntaxJsonObject.add("examples", convertToJsonArray(info.examples().toArray(new String[0])));
syntaxJsonObject.add("eventValues", getEventValues(info));
- syntaxJsonObject.addProperty("category", getCategoryName(info.origin(), info.name(), info.description(), info.patterns()));
+ syntaxJsonObject.add("categories", getCategoriesArray(info.origin(), info.name(), info.description(), info.patterns()));
return syntaxJsonObject;
}
@@ -375,7 +375,7 @@ private static JsonObject generateClassInfoElement(ClassInfo> classInfo) {
syntaxJsonObject.add("description", convertToJsonArray(classInfo.getDescription()));
syntaxJsonObject.add("requirements", convertToJsonArray(classInfo.getRequiredPlugins()));
syntaxJsonObject.add("examples", convertToJsonArray(classInfo.getExamples()));
- syntaxJsonObject.addProperty("category", getCategoryName(null,
+ syntaxJsonObject.add("categories", getCategoriesArray(null,
Objects.requireNonNullElse(classInfo.getDocName(), classInfo.getCodeName()),
List.of(classInfo.getDescription()), null));
@@ -416,7 +416,7 @@ private static JsonObject generateFunctionElement(JavaFunction> function) {
String functionSignature = function.getSignature().toString(false, false);
functionJsonObject.add("patterns", convertToJsonArray(functionSignature));
- functionJsonObject.addProperty("category", getCategoryName(null, function.getName(), List.of(function.getDescription()), null));
+ functionJsonObject.add("categories", getCategoriesArray(null, function.getName(), List.of(function.getDescription()), null));
return functionJsonObject;
}
@@ -480,26 +480,32 @@ private static JsonArray cleanPatterns(String... strings) {
* @param patterns The patterns of this element.
* @return The category name, or null if none is found.
*/
- private static @Nullable String getCategoryName(
+ private static @Nullable JsonArray getCategoriesArray(
@Nullable SyntaxOrigin origin, @NotNull String name,
@Nullable Collection description, @Nullable Collection patterns
) {
+ JsonArray categories = new JsonArray();
if (origin instanceof ElementOrigin elementOrigin) {
for (Category category : Category.values()) {
if (category.modules().contains(elementOrigin.module().getClass())) {
- return category.name();
+ categories.add(category.name());
}
}
+ return categories;
}
if (patterns == null) patterns = List.of();
- String first = getCategory(String.join("", patterns));
- if (first != null) {
+ JsonArray first = getCategories(String.join("", patterns));
+ if (!first.isEmpty()) {
return first;
- } else {
- if (description == null) description = List.of();
- return getCategory(name + String.join("", description) + String.join("", patterns));
}
+ if (description == null) description = List.of();
+
+ JsonArray second = getCategories(name + String.join("", description) + String.join("", patterns));
+ if (second.isEmpty()) {
+ return null;
+ }
+ return second;
}
/**
@@ -508,9 +514,8 @@ private static JsonArray cleanPatterns(String... strings) {
* @param input The input.
* @return A category, or null if none is found.
*/
- private static @Nullable String getCategory(String input) {
- Set options = new HashSet<>();
-
+ private static JsonArray getCategories(String input) {
+ JsonArray options = new JsonArray();
for (Category value : Category.values()) {
if (!(value instanceof CategoryImpl impl)) {
break;
@@ -518,16 +523,13 @@ private static JsonArray cleanPatterns(String... strings) {
for (String keyword : impl.keywords()) {
if (input.toLowerCase().contains(keyword)) {
- options.add(value);
+ options.add(value.name());
break;
}
}
}
- if (options.isEmpty()) {
- return null;
- }
- return options.stream().findAny().orElseThrow().name();
+ return options;
}
/**
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 8f63da14cb8..0a48072cd7d 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -2,6 +2,7 @@
import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.Skript;
import org.skriptlang.skript.registration.SyntaxInfo;
@@ -54,10 +55,10 @@ default boolean canLoad(SkriptAddon addon) {
/**
* Returns the documentation category which this module belongs to.
*
- * @return The category of this module, or null if this module belongs to no category.
+ * @return The category of this module.
*/
- default @Nullable Category category() {
- return null;
+ default @NotNull Set category() {
+ return Set.of();
}
/**
diff --git a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
index ed1aa62130d..9b2c62afa77 100644
--- a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
+++ b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
@@ -3,6 +3,7 @@
import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
import org.skriptlang.skript.Skript;
import org.skriptlang.skript.localization.Localizer;
import org.skriptlang.skript.registration.SyntaxRegistry;
@@ -11,6 +12,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.Set;
import java.util.function.Supplier;
/**
@@ -102,8 +104,8 @@ default void loadModules(AddonModule... modules) {
for (AddonModule module : filtered) {
module.load(this);
- Category category = module.category();
- if (category != null) {
+ Set categories = module.category();
+ for (Category category : categories) {
category.addModule(module.getClass());
}
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index 90f0fa33388..ec1d12e12ce 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -12,12 +12,15 @@
import org.bukkit.damage.DamageType;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.damagesource.elements.*;
import org.skriptlang.skript.registration.SyntaxRegistry;
+import java.util.Set;
+
public class DamageSourceModule implements AddonModule {
@Override
@@ -67,8 +70,8 @@ public void load(SkriptAddon addon) {
}
@Override
- public @Nullable Category category() {
- return Category.DAMAGE_SOURCES;
+ public @NotNull Set category() {
+ return Set.of(Category.DAMAGE_SOURCES);
}
}
From 4b79f1fb7e162b1decc0fa36b5a27f444659bdbd Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Thu, 18 Sep 2025 10:06:25 +0200
Subject: [PATCH 10/23] Apply suggestion from @Absolutionism
Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com>
---
src/main/java/ch/njol/skript/doc/CategoryImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index 95cd655c09b..f3c32300bfc 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -48,7 +48,7 @@ public void addModule(@NotNull Class extends AddonModule> module) {
}
@Override
- public Set> modules() {
+ public @Unmodifiable Set> modules() {
return Collections.unmodifiableSet(modules);
}
From 3369e17df125f483eaab3262bc73574171bfa6ca Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Thu, 18 Sep 2025 10:06:40 +0200
Subject: [PATCH 11/23] Apply suggestion from @Absolutionism
Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com>
---
src/main/java/ch/njol/skript/doc/JSONGenerator.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index a55313e9e00..1bf0af7a720 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -478,7 +478,8 @@ private static JsonArray cleanPatterns(String... strings) {
}
}
- if (patterns == null) patterns = List.of();
+ if (patterns == null)
+ patterns = List.of();
String first = getCategory(String.join("", patterns));
if (first != null) {
return first;
From 278377cae9fdf3fd5817185bffd4699d36430a71 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Thu, 18 Sep 2025 10:06:58 +0200
Subject: [PATCH 12/23] Apply suggestion from @Absolutionism
Co-authored-by: SirSmurfy2 <82696841+Absolutionism@users.noreply.github.com>
---
src/main/java/ch/njol/skript/doc/JSONGenerator.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index 1bf0af7a720..41d40adf348 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -484,7 +484,8 @@ private static JsonArray cleanPatterns(String... strings) {
if (first != null) {
return first;
} else {
- if (description == null) description = List.of();
+ if (description == null)
+ description = List.of();
return getCategory(name + String.join("", description) + String.join("", patterns));
}
}
From 87caeadd501fa35858ac5dd56f360fb4245e51ed Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Fri, 19 Sep 2025 17:50:14 +0200
Subject: [PATCH 13/23] Update docs
---
src/main/java/ch/njol/skript/doc/JSONGenerator.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index 59fbb01db2b..ea577ee81bf 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -472,7 +472,8 @@ private static JsonArray cleanPatterns(String... strings) {
* Returns the category name of an element given its origin, name, description and patterns.
*
* Attempts to find a category by using pattern first.
- * If this has no results, then it will use the name and description.
+ * If this has no results, then it will use the name and description.
+ *
*
* @param origin The origin of this element.
* @param name The name of this element.
From 5b914e8dc7cf575d17b60cf517e6207cb53581d4 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Fri, 19 Sep 2025 17:52:00 +0200
Subject: [PATCH 14/23] Update annotation
---
src/main/java/ch/njol/skript/doc/CategoryImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index f3c32300bfc..58669ee1dc8 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -2,6 +2,7 @@
import com.google.common.base.Preconditions;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.AddonModule;
import java.util.Collections;
From 5f7eded99b28a7dc45334e9c86108b95747e6f49 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Fri, 19 Sep 2025 18:06:54 +0200
Subject: [PATCH 15/23] Add subcategories
---
.../java/ch/njol/skript/doc/Category.java | 27 ++++++++++++++++---
.../java/ch/njol/skript/doc/CategoryImpl.java | 18 ++++++++++---
2 files changed, 37 insertions(+), 8 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Category.java b/src/main/java/ch/njol/skript/doc/Category.java
index 5fb00798d4b..f50b393d3c6 100644
--- a/src/main/java/ch/njol/skript/doc/Category.java
+++ b/src/main/java/ch/njol/skript/doc/Category.java
@@ -4,7 +4,6 @@
import org.jetbrains.annotations.NotNull;
import org.skriptlang.skript.addon.AddonModule;
-import java.util.HashSet;
import java.util.Set;
/**
@@ -29,14 +28,20 @@ public interface Category {
Category DATES = new CategoryImpl("Dates", "date");
Category LOCATIONS = new CategoryImpl("Locations", "location");
Category MATH = new CategoryImpl("Math", "angle", "degree", "radian",
- "arithmetic", "vector", "vectors", "nan", "round", "rounds", "root", "quaternion", "permutations",
+ "arithmetic", "nan", "round", "rounds", "root", "quaternion", "permutations",
"combinations", "numbers", "infinity", "exponential");
+ Category VECTORS = new CategoryImpl("Vectors", Category.MATH, "vector");
/**
* @return The display name of this category.
*/
@NotNull String name();
+ /**
+ * @return The parent category of this category.
+ */
+ Category parent();
+
/**
* Adds a module to this category.
*
@@ -47,7 +52,7 @@ public interface Category {
/**
* @return The modules that are represented by this category.
*/
- Set> modules();
+ @NotNull Set> modules();
/**
* Creates a new category.
@@ -58,7 +63,21 @@ public interface Category {
static Category of(@NotNull String name) {
Preconditions.checkNotNull(name, "name cannot be null");
- return new CategoryImpl(name, new HashSet<>());
+ return new CategoryImpl(name);
+ }
+
+ /**
+ * Creates a new category.
+ *
+ * @param name The name.
+ * @param category The category.
+ * @return The new category.
+ */
+ static Category of(@NotNull String name, @NotNull Category category) {
+ Preconditions.checkNotNull(name, "name cannot be null");
+ Preconditions.checkNotNull(category, "category cannot be null");
+
+ return new CategoryImpl(name, category);
}
/**
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index 58669ee1dc8..9eaa3b90bcf 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -5,6 +5,7 @@
import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.AddonModule;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -14,6 +15,7 @@ final class CategoryImpl implements Category {
private static final Set instances = new HashSet<>();
private final String name;
+ private final Category parent;
private final Set keywords;
private final Set> modules;
@@ -22,13 +24,16 @@ public static Set getInstances() {
}
CategoryImpl(String name, String... keywords) {
- this(name, new HashSet<>(Set.of(keywords)));
+ this(name, (Category) null);
}
- CategoryImpl(String name, Set keywords) {
+ CategoryImpl(String name, Category parent, String... keywords) {
instances.add(this);
this.name = name;
- this.keywords = keywords.stream().map(String::toLowerCase).collect(Collectors.toSet());
+ this.parent = parent;
+ this.keywords = Arrays.stream(keywords)
+ .map(String::toLowerCase)
+ .collect(Collectors.toUnmodifiableSet());
this.modules = new HashSet<>();
}
@@ -37,6 +42,11 @@ public static Set getInstances() {
return name;
}
+ @Override
+ public Category parent() {
+ return parent;
+ }
+
public @NotNull Set keywords() {
return keywords;
}
@@ -49,7 +59,7 @@ public void addModule(@NotNull Class extends AddonModule> module) {
}
@Override
- public @Unmodifiable Set> modules() {
+ public @Unmodifiable @NotNull Set> modules() {
return Collections.unmodifiableSet(modules);
}
From 9ab683374338792798032560e91b5f9c8e5d0106 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sat, 20 Sep 2025 15:42:22 +0200
Subject: [PATCH 16/23] update module registration code
---
.../elements/CondScalesWithDifficulty.java | 1 +
.../damagesource/elements/CondWasIndirect.java | 1 +
.../damagesource/elements/ExprCausingEntity.java | 6 +++---
.../elements/ExprCreatedDamageSource.java | 5 +++--
.../damagesource/elements/ExprDamageLocation.java | 6 +++---
.../bukkit/damagesource/elements/ExprDamageType.java | 6 +++---
.../damagesource/elements/ExprDirectEntity.java | 6 +++---
.../damagesource/elements/ExprFoodExhaustion.java | 6 +++---
.../damagesource/elements/ExprSecDamageSource.java | 12 ++++--------
.../damagesource/elements/ExprSourceLocation.java | 6 +++---
10 files changed, 27 insertions(+), 28 deletions(-)
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
index e855e49dccd..23412f63a10 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondScalesWithDifficulty.java
@@ -24,6 +24,7 @@ public class CondScalesWithDifficulty extends PropertyCondition im
public static SyntaxInfo info() {
return SyntaxInfo.builder(CondScalesWithDifficulty.class)
+ .priority(DEFAULT_PRIORITY)
.supplier(CondScalesWithDifficulty::new)
.addPatterns("%damagesources% ((does|do) scale|scales) damage with difficulty",
"%damagesources% (do not|don't|does not|doesn't) scale damage with difficulty",
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java
index a0de9806a91..a26cff2b502 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/CondWasIndirect.java
@@ -29,6 +29,7 @@ public class CondWasIndirect extends PropertyCondition implements
public static SyntaxInfo info() {
return SyntaxInfo.builder(CondWasIndirect.class)
+ .priority(DEFAULT_PRIORITY)
.supplier(CondWasIndirect::new)
.addPatterns("%damagesources% (was|were) ([:in]directly caused|caused [:in]directly)",
"%damagesources% (was not|wasn't|were not|weren't) ([:in]directly caused|caused [:in]directly)")
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
index 8e8695eaf69..bfefc552ffc 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
@@ -15,6 +15,7 @@
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Causing Entity")
@Description({
@@ -38,10 +39,9 @@ set the damage location to location(0, 0, 10)
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprCausingEntity extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprCausingEntity.class, Entity.class)
+ public static SyntaxInfo.Expression info() {
+ return infoBuilder(ExprCausingEntity.class, Entity.class, "(causing|responsible) entity", "damagesources", false)
.supplier(ExprCausingEntity::new)
- .addPatterns(getDefaultPatterns("(causing|responsible) entity", "damagesources"))
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
index d849edee931..d85b4346936 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
@@ -8,6 +8,7 @@
import org.bukkit.event.Event;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Created Damage Source")
@Description("Get the created damage source being created/modified in a 'custom damage source' section.")
@@ -19,8 +20,8 @@
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprCreatedDamageSource extends EventValueExpression implements EventRestrictedSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprCreatedDamageSource.class, DamageSource.class)
+ public static SyntaxInfo.Expression info() {
+ return SyntaxInfo.Expression.builder(ExprCreatedDamageSource.class, DamageSource.class)
.supplier(ExprCreatedDamageSource::new)
.addPatterns("created damage source")
.build();
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
index 6e03d995233..d597fd92fd8 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
@@ -15,6 +15,7 @@
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Damage Location")
@Description({
@@ -37,10 +38,9 @@ set the damage location to location(0, 0, 10)
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprDamageLocation extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprDamageLocation.class, Location.class)
+ public static SyntaxInfo.Expression info() {
+ return infoBuilder(ExprDamageLocation.class, Location.class, "damage location", "damagesources", false)
.supplier(ExprDamageLocation::new)
- .addPatterns(getDefaultPatterns("damage location", "damagesources"))
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
index ae1851fbcee..5cd0631a952 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
@@ -15,6 +15,7 @@
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Damage Type")
@Description({
@@ -37,10 +38,9 @@ set the damage location to location(0, 0, 10)
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprDamageType extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprDamageType.class, DamageType.class)
+ public static SyntaxInfo.Expression info() {
+ return infoBuilder(ExprDamageType.class, DamageType.class, "damage type", "damagesources", false)
.supplier(ExprDamageType::new)
- .addPatterns(getDefaultPatterns("damage type", "damagesources"))
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
index 914cb4a2421..efc41389a0d 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
@@ -16,6 +16,7 @@
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.bukkit.damagesource.elements.ExprSecDamageSource.DamageSourceSectionEvent;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Direct Entity")
@Description({
@@ -39,10 +40,9 @@ set the damage location to location(0, 0, 10)
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprDirectEntity extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprDirectEntity.class, Entity.class)
+ public static SyntaxInfo.Expression info() {
+ return infoBuilder(ExprDirectEntity.class, Entity.class, "direct entity", "damagesources", false)
.supplier(ExprDirectEntity::new)
- .addPatterns(getDefaultPatterns("direct entity", "damagesources"))
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
index 3c4d9eed4ca..ab58511f7e7 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
@@ -6,6 +6,7 @@
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Food Exhaustion")
@Description("The amount of hunger exhaustion caused by a damage source.")
@@ -17,10 +18,9 @@
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprFoodExhaustion extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprFoodExhaustion.class, Float.class)
+ public static SyntaxInfo.Expression info() {
+ return infoBuilder(ExprFoodExhaustion.class, Float.class, "food exhaustion", "damagesources", false)
.supplier(ExprFoodExhaustion::new)
- .addPatterns(getDefaultPatterns("food exhaustion", "damagesources"))
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java
index 70fa103630e..51d7051623b 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSecDamageSource.java
@@ -27,6 +27,7 @@
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -81,20 +82,15 @@ public DamageSourceSectionEvent() {}
}
}
+ public static SyntaxInfo.Expression info() {
+ EventValues.registerEventValue(DamageSourceSectionEvent.class, DamageSource.class, DamageSourceSectionEvent::buildDamageSource);
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprSecDamageSource.class, DamageSource.class)
+ return SyntaxInfo.Expression.builder(ExprSecDamageSource.class, DamageSource.class)
.supplier(ExprSecDamageSource::new)
.addPatterns("[a] custom damage source [(with|using) [the|a] [damage type [of]] %-damagetype%]")
.build();
}
- static {
- Skript.registerExpression(ExprSecDamageSource.class, DamageSource.class, ExpressionType.COMBINED,
- "[a] custom damage source [(with|using) [the|a] [damage type [of]] %-damagetype%]");
- EventValues.registerEventValue(DamageSourceSectionEvent.class, DamageSource.class, DamageSourceSectionEvent::buildDamageSource);
- }
-
private @Nullable Expression damageType;
private Trigger trigger = null;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
index d00938019f2..3a7e6cf7a00 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
@@ -7,6 +7,7 @@
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.bukkit.damagesource.DamageSourceExperimentSyntax;
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxInfo;
@Name("Damage Source - Source Location")
@Description({
@@ -23,10 +24,9 @@
@RequiredPlugins("Minecraft 1.20.4+")
public class ExprSourceLocation extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
- public static DefaultSyntaxInfos.Expression info() {
- return DefaultSyntaxInfos.Expression.builder(ExprSourceLocation.class, Location.class)
+ public static SyntaxInfo.Expression info() {
+ return infoBuilder(ExprSourceLocation.class, Location.class, "source location", "damagesources", false)
.supplier(ExprSourceLocation::new)
- .addPatterns(getDefaultPatterns("source location", "damagesources"))
.build();
}
From 62544552a157c9787ce7870d9452afbe07a917d3 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sat, 20 Sep 2025 15:44:59 +0200
Subject: [PATCH 17/23] requested changes part 1
---
.../ch/njol/skript/doc/Categorizable.java | 20 +++++++++++++++++++
.../java/ch/njol/skript/doc/CategoryImpl.java | 2 +-
.../ch/njol/skript/doc/JSONGenerator.java | 4 ++--
.../skriptlang/skript/addon/AddonModule.java | 9 +++------
.../skript/registration/SyntaxOrigin.java | 6 +++---
5 files changed, 29 insertions(+), 12 deletions(-)
create mode 100644 src/main/java/ch/njol/skript/doc/Categorizable.java
diff --git a/src/main/java/ch/njol/skript/doc/Categorizable.java b/src/main/java/ch/njol/skript/doc/Categorizable.java
new file mode 100644
index 00000000000..20d76feb422
--- /dev/null
+++ b/src/main/java/ch/njol/skript/doc/Categorizable.java
@@ -0,0 +1,20 @@
+package ch.njol.skript.doc;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Set;
+
+/**
+ * Represents anything that can be categorized.
+ */
+@FunctionalInterface
+public interface Categorizable {
+
+ /**
+ * Returns the documentation category which this module belongs to.
+ *
+ * @return The category of this module.
+ */
+ @NotNull Set category();
+
+}
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index 9eaa3b90bcf..5da677b8fdb 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -60,7 +60,7 @@ public void addModule(@NotNull Class extends AddonModule> module) {
@Override
public @Unmodifiable @NotNull Set> modules() {
- return Collections.unmodifiableSet(modules);
+ return Set.copyOf(modules);
}
}
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index ea577ee81bf..2460544496e 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -28,7 +28,7 @@
import org.skriptlang.skript.registration.DefaultSyntaxInfos;
import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.registration.SyntaxOrigin;
-import org.skriptlang.skript.registration.SyntaxOrigin.ElementOrigin;
+import org.skriptlang.skript.registration.SyntaxOrigin.ModuleOrigin;
import org.skriptlang.skript.registration.SyntaxRegistry;
import java.io.File;
@@ -486,7 +486,7 @@ private static JsonArray cleanPatterns(String... strings) {
@Nullable Collection description, @Nullable Collection patterns
) {
JsonArray categories = new JsonArray();
- if (origin instanceof ElementOrigin elementOrigin) {
+ if (origin instanceof ModuleOrigin elementOrigin) {
for (Category category : Category.values()) {
if (category.modules().contains(elementOrigin.module().getClass())) {
categories.add(category.name());
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 0a48072cd7d..ac80b4ce240 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -1,5 +1,6 @@
package org.skriptlang.skript.addon;
+import ch.njol.skript.doc.Categorizable;
import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -24,7 +25,7 @@
*/
@FunctionalInterface
@ApiStatus.Experimental
-public interface AddonModule {
+public interface AddonModule extends Categorizable {
/**
* Used for loading the components of this module that are needed first or by other modules (e.g. class infos).
@@ -52,11 +53,7 @@ default boolean canLoad(SkriptAddon addon) {
return true;
}
- /**
- * Returns the documentation category which this module belongs to.
- *
- * @return The category of this module.
- */
+ @Override
default @NotNull Set category() {
return Set.of();
}
diff --git a/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java b/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java
index d5d2c70540e..5a901e00cd1 100644
--- a/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java
+++ b/src/main/java/org/skriptlang/skript/registration/SyntaxOrigin.java
@@ -61,19 +61,19 @@ public SkriptAddon addon() {
*/
@Contract("_, _ -> new")
static SyntaxOrigin of(SkriptAddon addon, AddonModule module) {
- return new ElementOrigin(addon, module);
+ return new ModuleOrigin(addon, module);
}
/**
* An origin describing the addon and module a syntax has originated from.
* @see SyntaxOrigin#of(SkriptAddon, AddonModule)
*/
- final class ElementOrigin implements SyntaxOrigin {
+ final class ModuleOrigin implements SyntaxOrigin {
private final SkriptAddon addon;
private final AddonModule module;
- private ElementOrigin(SkriptAddon addon, AddonModule module) {
+ private ModuleOrigin(SkriptAddon addon, AddonModule module) {
this.addon = addon.unmodifiableView();
this.module = module;
}
From 310880fae67a126f0b42a9711145fbbc896860a3 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sat, 20 Sep 2025 15:51:33 +0200
Subject: [PATCH 18/23] requested changes part 2
---
src/main/java/org/skriptlang/skript/addon/SkriptAddon.java | 1 -
.../bukkit/damagesource/elements/ExprCreatedDamageSource.java | 3 +--
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
index 9b2c62afa77..e2937be0c42 100644
--- a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
+++ b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
@@ -3,7 +3,6 @@
import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
-import org.jetbrains.annotations.NotNull;
import org.skriptlang.skript.Skript;
import org.skriptlang.skript.localization.Localizer;
import org.skriptlang.skript.registration.SyntaxRegistry;
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
index d85b4346936..496b7ee7e5a 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCreatedDamageSource.java
@@ -21,9 +21,8 @@
public class ExprCreatedDamageSource extends EventValueExpression implements EventRestrictedSyntax {
public static SyntaxInfo.Expression info() {
- return SyntaxInfo.Expression.builder(ExprCreatedDamageSource.class, DamageSource.class)
+ return infoBuilder(ExprCreatedDamageSource.class, DamageSource.class, "created damage source")
.supplier(ExprCreatedDamageSource::new)
- .addPatterns("created damage source")
.build();
}
From ec002bde960ae28457c44406e6ecf0060e823ad0 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sat, 20 Sep 2025 16:17:07 +0200
Subject: [PATCH 19/23] set isDefault in infoBuilder to false
---
.../java/ch/njol/skript/doc/CategoryImpl.java | 5 ++-
.../ch/njol/skript/doc/JSONGenerator.java | 32 +++++++++++++++----
.../elements/ExprCausingEntity.java | 2 +-
.../elements/ExprDamageLocation.java | 2 +-
.../damagesource/elements/ExprDamageType.java | 2 +-
.../elements/ExprDirectEntity.java | 2 +-
.../elements/ExprFoodExhaustion.java | 2 +-
.../elements/ExprSourceLocation.java | 2 +-
8 files changed, 33 insertions(+), 16 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/CategoryImpl.java b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
index 5da677b8fdb..892871ce4b4 100644
--- a/src/main/java/ch/njol/skript/doc/CategoryImpl.java
+++ b/src/main/java/ch/njol/skript/doc/CategoryImpl.java
@@ -6,7 +6,6 @@
import org.skriptlang.skript.addon.AddonModule;
import java.util.Arrays;
-import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
@@ -19,12 +18,12 @@ final class CategoryImpl implements Category {
private final Set keywords;
private final Set> modules;
- public static Set getInstances() {
+ static Set getInstances() {
return instances;
}
CategoryImpl(String name, String... keywords) {
- this(name, (Category) null);
+ this(name, null, keywords);
}
CategoryImpl(String name, Category parent, String... keywords) {
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index 2460544496e..bdba7e837ae 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -489,7 +489,7 @@ private static JsonArray cleanPatterns(String... strings) {
if (origin instanceof ModuleOrigin elementOrigin) {
for (Category category : Category.values()) {
if (category.modules().contains(elementOrigin.module().getClass())) {
- categories.add(category.name());
+ categories.add(getCategory(category));
}
}
return categories;
@@ -503,10 +503,10 @@ private static JsonArray cleanPatterns(String... strings) {
if (description == null) description = List.of();
JsonArray second = getCategories(name + String.join("", description) + String.join("", patterns));
- if (second.isEmpty()) {
- return null;
+ if (!second.isEmpty()) {
+ return second;
}
- return second;
+ return null;
}
/**
@@ -517,14 +517,14 @@ private static JsonArray cleanPatterns(String... strings) {
*/
private static JsonArray getCategories(String input) {
JsonArray options = new JsonArray();
- for (Category value : Category.values()) {
- if (!(value instanceof CategoryImpl impl)) {
+ for (Category category : Category.values()) {
+ if (!(category instanceof CategoryImpl impl)) {
break;
}
for (String keyword : impl.keywords()) {
if (input.toLowerCase().contains(keyword)) {
- options.add(value.name());
+ options.add(getCategory(category));
break;
}
}
@@ -533,6 +533,24 @@ private static JsonArray getCategories(String input) {
return options;
}
+ /**
+ * Transforms a category into a json object.
+ * @param category The category.
+ * @return The transformed category.
+ */
+ private static JsonObject getCategory(@NotNull Category category) {
+ JsonObject object = new JsonObject();
+
+ object.addProperty("name", category.name());
+ if (category.parent() != null) {
+ object.addProperty("parent", category.parent().name());
+ } else {
+ object.add("parent", null);
+ }
+
+ return object;
+ }
+
/**
* Gets the json object representing the addon.
*
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
index bfefc552ffc..69614484094 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprCausingEntity.java
@@ -40,7 +40,7 @@ set the damage location to location(0, 0, 10)
public class ExprCausingEntity extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
public static SyntaxInfo.Expression info() {
- return infoBuilder(ExprCausingEntity.class, Entity.class, "(causing|responsible) entity", "damagesources", false)
+ return infoBuilder(ExprCausingEntity.class, Entity.class, "(causing|responsible) entity", "damagesources", true)
.supplier(ExprCausingEntity::new)
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
index d597fd92fd8..3e7c01914aa 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageLocation.java
@@ -39,7 +39,7 @@ set the damage location to location(0, 0, 10)
public class ExprDamageLocation extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
public static SyntaxInfo.Expression info() {
- return infoBuilder(ExprDamageLocation.class, Location.class, "damage location", "damagesources", false)
+ return infoBuilder(ExprDamageLocation.class, Location.class, "damage location", "damagesources", true)
.supplier(ExprDamageLocation::new)
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
index 5cd0631a952..f8ab8ba69e3 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDamageType.java
@@ -39,7 +39,7 @@ set the damage location to location(0, 0, 10)
public class ExprDamageType extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
public static SyntaxInfo.Expression info() {
- return infoBuilder(ExprDamageType.class, DamageType.class, "damage type", "damagesources", false)
+ return infoBuilder(ExprDamageType.class, DamageType.class, "damage type", "damagesources", true)
.supplier(ExprDamageType::new)
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
index efc41389a0d..5f413b19e40 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprDirectEntity.java
@@ -41,7 +41,7 @@ set the damage location to location(0, 0, 10)
public class ExprDirectEntity extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
public static SyntaxInfo.Expression info() {
- return infoBuilder(ExprDirectEntity.class, Entity.class, "direct entity", "damagesources", false)
+ return infoBuilder(ExprDirectEntity.class, Entity.class, "direct entity", "damagesources", true)
.supplier(ExprDirectEntity::new)
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
index ab58511f7e7..243725cacf1 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprFoodExhaustion.java
@@ -19,7 +19,7 @@
public class ExprFoodExhaustion extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
public static SyntaxInfo.Expression info() {
- return infoBuilder(ExprFoodExhaustion.class, Float.class, "food exhaustion", "damagesources", false)
+ return infoBuilder(ExprFoodExhaustion.class, Float.class, "food exhaustion", "damagesources", true)
.supplier(ExprFoodExhaustion::new)
.build();
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
index 3a7e6cf7a00..752cb20e4e0 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/elements/ExprSourceLocation.java
@@ -25,7 +25,7 @@
public class ExprSourceLocation extends SimplePropertyExpression implements DamageSourceExperimentSyntax {
public static SyntaxInfo.Expression info() {
- return infoBuilder(ExprSourceLocation.class, Location.class, "source location", "damagesources", false)
+ return infoBuilder(ExprSourceLocation.class, Location.class, "source location", "damagesources", true)
.supplier(ExprSourceLocation::new)
.build();
}
From 35cf06b71ff4c660587edaf7d00aaccdd93ea72d Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sun, 21 Sep 2025 02:25:00 +0200
Subject: [PATCH 20/23] move DamageSourceModule to implement Categorizable
instead of AddonModule
---
src/main/java/ch/njol/skript/doc/Categorizable.java | 6 +++---
.../org/skriptlang/skript/addon/AddonModule.java | 13 +------------
.../org/skriptlang/skript/addon/SkriptAddon.java | 9 ++++++---
.../bukkit/damagesource/DamageSourceModule.java | 6 +++---
4 files changed, 13 insertions(+), 21 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Categorizable.java b/src/main/java/ch/njol/skript/doc/Categorizable.java
index 20d76feb422..c5aa0e8f5aa 100644
--- a/src/main/java/ch/njol/skript/doc/Categorizable.java
+++ b/src/main/java/ch/njol/skript/doc/Categorizable.java
@@ -11,10 +11,10 @@
public interface Categorizable {
/**
- * Returns the documentation category which this module belongs to.
+ * Returns the documentation categories which this module belongs to.
*
- * @return The category of this module.
+ * @return The categories of this module.
*/
- @NotNull Set category();
+ @NotNull Set categories();
}
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index ac80b4ce240..596fa08b983 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -1,17 +1,11 @@
package org.skriptlang.skript.addon;
-import ch.njol.skript.doc.Categorizable;
-import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.Skript;
import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.registration.SyntaxOrigin;
import org.skriptlang.skript.registration.SyntaxRegistry.Key;
-import java.util.Set;
-
/**
* A module is a component of a {@link SkriptAddon} used for registering syntax and other {@link Skript} components.
*
@@ -25,7 +19,7 @@
*/
@FunctionalInterface
@ApiStatus.Experimental
-public interface AddonModule extends Categorizable {
+public interface AddonModule {
/**
* Used for loading the components of this module that are needed first or by other modules (e.g. class infos).
@@ -53,11 +47,6 @@ default boolean canLoad(SkriptAddon addon) {
return true;
}
- @Override
- default @NotNull Set category() {
- return Set.of();
- }
-
/**
* Registers syntax such that it belongs to the current module.
*
diff --git a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
index e2937be0c42..d2a0d4ee540 100644
--- a/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
+++ b/src/main/java/org/skriptlang/skript/addon/SkriptAddon.java
@@ -1,5 +1,6 @@
package org.skriptlang.skript.addon;
+import ch.njol.skript.doc.Categorizable;
import ch.njol.skript.doc.Category;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Contract;
@@ -103,9 +104,11 @@ default void loadModules(AddonModule... modules) {
for (AddonModule module : filtered) {
module.load(this);
- Set categories = module.category();
- for (Category category : categories) {
- category.addModule(module.getClass());
+ if (module instanceof Categorizable categorizable) {
+ Set categories = categorizable.categories();
+ for (Category category : categories) {
+ category.addModule(module.getClass());
+ }
}
}
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index ec1d12e12ce..63e5a5c4419 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -3,6 +3,7 @@
import ch.njol.skript.Skript;
import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.registry.RegistryClassInfo;
+import ch.njol.skript.doc.Categorizable;
import ch.njol.skript.doc.Category;
import ch.njol.skript.expressions.base.EventValueExpression;
import ch.njol.skript.registrations.Classes;
@@ -13,7 +14,6 @@
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.damagesource.elements.*;
@@ -21,7 +21,7 @@
import java.util.Set;
-public class DamageSourceModule implements AddonModule {
+public class DamageSourceModule implements AddonModule, Categorizable {
@Override
public boolean canLoad(SkriptAddon addon) {
@@ -70,7 +70,7 @@ public void load(SkriptAddon addon) {
}
@Override
- public @NotNull Set category() {
+ public @NotNull Set categories() {
return Set.of(Category.DAMAGE_SOURCES);
}
From efe75367aaa12240431679ebcd230f08ca07235b Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sun, 21 Sep 2025 15:37:37 +0200
Subject: [PATCH 21/23] requested changes
---
.../ch/njol/skript/doc/Categorizable.java | 4 +--
.../ch/njol/skript/doc/JSONGenerator.java | 19 ++++++++------
.../skriptlang/skript/addon/AddonModule.java | 25 +++++++++++++++----
3 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Categorizable.java b/src/main/java/ch/njol/skript/doc/Categorizable.java
index c5aa0e8f5aa..7feae37008a 100644
--- a/src/main/java/ch/njol/skript/doc/Categorizable.java
+++ b/src/main/java/ch/njol/skript/doc/Categorizable.java
@@ -11,9 +11,9 @@
public interface Categorizable {
/**
- * Returns the documentation categories which this module belongs to.
+ * Returns the documentation categories which this object belongs to.
*
- * @return The categories of this module.
+ * @return The categories of this object.
*/
@NotNull Set categories();
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index bdba7e837ae..0d80a6db404 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -21,6 +21,7 @@
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.registration.BukkitRegistryKeys;
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
@@ -487,9 +488,10 @@ private static JsonArray cleanPatterns(String... strings) {
) {
JsonArray categories = new JsonArray();
if (origin instanceof ModuleOrigin elementOrigin) {
+ Class> moduleClass = elementOrigin.module().getClass();
for (Category category : Category.values()) {
- if (category.modules().contains(elementOrigin.module().getClass())) {
- categories.add(getCategory(category));
+ if (category.modules().contains(moduleClass)) {
+ categories.add(getCategoryJson(category));
}
}
return categories;
@@ -510,12 +512,13 @@ private static JsonArray cleanPatterns(String... strings) {
}
/**
- * Attempts to find a category based on the input.
+ * Attempts to find the categories based on the input.
*
* @param input The input.
- * @return A category, or null if none is found.
+ * @return The categories, or null if no are found.
*/
- private static JsonArray getCategories(String input) {
+ private static @NotNull JsonArray getCategories(@NotNull String input) {
+ String lower = input.toLowerCase();
JsonArray options = new JsonArray();
for (Category category : Category.values()) {
if (!(category instanceof CategoryImpl impl)) {
@@ -523,8 +526,8 @@ private static JsonArray getCategories(String input) {
}
for (String keyword : impl.keywords()) {
- if (input.toLowerCase().contains(keyword)) {
- options.add(getCategory(category));
+ if (lower.contains(keyword)) {
+ options.add(getCategoryJson(category));
break;
}
}
@@ -538,7 +541,7 @@ private static JsonArray getCategories(String input) {
* @param category The category.
* @return The transformed category.
*/
- private static JsonObject getCategory(@NotNull Category category) {
+ private static JsonObject getCategoryJson(@NotNull Category category) {
JsonObject object = new JsonObject();
object.addProperty("name", category.name());
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index 596fa08b983..f084cc77f17 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -4,6 +4,7 @@
import org.skriptlang.skript.Skript;
import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.registration.SyntaxOrigin;
+import org.skriptlang.skript.registration.SyntaxRegistry;
import org.skriptlang.skript.registration.SyntaxRegistry.Key;
/**
@@ -56,10 +57,7 @@ default boolean canLoad(SkriptAddon addon) {
* @param The type of syntax.
*/
default > void register(SkriptAddon addon, Key registry, I cls) {
- //noinspection unchecked
- addon.syntaxRegistry().register(registry, (I) cls.toBuilder()
- .origin(SyntaxOrigin.of(addon, this))
- .build());
+ register(addon, addon.syntaxRegistry(), registry, cls);
}
/**
@@ -72,9 +70,26 @@ default > void register(SkriptAddon addon, Key regist
*/
@SuppressWarnings("unchecked")
default > void register(SkriptAddon addon, Key registry, I... classes) {
+ SyntaxRegistry syntaxRegistry = addon.syntaxRegistry();
for (I cls : classes) {
- register(addon, registry, cls);
+ register(addon, syntaxRegistry, registry, cls);
}
}
+ /**
+ * Registers syntax such that it belongs to the current module.
+ *
+ * @param addon The addon this module belongs to.
+ * @param syntaxRegistry The syntax registry.
+ * @param registry The registry to add this syntax to.
+ * @param cls The syntax info.
+ * @param The type of syntax.
+ */
+ default > void register(SkriptAddon addon, SyntaxRegistry syntaxRegistry, Key registry, I cls) {
+ //noinspection unchecked
+ syntaxRegistry.register(registry, (I) cls.toBuilder()
+ .origin(SyntaxOrigin.of(addon, this))
+ .build());
+ }
+
}
From 03a7f866c9475de47569d85de6b643a6e7c601f8 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sun, 21 Sep 2025 22:40:45 +0200
Subject: [PATCH 22/23] Update
src/main/java/ch/njol/skript/doc/JSONGenerator.java
Co-authored-by: sovdee <10354869+sovdeeth@users.noreply.github.com>
---
src/main/java/ch/njol/skript/doc/JSONGenerator.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/ch/njol/skript/doc/JSONGenerator.java b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
index 0d80a6db404..6d1907c093b 100644
--- a/src/main/java/ch/njol/skript/doc/JSONGenerator.java
+++ b/src/main/java/ch/njol/skript/doc/JSONGenerator.java
@@ -515,7 +515,7 @@ private static JsonArray cleanPatterns(String... strings) {
* Attempts to find the categories based on the input.
*
* @param input The input.
- * @return The categories, or null if no are found.
+ * @return The categories, or null if none are found.
*/
private static @NotNull JsonArray getCategories(@NotNull String input) {
String lower = input.toLowerCase();
From 7023f3a01501b745bf709d510910e033d4f47a44 Mon Sep 17 00:00:00 2001
From: Efnilite <35348263+Efnilite@users.noreply.github.com>
Date: Sun, 28 Sep 2025 20:20:16 +0200
Subject: [PATCH 23/23] minor changes to annotations
---
src/main/java/ch/njol/skript/doc/Categorizable.java | 3 ++-
src/main/java/org/skriptlang/skript/addon/AddonModule.java | 3 +++
.../skript/bukkit/damagesource/DamageSourceModule.java | 3 ++-
3 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/main/java/ch/njol/skript/doc/Categorizable.java b/src/main/java/ch/njol/skript/doc/Categorizable.java
index 7feae37008a..ea42e427f44 100644
--- a/src/main/java/ch/njol/skript/doc/Categorizable.java
+++ b/src/main/java/ch/njol/skript/doc/Categorizable.java
@@ -1,6 +1,7 @@
package ch.njol.skript.doc;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Unmodifiable;
import java.util.Set;
@@ -15,6 +16,6 @@ public interface Categorizable {
*
* @return The categories of this object.
*/
- @NotNull Set categories();
+ @Unmodifiable @NotNull Set categories();
}
diff --git a/src/main/java/org/skriptlang/skript/addon/AddonModule.java b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
index f084cc77f17..c7723821d27 100644
--- a/src/main/java/org/skriptlang/skript/addon/AddonModule.java
+++ b/src/main/java/org/skriptlang/skript/addon/AddonModule.java
@@ -56,6 +56,7 @@ default boolean canLoad(SkriptAddon addon) {
* @param cls The syntax info.
* @param The type of syntax.
*/
+ @ApiStatus.Experimental
default > void register(SkriptAddon addon, Key registry, I cls) {
register(addon, addon.syntaxRegistry(), registry, cls);
}
@@ -68,6 +69,7 @@ default > void register(SkriptAddon addon, Key regist
* @param classes The syntax infos.
* @param The type of syntax.
*/
+ @ApiStatus.Experimental
@SuppressWarnings("unchecked")
default > void register(SkriptAddon addon, Key registry, I... classes) {
SyntaxRegistry syntaxRegistry = addon.syntaxRegistry();
@@ -85,6 +87,7 @@ default > void register(SkriptAddon addon, Key regist
* @param cls The syntax info.
* @param The type of syntax.
*/
+ @ApiStatus.Experimental
default > void register(SkriptAddon addon, SyntaxRegistry syntaxRegistry, Key registry, I cls) {
//noinspection unchecked
syntaxRegistry.register(registry, (I) cls.toBuilder()
diff --git a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
index 63e5a5c4419..cd8b2f37580 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/damagesource/DamageSourceModule.java
@@ -14,6 +14,7 @@
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Unmodifiable;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.damagesource.elements.*;
@@ -70,7 +71,7 @@ public void load(SkriptAddon addon) {
}
@Override
- public @NotNull Set categories() {
+ public @Unmodifiable @NotNull Set categories() {
return Set.of(Category.DAMAGE_SOURCES);
}