Added command "/shop open" to open shops

Shift-click no longer works anywhere to open a shop.
This commit is contained in:
Eric 2017-03-21 15:03:12 +01:00
parent 79660920d8
commit 474f734456
8 changed files with 118 additions and 17 deletions

View File

@ -0,0 +1,26 @@
package de.epiceric.shopchest.event;
import de.epiceric.shopchest.shop.Shop;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
/**
* Called when a player opens a shop (clicks on a chest)
*/
public class ShopOpenEvent extends ShopEvent implements Cancellable {
private boolean cancelled;
public ShopOpenEvent(Player player, Shop shop) {
super(player, shop);
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
cancelled = cancel;
}
}

View File

@ -0,0 +1,46 @@
package de.epiceric.shopchest.event;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* Called when a player wants to open a shop (enters the command)
*/
public class ShopPreOpenEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private Player player;
private boolean cancelled;
public ShopPreOpenEvent(Player player) {
this.player = player;
}
/**
* @return Player who is involved in this event
*/
public Player getPlayer() {
return player;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
this.cancelled = cancel;
}
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
}

View File

@ -638,7 +638,7 @@ public class LanguageUtils {
itemNames.add(new ItemName(Material.DRAGONS_BREATH, langConfig.getString("item.dragon_breath.name", "Dragon's Breath")));
itemNames.add(new ItemName(Material.SPECTRAL_ARROW, langConfig.getString("item.spectral_arrow.name", "Spectral Arrow")));
itemNames.add(new ItemName(Material.TIPPED_ARROW, langConfig.getString("item.tipped_arrow.name", "Tipped Arrow")));
itemNames.add(new ItemName(Material.SHIELD, langConfig.getString("item.shield.name", "Shield"))); //TODO ADD SHIELD DESCRIPTIONS
itemNames.add(new ItemName(Material.SHIELD, langConfig.getString("item.shield.name", "Shield")));
itemNames.add(new ItemName(Material.ELYTRA, langConfig.getString("item.elytra.name", "Elytra")));
itemNames.add(new ItemName(Material.BOAT_SPRUCE, langConfig.getString("item.boat.spruce.name", "Spruce Boat")));
itemNames.add(new ItemName(Material.BOAT_BIRCH, langConfig.getString("item.boat.birch.name", "Birch Boat")));
@ -946,8 +946,9 @@ public class LanguageUtils {
messages.add(new LocalizedMessage(LocalizedMessage.Message.PRICES_CONTAIN_DECIMALS, langConfig.getString("message.prices-contain-decimals", "&cPrices must not contain decimals.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.NO_ITEM_IN_HAND, langConfig.getString("message.no-item-in-hand", "&cNo item in hand")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CLICK_CHEST_CREATE, langConfig.getString("message.click-chest-to-create-shop", "&aClick a chest to create a shop.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CLICK_CHEST_REMOVE, langConfig.getString("message.click-chest-to-remove-shop", "&aClick a shop-chest to remove the shop.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CLICK_CHEST_REMOVE, langConfig.getString("message.click-chest-to-remove-shop", "&aClick a shop to remove it.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CLICK_CHEST_INFO, langConfig.getString("message.click-chest-for-info", "&aClick a shop to retrieve information.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CLICK_CHEST_OPEN, langConfig.getString("message.click-chest-to-open-shop", "&aClick a shop to open it.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.OPENED_SHOP, langConfig.getString("message.opened-shop", "&aYou opened %VENDOR%'s shop."), Regex.VENDOR));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CANNOT_BREAK_SHOP, langConfig.getString("message.cannot-break-shop", "&cYou can't break a shop.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CANNOT_SELL_BROKEN_ITEM, langConfig.getString("message.cannot-sell-broken-item", "&cYou can't sell a broken item.")));
@ -991,6 +992,7 @@ public class LanguageUtils {
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_RELOAD, langConfig.getString("message.commandDescription.reload", "Reload shops.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_UPDATE, langConfig.getString("message.commandDescription.update", "Check for Updates.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_LIMITS, langConfig.getString("message.commandDescription.limits", "View shop limits.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_OPEN, langConfig.getString("message.commandDescription.open", "Open a shop.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.COMMAND_DESC_CONFIG, langConfig.getString("message.commandDescription.config", "Change configuration values.")));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CHANGED_CONFIG_SET, langConfig.getString("message.config.set", "&6Changed &a%PROPERTY% &6to &a%VALUE%&6."), Regex.PROPERTY, Regex.VALUE));
messages.add(new LocalizedMessage(LocalizedMessage.Message.CHANGED_CONFIG_REMOVED, langConfig.getString("message.config.removed", "&6Removed &a%VALUE% &6from &a%PROPERTY%&6."), Regex.PROPERTY, Regex.VALUE));

View File

@ -83,6 +83,7 @@ public class LocalizedMessage {
CLICK_CHEST_CREATE,
CLICK_CHEST_REMOVE,
CLICK_CHEST_INFO,
CLICK_CHEST_OPEN,
OPENED_SHOP,
CANNOT_BREAK_SHOP,
CANNOT_SELL_BROKEN_ITEM,
@ -126,6 +127,7 @@ public class LocalizedMessage {
COMMAND_DESC_RELOAD,
COMMAND_DESC_UPDATE,
COMMAND_DESC_LIMITS,
COMMAND_DESC_OPEN,
COMMAND_DESC_CONFIG,
CHANGED_CONFIG_SET,
CHANGED_CONFIG_REMOVED,

View File

@ -10,10 +10,7 @@ import com.sk89q.worldguard.protection.flags.StateFlag;
import de.epiceric.shopchest.ShopChest;
import de.epiceric.shopchest.config.Config;
import de.epiceric.shopchest.config.Regex;
import de.epiceric.shopchest.event.ShopBuySellEvent;
import de.epiceric.shopchest.event.ShopCreateEvent;
import de.epiceric.shopchest.event.ShopInfoEvent;
import de.epiceric.shopchest.event.ShopRemoveEvent;
import de.epiceric.shopchest.event.*;
import de.epiceric.shopchest.language.LanguageUtils;
import de.epiceric.shopchest.language.LocalizedMessage;
import de.epiceric.shopchest.nms.Hologram;
@ -164,7 +161,7 @@ public class ShopInteractListener implements Listener {
}
}
private void handleInteractEvent(PlayerInteractEvent e, boolean calledFromInteractEvent) {
private void handleInteractEvent(PlayerInteractEvent e) {
Block b = e.getClickedBlock();
Player p = e.getPlayer();
boolean inverted = config.invert_mouse_buttons;
@ -224,10 +221,7 @@ public class ShopInteractListener implements Listener {
if (shopUtils.isShop(b.getLocation())) {
Shop shop = shopUtils.getShop(b.getLocation());
if (p.getUniqueId().equals(shop.getVendor().getUniqueId()) || p.hasPermission(Permissions.OPEN_OTHER)) {
e.setCancelled(false);
if (!calledFromInteractEvent) {
p.openInventory(shop.getInventoryHolder().getInventory());
}
open(p, shop, true);
} else {
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.NO_PERMISSION_OPEN_OTHERS));
plugin.debug(p.getName() + " is not permitted to open another player's shop");
@ -251,6 +245,10 @@ public class ShopInteractListener implements Listener {
}
}
if (e.getAction() == Action.RIGHT_CLICK_BLOCK && p.getUniqueId().equals(shop.getVendor().getUniqueId()) && shop.getShopType() != ShopType.ADMIN) {
return;
}
if ((e.getAction() == Action.RIGHT_CLICK_BLOCK && !inverted) || (e.getAction() == Action.LEFT_CLICK_BLOCK && inverted)) {
e.setCancelled(true);
@ -368,7 +366,7 @@ public class ShopInteractListener implements Listener {
@EventHandler
public void onPlayerInteract(PlayerInteractEvent e) {
if (config.enable_authme_integration && plugin.hasAuthMe() && !AuthMe.getApi().isAuthenticated(e.getPlayer())) return;
handleInteractEvent(e, true);
handleInteractEvent(e);
}
@EventHandler
@ -394,7 +392,7 @@ public class ShopInteractListener implements Listener {
if (b != null) {
PlayerInteractEvent interactEvent = new PlayerInteractEvent(p, Action.RIGHT_CLICK_BLOCK, Utils.getPreferredItemInHand(p), b, null);
handleInteractEvent(interactEvent, false);
handleInteractEvent(interactEvent);
}
}
@ -428,7 +426,7 @@ public class ShopInteractListener implements Listener {
if (b != null) {
PlayerInteractEvent interactEvent = new PlayerInteractEvent(p, Action.LEFT_CLICK_BLOCK, Utils.getPreferredItemInHand(p), b, null);
handleInteractEvent(interactEvent, false);
handleInteractEvent(interactEvent);
e.setCancelled(true);
}
@ -494,7 +492,7 @@ public class ShopInteractListener implements Listener {
* @param shop Shop to be removed
*/
private void remove(Player executor, Shop shop) {
plugin.debug(executor.getName() + " is removing shop (#" + shop.getID() + ")");
plugin.debug(executor.getName() + " is removing " + shop.getVendor().getPlayer().getName() + "'s shop (#" + shop.getID() + ")");
ShopRemoveEvent event = new ShopRemoveEvent(executor, shop);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
@ -507,6 +505,25 @@ public class ShopInteractListener implements Listener {
executor.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_REMOVED));
}
/**
* Open a shop
* @param executor Player, who executed the command and will receive the message
* @param shop Shop to be opened
*/
private void open(Player executor, Shop shop, boolean message) {
plugin.debug(executor.getName() + " is opening " + shop.getVendor().getName() + "'s shop (#" + shop.getID() + ")");
ShopOpenEvent event = new ShopOpenEvent(executor, shop);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
plugin.debug("Open event cancelled (#" + shop.getID() + ")");
return;
}
executor.openInventory(shop.getInventoryHolder().getInventory());
plugin.debug("Opened shop (#" + shop.getID() + ")");
if (message) executor.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.OPENED_SHOP, new LocalizedMessage.ReplacedRegex(Regex.VENDOR, shop.getVendor().getName())));
}
/**
*
* @param executor Player, who executed the command and will retrieve the information

View File

@ -94,7 +94,7 @@ public class ClickType {
}
public enum EnumClickType {
CREATE, REMOVE, INFO
CREATE, REMOVE, INFO, OPEN
}
}

View File

@ -39,6 +39,7 @@ message.no-item-in-hand=&cKein Item in der Hand.
message.click-chest-to-create-shop=&aKlicke auf eine Truhe, um einen Shop zu erstellen.
message.click-chest-to-remove-shop=&aKlicke auf einen Shop, um ihn zu entfernen.
message.click-chest-for-info=&aKlicke auf einen Shop, um Informationen über ihn zu bekommen.
message.click-chest-to-open-shop=&Klicke auf einen Shop, um ihn zu öffnen.
message.opened-shop=&aDu hast &6%VENDOR%&as Shop geöffnet.
message.cannot-break-shop=&cDu kannst einen Shop nicht zerstören.
message.cannot-sell-broken-item=&cDu kannst kein kaputtes Artikel verkaufen.
@ -82,6 +83,7 @@ message.commandDescription.info=Rufe Informationen über den Shop ab.
message.commandDescription.reload=Lade die Shops neu.
message.commandDescription.update=Suche nach Aktualisierungen.
message.commandDescription.limits=Betrachte die Shop Limits.
message.commandDescription.open=Öffne einen Shop.
message.commandDescription.config=Verändere Konfigurationswerte.
message.config.set=&6Eigenschaft &a%PROPERTY% &6wurde auf &a%VALUE% &6gesetzt.
message.config.added=&6Wert &a%VALUE% &6wurde zu &a%PROPERTY% &6hinzugefügt.

View File

@ -136,11 +136,14 @@ message.no-item-in-hand=&cNo item in hand
message.click-chest-to-create-shop=&aClick a chest to create a shop.
# Set the message when the player must click a shop to remove it.
message.click-chest-to-remove-shop=&aClick a shop-chest to remove the shop.
message.click-chest-to-remove-shop=&aClick a shop to remove it.
# Set the message when the player must click a shop to retrieve information.
message.click-chest-for-info=&aClick a shop to retrieve information.
# Set the message when the player must click a shop to open it.
message.click-chest-to-open-shop=&aClick a shop to open it.
# Set the message when the player opened a shop.
# Usable regex: %VENDOR%
message.opened-shop=&aYou opened %VENDOR%'s shop.
@ -283,6 +286,9 @@ message.commandDescription.update=Check for Updates.
# Set the command description message for '/shop limits' when you type '/shop'.
message.commandDescription.limits=View shop limits.
# Set the command description message for '/shop open' when you type '/shop'.
message.commandDescription.open=Open a shop.
# Set the command description message for '/shop config' when you type '/shop'.
message.commandDescription.config=Change configuration values.