Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Registration API #6246

Open
wants to merge 145 commits into
base: dev/feature
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 67 commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
1c62976
First api design
kiip1 Jan 5, 2023
f913c6b
Rework and implement for expression
kiip1 Jan 5, 2023
43d4cee
Implement for all syntax elements
kiip1 Jan 5, 2023
42fe5ca
Rename to Skript and other small refactors
kiip1 Jan 5, 2023
3297132
Registration closing
kiip1 Jan 5, 2023
5c69bdc
Child key
kiip1 Jan 6, 2023
d74c11f
Cleanup
kiip1 Jan 6, 2023
0fd91f4
Moving
kiip1 Jan 6, 2023
98f6b3d
hashcode
kiip1 Jan 6, 2023
7b5c8b8
Oops
kiip1 Jan 6, 2023
c5ac2d0
TODO
kiip1 Jan 6, 2023
3e1849f
Move event pattern transformation to the correct place
kiip1 Jan 6, 2023
a44c08e
Merge branch 'master' into feature/api-rework
kiip1 Jan 6, 2023
e467eb0
Moves key implementation away
kiip1 Jan 6, 2023
8b82bb8
Apply suggestions from code review
kiip1 Jan 7, 2023
501573a
Apply suggestions from code review
kiip1 Jan 7, 2023
513a008
Requested changes
kiip1 Jan 7, 2023
552e7b5
Package rename
kiip1 Jan 7, 2023
678cb85
Refactoring
kiip1 Jan 7, 2023
a85016f
Deprecation
kiip1 Jan 7, 2023
11ffcf4
Merge branch 'master' into feature/api-rework
kiip1 Jan 7, 2023
9807e83
Merge remote-tracking branch 'origin/feature/api-rework' into feature…
kiip1 Jan 7, 2023
f5498a7
Builders
kiip1 Jan 7, 2023
2d7f4fb
Use builders
kiip1 Jan 7, 2023
51782ec
Certified license header moment
kiip1 Jan 7, 2023
4a00130
Not too proud of this one
kiip1 Jan 7, 2023
3f877f1
Merge branch 'master' into feature/api-rework
kiip1 Jan 21, 2023
04505e0
Merge branch 'master' into feature/api-rework
kiip1 Jan 26, 2023
63957ea
Fix tests
kiip1 Jan 26, 2023
69b5960
Refactoring
kiip1 Jan 26, 2023
5976231
Replace with shorter version
kiip1 Jan 26, 2023
241f97e
Fix order
kiip1 Jan 28, 2023
eafffac
Merge branch 'master' into feature/api-rework
kiip1 Jan 28, 2023
5b686c0
Refactoring
kiip1 Jan 28, 2023
abab4f7
Merge branch 'master' into feature/api-rework
kiip1 Jan 28, 2023
6cd6215
Merge branch 'master' into feature/api-rework
kiip1 Feb 12, 2023
b9ed60f
Merge branch 'master' into feature/api-rework
kiip1 Feb 17, 2023
7983cf5
Cherry-pick docs-tool into api-rework
kiip1 Feb 27, 2023
db7b807
Merge branch 'master' into feature/api-rework
kiip1 Feb 27, 2023
c983079
Fix documentation
kiip1 Feb 27, 2023
8726396
Merge remote-tracking branch 'origin/feature/api-rework' into feature…
kiip1 Feb 27, 2023
af6c9b7
Merge branch 'master' into feature/api-rework
kiip1 May 1, 2023
d768af4
Double tabbing
kiip1 May 1, 2023
131d07b
Fix registrations
kiip1 May 1, 2023
e07efe7
Attempt 2
kiip1 May 1, 2023
0c281fa
Merge branch 'master' into feature/api-rework
kiip1 May 18, 2023
78443ff
Apply suggestions from code review
kiip1 May 18, 2023
f4238e9
Allows updating of Skript instance.
kiip1 May 18, 2023
72049bd
Fix error
kiip1 May 18, 2023
238ab4f
Deprecation
kiip1 May 18, 2023
159da8f
Simpler keys
kiip1 May 18, 2023
130933b
SimpleSkriptRegistry
kiip1 May 18, 2023
5dbdf41
Priority stuff
kiip1 May 18, 2023
f402417
Allow for multiple Skript instances
kiip1 May 19, 2023
3eab3d1
Suppliers for syntax elements
kiip1 May 19, 2023
b2a9ef1
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Dec 19, 2023
db97884
Fixes for event parsing changes
APickledWalrus Dec 19, 2023
9f912e7
Improve BukkitOrigin; Remove LegacyEventImpl
APickledWalrus Dec 19, 2023
3d6b116
Origin improvements
APickledWalrus Dec 19, 2023
1b9587e
Rework SyntaxInfo/Builder system
APickledWalrus Dec 21, 2023
53cba39
Improve Registry and Key system
APickledWalrus Dec 21, 2023
61205ea
Improve SyntaxRegister docs
APickledWalrus Dec 21, 2023
387b57c
Improve SyntaxInfo implementations
APickledWalrus Dec 21, 2023
93fe78c
Add missing JavaDocs
APickledWalrus Dec 21, 2023
5870190
Require builders for creating SyntaxInfos
APickledWalrus Dec 21, 2023
bab67ee
Initial implementation of new Addon API
APickledWalrus Dec 22, 2023
f376b7b
Merge branch 'dev/feature' into feature/registration-rework
Moderocky Dec 23, 2023
c67420f
Address UnderscoreTud's review
APickledWalrus Dec 26, 2023
c983968
Address Moderocky's review
APickledWalrus Dec 26, 2023
98a4e1d
Improve compatibility implementation
APickledWalrus Dec 26, 2023
30ceb36
Remove Skript State system
APickledWalrus Dec 26, 2023
f59ae28
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Jan 12, 2024
6816377
Minor Tweaks
APickledWalrus Jan 13, 2024
88ecd23
Localizer system draft
APickledWalrus Jan 13, 2024
966beb2
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Feb 2, 2024
3edc884
Localizer Fixes
APickledWalrus Feb 9, 2024
7ad773f
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Feb 9, 2024
dc2872b
Add support for property registration methods
APickledWalrus Feb 10, 2024
e763810
Add support for unregistering syntax infos
APickledWalrus Mar 11, 2024
7759fcd
First pass at SkriptAddon rework
APickledWalrus Mar 12, 2024
eadae09
Implement child registries for addons
APickledWalrus Mar 12, 2024
65ad3a6
Fix language and addon compatibility
APickledWalrus Mar 12, 2024
bce2323
Fix building and tests
APickledWalrus Mar 12, 2024
17937f2
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Mar 12, 2024
2560021
Block registration of interfaces/abstract classes
APickledWalrus Mar 13, 2024
fc5c637
Origin reworks
APickledWalrus Mar 13, 2024
9c60638
First pass at priority rework
APickledWalrus Mar 13, 2024
397b831
Add priority support to info builders
APickledWalrus Mar 13, 2024
3f7f973
Revert Structure priority changes
APickledWalrus Mar 14, 2024
39f26b2
Pivot to a relational priority system
APickledWalrus Mar 14, 2024
2316060
Replace ExpressionType with priority system
APickledWalrus Mar 14, 2024
bb47855
Revert some unnecessary changes
APickledWalrus Mar 14, 2024
cc6394f
Add missing EventValueExpression registration api
APickledWalrus Mar 14, 2024
2ec8806
Rework Expression priorities to be for all SyntaxInfos
APickledWalrus Mar 14, 2024
7dbe48b
Change Skript.createInstance to also return modifiable addon
APickledWalrus Mar 14, 2024
97f0603
Add SyntaxPriority
APickledWalrus Mar 15, 2024
b025c15
Move module loading out of registration
APickledWalrus Mar 15, 2024
e4a28a0
Add missing PriorityImpl checks
APickledWalrus Mar 15, 2024
efaa4fe
SyntaxPriority improvements and clarifications
APickledWalrus Mar 15, 2024
eaf5c4e
Limitations on SyntaxPriority
APickledWalrus Mar 15, 2024
3333273
Alternative module loading method
APickledWalrus Apr 17, 2024
6efbb55
Remove unnecessary SyntaxRegister interface
APickledWalrus Apr 17, 2024
3b22fe9
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Jun 1, 2024
c165765
Fix simple structure support
APickledWalrus Jun 1, 2024
92712ef
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Jun 3, 2024
a9c414b
Implement Registry interface
APickledWalrus Jun 3, 2024
dd7903e
Remove SyntaxPriority Implementation
APickledWalrus Jun 3, 2024
f296812
Disconnect Event Info from Structure Info
APickledWalrus Jun 3, 2024
f272892
Allow structures to be simple or section
APickledWalrus Jun 3, 2024
a2b9264
Improve SyntaxInfo parameter checks
APickledWalrus Jun 7, 2024
a886b25
Add class loading utilities
APickledWalrus Jun 14, 2024
8998a2e
Replace ClassLoader Java 11 methods
APickledWalrus Jun 14, 2024
bd18917
SkriptAddon: remove unnecessary annotations
APickledWalrus Jun 14, 2024
5f483a5
ClassLoader: add default loadClasses method
APickledWalrus Jun 14, 2024
a11a9a9
Use builder method for Expression return type
APickledWalrus Jun 28, 2024
b97269e
Remove license headers
APickledWalrus Jun 28, 2024
776129e
Prevent SkriptImpl from exposing its addons
APickledWalrus Jun 28, 2024
a7d5088
Use the same registry across all addons
APickledWalrus Jun 28, 2024
ce2e82e
Rename SkriptAddon#registry to SkriptAddon#syntaxRegistry
APickledWalrus Jun 28, 2024
e73da23
Add ViewProvider interface
APickledWalrus Jun 29, 2024
55fa670
Improve annotation usage and placement
APickledWalrus Jun 29, 2024
681585c
Remove deprecation annotations
APickledWalrus Jun 29, 2024
a0839ef
Add listening behavior to Event SyntaxInfo
APickledWalrus Jun 29, 2024
65507f8
Add missing experimental annotations
APickledWalrus Jun 29, 2024
537fc4a
Rename BukkitInfos to BukkitSyntaxInfos
APickledWalrus Jun 29, 2024
ec1f772
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Jun 29, 2024
dbc48af
Add unmodifiableView for Skript
APickledWalrus Jun 29, 2024
82d1978
Add registry storage to SkriptAddon
APickledWalrus Jun 30, 2024
036d0b5
Add source requirement to SkriptAddon
APickledWalrus Jun 30, 2024
2d94cf5
Remove source from Localizer
APickledWalrus Jun 30, 2024
7414f40
Fix old addon registration
APickledWalrus Jul 1, 2024
6956294
Merge branch 'dev/feature' into feature/registration-rework
Moderocky Aug 15, 2024
5ffc974
SyntaxInfo equals/hashCode improvements
APickledWalrus Aug 28, 2024
3687940
Implementation optimizations
APickledWalrus Sep 2, 2024
a15d3cc
Merge branch 'dev/feature' into feature/registration-rework
APickledWalrus Sep 2, 2024
f1f4915
Fix ConditionType support
APickledWalrus Sep 2, 2024
96874c5
Return the constructed info for static registration methods
APickledWalrus Sep 2, 2024
fd9bb95
Builder interface
APickledWalrus Sep 5, 2024
b99b686
Merge branch 'dev/feature' into feature/registration-rework
sovdeeth Sep 29, 2024
73a61cd
Remove unncessary package infos
APickledWalrus Sep 29, 2024
f4d1df6
Implement Buildable interface
APickledWalrus Sep 29, 2024
f609017
Improve legacy collection methods
APickledWalrus Sep 29, 2024
0c30aba
Use a map for modern addon tracking
APickledWalrus Sep 29, 2024
865ddd0
Fix SkriptEventInfo Compatibility
APickledWalrus Sep 29, 2024
3077f8d
Allow Skript#getAddon to return Skript's addon instance
APickledWalrus Sep 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
388 changes: 265 additions & 123 deletions src/main/java/ch/njol/skript/Skript.java

