Skip to content

Commit dd063f9

Browse files
authored
Make ERS use names of events instead of class names (SkriptLang#7697)
init commit
1 parent 42102c0 commit dd063f9

3 files changed

Lines changed: 19 additions & 11 deletions

File tree

src/main/java/ch/njol/skript/lang/EventRestrictedSyntax.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
/**
88
* A syntax element that restricts the events it can be used in.
99
*/
10+
@FunctionalInterface
1011
public interface EventRestrictedSyntax {
1112

1213
/**

src/main/java/ch/njol/skript/lang/SkriptParser.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,7 @@ public boolean hasTag(String tag) {
224224
if (element instanceof EventRestrictedSyntax eventRestrictedSyntax) {
225225
Class<? extends Event>[] supportedEvents = eventRestrictedSyntax.supportedEvents();
226226
if (!getParser().isCurrentEvent(supportedEvents)) {
227-
Iterator<String> iterator = Arrays.stream(supportedEvents)
228-
.map(it -> "the " + it.getSimpleName()
229-
.replaceAll("([A-Z])", " $1")
230-
.toLowerCase()
231-
.trim())
232-
.iterator();
233-
234-
String events = StringUtils.join(iterator, ", ", " or ");
235-
236-
Skript.error("'" + parseResult.expr + "' can only be used in " + events);
227+
Skript.error("'" + parseResult.expr + "' can only be used in " + supportedEventsNames(supportedEvents));
237228
continue;
238229
}
239230
}
@@ -254,6 +245,22 @@ public boolean hasTag(String tag) {
254245
}
255246
}
256247

248+
private static String supportedEventsNames(Class<? extends Event>[] supportedEvents) {
249+
List<String> names = new ArrayList<>();
250+
251+
for (SkriptEventInfo<?> eventInfo : Skript.getEvents()) {
252+
for (Class<? extends Event> eventClass : supportedEvents) {
253+
for (Class<? extends Event> event : eventInfo.events) {
254+
if (event.isAssignableFrom(eventClass)) {
255+
names.add("the %s event".formatted(eventInfo.getName().toLowerCase()));
256+
}
257+
}
258+
}
259+
}
260+
261+
return StringUtils.join(names, ", ", " or ");
262+
}
263+
257264
private static @NotNull DefaultExpression<?> getDefaultExpression(ExprInfo exprInfo, String pattern) {
258265
DefaultExpression<?> expr = exprInfo.classes[0].getDefaultExpression();
259266
if (expr == null)

src/test/skript/tests/misc/supported events.sk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ test "supported events":
22
parse:
33
set {_x} to the exploded blocks
44

5-
assert last parse logs contain "'the exploded blocks' can only be used in the entity explode event" with "supported events message did not get sent correctly"
5+
assert last parse logs contain "'the exploded blocks' can only be used in the on explode event" with "supported events message did not get sent correctly"

0 commit comments

Comments
 (0)