Skip to content

Commit edd20a1

Browse files
committed
Create child modules and move over existing Bukkit addon modules.
1 parent 88c3679 commit edd20a1

62 files changed

Lines changed: 666 additions & 484 deletions

File tree

Some content is hidden

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

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

Lines changed: 8 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -3,54 +3,30 @@
33
import ch.njol.skript.aliases.Aliases;
44
import ch.njol.skript.bukkitutil.BurgerHelper;
55
import ch.njol.skript.classes.ClassInfo;
6-
import ch.njol.skript.classes.data.BukkitClasses;
7-
import ch.njol.skript.classes.data.BukkitEventValues;
8-
import ch.njol.skript.classes.data.DefaultComparators;
9-
import ch.njol.skript.classes.data.DefaultConverters;
10-
import ch.njol.skript.classes.data.DefaultFunctions;
11-
import ch.njol.skript.classes.data.DefaultOperations;
12-
import ch.njol.skript.classes.data.JavaClasses;
13-
import ch.njol.skript.classes.data.SkriptClasses;
6+
import ch.njol.skript.classes.data.*;
147
import ch.njol.skript.command.Commands;
158
import ch.njol.skript.doc.Documentation;
169
import ch.njol.skript.events.EvtSkript;
1710
import ch.njol.skript.expressions.arithmetic.ExprArithmetic;
1811
import ch.njol.skript.hooks.Hook;
1912
import ch.njol.skript.lang.*;
13+
import ch.njol.skript.lang.Effect;
2014
import ch.njol.skript.lang.Condition.ConditionType;
2115
import ch.njol.skript.lang.util.SimpleExpression;
2216
import ch.njol.skript.localization.Language;
2317
import ch.njol.skript.localization.Message;
2418
import ch.njol.skript.localization.PluralizingArgsMessage;
25-
import ch.njol.skript.log.BukkitLoggerFilter;
26-
import ch.njol.skript.log.CountingLogHandler;
27-
import ch.njol.skript.log.ErrorDescLogHandler;
28-
import ch.njol.skript.log.ErrorQuality;
29-
import ch.njol.skript.log.LogEntry;
30-
import ch.njol.skript.log.LogHandler;
31-
import ch.njol.skript.log.SkriptLogger;
32-
import ch.njol.skript.log.TestingLogHandler;
33-
import ch.njol.skript.log.Verbosity;
19+
import ch.njol.skript.log.*;
3420
import ch.njol.skript.registrations.Classes;
3521
import ch.njol.skript.registrations.EventValues;
3622
import ch.njol.skript.registrations.Feature;
37-
import ch.njol.skript.test.runner.EffObjectives;
38-
import ch.njol.skript.test.runner.SkriptAsyncJUnitTest;
39-
import ch.njol.skript.test.runner.SkriptJUnitTest;
40-
import ch.njol.skript.test.runner.SkriptTestEvent;
41-
import ch.njol.skript.test.runner.TestMode;
42-
import ch.njol.skript.test.runner.TestTracker;
23+
import ch.njol.skript.test.runner.*;
4324
import ch.njol.skript.timings.SkriptTimings;
4425
import ch.njol.skript.update.ReleaseManifest;
4526
import ch.njol.skript.update.ReleaseStatus;
4627
import ch.njol.skript.update.UpdateManifest;
4728
import ch.njol.skript.util.Date;
48-
import ch.njol.skript.util.EmptyStacktraceException;
49-
import ch.njol.skript.util.ExceptionUtils;
50-
import ch.njol.skript.util.FileUtils;
51-
import ch.njol.skript.util.Task;
52-
import ch.njol.skript.util.Utils;
53-
import ch.njol.skript.util.Version;
29+
import ch.njol.skript.util.*;
5430
import ch.njol.skript.util.chat.BungeeConverter;
5531
import ch.njol.skript.util.chat.ChatMessages;
5632
import ch.njol.skript.variables.Variables;
@@ -62,12 +38,7 @@
6238
import com.google.gson.Gson;
6339
import com.google.gson.GsonBuilder;
6440
import org.bstats.bukkit.Metrics;
65-
import org.bukkit.Bukkit;
66-
import org.bukkit.ChatColor;
67-
import org.bukkit.Material;
68-
import org.bukkit.OfflinePlayer;
69-
import org.bukkit.Server;
70-
import org.bukkit.World;
41+
import org.bukkit.*;
7142
import org.bukkit.command.CommandSender;
7243
import org.bukkit.command.PluginCommand;
7344
import org.bukkit.entity.Player;
@@ -90,19 +61,14 @@
9061
import org.junit.runner.JUnitCore;
9162
import org.junit.runner.Result;
9263
import org.junit.runner.notification.Failure;
64+
import org.skriptlang.skript.bukkit.BukkitModule;
9365
import org.skriptlang.skript.bukkit.SkriptMetrics;
9466
import org.skriptlang.skript.bukkit.breeding.BreedingModule;
95-
import org.skriptlang.skript.bukkit.brewing.BrewingModule;
96-
import org.skriptlang.skript.bukkit.damagesource.DamageSourceModule;
9767
import org.skriptlang.skript.bukkit.displays.DisplayModule;
98-
import org.skriptlang.skript.bukkit.entity.EntityModule;
99-
import org.skriptlang.skript.bukkit.fishing.FishingModule;
10068
import org.skriptlang.skript.bukkit.furnace.FurnaceModule;
10169
import org.skriptlang.skript.bukkit.input.InputModule;
102-
import org.skriptlang.skript.bukkit.itemcomponents.ItemComponentModule;
10370
import org.skriptlang.skript.bukkit.log.runtime.BukkitRuntimeErrorConsumer;
10471
import org.skriptlang.skript.bukkit.loottables.LootTableModule;
105-
import org.skriptlang.skript.bukkit.potion.PotionModule;
10672
import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
10773
import org.skriptlang.skript.bukkit.tags.TagModule;
10874
import org.skriptlang.skript.common.CommonModule;
@@ -593,7 +559,6 @@ public void onEnable() {
593559
"conditions", "effects", "events", "expressions", "entity", "literals", "sections", "structures");
594560
getAddonInstance().loadClasses("org.skriptlang.skript.bukkit", "misc");
595561
// todo: become proper module once registry api is merged
596-
FishingModule.load();
597562
BreedingModule.load();
598563
DisplayModule.load();
599564
InputModule.load();
@@ -602,11 +567,7 @@ public void onEnable() {
602567
LootTableModule.load();
603568
skript.loadModules(
604569
new CommonModule(),
605-
new BrewingModule(),
606-
new EntityModule(),
607-
new DamageSourceModule(),
608-
new ItemComponentModule(),
609-
new PotionModule());
570+
new BukkitModule());
610571
} catch (final Exception e) {
611572
exception(e, "Could not load required .class files: " + e.getLocalizedMessage());
612573
setEnabled(false);

src/main/java/org/skriptlang/skript/addon/AddonModule.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
import org.skriptlang.skript.Skript;
44
import org.skriptlang.skript.docs.Origin.AddonOrigin;
5+
import org.skriptlang.skript.registration.SyntaxRegistry;
6+
7+
import java.util.Arrays;
8+
import java.util.function.BiConsumer;
59

610
/**
711
* A module is a component of a {@link SkriptAddon} used for registering syntax and other {@link Skript} components.
@@ -76,4 +80,15 @@ default ModuleOrigin origin(SkriptAddon addon) {
7680
return AddonModule.origin(addon, name());
7781
}
7882

83+
/**
84+
* Helper method to register syntaxes to a registry with a shared origin.
85+
* @param registry The syntax registry to register to.
86+
* @param origin The origin to use for the registrations.
87+
* @param consumers The consumers that will register syntax to the registry.
88+
*/
89+
@SafeVarargs
90+
static void register(SyntaxRegistry registry, ModuleOrigin origin, BiConsumer<SyntaxRegistry, ModuleOrigin>... consumers) {
91+
Arrays.stream(consumers).forEach(consumer -> consumer.accept(registry, origin));
92+
}
93+
7994
}