Large diffs are not rendered by default.

24 changes: 23 additions & 1 deletion src/main/java/ch/njol/skript/SkriptAddon.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,16 @@
import ch.njol.skript.localization.Language;
import ch.njol.skript.util.Utils;
import ch.njol.skript.util.Version;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;

/**
* Utility class for Skript addons. Use {@link Skript#registerAddon(JavaPlugin)} to create a SkriptAddon instance for your plugin.
* @deprecated Use {@link org.skriptlang.skript.addon.SkriptAddon}.
*/
public final class SkriptAddon {
@Deprecated
@ApiStatus.NonExtendable
APickledWalrus marked this conversation as resolved.
Show resolved Hide resolved
public class SkriptAddon implements org.skriptlang.skript.addon.SkriptAddon {
UnderscoreTud marked this conversation as resolved.
Show resolved Hide resolved
APickledWalrus marked this conversation as resolved.
Show resolved Hide resolved

public final JavaPlugin plugin;
public final Version version;
Expand Down Expand Up @@ -126,4 +131,21 @@ public File getFile() {
return file;
}

@Override
public String name() {
return getName();
}

@Override
@NotNull
public String dataFileDirectory() {
return plugin.getDataFolder().getAbsolutePath();
}

@Override
@Nullable
public String languageFileDirectory() {
return getLanguageFileDirectory();
}

}
6 changes: 4 additions & 2 deletions src/main/java/ch/njol/skript/SkriptCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
import org.eclipse.jdt.annotation.Nullable;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.lang.script.Script;

import java.io.File;
Expand Down Expand Up @@ -369,10 +371,10 @@ else if (args[0].equalsIgnoreCase("info")) {
info(sender, "info.version", Skript.getVersion());
}

Collection<SkriptAddon> addons = Skript.getAddons();
Collection<SkriptAddon> addons = Skript.instance().addons();
info(sender, "info.addons", addons.isEmpty() ? "None" : "");
for (SkriptAddon addon : addons) {
PluginDescriptionFile desc = addon.plugin.getDescription();
PluginDescriptionFile desc = JavaPlugin.getProvidingPlugin(addon.getClass()).getDescription();
APickledWalrus marked this conversation as resolved.
Show resolved Hide resolved
String web = desc.getWebsite();
Skript.info(sender, " - " + desc.getFullName() + (web != null ? " (" + web + ")" : ""));
}
Expand Down
1 change: 1 addition & 0 deletions src/main/java/ch/njol/skript/lang/ExpressionInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,5 @@ public Class<T> getReturnType() {
public ExpressionType getExpressionType() {
return expressionType;
}

}
34 changes: 8 additions & 26 deletions src/main/java/ch/njol/skript/lang/SkriptEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@
import ch.njol.skript.events.EvtClick;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.structures.StructEvent.EventData;
import org.skriptlang.skript.lang.script.Script;
import org.skriptlang.skript.lang.entry.EntryContainer;
import org.skriptlang.skript.lang.structure.Structure;
import org.bukkit.event.Event;
import org.bukkit.event.EventPriority;
import org.eclipse.jdt.annotation.Nullable;
import org.skriptlang.skript.bukkit.registration.BukkitInfos;
import org.skriptlang.skript.lang.entry.EntryContainer;
import org.skriptlang.skript.lang.script.Script;
import org.skriptlang.skript.lang.structure.Structure;

import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -209,31 +210,12 @@ public boolean canExecuteAsynchronously() {
/**
* Fixes patterns in event by modifying every {@link ch.njol.skript.patterns.TypePatternElement}
* to be nullable.
*
* @deprecated Use {@link BukkitInfos#fixPattern(String)}
*/
@Deprecated
public static String fixPattern(String pattern) {
char[] chars = pattern.toCharArray();
StringBuilder stringBuilder = new StringBuilder();

boolean inType = false;
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
stringBuilder.append(c);

if (c == '%') {
// toggle inType
inType = !inType;

// add the dash character if it's not already present
// a type specification can have two prefix characters for modification
if (inType && i + 2 < chars.length && chars[i + 1] != '-' && chars[i + 2] != '-')
stringBuilder.append('-');
} else if (c == '\\' && i + 1 < chars.length) {
// Make sure we don't toggle inType for escape percentage signs
stringBuilder.append(chars[i + 1]);
i++;
}
}
return stringBuilder.toString();
return BukkitInfos.fixPattern(pattern);
}

@Nullable
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/ch/njol/skript/lang/SkriptEventInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,13 @@
*/
package ch.njol.skript.lang;

import java.util.Locale;

import org.skriptlang.skript.lang.structure.StructureInfo;
import ch.njol.skript.SkriptAPIException;
import org.bukkit.event.Event;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.eclipse.jdt.annotation.Nullable;
import org.skriptlang.skript.lang.structure.StructureInfo;

import ch.njol.skript.SkriptAPIException;
import java.util.Locale;

public final class SkriptEventInfo<E extends SkriptEvent> extends StructureInfo<E> {

Expand Down Expand Up @@ -205,4 +204,5 @@ public String[] getRequiredPlugins() {
public String getDocumentationID() {
return documentationID;
}

}
62 changes: 57 additions & 5 deletions src/main/java/ch/njol/skript/lang/SyntaxElementInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,39 @@
*/
package ch.njol.skript.lang;

import org.bukkit.event.Event;
import org.jetbrains.annotations.Contract;
import org.skriptlang.skript.bukkit.registration.BukkitInfos;
import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.lang.structure.StructureInfo;

import java.util.Arrays;

/**
* @author Peter Güttinger
* @deprecated Use {@link SyntaxInfo}
* @param <E> the syntax element this info is for
*/
@Deprecated
public class SyntaxElementInfo<E extends SyntaxElement> {

@Deprecated
public final Class<E> c;
@Deprecated
public final String[] patterns;
@Deprecated
public final String originClassPath;

public SyntaxElementInfo(final String[] patterns, final Class<E> c, final String originClassPath) throws IllegalArgumentException {
public SyntaxElementInfo(String[] patterns, Class<E> elementClass, String originClassPath) throws IllegalArgumentException {
this.patterns = patterns;
this.c = c;
this.c = elementClass;
this.originClassPath = originClassPath;
try {
c.getConstructor();
elementClass.getConstructor();
// if (!c.getDeclaredConstructor().isAccessible())
// throw new IllegalArgumentException("The nullary constructor of class "+c.getName()+" is not public");
} catch (final NoSuchMethodException e) {
// throwing an Exception throws an (empty) ExceptionInInitializerError instead, thus an Error is used
throw new Error(c + " does not have a public nullary constructor", e);
throw new Error(elementClass + " does not have a public nullary constructor", e);
} catch (final SecurityException e) {
throw new IllegalStateException("Skript cannot run properly because a security manager is blocking it!");
}
Expand Down Expand Up @@ -69,4 +79,46 @@ public String[] getPatterns() {
public String getOriginClassPath() {
return originClassPath;
}

@SuppressWarnings("unchecked")
@Contract("_ -> new")
public static <I extends SyntaxElementInfo<E>, E extends SyntaxElement> I fromModern(SyntaxInfo<? extends E> info) {
if (info instanceof BukkitInfos.Event) {
BukkitInfos.Event<?> event = (BukkitInfos.Event<?>) info;

// We must first go back to the raw input
String rawName = event.name().startsWith("On ")
? event.name().substring(3)
: "*" + event.name();
SkriptEventInfo<?> eventInfo = new SkriptEventInfo<>(
rawName, event.patterns().toArray(new String[0]),
event.type(), event.origin().name(),
(Class<? extends Event>[]) event.events().toArray(new Class<?>[0])
).since(event.since())
.documentationID(event.documentationId())
.description(event.description().toArray(new String[0]))
.examples(event.examples().toArray(new String[0]))
.keywords(event.keywords().toArray(new String[0]))
.requiredPlugins(event.requiredPlugins().toArray(new String[0]));

return (I) eventInfo;
} else if (info instanceof SyntaxInfo.Structure) {
SyntaxInfo.Structure<?> structure = (SyntaxInfo.Structure<?>) info;
return (I) new StructureInfo<>(structure.patterns().toArray(new String[0]), structure.type(),
structure.origin().name(), structure.entryValidator());
} else if (info instanceof SyntaxInfo.Expression) {
return (I) fromModernExpression((SyntaxInfo.Expression<?, ?>) info);
}

return (I) new SyntaxElementInfo<>(info.patterns().toArray(new String[0]), info.type(), info.origin().name());
}

@Contract("_ -> new")
private static <E extends Expression<R>, R> ExpressionInfo<E, R> fromModernExpression(SyntaxInfo.Expression<E, R> info) {
APickledWalrus marked this conversation as resolved.
Show resolved Hide resolved
return new ExpressionInfo<>(
info.patterns().toArray(new String[0]), info.returnType(),
info.type(), info.origin().name(), info.expressionType()
);
}

}
Loading