package net.obnoxint.mcdev.omclib.command; import net.obnoxint.mcdev.feature.Feature; import net.obnoxint.mcdev.omclib.OmcLibPermission; import net.obnoxint.mcdev.omclib.OmcLibPlugin; import org.bukkit.command.CommandSender; import org.bukkit.permissions.Permission; public final class FeatureCommandHandler extends OmcCommandHandler { private static final String ID = "~"; private static final String DESCRIPTION = "Manage features"; private static final String USAGE = "[feature] [activate|deactivate|loadproperties|storeproperties] or no arguments for summary"; public FeatureCommandHandler() { super(ID, DESCRIPTION, USAGE); } @Override public boolean handleCommand(final CommandSender sender, final String[] args) { final Permission perm = OmcLibPermission.COMMAND_FEATURE.getPermission(); if (sender.hasPermission(perm)) { if (args.length == 0) { sender.sendMessage(getSummary()); return true; } else if (args.length == 1) { sender.sendMessage(getFeatureSummary(args[0])); return true; } else if (args.length == 2) { final Feature f = OmcLibPlugin.getInstance().getFeatureManager().getFeature(args[0]); if (f != null) { switch (args[1]) { case "activate": if (!f.isFeatureActive()) { f.setFeatureActive(true); sender.sendMessage("Feature activated."); } else { sender.sendMessage("Feature is already active."); } break; case "deactivate": if (f.isFeatureActive()) { f.setFeatureActive(false); sender.sendMessage("Feature deactivated."); } else { sender.sendMessage("Feature is already inactive."); } break; case "load": if (f.getFeatureProperties().isDirty()) { sender.sendMessage("Warning: changes in memory will be overwritten."); } f.getFeatureProperties().load(); sender.sendMessage("Properties loaded from file."); break; case "store": f.getFeatureProperties().store(); sender.sendMessage("Properties stored to file."); break; default: return false; } return true; } else { sender.sendMessage("Feature not available: " + args[0]); } } } return false; } private String getFeatureSummary(final String name) { String r; final Feature f = OmcLibPlugin.getInstance().getFeatureManager().getFeature(name); if (f == null) { r = "Feature not available: " + name; } else { r = f.getFeatureName() + ": " + ((f.isFeatureActive()) ? "active" : "inactive") + " Owner: " + f.getFeaturePlugin().getName() + " Properties: " + ((f.getFeatureProperties().isDirty()) ? "dirty" : "clean"); } return r; } private String[] getSummary() { final String[] names = OmcLibPlugin.getInstance().getFeatureManager().getFeatureNames(); final String[] r = new String[names.length]; for (int i = 0; i < names.length; i++) { r[i] = String.valueOf(i + 1) + ". " + getFeatureSummary(names[i]); } return r; } }