src/main/java/org/skriptlang/skript/addon/ChildAddonModule.java

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -57,52 +57,12 @@ public SkriptAddon addon() {
5757

5858
}
5959

60-
protected ChildAddonModule(AddonModule parentModule) {
61-
this.parentModule = parentModule;
62-
}
63-
64-
@Override
65-
public void init(SkriptAddon addon) {
66-
init(addon, parentModule);
67-
}
68-
6960
/**
70-
* Used for loading the components of this module that are needed first or by other modules (e.g. class infos).
71-
* <b>This method will always be called before {@link #load(SkriptAddon, AddonModule)}</b>.
72-
* @param addon The addon this module belongs to.
61+
* Constructs a child addon module with the given parent module.
7362
* @param parentModule The parent module that created this child module.
74-
* @see #load(SkriptAddon)
7563
*/
76-
protected abstract void init(SkriptAddon addon, AddonModule parentModule);
77-
78-
@Override
79-
public void load(SkriptAddon addon) {
80-
load(addon, parentModule);
81-
}
82-
83-
/**
84-
* Used for loading the components (e.g. syntax) of this module.
85-
* @param addon The addon this module belongs to.
86-
* @param parentModule The parent module that created this child module.
87-
* @see #init(SkriptAddon, AddonModule)
88-
*/
89-
protected abstract void load(SkriptAddon addon, AddonModule parentModule);
90-
91-
@Override
92-
public boolean canLoad(SkriptAddon addon) {
93-
return canLoad(addon, parentModule);
94-
}
95-
96-
/**
97-
* Allow addons to specify whether they can load or not.
98-
* Called prior to {@link #init(SkriptAddon)}
99-
*
100-
* @param addon The addon this module belongs to.
101-
* @param parentModule The parent module that created this child module.
102-
* @return Whether this module can load.
103-
*/
104-
protected boolean canLoad(SkriptAddon addon, AddonModule parentModule) {
105-
return AddonModule.super.canLoad(addon);
64+
protected ChildAddonModule(AddonModule parentModule) {
65+
this.parentModule = parentModule;
10666
}
10767

10868
@Override
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.skriptlang.skript.bukkit;
2+
3+
import ch.njol.skript.Skript;
4+
import org.skriptlang.skript.addon.AddonModule;
5+
import org.skriptlang.skript.addon.SkriptAddon;
6+
import org.skriptlang.skript.bukkit.brewing.BrewingModule;
7+
import org.skriptlang.skript.bukkit.damagesource.DamageSourceModule;
8+
import org.skriptlang.skript.bukkit.entity.EntityModule;
9+
import org.skriptlang.skript.bukkit.fishing.FishingModule;
10+
import org.skriptlang.skript.bukkit.itemcomponents.ItemComponentModule;
11+
import org.skriptlang.skript.bukkit.potion.PotionModule;
12+
13+
import java.util.List;
14+
15+
public class BukkitModule implements AddonModule {
16+
17+
private final List<AddonModule> allSubmodules = List.of(
18+
new BrewingModule(this),
19+
new EntityModule(this),
20+
new DamageSourceModule(this),
21+
new ItemComponentModule(this),
22+
new PotionModule(this),
23+
new FishingModule(this)
24+
25+
);
26+
27+
private List<AddonModule> filteredSubmodules;
28+
29+
@Override
30+
public boolean canLoad(SkriptAddon addon) {
31+
if (!Skript.classExists("org.bukkit.Bukkit"))
32+
return false;
33+
filteredSubmodules = allSubmodules.stream()
34+
.filter(module -> module.canLoad(addon))
35+
.toList();
36+
return !filteredSubmodules.isEmpty();
37+
}
38+
39+
@Override
40+
public void init(SkriptAddon addon) {
41+
// initialize submodules
42+
for (AddonModule module : filteredSubmodules) {
43+
module.init(addon);
44+
}
45+
}
46+
47+
@Override
48+
public void load(SkriptAddon addon) {
49+
// load submodules
50+
for (AddonModule module : filteredSubmodules) {
51+
module.load(addon);
52+
}
53+
}
54+
55+
@Override
56+
public String name() {
57+
return "bukkit";
58+
}
59+
60+
}
Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,22 @@
11
package org.skriptlang.skript.bukkit.brewing;
22

33
import org.skriptlang.skript.addon.AddonModule;
4+
import org.skriptlang.skript.addon.ChildAddonModule;
45
import org.skriptlang.skript.addon.SkriptAddon;
5-
import org.skriptlang.skript.bukkit.brewing.elements.CondBrewingConsume;
6-
import org.skriptlang.skript.bukkit.brewing.elements.EffBrewingConsume;
7-
import org.skriptlang.skript.bukkit.brewing.elements.EvtBrewingComplete;
8-
import org.skriptlang.skript.bukkit.brewing.elements.EvtBrewingFuel;
9-
import org.skriptlang.skript.bukkit.brewing.elements.EvtBrewingStart;
10-
import org.skriptlang.skript.bukkit.brewing.elements.ExprBrewingFuelLevel;
11-
import org.skriptlang.skript.bukkit.brewing.elements.ExprBrewingResults;
12-
import org.skriptlang.skript.bukkit.brewing.elements.ExprBrewingSlot;
13-
import org.skriptlang.skript.bukkit.brewing.elements.ExprBrewingTime;
14-
import org.skriptlang.skript.registration.SyntaxRegistry;
15-
16-
import java.util.Arrays;
17-
import java.util.function.Consumer;
18-
19-
public class BrewingModule implements AddonModule {
6+
import org.skriptlang.skript.bukkit.brewing.elements.*;
207

21-
@Override
22-
public String name() {
23-
return "brewing";
8+
/**
9+
* Module containing brewing stand related elements.
10+
*/
11+
public class BrewingModule extends ChildAddonModule {
12+
13+
public BrewingModule(AddonModule parentModule) {
14+
super(parentModule);
2415
}
2516

2617
@Override
2718
public void load(SkriptAddon addon) {
28-
register(addon.syntaxRegistry(),
29-
19+
AddonModule.register(addon.syntaxRegistry(), origin(addon),
3020
CondBrewingConsume::register,
3121

3222
EffBrewingConsume::register,
@@ -42,8 +32,9 @@ public void load(SkriptAddon addon) {
4232
);
4333
}
4434

45-
private void register(SyntaxRegistry registry, Consumer<SyntaxRegistry>... consumers) {
46-
Arrays.stream(consumers).forEach(consumer -> consumer.accept(registry));
35+
@Override
36+
public String name() {
37+
return "brewing";
4738
}
4839

4940
}

src/main/java/org/skriptlang/skript/bukkit/brewing/elements/CondBrewingConsume.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package org.skriptlang.skript.bukkit.brewing.elements;
22

3-
import ch.njol.skript.doc.Description;
4-
import ch.njol.skript.doc.Events;
5-
import ch.njol.skript.doc.Example;
6-
import ch.njol.skript.doc.Name;
7-
import ch.njol.skript.doc.Since;
3+
import ch.njol.skript.doc.*;
84
import ch.njol.skript.lang.Condition;
95
import ch.njol.skript.lang.EventRestrictedSyntax;
106
import ch.njol.skript.lang.Expression;
@@ -14,6 +10,7 @@
1410
import org.bukkit.event.Event;
1511
import org.bukkit.event.inventory.BrewingStandFuelEvent;
1612
import org.jetbrains.annotations.Nullable;
13+
import org.skriptlang.skript.addon.AddonModule.ModuleOrigin;
1714
import org.skriptlang.skript.registration.SyntaxInfo;
1815
import org.skriptlang.skript.registration.SyntaxRegistry;
1916

@@ -31,7 +28,7 @@
3128
@Events("Brewing Fuel")
3229
public class CondBrewingConsume extends Condition implements EventRestrictedSyntax {
3330

34-
public static void register(SyntaxRegistry registry) {
31+
public static void register(SyntaxRegistry registry, ModuleOrigin origin) {
3532
registry.register(
3633
SyntaxRegistry.CONDITION,
3734
SyntaxInfo.builder(CondBrewingConsume.class)
@@ -40,6 +37,7 @@ public static void register(SyntaxRegistry registry) {
4037
"[the] brewing stand (will not|won't) consume [the] fuel"
4138
)
4239
.supplier(CondBrewingConsume::new)
40+
.origin(origin)
4341
.build()
4442
);
4543
}

src/main/java/org/skriptlang/skript/bukkit/brewing/elements/EffBrewingConsume.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package org.skriptlang.skript.bukkit.brewing.elements;
22

3-
import ch.njol.skript.doc.Description;
4-
import ch.njol.skript.doc.Events;
5-
import ch.njol.skript.doc.Example;
6-
import ch.njol.skript.doc.Name;
7-
import ch.njol.skript.doc.Since;
3+
import ch.njol.skript.doc.*;
84
import ch.njol.skript.lang.Effect;
95
import ch.njol.skript.lang.EventRestrictedSyntax;
106
import ch.njol.skript.lang.Expression;
@@ -14,6 +10,7 @@
1410
import org.bukkit.event.Event;
1511
import org.bukkit.event.inventory.BrewingStandFuelEvent;
1612
import org.jetbrains.annotations.Nullable;
13+
import org.skriptlang.skript.addon.AddonModule.ModuleOrigin;
1714
import org.skriptlang.skript.registration.SyntaxInfo;
1815
import org.skriptlang.skript.registration.SyntaxRegistry;
1916

@@ -30,7 +27,7 @@
3027
@Events("Brewing Fuel")
3128
public class EffBrewingConsume extends Effect implements EventRestrictedSyntax {
3229

33-
public static void register(SyntaxRegistry registry) {
30+
public static void register(SyntaxRegistry registry, ModuleOrigin origin) {
3431
registry.register(
3532
SyntaxRegistry.EFFECT,
3633
SyntaxInfo.builder(EffBrewingConsume.class)
@@ -39,6 +36,7 @@ public static void register(SyntaxRegistry registry) {
3936
"prevent [the] brewing stand from consuming [its|the] fuel"
4037
)
4138
.supplier(EffBrewingConsume::new)
39+
.origin(origin)
4240
.build()
4341
);
4442
}

0 commit comments

Comments
 (0)