1
0
mirror of https://e.coding.net/circlecloud/QuickShop.git synced 2024-12-29 08:08:49 +00:00

Release Version 1.0...

Signed-off-by: j502647092 <jtb1@163.com>
This commit is contained in:
j502647092 2015-10-05 04:19:20 +08:00
parent d870528b7f
commit ebf4d99e72
10 changed files with 122 additions and 201 deletions

View File

@ -2,12 +2,12 @@ package org.maxgamer.QuickShop.Economy;
import java.util.UUID;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.RegisteredServiceProvider;
import net.milkbowl.vault.economy.Economy;
public class Economy_Vault implements EconomyCore {
private Economy vault;
@ -15,12 +15,37 @@ public class Economy_Vault implements EconomyCore {
setupEconomy();
}
private boolean setupEconomy() {
RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServicesManager().getRegistration(Economy.class);
if (economyProvider != null) {
this.vault = ((Economy) economyProvider.getProvider());
@Override
@Deprecated
public boolean deposit(final String name, final double amount) {
return this.vault.depositPlayer(name, amount).transactionSuccess();
}
@Override
public boolean deposit(final UUID name, final double amount) {
final OfflinePlayer p = Bukkit.getOfflinePlayer(name);
return this.vault.depositPlayer(p, amount).transactionSuccess();
}
@Override
public String format(final double balance) {
try {
return this.vault.format(balance);
} catch (final NumberFormatException e) {
}
return this.vault != null;
return "" + balance;
}
@Override
@Deprecated
public double getBalance(final String name) {
return this.vault.getBalance(name);
}
@Override
public double getBalance(final UUID name) {
final OfflinePlayer p = Bukkit.getOfflinePlayer(name);
return this.vault.getBalance(p);
}
@Override
@ -30,19 +55,7 @@ public class Economy_Vault implements EconomyCore {
@Override
@Deprecated
public boolean deposit(String name, double amount) {
return this.vault.depositPlayer(name, amount).transactionSuccess();
}
@Override
@Deprecated
public boolean withdraw(String name, double amount) {
return this.vault.withdrawPlayer(name, amount).transactionSuccess();
}
@Override
@Deprecated
public boolean transfer(String from, String to, double amount) {
public boolean transfer(final String from, final String to, final double amount) {
if (this.vault.getBalance(from) >= amount) {
if (this.vault.withdrawPlayer(from, amount).transactionSuccess()) {
if (!this.vault.depositPlayer(to, amount).transactionSuccess()) {
@ -57,36 +70,9 @@ public class Economy_Vault implements EconomyCore {
}
@Override
@Deprecated
public double getBalance(String name) {
return this.vault.getBalance(name);
}
@Override
public String format(double balance) {
try {
return this.vault.format(balance);
} catch (NumberFormatException e) {
}
return "$" + balance;
}
@Override
public boolean deposit(UUID name, double amount) {
OfflinePlayer p = Bukkit.getOfflinePlayer(name);
return this.vault.depositPlayer(p, amount).transactionSuccess();
}
@Override
public boolean withdraw(UUID name, double amount) {
OfflinePlayer p = Bukkit.getOfflinePlayer(name);
return this.vault.withdrawPlayer(p, amount).transactionSuccess();
}
@Override
public boolean transfer(UUID from, UUID to, double amount) {
OfflinePlayer pFrom = Bukkit.getOfflinePlayer(from);
OfflinePlayer pTo = Bukkit.getOfflinePlayer(to);
public boolean transfer(final UUID from, final UUID to, final double amount) {
final OfflinePlayer pFrom = Bukkit.getOfflinePlayer(from);
final OfflinePlayer pTo = Bukkit.getOfflinePlayer(to);
if (this.vault.getBalance(pFrom) >= amount) {
if (this.vault.withdrawPlayer(pFrom, amount).transactionSuccess()) {
if (!this.vault.depositPlayer(pTo, amount).transactionSuccess()) {
@ -101,8 +87,22 @@ public class Economy_Vault implements EconomyCore {
}
@Override
public double getBalance(UUID name) {
OfflinePlayer p = Bukkit.getOfflinePlayer(name);
return this.vault.getBalance(p);
@Deprecated
public boolean withdraw(final String name, final double amount) {
return this.vault.withdrawPlayer(name, amount).transactionSuccess();
}
@Override
public boolean withdraw(final UUID name, final double amount) {
final OfflinePlayer p = Bukkit.getOfflinePlayer(name);
return this.vault.withdrawPlayer(p, amount).transactionSuccess();
}
private boolean setupEconomy() {
final RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServicesManager().getRegistration(Economy.class);
if (economyProvider != null) {
this.vault = (economyProvider.getProvider());
}
return this.vault != null;
}
}

View File

@ -7,20 +7,20 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.maxgamer.QuickShop.QuickShop;
/**
*
*
* @author Netherfoam
*
*
*/
public class ChatListener implements Listener {
QuickShop plugin;
public ChatListener(QuickShop plugin) {
public ChatListener(final QuickShop plugin) {
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.LOWEST)
public void onChat(final AsyncPlayerChatEvent e) {
if (!plugin.getShopManager().getActions().containsKey(e.getPlayer().getUniqueId())) {
if (!plugin.getShopManager().getActions().containsKey(e.getPlayer().getName())) {
return;
}
plugin.getShopManager().handleChat(e.getPlayer(), e.getMessage());

View File

@ -1,7 +1,6 @@
package org.maxgamer.QuickShop.Listeners;
import java.util.HashMap;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
@ -14,12 +13,14 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.BlockIterator;
import org.maxgamer.QuickShop.QuickShop;
@ -37,17 +38,6 @@ public class PlayerListener implements Listener {
this.plugin = plugin;
}
/*
* Could be useful one day private LinkedList<String> getParents(Class<?>
* clazz){ LinkedList<String> classes = new LinkedList<String>();
*
* while(clazz != null){ classes.add("Extends " + ChatColor.GREEN +
* clazz.getCanonicalName()); for(Class<?> iface : clazz.getInterfaces()){
* classes.add("Implements " + ChatColor.RED + iface.getCanonicalName());
* classes.addAll(getParents(iface)); }
*
* clazz = clazz.getSuperclass(); } return classes; }
*/
@SuppressWarnings("deprecation")
/**
* Handles players left clicking a chest. Left click a NORMAL chest with
@ -90,9 +80,9 @@ public class PlayerListener implements Listener {
p.sendMessage(MsgUtil.p("how-many-sell", "" + items));
}
// Add the new action
final HashMap<UUID, Info> actions = plugin.getShopManager().getActions();
final HashMap<String, Info> actions = plugin.getShopManager().getActions();
final Info info = new Info(shop.getLocation(), ShopAction.BUY, null, null, shop);
actions.put(p.getUniqueId(), info);
actions.put(p.getName(), info);
return;
}
// Handles creating shops
@ -127,17 +117,31 @@ public class PlayerListener implements Listener {
}
// Send creation menu.
final Info info = new Info(b.getLocation(), ShopAction.CREATE, e.getItem(), last);
plugin.getShopManager().getActions().put(p.getUniqueId(), info);
plugin.getShopManager().getActions().put(p.getName(), info);
p.sendMessage(MsgUtil.p("how-much-to-trade-for", Util.getName(info.getItem())));
}
}
@EventHandler
public void onItemClick(final InventoryClickEvent e) {
final Player p = (Player) e.getWhoClicked();
final ItemStack ci = e.getCurrentItem();
final Inventory inv = e.getInventory();
final int solt = e.getSlot();
try {
if (MarkUtil.hasMark(ci)) {
inv.setItem(solt, new ItemStack(Material.AIR));
p.chat("§c非法获取快捷商店悬浮物品 已清理...");
}
} catch (final Exception ex) {
}
}
@EventHandler
public void onItemMove(final InventoryMoveItemEvent e) {
final ItemStack ci = e.getItem();
if (MarkUtil.hasMark(ci)) {
ci.setType(Material.AIR);
e.setCancelled(true);
e.setItem(new ItemStack(Material.AIR));
}
}
@ -160,7 +164,7 @@ public class PlayerListener implements Listener {
if (e.isCancelled()) {
return;
}
final Info info = plugin.getShopManager().getActions().get(e.getPlayer().getUniqueId());
final Info info = plugin.getShopManager().getActions().get(e.getPlayer().getName());
if (info != null) {
final Player p = e.getPlayer();
final Location loc1 = info.getLocation();
@ -171,7 +175,7 @@ public class PlayerListener implements Listener {
} else if (info.getAction() == ShopAction.BUY) {
p.sendMessage(MsgUtil.p("shop-purchase-cancelled"));
}
plugin.getShopManager().getActions().remove(p.getUniqueId());
plugin.getShopManager().getActions().remove(p.getName());
return;
}
}
@ -180,13 +184,15 @@ public class PlayerListener implements Listener {
@EventHandler
public void onPlayerPickup(final PlayerPickupItemEvent e) {
final ItemStack ci = e.getItem().getItemStack();
e.setCancelled(!MarkUtil.hasMark(ci));
if (MarkUtil.hasMark(ci)) {
e.setCancelled(true);
}
}
@EventHandler
public void onPlayerQuit(final PlayerQuitEvent e) {
// Remove them from the menu
plugin.getShopManager().getActions().remove(e.getPlayer().getUniqueId());
plugin.getShopManager().getActions().remove(e.getPlayer().getName());
}
@EventHandler

View File

@ -159,8 +159,8 @@ public class QuickShop extends JavaPlugin {
final EconomyCore core = new Economy_Vault();
if (!core.isValid()) {
// getLogger().severe("Economy is not valid!");
getLogger().severe("QuickShop could not hook an economy!");
getLogger().severe("QuickShop CANNOT start!");
getLogger().warning("无法找到经济管理类插件...");
getLogger().warning("卸载插件!!!");
this.getPluginLoader().disablePlugin(this);
// if(econ.equals("Vault"))
// getLogger().severe("(Does Vault have an Economy to hook into?!)");
@ -283,7 +283,7 @@ public class QuickShop extends JavaPlugin {
int count = 0; // Shops count
Connection con;
try {
getLogger().info("从数据载入商店数据...");
getLogger().info("从数据载入商店数据...");
con = database.getConnection();
final PreparedStatement ps = con.prepareStatement("SELECT * FROM shops");
final ResultSet rs = ps.executeQuery();

View File

@ -638,13 +638,13 @@ public class ContainerShop implements Shop {
@Override
public String toString() {
final StringBuilder sb = new StringBuilder(
"Shop " + (loc.getWorld() == null ? "unloaded world" : loc.getWorld().getName()) + "(" + loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ() + ")");
sb.append(" Owner: " + getOwner().toString());
"商店 " + (loc.getWorld() == null ? "世界尚未载入" : "坐标: " + loc.getWorld().getName()) + "(" + loc.getBlockX() + ", " + loc.getBlockY() + ", " + loc.getBlockZ() + ")");
sb.append(" 所有者: " + getOwner());
if (isUnlimited()) {
sb.append(" Unlimited: true");
sb.append("无限模式: true");
}
sb.append(" Price: " + getPrice());
sb.append("Item: " + getItem().toString());
sb.append("价格: " + getPrice());
sb.append("物品: " + getItem().toString());
return sb.toString();
}
@ -660,7 +660,7 @@ public class ContainerShop implements Shop {
final int unlimited = this.isUnlimited() ? 1 : 0;
final String q = "UPDATE shops SET owner = ?, itemConfig = ?, unlimited = ?, type = ?, price = ? WHERE x = ? AND y = ? and z = ? and world = ?";
try {
plugin.getDB().execute(q, this.getOwner().toString(), Util.serialize(this.getItem()), unlimited, shopType.toID(), this.getPrice(), x, y, z, world);
plugin.getDB().execute(q, this.getOwner(), Util.serialize(this.getItem()), unlimited, shopType.toID(), this.getPrice(), x, y, z, world);
} catch (final Exception e) {
e.printStackTrace();
System.out.println("Could not update shop in database! Changes will revert after a reboot!");

View File

@ -3,7 +3,6 @@ package org.maxgamer.QuickShop.Shop;
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -90,7 +89,7 @@ public class ShopManager {
}
private final QuickShop plugin;
private final HashMap<UUID, Info> actions = new HashMap<UUID, Info>();
private final HashMap<String, Info> actions = new HashMap<String, Info>();
private final HashMap<String, HashMap<ShopChunk, HashMap<Location, Shop>>> shops = new HashMap<String, HashMap<ShopChunk, HashMap<Location, Shop>>>();
@ -113,13 +112,13 @@ public class ShopManager {
int owned = 0;
final Iterator<Shop> it = getShopIterator();
while (it.hasNext()) {
if (it.next().getOwner().equals(p.getUniqueId())) {
if (it.next().getOwner().equals(p.getName())) {
owned++;
}
}
final int max = plugin.getShopLimit(p);
if (owned + 1 > max) {
p.sendMessage(ChatColor.RED + "You have already created a maximum of " + owned + "/" + max + " shops!");
p.sendMessage(ChatColor.RED + "您已经创建了 " + owned + "/" + max + " 个商店!");
return false;
}
}
@ -171,8 +170,9 @@ public class ShopManager {
// Add it to the world
addShop(loc.getWorld().getName(), shop);
} catch (final Exception e) {
plugin.getLogger().warning("无法保存商店到数据库! 下次重启商店将会消失!");
plugin.getLogger().warning("错误信息: " + e.getMessage());
e.printStackTrace();
System.out.println("Could not create shop! Changes will revert after a reboot!");
}
}
@ -184,7 +184,7 @@ public class ShopManager {
* @return Returns the HashMap<Player name, shopInfo>. Info contains what
* their last question etc was.
*/
public HashMap<UUID, Info> getActions() {
public HashMap<String, Info> getActions() {
return this.actions;
}
@ -273,9 +273,9 @@ public class ShopManager {
@SuppressWarnings("deprecation")
@Override
public void run() {
final HashMap<UUID, Info> actions = getActions();
final HashMap<String, Info> actions = getActions();
// They wanted to do something.
final Info info = actions.remove(p.getUniqueId());
final Info info = actions.remove(p.getName());
if (info == null) {
return; // multithreaded means this can happen
}
@ -323,26 +323,25 @@ public class ShopManager {
}
// Create the sample shop.
final Shop shop = new ContainerShop(info.getLocation(), price, info.getItem(), p.getName());
shop.onLoad();
final ShopCreateEvent e = new ShopCreateEvent(shop, p);
Bukkit.getPluginManager().callEvent(e);
if (e.isCancelled()) {
shop.onUnload();
return;
}
// This must be called after the event has been called.
// Else, if the event is cancelled, they won't get their
// money back.
if (tax != 0) {
if (!plugin.getEcon().withdraw(p.getName(), tax)) {
p.sendMessage(MsgUtil.p("you-cant-afford-a-new-shop", format(tax)));
shop.onUnload();
return;
}
plugin.getEcon().deposit(plugin.getConfig().getString("tax-account"), tax);
}
final ShopCreateEvent e = new ShopCreateEvent(shop, p);
Bukkit.getPluginManager().callEvent(e);
if (e.isCancelled()) {
return;
}
shop.onLoad();
/* The shop has hereforth been successfully created */
createShop(shop);
p.sendMessage(MsgUtil.p("success-created-shop"));
final Location loc = shop.getLocation();
plugin.log(p.getName() + " created a " + shop.getDataName() + " shop at (" + loc.getWorld().getName() + " - " + loc.getX() + "," + loc.getY() + "," + loc.getZ() + ")");
if (!plugin.getConfig().getBoolean("shop.lock")) {
@ -363,34 +362,6 @@ public class ShopManager {
sign.setFacingDirection(bf);
bs.update(true);
shop.setSignText();
/*
* Block b = shop.getLocation().getBlock();
* ItemFrame iFrame = (ItemFrame)
* b.getWorld().spawnEntity(b.getLocation(),
* EntityType.ITEM_FRAME);
*
* BlockFace[] faces = new
* BlockFace[]{BlockFace.NORTH, BlockFace.EAST,
* BlockFace.SOUTH, BlockFace.WEST}; for(BlockFace
* face : faces){ if(face == bf) continue; //This is
* the sign's location iFrame.setFacingDirection(bf,
* true); //iFrame.setItem(shop.getItem());
* ItemStack iStack = shop.getItem().clone();
* iStack.setAmount(0); iFrame.setItem(iStack); /*
* Field handleField =
* iFrame.getClass().getField("entity");
* handleField.setAccessible(true); Object handle =
* handleField.get(iFrame);
*
* ItemStack bukkitStack = shop.getItem();
*
* Field itemStackHandle =
*
* Method setItemStack =
* handle.getClass().getMethod("a", Object.class);
* setItemStack.
*/
// }
}
if (shop instanceof ContainerShop) {
final ContainerShop cs = (ContainerShop) shop;
@ -456,7 +427,7 @@ public class ShopManager {
return; // Cancelled
}
// Money handling
if (!p.getUniqueId().equals(shop.getOwner())) {
if (!p.getName().equals(shop.getOwner())) {
// Check their balance. Works with *most* economy
// plugins*
if (plugin.getEcon().getBalance(p.getName()) < amount * shop.getPrice()) {
@ -468,7 +439,7 @@ public class ShopManager {
// Do charge an amount of tax though.
final double tax = plugin.getConfig().getDouble("tax");
final double total = amount * shop.getPrice();
if (!plugin.getEcon().withdraw(p.getUniqueId(), total)) {
if (!plugin.getEcon().withdraw(p.getName(), total)) {
p.sendMessage(MsgUtil.p("you-cant-afford-to-buy", format(amount * shop.getPrice()), format(plugin.getEcon().getBalance(p.getName()))));
return;
}
@ -521,7 +492,7 @@ public class ShopManager {
return;
}
// Money handling
if (!p.getUniqueId().equals(shop.getOwner())) {
if (!p.getName().equals(shop.getOwner())) {
// Don't tax them if they're purchasing from
// themselves.
// Do charge an amount of tax though.

View File

@ -4,17 +4,13 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Shop.Shop;
@ -35,7 +31,7 @@ public class MsgUtil {
* on space.
*/
public static void clean() {
System.out.println("Cleaning purchase messages from database that are over a week old...");
System.out.println("清理超过 一周 的 商店交易记录...");
// 604800,000 msec = 1 week.
final long weekAgo = System.currentTimeMillis() - 604800000;
plugin.getDB().execute("DELETE FROM messages WHERE time < ?", weekAgo);
@ -139,38 +135,8 @@ public class MsgUtil {
public static void sendPurchaseSuccess(final Player p, final Shop shop, final int amount) {
p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+");
p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.successful-purchase"));
p.sendMessage(ChatColor.DARK_PURPLE + "| " + MsgUtil.p("menu.item-name-and-price", "" + amount, shop.getDataName(), Util.format((amount * shop.getPrice()))));
Map<Enchantment, Integer> enchs = shop.getItem().getItemMeta().getEnchants();
if (enchs != null && !enchs.isEmpty()) {
p.sendMessage(ChatColor.DARK_PURPLE + "+--------------------" + MsgUtil.p("menu.enchants") + "-----------------------+");
for (final Entry<Enchantment, Integer> entries : enchs.entrySet()) {
p.sendMessage(ChatColor.DARK_PURPLE + "| " + ChatColor.YELLOW + entries.getKey().getName() + " " + entries.getValue());
}
}
enchs = shop.getItem().getItemMeta().getEnchants();
if (enchs != null && !enchs.isEmpty()) {
p.sendMessage(ChatColor.DARK_PURPLE + "+-----------------" + MsgUtil.p("menu.stored-enchants") + "--------------------+");
for (final Entry<Enchantment, Integer> entries : enchs.entrySet()) {
p.sendMessage(ChatColor.DARK_PURPLE + "| " + ChatColor.YELLOW + entries.getKey().getName() + " " + entries.getValue());
}
}
try {
Class.forName("org.bukkit.inventory.meta.EnchantmentStorageMeta");
if (shop.getItem().getItemMeta() instanceof EnchantmentStorageMeta) {
final EnchantmentStorageMeta stor = (EnchantmentStorageMeta) shop.getItem().getItemMeta();
stor.getStoredEnchants();
enchs = stor.getStoredEnchants();
if (enchs != null && !enchs.isEmpty()) {
p.sendMessage(ChatColor.DARK_PURPLE + "+-----------------" + MsgUtil.p("menu.stored-enchants") + "--------------------+");
for (final Entry<Enchantment, Integer> entries : enchs.entrySet()) {
p.sendMessage(ChatColor.DARK_PURPLE + "| " + ChatColor.YELLOW + entries.getKey().getName() + " " + entries.getValue());
}
}
}
} catch (final ClassNotFoundException e) {
// They don't have an up to date enough build of CB to do this.
// TODO: Remove this when it becomes redundant
}
final FancyMessage fm = new FancyMessage();
fm.text(ChatColor.DARK_PURPLE + "| ").then(MsgUtil.p("menu.item-name-and-price", "" + amount, shop.getDataName(), Util.format((amount * shop.getPrice())))).itemTooltip(shop.getItem()).send(p);
p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+");
}
@ -189,30 +155,6 @@ public class MsgUtil {
}
}
}
Map<Enchantment, Integer> enchs = shop.getItem().getItemMeta().getEnchants();
if (enchs != null && !enchs.isEmpty()) {
p.sendMessage(ChatColor.DARK_PURPLE + "+--------------------" + MsgUtil.p("menu.enchants") + "-----------------------+");
for (final Entry<Enchantment, Integer> entries : enchs.entrySet()) {
p.sendMessage(ChatColor.DARK_PURPLE + "| " + ChatColor.YELLOW + entries.getKey().getName() + " " + entries.getValue());
}
}
try {
Class.forName("org.bukkit.inventory.meta.EnchantmentStorageMeta");
if (shop.getItem().getItemMeta() instanceof EnchantmentStorageMeta) {
final EnchantmentStorageMeta stor = (EnchantmentStorageMeta) shop.getItem().getItemMeta();
stor.getStoredEnchants();
enchs = stor.getStoredEnchants();
if (enchs != null && !enchs.isEmpty()) {
p.sendMessage(ChatColor.DARK_PURPLE + "+--------------------" + MsgUtil.p("menu.stored-enchants") + "-----------------------+");
for (final Entry<Enchantment, Integer> entries : enchs.entrySet()) {
p.sendMessage(ChatColor.DARK_PURPLE + "| " + ChatColor.YELLOW + entries.getKey().getName() + " " + entries.getValue());
}
}
}
} catch (final ClassNotFoundException e) {
// They don't have an up to date enough build of CB to do this.
// TODO: Remove this when it becomes redundant
}
p.sendMessage(ChatColor.DARK_PURPLE + "+---------------------------------------------------+");
}

View File

@ -127,7 +127,7 @@ public class Util {
try {
return plugin.getEcon().format(n);
} catch (final NumberFormatException e) {
return "$" + n;
return "" + n;
}
}

View File

@ -1,4 +1,5 @@
version: 1.2
Version: 1.0
AIR_-1: 爪子
AIR: 爪子
STONE: 石头

View File

@ -1,6 +1,7 @@
# Colors:
# &0-9, &a-f
# {0}, {1}, {2}, etc are variables. You can swap them around, but adding a new variable won't work. Removing them will work
Version: 1.0
not-looking-at-shop: "&c没找到快捷商店. 你必须看着那个箱子."
no-permission: "&4你没有此命令的权限."
@ -43,14 +44,14 @@ empty-success: "&a库存清理成功"
menu:
successful-purchase: "&a商品购买成功:"
successfully-sold: "&a商品出售成功:"
item-name-and-price: "&a花费&e{2} &a获得 &e{0} &a件 &e{1} &a商品"
item-name-and-price: "&a花费&e{2} &a获得 &e{0} &a件 &e{1}&b(查看详情) &a商品"
shop-information: "&a商店信息:"
owner: "&a所有者: {0}"
item: "&a物品: &e{0}"
item: "&a物品: &e{0} &b(查看详情)"
space: "&aSpace: &e{0}"
stock: "&a库存 &e{0}"
price-per: "&a每件 &e{0} 的价格 &a为 &e{1}"
stock: "&a库存: &e{0}"
price-per: "&a单价: &e{1}元"
total-value-of-chest: "&a所有存货总价格: &c{0}元"
damage-percent-remaining: "&a耐久剩余: &e{0}% ."
this-shop-is-buying: "&a此商店只 &d购买&a 物品."