Set up DI for primary dependencies of MultiverseCore.

This commit is contained in:
Jeremy Wood 2023-03-07 14:39:11 -05:00
parent 6a434746c9
commit 0db90dc0b9
No known key found for this signature in database
GPG Key ID: C5BAD04C77B91B4B
26 changed files with 309 additions and 118 deletions

View File

@ -42,7 +42,6 @@ import com.onarandombox.MultiverseCore.commands.RemoveCommand;
import com.onarandombox.MultiverseCore.commands.TeleportCommand; import com.onarandombox.MultiverseCore.commands.TeleportCommand;
import com.onarandombox.MultiverseCore.commands.UnloadCommand; import com.onarandombox.MultiverseCore.commands.UnloadCommand;
import com.onarandombox.MultiverseCore.commandtools.MVCommandManager; import com.onarandombox.MultiverseCore.commandtools.MVCommandManager;
import com.onarandombox.MultiverseCore.commandtools.MultiverseCommand;
import com.onarandombox.MultiverseCore.destination.DestinationsProvider; import com.onarandombox.MultiverseCore.destination.DestinationsProvider;
import com.onarandombox.MultiverseCore.destination.core.AnchorDestination; import com.onarandombox.MultiverseCore.destination.core.AnchorDestination;
import com.onarandombox.MultiverseCore.destination.core.BedDestination; import com.onarandombox.MultiverseCore.destination.core.BedDestination;
@ -60,15 +59,13 @@ import com.onarandombox.MultiverseCore.listeners.MVPortalListener;
import com.onarandombox.MultiverseCore.listeners.MVWeatherListener; import com.onarandombox.MultiverseCore.listeners.MVWeatherListener;
import com.onarandombox.MultiverseCore.listeners.MVWorldInitListener; import com.onarandombox.MultiverseCore.listeners.MVWorldInitListener;
import com.onarandombox.MultiverseCore.listeners.MVWorldListener; import com.onarandombox.MultiverseCore.listeners.MVWorldListener;
import com.onarandombox.MultiverseCore.teleportation.SimpleBlockSafety;
import com.onarandombox.MultiverseCore.teleportation.SimpleLocationManipulation;
import com.onarandombox.MultiverseCore.teleportation.SimpleSafeTTeleporter;
import com.onarandombox.MultiverseCore.utils.MVPermissions; import com.onarandombox.MultiverseCore.utils.MVPermissions;
import com.onarandombox.MultiverseCore.utils.TestingMode; import com.onarandombox.MultiverseCore.utils.TestingMode;
import com.onarandombox.MultiverseCore.utils.UnsafeCallWrapper; import com.onarandombox.MultiverseCore.utils.UnsafeCallWrapper;
import com.onarandombox.MultiverseCore.utils.metrics.MetricsConfigurator; import com.onarandombox.MultiverseCore.utils.metrics.MetricsConfigurator;
import com.onarandombox.MultiverseCore.world.SimpleMVWorldManager;
import com.onarandombox.MultiverseCore.world.WorldProperties; import com.onarandombox.MultiverseCore.world.WorldProperties;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import me.main__.util.SerializationConfig.SerializationConfig; import me.main__.util.SerializationConfig.SerializationConfig;
import org.bukkit.configuration.Configuration; import org.bukkit.configuration.Configuration;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
@ -92,30 +89,31 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
// Setup various managers // Setup various managers
private ServiceLocator serviceLocator; private ServiceLocator serviceLocator;
private final AnchorManager anchorManager = new AnchorManager(this); @Inject
private BlockSafety blockSafety = new SimpleBlockSafety(this); private Provider<AnchorManager> anchorManager;
private MVCommandManager commandManager; @Inject
private DestinationsProvider destinationsProvider; private Provider<BlockSafety> blockSafety;
private MVEconomist economist; @Inject
private LocationManipulation locationManipulation = new SimpleLocationManipulation(); private Provider<MVCommandManager> commandManager;
private final MVPermissions mvPermissions = new MVPermissions(this); @Inject
private SafeTTeleporter safeTTeleporter = new SimpleSafeTTeleporter(this); private Provider<DestinationsProvider> destinationsProvider;
private final UnsafeCallWrapper unsafeCallWrapper = new UnsafeCallWrapper(this); @Inject
private final MVWorldManager worldManager = new SimpleMVWorldManager(this); private Provider<MVEconomist> economist;
@Inject
private Provider<LocationManipulation> locationManipulation;
@Inject
private Provider<MVPermissions> mvPermissions;
@Inject
private Provider<SafeTTeleporter> safeTTeleporter;
@Inject
private Provider<UnsafeCallWrapper> unsafeCallWrapper;
@Inject
private Provider<MVWorldManager> worldManager;
// Configurations // Configurations
private FileConfiguration multiverseConfig; private FileConfiguration multiverseConfig;
private volatile MultiverseCoreConfiguration config; private volatile MultiverseCoreConfiguration config;
// Listeners
private MVChatListener chatListener;
private final MVEntityListener entityListener = new MVEntityListener(this);
private final MVPlayerListener playerListener = new MVPlayerListener(this);
private final MVPortalListener portalListener = new MVPortalListener(this);
private final MVWeatherListener weatherListener = new MVWeatherListener(this);
private final MVWorldListener worldListener = new MVWorldListener(this);
private final MVWorldInitListener worldInitListener = new MVWorldInitListener(this);
// Counter for the number of plugins that have registered with us // Counter for the number of plugins that have registered with us
private int pluginCount; private int pluginCount;
@ -158,22 +156,25 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
Logging.setShowingConfig(!getMVConfig().getSilentStart()); Logging.setShowingConfig(!getMVConfig().getSilentStart());
this.worldManager.getDefaultWorldGenerators(); var worldManager = getMVWorldManager();
this.worldManager.loadDefaultWorlds();
this.worldManager.loadWorlds(true); worldManager.getDefaultWorldGenerators();
worldManager.loadDefaultWorlds();
worldManager.loadWorlds(true);
// Now set the firstspawnworld (after the worlds are loaded): // Now set the firstspawnworld (after the worlds are loaded):
this.worldManager.setFirstSpawnWorld(getMVConfig().getFirstSpawnWorld()); worldManager.setFirstSpawnWorld(getMVConfig().getFirstSpawnWorld());
MVWorld firstSpawnWorld = this.worldManager.getFirstSpawnWorld(); MVWorld firstSpawnWorld = worldManager.getFirstSpawnWorld();
if (firstSpawnWorld != null) { if (firstSpawnWorld != null) {
getMVConfig().setFirstSpawnWorld(firstSpawnWorld.getName()); getMVConfig().setFirstSpawnWorld(firstSpawnWorld.getName());
} }
//Setup economy here so vault is loaded //Setup economy here so vault is loaded
this.economist = new MVEconomist(this); // TODO we may need to change MVEconomist to have an enable method or something
// this.economist = new MVEconomist(this);
// Init all the other stuff // Init all the other stuff
this.anchorManager.loadAnchors(); getAnchorManager().loadAnchors();
this.registerEvents(); this.registerEvents();
this.registerCommands(); this.registerCommands();
this.setUpLocales(); this.setUpLocales();
@ -198,7 +199,6 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
.andThenTry(locator -> { .andThenTry(locator -> {
PluginInjection.enable(this, locator); PluginInjection.enable(this, locator);
}) })
.andThen(this::saveLegacyVars)
.getOrElseThrow(exception -> { .getOrElseThrow(exception -> {
Logging.severe("Failed to initialize dependency injection"); Logging.severe("Failed to initialize dependency injection");
getServer().getPluginManager().disablePlugin(this); getServer().getPluginManager().disablePlugin(this);
@ -206,10 +206,6 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
}); });
} }
private void saveLegacyVars(ServiceLocator locator) {
// TODO set up existing things e.g. worldManager = locator.getService(MVWorldManager.class);
}
private void shutdownDependencyInjection() { private void shutdownDependencyInjection() {
if (serviceLocator != null) { if (serviceLocator != null) {
PluginInjection.disable(this, serviceLocator); PluginInjection.disable(this, serviceLocator);
@ -221,58 +217,63 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
* Function to Register all the Events needed. * Function to Register all the Events needed.
*/ */
private void registerEvents() { private void registerEvents() {
// TODO add automatic listener registration through hk2
PluginManager pluginManager = getServer().getPluginManager(); PluginManager pluginManager = getServer().getPluginManager();
this.chatListener = new MVChatListener(this, this.playerListener); pluginManager.registerEvents(getService(MVEntityListener.class), this);
pluginManager.registerEvents(this.chatListener, this); pluginManager.registerEvents(getService(MVPlayerListener.class), this);
pluginManager.registerEvents(this.entityListener, this); pluginManager.registerEvents(getService(MVChatListener.class), this);
pluginManager.registerEvents(this.playerListener, this); pluginManager.registerEvents(getService(MVPortalListener.class), this);
pluginManager.registerEvents(this.portalListener, this); pluginManager.registerEvents(getService(MVWeatherListener.class), this);
pluginManager.registerEvents(this.weatherListener, this); pluginManager.registerEvents(getService(MVWorldListener.class), this);
pluginManager.registerEvents(this.worldListener, this); pluginManager.registerEvents(getService(MVWorldInitListener.class), this);
pluginManager.registerEvents(this.worldInitListener, this);
} }
/** /**
* Register Multiverse-Core commands to Command Manager. * Register Multiverse-Core commands to Command Manager.
*/ */
private void registerCommands() { private void registerCommands() {
this.commandManager = new MVCommandManager(this); var commandManager = getMVCommandManager();
this.commandManager.registerCommand(new CheckCommand(this));
this.commandManager.registerCommand(new CloneCommand(this)); commandManager = new MVCommandManager(this);
this.commandManager.registerCommand(new ConfirmCommand(this)); commandManager.registerCommand(new CheckCommand(this));
this.commandManager.registerCommand(new CreateCommand(this)); commandManager.registerCommand(new CloneCommand(this));
this.commandManager.registerCommand(new DebugCommand(this)); commandManager.registerCommand(new ConfirmCommand(this));
this.commandManager.registerCommand(new DeleteCommand(this)); commandManager.registerCommand(new CreateCommand(this));
this.commandManager.registerCommand(new ImportCommand(this)); commandManager.registerCommand(new DebugCommand(this));
this.commandManager.registerCommand(new GameruleCommand(this)); commandManager.registerCommand(new DeleteCommand(this));
this.commandManager.registerCommand(new LoadCommand(this)); commandManager.registerCommand(new ImportCommand(this));
this.commandManager.registerCommand(new RegenCommand(this)); commandManager.registerCommand(new GameruleCommand(this));
this.commandManager.registerCommand(new ReloadCommand(this)); commandManager.registerCommand(new LoadCommand(this));
this.commandManager.registerCommand(new RemoveCommand(this)); commandManager.registerCommand(new RegenCommand(this));
this.commandManager.registerCommand(new TeleportCommand(this)); commandManager.registerCommand(new ReloadCommand(this));
this.commandManager.registerCommand(new UnloadCommand(this)); commandManager.registerCommand(new RemoveCommand(this));
commandManager.registerCommand(new TeleportCommand(this));
commandManager.registerCommand(new UnloadCommand(this));
} }
/** /**
* Register locales * Register locales
*/ */
private void setUpLocales() { private void setUpLocales() {
this.commandManager.usePerIssuerLocale(true, true); var commandManager = getMVCommandManager();
this.commandManager.getLocales().addFileResClassLoader(this);
this.commandManager.getLocales().addMessageBundles("multiverse-core"); commandManager.usePerIssuerLocale(true, true);
commandManager.getLocales().addFileResClassLoader(this);
commandManager.getLocales().addMessageBundles("multiverse-core");
} }
/** /**
* Register all the destinations. * Register all the destinations.
*/ */
private void registerDestinations() { private void registerDestinations() {
this.destinationsProvider = new DestinationsProvider(this); var destinationsProvider = getDestinationsProvider();
this.destinationsProvider.registerDestination(new AnchorDestination(this));
this.destinationsProvider.registerDestination(new BedDestination()); destinationsProvider.registerDestination(new AnchorDestination(this));
this.destinationsProvider.registerDestination(new CannonDestination(this)); destinationsProvider.registerDestination(new BedDestination());
this.destinationsProvider.registerDestination(new ExactDestination(this)); destinationsProvider.registerDestination(new CannonDestination(this));
this.destinationsProvider.registerDestination(new PlayerDestination()); destinationsProvider.registerDestination(new ExactDestination(this));
this.destinationsProvider.registerDestination(new WorldDestination(this)); destinationsProvider.registerDestination(new PlayerDestination());
destinationsProvider.registerDestination(new WorldDestination(this));
} }
/** /**
@ -316,7 +317,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
* {@inheritDoc} * {@inheritDoc}
*/ */
public MVEconomist getEconomist() { public MVEconomist getEconomist() {
return economist; return economist.get();
} }
/** /**
@ -324,7 +325,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public MVPermissions getMVPerms() { public MVPermissions getMVPerms() {
return this.mvPermissions; return this.mvPermissions.get();
} }
/** /**
@ -356,7 +357,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public MVCommandManager getMVCommandManager() { public MVCommandManager getMVCommandManager() {
return this.commandManager; return this.commandManager.get();
} }
/** /**
@ -388,7 +389,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public DestinationsProvider getDestinationsProvider() { public DestinationsProvider getDestinationsProvider() {
return this.destinationsProvider; return this.destinationsProvider.get();
} }
/** /**
@ -396,7 +397,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public MVWorldManager getMVWorldManager() { public MVWorldManager getMVWorldManager() {
return this.worldManager; return this.worldManager.get();
} }
@ -430,7 +431,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
} finally { } finally {
config = ((wantedConfig == null) ? new MultiverseCoreConfiguration() : wantedConfig); config = ((wantedConfig == null) ? new MultiverseCoreConfiguration() : wantedConfig);
} }
this.worldManager.loadWorldConfig(new File(getDataFolder(), "worlds.yml")); getMVWorldManager().loadWorldConfig(new File(getDataFolder(), "worlds.yml"));
int level = Logging.getDebugLevel(); int level = Logging.getDebugLevel();
Logging.setDebugLevel(getMVConfig().getGlobalDebug()); Logging.setDebugLevel(getMVConfig().getGlobalDebug());
@ -459,7 +460,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public boolean saveAllConfigs() { public boolean saveAllConfigs() {
return this.saveMVConfig() && this.worldManager.saveWorldsConfig(); return this.saveMVConfig() && getMVWorldManager().saveWorldsConfig();
} }
/** /**
@ -467,7 +468,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public AnchorManager getAnchorManager() { public AnchorManager getAnchorManager() {
return this.anchorManager; return this.anchorManager.get();
} }
/** /**
@ -475,57 +476,51 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public BlockSafety getBlockSafety() { public BlockSafety getBlockSafety() {
return blockSafety; return blockSafety.get();
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
*
* @deprecated Use dependency injection instead.
*/ */
@Override @Override
public void setBlockSafety(BlockSafety blockSafety) { @Deprecated
if (blockSafety == null) { public void setBlockSafety(BlockSafety blockSafety) {}
throw new NullPointerException("block safety may not be null.");
}
this.blockSafety = blockSafety;
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
public LocationManipulation getLocationManipulation() { public LocationManipulation getLocationManipulation() {
return locationManipulation; return locationManipulation.get();
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
*
* @deprecated Use dependency injection instead.
*/ */
@Override @Override
public void setLocationManipulation(LocationManipulation locationManipulation) { @Deprecated
if (locationManipulation == null) { public void setLocationManipulation(LocationManipulation locationManipulation) {}
throw new NullPointerException("location manipulation may not be null.");
}
this.locationManipulation = locationManipulation;
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
public SafeTTeleporter getSafeTTeleporter() { public SafeTTeleporter getSafeTTeleporter() {
return safeTTeleporter; return safeTTeleporter.get();
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
*
* @deprecated Use dependency injection instead.
*/ */
@Override @Override
public void setSafeTTeleporter(SafeTTeleporter safeTTeleporter) { @Deprecated
if (safeTTeleporter == null) { public void setSafeTTeleporter(SafeTTeleporter safeTTeleporter) {}
throw new NullPointerException("safeTTeleporter may not be null.");
}
this.safeTTeleporter = safeTTeleporter;
}
/** /**
* {@inheritDoc} * {@inheritDoc}
@ -540,7 +535,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
*/ */
@Override @Override
public UnsafeCallWrapper getUnsafeCallWrapper() { public UnsafeCallWrapper getUnsafeCallWrapper() {
return this.unsafeCallWrapper; return this.unsafeCallWrapper.get();
} }
@ -596,7 +591,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
* @return The {@link MVPlayerListener}. * @return The {@link MVPlayerListener}.
*/ */
public MVPlayerListener getPlayerListener() { public MVPlayerListener getPlayerListener() {
return this.playerListener; return getService(MVPlayerListener.class);
} }
/** /**
@ -605,7 +600,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
* @return The {@link MVChatListener}. * @return The {@link MVChatListener}.
*/ */
public MVChatListener getChatListener() { public MVChatListener getChatListener() {
return this.chatListener; return getService(MVChatListener.class);
} }
/** /**
@ -614,7 +609,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
* @return The {@link MVEntityListener}. * @return The {@link MVEntityListener}.
*/ */
public MVEntityListener getEntityListener() { public MVEntityListener getEntityListener() {
return this.entityListener; return getService(MVEntityListener.class);
} }
/** /**
@ -623,7 +618,7 @@ public class MultiverseCore extends JavaPlugin implements MVCore {
* @return The {@link MVWeatherListener}. * @return The {@link MVWeatherListener}.
*/ */
public MVWeatherListener getWeatherListener() { public MVWeatherListener getWeatherListener() {
return this.weatherListener; return getService(MVWeatherListener.class);
} }
/** /**

View File

@ -9,10 +9,12 @@ import me.main__.util.SerializationConfig.NoSuchPropertyException;
import me.main__.util.SerializationConfig.Property; import me.main__.util.SerializationConfig.Property;
import me.main__.util.SerializationConfig.SerializationConfig; import me.main__.util.SerializationConfig.SerializationConfig;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.jvnet.hk2.annotations.Service;
/** /**
* Our configuration. * Our configuration.
*/ */
@Service
public class MultiverseCoreConfiguration extends SerializationConfig implements MVConfig { public class MultiverseCoreConfiguration extends SerializationConfig implements MVConfig {
private static MultiverseCoreConfiguration instance; private static MultiverseCoreConfiguration instance;

View File

@ -9,11 +9,13 @@ package com.onarandombox.MultiverseCore.anchor;
import com.dumptruckman.minecraft.util.Logging; import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import jakarta.inject.Inject;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jvnet.hk2.annotations.Service;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -22,16 +24,17 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.logging.Level;
/** /**
* Manages anchors. * Manages anchors.
*/ */
@Service
public class AnchorManager { public class AnchorManager {
private MultiverseCore plugin; private MultiverseCore plugin;
private Map<String, Location> anchors; private Map<String, Location> anchors;
private FileConfiguration anchorConfig; private FileConfiguration anchorConfig;
@Inject
public AnchorManager(MultiverseCore plugin) { public AnchorManager(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
this.anchors = new HashMap<String, Location>(); this.anchors = new HashMap<String, Location>();

View File

@ -4,10 +4,12 @@ import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Minecart; import org.bukkit.entity.Minecart;
import org.bukkit.entity.Vehicle; import org.bukkit.entity.Vehicle;
import org.jvnet.hk2.annotations.Contract;
/** /**
* Used to get block/location-related information. * Used to get block/location-related information.
*/ */
@Contract
public interface BlockSafety { public interface BlockSafety {
/** /**
* This function checks whether the block at the given coordinates are above air or not. * This function checks whether the block at the given coordinates are above air or not.

View File

@ -3,10 +3,12 @@ package com.onarandombox.MultiverseCore.api;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Vehicle; import org.bukkit.entity.Vehicle;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.jvnet.hk2.annotations.Contract;
/** /**
* Used to manipulate locations. * Used to manipulate locations.
*/ */
@Contract
public interface LocationManipulation { public interface LocationManipulation {
/** /**
* Convert a Location into a Colon separated string to allow us to store it in text. * Convert a Location into a Colon separated string to allow us to store it in text.

View File

@ -1,10 +1,12 @@
package com.onarandombox.MultiverseCore.api; package com.onarandombox.MultiverseCore.api;
import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.jvnet.hk2.annotations.Contract;
/** /**
* The configuration of MultiverseCore. * The configuration of MultiverseCore.
*/ */
@Contract
public interface MVConfig extends ConfigurationSerializable { public interface MVConfig extends ConfigurationSerializable {
/** /**
* Sets a property using a {@link String}. * Sets a property using a {@link String}.

View File

@ -128,7 +128,10 @@ public interface MVCore extends MVPlugin {
* @param blockSafety The new {@link BlockSafety}. * @param blockSafety The new {@link BlockSafety}.
* @see BlockSafety * @see BlockSafety
* @see SimpleBlockSafety * @see SimpleBlockSafety
*
* @deprecated Use dependency injection instead.
*/ */
@Deprecated
void setBlockSafety(BlockSafety blockSafety); void setBlockSafety(BlockSafety blockSafety);
/** /**
@ -144,7 +147,10 @@ public interface MVCore extends MVPlugin {
* @param locationManipulation The new {@link LocationManipulation}. * @param locationManipulation The new {@link LocationManipulation}.
* @see LocationManipulation * @see LocationManipulation
* @see SimpleLocationManipulation * @see SimpleLocationManipulation
*
* @deprecated Use dependency injection instead.
*/ */
@Deprecated
void setLocationManipulation(LocationManipulation locationManipulation); void setLocationManipulation(LocationManipulation locationManipulation);
/** /**
@ -160,7 +166,10 @@ public interface MVCore extends MVPlugin {
* @param safeTTeleporter The new {@link SafeTTeleporter}. * @param safeTTeleporter The new {@link SafeTTeleporter}.
* @see SafeTTeleporter * @see SafeTTeleporter
* @see SimpleSafeTTeleporter * @see SimpleSafeTTeleporter
*
* @deprecated Use dependency injection instead.
*/ */
@Deprecated
void setSafeTTeleporter(SafeTTeleporter safeTTeleporter); void setSafeTTeleporter(SafeTTeleporter safeTTeleporter);
/** /**

View File

@ -17,6 +17,7 @@ import org.bukkit.World.Environment;
import org.bukkit.WorldType; import org.bukkit.WorldType;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.jvnet.hk2.annotations.Contract;
/** /**
* Multiverse 2 World Manager API * Multiverse 2 World Manager API
@ -24,6 +25,7 @@ import org.bukkit.generator.ChunkGenerator;
* This API contains all of the world managing * This API contains all of the world managing
* functions that your heart desires! * functions that your heart desires!
*/ */
@Contract
public interface MVWorldManager { public interface MVWorldManager {
/** /**
* Add a new World to the Multiverse Setup. * Add a new World to the Multiverse Setup.

View File

@ -6,10 +6,12 @@ import com.onarandombox.MultiverseCore.teleportation.TeleportResult;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.jvnet.hk2.annotations.Contract;
/** /**
* Used to safely teleport people. * Used to safely teleport people.
*/ */
@Contract
public interface SafeTTeleporter extends Teleporter { public interface SafeTTeleporter extends Teleporter {
/** /**

View File

@ -12,11 +12,14 @@ import co.aikar.commands.PaperCommandManager;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.commandtools.flags.CommandFlagsManager; import com.onarandombox.MultiverseCore.commandtools.flags.CommandFlagsManager;
import com.onarandombox.MultiverseCore.commandtools.queue.CommandQueueManager; import com.onarandombox.MultiverseCore.commandtools.queue.CommandQueueManager;
import jakarta.inject.Inject;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jvnet.hk2.annotations.Service;
/** /**
* Main class to manage permissions. * Main class to manage permissions.
*/ */
@Service
public class MVCommandManager extends PaperCommandManager { public class MVCommandManager extends PaperCommandManager {
private final MultiverseCore plugin; private final MultiverseCore plugin;
@ -24,6 +27,7 @@ public class MVCommandManager extends PaperCommandManager {
private CommandQueueManager commandQueueManager; private CommandQueueManager commandQueueManager;
private PluginLocales pluginLocales; private PluginLocales pluginLocales;
@Inject
public MVCommandManager(@NotNull MultiverseCore plugin) { public MVCommandManager(@NotNull MultiverseCore plugin) {
super(plugin); super(plugin);
this.plugin = plugin; this.plugin = plugin;

View File

@ -11,16 +11,19 @@ import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.Destination; import com.onarandombox.MultiverseCore.api.Destination;
import com.onarandombox.MultiverseCore.api.DestinationInstance; import com.onarandombox.MultiverseCore.api.DestinationInstance;
import com.onarandombox.MultiverseCore.api.Teleporter; import com.onarandombox.MultiverseCore.api.Teleporter;
import jakarta.inject.Inject;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jvnet.hk2.annotations.Service;
/** /**
* Provides destinations for teleportation. * Provides destinations for teleportation.
*/ */
@Service
public class DestinationsProvider { public class DestinationsProvider {
private static final String SEPARATOR = ":"; private static final String SEPARATOR = ":";
private static final String PERMISSION_PREFIX = "multiverse.teleport."; private static final String PERMISSION_PREFIX = "multiverse.teleport.";
@ -33,6 +36,7 @@ public class DestinationsProvider {
* *
* @param plugin The plugin. * @param plugin The plugin.
*/ */
@Inject
public DestinationsProvider(@NotNull MultiverseCore plugin) { public DestinationsProvider(@NotNull MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
this.destinationMap = new HashMap<>(); this.destinationMap = new HashMap<>();

View File

@ -1,18 +1,22 @@
package com.onarandombox.MultiverseCore.economy; package com.onarandombox.MultiverseCore.economy;
import jakarta.inject.Inject;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's Friendly Economist. This is used to deal with external economies and also item costs for stuff in MV. * Multiverse's Friendly Economist. This is used to deal with external economies and also item costs for stuff in MV.
*/ */
@Service
public class MVEconomist { public class MVEconomist {
private final VaultHandler vaultHandler; private final VaultHandler vaultHandler;
@Inject
public MVEconomist(Plugin plugin) { public MVEconomist(Plugin plugin) {
vaultHandler = new VaultHandler(plugin); vaultHandler = new VaultHandler(plugin);
} }

View File

@ -4,19 +4,23 @@ import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MVWorld; import com.onarandombox.MultiverseCore.api.MVWorld;
import jakarta.inject.Inject;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's {@link org.bukkit.event.Listener} for players. * Multiverse's {@link org.bukkit.event.Listener} for players.
*/ */
@Service
public class MVChatListener implements Listener { public class MVChatListener implements Listener {
private final MultiverseCore plugin; private final MultiverseCore plugin;
private final MVWorldManager worldManager; private final MVWorldManager worldManager;
private final MVPlayerListener playerListener; private final MVPlayerListener playerListener;
@Inject
public MVChatListener(MultiverseCore plugin, MVPlayerListener playerListener) { public MVChatListener(MultiverseCore plugin, MVPlayerListener playerListener) {
this.plugin = plugin; this.plugin = plugin;
this.worldManager = plugin.getMVWorldManager(); this.worldManager = plugin.getMVWorldManager();

View File

@ -11,6 +11,7 @@ import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MVWorld; import com.onarandombox.MultiverseCore.api.MVWorld;
import jakarta.inject.Inject;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -22,14 +23,17 @@ import org.bukkit.event.entity.EntityPortalEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's Entity {@link Listener}. * Multiverse's Entity {@link Listener}.
*/ */
@Service
public class MVEntityListener implements Listener { public class MVEntityListener implements Listener {
private MultiverseCore plugin; private MultiverseCore plugin;
private MVWorldManager worldManager; private MVWorldManager worldManager;
@Inject
public MVEntityListener(MultiverseCore plugin) { public MVEntityListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
this.worldManager = plugin.getMVWorldManager(); this.worldManager = plugin.getMVWorldManager();

View File

@ -16,6 +16,7 @@ import com.onarandombox.MultiverseCore.api.MVWorld;
import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.event.MVRespawnEvent; import com.onarandombox.MultiverseCore.event.MVRespawnEvent;
import com.onarandombox.MultiverseCore.utils.PermissionTools; import com.onarandombox.MultiverseCore.utils.PermissionTools;
import jakarta.inject.Inject;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -30,10 +31,12 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's {@link Listener} for players. * Multiverse's {@link Listener} for players.
*/ */
@Service
public class MVPlayerListener implements Listener { public class MVPlayerListener implements Listener {
private final MultiverseCore plugin; private final MultiverseCore plugin;
private final MVWorldManager worldManager; private final MVWorldManager worldManager;
@ -41,6 +44,7 @@ public class MVPlayerListener implements Listener {
private final Map<String, String> playerWorld = new ConcurrentHashMap<String, String>(); private final Map<String, String> playerWorld = new ConcurrentHashMap<String, String>();
@Inject
public MVPlayerListener(MultiverseCore plugin) { public MVPlayerListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
worldManager = plugin.getMVWorldManager(); worldManager = plugin.getMVWorldManager();

View File

@ -10,6 +10,7 @@ package com.onarandombox.MultiverseCore.listeners;
import com.dumptruckman.minecraft.util.Logging; import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorld; import com.onarandombox.MultiverseCore.api.MVWorld;
import jakarta.inject.Inject;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.PortalType; import org.bukkit.PortalType;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -18,14 +19,17 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.world.PortalCreateEvent; import org.bukkit.event.world.PortalCreateEvent;
import org.jvnet.hk2.annotations.Service;
/** /**
* A custom listener for portal related events. * A custom listener for portal related events.
*/ */
@Service
public class MVPortalListener implements Listener { public class MVPortalListener implements Listener {
private MultiverseCore plugin; private MultiverseCore plugin;
@Inject
public MVPortalListener(MultiverseCore core) { public MVPortalListener(MultiverseCore core) {
this.plugin = core; this.plugin = core;
} }

View File

@ -9,17 +9,21 @@ package com.onarandombox.MultiverseCore.listeners;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorld; import com.onarandombox.MultiverseCore.api.MVWorld;
import jakarta.inject.Inject;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.weather.ThunderChangeEvent; import org.bukkit.event.weather.ThunderChangeEvent;
import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.event.weather.WeatherChangeEvent;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's Weather {@link Listener}. * Multiverse's Weather {@link Listener}.
*/ */
@Service
public class MVWeatherListener implements Listener { public class MVWeatherListener implements Listener {
private MultiverseCore plugin; private MultiverseCore plugin;
@Inject
public MVWeatherListener(MultiverseCore plugin) { public MVWeatherListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
} }

View File

@ -8,14 +8,18 @@
package com.onarandombox.MultiverseCore.listeners; package com.onarandombox.MultiverseCore.listeners;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import jakarta.inject.Inject;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldInitEvent; import org.bukkit.event.world.WorldInitEvent;
import org.jvnet.hk2.annotations.Service;
@Service
public class MVWorldInitListener implements Listener { public class MVWorldInitListener implements Listener {
MultiverseCore plugin; MultiverseCore plugin;
@Inject
public MVWorldInitListener(MultiverseCore plugin) { public MVWorldInitListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
} }

View File

@ -8,24 +8,25 @@
package com.onarandombox.MultiverseCore.listeners; package com.onarandombox.MultiverseCore.listeners;
import com.onarandombox.MultiverseCore.MultiverseCore; import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MVWorld; import com.onarandombox.MultiverseCore.api.MVWorld;
import jakarta.inject.Inject;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.event.world.WorldUnloadEvent;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's World {@link Listener}. * Multiverse's World {@link Listener}.
*/ */
@Service
public class MVWorldListener implements Listener { public class MVWorldListener implements Listener {
private MultiverseCore plugin; private MultiverseCore plugin;
private MVWorldManager worldManager;
@Inject
public MVWorldListener(MultiverseCore plugin) { public MVWorldListener(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
this.worldManager = plugin.getMVWorldManager();
} }
/** /**

View File

@ -10,6 +10,7 @@ package com.onarandombox.MultiverseCore.teleportation;
import com.dumptruckman.minecraft.util.Logging; import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.api.BlockSafety; import com.onarandombox.MultiverseCore.api.BlockSafety;
import com.onarandombox.MultiverseCore.api.MVCore; import com.onarandombox.MultiverseCore.api.MVCore;
import jakarta.inject.Inject;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
@ -18,6 +19,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Bed; import org.bukkit.block.data.type.Bed;
import org.bukkit.entity.Minecart; import org.bukkit.entity.Minecart;
import org.bukkit.entity.Vehicle; import org.bukkit.entity.Vehicle;
import org.jvnet.hk2.annotations.Service;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Iterator; import java.util.Iterator;
@ -26,6 +28,7 @@ import java.util.Set;
/** /**
* The default-implementation of {@link BlockSafety}. * The default-implementation of {@link BlockSafety}.
*/ */
@Service
public class SimpleBlockSafety implements BlockSafety { public class SimpleBlockSafety implements BlockSafety {
private final MVCore plugin; private final MVCore plugin;
private static final Set<BlockFace> AROUND_BLOCK = EnumSet.noneOf(BlockFace.class); private static final Set<BlockFace> AROUND_BLOCK = EnumSet.noneOf(BlockFace.class);
@ -41,6 +44,7 @@ public class SimpleBlockSafety implements BlockSafety {
AROUND_BLOCK.add(BlockFace.NORTH_WEST); AROUND_BLOCK.add(BlockFace.NORTH_WEST);
} }
@Inject
public SimpleBlockSafety(MVCore plugin) { public SimpleBlockSafety(MVCore plugin) {
this.plugin = plugin; this.plugin = plugin;
} }

View File

@ -15,6 +15,7 @@ import org.bukkit.entity.Vehicle;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import com.onarandombox.MultiverseCore.api.LocationManipulation; import com.onarandombox.MultiverseCore.api.LocationManipulation;
import org.jvnet.hk2.annotations.Service;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Collections; import java.util.Collections;
@ -25,6 +26,7 @@ import java.util.Map;
/** /**
* The default-implementation of {@link LocationManipulation}. * The default-implementation of {@link LocationManipulation}.
*/ */
@Service
public class SimpleLocationManipulation implements LocationManipulation { public class SimpleLocationManipulation implements LocationManipulation {
private static final Map<String, Integer> ORIENTATION_INTS; private static final Map<String, Integer> ORIENTATION_INTS;

View File

@ -13,6 +13,7 @@ import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.DestinationInstance; import com.onarandombox.MultiverseCore.api.DestinationInstance;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter; import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.destination.ParsedDestination; import com.onarandombox.MultiverseCore.destination.ParsedDestination;
import jakarta.inject.Inject;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -24,13 +25,16 @@ import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Vehicle; import org.bukkit.entity.Vehicle;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.jvnet.hk2.annotations.Service;
/** /**
* The default-implementation of {@link SafeTTeleporter}. * The default-implementation of {@link SafeTTeleporter}.
*/ */
@Service
public class SimpleSafeTTeleporter implements SafeTTeleporter { public class SimpleSafeTTeleporter implements SafeTTeleporter {
private MultiverseCore plugin; private MultiverseCore plugin;
@Inject
public SimpleSafeTTeleporter(MultiverseCore plugin) { public SimpleSafeTTeleporter(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
} }

View File

@ -14,25 +14,28 @@ import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVDestination; import com.onarandombox.MultiverseCore.api.MVDestination;
import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MVWorld; import com.onarandombox.MultiverseCore.api.MVWorld;
import jakarta.inject.Inject;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
import org.jvnet.hk2.annotations.Service;
/** /**
* Multiverse's permission checker * Multiverse's permission checker
*/ */
@Service
public class MVPermissions { public class MVPermissions {
private MultiverseCore plugin; private MultiverseCore plugin;
private MVWorldManager worldMgr; private MVWorldManager worldMgr;
@Inject
public MVPermissions(MultiverseCore plugin) { public MVPermissions(MultiverseCore plugin) {
this.plugin = plugin; this.plugin = plugin;
this.worldMgr = plugin.getMVWorldManager(); this.worldMgr = plugin.getMVWorldManager();
} }
/** /**

View File

@ -2,15 +2,19 @@ package com.onarandombox.MultiverseCore.utils;
import com.dumptruckman.minecraft.util.Logging; import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.api.MVCore; import com.onarandombox.MultiverseCore.api.MVCore;
import jakarta.inject.Inject;
import org.jvnet.hk2.annotations.Service;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
/** /**
* Wraps calls that could result in exceptions that are not Multiverse's fault. * Wraps calls that could result in exceptions that are not Multiverse's fault.
*/ */
@Service
public class UnsafeCallWrapper { public class UnsafeCallWrapper {
private final MVCore core; private final MVCore core;
@Inject
public UnsafeCallWrapper(MVCore core) { public UnsafeCallWrapper(MVCore core) {
this.core = core; this.core = core;
} }

View File

@ -33,6 +33,7 @@ import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.api.WorldPurger; import com.onarandombox.MultiverseCore.api.WorldPurger;
import com.onarandombox.MultiverseCore.event.MVWorldDeleteEvent; import com.onarandombox.MultiverseCore.event.MVWorldDeleteEvent;
import com.onarandombox.MultiverseCore.utils.file.FileUtils; import com.onarandombox.MultiverseCore.utils.file.FileUtils;
import jakarta.inject.Inject;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameRule; import org.bukkit.GameRule;
import org.bukkit.Location; import org.bukkit.Location;
@ -48,10 +49,12 @@ import org.bukkit.generator.ChunkGenerator;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.jvnet.hk2.annotations.Service;
/** /**
* Public facing API to add/remove Multiverse worlds. * Public facing API to add/remove Multiverse worlds.
*/ */
@Service
public class SimpleMVWorldManager implements MVWorldManager { public class SimpleMVWorldManager implements MVWorldManager {
private final MultiverseCore plugin; private final MultiverseCore plugin;
private final WorldPurger worldPurger; private final WorldPurger worldPurger;
@ -61,6 +64,7 @@ public class SimpleMVWorldManager implements MVWorldManager {
private Map<String, String> defaultGens; private Map<String, String> defaultGens;
private String firstSpawn; private String firstSpawn;
@Inject
public SimpleMVWorldManager(MultiverseCore core) { public SimpleMVWorldManager(MultiverseCore core) {
this.plugin = core; this.plugin = core;
this.worldsFromTheConfig = new HashMap<String, WorldProperties>(); this.worldsFromTheConfig = new HashMap<String, WorldProperties>();

View File

@ -1,32 +1,146 @@
package org.mvplugins.multiverse.core.inject package org.mvplugins.multiverse.core.inject
import com.onarandombox.MultiverseCore.MultiverseCore import com.onarandombox.MultiverseCore.MultiverseCore
import com.onarandombox.MultiverseCore.anchor.AnchorManager
import com.onarandombox.MultiverseCore.api.BlockSafety
import com.onarandombox.MultiverseCore.api.LocationManipulation
import com.onarandombox.MultiverseCore.api.MVCore import com.onarandombox.MultiverseCore.api.MVCore
import com.onarandombox.MultiverseCore.api.MVPlugin import com.onarandombox.MultiverseCore.api.MVPlugin
import com.onarandombox.MultiverseCore.api.MVWorldManager
import com.onarandombox.MultiverseCore.api.SafeTTeleporter
import com.onarandombox.MultiverseCore.commandtools.MVCommandManager
import com.onarandombox.MultiverseCore.economy.MVEconomist
import com.onarandombox.MultiverseCore.listeners.MVChatListener
import com.onarandombox.MultiverseCore.listeners.MVEntityListener
import com.onarandombox.MultiverseCore.listeners.MVPlayerListener
import com.onarandombox.MultiverseCore.listeners.MVPortalListener
import com.onarandombox.MultiverseCore.listeners.MVWeatherListener
import com.onarandombox.MultiverseCore.listeners.MVWorldInitListener
import com.onarandombox.MultiverseCore.listeners.MVWorldListener
import com.onarandombox.MultiverseCore.teleportation.SimpleBlockSafety
import com.onarandombox.MultiverseCore.teleportation.SimpleLocationManipulation
import com.onarandombox.MultiverseCore.teleportation.SimpleSafeTTeleporter
import com.onarandombox.MultiverseCore.utils.MVPermissions
import com.onarandombox.MultiverseCore.utils.UnsafeCallWrapper
import com.onarandombox.MultiverseCore.world.SimpleMVWorldManager
import org.bukkit.Server
import org.bukkit.plugin.PluginManager
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import org.mvplugins.multiverse.core.TestWithMockBukkit import org.mvplugins.multiverse.core.TestWithMockBukkit
import java.util.logging.Logger
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertSame import kotlin.test.assertSame
class InjectionTest : TestWithMockBukkit() { class InjectionTest : TestWithMockBukkit() {
@Test @Test
fun `MultiverseCore is available in its ServiceLocator as Multiverse`() { fun `Server is available as a service`() {
assertNotNull(multiverseCore.getService(Server::class.java))
}
@Test
fun `PluginManager is available as a service`() {
assertNotNull(multiverseCore.getService(PluginManager::class.java))
}
@Test
fun `MultiverseCore is available as a service`() {
assertNotNull(multiverseCore.getService(MultiverseCore::class.java)) assertNotNull(multiverseCore.getService(MultiverseCore::class.java))
}
@Test
fun `MultiverseCore is available in its ServiceLocator as MVCore`() {
assertNotNull(multiverseCore.getService(MVCore::class.java)) assertNotNull(multiverseCore.getService(MVCore::class.java))
}
@Test
fun `MultiverseCore is available in its ServiceLocator as MVPlugin`() {
assertNotNull(multiverseCore.getService(MVPlugin::class.java)) assertNotNull(multiverseCore.getService(MVPlugin::class.java))
} }
@Test @Test
fun `ServiceLocator provides same instance of MultiverseCore that the MockBukkit server creates`() { fun `MultiverseCore service is the same instance of MultiverseCore that the MockBukkit server creates`() {
assertSame(multiverseCore, multiverseCore.getService(MultiverseCore::class.java)); assertSame(multiverseCore, multiverseCore.getService(MultiverseCore::class.java));
} }
@Test
fun `Logger is available as a service`() {
assertNotNull(multiverseCore.getService(Logger::class.java));
}
@Test
fun `AnchorManager is available as a service`() {
assertNotNull(multiverseCore.getService(AnchorManager::class.java))
}
@Test
fun `BlockSafety is available as a service`() {
assertNotNull(multiverseCore.getService(BlockSafety::class.java))
assertNotNull(multiverseCore.getService(SimpleBlockSafety::class.java))
}
@Test
fun `MVCommandManager is available as a service`() {
assertNotNull(multiverseCore.getService(MVCommandManager::class.java))
}
@Test
fun `MVEconomist is available as a service`() {
assertNotNull(multiverseCore.getService(MVEconomist::class.java))
}
@Test
fun `LocationManipulation is available as a service`() {
assertNotNull(multiverseCore.getService(LocationManipulation::class.java))
assertNotNull(multiverseCore.getService(SimpleLocationManipulation::class.java))
}
@Test
fun `MVPermissions is available as a service`() {
assertNotNull(multiverseCore.getService(MVPermissions::class.java))
}
@Test
fun `SafeTTeleporter is available as a service`() {
assertNotNull(multiverseCore.getService(SafeTTeleporter::class.java))
assertNotNull(multiverseCore.getService(SimpleSafeTTeleporter::class.java))
}
@Test
fun `UnsafeCallWrapper is available as a service`() {
assertNotNull(multiverseCore.getService(UnsafeCallWrapper::class.java))
}
@Test
fun `MVWorldManager is available as a service`() {
assertNotNull(multiverseCore.getService(MVWorldManager::class.java))
assertNotNull(multiverseCore.getService(SimpleMVWorldManager::class.java))
}
@Test
fun `MVEntityListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVEntityListener::class.java))
}
@Test
fun `MVPlayerListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVPlayerListener::class.java))
}
@Test
fun `MVChatListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVChatListener::class.java))
}
@Test
fun `MVPortalListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVPortalListener::class.java))
}
@Test
fun `MVWeatherListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVWeatherListener::class.java))
}
@Test
fun `MVWorldListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVWorldListener::class.java))
}
@Test
fun `MVWorldInitListener is available as a service`() {
assertNotNull(multiverseCore.getService(MVWorldInitListener::class.java))
}
} }