Refactoring

This commit is contained in:
filoghost 2020-06-11 18:39:10 +02:00
parent 27c05ece6a
commit 93724b5096
5 changed files with 45 additions and 74 deletions

View File

@ -89,17 +89,16 @@ public class CommandHandler extends CommandFramework {
Player target = null; Player target = null;
if (!(sender instanceof Player)) { if (sender instanceof Player) {
CommandValidate.minLength(args, 3, "You must specify a player from the console.");
target = Bukkit.getPlayerExact(args[2]);
} else {
if (args.length > 2) { if (args.length > 2) {
CommandValidate.isTrue(sender.hasPermission(Permissions.COMMAND_BASE + "open.others"), "You don't have permission to open menus for others."); CommandValidate.isTrue(sender.hasPermission(Permissions.COMMAND_BASE + "open.others"), "You don't have permission to open menus for others.");
target = Bukkit.getPlayerExact(args[2]); target = Bukkit.getPlayerExact(args[2]);
} else { } else {
target = (Player) sender; target = (Player) sender;
} }
} else {
CommandValidate.minLength(args, 3, "You must specify a player from the console.");
target = Bukkit.getPlayerExact(args[2]);
} }
CommandValidate.notNull(target, "That player is not online."); CommandValidate.notNull(target, "That player is not online.");

View File

@ -18,6 +18,8 @@ import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.filoghost.chestcommands.ChestCommands; import me.filoghost.chestcommands.ChestCommands;
import me.filoghost.chestcommands.MenuManager; import me.filoghost.chestcommands.MenuManager;
import me.filoghost.chestcommands.action.Action;
import me.filoghost.chestcommands.action.OpenMenuAction;
import me.filoghost.chestcommands.api.impl.ConfigurableIconImpl; import me.filoghost.chestcommands.api.impl.ConfigurableIconImpl;
import me.filoghost.chestcommands.bridge.EconomyBridge; import me.filoghost.chestcommands.bridge.EconomyBridge;
import me.filoghost.chestcommands.util.MaterialsHelper; import me.filoghost.chestcommands.util.MaterialsHelper;
@ -37,6 +39,8 @@ public class AdvancedIcon extends ConfigurableIconImpl {
private double moneyPrice; private double moneyPrice;
private int expLevelsPrice; private int expLevelsPrice;
private List<RequiredItem> requiredItems; private List<RequiredItem> requiredItems;
private List<Action> clickActions;
private boolean hasOpenMenuAction;
private boolean canClickIcon(Player player) { private boolean canClickIcon(Player player) {
if (permission == null) { if (permission == null) {
@ -126,6 +130,24 @@ public class AdvancedIcon extends ConfigurableIconImpl {
this.requiredItems = requiredItems; this.requiredItems = requiredItems;
} }
public List<Action> getClickActions() {
return clickActions;
}
public void setClickActions(List<Action> clickActions) {
this.clickActions = clickActions;
hasOpenMenuAction = false;
if (clickActions != null) {
for (Action action : clickActions) {
if (action instanceof OpenMenuAction) {
// Fix GUI closing if KEEP-OPEN is not set, and a command should open another GUI
hasOpenMenuAction = true;
}
}
}
}
@Override @Override
public boolean onClick(Player player) { public boolean onClick(Player player) {
@ -162,7 +184,7 @@ public class AdvancedIcon extends ConfigurableIconImpl {
if (requiredItems != null) { if (requiredItems != null) {
boolean notHasItem = false; boolean notHasItem = false;
for (RequiredItem item : requiredItems) { for (RequiredItem item : requiredItems) {
if (!item.hasItem(player)) { if (!item.isItemContainedIn(player.getInventory())) {
notHasItem = true; notHasItem = true;
player.sendMessage(ChestCommands.getLang().no_required_item player.sendMessage(ChestCommands.getLang().no_required_item
.replace("{material}", MaterialsHelper.formatMaterial(item.getMaterial())) .replace("{material}", MaterialsHelper.formatMaterial(item.getMaterial()))
@ -194,7 +216,7 @@ public class AdvancedIcon extends ConfigurableIconImpl {
if (requiredItems != null) { if (requiredItems != null) {
for (RequiredItem item : requiredItems) { for (RequiredItem item : requiredItems) {
item.takeItem(player); item.takeItemFrom(player.getInventory());
} }
} }
@ -202,6 +224,16 @@ public class AdvancedIcon extends ConfigurableIconImpl {
MenuManager.refreshOpenMenu(player); MenuManager.refreshOpenMenu(player);
} }
if (clickActions != null) {
for (Action action : clickActions) {
action.execute(player);
}
}
if (hasOpenMenuAction) {
return false;
}
return super.onClick(player); return super.onClick(player);
} }

View File

@ -15,7 +15,7 @@
package me.filoghost.chestcommands.internal; package me.filoghost.chestcommands.internal;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import me.filoghost.chestcommands.util.Preconditions; import me.filoghost.chestcommands.util.Preconditions;
@ -62,10 +62,10 @@ public class RequiredItem {
return data == this.dataValue; return data == this.dataValue;
} }
public boolean hasItem(Player player) { public boolean isItemContainedIn(Inventory inventory) {
int amountFound = 0; int amountFound = 0;
for (ItemStack item : player.getInventory().getContents()) { for (ItemStack item : inventory.getContents()) {
if (item != null && item.getType() == material && isValidDataValue(item.getDurability())) { if (item != null && item.getType() == material && isValidDataValue(item.getDurability())) {
amountFound += item.getAmount(); amountFound += item.getAmount();
} }
@ -74,14 +74,14 @@ public class RequiredItem {
return amountFound >= amount; return amountFound >= amount;
} }
public boolean takeItem(Player player) { public boolean takeItemFrom(Inventory inventory) {
if (amount <= 0) { if (amount <= 0) {
return true; return true;
} }
int itemsToTake = amount; //start from amount and decrease int itemsToTake = amount; //start from amount and decrease
ItemStack[] contents = player.getInventory().getContents(); ItemStack[] contents = inventory.getContents();
ItemStack current = null; ItemStack current = null;
@ -95,7 +95,7 @@ public class RequiredItem {
return true; return true;
} else { } else {
itemsToTake -= current.getAmount(); itemsToTake -= current.getAmount();
player.getInventory().setItem(i, new ItemStack(Material.AIR)); inventory.setItem(i, new ItemStack(Material.AIR));
} }
} }

View File

@ -1,59 +0,0 @@
/*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package me.filoghost.chestcommands.internal;
import org.bukkit.entity.Player;
import me.filoghost.chestcommands.action.Action;
import me.filoghost.chestcommands.action.OpenMenuAction;
import me.filoghost.chestcommands.api.ClickHandler;
import me.filoghost.chestcommands.api.ClickResult;
import java.util.List;
public class RunActionsClickHandler implements ClickHandler {
private List<Action> actions;
private boolean forceClose;
public RunActionsClickHandler(List<Action> actions) {
this.actions = actions;
if (actions != null && actions.size() > 0) {
for (Action action : actions) {
if (action instanceof OpenMenuAction) {
// Fix GUI closing if KEEP-OPEN is not set, and a command should open another GUI
this.forceClose = true;
}
}
}
}
@Override
public ClickResult onClick(Player player) {
if (actions != null && actions.size() > 0) {
for (Action action : actions) {
action.execute(player);
}
}
if (forceClose) {
return ClickResult.CLOSE;
}
return ClickResult.DEFAULT;
}
}

View File

@ -26,7 +26,6 @@ import me.filoghost.chestcommands.ChestCommands;
import me.filoghost.chestcommands.action.Action; import me.filoghost.chestcommands.action.Action;
import me.filoghost.chestcommands.config.AsciiPlaceholders; import me.filoghost.chestcommands.config.AsciiPlaceholders;
import me.filoghost.chestcommands.config.ConfigUtil; import me.filoghost.chestcommands.config.ConfigUtil;
import me.filoghost.chestcommands.internal.RunActionsClickHandler;
import me.filoghost.chestcommands.internal.AdvancedIcon; import me.filoghost.chestcommands.internal.AdvancedIcon;
import me.filoghost.chestcommands.internal.RequiredItem; import me.filoghost.chestcommands.internal.RequiredItem;
import me.filoghost.chestcommands.parser.EnchantmentParser.EnchantmentDetails; import me.filoghost.chestcommands.parser.EnchantmentParser.EnchantmentDetails;
@ -196,7 +195,7 @@ public class IconParser {
} }
if (!actions.isEmpty()) { if (!actions.isEmpty()) {
icon.setClickHandler(new RunActionsClickHandler(actions)); icon.setClickActions(actions);
} }
} }