UIHandler#canOpen has an additional 'silent' flag now.
parent
d05e051348
commit
6166e834ee
|
@ -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).
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() : "";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -41,7 +41,7 @@ class UIListener implements Listener {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected boolean canOpen(Player player) {
|
||||
protected boolean canOpen(Player player, boolean silent) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue