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:
Andreas Troelsen
2021-08-06 22:12:56 +02:00
parent 1756a08318
commit 7e08fde493
7 changed files with 42 additions and 45 deletions
@@ -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)) {