Command Reformatting

Added /autocraft command that provides almost the same functionality as /chestlink but for AutoCraft groups.
Rename classes to make more sense.
This commit is contained in:
jameslfc19 2020-06-27 16:55:07 +01:00
parent 5c6898166a
commit 90b970a111
3 changed files with 267 additions and 89 deletions

View File

@ -1,6 +1,7 @@
package com.jamesdpeters.minecraft.chests; package com.jamesdpeters.minecraft.chests;
import com.jamesdpeters.minecraft.chests.commands.RemoteChestCommand; import com.jamesdpeters.minecraft.chests.commands.AutoCraftCommand;
import com.jamesdpeters.minecraft.chests.commands.ChestLinkCommand;
import com.jamesdpeters.minecraft.chests.crafting.Crafting; import com.jamesdpeters.minecraft.chests.crafting.Crafting;
import com.jamesdpeters.minecraft.chests.listeners.ChestLinkListener; import com.jamesdpeters.minecraft.chests.listeners.ChestLinkListener;
import com.jamesdpeters.minecraft.chests.listeners.HopperListener; import com.jamesdpeters.minecraft.chests.listeners.HopperListener;
@ -37,7 +38,9 @@ import org.bukkit.plugin.java.annotation.plugin.author.Author;
@ApiVersion(ApiVersion.Target.v1_14) @ApiVersion(ApiVersion.Target.v1_14)
@Description(value = "Minecraft Spigot mod that enhances chests and hoppers, with ChestLinks and Hopper filters!") @Description(value = "Minecraft Spigot mod that enhances chests and hoppers, with ChestLinks and Hopper filters!")
@Author(value = "jameslfc19") @Author(value = "jameslfc19")
@Commands(@Command(name = "chestlink", desc = "Chests++ Commands.", aliases = {"cl"}, usage = "Use /chestlink help for more info.")) @Commands({
@Command(name = "chestlink", desc = "Chests++ ChestLink Commands.", aliases = {"cl"}, usage = "Use /chestlink help for more info."),
@Command(name = "autocraft", desc = "Chests++ AutoCraft Commands.", aliases = {"ac"}, usage = "Use /autocraft help for more info.")})
@Permission(name = Permissions.ADD, desc = "Gives permission to add ChestLinks!", defaultValue = PermissionDefault.TRUE) @Permission(name = Permissions.ADD, desc = "Gives permission to add ChestLinks!", defaultValue = PermissionDefault.TRUE)
@Permission(name = Permissions.OPEN, desc = "Gives permission to open ChestLinks!", defaultValue = PermissionDefault.TRUE) @Permission(name = Permissions.OPEN, desc = "Gives permission to open ChestLinks!", defaultValue = PermissionDefault.TRUE)
@Permission(name = Permissions.MENU, desc = "Gives permission to open the ChestLink menu!", defaultValue = PermissionDefault.TRUE) @Permission(name = Permissions.MENU, desc = "Gives permission to open the ChestLink menu!", defaultValue = PermissionDefault.TRUE)
@ -73,7 +76,8 @@ public class ChestsPlusPlus extends JavaPlugin {
Crafting.load(); Crafting.load();
PLUGIN = this; PLUGIN = this;
new RemoteChestCommand().register(this); new ChestLinkCommand().register(this);
new AutoCraftCommand().register(this);
getServer().getPluginManager().registerEvents(new ChestLinkListener(),this); getServer().getPluginManager().registerEvents(new ChestLinkListener(),this);
getServer().getPluginManager().registerEvents(new InventoryListener(),this); getServer().getPluginManager().registerEvents(new InventoryListener(),this);
getServer().getPluginManager().registerEvents(new HopperListener(),this); getServer().getPluginManager().registerEvents(new HopperListener(),this);

View File

@ -0,0 +1,255 @@
package com.jamesdpeters.minecraft.chests.commands;
import com.jamesdpeters.minecraft.chests.misc.Messages;
import com.jamesdpeters.minecraft.chests.misc.Permissions;
import com.jamesdpeters.minecraft.chests.misc.Utils;
import com.jamesdpeters.minecraft.chests.serialize.AutoCraftingStorage;
import com.jamesdpeters.minecraft.chests.serialize.Config;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class AutoCraftCommand extends ServerCommand {
private enum OPTIONS {
ADD("/autocraft add <group>", "Create/add a Crafting Table to an AutoCraft group"),
HELP("/autocraft help","List of commands and their uses!"),
LIST("/autocraft list","Lists all AutoCraft groups that you own!"),
MEMBER("/autocraft member [add/remove <group> <player>] or [list <group>]","Add, remove or list members of a group"),
MENU("/autocraft menu","Open the AutoCraft menu to display all groups!"),
OPEN("/autocraft open <Group>","Open the workbench of an AutoCraft group"),
REMOVE("/autocraft remove <Group>", "Delete an AutoCraft group and drop all the Crafting Tables!"),
RENAME("/autocraft rename <group> <new-name>","Rename an AutoCraft group."),
SETPUBLIC("/autocraft setpublic <group> <true/false>", "Set an AutoCraft group to be accessible by anyone.");
String description, commandHelp;
static List<String> valuesList;
static {
valuesList = Stream.of(OPTIONS.values()).map(OPTIONS::toString).collect(Collectors.toList());
}
OPTIONS( String commandHelp, String description){
this.commandHelp = commandHelp;
this.description = description;
}
@Override
public String toString() {
return super.toString().toLowerCase();
}
}
@Override
public String getCommandName() {
return "autocraft";
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(!(sender instanceof Player)){
sender.sendMessage("Only a player can use this command");
return false;
}
Player player = (Player) sender;
if(args != null && args.length > 0) {
switch (OPTIONS.valueOf(args[0].toUpperCase())){
case HELP:
for(OPTIONS option : OPTIONS.values()){
if(!option.equals(OPTIONS.HELP)) {
player.sendMessage(ChatColor.RED + option.commandHelp);
player.sendMessage(ChatColor.WHITE + option.description);
}
}
return true;
case ADD:
if(args.length > 1){
if (player.hasPermission(Permissions.AUTOCRAFT_ADD)) {
Block targetBlock = player.getTargetBlockExact(5);
if (targetBlock != null) Utils.createAutoCraftChest(player, targetBlock, args[2]);
else Messages.MUST_LOOK_AT_CHEST(player);
} else {
Messages.NO_PERMISSION(player);
}
return true;
} else {
player.sendMessage(ChatColor.RED+ OPTIONS.ADD.commandHelp);
player.sendMessage(ChatColor.RED+ OPTIONS.ADD.description);
return true;
}
case OPEN:
if(args.length > 1){
if(sender.hasPermission(Permissions.AUTOCRAFT_OPEN)) {
AutoCraftingStorage invs;
if(args[1].contains(":")){
invs = Config.getAutoCraftStorage(player,args[1]);
} else {
invs = Config.getAutoCraftStorage(player.getUniqueId(), args[1]);
}
if(invs != null) Utils.openInventory(player, invs.getInventory());
return true;
} else {
Messages.NO_PERMISSION(player);
return true;
}
} else {
player.sendMessage(ChatColor.RED+ OPTIONS.OPEN.commandHelp);
player.sendMessage(ChatColor.RED+ OPTIONS.OPEN.description);
return true;
}
case MENU:
if(sender.hasPermission(Permissions.MENU)) {
//TODO Add AutoCraft menu.
//ChestLinkMenu.getMenu(player).open(player);
return true;
} else {
Messages.NO_PERMISSION(player);
return true;
}
case LIST:
Messages.LIST_AUTOCRAFT(player);
return true;
case REMOVE:
if(args.length > 1) {
if (sender.hasPermission(Permissions.AUTOCRAFT_REMOVE)) {
Config.removeAutoCraft(player, args[2]);
return true;
} else {
Messages.NO_PERMISSION(player);
return true;
}
} else {
player.sendMessage(ChatColor.RED+ OPTIONS.REMOVE.commandHelp);
player.sendMessage(ChatColor.RED+ OPTIONS.REMOVE.description);
return true;
}
case MEMBER:
return memberCommand(args, sender);
case SETPUBLIC: {
if (args.length > 2) {
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[1]);
if (storage != null) {
boolean setPublic = Boolean.parseBoolean(args[2]);
storage.setPublic(setPublic);
Messages.SET_PUBLIC(player, storage);
return true;
} else {
Bukkit.broadcastMessage("Storage null");
}
} else {
player.sendMessage(ChatColor.RED + OPTIONS.SETPUBLIC.commandHelp);
player.sendMessage(ChatColor.RED + OPTIONS.SETPUBLIC.description);
return true;
}
}
case RENAME: {
if(args.length > 2){
String group = args[1];
String newIdentifier = args[2];
if(!Config.renameAutoCraftStorage(player,group,newIdentifier)){
player.sendMessage(ChatColor.RED + OPTIONS.RENAME.commandHelp);
player.sendMessage(ChatColor.RED + OPTIONS.RENAME.description);
}
return true;
}
}
}
}
return false;
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
if((sender instanceof Player)) {
Player player = (Player) sender;
if (args.length == 1) {
return OPTIONS.valuesList;
}
if(args.length == 2) {
try {
switch (OPTIONS.valueOf(args[0].toUpperCase())) {
case ADD:
case OPEN:
return Utils.getAutoCraftStorageOpenableList(player);
case REMOVE:
case RENAME:
return Utils.getAutoCraftStorageList(player);
case MEMBER:
return Arrays.asList("add","remove","list");
}
} catch (IllegalArgumentException ignored) { }
}
if(args.length == 3) {
try {
switch (OPTIONS.valueOf(args[0].toUpperCase())) {
case MEMBER:
return Utils.getAutoCraftStorageList(player);
}
} catch (IllegalArgumentException ignored) { }
}
if(args.length == 4) {
try {
switch (OPTIONS.valueOf(args[0].toUpperCase())) {
case MEMBER:
return Utils.getOnlinePlayers();
}
} catch (IllegalArgumentException ignored) { }
}
}
return null;
}
private static boolean memberCommand(String[] args, CommandSender sender){
Player player = (Player) sender;
if(args.length > 3){
if(sender.hasPermission(Permissions.MEMBER)){
if(args[1].equals("add")) {
Player toAdd = Bukkit.getPlayer(args[3]);
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[2]);
if (storage != null && storage.addMember(toAdd))
Messages.ADDED_MEMBER(player, storage, args[3]);
else Messages.UNABLE_TO_ADD_MEMBER(player, args[3]);
} else if(args[1].equals("remove")){
Player toAdd = Bukkit.getPlayer(args[3]);
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[2]);
if(storage != null && storage.removeMember(toAdd))
Messages.REMOVE_MEMBER(player, storage, args[3]);
else Messages.UNABLE_TO_REMOVE_MEMBER(player,args[3]);
} else {
player.sendMessage(ChatColor.RED+ OPTIONS.MEMBER.commandHelp);
player.sendMessage(ChatColor.RED+ OPTIONS.MEMBER.description);
}
} else {
Messages.NO_PERMISSION(player);
}
return true;
} else if(args.length > 2){
if(sender.hasPermission(Permissions.MEMBER)){
if(args[1].equals("list")) {
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[2]);
if(storage != null){
Messages.LIST_MEMBERS(player,storage);
return true;
}
}
}
} else {
player.sendMessage(ChatColor.RED+ OPTIONS.MEMBER.commandHelp);
player.sendMessage(ChatColor.RED+ OPTIONS.MEMBER.description);
return true;
}
return false;
}
}

