Add full shop message, location and respect cstoggle

Inspired by @Brokkonaut's fork this adds a new NOT_ENOUGH_SPACE_IN_YOUR_SHOP message to send to the shop owner when someone tries to sell to his shop. It also adds new %world, %x, %y and %z variables to display the shop's location in the message, adds a config option to make both the full-shop and out-of-stock messages respect /cstoggle and makes values in the locale.yml support ampersand color codes.
This commit is contained in:
Phoenix616 2017-07-04 16:06:34 +01:00
parent ce4525d46e
commit 0dea862cd0
3 changed files with 43 additions and 13 deletions

View File

@ -7,8 +7,8 @@ import org.bukkit.ChatColor;
* @author Acrobot
*/
public class Messages {
public static String prefix = ChatColor.GREEN + "[Shop] " + ChatColor.RESET;
public static String iteminfo = ChatColor.GREEN + "Item Information: " + ChatColor.RESET;
public static String prefix = "&a[Shop] &r";
public static String iteminfo = "&aItem Information: &r";
@PrecededBySpace
public static String ACCESS_DENIED = "You don't have permission to do that!";
@ -29,10 +29,11 @@ public class Messages {
public static String NOT_ENOUGH_SPACE_IN_INVENTORY = "You haven't got enough space in inventory!";
public static String NOT_ENOUGH_SPACE_IN_CHEST = "There isn't enough space in chest!";
public static String NOT_ENOUGH_ITEMS_TO_SELL = "You don't have enough items to sell!";
public static String NOT_ENOUGH_SPACE_IN_YOUR_SHOP = "%material&7 shop at &r%world/%x/%y/%z&7 is full! (%seller tried to sell)";
@PrecededBySpace
public static String NOT_ENOUGH_STOCK = "This shop is out of stock.";
public static String NOT_ENOUGH_STOCK_IN_YOUR_SHOP = "Your %material shop is out of stock!";
public static String NOT_ENOUGH_STOCK_IN_YOUR_SHOP = "%material&7 shop at &r%world/%x/%y/%z&7 is out of stock! (%buyer tried to buy)";
@PrecededBySpace
public static String YOU_BOUGHT_FROM_SHOP = "You bought %item from %owner for %price.";
@ -72,6 +73,6 @@ public class Messages {
public static String TOGGLE_MESSAGES_ON = "You will now receive messages from your shop(s).";
public static String prefix(String message) {
return prefix + message;
return ChatColor.translateAlternateColorCodes('&', prefix + message);
}
}

View File

@ -70,7 +70,7 @@ public class Properties {
@ConfigurationComment("Do you want to allow other players to build a shop on a block where there's one already?")
public static boolean ALLOW_MULTIPLE_SHOPS_AT_ONE_BLOCK = false;
@ConfigurationComment("Can shops be used even when the seller doesn't have enough items? (The price will be scaled adequatly to the item amount)")
@ConfigurationComment("Can shops be used even when the seller doesn't have enough items? (The price will be scaled adequately to the item amount)")
public static boolean ALLOW_PARTIAL_TRANSACTIONS = true;
@ConfigurationComment("Can '?' be put in place of item name in order for the sign to be auto-filled?")
@ -79,6 +79,14 @@ public class Properties {
@PrecededBySpace
@ConfigurationComment("Do you want to show \"Out of stock\" messages?")
public static boolean SHOW_MESSAGE_OUT_OF_STOCK = true;
@ConfigurationComment("Do you want to show \"Full shop\" messages?")
public static boolean SHOW_MESSAGE_FULL_SHOP = true;
@PrecededBySpace
@ConfigurationComment("Can players hide the \"Out of stock\" messages with /cstoggle?")
public static boolean CSTOGGLE_TOGGLES_OUT_OF_STOCK = false;
@ConfigurationComment("Can players hide the \"Full shop\" messages with /cstoggle?")
public static boolean CSTOGGLE_TOGGLES_FULL_SHOP = false;
@ConfigurationComment("Do you want to show \"You bought/sold... \" messages?")
public static boolean SHOW_TRANSACTION_INFORMATION_CLIENT = true;

View File

@ -2,9 +2,11 @@ package com.Acrobot.ChestShop.Listeners.PreTransaction;
import com.Acrobot.Breeze.Utils.InventoryUtil;
import com.Acrobot.Breeze.Utils.MaterialUtil;
import com.Acrobot.ChestShop.Commands.Toggle;
import com.Acrobot.ChestShop.Configuration.Messages;
import com.Acrobot.ChestShop.Configuration.Properties;
import com.Acrobot.ChestShop.Events.PreTransactionEvent;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -14,6 +16,7 @@ import org.bukkit.inventory.ItemStack;
import static com.Acrobot.ChestShop.Configuration.Messages.CLIENT_DEPOSIT_FAILED;
import static com.Acrobot.ChestShop.Configuration.Messages.NOT_ENOUGH_STOCK_IN_YOUR_SHOP;
import static com.Acrobot.ChestShop.Configuration.Messages.NOT_ENOUGH_SPACE_IN_YOUR_SHOP;
/**
* @author Acrobot
@ -44,6 +47,17 @@ public class ErrorMessageSender implements Listener {
message = Messages.NOT_ENOUGH_MONEY_SHOP;
break;
case NOT_ENOUGH_SPACE_IN_CHEST:
if (Properties.SHOW_MESSAGE_FULL_SHOP && !Properties.CSTOGGLE_TOGGLES_FULL_SHOP || !Toggle.isIgnoring(event.getOwner())) {
Location loc = event.getSign().getLocation();
String messageNotEnoughSpace = Messages.prefix(NOT_ENOUGH_SPACE_IN_YOUR_SHOP)
.replace("%material", getItemNames(event.getStock()))
.replace("%seller", event.getClient().getName())
.replace("%world", loc.getWorld().getName())
.replace("%x", String.valueOf(loc.getBlockX()))
.replace("%y", String.valueOf(loc.getBlockY()))
.replace("%z", String.valueOf(loc.getBlockZ()));
sendMessageToOwner(event.getOwner(), messageNotEnoughSpace);
}
message = Messages.NOT_ENOUGH_SPACE_IN_CHEST;
break;
case NOT_ENOUGH_SPACE_IN_INVENTORY:
@ -53,10 +67,17 @@ public class ErrorMessageSender implements Listener {
message = Messages.NOT_ENOUGH_ITEMS_TO_SELL;
break;
case NOT_ENOUGH_STOCK_IN_CHEST:
String messageOutOfStock = Messages.prefix(NOT_ENOUGH_STOCK_IN_YOUR_SHOP)
.replace("%material", getItemNames(event.getStock()))
.replace("%buyer", event.getClient().getName());
sendMessageToOwner(event.getOwner(), messageOutOfStock);
if (Properties.SHOW_MESSAGE_OUT_OF_STOCK && !Properties.CSTOGGLE_TOGGLES_OUT_OF_STOCK || !Toggle.isIgnoring(event.getOwner())) {
Location loc = event.getSign().getLocation();
String messageOutOfStock = Messages.prefix(NOT_ENOUGH_STOCK_IN_YOUR_SHOP)
.replace("%material", getItemNames(event.getStock()))
.replace("%buyer", event.getClient().getName())
.replace("%world", loc.getWorld().getName())
.replace("%x", String.valueOf(loc.getBlockX()))
.replace("%y", String.valueOf(loc.getBlockY()))
.replace("%z", String.valueOf(loc.getBlockZ()));
sendMessageToOwner(event.getOwner(), messageOutOfStock);
}
message = Messages.NOT_ENOUGH_STOCK;
break;
case CLIENT_DEPOSIT_FAILED:
@ -85,17 +106,17 @@ public class ErrorMessageSender implements Listener {
private static String getItemNames(ItemStack[] stock) {
ItemStack[] items = InventoryUtil.mergeSimilarStacks(stock);
StringBuilder names = new StringBuilder(50);
StringBuilder names = new StringBuilder(MaterialUtil.getName(items[0]));
for (ItemStack item : items) {
names.append(MaterialUtil.getName(item)).append(',').append(' ');
for (int i = 1; i < items.length; i++) {
names.append(MaterialUtil.getName(items[i])).append(',').append(' ');
}
return names.toString();
}
private static void sendMessageToOwner(OfflinePlayer owner, String message) {
if (owner.isOnline() && Properties.SHOW_MESSAGE_OUT_OF_STOCK) {
if (owner.isOnline()) {
Player player = (Player) owner;
player.sendMessage(message);
}