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 {
|
||||
|
||||
// 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 Executor syncExecutor;
|
||||
@@ -78,8 +72,6 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
||||
|
||||
private void setup() {
|
||||
try {
|
||||
instance = this;
|
||||
|
||||
createDataFolder();
|
||||
createConfigFile();
|
||||
setupExecutors();
|
||||
@@ -128,14 +120,14 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
||||
CommandHandler handler = (CommandHandler) command.getExecutor();
|
||||
|
||||
// User commands
|
||||
handler.register(ArenaStatsCommand.class);
|
||||
handler.register(GlobalStatsCommand.class);
|
||||
handler.register(PlayerStatsCommand.class);
|
||||
handler.register(new ArenaStatsCommand(this));
|
||||
handler.register(new GlobalStatsCommand(this));
|
||||
handler.register(new PlayerStatsCommand(this));
|
||||
|
||||
// Admin commands
|
||||
handler.register(DeleteSessionStatsCommand.class);
|
||||
handler.register(ExportCommand.class);
|
||||
handler.register(ImportCommand.class);
|
||||
handler.register(new DeleteSessionStatsCommand(this));
|
||||
handler.register(new ExportCommand(this));
|
||||
handler.register(new ImportCommand(this));
|
||||
}
|
||||
|
||||
private void setupMetrics() {
|
||||
@@ -207,8 +199,4 @@ public class MobArenaStatsPlugin extends JavaPlugin implements MobArenaStats {
|
||||
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.entity.Player;
|
||||
import org.mobarena.stats.MobArenaStats;
|
||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
||||
import org.mobarena.stats.store.ArenaStats;
|
||||
import org.mobarena.stats.store.StatsStore;
|
||||
|
||||
@@ -29,11 +28,14 @@ import static org.bukkit.ChatColor.YELLOW;
|
||||
)
|
||||
public class ArenaStatsCommand implements Command {
|
||||
|
||||
private final MobArenaStats plugin;
|
||||
|
||||
public ArenaStatsCommand(MobArenaStats plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.mobarena.stats.MobArenaStats;
|
||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
||||
import org.mobarena.stats.store.StatsStore;
|
||||
|
||||
import java.util.List;
|
||||
@@ -23,11 +22,14 @@ import java.util.UUID;
|
||||
)
|
||||
public class DeleteSessionStatsCommand implements Command {
|
||||
|
||||
private final MobArenaStats plugin;
|
||||
|
||||
public DeleteSessionStatsCommand(MobArenaStats plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
// TODO: check args, handle non-UUID input error
|
||||
UUID sessionId = UUID.fromString(args[0]);
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.mobarena.stats.MobArenaStats;
|
||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
||||
import org.mobarena.stats.store.StatsExport;
|
||||
import org.mobarena.stats.store.StatsStore;
|
||||
import org.mobarena.stats.store.StatsStoreRegistry;
|
||||
@@ -21,11 +20,14 @@ import org.mobarena.stats.store.StatsStoreRegistry;
|
||||
)
|
||||
public class ExportCommand implements Command {
|
||||
|
||||
private final MobArenaStats plugin;
|
||||
|
||||
public ExportCommand(MobArenaStats plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
StatsStore store = plugin.getStatsStore();
|
||||
StatsStoreRegistry registry = plugin.getStatsStoreRegistry();
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.garbagemule.MobArena.commands.CommandInfo;
|
||||
import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.mobarena.stats.MobArenaStats;
|
||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
||||
import org.mobarena.stats.store.GlobalStats;
|
||||
import org.mobarena.stats.store.StatsStore;
|
||||
|
||||
@@ -27,11 +26,14 @@ import static org.bukkit.ChatColor.YELLOW;
|
||||
)
|
||||
public class GlobalStatsCommand implements Command {
|
||||
|
||||
private final MobArenaStats plugin;
|
||||
|
||||
public GlobalStatsCommand(MobArenaStats plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
Messenger messenger = am.getGlobalMessenger();
|
||||
plugin.getAsyncExecutor().execute(() -> {
|
||||
StatsStore store = plugin.getStatsStore();
|
||||
|
||||
@@ -8,7 +8,6 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.mobarena.stats.MobArenaStats;
|
||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
||||
import org.mobarena.stats.store.StatsExport;
|
||||
import org.mobarena.stats.store.StatsImport;
|
||||
import org.mobarena.stats.store.StatsStore;
|
||||
@@ -30,15 +29,18 @@ import java.util.stream.Collectors;
|
||||
)
|
||||
public class ImportCommand implements Command {
|
||||
|
||||
private final MobArenaStats plugin;
|
||||
|
||||
public ImportCommand(MobArenaStats plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||
if (args.length < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
Path data = plugin.getDataFolder().toPath();
|
||||
Path file = data.resolve(args[0]);
|
||||
if (!Files.exists(file)) {
|
||||
@@ -110,9 +112,6 @@ public class ImportCommand implements Command {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
String[] files = plugin.getDataFolder().list();
|
||||
if (files == null || files.length == 0) {
|
||||
return Collections.emptyList();
|
||||
|
||||
@@ -7,7 +7,6 @@ import com.garbagemule.MobArena.framework.ArenaMaster;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.mobarena.stats.MobArenaStats;
|
||||
import org.mobarena.stats.MobArenaStatsPlugin;
|
||||
import org.mobarena.stats.store.PlayerStats;
|
||||
import org.mobarena.stats.store.StatsStore;
|
||||
|
||||
@@ -28,11 +27,14 @@ import static org.bukkit.ChatColor.YELLOW;
|
||||
)
|
||||
public class PlayerStatsCommand implements Command {
|
||||
|
||||
private final MobArenaStats plugin;
|
||||
|
||||
public PlayerStatsCommand(MobArenaStats plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(ArenaMaster am, CommandSender sender, String... args) {
|
||||
// :(
|
||||
MobArenaStats plugin = MobArenaStatsPlugin.getInstance();
|
||||
|
||||
String name;
|
||||
if (args.length == 0) {
|
||||
if (!(sender instanceof Player)) {
|
||||
|
||||
Reference in New Issue
Block a user