Skip to content

Commit 18da18c

Browse files
committed
Experiment module container
1 parent 77775f3 commit 18da18c

90 files changed

Lines changed: 545 additions & 427 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/me/alexdevs/solstice/api/ServerLocation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package me.alexdevs.solstice.api;
22

33
import com.google.common.collect.ImmutableList;
4-
import me.alexdevs.solstice.modules.ModuleProvider;
4+
import me.alexdevs.solstice.modules.ModModuleProvider;
55
import me.alexdevs.solstice.api.utils.SolsticeIdentifier;
66
import net.minecraft.core.BlockPos;
77
import net.minecraft.core.Vec3i;
@@ -75,7 +75,7 @@ public int hashCode() {
7575
public void teleport(ServerPlayer player, boolean setBackPosition) {
7676
if (setBackPosition) {
7777
var currentPosition = new ServerLocation(player);
78-
ModuleProvider.BACK.setPlayerLastLocation(player.getUUID(), currentPosition);
78+
ModModuleProvider.BACK.get().setPlayerLastLocation(player.getUUID(), currentPosition);
7979
}
8080

8181
var serverWorld = getWorld(player.getServer());

src/main/java/me/alexdevs/solstice/api/module/ModuleBase.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010

1111
public abstract class ModuleBase implements Comparable<ModuleBase> {
1212
protected final SolsticeIdentifier id;
13+
protected final ModuleProperties properties;
1314
protected final List<ModCommand<?>> commands = new ArrayList<>();
1415
protected Class<?> configClass = null;
1516
protected Class<?> playerDataClass = null;
1617
protected Class<?> serverDataClass = null;
1718

18-
public ModuleBase(SolsticeIdentifier id) {
19-
this.id = id;
19+
public ModuleBase(ModuleProperties properties) {
20+
this.properties = properties;
21+
this.id = properties.id();
2022
}
2123

2224
/**
@@ -87,14 +89,4 @@ public int hashCode() {
8789
public int compareTo(ModuleBase o) {
8890
return id.compareTo(o.id);
8991
}
90-
91-
public static abstract class Toggleable extends ModuleBase {
92-
public Toggleable(SolsticeIdentifier id) {
93-
super(id);
94-
}
95-
96-
public boolean isEnabled() {
97-
return ToggleableConfig.get().isEnabled(this.id.toString());
98-
}
99-
}
10092
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package me.alexdevs.solstice.api.module;
2+
3+
import me.alexdevs.solstice.api.utils.SolsticeIdentifier;
4+
5+
import java.util.function.Function;
6+
7+
public class ModuleContainer<T extends ModuleBase> {
8+
private final SolsticeIdentifier id;
9+
private final Function<ModuleProperties, T> module;
10+
private final ModuleProperties properties;
11+
12+
private T instance = null;
13+
14+
public ModuleContainer(SolsticeIdentifier id, Function<ModuleProperties, T> module, ModuleProperties properties) {
15+
this.id = id;
16+
this.module = module;
17+
this.properties = properties;
18+
19+
properties.withId(id);
20+
}
21+
22+
public ModuleContainer(SolsticeIdentifier id, Function<ModuleProperties, T> module) {
23+
this(id, module, new ModuleProperties());
24+
}
25+
26+
public SolsticeIdentifier id() {
27+
return id;
28+
}
29+
30+
public T get() {
31+
if (instance == null) instance = module.apply(properties);
32+
return instance;
33+
}
34+
35+
public ModuleProperties properties() {
36+
return properties;
37+
}
38+
}

src/main/java/me/alexdevs/solstice/api/module/ModuleEntrypoint.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@
33
import java.util.HashSet;
44

55
/**
6-
* Modules provider for Solstice.
6+
* Module provider for Solstice.
77
*
88
* <p>In {@code fabric.mod.json}, the entrypoint is defined with {@code solstice} key.</p>
99
*
1010
* Provide a set of {@code ModuleBase} modules to register.
1111
*
1212
* @see ModuleBase
13+
* @see ModuleContainer
1314
*/
1415

1516
@FunctionalInterface
1617
public interface ModuleEntrypoint {
17-
HashSet<ModuleBase> register();
18+
HashSet<ModuleContainer<?>> register();
1819
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package me.alexdevs.solstice.api.module;
2+
3+
import me.alexdevs.solstice.api.utils.SolsticeIdentifier;
4+
5+
public class ModuleProperties {
6+
private SolsticeIdentifier id = null;
7+
private boolean enabled = true;
8+
private boolean toggleable = true;
9+
10+
public ModuleProperties() {
11+
}
12+
13+
public ModuleProperties withId(SolsticeIdentifier id) {
14+
this.id = id;
15+
return this;
16+
}
17+
18+
public SolsticeIdentifier id() {
19+
return id;
20+
}
21+
22+
public ModuleProperties enabled(boolean enabled) {
23+
this.enabled = enabled;
24+
return this;
25+
}
26+
27+
public boolean isEnabled() {
28+
return !toggleable || enabled;
29+
}
30+
31+
public ModuleProperties toggleable(boolean toggleable) {
32+
this.toggleable = toggleable;
33+
return this;
34+
}
35+
36+
public boolean isToggleable() {
37+
return toggleable;
38+
}
39+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package me.alexdevs.solstice.api.module;
2+
3+
import me.alexdevs.solstice.api.utils.SolsticeIdentifier;
4+
5+
import java.util.HashSet;
6+
import java.util.function.Function;
7+
8+
public class ModuleRegistry {
9+
protected final SolsticeIdentifier id;
10+
protected final HashSet<ModuleContainer<?>> modules = new HashSet<>();
11+
12+
public ModuleRegistry(String namespace) {
13+
this.id = SolsticeIdentifier.of(namespace, "");
14+
}
15+
16+
public <T extends ModuleBase> ModuleContainer<T> register(String path, Function<ModuleProperties, T> module, ModuleProperties properties) {
17+
ModuleContainer<T> container = new ModuleContainer<>(this.id.withPath(path), module);
18+
modules.add(container);
19+
return container;
20+
}
21+
22+
public <T extends ModuleBase> ModuleContainer<T> register(String path, Function<ModuleProperties, T> module) {
23+
return register(path, module, new ModuleProperties());
24+
}
25+
26+
public HashSet<ModuleContainer<?>> getModules() {
27+
return modules;
28+
}
29+
}

src/main/java/me/alexdevs/solstice/api/text/Components.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import eu.pb4.placeholders.api.parsers.NodeParser;
77
import me.alexdevs.solstice.Solstice;
88
import me.alexdevs.solstice.api.text.parser.MarkdownParser;
9-
import me.alexdevs.solstice.modules.ModuleProvider;
9+
import me.alexdevs.solstice.modules.ModModuleProvider;
1010
import me.alexdevs.solstice.modules.styling.StylingModule;
1111
import me.alexdevs.solstice.modules.styling.data.StylingConfig;
1212
import me.lucko.fabric.api.permissions.v0.Permissions;
@@ -66,7 +66,7 @@ public static Component chat(PlayerChatMessage message, ServerPlayer player) {
6666
set.add(TextCapabilities.LEGACY);
6767
}
6868

69-
if (ModuleProvider.STYLING.isEnabled()) {
69+
if (ModModuleProvider.STYLING.isEnabled()) {
7070
var config = Solstice.configManager.getData(StylingConfig.class);
7171
if (config.enableMarkdown) {
7272
set.add(TextCapabilities.MARKDOWN);
@@ -89,7 +89,7 @@ public static Component chat(String message, ServerPlayer player) {
8989
set.add(TextCapabilities.LEGACY);
9090
}
9191

92-
if (ModuleProvider.STYLING.isEnabled()) {
92+
if (ModModuleProvider.STYLING.isEnabled()) {
9393
var config = Solstice.configManager.getData(StylingConfig.class);
9494
if (config.enableMarkdown) {
9595
set.add(TextCapabilities.MARKDOWN);
@@ -106,7 +106,7 @@ public static Component chat(String message, EnumSet<TextCapabilities> capabilit
106106

107107
var placeholders = new HashMap<String, Component>();
108108
var context = PlaceholderContext.of(source);
109-
if (ModuleProvider.STYLING.isEnabled()) {
109+
if (ModModuleProvider.STYLING.isEnabled()) {
110110
var config = Solstice.configManager.getData(StylingConfig.class);
111111
for (var repl : config.replacements.entrySet()) {
112112
if (message.contains(repl.getKey())) {

src/main/java/me/alexdevs/solstice/core/Modules.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.mojang.brigadier.CommandDispatcher;
44
import me.alexdevs.solstice.Solstice;
55
import me.alexdevs.solstice.api.module.ModuleBase;
6+
import me.alexdevs.solstice.api.module.ModuleContainer;
67
import me.alexdevs.solstice.api.module.ModuleEntrypoint;
8+
import me.alexdevs.solstice.api.module.ModuleProperties;
79
import me.alexdevs.solstice.core.coreModule.CoreModule;
810
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
911
import net.fabricmc.loader.api.FabricLoader;
@@ -17,14 +19,14 @@
1719

1820
public class Modules {
1921

20-
private final HashSet<ModuleBase> modules = new HashSet<>();
22+
private final HashSet<ModuleContainer<?>> modules = new HashSet<>();
2123

2224
public Modules() {
2325
CommandRegistrationCallback.EVENT.register(this::registerCommands);
2426
}
2527

2628
public void register() {
27-
modules.add(new CoreModule(Solstice.ID.withPath("core")));
29+
modules.add(new ModuleContainer<>(Solstice.ID.withPath("core"), CoreModule::new, new ModuleProperties().toggleable(false)));
2830

2931
var fabric = FabricLoader.getInstance();
3032
var moduleContainers = fabric.getEntrypointContainers("solstice", ModuleEntrypoint.class);
@@ -36,9 +38,9 @@ public void register() {
3638
var provider = container.getEntrypoint();
3739
var providerModules = provider.register();
3840
for (var entry : providerModules) {
39-
var moduleId = entry.getId();
40-
if (modules.stream().anyMatch(m -> m.getId().equals(moduleId))) {
41-
Solstice.LOGGER.warn("Module ID conflict: {}", entry.getId());
41+
var moduleId = entry.id();
42+
if (modules.stream().anyMatch(m -> m.id().equals(moduleId))) {
43+
Solstice.LOGGER.warn("Module ID conflict: {}", entry.id());
4244
continue;
4345
}
4446

@@ -50,7 +52,7 @@ public void register() {
5052
}
5153
}
5254

53-
public Collection<? extends ModuleBase> getModules() {
55+
public Collection<ModuleContainer<? extends ModuleBase>> getModules() {
5456
return Collections.unmodifiableSet(modules);
5557
}
5658

src/main/java/me/alexdevs/solstice/core/coreModule/CoreModule.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import me.alexdevs.solstice.api.events.SolsticeEvents;
66
import me.alexdevs.solstice.api.events.WorldSaveCallback;
77
import me.alexdevs.solstice.api.module.ModuleBase;
8+
import me.alexdevs.solstice.api.module.ModuleProperties;
89
import me.alexdevs.solstice.api.utils.PlayerUtils;
910
import me.alexdevs.solstice.core.coreModule.commands.PingCommand;
1011
import me.alexdevs.solstice.core.coreModule.commands.ServerStatCommand;
@@ -22,8 +23,8 @@
2223
import java.util.concurrent.TimeUnit;
2324

2425
public class CoreModule extends ModuleBase {
25-
public CoreModule(SolsticeIdentifier id) {
26-
super(id);
26+
public CoreModule(ModuleProperties properties) {
27+
super(properties);
2728
}
2829

2930
@Override
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package me.alexdevs.solstice.mixin.modules.afk;
22

3-
import me.alexdevs.solstice.Solstice;
4-
import me.alexdevs.solstice.modules.ModuleProvider;
5-
import me.alexdevs.solstice.modules.afk.AfkModule;
3+
import me.alexdevs.solstice.modules.ModModuleProvider;
64
import net.minecraft.server.level.ServerPlayer;
75
import net.minecraft.server.players.SleepStatus;
86
import org.spongepowered.asm.mixin.Mixin;
@@ -13,6 +11,6 @@
1311
public abstract class FixPlayerSleepPercentageMixin {
1412
@Redirect(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;isSpectator()Z"))
1513
public boolean solstice$fixTotalPlayers(ServerPlayer player) {
16-
return player.isSpectator() || ModuleProvider.AFK.isPlayerAfk(player);
14+
return player.isSpectator() || ModModuleProvider.AFK.isPlayerAfk(player);
1715
}
1816
}

0 commit comments

Comments
 (0)