diff --git a/pom.xml b/pom.xml index c79349d..af24ada 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.maxgamer QuickShop - 1.0 + 1.1 ${project.name} diff --git a/src/main/java/org/maxgamer/QuickShop/Command/QS.java b/src/main/java/org/maxgamer/QuickShop/Command/QS.java index ab635b3..355f656 100644 --- a/src/main/java/org/maxgamer/QuickShop/Command/QS.java +++ b/src/main/java/org/maxgamer/QuickShop/Command/QS.java @@ -406,7 +406,7 @@ public class QS implements CommandExecutor { final Block b = bIt.next(); final Shop shop = plugin.getShopManager().getShop(b.getLocation()); if (shop != null) { - if (shop.getOwner().equals(p.getUniqueId())) { + if (shop.getOwner().equals(p.getName())) { shop.delete(); sender.sendMessage(ChatColor.GREEN + "Success. Deleted shop."); } else { @@ -424,7 +424,7 @@ public class QS implements CommandExecutor { while (bIt.hasNext()) { final Block b = bIt.next(); final Shop shop = plugin.getShopManager().getShop(b.getLocation()); - if (shop != null && shop.getOwner().equals(((Player) sender).getUniqueId())) { + if (shop != null && shop.getOwner().equals(((Player) sender).getName())) { shop.setShopType(ShopType.BUYING); shop.setSignText(); shop.update(); @@ -486,9 +486,9 @@ public class QS implements CommandExecutor { return; } double fee = 0; - if (plugin.priceChangeRequiresFee) { - fee = plugin.getConfig().getDouble("shop.fee-for-price-change"); - if (fee > 0 && plugin.getEcon().getBalance(p.getUniqueId()) < fee) { + if (plugin.getConfigManager().isPriceChangeRequiresFee()) { + fee = plugin.getConfigManager().getFeeForPriceChange(); + if (fee > 0 && plugin.getEcon().getBalance(p.getName()) < fee) { sender.sendMessage(MsgUtil.p("you-cant-afford-to-change-price", plugin.getEcon().format(fee))); return; } @@ -505,7 +505,7 @@ public class QS implements CommandExecutor { return; } if (fee > 0) { - if (!plugin.getEcon().withdraw(p.getUniqueId(), fee)) { + if (!plugin.getEcon().withdraw(p.getName(), fee)) { sender.sendMessage(MsgUtil.p("you-cant-afford-to-change-price", plugin.getEcon().format(fee))); return; } diff --git a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java new file mode 100644 index 0000000..2b9f96c --- /dev/null +++ b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java @@ -0,0 +1,134 @@ +package org.maxgamer.QuickShop.Config; + +import java.util.HashMap; +import java.util.HashSet; + +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.maxgamer.QuickShop.QuickShop; + +public class ConfigManager { + /** Whether debug info should be shown in the console */ + protected boolean debug = false; + /** + * A set of players who have been warned + * ("Your shop isn't automatically locked") + */ + protected HashSet warnings = new HashSet(); + /** Whether players are required to sneak to create/buy from a shop */ + protected boolean sneak; + /** Whether players are required to sneak to create a shop */ + protected boolean sneakCreate; + /** Whether players are required to sneak to trade with a shop */ + protected boolean sneakTrade; + /** Whether we should use display items or not */ + protected boolean display = true; + /** + * Whether we players are charged a fee to change the price on their shop + * (To help deter endless undercutting + */ + protected boolean priceChangeRequiresFee = false; + /** Whether or not to limit players shop amounts */ + protected boolean limit = false; + protected int limitdefault = 0; + protected final HashMap limits = new HashMap(); + protected boolean logAction = true; + protected boolean shopLock = true; + protected int findDistance = 30; + protected Material superItem = Material.GOLD_AXE; + protected double feeForPriceChange = 0.0; + + /** Use SpoutPlugin to get item / block names */ + protected boolean useSpout = false; + + public ConfigManager(final QuickShop plugin) { + + ConfigurationSection limitCfg = plugin.getConfig().getConfigurationSection("limits"); + if (limitCfg != null) { + this.limit = limitCfg.getBoolean("use", false); + this.limitdefault = plugin.getConfig().getInt("limits.default"); + limitCfg = limitCfg.getConfigurationSection("ranks"); + for (final String key : limitCfg.getKeys(true)) { + limits.put(key, limitCfg.getInt(key)); + } + } + try { + this.superItem = Enum.valueOf(Material.class, plugin.getConfig().getString("superitem")); + } catch (final Exception e) { + } + this.logAction = plugin.getConfig().getBoolean("log-actions"); + this.shopLock = plugin.getConfig().getBoolean("shop.lock"); + this.display = plugin.getConfig().getBoolean("shop.display-items"); + this.sneak = plugin.getConfig().getBoolean("shop.sneak-only"); + this.sneakCreate = plugin.getConfig().getBoolean("shop.sneak-to-create"); + this.sneakTrade = plugin.getConfig().getBoolean("shop.sneak-to-trade"); + this.priceChangeRequiresFee = plugin.getConfig().getBoolean("shop.price-change-requires-fee"); + this.findDistance = plugin.getConfig().getInt("shop.find-distance"); + this.feeForPriceChange = plugin.getConfig().getDouble("shop.fee-for-price-change"); + } + + public double getFeeForPriceChange() { + return feeForPriceChange; + } + + public int getFindDistance() { + return findDistance; + } + + public int getLimitdefault() { + return limitdefault; + } + + public HashMap getLimits() { + return limits; + } + + public Material getSuperItem() { + return superItem; + } + + public HashSet getWarnings() { + return warnings; + } + + public boolean isDebug() { + return debug; + } + + public boolean isDisplay() { + return display; + } + + public boolean isLimit() { + return limit; + } + + public boolean isLogAction() { + return logAction; + } + + public boolean isPriceChangeRequiresFee() { + return priceChangeRequiresFee; + } + + public boolean isShopLock() { + return shopLock; + } + + public boolean isSneak() { + return sneak; + } + + public boolean isSneakCreate() { + return sneakCreate; + } + + public boolean isSneakTrade() { + return sneakTrade; + } + + public boolean isUseSpout() { + return useSpout; + } + +} diff --git a/src/main/java/org/maxgamer/QuickShop/Config/ItemConfig.java b/src/main/java/org/maxgamer/QuickShop/Config/ItemConfig.java index 15b26c7..d10983e 100644 --- a/src/main/java/org/maxgamer/QuickShop/Config/ItemConfig.java +++ b/src/main/java/org/maxgamer/QuickShop/Config/ItemConfig.java @@ -37,4 +37,8 @@ public class ItemConfig { config = new FileConfig(p, CONFIG_NAME); } + public static void reload() { + config.reload(); + } + } diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/BlockListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/BlockListener.java index f00750a..34198d8 100644 --- a/src/main/java/org/maxgamer/QuickShop/Listeners/BlockListener.java +++ b/src/main/java/org/maxgamer/QuickShop/Listeners/BlockListener.java @@ -14,6 +14,7 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.Shop.Info; import org.maxgamer.QuickShop.Shop.Shop; @@ -42,18 +43,20 @@ public class BlockListener implements Listener { return; } // If they're either survival or the owner, they can break it - if (p.getGameMode() == GameMode.CREATIVE && !p.getUniqueId().equals(shop.getOwner())) { + final ItemStack pinh = p.getItemInHand(); + if (p.getName().equals(shop.getOwner()) || (pinh != null && pinh.getType() == plugin.getConfigManager().getSuperItem()) || (p.getGameMode() == GameMode.SURVIVAL)) { + // Cancel their current menu... Doesnt cancel other's menu's. + final Info action = plugin.getShopManager().getActions().get(p.getName()); + if (action != null) { + action.setAction(ShopAction.CANCELLED); + } + shop.delete(); + p.sendMessage(MsgUtil.p("success-removed-shop")); + } else { e.setCancelled(true); p.sendMessage(MsgUtil.p("no-creative-break")); return; } - // Cancel their current menu... Doesnt cancel other's menu's. - final Info action = plugin.getShopManager().getActions().get(p.getName()); - if (action != null) { - action.setAction(ShopAction.CANCELLED); - } - shop.delete(); - p.sendMessage(MsgUtil.p("success-removed-shop")); } else if (b.getType() == Material.WALL_SIGN) { final Shop shop = getShopNextTo(b.getLocation()); if (shop == null) { diff --git a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java index ba67e81..ba9529c 100644 --- a/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java +++ b/src/main/java/org/maxgamer/QuickShop/Listeners/PlayerListener.java @@ -13,7 +13,6 @@ 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; @@ -53,7 +52,7 @@ public class PlayerListener implements Listener { return; } final Player p = e.getPlayer(); - if (plugin.sneak && !p.isSneaking()) { + if (plugin.getConfigManager().isSneak() != p.isSneaking()) { // Sneak only return; } @@ -69,7 +68,7 @@ public class PlayerListener implements Listener { } } // Purchase handling - if (shop != null && p.hasPermission("quickshop.use") && (plugin.sneakTrade == false || p.isSneaking())) { + if (shop != null && p.hasPermission("quickshop.use") && (plugin.getConfigManager().isSneakTrade() == p.isSneaking())) { shop.onClick(); // Text menu MsgUtil.sendShopInfo(p, shop); @@ -86,8 +85,8 @@ public class PlayerListener implements Listener { return; } // Handles creating shops - else if (!e.isCancelled() && shop == null && item != null && item.getType() != Material.AIR && p.hasPermission("quickshop.create.sell") && Util.canBeShop(b) - && p.getGameMode() != GameMode.CREATIVE && (plugin.sneakCreate == false || p.isSneaking())) { + else if (shop == null && item != null && item.getType() != Material.AIR && p.hasPermission("quickshop.create.sell") && Util.canBeShop(b) && p.getGameMode() != GameMode.CREATIVE + && (plugin.getConfigManager().isSneakCreate() == p.isSneaking())) { if (!plugin.getShopManager().canBuildShop(p, b, e.getBlockFace())) { // As of the new checking system, most plugins will tell the // player why they can't create a shop there. @@ -131,20 +130,12 @@ public class PlayerListener implements Listener { try { if (MarkUtil.hasMark(ci)) { inv.setItem(solt, new ItemStack(Material.AIR)); - p.chat("§c非法获取快捷商店悬浮物品 已清理..."); + Bukkit.broadcastMessage("§6[§b快捷商店§6] §4警告 " + p.getDisplayName() + " §c非法获取快捷商店悬浮物品 已清理..."); } } catch (final Exception ex) { } } - @EventHandler - public void onItemMove(final InventoryMoveItemEvent e) { - final ItemStack ci = e.getItem(); - if (MarkUtil.hasMark(ci)) { - e.setItem(new ItemStack(Material.AIR)); - } - } - @EventHandler public void onJoin(final PlayerJoinEvent e) { // Notify the player any messages they were sent diff --git a/src/main/java/org/maxgamer/QuickShop/QuickShop.java b/src/main/java/org/maxgamer/QuickShop/QuickShop.java index 4bf7976..3b8d8be 100644 --- a/src/main/java/org/maxgamer/QuickShop/QuickShop.java +++ b/src/main/java/org/maxgamer/QuickShop/QuickShop.java @@ -9,8 +9,6 @@ import java.sql.SQLException; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; import java.util.Map.Entry; import org.bukkit.Bukkit; @@ -18,12 +16,14 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; import org.maxgamer.QuickShop.Command.QS; +import org.maxgamer.QuickShop.Config.ConfigManager; import org.maxgamer.QuickShop.Config.ItemConfig; import org.maxgamer.QuickShop.Database.Database; import org.maxgamer.QuickShop.Database.DatabaseCore; @@ -49,25 +49,23 @@ import org.maxgamer.QuickShop.Watcher.ItemWatcher; import org.maxgamer.QuickShop.Watcher.LogWatcher; import org.mcstats.Metrics; +import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.utils.VersionChecker; public class QuickShop extends JavaPlugin { /** The active instance of QuickShop */ public static QuickShop instance; - // private Metrics metrics; - /** Whether debug info should be shown in the console */ - public static boolean debug = false; + /** The plugin default config */ + public FileConfig config; /** The economy we hook into for transactions */ private Economy economy; /** The Shop Manager used to store shops */ private ShopManager shopManager; - /** - * A set of players who have been warned - * ("Your shop isn't automatically locked") - */ - public HashSet warnings = new HashSet(); + /** The Config Manager used to read config */ + private ConfigManager configManager; /** The database for storing all our data for persistence */ private Database database; + // Listeners - We decide which one to use at runtime private ChatListener chatListener; // private HeroChatListener heroChatListener; @@ -78,24 +76,6 @@ public class QuickShop extends JavaPlugin { private final WorldListener worldListener = new WorldListener(this); private BukkitTask itemWatcherTask; private LogWatcher logWatcher; - /** Whether players are required to sneak to create/buy from a shop */ - public boolean sneak; - /** Whether players are required to sneak to create a shop */ - public boolean sneakCreate; - /** Whether players are required to sneak to trade with a shop */ - public boolean sneakTrade; - /** Whether we should use display items or not */ - public boolean display = true; - /** - * Whether we players are charged a fee to change the price on their shop - * (To help deter endless undercutting - */ - public boolean priceChangeRequiresFee = false; - /** Whether or not to limit players shop amounts */ - public boolean limit = false; - private final HashMap limits = new HashMap(); - /** Use SpoutPlugin to get item / block names */ - public boolean useSpout = false; /** * Prints debug information if QuickShop is configured to do so. @@ -104,12 +84,21 @@ public class QuickShop extends JavaPlugin { * The string to print. */ public void debug(final String s) { - if (!debug) { + if (!configManager.isDebug()) { return; } this.getLogger().info(ChatColor.YELLOW + "[Debug] " + s); } + @Override + public FileConfiguration getConfig() { + return config; + } + + public ConfigManager getConfigManager() { + return configManager; + } + /** * @return Returns the database handler for queries etc. */ @@ -129,8 +118,8 @@ public class QuickShop extends JavaPlugin { /** The plugin metrics from Hidendra */ // public Metrics getMetrics(){ return metrics; } public int getShopLimit(final Player p) { - int max = getConfig().getInt("limits.default"); - for (final Entry entry : limits.entrySet()) { + int max = configManager.getLimitdefault(); + for (final Entry entry : configManager.getLimits().entrySet()) { if (entry.getValue() > max && p.hasPermission(entry.getKey())) { max = entry.getValue(); } @@ -204,47 +193,30 @@ public class QuickShop extends JavaPlugin { } catch (final SQLException e) { e.printStackTrace(); } - this.warnings.clear(); + configManager.getWarnings().clear(); } @Override public void onEnable() { instance = this; - saveDefaultConfig(); // Creates the config folder and copies config.yml - // (If one doesn't exist) as required. - reloadConfig(); // Reloads messages.yml too, aswell as config.yml and - // others. - getConfig().options().copyDefaults(true); // Load defaults. - if (getConfig().contains("debug")) { - debug = true; - } if (loadEcon() == false) { return; } // Initialize Util Util.initialize(); - ItemConfig.load(this); // Create the shop manager. - this.shopManager = new ShopManager(this); - if (this.getConfig().getBoolean("log-actions")) { + configManager = new ConfigManager(this); + shopManager = new ShopManager(this); + if (configManager.isLogAction()) { // Logger Handler this.logWatcher = new LogWatcher(this, new File(this.getDataFolder(), "qs.log")); logWatcher.task = Bukkit.getScheduler().runTaskTimerAsynchronously(this, this.logWatcher, 150, 150); } - if (getConfig().getBoolean("shop.lock")) { + if (configManager.isShopLock()) { final LockListener ll = new LockListener(this); getServer().getPluginManager().registerEvents(ll, this); } - ConfigurationSection limitCfg = this.getConfig().getConfigurationSection("limits"); - if (limitCfg != null) { - this.limit = limitCfg.getBoolean("use", false); - getLogger().info("商店创建限制: " + limit); - limitCfg = limitCfg.getConfigurationSection("ranks"); - for (final String key : limitCfg.getKeys(true)) { - limits.put(key, limitCfg.getInt(key)); - } - getLogger().info(limits.toString()); - } + try { final ConfigurationSection dbCfg = getConfig().getConfigurationSection("database"); DatabaseCore dbCore; @@ -347,23 +319,19 @@ public class QuickShop extends JavaPlugin { Bukkit.getServer().getPluginManager().registerEvents(blockListener, this); Bukkit.getServer().getPluginManager().registerEvents(playerListener, this); Bukkit.getServer().getPluginManager().registerEvents(worldListener, this); - if (this.display) { + if (configManager.isDisplay()) { Bukkit.getServer().getPluginManager().registerEvents(chunkListener, this); // Display item handler thread getLogger().info("开启悬浮物品刷新线程..."); final ItemWatcher itemWatcher = new ItemWatcher(this); itemWatcherTask = Bukkit.getScheduler().runTaskTimer(this, itemWatcher, 20, 600); } - if (this.getConfig().getBoolean("force-bukkit-chat-handler", false) && Bukkit.getPluginManager().getPlugin("Herochat") != null) { - this.getLogger().info("Found Herochat... Hooking!"); - } else { - this.chatListener = new ChatListener(this); - Bukkit.getServer().getPluginManager().registerEvents(chatListener, this); - } + this.chatListener = new ChatListener(this); + Bukkit.getServer().getPluginManager().registerEvents(chatListener, this); // Command handlers final QS commandExecutor = new QS(this); getCommand("qs").setExecutor(commandExecutor); - if (getConfig().getInt("shop.find-distance") > 100) { + if (configManager.getFindDistance() > 100) { getLogger().warning("商店查找半径过大 可能导致服务器Lag! 推荐使用低于 100 的配置!"); } new VersionChecker(this); @@ -374,16 +342,17 @@ public class QuickShop extends JavaPlugin { } } + @Override + public void onLoad() { + config = new FileConfig(this); + ItemConfig.load(this); + MsgUtil.init(this); + } + /** Reloads QuickShops config */ @Override public void reloadConfig() { - super.reloadConfig(); - // Load quick variables - this.display = this.getConfig().getBoolean("shop.display-items"); - this.sneak = this.getConfig().getBoolean("shop.sneak-only"); - this.sneakCreate = this.getConfig().getBoolean("shop.sneak-to-create"); - this.sneakTrade = this.getConfig().getBoolean("shop.sneak-to-trade"); - this.priceChangeRequiresFee = this.getConfig().getBoolean("shop.price-change-requires-fee"); - MsgUtil.loadCfgMessages(); + config.reload(); + ItemConfig.reload(); } } \ No newline at end of file diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/ContainerShop.java b/src/main/java/org/maxgamer/QuickShop/Shop/ContainerShop.java index bf3e3ef..a20a4ae 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/ContainerShop.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/ContainerShop.java @@ -52,7 +52,7 @@ public class ContainerShop implements Shop { this.item = item.clone(); this.plugin = (QuickShop) Bukkit.getPluginManager().getPlugin("QuickShop"); this.item.setAmount(1); - if (plugin.display) { + if (plugin.getConfigManager().isDisplay()) { this.displayItem = new DisplayItem(this, this.item); } this.shopType = ShopType.SELLING; @@ -371,7 +371,7 @@ public class ContainerShop implements Shop { continue; } final Sign sign = (Sign) b.getState(); - if (sign.getLine(0).contains("[QuickShop")) { + if (sign.getLine(0).contains("[QuickShop]")) { signs.add(sign); } else { boolean text = false; @@ -669,7 +669,7 @@ public class ContainerShop implements Shop { } private void checkDisplay() { - if (plugin.display == false) { + if (plugin.getConfigManager().isDisplay() == false) { return; } if (getLocation().getWorld() == null) { diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/DisplayItem.java b/src/main/java/org/maxgamer/QuickShop/Shop/DisplayItem.java index 08831b2..622e2f9 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/DisplayItem.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/DisplayItem.java @@ -6,7 +6,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import org.maxgamer.QuickShop.QuickShop; import org.maxgamer.QuickShop.Util.NMS; /** @@ -85,9 +84,6 @@ public class DisplayItem { if (this.shop.matches(near)) { e.remove(); removed = true; - if (QuickShop.debug) { - System.out.println("Removed rogue item: " + near.getType()); - } } } } @@ -116,8 +112,5 @@ public class DisplayItem { NMS.safeGuard(this.item); } catch (final Exception e) { } - if (QuickShop.debug) { - System.out.println("Spawned item. Safeguarding."); - } } } \ No newline at end of file diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java b/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java index 0389b5d..3e9ad58 100644 --- a/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java +++ b/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java @@ -1,6 +1,7 @@ package org.maxgamer.QuickShop.Shop; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.NoSuchElementException; @@ -108,7 +109,7 @@ public class ShopManager { * @return True if they're allowed to place a shop there. */ public boolean canBuildShop(final Player p, final Block b, final BlockFace bf) { - if (plugin.limit) { + if (plugin.getConfigManager().isLimit()) { int owned = 0; final Iterator it = getShopIterator(); while (it.hasNext()) { @@ -142,7 +143,7 @@ public class ShopManager { * the database. Call this on plugin disable ONLY. */ public void clear() { - if (plugin.display) { + if (plugin.getConfigManager().isDisplay()) { for (final World world : Bukkit.getWorlds()) { for (final Chunk chunk : world.getLoadedChunks()) { final HashMap inChunk = this.getShops(chunk); @@ -347,9 +348,10 @@ public class ShopManager { if (!plugin.getConfig().getBoolean("shop.lock")) { // Warn them if they haven't been warned since // reboot - if (!plugin.warnings.contains(p.getName())) { + final HashSet warings = plugin.getConfigManager().getWarnings(); + if (!warings.contains(p.getName())) { p.sendMessage(MsgUtil.p("shops-arent-locked")); - plugin.warnings.add(p.getName()); + warings.add(p.getName()); } } // Figures out which way we should put the sign on and diff --git a/src/main/java/org/maxgamer/QuickShop/Util/MarkUtil.java b/src/main/java/org/maxgamer/QuickShop/Util/MarkUtil.java index da9bb7c..73b9879 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/MarkUtil.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/MarkUtil.java @@ -4,11 +4,12 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; public class MarkUtil { - static String mark = "§q§s§r"; + static String mark = "§q§s§6[§b快捷商店§6] §c悬浮物品§r "; + static int conut = 0; public static void addMark(final ItemStack ci) { final ItemMeta meta = ci.getItemMeta(); - meta.setDisplayName(mark + Util.getName(ci)); + meta.setDisplayName(mark + " " + Util.getName(ci) + " " + conut++); ci.setItemMeta(meta); } diff --git a/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java b/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java index bd579ea..4d23faa 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/MsgUtil.java @@ -22,10 +22,6 @@ public class MsgUtil { private static FileConfig messages; private static HashMap> player_messages = new HashMap>(); - static { - plugin = QuickShop.instance; - } - /** * Deletes any messages that are older than a week in the database, to save * on space. @@ -60,10 +56,8 @@ public class MsgUtil { return false; } - /** - * Loads all the messages from messages.yml - */ - public static void loadCfgMessages() { + public static void init(final QuickShop plugin) { + MsgUtil.plugin = plugin; // Load messages.yml messages = new FileConfig(plugin, "messages.yml"); // Parse colour codes diff --git a/src/main/java/org/maxgamer/QuickShop/Util/NMS.java b/src/main/java/org/maxgamer/QuickShop/Util/NMS.java index 7f40985..b86d1ed 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/NMS.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/NMS.java @@ -5,22 +5,12 @@ import java.lang.reflect.Method; import org.bukkit.entity.Item; import org.bukkit.inventory.ItemStack; -import org.maxgamer.QuickShop.QuickShop; public class NMS { public static void safeGuard(final Item item) throws ClassNotFoundException { - if (QuickShop.debug) { - System.out.println("Renaming"); - } rename(item.getItemStack()); - if (QuickShop.debug) { - System.out.println("Protecting"); - } protect(item); - if (QuickShop.debug) { - System.out.println("Seting pickup delay"); - } item.setPickupDelay(2147483647); } diff --git a/src/main/java/org/maxgamer/QuickShop/Util/Util.java b/src/main/java/org/maxgamer/QuickShop/Util/Util.java index f92d72e..bc701ac 100644 --- a/src/main/java/org/maxgamer/QuickShop/Util/Util.java +++ b/src/main/java/org/maxgamer/QuickShop/Util/Util.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; @@ -169,25 +168,29 @@ public class Util { // Let's make very long names shorter for our sign public static String getNameForSign(final ItemStack itemStack) { // final String name = getDataName(itemStack.getType(), itemStack.getDurability()); - final String name = getName(itemStack); + String name = getName(itemStack); - final String[] nameParts = name.split("_"); - if (nameParts.length == 1) { - return firstUppercase(nameParts[0]); + if (name.length() > 16) { + name = name.substring(0, 16); } - - for (int i = 0; i < nameParts.length - 1; i++) { - final int length = StringUtils.join(nameParts).length(); - if (length > 16) { - nameParts[i] = nameParts[i].substring(0, 1) + "."; - } else { - nameParts[i] = firstUppercase(nameParts[i]); - } - } - - nameParts[nameParts.length - 1] = firstUppercase(nameParts[nameParts.length - 1]); - - return StringUtils.join(nameParts); + return name; + // final String[] nameParts = name.split("_"); + // if (nameParts.length == 1) { + // return firstUppercase(nameParts[0]); + // } + // + // for (int i = 0; i < nameParts.length - 1; i++) { + // final int length = StringUtils.join(nameParts).length(); + // if (length > 16) { + // nameParts[i] = nameParts[i].substring(0, 1) + "."; + // } else { + // nameParts[i] = firstUppercase(nameParts[i]); + // } + // } + // + // nameParts[nameParts.length - 1] = firstUppercase(nameParts[nameParts.length - 1]); + // + // return StringUtils.join(nameParts); } /** diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d17ae7d..48138f1 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,3 +1,8 @@ +Version: 1.0 + +#超级工具(OP可以用该工具在创造模式打破所有商店) +superitem: GOLD_AXE + #Tax amount (decimal) - Eg, P1 buys $50 worth of stuff from P2. Therefore, P1 loses $50, P2 gains $(1-0.05)*50, and tax-account gains $(0.05)*50. tax: 0.05 #The fake player who money from taxing people goes to diff --git a/src/main/resources/item.yml b/src/main/resources/item.yml index 3a0d045..abf2243 100644 --- a/src/main/resources/item.yml +++ b/src/main/resources/item.yml @@ -1,4 +1,4 @@ -Version: 1.0 +Version: 1.1 AIR_-1: 爪子 AIR: 爪子 @@ -7,7 +7,12 @@ GRASS: 草方块 DIRT: 泥土 COBBLESTONE: 圆石 WOOD: 木板 -SAPLING: 树苗 +SAPLING: 橡木树苗 +SAPLING_1: 云杉树苗 +SAPLING_2: 白桦树苗 +SAPLING_3: 丛林树苗 +SAPLING_4: 金合欢树苗 +SAPLING_5: 深色橡木树苗 BEDROCK: 基岩 WATER: 水 STATIONARY_WATER: 静态的水 @@ -27,7 +32,7 @@ LAPIS_BLOCK: 青金石块 DISPENSER: 发射器 SANDSTONE: 沙石 NOTE_BLOCK: 音符盒 -BED_BLOCK: BED_BLOCK +BED_BLOCK: 床 POWERED_RAIL: 动力铁轨 DETECTOR_RAIL: 探测铁轨 PISTON_STICKY_BASE: 粘性活塞 @@ -117,10 +122,10 @@ WATER_LILY: 睡莲 NETHER_BRICK: 地狱砖块 NETHER_FENCE: 地狱栅栏 NETHER_BRICK_STAIRS: 地狱砖楼梯 -NETHER_WARTS: NETHER_WARTS +NETHER_WARTS: 地狱疣 ENCHANTMENT_TABLE: 附魔台 -BREWING_STAND: BREWING_STAND -CAULDRON: CAULDRON +BREWING_STAND: 酿造台 +CAULDRON: 炼药锅 ENDER_PORTAL: 末地传送门 ENDER_PORTAL_FRAME: 末地传送框架 ENDER_STONE: 末地石 @@ -142,13 +147,13 @@ JUNGLE_WOOD_STAIRS: 丛林木楼梯 COMMAND: 命令方块 BEACON: 信标 COBBLE_WALL: 圆石墙 -FLOWER_POT: FLOWER_POT +FLOWER_POT: 花盆 CARROT: 胡萝卜 POTATO: 土豆 WOOD_BUTTON: 木按钮 -SKULL: SKULL +SKULL: 头颅 ANVIL: 铁毡 -TRAPPED_CHEST: TRAPPED_CHEST +TRAPPED_CHEST: 陷阱箱 GOLD_PLATE: 测重压力板(轻质) IRON_PLATE: 测重压力板(重质) REDSTONE_COMPARATOR_OFF: 红石比较器(关闭) @@ -156,7 +161,7 @@ REDSTONE_COMPARATOR_ON: 红石比较器(打开) DAYLIGHT_DETECTOR: 阳光传感器 REDSTONE_BLOCK: 红石块 QUARTZ_ORE: 下界石英矿石 -HOPPER: 漏洞 +HOPPER: 漏斗 QUARTZ_BLOCK: 石英块 QUARTZ_STAIRS: 石英楼梯 ACTIVATOR_RAIL: 激活铁轨 @@ -236,8 +241,8 @@ GOLD_CHESTPLATE: 金外套 GOLD_LEGGINGS: 金护腿 GOLD_BOOTS: 金靴子 FLINT: 燧石 -PORK: 猪排 -GRILLED_PORK: GRILLED_PORK +PORK: 生猪排 +GRILLED_PORK: 熟猪排 PAINTING: 画 GOLDEN_APPLE: 金苹果 SIGN: 木牌 @@ -253,8 +258,8 @@ SNOW_BALL: 雪球 BOAT: 船 LEATHER: 皮革 MILK_BUCKET: 牛奶桶 -CLAY_BRICK: CLAY_BRICK -CLAY_BALL: 粘土 +CLAY_BRICK: 红砖 +CLAY_BALL: 粘土球 SUGAR_CANE: 甘蔗 PAPER: 纸 BOOK: 书 @@ -294,8 +299,8 @@ POTION: 药水 GLASS_BOTTLE: 玻璃瓶 SPIDER_EYE: 蜘蛛眼 FERMENTED_SPIDER_EYE: 发酵蛛眼 -BLAZE_POWDER: BLAZE_POWDER -MAGMA_CREAM: MAGMA_CREAM +BLAZE_POWDER: 烈焰粉 +MAGMA_CREAM: 岩浆膏 BREWING_STAND_ITEM: 酿造台 CAULDRON_ITEM: 炼药锅 BREWING_STAND: 酿造台 @@ -309,7 +314,7 @@ BOOK_AND_QUILL: 书和笔 WRITTEN_BOOK: 成书 EMERALD: 绿宝石 ITEM_FRAME: 物品展示框 -FLOWER_POT_ITEM: FLOWER_POT_ITEM +FLOWER_POT_ITEM: 花盆 CARROT_ITEM: 胡萝卜 POTATO_ITEM: 马铃薯 BAKED_POTATO: 烤马铃薯 @@ -317,11 +322,11 @@ POISONOUS_POTATO: 毒马铃薯 EMPTY_MAP: 空地图 GOLDEN_CARROT: 金萝卜 SKULL_ITEM: 头颅 -CARROT_STICK: CARROT_STICK +CARROT_STICK: 胡萝卜 NETHER_STAR: 下界之星 PUMPKIN_PIE: 南瓜派 FIREWORK: 烟花 -FIREWORK_CHARGE: FIREWORK_CHARGE +FIREWORK_CHARGE: 烟花 ENCHANTED_BOOK: 附魔书 REDSTONE_COMPARATOR: 红石比较器 NETHER_BRICK_ITEM: 地狱砖块