UIHandler#canOpen has an additional 'silent' flag now.

master
blablubbabc 2020-10-24 21:52:27 +02:00
parent d05e051348
commit 6166e834ee
13 changed files with 56 additions and 37 deletions

View File

@ -9,6 +9,9 @@ Date format: (YYYY-MM-DD)
* Minor changes to handling failures when trying to create a shopkeeper via Citizens trait. We always inform the player (if there is one), log a warning and delete the trait again now.
* Config: Added some more examples for the 'name-regex' setting to the default config.
Internal:
* Internal API: UIHandler#canOpen has an additional 'silent' flag now.
Internal:
* Moved the installation of Spigot dependencies into a separate script.
* Added support for building with Jitpack. This uses a Maven wrapper with a fixed version, because Jitpack uses a buggy Maven version currently (3.6.1).

View File

@ -30,14 +30,16 @@ public abstract class AbstractAdminShopkeeper extends AbstractShopkeeper impleme
}
@Override
protected boolean canOpen(Player player) {
if (!super.canOpen(player)) return false;
protected boolean canOpen(Player player, boolean silent) {
if (!super.canOpen(player, silent)) return false;
// Check trading permission:
String tradePermission = this.getShopkeeper().getTradePremission();
if (tradePermission != null && !PermissionUtils.hasPermission(player, tradePermission)) {
Log.debug(() -> "Blocked trading UI opening for " + player.getName() + ": Missing custom trade permission '" + tradePermission + "'.");
TextUtils.sendMessage(player, Settings.msgMissingCustomTradePerm);
if (!silent) {
Log.debug(() -> "Blocked trading UI opening for " + player.getName() + ": Missing custom trade permission '" + tradePermission + "'.");
TextUtils.sendMessage(player, Settings.msgMissingCustomTradePerm);
}
return false;
}
return true;

View File

@ -25,9 +25,9 @@ public class RegularAdminShopEditorHandler extends EditorHandler {
}
@Override
protected boolean canOpen(Player player) {
assert player != null;
return super.canOpen(player) && this.getShopkeeper().getType().hasPermission(player);
protected boolean canOpen(Player player, boolean silent) {
if (!super.canOpen(player, silent)) return false;
return this.getShopkeeper().getType().hasPermission(player);
}
@Override

View File

@ -199,7 +199,7 @@ public abstract class AbstractPlayerShopkeeper extends AbstractShopkeeper implem
if (Settings.namingOfPlayerShopsViaItem && Settings.isNamingItem(itemInMainHand)) {
// Check if player can edit this shopkeeper:
PlayerShopEditorHandler editorHandler = (PlayerShopEditorHandler) this.getUIHandler(DefaultUITypes.EDITOR());
if (editorHandler.canOpen(player)) {
if (editorHandler.canOpen(player, false)) {
// Rename with the player's item in hand:
ItemMeta itemMeta = itemInMainHand.getItemMeta(); // Can be null
String newName = (itemMeta != null && itemMeta.hasDisplayName()) ? itemMeta.getDisplayName() : "";

View File

@ -28,8 +28,9 @@ public abstract class PlayerShopEditorHandler extends EditorHandler {
}
@Override
protected boolean canOpen(Player player) {
return super.canOpen(player) && (this.getShopkeeper().isOwner(player) || PermissionUtils.hasPermission(player, ShopkeepersPlugin.BYPASS_PERMISSION));
protected boolean canOpen(Player player, boolean silent) {
if (!super.canOpen(player, silent)) return false;
return (this.getShopkeeper().isOwner(player) || PermissionUtils.hasPermission(player, ShopkeepersPlugin.BYPASS_PERMISSION));
}
@Override

View File

@ -31,16 +31,18 @@ public abstract class PlayerShopTradingHandler extends TradingHandler {
}
@Override
protected boolean canOpen(Player player) {
if (!super.canOpen(player)) return false;
protected boolean canOpen(Player player, boolean silent) {
if (!super.canOpen(player, silent)) return false;
PlayerShopkeeper shopkeeper = this.getShopkeeper();
// Stop opening if trading shall be prevented while the owner is offline:
if (Settings.preventTradingWhileOwnerIsOnline && !PermissionUtils.hasPermission(player, ShopkeepersPlugin.BYPASS_PERMISSION)) {
Player ownerPlayer = shopkeeper.getOwner();
if (ownerPlayer != null) {
Log.debug(() -> "Blocked trade window opening from " + player.getName() + " because the owner is online.");
TextUtils.sendMessage(player, Settings.msgCantTradeWhileOwnerOnline, "owner", ownerPlayer.getName());
if (!silent) {
Log.debug(() -> "Blocked trade window opening for " + player.getName() + ", because the shop owner is online.");
TextUtils.sendMessage(player, Settings.msgCantTradeWhileOwnerOnline, "owner", ownerPlayer.getName());
}
return false;
}
}

View File

@ -80,7 +80,7 @@ public class SKUIRegistry extends AbstractTypeRegistry<AbstractUIType> implement
}
String playerName = player.getName();
if (!uiHandler.canOpen(player)) {
if (!uiHandler.canOpen(player, false)) {
Log.debug(() -> "The player '" + playerName + "' cannot open UI '" + uiIdentifier + "'.");
return false;
}

View File

@ -58,20 +58,23 @@ public abstract class UIHandler {
/**
* Checks whether or not the given player can open this interface.
* <p>
* This gets for example called when a player requests this interface. It should perform the necessary permission
* checks.
* This may for example perform any necessary permission checks.
* <p>
* This gets for example called when a player requests this interface.
*
* @param player
* a player
* the player
* @param silent
* <code>false</code> to inform the player when the access is denied
* @return <code>true</code> if the given player is allowed to open this interface
*/
protected abstract boolean canOpen(Player player);
protected abstract boolean canOpen(Player player, boolean silent);
/**
* Opens the interface window for the given player.
* <p>
* Generally {@link #canOpen(Player)} should be checked before calling this method. However, this method should not
* rely on that.
* Generally {@link #canOpen(Player, boolean)} should be checked before calling this method. However, this method
* should not rely on that.
*
* @param player
* a player

View File

@ -41,7 +41,7 @@ class UIListener implements Listener {
}
@Override
protected boolean canOpen(Player player) {
protected boolean canOpen(Player player, boolean silent) {
return false;
}
};

View File

@ -628,7 +628,7 @@ public abstract class AbstractEditorHandler extends UIHandler {
}
@Override
protected boolean canOpen(Player player) {
protected boolean canOpen(Player player, boolean silent) {
assert player != null;
// Permission for the type of shopkeeper is checked in the AdminShopkeeper specific EditorHandler.
// Owner is checked in the PlayerShopkeeper specific EditorHandler.

View File

@ -9,8 +9,8 @@ import org.bukkit.inventory.InventoryView;
import com.nisovin.shopkeepers.Settings;
import com.nisovin.shopkeepers.api.ShopkeepersPlugin;
import com.nisovin.shopkeepers.shopkeeper.AbstractShopkeeper;
import com.nisovin.shopkeepers.ui.AbstractUIType;
import com.nisovin.shopkeepers.ui.AbstractShopkeeperUIHandler;
import com.nisovin.shopkeepers.ui.AbstractUIType;
import com.nisovin.shopkeepers.util.Log;
import com.nisovin.shopkeepers.util.PermissionUtils;
import com.nisovin.shopkeepers.util.TextUtils;
@ -22,12 +22,14 @@ public abstract class HiringHandler extends AbstractShopkeeperUIHandler {
}
@Override
protected boolean canOpen(Player player) {
protected boolean canOpen(Player player, boolean silent) {
assert player != null;
// Check for hire permission:
if (!PermissionUtils.hasPermission(player, ShopkeepersPlugin.HIRE_PERMISSION)) {
Log.debug(() -> "Blocked hire window opening for " + player.getName() + ": Missing hire permission.");
TextUtils.sendMessage(player, Settings.msgMissingHirePerm);
if (!silent) {
Log.debug(() -> "Blocked hire window opening for " + player.getName() + ": Missing hire permission.");
TextUtils.sendMessage(player, Settings.msgMissingHirePerm);
}
return false;
}
return true;

View File

@ -124,11 +124,13 @@ public class TradingHandler extends AbstractShopkeeperUIHandler {
}
@Override
protected boolean canOpen(Player player) {
protected boolean canOpen(Player player, boolean silent) {
assert player != null;
if (!PermissionUtils.hasPermission(player, ShopkeepersPlugin.TRADE_PERMISSION)) {
Log.debug(() -> "Blocked trade window opening from " + player.getName() + ": Missing trade permission.");
TextUtils.sendMessage(player, Settings.msgMissingTradePerm);
if (!silent) {
Log.debug(() -> "Blocked trade window opening for " + player.getName() + ": Missing trade permission.");
TextUtils.sendMessage(player, Settings.msgMissingTradePerm);
}
return false;
}
return true;

View File

@ -62,21 +62,25 @@ public final class VillagerEditorHandler extends AbstractEditorHandler {
}
@Override
protected boolean canOpen(Player player) {
protected boolean canOpen(Player player, boolean silent) {
assert player != null;
// Check permission:
if (villager instanceof WanderingTrader) {
if (!PermissionUtils.hasPermission(player, ShopkeepersPlugin.EDIT_WANDERING_TRADERS_PERMISSION)) {
Log.debug(() -> "Blocked villager editor from opening for " + player.getName()
+ ": Missing edit-wandering-traders permission.");
TextUtils.sendMessage(player, Settings.msgMissingEditWanderingTradersPerm);
if (!silent) {
Log.debug(() -> "Blocked villager editor from opening for " + player.getName()
+ ": Missing edit-wandering-traders permission.");
TextUtils.sendMessage(player, Settings.msgMissingEditWanderingTradersPerm);
}
return false;
}
} else { // Regular villager
if (!PermissionUtils.hasPermission(player, ShopkeepersPlugin.EDIT_VILLAGERS_PERMISSION)) {
Log.debug(() -> "Blocked villager editor from opening for " + player.getName()
+ ": Missing edit-villagers permission.");
TextUtils.sendMessage(player, Settings.msgMissingEditVillagersPerm);
if (!silent) {
Log.debug(() -> "Blocked villager editor from opening for " + player.getName()
+ ": Missing edit-villagers permission.");
TextUtils.sendMessage(player, Settings.msgMissingEditVillagersPerm);
}
return false;
}
}