Make contract for core specific listeners and commands

This commit is contained in:
Ben Woo 2024-09-15 09:40:23 +08:00
parent c3674e0a2f
commit a68b78e5a4
37 changed files with 57 additions and 51 deletions

View File

@ -18,7 +18,6 @@ import jakarta.inject.Provider;
import me.main__.util.SerializationConfig.SerializationConfig; import me.main__.util.SerializationConfig.SerializationConfig;
import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.java.JavaPluginLoader; import org.bukkit.plugin.java.JavaPluginLoader;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -27,13 +26,13 @@ import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.anchor.AnchorManager; import org.mvplugins.multiverse.core.anchor.AnchorManager;
import org.mvplugins.multiverse.core.api.Destination; import org.mvplugins.multiverse.core.api.Destination;
import org.mvplugins.multiverse.core.api.MVCore; import org.mvplugins.multiverse.core.api.MVCore;
import org.mvplugins.multiverse.core.commands.CoreCommand;
import org.mvplugins.multiverse.core.commandtools.MVCommandManager; import org.mvplugins.multiverse.core.commandtools.MVCommandManager;
import org.mvplugins.multiverse.core.commandtools.MultiverseCommand;
import org.mvplugins.multiverse.core.commandtools.PluginLocales; import org.mvplugins.multiverse.core.commandtools.PluginLocales;
import org.mvplugins.multiverse.core.config.MVCoreConfig; import org.mvplugins.multiverse.core.config.MVCoreConfig;
import org.mvplugins.multiverse.core.destination.DestinationsProvider; import org.mvplugins.multiverse.core.destination.DestinationsProvider;
import org.mvplugins.multiverse.core.economy.MVEconomist; import org.mvplugins.multiverse.core.economy.MVEconomist;
import org.mvplugins.multiverse.core.inject.InjectableListener; import org.mvplugins.multiverse.core.listeners.CoreListener;
import org.mvplugins.multiverse.core.inject.PluginServiceLocator; import org.mvplugins.multiverse.core.inject.PluginServiceLocator;
import org.mvplugins.multiverse.core.inject.PluginServiceLocatorFactory; import org.mvplugins.multiverse.core.inject.PluginServiceLocatorFactory;
import org.mvplugins.multiverse.core.placeholders.MultiverseCorePlaceholders; import org.mvplugins.multiverse.core.placeholders.MultiverseCorePlaceholders;
@ -197,7 +196,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
private void registerEvents() { private void registerEvents() {
var pluginManager = getServer().getPluginManager(); var pluginManager = getServer().getPluginManager();
Try.run(() -> serviceLocator.getAllServices(InjectableListener.class).forEach( Try.run(() -> serviceLocator.getAllServices(CoreListener.class).forEach(
listener -> pluginManager.registerEvents(listener, this))) listener -> pluginManager.registerEvents(listener, this)))
.onFailure(e -> { .onFailure(e -> {
throw new RuntimeException("Failed to register listeners. Terminating...", e); throw new RuntimeException("Failed to register listeners. Terminating...", e);
@ -209,7 +208,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
private void registerCommands() { private void registerCommands() {
Try.of(() -> commandManagerProvider.get()) Try.of(() -> commandManagerProvider.get())
.andThenTry(commandManager -> serviceLocator.getAllServices(MultiverseCommand.class) .andThenTry(commandManager -> serviceLocator.getAllServices(CoreCommand.class)
.forEach(commandManager::registerCommand)) .forEach(commandManager::registerCommand))
.onFailure(e -> { .onFailure(e -> {
Logging.severe("Failed to register commands"); Logging.severe("Failed to register commands");

View File

@ -20,7 +20,7 @@ import org.mvplugins.multiverse.core.utils.MVCorei18n;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class CheckCommand extends MultiverseCommand { class CheckCommand extends CoreCommand {
private final DestinationsProvider destinationsProvider; private final DestinationsProvider destinationsProvider;

View File

@ -24,7 +24,7 @@ import org.mvplugins.multiverse.core.world.options.CloneWorldOptions;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class CloneCommand extends MultiverseCommand { class CloneCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -20,7 +20,7 @@ import org.mvplugins.multiverse.core.exceptions.MultiverseException;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class ConfigCommand extends MultiverseCommand { class ConfigCommand extends CoreCommand {
private final MVCoreConfig config; private final MVCoreConfig config;

View File

@ -14,7 +14,7 @@ import org.mvplugins.multiverse.core.commandtools.MultiverseCommand;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class ConfirmCommand extends MultiverseCommand { class ConfirmCommand extends CoreCommand {
@Inject @Inject
ConfirmCommand(@NotNull MVCommandManager commandManager) { ConfirmCommand(@NotNull MVCommandManager commandManager) {

View File

@ -19,7 +19,7 @@ import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class CoordinatesCommand extends MultiverseCommand { class CoordinatesCommand extends CoreCommand {
private final LocationManipulation locationManipulation; private final LocationManipulation locationManipulation;

View File

@ -0,0 +1,13 @@
package org.mvplugins.multiverse.core.commands;
import org.jetbrains.annotations.NotNull;
import org.jvnet.hk2.annotations.Contract;
import org.mvplugins.multiverse.core.commandtools.MVCommandManager;
import org.mvplugins.multiverse.core.commandtools.MultiverseCommand;
@Contract
public abstract class CoreCommand extends MultiverseCommand {
protected CoreCommand(@NotNull MVCommandManager commandManager) {
super(commandManager);
}
}

View File

@ -30,7 +30,7 @@ import org.mvplugins.multiverse.core.world.options.CreateWorldOptions;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class CreateCommand extends MultiverseCommand { class CreateCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private GeneratorProvider generatorProvider; private GeneratorProvider generatorProvider;

View File

@ -19,7 +19,7 @@ import org.mvplugins.multiverse.core.utils.MVCorei18n;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class DebugCommand extends MultiverseCommand { class DebugCommand extends CoreCommand {
private final MVCoreConfig config; private final MVCoreConfig config;

View File

@ -31,7 +31,7 @@ import org.mvplugins.multiverse.core.world.helpers.PlayerWorldTeleporter;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class DeleteCommand extends MultiverseCommand { class DeleteCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final PlayerWorldTeleporter playerWorldTeleporter; private final PlayerWorldTeleporter playerWorldTeleporter;

View File

@ -42,7 +42,7 @@ import static org.mvplugins.multiverse.core.utils.file.FileUtils.getServerProper
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class DumpsCommand extends MultiverseCommand { class DumpsCommand extends CoreCommand {
private final MultiverseCore plugin; private final MultiverseCore plugin;
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -41,7 +41,7 @@ import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
@Subcommand("gamerule|rule|gamerules|rules") @Subcommand("gamerule|rule|gamerules|rules")
class GameruleCommand extends MultiverseCommand { class GameruleCommand extends CoreCommand {
private final CommandValueFlag<Integer> PAGE_FLAG = flag(CommandValueFlag private final CommandValueFlag<Integer> PAGE_FLAG = flag(CommandValueFlag
.builder("--page", Integer.class) .builder("--page", Integer.class)

View File

@ -35,7 +35,7 @@ import org.mvplugins.multiverse.core.world.generators.GeneratorProvider;
*/ */
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class GeneratorsCommand extends MultiverseCommand { class GeneratorsCommand extends CoreCommand {
private final GeneratorProvider generatorProvider; private final GeneratorProvider generatorProvider;

View File

@ -27,7 +27,7 @@ import org.mvplugins.multiverse.core.world.options.ImportWorldOptions;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class ImportCommand extends MultiverseCommand { class ImportCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -35,7 +35,7 @@ import org.mvplugins.multiverse.core.world.MultiverseWorld;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class InfoCommand extends MultiverseCommand { class InfoCommand extends CoreCommand {
private final CommandValueFlag<Integer> PAGE_FLAG = flag(CommandValueFlag private final CommandValueFlag<Integer> PAGE_FLAG = flag(CommandValueFlag
.builder("--page", Integer.class) .builder("--page", Integer.class)

View File

@ -36,7 +36,7 @@ import org.mvplugins.multiverse.core.world.entrycheck.WorldEntryCheckerProvider;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class ListCommand extends MultiverseCommand { class ListCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final WorldEntryCheckerProvider worldEntryCheckerProvider; private final WorldEntryCheckerProvider worldEntryCheckerProvider;

View File

@ -21,7 +21,7 @@ import org.mvplugins.multiverse.core.world.WorldManager;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class LoadCommand extends MultiverseCommand { class LoadCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -24,7 +24,7 @@ import org.mvplugins.multiverse.core.world.WorldManager;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class ModifyCommand extends MultiverseCommand { class ModifyCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -34,7 +34,7 @@ import org.mvplugins.multiverse.core.world.options.RegenWorldOptions;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class RegenCommand extends MultiverseCommand { class RegenCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final PlayerWorldTeleporter playerWorldTeleporter; private final PlayerWorldTeleporter playerWorldTeleporter;

View File

@ -23,7 +23,7 @@ import org.mvplugins.multiverse.core.world.WorldManager;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class ReloadCommand extends MultiverseCommand { class ReloadCommand extends CoreCommand {
private final MVCoreConfig config; private final MVCoreConfig config;
private final AnchorManager anchorManager; private final AnchorManager anchorManager;

View File

@ -29,7 +29,7 @@ import org.mvplugins.multiverse.core.world.helpers.PlayerWorldTeleporter;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class RemoveCommand extends MultiverseCommand { class RemoveCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final PlayerWorldTeleporter playerWorldTeleporter; private final PlayerWorldTeleporter playerWorldTeleporter;

View File

@ -14,7 +14,7 @@ import org.mvplugins.multiverse.core.commandtools.MultiverseCommand;
import org.mvplugins.multiverse.core.utils.MVCorei18n; import org.mvplugins.multiverse.core.utils.MVCorei18n;
@Service @Service
class RootCommand extends MultiverseCommand { class RootCommand extends CoreCommand {
private final Plugin plugin; private final Plugin plugin;

View File

@ -18,7 +18,7 @@ import org.mvplugins.multiverse.core.world.WorldManager;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
public class SetSpawnCommand extends MultiverseCommand { public class SetSpawnCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -19,7 +19,7 @@ import org.mvplugins.multiverse.core.world.WorldManager;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class SpawnCommand extends MultiverseCommand { class SpawnCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final AsyncSafetyTeleporter safetyTeleporter; private final AsyncSafetyTeleporter safetyTeleporter;

View File

@ -25,7 +25,7 @@ import org.mvplugins.multiverse.core.utils.MVCorei18n;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class TeleportCommand extends MultiverseCommand { class TeleportCommand extends CoreCommand {
private final CorePermissionsChecker permissionsChecker; private final CorePermissionsChecker permissionsChecker;
private final AsyncSafetyTeleporter safetyTeleporter; private final AsyncSafetyTeleporter safetyTeleporter;

View File

@ -28,7 +28,7 @@ import org.mvplugins.multiverse.core.world.options.UnloadWorldOptions;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class UnloadCommand extends MultiverseCommand { class UnloadCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;
private final PlayerWorldTeleporter playerWorldTeleporter; private final PlayerWorldTeleporter playerWorldTeleporter;

View File

@ -17,7 +17,7 @@ import org.mvplugins.multiverse.core.commandtools.MultiverseCommand;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class UsageCommand extends MultiverseCommand { class UsageCommand extends CoreCommand {
@Inject @Inject
UsageCommand(@NotNull MVCommandManager commandManager) { UsageCommand(@NotNull MVCommandManager commandManager) {

View File

@ -16,7 +16,7 @@ import org.mvplugins.multiverse.core.utils.MVCorei18n;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
class VersionCommand extends MultiverseCommand { class VersionCommand extends CoreCommand {
private final MultiverseCore plugin; private final MultiverseCore plugin;

View File

@ -37,7 +37,7 @@ import java.util.stream.Collectors;
@Service @Service
@CommandAlias("mv") @CommandAlias("mv")
public class WhoCommand extends MultiverseCommand { public class WhoCommand extends CoreCommand {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -1,7 +0,0 @@
package org.mvplugins.multiverse.core.inject;
import org.bukkit.event.Listener;
import org.jvnet.hk2.annotations.Contract;
@Contract
public interface InjectableListener extends Listener { }

View File

@ -0,0 +1,7 @@
package org.mvplugins.multiverse.core.listeners;
import org.bukkit.event.Listener;
import org.jvnet.hk2.annotations.Contract;
@Contract
public interface CoreListener extends Listener { }

View File

@ -7,14 +7,13 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.config.MVCoreConfig; import org.mvplugins.multiverse.core.config.MVCoreConfig;
import org.mvplugins.multiverse.core.inject.InjectableListener;
import org.mvplugins.multiverse.core.world.WorldManager; import org.mvplugins.multiverse.core.world.WorldManager;
/** /**
* Multiverse's Listener for players. * Multiverse's Listener for players.
*/ */
@Service @Service
public class MVChatListener implements InjectableListener { public class MVChatListener implements CoreListener {
private final MVCoreConfig config; private final MVCoreConfig config;
private final WorldManager worldManager; private final WorldManager worldManager;
private final MVPlayerListener playerListener; private final MVPlayerListener playerListener;

View File

@ -20,7 +20,6 @@ import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.inject.InjectableListener;
import org.mvplugins.multiverse.core.world.WorldManager; import org.mvplugins.multiverse.core.world.WorldManager;
import org.mvplugins.multiverse.core.world.WorldPurger; import org.mvplugins.multiverse.core.world.WorldPurger;
@ -28,7 +27,7 @@ import org.mvplugins.multiverse.core.world.WorldPurger;
* Multiverse's Entity {@link Listener}. * Multiverse's Entity {@link Listener}.
*/ */
@Service @Service
public class MVEntityListener implements InjectableListener { public class MVEntityListener implements CoreListener {
private final WorldManager worldManager; private final WorldManager worldManager;
private final WorldPurger worldPurger; private final WorldPurger worldPurger;

View File

@ -40,7 +40,6 @@ import org.mvplugins.multiverse.core.destination.DestinationsProvider;
import org.mvplugins.multiverse.core.destination.ParsedDestination; import org.mvplugins.multiverse.core.destination.ParsedDestination;
import org.mvplugins.multiverse.core.economy.MVEconomist; import org.mvplugins.multiverse.core.economy.MVEconomist;
import org.mvplugins.multiverse.core.event.MVRespawnEvent; import org.mvplugins.multiverse.core.event.MVRespawnEvent;
import org.mvplugins.multiverse.core.inject.InjectableListener;
import org.mvplugins.multiverse.core.teleportation.AsyncSafetyTeleporter; import org.mvplugins.multiverse.core.teleportation.AsyncSafetyTeleporter;
import org.mvplugins.multiverse.core.teleportation.TeleportQueue; import org.mvplugins.multiverse.core.teleportation.TeleportQueue;
import org.mvplugins.multiverse.core.utils.result.ResultChain; import org.mvplugins.multiverse.core.utils.result.ResultChain;
@ -54,7 +53,7 @@ import org.mvplugins.multiverse.core.world.helpers.EnforcementHandler;
* Multiverse's Listener for players. * Multiverse's Listener for players.
*/ */
@Service @Service
public class MVPlayerListener implements InjectableListener { public class MVPlayerListener implements CoreListener {
private final Plugin plugin; private final Plugin plugin;
private final MVCoreConfig config; private final MVCoreConfig config;
private final Provider<WorldManager> worldManagerProvider; private final Provider<WorldManager> worldManagerProvider;

View File

@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.config.MVCoreConfig; import org.mvplugins.multiverse.core.config.MVCoreConfig;
import org.mvplugins.multiverse.core.inject.InjectableListener;
import org.mvplugins.multiverse.core.world.WorldManager; import org.mvplugins.multiverse.core.world.WorldManager;
import static org.bukkit.PortalType.CUSTOM; import static org.bukkit.PortalType.CUSTOM;
@ -30,7 +29,7 @@ import static org.bukkit.PortalType.CUSTOM;
* A custom listener for portal related events. * A custom listener for portal related events.
*/ */
@Service @Service
public class MVPortalListener implements InjectableListener { public class MVPortalListener implements CoreListener {
private final MVCoreConfig config; private final MVCoreConfig config;
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -14,14 +14,13 @@ import org.bukkit.event.weather.ThunderChangeEvent;
import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.event.weather.WeatherChangeEvent;
import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.inject.InjectableListener;
import org.mvplugins.multiverse.core.world.WorldManager; import org.mvplugins.multiverse.core.world.WorldManager;
/** /**
* Multiverse's Weather Listener. * Multiverse's Weather Listener.
*/ */
@Service @Service
public class MVWeatherListener implements InjectableListener { public class MVWeatherListener implements CoreListener {
private final WorldManager worldManager; private final WorldManager worldManager;

View File

@ -15,7 +15,6 @@ import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.event.world.WorldUnloadEvent;
import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Service;
import org.mvplugins.multiverse.core.inject.InjectableListener;
import org.mvplugins.multiverse.core.world.WorldManager; import org.mvplugins.multiverse.core.world.WorldManager;
import org.mvplugins.multiverse.core.world.options.UnloadWorldOptions; import org.mvplugins.multiverse.core.world.options.UnloadWorldOptions;
import org.mvplugins.multiverse.core.world.reasons.LoadFailureReason; import org.mvplugins.multiverse.core.world.reasons.LoadFailureReason;
@ -25,7 +24,7 @@ import org.mvplugins.multiverse.core.world.reasons.UnloadFailureReason;
* Multiverse's World Listener. * Multiverse's World Listener.
*/ */
@Service @Service
public class MVWorldListener implements InjectableListener { public class MVWorldListener implements CoreListener {
private final WorldManager worldManager; private final WorldManager worldManager;