mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-12-22 09:08:03 +01:00
Commands API implemented. Still a WIP.
Commands work and tab complete works somewhat. Help still needs to be done. Added in NotSetup And PluginConfig to just make the plugin work. It's fine to remove them when there is a working alternative.
This commit is contained in:
parent
bd3427fffe
commit
c5262e8faa
@ -1,5 +1,7 @@
|
|||||||
package us.tastybento.bskyblock;
|
package us.tastybento.bskyblock;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
@ -8,6 +10,7 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||||||
import us.tastybento.bskyblock.api.BSModule;
|
import us.tastybento.bskyblock.api.BSModule;
|
||||||
import us.tastybento.bskyblock.commands.AdminCommand;
|
import us.tastybento.bskyblock.commands.AdminCommand;
|
||||||
import us.tastybento.bskyblock.commands.IslandCommand;
|
import us.tastybento.bskyblock.commands.IslandCommand;
|
||||||
|
import us.tastybento.bskyblock.config.PluginConfig;
|
||||||
import us.tastybento.bskyblock.config.Settings;
|
import us.tastybento.bskyblock.config.Settings;
|
||||||
import us.tastybento.bskyblock.database.BSBDatabase;
|
import us.tastybento.bskyblock.database.BSBDatabase;
|
||||||
import us.tastybento.bskyblock.database.managers.PlayersManager;
|
import us.tastybento.bskyblock.database.managers.PlayersManager;
|
||||||
@ -20,8 +23,6 @@ import us.tastybento.bskyblock.managers.LocalesManager;
|
|||||||
import us.tastybento.bskyblock.util.Util;
|
import us.tastybento.bskyblock.util.Util;
|
||||||
import us.tastybento.bskyblock.util.nms.NMSAbstraction;
|
import us.tastybento.bskyblock.util.nms.NMSAbstraction;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main BSkyBlock class - provides an island minigame in the sky
|
* Main BSkyBlock class - provides an island minigame in the sky
|
||||||
* @author Tastybento
|
* @author Tastybento
|
||||||
@ -47,7 +48,7 @@ public class BSkyBlock extends JavaPlugin implements BSModule {
|
|||||||
plugin = this;
|
plugin = this;
|
||||||
|
|
||||||
// Load configuration and locales. If there are no errors, load the plugin.
|
// Load configuration and locales. If there are no errors, load the plugin.
|
||||||
//if(PluginConfig.loadPluginConfig(this)){
|
if(PluginConfig.loadPluginConfig(this)){
|
||||||
|
|
||||||
playersManager = new PlayersManager(this);
|
playersManager = new PlayersManager(this);
|
||||||
islandsManager = new IslandsManager(this);
|
islandsManager = new IslandsManager(this);
|
||||||
@ -124,7 +125,7 @@ public class BSkyBlock extends JavaPlugin implements BSModule {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerListeners() {
|
private void registerListeners() {
|
||||||
|
@ -8,29 +8,29 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.PluginIdentifiableCommand;
|
import org.bukkit.command.PluginIdentifiableCommand;
|
||||||
import org.bukkit.command.TabCompleter;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import us.tastybento.bskyblock.BSkyBlock;
|
import us.tastybento.bskyblock.BSkyBlock;
|
||||||
import us.tastybento.bskyblock.database.managers.PlayersManager;
|
import us.tastybento.bskyblock.database.managers.PlayersManager;
|
||||||
import us.tastybento.bskyblock.database.managers.island.IslandsManager;
|
import us.tastybento.bskyblock.database.managers.island.IslandsManager;
|
||||||
|
import us.tastybento.bskyblock.util.Util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BSB composite command
|
* BSB composite command
|
||||||
* @author ben, poslovich
|
* @author ben, poslovich
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class CompositeCommand extends Command implements PluginIdentifiableCommand, TabCompleter {
|
public abstract class CompositeCommand extends Command implements PluginIdentifiableCommand {
|
||||||
|
|
||||||
private String helpReference;
|
|
||||||
|
|
||||||
|
private static final boolean DEBUG = true;
|
||||||
private boolean onlyPlayer = false;
|
private boolean onlyPlayer = false;
|
||||||
private final CompositeCommand parent;
|
private final CompositeCommand parent;
|
||||||
private String permission = "";
|
private String permission = "";
|
||||||
protected BSkyBlock plugin = BSkyBlock.getPlugin();
|
public BSkyBlock plugin = BSkyBlock.getPlugin();
|
||||||
|
|
||||||
private Map<String, CompositeCommand> subCommands;
|
private Map<String, CompositeCommand> subCommands;
|
||||||
|
|
||||||
@ -46,10 +46,11 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
// Add this sub-command to the parent
|
// Add this sub-command to the parent
|
||||||
parent.getSubCommands().put(label, this);
|
parent.getSubCommands().put(label, this);
|
||||||
this.setAliases(new ArrayList<>(Arrays.asList(aliases)));
|
this.setAliases(new ArrayList<>(Arrays.asList(aliases)));
|
||||||
|
|
||||||
this.subCommands = new LinkedHashMap<>();
|
this.subCommands = new LinkedHashMap<>();
|
||||||
|
|
||||||
this.setup();
|
this.setup();
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: registering command " + label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -74,42 +75,70 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(CommandSender sender, String label, String[] args) {
|
public boolean execute(CommandSender sender, String label, String[] args) {
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: executing command " + label);
|
||||||
// Get the User instance for this sender
|
// Get the User instance for this sender
|
||||||
User user = User.getInstance(sender);
|
User user = User.getInstance(sender);
|
||||||
// Check permissions
|
// Check permissions
|
||||||
if (user.hasPermission(permission)) {
|
if (user.hasPermission(permission)) {
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: sender has permission");
|
||||||
// Do the player part
|
// Do the player part
|
||||||
if (onlyPlayer && user.isPlayer()) {
|
if (onlyPlayer && user.isPlayer()) {
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: sender is a player and command requires players");
|
||||||
// Find the subCommand
|
// Find the subCommand
|
||||||
CompositeCommand subCommand = this;
|
CompositeCommand subCommand = this;
|
||||||
// Run through any arguments
|
// Run through any arguments
|
||||||
for (int i = 0; i < args.length; i++) {
|
if (DEBUG)
|
||||||
// get the subcommand corresponding to the arg
|
Bukkit.getLogger().info("DEBUG: Running through args: " + args.toString());
|
||||||
if (subCommand.hasSubCommmands()) {
|
if (args.length > 0) {
|
||||||
if (subCommand.hasSubCommand(args[i])) {
|
for (int i = 0; i <= args.length; i++) {
|
||||||
// Step down one
|
if (DEBUG)
|
||||||
subCommand = subCommand.getSubCommand(args[i]);
|
Bukkit.getLogger().info("DEBUG: Argument " + i);
|
||||||
} else {
|
// get the subcommand corresponding to the arg
|
||||||
// Unknown command
|
if (subCommand.hasSubCommmands()) {
|
||||||
user.sendMessage("general.errors.unknown-command");
|
if (DEBUG)
|
||||||
return true;
|
Bukkit.getLogger().info("DEBUG: This command has subcommands");
|
||||||
}
|
if (subCommand.hasSubCommand(args[i])) {
|
||||||
} else {
|
// Step down one
|
||||||
// We are at the end of the walk
|
subCommand = subCommand.getSubCommand(args[i]);
|
||||||
// Check permission
|
if (DEBUG)
|
||||||
if (user.hasPermission(subCommand.getPermission())) {
|
Bukkit.getLogger().info("DEBUG: Moved to " + subCommand.getLabel());
|
||||||
if (onlyPlayer && user.isPlayer()) {
|
|
||||||
// Execute the subcommand with trimmed args
|
|
||||||
subCommand.execute(user, Arrays.copyOfRange(args, i, args.length));
|
|
||||||
} else {
|
} else {
|
||||||
user.sendMessage("general.errors.use-in-game");
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: Unknown command");
|
||||||
|
// Unknown command
|
||||||
|
user.sendMessage("general.errors.unknown-command");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
user.sendMessage("general.errors.no-permission");
|
// We are at the end of the walk
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: End of traversal, checking perms");
|
||||||
|
// Check permission
|
||||||
|
if (user.hasPermission(subCommand.getPermission())) {
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: player has perm");
|
||||||
|
if (onlyPlayer && user.isPlayer()) {
|
||||||
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: subcommand is for player's only - executing with args " + Arrays.copyOfRange(args, i, args.length));
|
||||||
|
// Execute the subcommand with trimmed args
|
||||||
|
subCommand.execute(user, Arrays.copyOfRange(args, i, args.length));
|
||||||
|
} else {
|
||||||
|
user.sendMessage("general.errors.use-in-game");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
user.sendMessage("general.errors.no-permission");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
// else continue the loop
|
||||||
}
|
}
|
||||||
// else continue the loop
|
} else {
|
||||||
}
|
if (DEBUG)
|
||||||
|
Bukkit.getLogger().info("DEBUG: no args, just execute");
|
||||||
|
execute(user, args);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
user.sendMessage("general.errors.use-in-game");
|
user.sendMessage("general.errors.use-in-game");
|
||||||
}
|
}
|
||||||
@ -119,7 +148,7 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* What will be executed when this command is run
|
* What will be executed when this command is run
|
||||||
* @param user
|
* @param user
|
||||||
@ -191,9 +220,9 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
private List<String> getSubCommandHelp(String helpRef) {
|
private List<String> getSubCommandHelp(String helpRef) {
|
||||||
CompositeCommand subCommand = this;
|
CompositeCommand subCommand = this;
|
||||||
List<String> result = new ArrayList<>();
|
List<String> result = new ArrayList<>();
|
||||||
result.add(helpRef + " " + helpReference);
|
result.add(helpRef + " " + getDescription());
|
||||||
while (subCommand.hasSubCommmands()) {
|
while (subCommand.hasSubCommmands()) {
|
||||||
result.addAll(subCommand.getSubCommandList(helpReference));
|
result.addAll(subCommand.getSubCommandList(getDescription()));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -204,7 +233,7 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
public List<String> getSubCommandList() {
|
public List<String> getSubCommandList() {
|
||||||
return getSubCommandList("");
|
return getSubCommandList("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getSubCommandList(String label) {
|
private List<String> getSubCommandList(String label) {
|
||||||
CompositeCommand subCommand = this;
|
CompositeCommand subCommand = this;
|
||||||
List<String> result = new ArrayList<>();
|
List<String> result = new ArrayList<>();
|
||||||
@ -253,11 +282,11 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
protected boolean inTeam(Player player) {
|
protected boolean inTeam(Player player) {
|
||||||
return plugin.getPlayers().inTeam(player.getUniqueId());
|
return plugin.getPlayers().inTeam(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOnlyPlayer() {
|
public boolean isOnlyPlayer() {
|
||||||
return onlyPlayer;
|
return onlyPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param user
|
* @param user
|
||||||
* @return true if sender is a player
|
* @return true if sender is a player
|
||||||
@ -265,29 +294,25 @@ public abstract class CompositeCommand extends Command implements PluginIdentifi
|
|||||||
protected boolean isPlayer(User user) {
|
protected boolean isPlayer(User user) {
|
||||||
return (user.getPlayer() instanceof Player);
|
return (user.getPlayer() instanceof Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) {
|
public List<String> tabComplete(final CommandSender sender, final String alias, final String[] args) {
|
||||||
return new ArrayList<>(subCommands.keySet());
|
plugin.getLogger().info("DEBUG: tab complete " + subCommands.keySet().toString());
|
||||||
|
final List<String> options = new ArrayList<>(subCommands.keySet());
|
||||||
|
String lastArg = (args.length != 0 ? args[args.length - 1] : "");
|
||||||
|
return Util.tabLimit(options, lastArg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the locale string that gives help for this command
|
|
||||||
* @param helpReference
|
|
||||||
*/
|
|
||||||
public void setHelp(String helpReference) {
|
|
||||||
this.helpReference = helpReference;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOnlyPlayer(boolean onlyPlayer) {
|
public void setOnlyPlayer(boolean onlyPlayer) {
|
||||||
this.onlyPlayer = onlyPlayer;
|
this.onlyPlayer = onlyPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setPermission(String permission) {
|
public void setPermission(String permission) {
|
||||||
this.permission = permission;
|
this.permission = permission;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Anything that needs to be set up for this command.
|
* Anything that needs to be set up for this command.
|
||||||
* This is where you register subcommands.
|
* This is where you register subcommands.
|
||||||
|
@ -180,7 +180,12 @@ public class User {
|
|||||||
* @param message - the message to send
|
* @param message - the message to send
|
||||||
*/
|
*/
|
||||||
public void sendLegacyMessage(String message) {
|
public void sendLegacyMessage(String message) {
|
||||||
sender.sendMessage(message);
|
if (sender != null) {
|
||||||
|
sender.sendMessage(message);
|
||||||
|
} else {
|
||||||
|
// TODO: Offline message
|
||||||
|
// Save this message so the player can see it later
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGameMode(GameMode mode) {
|
public void setGameMode(GameMode mode) {
|
||||||
|
@ -30,6 +30,7 @@ public class IslandCommand extends CompositeCommand {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setup() {
|
public void setup() {
|
||||||
|
// Set up subcommands
|
||||||
new IslandAboutCommand(this);
|
new IslandAboutCommand(this);
|
||||||
new IslandCreateCommand(this);
|
new IslandCreateCommand(this);
|
||||||
new IslandGoCommand(this);
|
new IslandGoCommand(this);
|
||||||
@ -37,6 +38,7 @@ public class IslandCommand extends CompositeCommand {
|
|||||||
new IslandResetnameCommand(this);
|
new IslandResetnameCommand(this);
|
||||||
new IslandSethomeCommand(this);
|
new IslandSethomeCommand(this);
|
||||||
new IslandSetnameCommand(this);
|
new IslandSetnameCommand(this);
|
||||||
|
// Team commands
|
||||||
new IslandTeamCommand(this);
|
new IslandTeamCommand(this);
|
||||||
new IslandTeamInviteCommand(this);
|
new IslandTeamInviteCommand(this);
|
||||||
new IslandInviteAcceptCommand(this);
|
new IslandInviteAcceptCommand(this);
|
||||||
|
@ -5,9 +5,6 @@ package us.tastybento.bskyblock.commands.island;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import us.tastybento.bskyblock.api.commands.CompositeCommand;
|
import us.tastybento.bskyblock.api.commands.CompositeCommand;
|
||||||
import us.tastybento.bskyblock.api.commands.User;
|
import us.tastybento.bskyblock.api.commands.User;
|
||||||
import us.tastybento.bskyblock.api.events.island.IslandEvent.Reason;
|
import us.tastybento.bskyblock.api.events.island.IslandEvent.Reason;
|
||||||
@ -38,6 +35,7 @@ public class IslandCreateCommand extends CompositeCommand {
|
|||||||
if (getPlayers().inTeam(user.getUniqueId())) {
|
if (getPlayers().inTeam(user.getUniqueId())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
user.sendLegacyMessage("Creating island...");
|
||||||
createIsland(user);
|
createIsland(user);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ public class IslandResetCommand extends CompositeCommand {
|
|||||||
super(command, "reset", "restart");
|
super(command, "reset", "restart");
|
||||||
this.setPermission(Settings.PERMPREFIX + "island.create");
|
this.setPermission(Settings.PERMPREFIX + "island.create");
|
||||||
this.setOnlyPlayer(true);
|
this.setOnlyPlayer(true);
|
||||||
|
this.setUsage("island.reset.usage");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,6 +22,7 @@ public class IslandResetnameCommand extends CompositeCommand {
|
|||||||
super(command, "setname");
|
super(command, "setname");
|
||||||
this.setPermission(Settings.PERMPREFIX + "island.name");
|
this.setPermission(Settings.PERMPREFIX + "island.name");
|
||||||
this.setOnlyPlayer(true);
|
this.setOnlyPlayer(true);
|
||||||
|
this.setUsage("island.setname.usage");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@ import java.util.UUID;
|
|||||||
import org.apache.commons.lang.math.NumberUtils;
|
import org.apache.commons.lang.math.NumberUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
|
|
||||||
@ -135,7 +134,7 @@ public class IslandTeamInviteCommand extends AbstractIslandTeamCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) {
|
public List<String> tabComplete(final CommandSender sender, final String alias, final String[] args) {
|
||||||
User user = User.getInstance(sender);
|
User user = User.getInstance(sender);
|
||||||
if (args.length == 0 || !isPlayer(user)) {
|
if (args.length == 0 || !isPlayer(user)) {
|
||||||
// Don't show every player on the server. Require at least the first letter
|
// Don't show every player on the server. Require at least the first letter
|
||||||
|
@ -5,7 +5,6 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.apache.commons.lang.math.NumberUtils;
|
import org.apache.commons.lang.math.NumberUtils;
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
|
|
||||||
@ -131,7 +130,7 @@ public class IslandTeamPromoteCommand extends AbstractIslandTeamCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> onTabComplete(final CommandSender sender, final Command command, final String label, final String[] args) {
|
public List<String> tabComplete(final CommandSender sender, final String alias, final String[] args) {
|
||||||
User user = User.getInstance(sender);
|
User user = User.getInstance(sender);
|
||||||
List<String> result = new ArrayList<>();
|
List<String> result = new ArrayList<>();
|
||||||
for (UUID member : plugin.getIslands().getMembers(user.getUniqueId())) {
|
for (UUID member : plugin.getIslands().getMembers(user.getUniqueId())) {
|
||||||
|
76
src/main/java/us/tastybento/bskyblock/config/NotSetup.java
Normal file
76
src/main/java/us/tastybento/bskyblock/config/NotSetup.java
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
package us.tastybento.bskyblock.config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import us.tastybento.bskyblock.BSkyBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class runs when the config file is not set up enough, or is unsafe.
|
||||||
|
* It provides useful information to the admin on what is wrong.
|
||||||
|
*
|
||||||
|
* @author Tastybento
|
||||||
|
* @author Poslovitch
|
||||||
|
*/
|
||||||
|
public class NotSetup implements CommandExecutor{
|
||||||
|
|
||||||
|
public enum ConfigError {
|
||||||
|
DIFFERENT_WORLDNAME(0, 001),
|
||||||
|
DIFFERENT_ISLAND_DISTANCE(0, 002),
|
||||||
|
PROTECTION_RANGE_HIGHER_THAN_ISLAND_DISTANCE(1, 101),
|
||||||
|
UNKNOWN_LANGUAGE(2, 201),
|
||||||
|
NOT_CHUNK_ISLAND_DISTANCE(2, 202),
|
||||||
|
NOT_EVEN_PROTECTION_RANGE(2, 203),
|
||||||
|
PURGE_ISLAND_LEVEL_TOO_LOW(3, 301),
|
||||||
|
ISLAND_DISTANCE_TOO_LOW(3, 302),
|
||||||
|
PROTECTION_RANGE_TOO_LOW(3, 303),
|
||||||
|
ISLAND_HEIGHT_TOO_LOW(3, 304),
|
||||||
|
NETHER_SPAWN_RADIUS_TOO_LOW(3, 305),
|
||||||
|
NETHER_SPAWN_RADIUS_TOO_HIGH(3, 306);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Priority:
|
||||||
|
* 0 - CRITICAL
|
||||||
|
* 1 - HIGH
|
||||||
|
* 2 - MEDIUM
|
||||||
|
* 3 - LOW
|
||||||
|
*/
|
||||||
|
private int priority;
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
ConfigError(int priority, int id){
|
||||||
|
this.priority = priority;
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ConfigError getById(int id){
|
||||||
|
for(ConfigError e : ConfigError.values()){
|
||||||
|
if(e.id == id) return e;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BSkyBlock plugin;
|
||||||
|
private List<Error> errors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles plugin operation if a critical config-related issue happened
|
||||||
|
*
|
||||||
|
* @param plugin
|
||||||
|
* @param errors
|
||||||
|
*/
|
||||||
|
public NotSetup(BSkyBlock plugin, List<Error> errors){
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.errors = errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
140
src/main/java/us/tastybento/bskyblock/config/PluginConfig.java
Normal file
140
src/main/java/us/tastybento/bskyblock/config/PluginConfig.java
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
package us.tastybento.bskyblock.config;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import us.tastybento.bskyblock.BSkyBlock;
|
||||||
|
import us.tastybento.bskyblock.config.NotSetup.ConfigError;
|
||||||
|
import us.tastybento.bskyblock.database.BSBDatabase.DatabaseType;
|
||||||
|
import us.tastybento.bskyblock.database.objects.Island.SettingsFlag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the plugin configuration and the locales.
|
||||||
|
* Also provides
|
||||||
|
*
|
||||||
|
* @author Tastybento
|
||||||
|
* @author Poslovitch
|
||||||
|
*/
|
||||||
|
public class PluginConfig {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the plugin configuration and the locales.
|
||||||
|
* If there were errors, it setups the commands as "NotSetup" and generates a debug for admins to fix their configuration.
|
||||||
|
* @return true if there wasn't any error, otherwise false.
|
||||||
|
*/
|
||||||
|
public static boolean loadPluginConfig(BSkyBlock plugin) {
|
||||||
|
plugin.saveDefaultConfig();
|
||||||
|
|
||||||
|
// Initialize the errors list
|
||||||
|
HashMap<ConfigError, Object> errors = new HashMap<>();
|
||||||
|
|
||||||
|
//TODO config version
|
||||||
|
|
||||||
|
// The order in this file should match the order in config.yml so that it's easy to check that everything is covered
|
||||||
|
|
||||||
|
// ********************* General *********************
|
||||||
|
Settings.metrics = plugin.getConfig().getBoolean("general.metrics", true);
|
||||||
|
Settings.checkUpdates = plugin.getConfig().getBoolean("general.check-updates", true);
|
||||||
|
|
||||||
|
//loadLocales(plugin);
|
||||||
|
Settings.defaultLanguage = plugin.getConfig().getString("general.default-language", "en-US");
|
||||||
|
//if(!plugin.getLocales().containsKey(Settings.defaultLanguage)) errors.put(ConfigError.UNKNOWN_LANGUAGE, Settings.defaultLanguage);
|
||||||
|
|
||||||
|
Settings.useEconomy = plugin.getConfig().getBoolean("general.use-economy", true);
|
||||||
|
Settings.startingMoney = plugin.getConfig().getDouble("general.starting-money", 10.0);
|
||||||
|
//Settings.useControlPanel = plugin.getConfig().getBoolean("general.use-control-panel", true);
|
||||||
|
|
||||||
|
// Purge
|
||||||
|
Settings.purgeMaxIslandLevel = plugin.getConfig().getInt("general.purge.max-island-level", 50);
|
||||||
|
if(Settings.purgeMaxIslandLevel < 0) errors.put(ConfigError.PURGE_ISLAND_LEVEL_TOO_LOW, Settings.purgeMaxIslandLevel);
|
||||||
|
Settings.purgeRemoveUserData = plugin.getConfig().getBoolean("general.purge.remove-user-data", false);
|
||||||
|
|
||||||
|
// Database
|
||||||
|
String dbType = plugin.getConfig().getString("general.database.type","FLATFILE");
|
||||||
|
boolean found = false;
|
||||||
|
for (DatabaseType type: DatabaseType.values()) {
|
||||||
|
if (type.name().equals(dbType.toUpperCase())) {
|
||||||
|
Settings.databaseType = type;
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
plugin.getLogger().severe("Database type not found! Using FLATFILE");
|
||||||
|
Settings.databaseType = DatabaseType.FLATFILE;
|
||||||
|
}
|
||||||
|
Settings.dbHost = plugin.getConfig().getString("general.database.host", "localhost");
|
||||||
|
Settings.dbPort = plugin.getConfig().getInt("general.database.port",3306);
|
||||||
|
Settings.dbName = plugin.getConfig().getString("general.database.name", "BSkyBlock");
|
||||||
|
Settings.dbUsername = plugin.getConfig().getString("general.database.username");
|
||||||
|
Settings.dbPassword = plugin.getConfig().getString("general.database.password");
|
||||||
|
|
||||||
|
|
||||||
|
Settings.recoverSuperFlat = plugin.getConfig().getBoolean("general.recover-super-flat", false);
|
||||||
|
Settings.muteDeathMessages = plugin.getConfig().getBoolean("general.mute-death-messages", false);
|
||||||
|
//Settings.ftbAutoActivator = plugin.getConfig().getBoolean("general.FTB-auto-activator", false);
|
||||||
|
Settings.allowObsidianScooping = plugin.getConfig().getBoolean("general.allow-obsidian-scooping", true);
|
||||||
|
|
||||||
|
// Allow teleport
|
||||||
|
//Settings.fallingAllowTeleport = plugin.getConfig().getBoolean("general.allow-teleport.falling", true);
|
||||||
|
//Settings.fallingBlockedCommands = plugin.getConfig().getStringList("general.allow-teleport.falling-blocked-commands");
|
||||||
|
//Settings.acidAllowTeleport = plugin.getConfig().getBoolean("general.allow-teleport.acid", true);
|
||||||
|
//Settings.acidBlockedCommands = plugin.getConfig().getStringList("general.allow-teleport.acid-blocked-commands");
|
||||||
|
|
||||||
|
// ********************* World *********************
|
||||||
|
Settings.worldName = plugin.getConfig().getString("world.world-name", "BSkyBlock_world");
|
||||||
|
//TODO check if it is the same than before
|
||||||
|
|
||||||
|
int distance = plugin.getConfig().getInt("world.distance", 208);
|
||||||
|
Settings.islandDistance = Math.round((long)distance/16) * 16;
|
||||||
|
if(distance < 48) errors.put(ConfigError.ISLAND_DISTANCE_TOO_LOW, Settings.islandDistance);
|
||||||
|
|
||||||
|
Settings.islandProtectionRange = plugin.getConfig().getInt("world.protection-range", 100);
|
||||||
|
if(Settings.islandProtectionRange < 0) errors.put(ConfigError.PROTECTION_RANGE_TOO_LOW, Settings.islandProtectionRange);
|
||||||
|
if(Settings.islandProtectionRange > Settings.islandDistance) errors.put(ConfigError.PROTECTION_RANGE_HIGHER_THAN_ISLAND_DISTANCE, Settings.islandProtectionRange);
|
||||||
|
|
||||||
|
//Settings.startX = plugin.getConfig().getInt("world.start-x", 0);
|
||||||
|
//Settings.startZ = plugin.getConfig().getInt("world.start-z", 0);
|
||||||
|
Settings.islandHeight = plugin.getConfig().getInt("world.island-height", 120);
|
||||||
|
if(Settings.islandHeight < 5) errors.put(ConfigError.ISLAND_HEIGHT_TOO_LOW, Settings.islandHeight);
|
||||||
|
Settings.seaHeight = plugin.getConfig().getInt("world.sea-height", 0);
|
||||||
|
|
||||||
|
Settings.maxIslands = plugin.getConfig().getInt("world.max-islands", 0);
|
||||||
|
|
||||||
|
// Nether
|
||||||
|
Settings.netherGenerate = plugin.getConfig().getBoolean("world.nether.generate", true);
|
||||||
|
Settings.netherIslands = plugin.getConfig().getBoolean("world.nether.islands", true);
|
||||||
|
Settings.netherTrees = plugin.getConfig().getBoolean("world.nether.trees", true);
|
||||||
|
Settings.netherRoof = plugin.getConfig().getBoolean("world.nether.roof", true);
|
||||||
|
Settings.netherSpawnRadius = plugin.getConfig().getInt("world.nether.spawn-radius", 25);
|
||||||
|
if(!Settings.netherIslands){
|
||||||
|
// If the nether is vanilla
|
||||||
|
if(Settings.netherSpawnRadius < 0) errors.put(ConfigError.NETHER_SPAWN_RADIUS_TOO_LOW, Settings.netherSpawnRadius);
|
||||||
|
if(Settings.netherSpawnRadius > 100) errors.put(ConfigError.NETHER_SPAWN_RADIUS_TOO_HIGH, Settings.netherSpawnRadius);
|
||||||
|
}
|
||||||
|
// TODO: add to config
|
||||||
|
Settings.endGenerate = true;
|
||||||
|
Settings.endIslands = false;
|
||||||
|
Settings.limitedBlocks = new HashMap<>();
|
||||||
|
Settings.defaultWorldSettings = new HashMap<>();
|
||||||
|
for (SettingsFlag flag: SettingsFlag.values()) {
|
||||||
|
Settings.defaultWorldSettings.put(flag, false);
|
||||||
|
}
|
||||||
|
Settings.defaultWorldSettings.put(SettingsFlag.ANIMAL_SPAWN, true);
|
||||||
|
Settings.defaultWorldSettings.put(SettingsFlag.MONSTER_SPAWN, true);
|
||||||
|
|
||||||
|
// Team
|
||||||
|
Settings.maxTeamSize = plugin.getConfig().getInt("island.max-team-size", 4);
|
||||||
|
//Settings.leaveConfirmation = plugin.getConfig().getBoolean("require-confirmation.leave", true);
|
||||||
|
//Settings.leaveConfirmWait = plugin.getConfig().getLong("require-confirmation.leave-wait", 10) * 20;
|
||||||
|
|
||||||
|
//TODO end loading
|
||||||
|
|
||||||
|
//TODO not setup error report
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadLocales(BSkyBlock plugin){
|
||||||
|
//TODO Imperatively load en-US locale
|
||||||
|
}
|
||||||
|
}
|
69
src/test/java/bskyblock/TestIslandCommand.java
Normal file
69
src/test/java/bskyblock/TestIslandCommand.java
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package bskyblock;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
|
||||||
|
import us.tastybento.bskyblock.api.commands.CompositeCommand;
|
||||||
|
import us.tastybento.bskyblock.api.commands.User;
|
||||||
|
import us.tastybento.bskyblock.commands.IslandCommand;
|
||||||
|
import us.tastybento.bskyblock.config.Settings;
|
||||||
|
|
||||||
|
public class TestIslandCommand {
|
||||||
|
private final UUID playerUUID = UUID.randomUUID();
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
|
||||||
|
//Plugin plugin = mock(Plugin.class);
|
||||||
|
//Mockito.doReturn(plugin).when(BSkyBlock.getPlugin());
|
||||||
|
//Mockito.when().thenReturn(plugin);
|
||||||
|
World world = mock(World.class);
|
||||||
|
|
||||||
|
|
||||||
|
//Mockito.when(world.getWorldFolder()).thenReturn(worldFile);
|
||||||
|
|
||||||
|
Server server = mock(Server.class);
|
||||||
|
Mockito.when(server.getLogger()).thenReturn(Logger.getAnonymousLogger());
|
||||||
|
Mockito.when(server.getWorld("world")).thenReturn(world);
|
||||||
|
Mockito.when(server.getVersion()).thenReturn("TestTestMocking");
|
||||||
|
Mockito.when(server.getVersion()).thenReturn("TestTestMocking");
|
||||||
|
Bukkit.setServer(server);
|
||||||
|
Mockito.when(Bukkit.getLogger()).thenReturn(Logger.getAnonymousLogger());
|
||||||
|
|
||||||
|
//Mockito.doReturn(Logger.getAnonymousLogger()).when(plugin.getLogger());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void command() {
|
||||||
|
IslandCommand islandCommand = new IslandCommand();
|
||||||
|
User user = User.getInstance(playerUUID);
|
||||||
|
// Test basic execution
|
||||||
|
assertEquals(islandCommand.execute(user, null), true);
|
||||||
|
assertEquals(islandCommand.getLabel(), Settings.ISLANDCOMMAND);
|
||||||
|
assertEquals(islandCommand.getAliases().size(), 1);
|
||||||
|
assertEquals(islandCommand.getAliases().get(0), "is");
|
||||||
|
assertEquals(islandCommand.isOnlyPlayer(), true);
|
||||||
|
assertEquals(islandCommand.getParent(), null);
|
||||||
|
//TODO: assertEquals(islandCommand.getPermission(), "");
|
||||||
|
// Check commands and aliases match to correct class
|
||||||
|
for (Entry<String, CompositeCommand> command : islandCommand.getSubCommands().entrySet()) {
|
||||||
|
assertEquals(islandCommand.getSubCommand(command.getKey()), command.getValue());
|
||||||
|
// Check aliases
|
||||||
|
for (String alias : command.getValue().getAliases()) {
|
||||||
|
assertEquals(islandCommand.getSubCommand(alias), command.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -22,6 +22,7 @@ public class TestTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
/*
|
||||||
World world = mock(World.class);
|
World world = mock(World.class);
|
||||||
|
|
||||||
|
|
||||||
@ -33,9 +34,10 @@ public class TestTest {
|
|||||||
Mockito.when(server.getVersion()).thenReturn("TestTestMocking");
|
Mockito.when(server.getVersion()).thenReturn("TestTestMocking");
|
||||||
Mockito.when(server.getVersion()).thenReturn("TestTestMocking");
|
Mockito.when(server.getVersion()).thenReturn("TestTestMocking");
|
||||||
Bukkit.setServer(server);
|
Bukkit.setServer(server);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
@Test
|
@Test
|
||||||
public void createAndSave() {
|
public void createAndSave() {
|
||||||
|
|
||||||
@ -47,6 +49,5 @@ public class TestTest {
|
|||||||
.build();
|
.build();
|
||||||
assertEquals(playerUUID, event.getPlayerUUID());
|
assertEquals(playerUUID, event.getPlayerUUID());
|
||||||
|
|
||||||
}
|
}*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user