mirror of
https://github.com/amalthea-mc/ShopChest.git
synced 2024-11-22 10:22:29 +00:00
Fixed shops duplicating after extending
This commit is contained in:
parent
4c02a77037
commit
3eef8250d2
@ -17,11 +17,11 @@ import de.epiceric.shopchest.language.LanguageUtils;
|
|||||||
import de.epiceric.shopchest.language.LocalizedMessage;
|
import de.epiceric.shopchest.language.LocalizedMessage;
|
||||||
import de.epiceric.shopchest.nms.Hologram;
|
import de.epiceric.shopchest.nms.Hologram;
|
||||||
import de.epiceric.shopchest.shop.Shop;
|
import de.epiceric.shopchest.shop.Shop;
|
||||||
|
import de.epiceric.shopchest.utils.Callback;
|
||||||
import de.epiceric.shopchest.utils.Permissions;
|
import de.epiceric.shopchest.utils.Permissions;
|
||||||
import de.epiceric.shopchest.utils.ShopUtils;
|
import de.epiceric.shopchest.utils.ShopUtils;
|
||||||
import de.epiceric.shopchest.utils.Utils;
|
import de.epiceric.shopchest.utils.Utils;
|
||||||
import me.ryanhamshire.GriefPrevention.Claim;
|
import me.ryanhamshire.GriefPrevention.Claim;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -59,28 +59,27 @@ public class ChestProtectListener implements Listener {
|
|||||||
this.worldGuard = worldGuard;
|
this.worldGuard = worldGuard;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void remove(final Shop shop, final Block b, Player p) {
|
private void remove(final Shop shop, final Block b, final Player p) {
|
||||||
shopUtils.removeShop(shop, true);
|
|
||||||
|
|
||||||
if (shop.getInventoryHolder() instanceof DoubleChest) {
|
if (shop.getInventoryHolder() instanceof DoubleChest) {
|
||||||
DoubleChest dc = (DoubleChest) shop.getInventoryHolder();
|
DoubleChest dc = (DoubleChest) shop.getInventoryHolder();
|
||||||
final Chest l = (Chest) dc.getLeftSide();
|
final Chest l = (Chest) dc.getLeftSide();
|
||||||
final Chest r = (Chest) dc.getRightSide();
|
final Chest r = (Chest) dc.getRightSide();
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskLater(plugin, new Runnable() {
|
Location loc = (b.getLocation().equals(l.getLocation()) ? r.getLocation() : l.getLocation());
|
||||||
|
final Shop newShop = new Shop(shop.getID(), plugin, shop.getVendor(), shop.getProduct(), loc, shop.getBuyPrice(), shop.getSellPrice(), shop.getShopType());
|
||||||
|
|
||||||
|
shopUtils.removeShop(shop, true, new Callback(plugin) {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void onResult(Object result) {
|
||||||
Location loc = (b.getLocation().equals(l.getLocation()) ? r.getLocation() : l.getLocation());
|
|
||||||
Shop newShop = new Shop(shop.getID(), plugin, shop.getVendor(), shop.getProduct(), loc, shop.getBuyPrice(), shop.getSellPrice(), shop.getShopType());
|
|
||||||
newShop.create(true);
|
newShop.create(true);
|
||||||
shopUtils.addShop(newShop, true);
|
shopUtils.addShop(newShop, true);
|
||||||
}
|
}
|
||||||
}, 1L);
|
});
|
||||||
return;
|
} else {
|
||||||
|
shopUtils.removeShop(shop, true);
|
||||||
|
plugin.debug(String.format("%s broke %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
||||||
|
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_REMOVED));
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.debug(String.format("%s broke %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
|
||||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.SHOP_REMOVED));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
@ -130,7 +129,7 @@ public class ChestProtectListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onBlockPlace(BlockPlaceEvent e) {
|
public void onBlockPlace(BlockPlaceEvent e) {
|
||||||
Player p = e.getPlayer();
|
final Player p = e.getPlayer();
|
||||||
Block b = e.getBlockPlaced();
|
Block b = e.getBlockPlaced();
|
||||||
if (b.getType().equals(Material.CHEST) || b.getType().equals(Material.TRAPPED_CHEST)) {
|
if (b.getType().equals(Material.CHEST) || b.getType().equals(Material.TRAPPED_CHEST)) {
|
||||||
|
|
||||||
@ -143,7 +142,7 @@ public class ChestProtectListener implements Listener {
|
|||||||
Chest l = (Chest) dc.getLeftSide();
|
Chest l = (Chest) dc.getLeftSide();
|
||||||
|
|
||||||
if (shopUtils.isShop(r.getLocation()) || shopUtils.isShop(l.getLocation())) {
|
if (shopUtils.isShop(r.getLocation()) || shopUtils.isShop(l.getLocation())) {
|
||||||
Shop shop;
|
final Shop shop;
|
||||||
|
|
||||||
if (b.getLocation().equals(r.getLocation())) {
|
if (b.getLocation().equals(r.getLocation())) {
|
||||||
shop = shopUtils.getShop(l.getLocation());
|
shop = shopUtils.getShop(l.getLocation());
|
||||||
@ -171,12 +170,13 @@ public class ChestProtectListener implements Listener {
|
|||||||
for (Resident resident : town.getResidents()) {
|
for (Resident resident : town.getResidents()) {
|
||||||
if (resident.getName().equals(p.getName())) {
|
if (resident.getName().equals(p.getName())) {
|
||||||
if (resident.isMayor()) {
|
if (resident.isMayor()) {
|
||||||
externalPluginsAllowed &= (config.towny_shop_plots_mayor.contains(townBlock.getType().name()));
|
externalPluginsAllowed = (config.towny_shop_plots_mayor.contains(townBlock.getType().name()));
|
||||||
} else if (resident.isKing()) {
|
} else if (resident.isKing()) {
|
||||||
externalPluginsAllowed &= (config.towny_shop_plots_king.contains(townBlock.getType().name()));
|
externalPluginsAllowed = (config.towny_shop_plots_king.contains(townBlock.getType().name()));
|
||||||
} else {
|
} else {
|
||||||
externalPluginsAllowed &= (config.towny_shop_plots_residents.contains(townBlock.getType().name()));
|
externalPluginsAllowed = (config.towny_shop_plots_residents.contains(townBlock.getType().name()));
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@ -189,45 +189,49 @@ public class ChestProtectListener implements Listener {
|
|||||||
com.intellectualcrafters.plot.object.Location loc =
|
com.intellectualcrafters.plot.object.Location loc =
|
||||||
new com.intellectualcrafters.plot.object.Location(b.getWorld().getName(), b.getX(), b.getY(), b.getZ());
|
new com.intellectualcrafters.plot.object.Location(b.getWorld().getName(), b.getX(), b.getY(), b.getZ());
|
||||||
|
|
||||||
externalPluginsAllowed &= Utils.isFlagAllowedOnPlot(loc.getOwnedPlot(), PlotSquaredShopFlag.CREATE_SHOP, p);
|
externalPluginsAllowed = Utils.isFlagAllowedOnPlot(loc.getOwnedPlot(), PlotSquaredShopFlag.CREATE_SHOP, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalPluginsAllowed && plugin.hasUSkyBlock() && config.enable_uskyblock_integration) {
|
if (externalPluginsAllowed && plugin.hasUSkyBlock() && config.enable_uskyblock_integration) {
|
||||||
IslandInfo islandInfo = plugin.getUSkyBlock().getIslandInfo(b.getLocation());
|
IslandInfo islandInfo = plugin.getUSkyBlock().getIslandInfo(b.getLocation());
|
||||||
if (islandInfo != null) {
|
if (islandInfo != null) {
|
||||||
externalPluginsAllowed &= islandInfo.getMembers().contains(p.getName()) || islandInfo.getLeader().equals(p.getName());
|
externalPluginsAllowed = islandInfo.getMembers().contains(p.getName()) || islandInfo.getLeader().equals(p.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalPluginsAllowed && plugin.hasASkyBlock() && config.enable_askyblock_integration) {
|
if (externalPluginsAllowed && plugin.hasASkyBlock() && config.enable_askyblock_integration) {
|
||||||
Island island = ASkyBlockAPI.getInstance().getIslandAt(b.getLocation());
|
Island island = ASkyBlockAPI.getInstance().getIslandAt(b.getLocation());
|
||||||
if (island != null) {
|
if (island != null) {
|
||||||
externalPluginsAllowed &= island.getMembers().contains(p.getUniqueId()) || island.getOwner().equals(p.getUniqueId());
|
externalPluginsAllowed = island.getMembers().contains(p.getUniqueId()) || island.getOwner().equals(p.getUniqueId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalPluginsAllowed && plugin.hasIslandWorld() && config.enable_islandworld_integration && IslandWorldApi.isInitialized()) {
|
if (externalPluginsAllowed && plugin.hasIslandWorld() && config.enable_islandworld_integration && IslandWorldApi.isInitialized()) {
|
||||||
if (b.getWorld().getName().equals(IslandWorldApi.getIslandWorld().getName())) {
|
if (b.getWorld().getName().equals(IslandWorldApi.getIslandWorld().getName())) {
|
||||||
externalPluginsAllowed &= IslandWorldApi.canBuildOnLocation(p, b.getLocation(), true);
|
externalPluginsAllowed = IslandWorldApi.canBuildOnLocation(p, b.getLocation(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalPluginsAllowed && plugin.hasGriefPrevention() && config.enable_griefprevention_integration) {
|
if (externalPluginsAllowed && plugin.hasGriefPrevention() && config.enable_griefprevention_integration) {
|
||||||
Claim claim = plugin.getGriefPrevention().dataStore.getClaimAt(b.getLocation(), false, null);
|
Claim claim = plugin.getGriefPrevention().dataStore.getClaimAt(b.getLocation(), false, null);
|
||||||
if (claim != null) {
|
if (claim != null) {
|
||||||
externalPluginsAllowed &= claim.allowContainers(p) == null;
|
externalPluginsAllowed = claim.allowContainers(p) == null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalPluginsAllowed || p.hasPermission(Permissions.EXTEND_PROTECTED)) {
|
if (externalPluginsAllowed || p.hasPermission(Permissions.EXTEND_PROTECTED)) {
|
||||||
if (shop.getVendor().getUniqueId().equals(p.getUniqueId()) || p.hasPermission(Permissions.EXTEND_OTHER)) {
|
if (shop.getVendor().getUniqueId().equals(p.getUniqueId()) || p.hasPermission(Permissions.EXTEND_OTHER)) {
|
||||||
|
|
||||||
if (b.getRelative(BlockFace.UP).getType() == Material.AIR) {
|
if (b.getRelative(BlockFace.UP).getType() == Material.AIR) {
|
||||||
shopUtils.removeShop(shop, true);
|
final Shop newShop = new Shop(shop.getID(), plugin, shop.getVendor(), shop.getProduct(), shop.getLocation(), shop.getBuyPrice(), shop.getSellPrice(), shop.getShopType());
|
||||||
Shop newShop = new Shop(shop.getID(), plugin, shop.getVendor(), shop.getProduct(), shop.getLocation(), shop.getBuyPrice(), shop.getSellPrice(), shop.getShopType());
|
|
||||||
newShop.create(true);
|
shopUtils.removeShop(shop, true, new Callback(plugin) {
|
||||||
shopUtils.addShop(newShop, true);
|
@Override
|
||||||
plugin.debug(String.format("%s extended %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
public void onResult(Object result) {
|
||||||
|
newShop.create(true);
|
||||||
|
shopUtils.addShop(newShop, true);
|
||||||
|
plugin.debug(String.format("%s extended %s's shop (#%d)", p.getName(), shop.getVendor().getName(), shop.getID()));
|
||||||
|
}
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHEST_BLOCKED));
|
p.sendMessage(LanguageUtils.getMessage(LocalizedMessage.Message.CHEST_BLOCKED));
|
||||||
|
@ -304,28 +304,44 @@ public abstract class Database {
|
|||||||
ResultSet rs = null;
|
ResultSet rs = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ps = connection.prepareStatement("REPLACE INTO shops (vendor,product,world,x,y,z,buyprice,sellprice,shoptype) VALUES(?,?,?,?,?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS);
|
if (!shop.hasId()) {
|
||||||
|
ps = connection.prepareStatement("REPLACE INTO shops (vendor,product,world,x,y,z,buyprice,sellprice,shoptype) VALUES(?,?,?,?,?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS);
|
||||||
|
|
||||||
ps.setString(1, shop.getVendor().getUniqueId().toString());
|
ps.setString(1, shop.getVendor().getUniqueId().toString());
|
||||||
ps.setString(2, Utils.encode(shop.getProduct()));
|
ps.setString(2, Utils.encode(shop.getProduct()));
|
||||||
ps.setString(3, shop.getLocation().getWorld().getName());
|
ps.setString(3, shop.getLocation().getWorld().getName());
|
||||||
ps.setInt(4, shop.getLocation().getBlockX());
|
ps.setInt(4, shop.getLocation().getBlockX());
|
||||||
ps.setInt(5, shop.getLocation().getBlockY());
|
ps.setInt(5, shop.getLocation().getBlockY());
|
||||||
ps.setInt(6, shop.getLocation().getBlockZ());
|
ps.setInt(6, shop.getLocation().getBlockZ());
|
||||||
ps.setDouble(7, shop.getBuyPrice());
|
ps.setDouble(7, shop.getBuyPrice());
|
||||||
ps.setDouble(8, shop.getSellPrice());
|
ps.setDouble(8, shop.getSellPrice());
|
||||||
ps.setString(9, shop.getShopType().toString());
|
ps.setString(9, shop.getShopType().toString());
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
|
|
||||||
int shopId = -1;
|
int shopId = -1;
|
||||||
rs = ps.getGeneratedKeys();
|
rs = ps.getGeneratedKeys();
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
shopId = rs.getInt(1);
|
shopId = rs.getInt(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
shop.setId(shopId);
|
||||||
|
} else {
|
||||||
|
ps = connection.prepareStatement("REPLACE INTO shops (id,vendor,product,world,x,y,z,buyprice,sellprice,shoptype) VALUES(?,?,?,?,?,?,?,?,?,?)");
|
||||||
|
|
||||||
|
ps.setInt(1, shop.getID());
|
||||||
|
ps.setString(2, shop.getVendor().getUniqueId().toString());
|
||||||
|
ps.setString(3, Utils.encode(shop.getProduct()));
|
||||||
|
ps.setString(4, shop.getLocation().getWorld().getName());
|
||||||
|
ps.setInt(5, shop.getLocation().getBlockX());
|
||||||
|
ps.setInt(6, shop.getLocation().getBlockY());
|
||||||
|
ps.setInt(7, shop.getLocation().getBlockZ());
|
||||||
|
ps.setDouble(8, shop.getBuyPrice());
|
||||||
|
ps.setDouble(9, shop.getSellPrice());
|
||||||
|
ps.setString(10, shop.getShopType().toString());
|
||||||
|
ps.executeUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
shop.setId(shopId);
|
if (callback != null) callback.callSyncResult(shop.getID());
|
||||||
|
|
||||||
if (callback != null) callback.callSyncResult(shopId);
|
|
||||||
plugin.debug("Adding shop to database (#" + shop.getID() + ")");
|
plugin.debug("Adding shop to database (#" + shop.getID() + ")");
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
if (callback != null) callback.callSyncError(ex);
|
if (callback != null) callback.callSyncError(ex);
|
||||||
|
@ -61,8 +61,9 @@ public class ShopUtils {
|
|||||||
* Add a shop
|
* Add a shop
|
||||||
* @param shop Shop to add
|
* @param shop Shop to add
|
||||||
* @param addToDatabase Whether the shop should also be added to the database
|
* @param addToDatabase Whether the shop should also be added to the database
|
||||||
|
* @param callback Callback that - if succeeded - returns the ID the shop had or was given (as {@code int})
|
||||||
*/
|
*/
|
||||||
public void addShop(Shop shop, boolean addToDatabase) {
|
public void addShop(Shop shop, boolean addToDatabase, Callback callback) {
|
||||||
InventoryHolder ih = shop.getInventoryHolder();
|
InventoryHolder ih = shop.getInventoryHolder();
|
||||||
plugin.debug("Adding shop... (#" + shop.getID() + ")");
|
plugin.debug("Adding shop... (#" + shop.getID() + ")");
|
||||||
|
|
||||||
@ -81,17 +82,29 @@ public class ShopUtils {
|
|||||||
shopLocation.put(shop.getLocation(), shop);
|
shopLocation.put(shop.getLocation(), shop);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addToDatabase)
|
if (addToDatabase) {
|
||||||
plugin.getShopDatabase().addShop(shop, null);
|
plugin.getShopDatabase().addShop(shop, callback);
|
||||||
|
} else {
|
||||||
|
if (callback != null) callback.callSyncResult(shop.getID());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a shop
|
* Add a shop
|
||||||
|
* @param shop Shop to add
|
||||||
|
* @param addToDatabase Whether the shop should also be added to the database
|
||||||
|
*/
|
||||||
|
public void addShop(Shop shop, boolean addToDatabase) {
|
||||||
|
addShop(shop, addToDatabase, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Remove a shop
|
||||||
* @param shop Shop to remove
|
* @param shop Shop to remove
|
||||||
* @param removeFromDatabase Whether the shop should also be removed from the database
|
* @param removeFromDatabase Whether the shop should also be removed from the database
|
||||||
|
* @param callback Callback that - if succeeded - returns null
|
||||||
*/
|
*/
|
||||||
public void removeShop(Shop shop, boolean removeFromDatabase) {
|
public void removeShop(Shop shop, boolean removeFromDatabase, Callback callback) {
|
||||||
plugin.debug("Removing shop (#" + shop.getID() + ")");
|
plugin.debug("Removing shop (#" + shop.getID() + ")");
|
||||||
|
|
||||||
InventoryHolder ih = shop.getInventoryHolder();
|
InventoryHolder ih = shop.getInventoryHolder();
|
||||||
@ -110,8 +123,20 @@ public class ShopUtils {
|
|||||||
shop.removeItem();
|
shop.removeItem();
|
||||||
shop.removeHologram();
|
shop.removeHologram();
|
||||||
|
|
||||||
if (removeFromDatabase)
|
if (removeFromDatabase) {
|
||||||
plugin.getShopDatabase().removeShop(shop, null);
|
plugin.getShopDatabase().removeShop(shop, callback);
|
||||||
|
} else {
|
||||||
|
if (callback != null) callback.callSyncResult(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a shop
|
||||||
|
* @param shop Shop to remove
|
||||||
|
* @param removeFromDatabase Whether the shop should also be removed from the database
|
||||||
|
*/
|
||||||
|
public void removeShop(Shop shop, boolean removeFromDatabase) {
|
||||||
|
removeShop(shop, removeFromDatabase, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user