View File

@ -1,28 +1,25 @@
package com.jamesdpeters.minecraft.chests.commands; package com.jamesdpeters.minecraft.chests.commands;
import com.jamesdpeters.minecraft.chests.crafting.Crafting;
import com.jamesdpeters.minecraft.chests.inventories.ChestLinkMenu; import com.jamesdpeters.minecraft.chests.inventories.ChestLinkMenu;
import com.jamesdpeters.minecraft.chests.serialize.AutoCraftingStorage;
import com.jamesdpeters.minecraft.chests.serialize.Config;
import com.jamesdpeters.minecraft.chests.misc.Messages; import com.jamesdpeters.minecraft.chests.misc.Messages;
import com.jamesdpeters.minecraft.chests.misc.Permissions; import com.jamesdpeters.minecraft.chests.misc.Permissions;
import com.jamesdpeters.minecraft.chests.misc.Utils; import com.jamesdpeters.minecraft.chests.misc.Utils;
import com.jamesdpeters.minecraft.chests.serialize.Config;
import com.jamesdpeters.minecraft.chests.serialize.InventoryStorage; import com.jamesdpeters.minecraft.chests.serialize.InventoryStorage;
import com.jamesdpeters.minecraft.chests.sort.SortMethod; import com.jamesdpeters.minecraft.chests.sort.SortMethod;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;
import java.util.*; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
public class RemoteChestCommand extends ServerCommand { public class ChestLinkCommand extends ServerCommand {
private enum OPTIONS { private enum OPTIONS {
ADD("/chestlink add <group>", "Create/add a chest to a ChestLink group"), ADD("/chestlink add <group>", "Create/add a chest to a ChestLink group"),
@ -160,7 +157,7 @@ public class RemoteChestCommand extends ServerCommand {
return true; return true;
} }
case MEMBER: case MEMBER:
memberCommand(args, sender); return memberCommand(args, sender);
case SETPUBLIC: { case SETPUBLIC: {
if (args.length > 2) { if (args.length > 2) {
InventoryStorage storage = Config.getInventoryStorage(player.getUniqueId(), args[1]); InventoryStorage storage = Config.getInventoryStorage(player.getUniqueId(), args[1]);
@ -189,39 +186,6 @@ public class RemoteChestCommand extends ServerCommand {
return true; return true;
} }
} }
case AUTOCRAFT: {
if(args.length > 2) {
if (args[1].equals("add")) {
if (player.hasPermission(Permissions.AUTOCRAFT_ADD)) {
Block targetBlock = player.getTargetBlockExact(5);
if (targetBlock != null) Utils.createAutoCraftChest(player, targetBlock, args[2]);
else Messages.MUST_LOOK_AT_CHEST(player);
} else {
Messages.NO_PERMISSION(player);
}
return true;
}
if (args[1].equals("remove")) {
if (sender.hasPermission(Permissions.AUTOCRAFT_REMOVE)) {
Config.removeAutoCraft(player, args[2]);
return true;
} else {
Messages.NO_PERMISSION(player);
return true;
}
}
}
if(args.length > 1){
if(args[1].equals("list")){
Messages.LIST_AUTOCRAFT(player);
return true;
}
}
memberAutoCraftCommand(args,sender);
return true;
}
} }
} }
@ -247,7 +211,6 @@ public class RemoteChestCommand extends ServerCommand {
case RENAME: case RENAME:
return Utils.getInventoryStorageList(player); return Utils.getInventoryStorageList(player);
case MEMBER: case MEMBER:
case AUTOCRAFT:
return Arrays.asList("add","remove","list"); return Arrays.asList("add","remove","list");
} }
} catch (IllegalArgumentException ignored) { } } catch (IllegalArgumentException ignored) { }
@ -259,8 +222,6 @@ public class RemoteChestCommand extends ServerCommand {
return Utils.getInventoryStorageList(player); return Utils.getInventoryStorageList(player);
case SORT: case SORT:
return SortMethod.valuesList; return SortMethod.valuesList;
case AUTOCRAFT:
return Utils.getAutoCraftStorageList(player);
} }
} catch (IllegalArgumentException ignored) { } } catch (IllegalArgumentException ignored) { }
} }
@ -317,46 +278,4 @@ public class RemoteChestCommand extends ServerCommand {
} }
return false; return false;
} }
private static boolean memberAutoCraftCommand(String[] args, CommandSender sender){
Player player = (Player) sender;
if(args.length > 4){
if(sender.hasPermission(Permissions.MEMBER)){
if(args[2].equals("add")) {
Player toAdd = Bukkit.getPlayer(args[4]);
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[3]);
if (storage != null && storage.addMember(toAdd))
Messages.ADDED_MEMBER(player, storage, args[4]);
else Messages.UNABLE_TO_ADD_MEMBER(player, args[4]);
} else if(args[2].equals("remove")){
Player toAdd = Bukkit.getPlayer(args[4]);
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[3]);
if(storage != null && storage.removeMember(toAdd))
Messages.REMOVE_MEMBER(player, storage, args[4]);
else Messages.UNABLE_TO_REMOVE_MEMBER(player,args[4]);
} else {
player.sendMessage(ChatColor.RED+OPTIONS.MEMBER.commandHelp);
player.sendMessage(ChatColor.RED+OPTIONS.MEMBER.description);
}
} else {
Messages.NO_PERMISSION(player);
}
return true;
} else if(args.length > 3){
if(sender.hasPermission(Permissions.MEMBER)){
if(args[2].equals("list")) {
AutoCraftingStorage storage = Config.getAutoCraftStorage(player.getUniqueId(), args[3]);
if(storage != null){
Messages.LIST_MEMBERS(player,storage);
return true;
}
}
}
} else {
player.sendMessage(ChatColor.RED+OPTIONS.MEMBER.commandHelp);
player.sendMessage(ChatColor.RED+OPTIONS.MEMBER.description);
return true;
}
return false;
}
} }