Cleaned up code

- Removed unnecessary methods
- Split long methods into multiple shorter ones
- Updated Bukkit dependency to 1.12-pre5
- Removed permission for "/shop" command
This commit is contained in:
Eric 2017-05-20 12:44:07 +02:00
parent 7560cddb7a
commit edd7608c02
5 changed files with 172 additions and 165 deletions

View File

@ -132,7 +132,7 @@
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.12-pre2-SNAPSHOT</version>
<version>1.12-pre5-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@ -30,6 +30,7 @@ import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import pl.islandworld.IslandWorld;
import us.talabrek.ultimateskyblock.api.uSkyBlockAPI;
@ -148,6 +149,54 @@ public class ShopChest extends JavaPlugin {
getLogger().warning("Plugin may still work, but more errors are expected!");
}
loadExternalPlugins();
debug("Loading utils and extras...");
LanguageUtils.load();
saveResource("item_names.txt", true);
loadMetrics();
checkForUpdates();
shopUtils = new ShopUtils(this);
shopCommand = new ShopCommand(this);
registerListeners();
initializeShops();
updater = new ShopUpdater(this);
updater.start();
}
@Override
public void onDisable() {
debug("Disabling ShopChest...");
if (updater != null) {
debug("Stopping updater");
updater.cancel();
}
if (database != null) {
for (Shop shop : shopUtils.getShops()) {
shopUtils.removeShop(shop, false, true);
debug("Removed shop (#" + shop.getID() + ")");
}
database.disconnect();
}
if (fw != null && config.enable_debug_log) {
try {
fw.close();
} catch (IOException e) {
getLogger().severe("Failed to close FileWriter");
e.printStackTrace();
}
}
}
private void loadExternalPlugins() {
if (worldGuard != null && !WorldGuardShopFlag.isLoaded()) {
WorldGuardShopFlag.register(this, false);
@ -201,14 +250,9 @@ public class ShopChest extends JavaPlugin {
if (hasPlotSquared()) {
new PlotSquaredShopFlag().register(this);
}
}
debug("Loading utils and extras...");
LanguageUtils.load();
saveResource("item_names.txt", true);
shopUtils = new ShopUtils(this);
private void loadMetrics() {
debug("Initializing Metrics...");
Metrics metrics = new Metrics(this);
@ -256,8 +300,10 @@ public class ShopChest extends JavaPlugin {
}, config.database_mysql_ping_interval * 20L, config.database_mysql_ping_interval * 20L);
}
}
}
Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() {
private void checkForUpdates() {
new BukkitRunnable() {
@Override
public void run() {
UpdateChecker uc = new UpdateChecker(ShopChest.this);
@ -289,10 +335,10 @@ public class ShopChest extends JavaPlugin {
Bukkit.getConsoleSender().sendMessage("[ShopChest] " + LanguageUtils.getMessage(LocalizedMessage.Message.UPDATE_ERROR));
}
}
});
shopCommand = new ShopCommand(this);
}.runTaskAsynchronously(this);
}
private void registerListeners() {
debug("Registering listeners...");
getServer().getPluginManager().registerEvents(new ShopUpdateListener(this), this);
getServer().getPluginManager().registerEvents(new ShopItemListener(this), this);
@ -311,39 +357,23 @@ public class ShopChest extends JavaPlugin {
getServer().getPluginManager().registerEvents(new AreaShopListener(this), this);
}
}
initializeShops();
updater = new ShopUpdater(this);
updater.start();
}
/**
* Initializes the shops
*/
private void initializeShops() {
debug("Initializing Shops...");
shopUtils.reloadShops(false, true, new Callback(this) {
@Override
public void onDisable() {
debug("Disabling ShopChest...");
if (updater != null) {
debug("Stopping updater");
updater.cancel();
}
if (database != null) {
for (Shop shop : shopUtils.getShops()) {
shopUtils.removeShop(shop, false, true);
debug("Removed shop (#" + shop.getID() + ")");
}
database.disconnect();
}
if (fw != null && config.enable_debug_log) {
try {
fw.close();
} catch (IOException e) {
getLogger().severe("Failed to close FileWriter");
e.printStackTrace();
public void onResult(Object result) {
if (result instanceof Integer) {
int count = (int) result;
getLogger().info("Initialized " + count + " Shops");
debug("Initialized " + count + " Shops");
}
}
});
}
/**
@ -376,24 +406,6 @@ public class ShopChest extends JavaPlugin {
}
}
/**
* Initializes the shops
*/
private void initializeShops() {
debug("Initializing Shops...");
shopUtils.reloadShops(false, true, new Callback(this) {
@Override
public void onResult(Object result) {
if (result instanceof Integer) {
int count = (int) result;
getLogger().info("Initialized " + count + " Shops");
debug("Initialized " + count + " Shops");
}
}
});
}
/**
* @return The {@link ShopCommand}
*/
@ -422,13 +434,6 @@ public class ShopChest extends JavaPlugin {
return areaShop != null && areaShop.isEnabled();
}
/**
* @return An instance of {@link AreaShop} or {@code null} if AreaShop is not enabled
*/
public AreaShop getAreaShop() {
return areaShop;
}
/**
* @return Whether the plugin 'GriefPrevention' is enabled
*/
@ -449,14 +454,6 @@ public class ShopChest extends JavaPlugin {
public boolean hasIslandWorld() {
return islandWorld != null && islandWorld.isEnabled();
}
/**
* @return An instance of {@link IslandWorld} or {@code null} if IslandWorld is not enabled
*/
public IslandWorld getIslandWorld() {
return islandWorld;
}
/**
* @return Whether the plugin 'ASkyBlock' is enabled
*/
@ -464,13 +461,6 @@ public class ShopChest extends JavaPlugin {
return aSkyBlock != null && aSkyBlock.isEnabled();
}
/**
* @return An instance of {@link ASkyBlock} or {@code null} if ASkyBlock is not enabled
*/
public ASkyBlock getASkyBlock() {
return aSkyBlock;
}
/**
* @return Whether the plugin 'uSkyBlock' is enabled
*/
@ -499,14 +489,6 @@ public class ShopChest extends JavaPlugin {
public boolean hasAuthMe() {
return authMe != null && authMe.isEnabled();
}
/**
* @return An instance of {@link AuthMe} or {@code null} if AuthMe is not enabled
*/
public AuthMe getAuthMe() {
return authMe;
}
/**
* @return Whether the plugin 'Towny' is enabled
*/
@ -514,13 +496,6 @@ public class ShopChest extends JavaPlugin {
return towny != null && towny.isEnabled();
}
/**
* @return An instance of {@link Towny} or {@code null} if Towny is not enabled
*/
public Towny getTowny() {
return towny;
}
/**
* @return Whether the plugin 'WorldGuard' is enabled
*/
@ -602,20 +577,9 @@ public class ShopChest extends JavaPlugin {
}
/**
* @return The {@link Config} of ShopChset
* @return The {@link Config} of ShopChest
*/
public Config getShopChestConfig() {
return config;
}
/**
* <p>Provides a reader for a text file located inside the jar.</p>
* The returned reader will read text with the UTF-8 charset.
* @param file the filename of the resource to load
* @return null if {@link #getResource(String)} returns null
* @throws IllegalArgumentException if file is null
*/
public Reader _getTextResource(String file) throws IllegalArgumentException {
return getTextResource(file);
}
}

View File

@ -55,7 +55,6 @@ class ShopCommand implements CommandExecutor {
cmd.setDescription("Manage players' shops or this plugin.");
cmd.setUsage("/" + name);
cmd.setExecutor(this);
cmd.setPermission(Permissions.BUY);
cmd.setTabCompleter(new ShopTabCompleter(plugin));
return cmd;

View File

@ -10,6 +10,7 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@ -405,6 +406,18 @@ public class Config {
return langConfig;
}
private Reader getTextResource(String file, boolean showMessages) {
try {
return (Reader) plugin.getClass().getDeclaredMethod("getTextResource", String.class).invoke(plugin, file);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
if (showMessages) plugin.getLogger().severe("Failed to get file from jar: " + file);
plugin.debug("Failed to get file from jar: " + file);
plugin.debug(e);
}
return null;
}
private void loadLanguageConfig(boolean showMessages) {
langConfig = new LanguageConfiguration(plugin, showMessages);
File langFolder = new File(plugin.getDataFolder(), "lang");
@ -421,15 +434,20 @@ public class Config {
if (!langConfigFile.exists()) {
if (!langDefaultFile.exists()) {
try {
Reader r = plugin._getTextResource("lang/" + langConfigFile.getName());
Reader r = getTextResource("lang/" + langConfigFile.getName(), showMessages);
if (r == null) {
r = plugin._getTextResource("lang/en_US.lang");
r = getTextResource("lang/en_US.lang", showMessages);
if (showMessages) plugin.getLogger().info("Using locale \"en_US\" (Streamed from jar file)");
} else {
if (showMessages) plugin.getLogger().info("Using locale \"" + langConfigFile.getName().substring(0, langConfigFile.getName().length() - 5) + "\" (Streamed from jar file)");
}
if (r == null) {
if (showMessages) plugin.getLogger().warning("Using default language values");
plugin.debug("Using default language values (#1)");
}
BufferedReader br = new BufferedReader(r);
StringBuilder sb = new StringBuilder();
@ -447,7 +465,7 @@ public class Config {
plugin.getLogger().warning("Using default language values");
}
plugin.debug("Using default language values (#1)");
plugin.debug("Using default language values (#2)");
plugin.debug(e);
}
} else {
@ -459,7 +477,7 @@ public class Config {
plugin.getLogger().warning("Using default language values");
}
plugin.debug("Using default language values (#2)");
plugin.debug("Using default language values (#3)");
plugin.debug(e);
}
}
@ -472,7 +490,7 @@ public class Config {
plugin.getLogger().warning("Using default language values");
}
plugin.debug("Using default language values (#3)");
plugin.debug("Using default language values (#4)");
plugin.debug(e);
}
}

View File

@ -1,6 +1,7 @@
package de.epiceric.shopchest.shop;
import de.epiceric.shopchest.ShopChest;
import de.epiceric.shopchest.config.Config;
import de.epiceric.shopchest.config.Regex;
import de.epiceric.shopchest.exceptions.ChestNotFoundException;
import de.epiceric.shopchest.exceptions.NotEnoughSpaceException;
@ -11,6 +12,7 @@ import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Chest;
@ -32,6 +34,7 @@ public class Shop {
private double buyPrice;
private double sellPrice;
private ShopType shopType;
private Config config;
public Shop(int id, ShopChest plugin, OfflinePlayer vendor, ItemStack product, Location location, double buyPrice, double sellPrice, ShopType shopType) {
this.id = id;
@ -42,6 +45,7 @@ public class Shop {
this.buyPrice = buyPrice;
this.sellPrice = sellPrice;
this.shopType = shopType;
this.config = plugin.getShopChestConfig();
}
public Shop(ShopChest plugin, OfflinePlayer vendor, ItemStack product, Location location, double buyPrice, double sellPrice, ShopType shopType) {
@ -56,14 +60,14 @@ public class Shop {
Block b = location.getBlock();
if (b.getType() != Material.CHEST && b.getType() != Material.TRAPPED_CHEST) {
ChestNotFoundException ex = new ChestNotFoundException(String.format("No Chest found in world '%s' at location: %d; %d; %d", b.getWorld().getName(), b.getX(), b.getY(), b.getZ()));
plugin.getShopUtils().removeShop(this, plugin.getShopChestConfig().remove_shop_on_error);
plugin.getShopUtils().removeShop(this, config.remove_shop_on_error);
if (showConsoleMessages) plugin.getLogger().severe(ex.getMessage());
plugin.debug("Failed to create shop (#" + id + ")");
plugin.debug(ex);
return false;
} else if ((b.getRelative(BlockFace.UP).getType() != Material.AIR) && plugin.getShopChestConfig().show_shop_items) {
} else if ((b.getRelative(BlockFace.UP).getType() != Material.AIR) && config.show_shop_items) {
NotEnoughSpaceException ex = new NotEnoughSpaceException(String.format("No space above chest in world '%s' at location: %d; %d; %d", b.getWorld().getName(), b.getX(), b.getY(), b.getZ()));
plugin.getShopUtils().removeShop(this, plugin.getShopChestConfig().remove_shop_on_error);
plugin.getShopUtils().removeShop(this, config.remove_shop_on_error);
if (showConsoleMessages) plugin.getLogger().severe(ex.getMessage());
plugin.debug("Failed to create shop (#" + id + ")");
plugin.debug(ex);
@ -114,7 +118,7 @@ public class Shop {
* <b>Call this after {@link #createHologram()}, because it depends on the hologram's location</b>
*/
private void createItem() {
if (plugin.getShopChestConfig().show_shop_items) {
if (config.show_shop_items) {
plugin.debug("Creating item (#" + id + ")");
Location itemLocation;
@ -138,86 +142,108 @@ public class Shop {
private void createHologram() {
plugin.debug("Creating hologram (#" + id + ")");
boolean doubleChest;
Chest[] chests = new Chest[2];
Block b = location.getBlock();
InventoryHolder ih = getInventoryHolder();
if (ih == null) return;
Chest[] chests = new Chest[2];
boolean doubleChest;
if (ih instanceof DoubleChest) {
DoubleChest dc = (DoubleChest) ih;
Chest r = (Chest) dc.getRightSide();
Chest l = (Chest) dc.getLeftSide();
chests[0] = r;
chests[1] = l;
doubleChest = true;
} else {
doubleChest = false;
chests[0] = (Chest) ih;
doubleChest = false;
}
boolean twoLinePrices = config.two_line_prices;
String[] holoText = getHologramText(twoLinePrices ? 3 : 2);
Location holoLocation = getHologramLocation(doubleChest, chests, holoText);
hologram = new Hologram(plugin, holoText, holoLocation);
}
private String[] getHologramText(int length) {
String[] holoText = new String[length];
holoText[0] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_FORMAT,
new LocalizedMessage.ReplacedRegex(Regex.AMOUNT, String.valueOf(product.getAmount())),
new LocalizedMessage.ReplacedRegex(Regex.ITEM_NAME, LanguageUtils.getItemName(product)));
if ((buyPrice <= 0) && (sellPrice > 0)) {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_SELL,
new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, String.valueOf(sellPrice)));
} else if ((buyPrice > 0) && (sellPrice <= 0)) {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_BUY,
new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, String.valueOf(buyPrice)));
} else {
if (length == 2) {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_BUY_SELL,
new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, String.valueOf(buyPrice)),
new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, String.valueOf(sellPrice)));
} else {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_BUY,
new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, String.valueOf(buyPrice)));
holoText[2] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_SELL,
new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, String.valueOf(sellPrice)));
}
}
return holoText;
}
private Location getHologramLocation(boolean doubleChest, Chest[] chests, String[] holoText) {
Block b = location.getBlock();
Location holoLocation;
String[] holoText = new String[plugin.getShopChestConfig().two_line_prices ? 3 : 2];
World w = b.getWorld();
int x = b.getX();
int y = b.getY();
int z = b.getZ();
if (doubleChest) {
Chest r = chests[0];
Chest l = chests[1];
if (b.getLocation().equals(r.getLocation())) {
if (r.getX() != l.getX())
holoLocation = new Location(b.getWorld(), b.getX(), b.getY() - 0.6, b.getZ() + 0.5);
else if (r.getZ() != l.getZ())
holoLocation = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.6, b.getZ());
else holoLocation = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.6, b.getZ() + 0.5);
if (r.getX() != l.getX()) {
holoLocation = new Location(w, x, y - 0.6, z + 0.5);
} else if (r.getZ() != l.getZ()) {
holoLocation = new Location(w, x + 0.5, y - 0.6, z);
} else {
if (r.getX() != l.getX())
holoLocation = new Location(b.getWorld(), b.getX() + 1, b.getY() - 0.6, b.getZ() + 0.5);
else if (r.getZ() != l.getZ())
holoLocation = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.6, b.getZ() + 1);
else holoLocation = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.6, b.getZ() + 0.5);
holoLocation = new Location(w, x + 0.5, y - 0.6, z + 0.5);
}
} else holoLocation = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.6, b.getZ() + 0.5);
holoText[0] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_FORMAT, new LocalizedMessage.ReplacedRegex(Regex.AMOUNT, String.valueOf(product.getAmount())),
new LocalizedMessage.ReplacedRegex(Regex.ITEM_NAME, LanguageUtils.getItemName(product)));
if ((buyPrice <= 0) && (sellPrice > 0)) {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_SELL, new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, String.valueOf(sellPrice)));
} else if ((buyPrice > 0) && (sellPrice <= 0)) {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_BUY, new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, String.valueOf(buyPrice)));
} else {
if (holoText.length == 2) {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_BUY_SELL, new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, String.valueOf(buyPrice)),
new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, String.valueOf(sellPrice)));
if (r.getX() != l.getX()) {
holoLocation = new Location(w, x + 1, y - 0.6, z + 0.5);
} else if (r.getZ() != l.getZ()) {
holoLocation = new Location(w, x + 0.5, y - 0.6, z + 1);
} else {
holoText[1] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_BUY, new LocalizedMessage.ReplacedRegex(Regex.BUY_PRICE, String.valueOf(buyPrice)));
holoText[2] = LanguageUtils.getMessage(LocalizedMessage.Message.HOLOGRAM_SELL, new LocalizedMessage.ReplacedRegex(Regex.SELL_PRICE, String.valueOf(sellPrice)));
holoLocation = new Location(w, x + 0.5, y - 0.6, z + 0.5);
}
}
} else {
holoLocation = new Location(w, x + 0.5, y - 0.6, z + 0.5);
}
holoLocation.add(0, plugin.getShopChestConfig().hologram_lift, 0);
holoLocation.add(0, config.hologram_lift, 0);
if (plugin.getShopChestConfig().two_line_prices) {
if (config.two_line_prices) {
if (holoText.length == 3 && holoText[2] != null) {
holoLocation.add(0, plugin.getShopChestConfig().two_line_hologram_lift, 0);
holoLocation.add(0, config.two_line_hologram_lift, 0);
} else {
holoLocation.add(0, plugin.getShopChestConfig().one_line_hologram_lift, 0);
holoLocation.add(0, config.one_line_hologram_lift, 0);
}
}
hologram = new Hologram(plugin, holoText, holoLocation);
return holoLocation;
}
/**