Skip to content

Commit b8676aa

Browse files
Additional module standardization (#8516)
1 parent 09c944b commit b8676aa

File tree

92 files changed

+347
-230
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+347
-230
lines changed

code-conventions.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,25 @@ but this is not strictly required:
141141
String string = "example string " +
142142
"with more to add";
143143
```
144-
144+
145+
#### Module Organization
146+
147+
When creating modules, they should be organized in the following manner:
148+
```text
149+
module
150+
|- elements
151+
| |- expressions
152+
| | |- ExprX.java
153+
| |- effects
154+
| | |- EffY.java
155+
|- submodule
156+
| |- elements
157+
| |- Submodule.java
158+
|- Module.java
159+
```
160+
161+
#### Syntax Class Organization
162+
145163
* When extending one of following classes: SimpleExpression, SimplePropertyExpression, Effect, Condition...
146164
- Put overridden methods in order
147165
- Put static registration before all methods
@@ -153,7 +171,6 @@ but this is not strictly required:
153171
- Section: init -> walk -> toString
154172
- Structure: init -> (preLoad) -> load -> (postLoad) -> unload -> (postUnload) -> (getPriority) -> toString
155173
156-
157174
### Naming
158175
* Class names are written in `UpperCamelCase`
159176
- The file name should match its primary class name (e.g. `MyClass` goes in `MyClass.java`.)

src/main/java/ch/njol/skript/Skript.java

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.junit.runner.JUnitCore;
6161
import org.junit.runner.Result;
6262
import org.junit.runner.notification.Failure;
63+
import org.skriptlang.skript.addon.AddonModule;
6364
import org.skriptlang.skript.bukkit.BukkitModule;
6465
import org.skriptlang.skript.bukkit.SkriptMetrics;
6566
import org.skriptlang.skript.bukkit.lang.eventvalue.EventValueRegistry;
@@ -479,8 +480,17 @@ public void onEnable() {
479480
//noinspection removal
480481
EventValues.setEventValueRegistry(eventValueRegistry);
481482

482-
// Load classes which are always safe to use
483-
new JavaClasses(); // These may be needed in configuration
483+
// TODO this upcoming portion is a bad circular dependency
484+
// some modules depend on the config
485+
// the config depends on some modules (for the types they register)
486+
487+
// load classes
488+
new JavaClasses();
489+
new SkriptClasses();
490+
new BukkitClasses();
491+
492+
// load the config
493+
SkriptConfig.load();
484494

485495
// Check server software, Minecraft version, etc.
486496
if (!checkServerPlatform()) {
@@ -489,15 +499,6 @@ public void onEnable() {
489499
return;
490500
}
491501

492-
// And then not-so-safe classes
493-
Throwable classLoadError = null;
494-
try {
495-
new SkriptClasses();
496-
new BukkitClasses();
497-
} catch (Throwable e) {
498-
classLoadError = e;
499-
}
500-
501502
// Warn about pausing
502503
if (Skript.methodExists(Server.class, "getPauseWhenEmptyTime")) {
503504
int pauseThreshold = getServer().getPauseWhenEmptyTime();
@@ -508,14 +509,8 @@ public void onEnable() {
508509
}
509510
}
510511

511-
512-
// Config must be loaded after Java and Skript classes are parseable
513-
// ... but also before platform check, because there is a config option to ignore some errors
514-
SkriptConfig.load();
515-
516512
// Register the runtime error refresh after loading, so we can do the first instantiation manually.
517513
SkriptConfig.eventRegistry().register(SkriptConfig.ReloadEvent.class, RuntimeErrorManager::refresh);
518-
519514
// init runtime error manager and add bukkit consumer.
520515
RuntimeErrorManager.refresh();
521516
getRuntimeErrorManager().addConsumer(new BukkitRuntimeErrorConsumer());
@@ -532,35 +527,48 @@ public void onEnable() {
532527
updater.updateCheck(console);
533528
}
534529

535-
// If loading can continue (platform ok), check for potentially thrown error
536-
if (classLoadError != null) {
537-
exception(classLoadError);
538-
setEnabled(false);
539-
return;
540-
}
541-
542530
PluginCommand skriptCommand = getCommand("skript");
543531
assert skriptCommand != null; // It is defined, unless build is corrupted or something like that
544532
skriptCommand.setExecutor(new SkriptCommand());
545533
skriptCommand.setTabCompleter(new SkriptCommandTabCompleter());
546534

547-
// Load Bukkit stuff. It is done after platform check, because something might be missing!
548-
BukkitEventValues.register(eventValueRegistry);
535+
final AddonModule legacyModule = new AddonModule() {
536+
537+
@Override
538+
public void init(org.skriptlang.skript.addon.SkriptAddon addon) {
539+
new DefaultComparators();
540+
new DefaultConverters();
549541

550-
new DefaultComparators();
551-
new DefaultConverters();
552-
new DefaultFunctions();
553-
new DefaultOperations();
542+
// legacy listeners
543+
//noinspection removal
544+
ChatMessages.registerListeners();
545+
}
546+
547+
@Override
548+
public void load(org.skriptlang.skript.addon.SkriptAddon addon) {
549+
try {
550+
//noinspection removal
551+
getAddonInstance().loadClasses("ch.njol.skript",
552+
"conditions", "effects", "events", "expressions", "entity", "literals", "sections", "structures");
553+
} catch (IOException e) {
554+
throw new RuntimeException(e);
555+
}
556+
BukkitEventValues.register(eventValueRegistry);
557+
new DefaultFunctions();
558+
new DefaultOperations();
559+
}
560+
561+
@Override
562+
public String name() {
563+
return "legacy";
564+
}
554565

555-
ChatMessages.registerListeners();
566+
};
556567

557568
try {
558-
getAddonInstance().loadClasses("ch.njol.skript",
559-
"conditions", "effects", "events", "expressions", "entity", "literals", "sections", "structures");
560-
getAddonInstance().loadClasses("org.skriptlang.skript.bukkit", "misc");
561-
skript.loadModules(new CommonModule(), new BukkitModule());
569+
skript.loadModules(legacyModule, new CommonModule(), new BukkitModule());
562570
} catch (final Exception e) {
563-
exception(e, "Could not load required .class files: " + e.getLocalizedMessage());
571+
exception(e, "Failed to load one of Skript's modules: " + e.getLocalizedMessage());
564572
setEnabled(false);
565573
return;
566574
}

src/main/java/ch/njol/skript/classes/data/BukkitClasses.java

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@
4949
import org.bukkit.metadata.Metadatable;
5050
import org.bukkit.util.CachedServerIcon;
5151
import org.jetbrains.annotations.Nullable;
52-
import org.skriptlang.skript.bukkit.base.types.*;
53-
import org.skriptlang.skript.bukkit.base.types.EntityClassInfo.EntityChanger;
52+
import org.skriptlang.skript.bukkit.types.EntityClassInfo.EntityChanger;
5453
import org.skriptlang.skript.lang.properties.Property;
5554
import org.skriptlang.skript.lang.properties.handlers.base.ExpressionPropertyHandler;
5655

@@ -66,8 +65,6 @@ public class BukkitClasses {
6665
public BukkitClasses() {}
6766

6867
static {
69-
Classes.registerClass(new EntityClassInfo());
70-
7168
Classes.registerClass(new ClassInfo<>(LivingEntity.class, "livingentity")
7269
.user("living ?entit(y|ies)")
7370
.name("Living Entity")
@@ -91,8 +88,6 @@ public BukkitClasses() {}
9188
.defaultExpression(new EventValueExpression<>(Projectile.class))
9289
.changer(DefaultChangers.nonLivingEntityChanger));
9390

94-
Classes.registerClass(new BlockClassInfo());
95-
9691
Classes.registerClass(new ClassInfo<>(BlockData.class, "blockdata")
9792
.user("block ?datas?")
9893
.name("Block Data")
@@ -154,9 +149,6 @@ protected boolean canBeInstantiated() {
154149
}
155150
}).cloner(BlockData::clone));
156151

157-
Classes.registerClass(new LocationClassInfo());
158-
Classes.registerClass(new VectorClassInfo());
159-
160152
Classes.registerClass(new ClassInfo<>(World.class, "world")
161153
.user("worlds?")
162154
.name("World")
@@ -231,8 +223,6 @@ public boolean mustSyncDeserialization() {
231223
ExpressionPropertyHandler.of(World::getName, String.class)
232224
));
233225

234-
Classes.registerClass(new InventoryClassInfo());
235-
236226
Classes.registerClass(new EnumClassInfo<>(InventoryAction.class, "inventoryaction", "inventory actions")
237227
.user("inventory ?actions?")
238228
.name("Inventory Action")
@@ -255,10 +245,6 @@ public boolean mustSyncDeserialization() {
255245
.examples("")
256246
.since("2.2-dev32"));
257247

258-
Classes.registerClass(new PlayerClassInfo());
259-
260-
Classes.registerClass(new OfflinePlayerClassInfo());
261-
262248
Classes.registerClass(new ClassInfo<>(CommandSender.class, "commandsender")
263249
.user("((commands?)? ?)?(sender|executor)s?")
264250
.name("Command Sender")
@@ -300,8 +286,6 @@ public String toVariableNameString(final CommandSender s) {
300286
ExpressionPropertyHandler.of(CommandSender::name, Component.class)
301287
));
302288

303-
Classes.registerClass(new NameableClassInfo());
304-
305289
Classes.registerClass(new ClassInfo<>(InventoryHolder.class, "inventoryholder")
306290
.name(ClassInfo.NO_DOC)
307291
.defaultExpression(new EventValueExpression<>(InventoryHolder.class))
@@ -341,8 +325,6 @@ public String toVariableNameString(InventoryHolder holder) {
341325
"set the player argument's game mode to creative")
342326
.since("1.0"));
343327

344-
Classes.registerClass(new ItemStackClassInfo());
345-
346328
Classes.registerClass(new ClassInfo<>(Item.class, "itementity")
347329
.name(ClassInfo.NO_DOC)
348330
.since("2.0")

src/main/java/ch/njol/skript/classes/data/DefaultChangers.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import org.bukkit.inventory.Inventory;
1010
import org.bukkit.inventory.ItemStack;
1111
import org.jetbrains.annotations.Nullable;
12-
import org.skriptlang.skript.bukkit.base.types.BlockClassInfo;
13-
import org.skriptlang.skript.bukkit.base.types.EntityClassInfo;
14-
import org.skriptlang.skript.bukkit.base.types.InventoryClassInfo;
15-
import org.skriptlang.skript.bukkit.base.types.PlayerClassInfo;
12+
import org.skriptlang.skript.bukkit.types.BlockClassInfo;
13+
import org.skriptlang.skript.bukkit.types.EntityClassInfo;
14+
import org.skriptlang.skript.bukkit.types.InventoryClassInfo;
15+
import org.skriptlang.skript.bukkit.types.PlayerClassInfo;
1616

1717
/**
1818
* @author Peter Güttinger

src/main/java/ch/njol/skript/classes/data/JavaClasses.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import ch.njol.yggdrasil.Fields;
1717
import org.jetbrains.annotations.Contract;
1818
import org.jetbrains.annotations.Nullable;
19-
import org.skriptlang.skript.common.types.QuaternionClassInfo;
2019
import org.skriptlang.skript.lang.properties.Property;
2120
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
2221
import org.skriptlang.skript.lang.properties.handlers.base.ConditionPropertyHandler;
@@ -324,9 +323,6 @@ public Class<? extends String>[] elementTypes() {
324323
Skript.instance(),
325324
ConditionPropertyHandler.of(String::isEmpty)));
326325

327-
// joml type - for display entities
328-
Classes.registerClass(new QuaternionClassInfo());
329-
330326

331327
Classes.registerClass(new ClassInfo<>(UUID.class, "uuid")
332328
.user("uuids?")

src/main/java/ch/njol/skript/classes/data/SkriptClasses.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@
2121
import ch.njol.yggdrasil.Fields;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
24-
import org.skriptlang.skript.bukkit.base.types.ItemTypeClassInfo;
25-
import org.skriptlang.skript.bukkit.base.types.SlotClassInfo;
26-
import org.skriptlang.skript.common.types.QueueClassInfo;
27-
import org.skriptlang.skript.common.types.ScriptClassInfo;
2824
import org.skriptlang.skript.lang.properties.Property;
2925
import org.skriptlang.skript.lang.properties.handlers.ContainsHandler;
3026
import org.skriptlang.skript.lang.properties.handlers.TypedValueHandler;
@@ -146,8 +142,6 @@ public String toVariableNameString(final WeatherType o) {
146142
})
147143
.serializer(new EnumSerializer<>(WeatherType.class)));
148144

149-
Classes.registerClass(new ItemTypeClassInfo());
150-
151145
Classes.registerClass(new ClassInfo<>(Time.class, "time")
152146
.user("times?")
153147
.name("Time")
@@ -349,8 +343,6 @@ public String toVariableNameString(final Direction o) {
349343
})
350344
.serializer(new YggdrasilSerializer<>()));
351345

352-
Classes.registerClass(new SlotClassInfo());
353-
354346
Classes.registerClass(new ClassInfo<>(Color.class, "color")
355347
.user("colou?rs?")
356348
.name("Color")
@@ -483,8 +475,6 @@ public String toVariableNameString(final Experience xp) {
483475
.serializer(new YggdrasilSerializer<GameruleValue>())
484476
);
485477

486-
Classes.registerClass(new QueueClassInfo());
487-
488478
Classes.registerClass(new ClassInfo<>(Config.class, "config")
489479
.user("configs?")
490480
.name("Config")
@@ -567,8 +557,6 @@ public String toVariableNameString(Node node) {
567557
}
568558
}));
569559

570-
Classes.registerClass(new ScriptClassInfo());
571-
572560
Classes.registerClass(new ClassInfo<>(Executable.class, "executable")
573561
.user("executables?")
574562
.name("Executable")

src/main/java/ch/njol/skript/conditions/CondContains.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.bukkit.inventory.Inventory;
2323
import org.bukkit.inventory.ItemStack;
2424
import org.jetbrains.annotations.Nullable;
25-
import org.skriptlang.skript.common.properties.conditions.PropCondContains;
25+
import org.skriptlang.skript.common.properties.elements.conditions.PropCondContains;
2626
import org.skriptlang.skript.lang.comparator.Comparators;
2727
import org.skriptlang.skript.lang.comparator.Relation;
2828
import org.skriptlang.skript.lang.converter.Converters;

src/main/java/ch/njol/skript/conditions/CondIsEmpty.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.bukkit.Material;
1212
import org.bukkit.inventory.Inventory;
1313
import org.bukkit.inventory.ItemStack;
14-
import org.skriptlang.skript.common.properties.conditions.PropCondIsEmpty;
14+
import org.skriptlang.skript.common.properties.elements.conditions.PropCondIsEmpty;
1515
import org.skriptlang.skript.lang.util.SkriptQueue;
1616

1717
/**

src/main/java/ch/njol/skript/expressions/ExprAmount.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import ch.njol.util.coll.CollectionUtils;
1919
import org.bukkit.event.Event;
2020
import org.jetbrains.annotations.Nullable;
21-
import org.skriptlang.skript.common.properties.expressions.PropExprAmount;
21+
import org.skriptlang.skript.common.properties.elements.expressions.PropExprAmount;
2222

2323
/**
2424
* @deprecated This is being removed in favor of {@link PropExprAmount}

src/main/java/ch/njol/skript/expressions/ExprName.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
import org.bukkit.inventory.Inventory;
3232
import org.bukkit.inventory.InventoryView;
3333
import org.jetbrains.annotations.Nullable;
34-
import org.skriptlang.skript.common.properties.expressions.PropExprName;
34+
import org.skriptlang.skript.common.properties.elements.expressions.PropExprName;
3535
import org.skriptlang.skript.lang.script.Script;
3636

3737
import java.util.ArrayList;

0 commit comments

Comments
 (0)