mirror of
https://github.com/filoghost/ChestCommands.git
synced 2024-11-26 12:05:45 +01:00
Fix view permission not preventing players from clicking an icon
This commit is contained in:
parent
10f62a1cfb
commit
a01789dfa3
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) filoghost and contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
package me.filoghost.chestcommands.icon;
|
||||||
|
|
||||||
|
import me.filoghost.commons.Strings;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class IconPermission {
|
||||||
|
|
||||||
|
private final String permission;
|
||||||
|
private final boolean negated;
|
||||||
|
|
||||||
|
public IconPermission(String permission) {
|
||||||
|
if (permission != null) {
|
||||||
|
permission = permission.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Strings.isEmpty(permission)) {
|
||||||
|
this.permission = null;
|
||||||
|
negated = false;
|
||||||
|
} else {
|
||||||
|
if (permission.startsWith("-")) {
|
||||||
|
this.permission = permission.substring(1);
|
||||||
|
negated = true;
|
||||||
|
} else {
|
||||||
|
this.permission = permission;
|
||||||
|
negated = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasPermission(Player player) {
|
||||||
|
if (isEmpty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (negated) {
|
||||||
|
return !player.hasPermission(permission);
|
||||||
|
} else {
|
||||||
|
return player.hasPermission(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return this.permission == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasPermission(Player player, IconPermission permission) {
|
||||||
|
return permission == null || permission.hasPermission(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -10,9 +10,9 @@ import me.filoghost.chestcommands.action.Action;
|
|||||||
import me.filoghost.chestcommands.action.OpenMenuAction;
|
import me.filoghost.chestcommands.action.OpenMenuAction;
|
||||||
import me.filoghost.chestcommands.api.ClickResult;
|
import me.filoghost.chestcommands.api.ClickResult;
|
||||||
import me.filoghost.chestcommands.api.MenuInventory;
|
import me.filoghost.chestcommands.api.MenuInventory;
|
||||||
|
import me.filoghost.chestcommands.config.Lang;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredExpLevel;
|
import me.filoghost.chestcommands.icon.requirement.RequiredExpLevel;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredMoney;
|
import me.filoghost.chestcommands.icon.requirement.RequiredMoney;
|
||||||
import me.filoghost.chestcommands.icon.requirement.RequiredPermission;
|
|
||||||
import me.filoghost.chestcommands.icon.requirement.Requirement;
|
import me.filoghost.chestcommands.icon.requirement.Requirement;
|
||||||
import me.filoghost.chestcommands.icon.requirement.item.RequiredItem;
|
import me.filoghost.chestcommands.icon.requirement.item.RequiredItem;
|
||||||
import me.filoghost.chestcommands.icon.requirement.item.RequiredItems;
|
import me.filoghost.chestcommands.icon.requirement.item.RequiredItems;
|
||||||
@ -27,14 +27,15 @@ import java.util.List;
|
|||||||
|
|
||||||
public class InternalConfigurableIcon extends BaseConfigurableIcon implements RefreshableIcon {
|
public class InternalConfigurableIcon extends BaseConfigurableIcon implements RefreshableIcon {
|
||||||
|
|
||||||
private RequiredPermission viewPermission;
|
private IconPermission viewPermission;
|
||||||
|
private IconPermission clickPermission;
|
||||||
|
private String noClickPermissionMessage;
|
||||||
|
|
||||||
private RequiredPermission clickPermission;
|
|
||||||
private RequiredMoney requiredMoney;
|
private RequiredMoney requiredMoney;
|
||||||
private RequiredExpLevel requiredExpLevel;
|
private RequiredExpLevel requiredExpLevel;
|
||||||
private RequiredItems requiredItems;
|
private RequiredItems requiredItems;
|
||||||
private ImmutableList<Action> clickActions;
|
|
||||||
|
|
||||||
|
private ImmutableList<Action> clickActions;
|
||||||
private ClickResult clickResult;
|
private ClickResult clickResult;
|
||||||
|
|
||||||
public InternalConfigurableIcon(Material material) {
|
public InternalConfigurableIcon(Material material) {
|
||||||
@ -44,7 +45,7 @@ public class InternalConfigurableIcon extends BaseConfigurableIcon implements Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canViewIcon(Player player) {
|
public boolean canViewIcon(Player player) {
|
||||||
return viewPermission == null || viewPermission.hasPermission(player);
|
return IconPermission.hasPermission(player, viewPermission);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasViewPermission() {
|
public boolean hasViewPermission() {
|
||||||
@ -52,24 +53,15 @@ public class InternalConfigurableIcon extends BaseConfigurableIcon implements Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setClickPermission(String permission) {
|
public void setClickPermission(String permission) {
|
||||||
if (this.clickPermission == null) {
|
this.clickPermission = new IconPermission(permission);
|
||||||
this.clickPermission = new RequiredPermission();
|
|
||||||
}
|
|
||||||
this.clickPermission.setPermission(permission);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNoClickPermissionMessage(String clickNoPermissionMessage) {
|
public void setNoClickPermissionMessage(String noClickPermissionMessage) {
|
||||||
if (this.clickPermission == null) {
|
this.noClickPermissionMessage = noClickPermissionMessage;
|
||||||
this.clickPermission = new RequiredPermission();
|
|
||||||
}
|
|
||||||
this.clickPermission.setNoPermissionMessage(clickNoPermissionMessage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setViewPermission(String viewPermission) {
|
public void setViewPermission(String viewPermission) {
|
||||||
if (this.viewPermission == null) {
|
this.viewPermission = new IconPermission(viewPermission);
|
||||||
this.viewPermission = new RequiredPermission();
|
|
||||||
}
|
|
||||||
this.viewPermission.setPermission(viewPermission);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRequiredMoney(double requiredMoney) {
|
public void setRequiredMoney(double requiredMoney) {
|
||||||
@ -123,8 +115,21 @@ public class InternalConfigurableIcon extends BaseConfigurableIcon implements Re
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClickResult onClick(MenuInventory menuInventory, Player player) {
|
public ClickResult onClick(MenuInventory menuInventory, Player player) {
|
||||||
|
if (!IconPermission.hasPermission(player, viewPermission)) {
|
||||||
|
return ClickResult.KEEP_OPEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IconPermission.hasPermission(player, clickPermission)) {
|
||||||
|
if (noClickPermissionMessage != null) {
|
||||||
|
player.sendMessage(noClickPermissionMessage);
|
||||||
|
} else {
|
||||||
|
player.sendMessage(Lang.default_no_icon_permission);
|
||||||
|
}
|
||||||
|
return clickResult;
|
||||||
|
}
|
||||||
|
|
||||||
// Check all the requirements
|
// Check all the requirements
|
||||||
Requirement[] requirements = {clickPermission, requiredMoney, requiredExpLevel, requiredItems};
|
Requirement[] requirements = {requiredMoney, requiredExpLevel, requiredItems};
|
||||||
boolean hasAllRequirements = Requirement.hasAllCosts(player, requirements);
|
boolean hasAllRequirements = Requirement.hasAllCosts(player, requirements);
|
||||||
if (!hasAllRequirements) {
|
if (!hasAllRequirements) {
|
||||||
return clickResult;
|
return clickResult;
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) filoghost and contributors
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
*/
|
|
||||||
package me.filoghost.chestcommands.icon.requirement;
|
|
||||||
|
|
||||||
import me.filoghost.chestcommands.config.Lang;
|
|
||||||
import me.filoghost.commons.Strings;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class RequiredPermission implements Requirement {
|
|
||||||
|
|
||||||
private String permission;
|
|
||||||
private boolean negated;
|
|
||||||
private String noPermissionMessage;
|
|
||||||
|
|
||||||
public void setPermission(String permission) {
|
|
||||||
if (permission != null) {
|
|
||||||
permission = permission.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Strings.isEmpty(permission)) {
|
|
||||||
this.permission = null;
|
|
||||||
negated = false;
|
|
||||||
} else {
|
|
||||||
if (permission.startsWith("-")) {
|
|
||||||
this.permission = permission.substring(1);
|
|
||||||
negated = true;
|
|
||||||
} else {
|
|
||||||
this.permission = permission;
|
|
||||||
negated = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setNoPermissionMessage(String noPermissionMessage) {
|
|
||||||
this.noPermissionMessage = noPermissionMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasCost(Player player) {
|
|
||||||
if (hasPermission(player)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
if (noPermissionMessage != null) {
|
|
||||||
player.sendMessage(noPermissionMessage);
|
|
||||||
} else {
|
|
||||||
player.sendMessage(Lang.default_no_icon_permission);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasPermission(Player player) {
|
|
||||||
if (isEmpty()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (negated) {
|
|
||||||
return !player.hasPermission(permission);
|
|
||||||
} else {
|
|
||||||
return player.hasPermission(permission);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean takeCost(Player player) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEmpty() {
|
|
||||||
return this.permission == null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user