Pre-instantiate commands.
This commit makes use of the `register(Command)` method in MobArena's command handler to pre-instantiate the command classes and inject the main plugin instance in their constructors. This allows us to get rid of the horrible Singleton anti-pattern. Closes #6
This commit is contained in:
@@ -37,12 +37,6 @@ import java.util.logging.Level;
|
|||||||
|
|
||||||
public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
||||||
|
|
||||||
// The sad state of affairs is that MobArena's command framework has no
|
|
||||||
// support for registering commands by instance, but only by class, which
|
|
||||||
// means that we can't properly inject dependencies and have to resort to
|
|
||||||
// the Singleton Pattern.
|
|
||||||
private static MobArenaStats instance;
|
|
||||||
|
|
||||||
private StatsStoreRegistry statsStoreRegistry;
|
private StatsStoreRegistry statsStoreRegistry;
|
||||||
|
|
||||||
private Executor syncExecutor;
|
private Executor syncExecutor;
|
||||||
@@ -78,8 +72,6 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
|||||||
|
|
||||||
private void setup() {
|
private void setup() {
|
||||||
try {
|
try {
|
||||||
instance = this;
|
|
||||||
|
|
||||||
createDataFolder();
|
createDataFolder();
|
||||||
createConfigFile();
|
createConfigFile();
|
||||||
setupExecutors();
|
setupExecutors();
|
||||||
@@ -128,14 +120,14 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
|||||||
CommandHandler handler = (CommandHandler) command.getExecutor();
|
CommandHandler handler = (CommandHandler) command.getExecutor();
|
||||||
|
|
||||||
// User commands
|
// User commands
|
||||||
handler.register(ArenaStatsCommand.class);
|
handler.register(new ArenaStatsCommand(this));
|
||||||
handler.register(GlobalStatsCommand.class);
|
handler.register(new GlobalStatsCommand(this));
|
||||||
handler.register(PlayerStatsCommand.class);
|
handler.register(new PlayerStatsCommand(this));
|
||||||
|
|
||||||
// Admin commands
|
// Admin commands
|
||||||
handler.register(DeleteSessionStatsCommand.class);
|
handler.register(new DeleteSessionStatsCommand(this));
|
||||||
handler.register(ExportCommand.class);
|
handler.register(new ExportCommand(this));
|
||||||
handler.register(ImportCommand.class);
|
handler.register(new ImportCommand(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupMetrics() {
|
private void setupMetrics() {
|
||||||
@@ -207,8 +199,4 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
|||||||
return statsStore;
|
return statsStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MobArenaStats getInstance() {
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import com.garbagemule.MobArena.util.Slugs;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.mobarena.stats.MobArenaStats;
|
import org.mobarena.stats.MobArenaStats;
|
||||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
|
||||||
import org.mobarena.stats.store.ArenaStats;
|
import org.mobarena.stats.store.ArenaStats;
|
||||||
import org.mobarena.stats.store.StatsStore;
|
import org.mobarena.stats.store.StatsStore;
|
||||||
|
|
||||||
@@ -29,11 +28,14 @@ import static org.bukkit.ChatColor.YELLOW;
|
|||||||
)
|
)
|
||||||
public class ArenaStatsCommand implements Command {
|
public class ArenaStatsCommand implements Command {
|
||||||
|
|
||||||
|
private final MobArenaStats plugin;
|
||||||
|
|
||||||
|
public ArenaStatsCommand(MobArenaStats plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
if (args.length < 1) {
|
if (args.length < 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.mobarena.stats.MobArenaStats;
|
import org.mobarena.stats.MobArenaStats;
|
||||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
|
||||||
import org.mobarena.stats.store.StatsStore;
|
import org.mobarena.stats.store.StatsStore;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -23,11 +22,14 @@ import java.util.UUID;
|
|||||||
)
|
)
|
||||||
public class DeleteSessionStatsCommand implements Command {
|
public class DeleteSessionStatsCommand implements Command {
|
||||||
|
|
||||||
|
private final MobArenaStats plugin;
|
||||||
|
|
||||||
|
public DeleteSessionStatsCommand(MobArenaStats plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
// TODO: check args, handle non-UUID input error
|
// TODO: check args, handle non-UUID input error
|
||||||
UUID sessionId = UUID.fromString(args[0]);
|
UUID sessionId = UUID.fromString(args[0]);
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
|||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.mobarena.stats.MobArenaStats;
|
import org.mobarena.stats.MobArenaStats;
|
||||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
|
||||||
import org.mobarena.stats.store.StatsExport;
|
import org.mobarena.stats.store.StatsExport;
|
||||||
import org.mobarena.stats.store.StatsStore;
|
import org.mobarena.stats.store.StatsStore;
|
||||||
import org.mobarena.stats.store.StatsStoreRegistry;
|
import org.mobarena.stats.store.StatsStoreRegistry;
|
||||||
@@ -21,11 +20,14 @@ import org.mobarena.stats.store.StatsStoreRegistry;
|
|||||||
)
|
)
|
||||||
public class ExportCommand implements Command {
|
public class ExportCommand implements Command {
|
||||||
|
|
||||||
|
private final MobArenaStats plugin;
|
||||||
|
|
||||||
|
public ExportCommand(MobArenaStats plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
StatsStore store = plugin.getStatsStore();
|
StatsStore store = plugin.getStatsStore();
|
||||||
StatsStoreRegistry registry = plugin.getStatsStoreRegistry();
|
StatsStoreRegistry registry = plugin.getStatsStoreRegistry();
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.garbagemule.MobArena.commands.CommandInfo;
|
|||||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.mobarena.stats.MobArenaStats;
|
import org.mobarena.stats.MobArenaStats;
|
||||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
|
||||||
import org.mobarena.stats.store.GlobalStats;
|
import org.mobarena.stats.store.GlobalStats;
|
||||||
import org.mobarena.stats.store.StatsStore;
|
import org.mobarena.stats.store.StatsStore;
|
||||||
|
|
||||||
@@ -27,11 +26,14 @@ import static org.bukkit.ChatColor.YELLOW;
|
|||||||
)
|
)
|
||||||
public class GlobalStatsCommand implements Command {
|
public class GlobalStatsCommand implements Command {
|
||||||
|
|
||||||
|
private final MobArenaStats plugin;
|
||||||
|
|
||||||
|
public GlobalStatsCommand(MobArenaStats plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
Messenger messenger = am.getGlobalMessenger();
|
Messenger messenger = am.getGlobalMessenger();
|
||||||
plugin.getAsyncExecutor().execute(() -> {
|
plugin.getAsyncExecutor().execute(() -> {
|
||||||
StatsStore store = plugin.getStatsStore();
|
StatsStore store = plugin.getStatsStore();
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.mobarena.stats.MobArenaStats;
|
import org.mobarena.stats.MobArenaStats;
|
||||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
|
||||||
import org.mobarena.stats.store.StatsExport;
|
import org.mobarena.stats.store.StatsExport;
|
||||||
import org.mobarena.stats.store.StatsImport;
|
import org.mobarena.stats.store.StatsImport;
|
||||||
import org.mobarena.stats.store.StatsStore;
|
import org.mobarena.stats.store.StatsStore;
|
||||||
@@ -30,15 +29,18 @@ import java.util.stream.Collectors;
|
|||||||
)
|
)
|
||||||
public class ImportCommand implements Command {
|
public class ImportCommand implements Command {
|
||||||
|
|
||||||
|
private final MobArenaStats plugin;
|
||||||
|
|
||||||
|
public ImportCommand(MobArenaStats plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||||
if (args.length < 1) {
|
if (args.length < 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
Path data = plugin.getDataFolder().toPath();
|
Path data = plugin.getDataFolder().toPath();
|
||||||
Path file = data.resolve(args[0]);
|
Path file = data.resolve(args[0]);
|
||||||
if (!Files.exists(file)) {
|
if (!Files.exists(file)) {
|
||||||
@@ -110,9 +112,6 @@ public class ImportCommand implements Command {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
String[] files = plugin.getDataFolder().list();
|
String[] files = plugin.getDataFolder().list();
|
||||||
if (files == null || files.length == 0) {
|
if (files == null || files.length == 0) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.mobarena.stats.MobArenaStats;
|
import org.mobarena.stats.MobArenaStats;
|
||||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
|
||||||
import org.mobarena.stats.store.PlayerStats;
|
import org.mobarena.stats.store.PlayerStats;
|
||||||
import org.mobarena.stats.store.StatsStore;
|
import org.mobarena.stats.store.StatsStore;
|
||||||
|
|
||||||
@@ -28,11 +27,14 @@ import static org.bukkit.ChatColor.YELLOW;
|
|||||||
)
|
)
|
||||||
public class PlayerStatsCommand implements Command {
|
public class PlayerStatsCommand implements Command {
|
||||||
|
|
||||||
|
private final MobArenaStats plugin;
|
||||||
|
|
||||||
|
public PlayerStatsCommand(MobArenaStats plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||||
// :(
|
|
||||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
|
||||||
|
|
||||||
String name;
|
String name;
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user