diff --git a/pom.xml b/pom.xml
index 11ef6ca..3c6b123 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.maxgamer
QuickShop
- 1.9.4
+ 1.9.5
快捷商店重置版本...
${project.name}
@@ -58,11 +58,11 @@
DEBUG
- &a全新版本 &c虚拟悬浮物(橙子提供 对 就是那个汉化COI的逗比)&e7老板修复逗比BUG...
+ §a全新版本 §c虚拟悬浮物(橙子提供 对 就是那个汉化COI的逗比)§e7老板修复逗比BUG...
- &b1.9.4 - &a1.9+兼容虚拟悬浮物...;
- &b1.9.3 - &a木牌第一行显示配置文件的guititle内容...;
- &b1.9.2 - &c修复一个在删除商店时导致的报错...;
+ §b1.9.5 - §a1.10+兼容虚拟悬浮物...;
+ §b1.9.4 - §a1.9+兼容虚拟悬浮物...;
+ §b1.9.3 - §a木牌第一行显示配置文件的guititle内容...;
UTF-8
@@ -96,7 +96,7 @@
pw.yumc
YumCore
jar
- 1.0
+ 1.1
io.github.Cnly.WowSuchCleaner
@@ -110,13 +110,6 @@
system
${project.basedir}/lib/WorldEdit.jar
-
- com.comphenix.protocol
- ProtocolLib
- 3.6.5
- system
- ${project.basedir}/lib/ProtocolLib-3.6.5.jar
-
com.comphenix.protocol
ProtocolLib
diff --git a/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java b/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java
index 4334bd1..95a4f6f 100644
--- a/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java
+++ b/src/main/java/org/maxgamer/QuickShop/Command/QuickShopCommands.java
@@ -1,9 +1,5 @@
package org.maxgamer.QuickShop.Command;
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
@@ -14,25 +10,26 @@ import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.util.BlockIterator;
-import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Database.Database;
import org.maxgamer.QuickShop.Database.MySQLCore;
import org.maxgamer.QuickShop.Database.SQLiteCore;
+import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Shop.ContainerShop;
import org.maxgamer.QuickShop.Shop.Shop;
import org.maxgamer.QuickShop.Shop.ShopChunk;
import org.maxgamer.QuickShop.Shop.ShopType;
import org.maxgamer.QuickShop.Util.MsgUtil;
-
import pw.yumc.YumCore.bukkit.P;
-import pw.yumc.YumCore.commands.CommandArgument;
-import pw.yumc.YumCore.commands.CommandExecutor;
-import pw.yumc.YumCore.commands.CommandHelpParse;
import pw.yumc.YumCore.commands.CommandManager;
import pw.yumc.YumCore.commands.annotation.Cmd;
import pw.yumc.YumCore.commands.annotation.Cmd.Executor;
import pw.yumc.YumCore.commands.annotation.Help;
-import pw.yumc.YumCore.kit.StrKit;
+import pw.yumc.YumCore.commands.interfaces.CommandExecutor;
+import pw.yumc.YumCore.commands.interfaces.CommandHelpParse;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
QuickShop plugin = P.getPlugin();
@@ -43,14 +40,13 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
@Cmd(aliases = "b", permission = "quickshop.create.buy", executor = Executor.PLAYER)
@Help("command.description.buy")
- public void buy(final CommandArgument e) {
- changeShopType(e.getSender(), ShopType.BUYING);
+ public void buy(Player player) {
+ changeShopType(player, ShopType.BUYING);
}
@Cmd(aliases = "c", permission = "quickshop.clean")
@Help("command.description.clean")
- public void clean(final CommandArgument e) {
- final CommandSender sender = e.getSender();
+ public void clean(CommandSender sender) {
sender.sendMessage(MsgUtil.p("command.cleaning"));
final Iterator shIt = plugin.getShopManager().getShopIterator();
int i = 0;
@@ -73,11 +69,10 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
sender.sendMessage(MsgUtil.p("command.cleaned", "" + i));
}
- @Cmd(aliases = "e", permission = "quickshop.empty")
+ @Cmd(aliases = "e", permission = "quickshop.empty", executor = Executor.PLAYER)
@Help("command.description.empty")
- public void empty(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- final BlockIterator bIt = new BlockIterator((Player) sender, 10);
+ public void empty(Player player) {
+ final BlockIterator bIt = new BlockIterator(player, 10);
while (bIt.hasNext()) {
final Block b = bIt.next();
final Shop shop = plugin.getShopManager().getShop(b.getLocation());
@@ -85,22 +80,19 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
if (shop instanceof ContainerShop) {
final ContainerShop cs = (ContainerShop) shop;
cs.getInventory().clear();
- sender.sendMessage(MsgUtil.p("empty-success"));
+ player.sendMessage(MsgUtil.p("empty-success"));
} else {
- sender.sendMessage(MsgUtil.p("not-looking-at-shop"));
+ player.sendMessage(MsgUtil.p("not-looking-at-shop"));
}
return;
}
}
- sender.sendMessage(MsgUtil.p("not-looking-at-shop"));
- return;
+ player.sendMessage(MsgUtil.p("not-looking-at-shop"));
}
@Cmd(minimumArguments = 1, permission = "quickshop.export")
@Help(value = "command.description.export", possibleArguments = "[mysql|sqlite]")
- public void export(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- final String type = e.getArgs()[0].toLowerCase();
+ public void export(CommandSender sender, String type) {
if (type.startsWith("mysql")) {
if (plugin.getDB().getCore() instanceof MySQLCore) {
sender.sendMessage(ChatColor.RED + "数据已保存在 MySQL 无需转换!");
@@ -130,10 +122,8 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
return;
}
final File file = new File(plugin.getDataFolder(), "shops.db");
- if (file.exists()) {
- if (file.delete() == false) {
- sender.sendMessage(ChatColor.RED + "警告: 删除旧的数据文件 shops.db 失败. 可能会导致部分信息错误.");
- }
+ if (file.exists() && !file.delete()) {
+ sender.sendMessage(ChatColor.RED + "警告: 删除旧的数据文件 shops.db 失败. 可能会导致部分信息错误.");
}
final SQLiteCore core = new SQLiteCore(file);
try {
@@ -144,17 +134,13 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
ex.printStackTrace();
sender.sendMessage(ChatColor.RED + "导出数据到 SQLite: " + file.toString() + " 失败 由于: " + ex.getMessage());
}
- return;
}
}
@Cmd(aliases = "f", minimumArguments = 2, permission = "quickshop.find", executor = Executor.PLAYER)
@Help("command.description.find")
- public void find(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- String lookFor = StrKit.consolidateStrings(e.getArgs(), 0);
+ public void find(Player p, String lookFor) {
lookFor = lookFor.toLowerCase();
- final Player p = (Player) sender;
final Location loc = p.getEyeLocation().clone();
final double minDistance = plugin.getConfig().getInt("shop.find-distance");
double minDistanceSquared = minDistance * minDistance;
@@ -177,20 +163,18 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
}
}
if (closest == null) {
- sender.sendMessage(MsgUtil.p("no-nearby-shop", e.getArgs()[0]));
+ p.sendMessage(MsgUtil.p("no-nearby-shop", lookFor));
return;
}
final Location lookat = closest.getLocation().clone().add(0.5, 0.5, 0.5);
// Hack fix to make /qs find not used by /back
p.teleport(this.lookAt(loc, lookat).add(0, -1.62, 0), TeleportCause.PLUGIN);
p.sendMessage(MsgUtil.p("nearby-shop-this-way", "" + (int) Math.floor(Math.sqrt(minDistanceSquared))));
- return;
}
@Cmd(aliases = "i", permission = "quickshop.info")
@Help("command.description.info")
- public void info(final CommandArgument e) {
- final CommandSender sender = e.getSender();
+ public void info(CommandSender sender) {
int buying, selling, doubles, chunks, worlds, unlimited;
buying = selling = doubles = chunks = worlds = unlimited = 0;
int nostock = 0;
@@ -229,18 +213,9 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
return MsgUtil.p(str);
}
- @Cmd(aliases = "p", minimumArguments = 1, permission = "quickshop.create.changeprice")
+ @Cmd(aliases = "p", minimumArguments = 1, permission = "quickshop.create.changeprice", executor = Executor.PLAYER)
@Help(value = "command.description.price", possibleArguments = "<价格>")
- public void price(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- final Player p = (Player) sender;
- double price;
- try {
- price = Double.parseDouble(e.getArgs()[0]);
- } catch (final NumberFormatException ex) {
- sender.sendMessage(MsgUtil.p("thats-not-a-number"));
- return;
- }
+ public void price(Player sender, Double price) {
if (price < 0.01) {
sender.sendMessage(MsgUtil.p("price-too-cheap"));
return;
@@ -248,24 +223,24 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
double fee = 0;
if (plugin.getConfigManager().isPriceChangeRequiresFee()) {
fee = plugin.getConfigManager().getFeeForPriceChange();
- if (fee > 0 && plugin.getEcon().getBalance(p.getName()) < fee) {
+ if (fee > 0 && plugin.getEcon().getBalance(sender.getName()) < fee) {
sender.sendMessage(MsgUtil.p("you-cant-afford-to-change-price", plugin.getEcon().format(fee)));
return;
}
}
- final BlockIterator bIt = new BlockIterator(p, 10);
+ final BlockIterator bIt = new BlockIterator(sender, 10);
// Loop through every block they're looking at upto 10 blocks away
while (bIt.hasNext()) {
final Block b = bIt.next();
final Shop shop = plugin.getShopManager().getShop(b.getLocation());
- if (shop != null && (shop.getOwner().equals(p.getName()) || sender.hasPermission("quickshop.other.price"))) {
+ if (shop != null && (shop.getOwner().equals(sender.getName()) || sender.hasPermission("quickshop.other.price"))) {
if (shop.getPrice() == price) {
// Stop here if there isn't a price change
sender.sendMessage(MsgUtil.p("no-price-change"));
return;
}
if (fee > 0) {
- if (!plugin.getEcon().withdraw(p.getName(), fee)) {
+ if (!plugin.getEcon().withdraw(sender.getName(), fee)) {
sender.sendMessage(MsgUtil.p("you-cant-afford-to-change-price", plugin.getEcon().format(fee)));
return;
}
@@ -298,21 +273,12 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
}
}
sender.sendMessage(MsgUtil.p("not-looking-at-shop"));
- return;
}
@Cmd(minimumArguments = 1, permission = "quickshop.refill", executor = Executor.PLAYER)
@Help(value = "command.description.refill", possibleArguments = "<数量>")
- public void refill(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- int add;
- try {
- add = Integer.parseInt(e.getArgs()[0]);
- } catch (final NumberFormatException ex) {
- sender.sendMessage(MsgUtil.p("thats-not-a-number"));
- return;
- }
- final BlockIterator bIt = new BlockIterator((Player) sender, 10);
+ public void refill(Player sender, Integer add) {
+ final BlockIterator bIt = new BlockIterator(sender, 10);
while (bIt.hasNext()) {
final Block b = bIt.next();
final Shop shop = plugin.getShopManager().getShop(b.getLocation());
@@ -323,13 +289,11 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
}
}
sender.sendMessage(MsgUtil.p("not-looking-at-shop"));
- return;
}
@Cmd(permission = "quickshop.reload")
@Help("command.description.reload")
- public void reload(final CommandArgument e) {
- final CommandSender sender = e.getSender();
+ public void reload(CommandSender sender) {
sender.sendMessage(MsgUtil.p("command.reloading"));
plugin.reloadConfig();
Bukkit.getPluginManager().disablePlugin(plugin);
@@ -338,8 +302,7 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
@Cmd(aliases = "r", permission = "quickshop.delete", executor = Executor.PLAYER)
@Help("command.description.remove")
- public void remove(final CommandArgument e) {
- final Player p = (Player) e.getSender();
+ public void remove(Player p) {
final BlockIterator bIt = new BlockIterator(p, 10);
while (bIt.hasNext()) {
final Block b = bIt.next();
@@ -357,17 +320,15 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
p.sendMessage(ChatColor.RED + "未找到商店!");
}
- @Cmd(aliases = "s", permission = "quickshop.create.sell")
+ @Cmd(aliases = "s", permission = "quickshop.create.sell", executor = Executor.PLAYER)
@Help("command.description.sell")
- public void sell(final CommandArgument e) {
- changeShopType(e.getSender(), ShopType.SELLING);
+ public void sell(Player player) {
+ changeShopType(player, ShopType.SELLING);
}
@Cmd(aliases = "so", minimumArguments = 1, permission = "quickshop.setowner", executor = Executor.PLAYER)
@Help("command.description.setowner")
- public void setowner(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- final String owner = e.getArgs()[0];
+ public void setowner(CommandSender sender, String owner) {
final BlockIterator bIt = new BlockIterator((Player) sender, 10);
while (bIt.hasNext()) {
final Block b = bIt.next();
@@ -384,9 +345,8 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
@Cmd(permission = "quickshop.unlimited", executor = Executor.PLAYER)
@Help("command.description.unlimited")
- public void unlimited(final CommandArgument e) {
- final CommandSender sender = e.getSender();
- final BlockIterator bIt = new BlockIterator((Player) sender, 10);
+ public void unlimited(Player sender) {
+ final BlockIterator bIt = new BlockIterator(sender, 10);
while (bIt.hasNext()) {
final Block b = bIt.next();
final Shop shop = plugin.getShopManager().getShop(b.getLocation());
@@ -400,12 +360,12 @@ public class QuickShopCommands implements CommandExecutor, CommandHelpParse {
sender.sendMessage(MsgUtil.p("not-looking-at-shop"));
}
- private void changeShopType(final CommandSender sender, final ShopType shopType) {
- final BlockIterator bIt = new BlockIterator((Player) sender, 10);
+ private void changeShopType(final Player sender, final ShopType shopType) {
+ final BlockIterator bIt = new BlockIterator(sender, 10);
while (bIt.hasNext()) {
final Block b = bIt.next();
final Shop shop = plugin.getShopManager().getShop(b.getLocation());
- if (shop != null && shop.getOwner().equals(((Player) sender).getName())) {
+ if (shop != null && shop.getOwner().equals(sender.getName())) {
shop.setShopType(shopType);
shop.setSignText();
shop.update();
diff --git a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java
index 842f9f7..40e61ec 100644
--- a/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java
+++ b/src/main/java/org/maxgamer/QuickShop/Config/ConfigManager.java
@@ -1,21 +1,17 @@
package org.maxgamer.QuickShop.Config;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
-
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.inventory.ItemStack;
import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Shop.Item.FakeItem_17_18;
import org.maxgamer.QuickShop.Shop.Item.FakeItem_19_110;
-
import pw.yumc.YumCore.bukkit.Log;
import pw.yumc.YumCore.config.FileConfig;
import pw.yumc.YumCore.tellraw.Tellraw;
+import java.util.*;
+
public class ConfigManager {
private boolean enableMagicLib = false;
/** Whether debug info should be shown in the console */
@@ -50,7 +46,7 @@ public class ConfigManager {
private double tax = 0;
private final String taxAccount;
private boolean fakeItem = false;
-
+ private List prevent;
/**
* A set of players who have been warned
* ("Your shop isn't automatically locked")
@@ -70,7 +66,7 @@ public class ConfigManager {
}
try {
this.superItem = Material.valueOf(config.getString("superitem"));
- } catch (final Exception e) {
+ } catch (final Exception ignored) {
}
this.tax = config.getDouble("tax");
this.showTax = config.getBoolean("show-tax");
@@ -87,6 +83,7 @@ public class ConfigManager {
this.preventhopper = config.getBoolean("preventhopper");
this.guiTitle = config.getMessage("guititle", guiTitle);
this.warnings = Collections.emptySet();
+ this.prevent = config.getStringList("prevent");
if (config.getBoolean("fakeitem", true)) {
try {
plugin.getLogger().info("启用虚拟悬浮物 尝试启动中...");
@@ -221,4 +218,11 @@ public class ConfigManager {
this.fakeItem = fakeItem;
}
+ public List getPrevent() {
+ return prevent;
+ }
+
+ public void setPrevent(List prevent) {
+ this.prevent = prevent;
+ }
}
diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/Info.java b/src/main/java/org/maxgamer/QuickShop/Shop/Info.java
index 7b82597..3bfcc95 100644
--- a/src/main/java/org/maxgamer/QuickShop/Shop/Info.java
+++ b/src/main/java/org/maxgamer/QuickShop/Shop/Info.java
@@ -18,9 +18,9 @@ public class Info {
* The location they clicked (Block.getLocation())
* @param action
* The action (ShopAction.*)
- * @param material
+ * @param item
* The material they were holding
- * @param data
+ * @param last
* The data value of the material
*/
public Info(Location loc, ShopAction action, ItemStack item, Block last) {
@@ -38,9 +38,9 @@ public class Info {
* The location they clicked (Block.getLocation())
* @param action
* The action (ShopAction.*)
- * @param material
+ * @param item
* The material they were holding
- * @param data
+ * @param last
* The data value of the material
* @param shop
* The shop they interacted with, or null if none
@@ -67,9 +67,7 @@ public class Info {
return true;
if (!this.shop.getLocation().equals(shop.getLocation()))
return true;
- if (!this.shop.matches(shop.getItem()))
- return true;
- return false;
+ return !this.shop.matches(shop.getItem());
}
public ShopAction getAction() {
diff --git a/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java b/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java
index 9fff9c0..f193f50 100644
--- a/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java
+++ b/src/main/java/org/maxgamer/QuickShop/Shop/ShopManager.java
@@ -1,16 +1,6 @@
package org.maxgamer.QuickShop.Shop;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.Set;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Chunk;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.World;
+import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
@@ -19,11 +9,16 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.Sign;
-import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Database.Database;
+import org.maxgamer.QuickShop.QuickShop;
import org.maxgamer.QuickShop.Util.MsgUtil;
import org.maxgamer.QuickShop.Util.Util;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
public class ShopManager {
private final HashMap actions = new HashMap<>();
@@ -45,6 +40,10 @@ 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.getConfigManager().getPrevent().contains(b.getWorld().getName().toLowerCase())) {
+ p.sendMessage(MsgUtil.p("prevent-create"));
+ return false;
+ }
if (plugin.getConfigManager().isLimit()) {
int owned = 0;
final Iterator it = getShopIterator();
@@ -64,17 +63,12 @@ public class ShopManager {
final PlayerInteractEvent pie = new PlayerInteractEvent(p, Action.RIGHT_CLICK_BLOCK, new ItemStack(Material.AIR), b, bf); // PIE = PlayerInteractEvent - What else?
Bukkit.getPluginManager().callEvent(pie);
pie.getPlayer().closeInventory(); // If the player has chat open, this will close their chat.
- if (pie.isCancelled()) {
- return false;
- }
- } catch (final Exception e) {
+ if (pie.isCancelled()) { return false; }
+ } catch (final Exception ignored) {
}
final ShopPreCreateEvent spce = new ShopPreCreateEvent(p, b.getLocation());
Bukkit.getPluginManager().callEvent(spce);
- if (spce.isCancelled()) {
- return false;
- }
- return true;
+ return !spce.isCancelled();
}
/**
@@ -106,7 +100,7 @@ public class ShopManager {
// Write it to the database
final String q = "INSERT INTO shops (owner, price, itemConfig, x, y, z, world, unlimited, type) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
plugin.getDB().execute(q,
- shop.getOwner().toString(),
+ shop.getOwner(),
shop.getPrice(),
Util.serialize(item),
loc.getBlockX(),
@@ -149,9 +143,7 @@ public class ShopManager {
*/
public Shop getShop(final Location loc) {
final HashMap inChunk = getShops(loc.getChunk());
- if (inChunk == null) {
- return null;
- }
+ if (inChunk == null) { return null; }
// We can do this because WorldListener updates the world reference so
// the world in loc is the same as world in inChunk.get(loc)
return inChunk.get(loc);
@@ -186,11 +178,10 @@ public class ShopManager {
*/
public HashMap getShops(final Chunk c) {
// long start = System.nanoTime();
- final HashMap shops = getShops(c.getWorld().getName(), c.getX(), c.getZ());
// long end = System.nanoTime();
// System.out.println("Chunk lookup in " + ((end - start)/1000000.0) +
// "ms.");
- return shops;
+ return getShops(c.getWorld().getName(), c.getX(), c.getZ());
}
/**
@@ -207,9 +198,7 @@ public class ShopManager {
public HashMap getShops(final String world, final int chunkX, final int chunkZ) {
final HashMap> inWorld = this.getShops(world);
- if (inWorld == null) {
- return null;
- }
+ if (inWorld == null) { return null; }
final ShopChunk shopChunk = new ShopChunk(world, chunkX, chunkZ);
return inWorld.get(shopChunk);
}
@@ -219,14 +208,13 @@ public class ShopManager {
final HashMap actions = getActions();
// They wanted to do something.
final Info info = actions.remove(p.getName());
- if (info == null) {
- return; // multithreaded means this can happen
+ if (info == null) { return; // multithreaded means this can happen
}
/* Creation handling */
if (info.getAction() == ShopAction.CREATE) {
create(p, info, message);
} else if (/* Purchase Handling */info.getAction() == ShopAction.BUY) {
- int amount = 0;
+ int amount;
try {
amount = Integer.parseInt(message);
} catch (final NumberFormatException e) {
@@ -236,7 +224,7 @@ public class ShopManager {
// Get the shop they interacted with
final Shop shop = plugin.getShopManager().getShop(info.getLocation());
// It's not valid anymore
- if (shop == null || Util.canBeShop(info.getLocation().getBlock()) == false) {
+ if (shop == null || !Util.canBeShop(info.getLocation().getBlock())) {
p.sendMessage(MsgUtil.p("chest-was-removed"));
return;
}
@@ -250,9 +238,6 @@ public class ShopManager {
buy(p, shop, amount);
}
shop.setSignText(); // Update the signs count
- } else {
- /* If it was already cancelled (from destroyed) */
- return; // It was cancelled, go away.
}
}
@@ -333,15 +318,7 @@ public class ShopManager {
p.sendMessage(MsgUtil.p("you-dont-have-that-many-items", "" + count, shop.getDataName()));
return;
}
- if (amount == 0) {
- // Dumb.
- MsgUtil.sendPurchaseSuccess(p, shop, amount);
- return;
- } else if (amount < 0) {
- // & Dumber
- p.sendMessage(MsgUtil.p("negative-amount"));
- return;
- }
+ if (!checkAmount(p, shop, amount)) { return; }
// Money handling
if (!p.getName().equals(shop.getOwner())) {
// Don't tax them if they're purchasing from
@@ -390,7 +367,7 @@ public class ShopManager {
p.sendMessage(MsgUtil.p("no-double-chests"));
return;
}
- if (Util.canBeShop(info.getLocation().getBlock()) == false) {
+ if (!Util.canBeShop(info.getLocation().getBlock())) {
p.sendMessage(MsgUtil.p("chest-was-removed"));
return;
}
@@ -426,9 +403,7 @@ public class ShopManager {
}
final ShopCreateEvent e = new ShopCreateEvent(shop, p);
Bukkit.getPluginManager().callEvent(e);
- if (e.isCancelled()) {
- return;
- }
+ if (e.isCancelled()) { return; }
shop.onLoad();
/* The shop has hereforth been successfully created */
createShop(shop);
@@ -460,22 +435,19 @@ public class ShopManager {
});
shop.setSignText();
}
- if (shop instanceof ContainerShop) {
- final ContainerShop cs = (ContainerShop) shop;
- if (cs.isDoubleShop()) {
- final Shop nextTo = cs.getAttachedShop();
- if (nextTo.getPrice() > shop.getPrice()) {
- // The one next to it must always be a
- // buying shop.
- p.sendMessage(MsgUtil.p("buying-more-than-selling"));
- }
+ final ContainerShop cs = (ContainerShop) shop;
+ if (cs.isDoubleShop()) {
+ final Shop nextTo = cs.getAttachedShop();
+ if (nextTo.getPrice() > shop.getPrice()) {
+ // The one next to it must always be a
+ // buying shop.
+ p.sendMessage(MsgUtil.p("buying-more-than-selling"));
}
}
}
/* They didn't enter a number. */
catch (final NumberFormatException ex) {
p.sendMessage(MsgUtil.p("shop-creation-cancelled"));
- return;
}
}
@@ -485,15 +457,7 @@ public class ShopManager {
p.sendMessage(MsgUtil.p("shop-stock-too-low", "" + shop.getRemainingStock(), shop.getDataName()));
return;
}
- if (amount == 0) {
- // Dumb.
- MsgUtil.sendPurchaseSuccess(p, shop, amount);
- return;
- } else if (amount < 0) {
- // & Dumber
- p.sendMessage(MsgUtil.p("negative-amount"));
- return;
- }
+ if (!checkAmount(p, shop, amount)) { return; }
final int pSpace = Util.countSpace(p.getInventory(), shop.getItem());
if (amount > pSpace) {
p.sendMessage(MsgUtil.p("not-enough-space", "" + pSpace));
@@ -501,8 +465,7 @@ public class ShopManager {
}
final ShopPurchaseEvent e = new ShopPurchaseEvent(shop, p, amount);
Bukkit.getPluginManager().callEvent(e);
- if (e.isCancelled()) {
- return; // Cancelled
+ if (e.isCancelled()) { return; // Cancelled
}
// Money handling
if (!p.getName().equals(shop.getOwner())) {
@@ -548,6 +511,19 @@ public class ShopManager {
plugin.log(String.format("玩家: %s 从 %s 购买了 %s 件商品 花费 %s", p.getName(), shop.toString(), amount, shop.getPrice() * amount));
}
+ private boolean checkAmount(Player p, Shop shop, int amount) {
+ if (amount == 0) {
+ // Dumb.
+ MsgUtil.sendPurchaseSuccess(p, shop, amount);
+ return false;
+ } else if (amount < 0) {
+ // & Dumber
+ p.sendMessage(MsgUtil.p("negative-amount"));
+ return false;
+ }
+ return true;
+ }
+
public class ShopIterator implements Iterator {
private Iterator> chunks;
private Shop current;
@@ -565,9 +541,7 @@ public class ShopManager {
public boolean hasNext() {
if (shops == null || !shops.hasNext()) {
if (chunks == null || !chunks.hasNext()) {
- if (!worlds.hasNext()) {
- return false;
- }
+ if (!worlds.hasNext()) { return false; }
chunks = worlds.next().values().iterator();
return hasNext();
}
@@ -585,15 +559,12 @@ public class ShopManager {
public Shop next() {
if (shops == null || !shops.hasNext()) {
if (chunks == null || !chunks.hasNext()) {
- if (!worlds.hasNext()) {
- throw new NoSuchElementException("No more shops to iterate over!");
- }
+ if (!worlds.hasNext()) { throw new NoSuchElementException("No more shops to iterate over!"); }
chunks = worlds.next().values().iterator();
}
shops = chunks.next().values().iterator();
}
- if (!shops.hasNext()) {
- return this.next(); // Skip to the next one (Empty iterator?)
+ if (!shops.hasNext()) { return this.next(); // Skip to the next one (Empty iterator?)
}
current = shops.next();
return current;
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 55909a9..51080e5 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,4 +1,4 @@
-Version: 1.7
+Version: 1.8
#超级工具(OP可以用该工具在创造模式打破所有商店)
superitem: GOLD_AXE
@@ -10,6 +10,9 @@ guititle: '&6[&b快捷商店&6]&r'
usemagiclib: true
#启用虚拟悬浮物
fakeitem: true
+#禁止使用商店的世界(请全部小写)
+prevent:
+- 'preventworld'
#税收数量 (decimal) - 例如 税收是0.05 玩家1 在玩家2的商店 购买了 50元的东西,那么,玩家1 减少 50, 玩家2 账户增加(1-0.05)*50, 并且 玩家2税收账户增加 (0.05)*50.
tax: 0.00
diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml
index 80c43ae..b3dad3b 100644
--- a/src/main/resources/messages.yml
+++ b/src/main/resources/messages.yml
@@ -1,4 +1,4 @@
-Version: 1.5
+Version: 1.6
not-looking-at-shop: '&c没找到快捷商店. 你必须看着那个商店.'
no-permission: '&4你没有此命令的权限.'
@@ -39,6 +39,7 @@ buying-more-than-selling: '&4警告: 你购买的物品超出了商店的库存!
not-enough-space: '&c你没有足够的空间装 {0} !'
refill-success: '&a库存补充成功!'
empty-success: '&a商店清理成功!'
+prevent-create: '&c当前世界禁止使用商店插件!'
menu:
successful-purchase: '&a商品购买成功:'