package regalowl.hyperconomy; import java.util.ArrayList; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.block.BlockState; import org.bukkit.block.Chest; import org.bukkit.block.Sign; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.InventoryHolder; import regalowl.databukkit.CommonFunctions; public class ChestShop implements Listener { private HyperConomy hc; private CommonFunctions cf; private LanguageFile L; private EconomyManager em; private ArrayList<BlockFace> faces = new ArrayList<BlockFace>(); private ArrayList<BlockFace> allfaces = new ArrayList<BlockFace>(); ChestShop() { hc = HyperConomy.hc; em = hc.getEconomyManager(); cf = hc.gCF(); L = hc.getLanguageFile(); faces.add(BlockFace.EAST); faces.add(BlockFace.WEST); faces.add(BlockFace.NORTH); faces.add(BlockFace.SOUTH); allfaces.add(BlockFace.EAST); allfaces.add(BlockFace.WEST); allfaces.add(BlockFace.NORTH); allfaces.add(BlockFace.SOUTH); allfaces.add(BlockFace.DOWN); allfaces.add(BlockFace.UP); if (hc.gYH().gFC("config").getBoolean("config.use-chest-shops")) { hc.getServer().getPluginManager().registerEvents(this, hc); } } public boolean isChestShopSign(Block b) { try { if (b == null) {return false;} if (b.getType().equals(Material.WALL_SIGN)) { Sign s = (Sign) b.getState(); String line2 = s.getLine(1).trim(); if (line2.equalsIgnoreCase(ChatColor.AQUA + "[Trade]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Buy]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Sell]")) { BlockState chestblock = Bukkit.getWorld(s.getBlock().getWorld().getName()).getBlockAt(s.getX(), s.getY() - 1, s.getZ()).getState(); if (chestblock instanceof Chest) { s.update(); return true; } } } else { for (BlockFace cface : faces) { Block relative = b.getRelative(cface); if (relative.getType().equals(Material.WALL_SIGN)) { Sign s = (Sign) relative.getState(); String line2 = s.getLine(1).trim(); if (line2.equalsIgnoreCase(ChatColor.AQUA + "[Trade]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Buy]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Sell]")) { org.bukkit.material.Sign sign = (org.bukkit.material.Sign) relative.getState().getData(); BlockFace attachedface = sign.getFacing(); if (relative.getRelative(attachedface.getOppositeFace()).equals(b)) { return true; } } } } } return false; } catch (Exception e) { hc.gDB().writeError(e); return false; } } public Sign getChestShopSign(Block b) { try { if (b == null) {return null;} if (b.getState() instanceof Chest) { Chest chest = (Chest) b.getState(); String world = chest.getBlock().getWorld().getName(); BlockState signblock = Bukkit.getWorld(world).getBlockAt(chest.getX(), chest.getY() + 1, chest.getZ()).getState(); if (signblock instanceof Sign) { Sign s = (Sign) signblock; String line2 = ChatColor.stripColor(s.getLine(1)).trim(); if (line2.equalsIgnoreCase("[Trade]") || line2.equalsIgnoreCase("[Buy]") || line2.equalsIgnoreCase("[Sell]")) { return s; } } } else if (b.getType().equals(Material.WALL_SIGN)) { Sign s = (Sign) b.getState(); String line2 = s.getLine(1).trim(); if (line2.equalsIgnoreCase(ChatColor.AQUA + "[Trade]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Buy]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Sell]")) { BlockState chestblock = Bukkit.getWorld(s.getBlock().getWorld().getName()).getBlockAt(s.getX(), s.getY() - 1, s.getZ()).getState(); if (chestblock instanceof Chest) { s.update(); return s; } } } else { for (BlockFace cface : faces) { Block relative = b.getRelative(cface); if (relative.getType().equals(Material.WALL_SIGN)) { Sign s = (Sign) relative.getState(); String line2 = s.getLine(1).trim(); if (line2.equalsIgnoreCase(ChatColor.AQUA + "[Trade]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Buy]") || line2.equalsIgnoreCase(ChatColor.AQUA + "[Sell]")) { org.bukkit.material.Sign sign = (org.bukkit.material.Sign) relative.getState().getData(); BlockFace attachedface = sign.getFacing(); if (relative.getRelative(attachedface.getOppositeFace()).equals(b)) { return s; } } } } } return null; } catch (Exception e) { hc.gDB().writeError(e); return null; } } public boolean isChestShop(Block b, boolean includeSign) { try { if (b == null) {return false;} if (b.getState() instanceof Chest) { Chest chest = (Chest) b.getState(); String world = chest.getBlock().getWorld().getName(); BlockState signblock = Bukkit.getWorld(world).getBlockAt(chest.getX(), chest.getY() + 1, chest.getZ()).getState(); if (signblock instanceof Sign) { Sign s = (Sign) signblock; String line2 = ChatColor.stripColor(s.getLine(1)).trim(); if (line2.equalsIgnoreCase("[Trade]") || line2.equalsIgnoreCase("[Buy]") || line2.equalsIgnoreCase("[Sell]")) { return true; } } } else { if (includeSign && isChestShopSign(b)) { return true; } } return false; } catch (Exception e) { hc.gDB().writeError(e); return false; } } public boolean isChestShop(InventoryHolder ih) { try { if (ih instanceof Chest) { Chest chest = (Chest) ih; int x = chest.getX(); int y = chest.getY() + 1; int z = chest.getZ(); String world = chest.getBlock().getWorld().getName(); BlockState signblock = Bukkit.getWorld(world).getBlockAt(x, y, z).getState(); if (signblock instanceof Sign) { Sign s = (Sign) signblock; String line2 = ChatColor.stripColor(s.getLine(1)).trim(); if (line2.equalsIgnoreCase("[Trade]") || line2.equalsIgnoreCase("[Buy]") || line2.equalsIgnoreCase("[Sell]")) { return true; } } } return false; } catch (Exception e) { hc.gDB().writeError(e); return false; } } public Sign getChestShopSign(InventoryHolder ih) { try { if (ih instanceof Chest) { Chest chest = (Chest) ih; int x = chest.getX(); int y = chest.getY() + 1; int z = chest.getZ(); String world = chest.getBlock().getWorld().getName(); BlockState signblock = Bukkit.getWorld(world).getBlockAt(x, y, z).getState(); if (signblock instanceof Sign) { Sign s = (Sign) signblock; String line2 = ChatColor.stripColor(s.getLine(1)).trim(); if (line2.equalsIgnoreCase("[Trade]") || line2.equalsIgnoreCase("[Buy]") || line2.equalsIgnoreCase("[Sell]")) { return s; } } } return null; } catch (Exception e) { hc.gDB().writeError(e); return null; } } @EventHandler(priority = EventPriority.NORMAL) public void onBlockBreakEvent(BlockBreakEvent bbevent) { if (isChestShop(bbevent.getBlock(), true)) { if (isChestShopSign(bbevent.getBlock()) && bbevent.getPlayer().hasPermission("hyperconomy.admin") && bbevent.getPlayer().isSneaking()) { return; } Sign s = getChestShopSign(bbevent.getBlock()); String line34 = ChatColor.stripColor(s.getLine(2)).trim() + ChatColor.stripColor(s.getLine(3)).trim(); if (bbevent.getPlayer().getName().equalsIgnoreCase(line34) && bbevent.getPlayer().isSneaking()) { return; } bbevent.setCancelled(true); } } @EventHandler(priority = EventPriority.NORMAL) public void onEntityExplodeEvent(EntityExplodeEvent eeevent) { for (Block b : eeevent.blockList()) { if (isChestShop(b, true)) { eeevent.setCancelled(true); } } } @EventHandler(priority = EventPriority.NORMAL) public void onBlockPistonExtendEvent(BlockPistonExtendEvent bpeevent) { for (Block b : bpeevent.getBlocks()) { if (isChestShop(b, true)) { bpeevent.setCancelled(true); } } } @EventHandler(priority = EventPriority.NORMAL) public void onBlockPistonRetractEvent(BlockPistonRetractEvent bprevent) { if (isChestShop(bprevent.getRetractLocation().getBlock(), true)) { bprevent.setCancelled(true); } } @EventHandler(priority = EventPriority.NORMAL) public void onBlockPlaceEvent(BlockPlaceEvent bpevent) { Block block = bpevent.getBlock(); for (BlockFace bf : allfaces) { if (isChestShop(block.getRelative(bf), false)) { bpevent.setCancelled(true); } } } @EventHandler(priority = EventPriority.NORMAL) public void onSignChangeEvent(SignChangeEvent scevent) { try { String line2 = ChatColor.stripColor(scevent.getLine(1)).trim(); if (!line2.equalsIgnoreCase("[Trade]") && !line2.equalsIgnoreCase("[Buy]") && !line2.equalsIgnoreCase("[Sell]")) { return; } if (!scevent.getPlayer().hasPermission("hyperconomy.chestshop")) { scevent.setLine(1, ""); return; } Block signblock = scevent.getBlock(); org.bukkit.material.Sign msign = (org.bukkit.material.Sign) signblock.getState().getData(); BlockFace attachedface = msign.getAttachedFace(); Block attachedblock = signblock.getRelative(attachedface); Material am = attachedblock.getType(); BlockState chestblock = signblock.getRelative(BlockFace.DOWN).getState(); if (!(chestblock instanceof Chest)) { scevent.setLine(1, ""); return; } Block cblock = chestblock.getBlock(); BlockState pchest1 = cblock.getRelative(BlockFace.EAST).getState(); BlockState pchest2 = cblock.getRelative(BlockFace.WEST).getState(); BlockState pchest3 = cblock.getRelative(BlockFace.NORTH).getState(); BlockState pchest4 = cblock.getRelative(BlockFace.SOUTH).getState(); if ((pchest1 instanceof Chest) || (pchest2 instanceof Chest) || (pchest3 instanceof Chest) || (pchest4 instanceof Chest)) { scevent.setLine(0, ChatColor.DARK_RED + "You can't"); scevent.setLine(1, ChatColor.DARK_RED + "use a"); scevent.setLine(2, ChatColor.DARK_RED + "double"); scevent.setLine(3, ChatColor.DARK_RED + "chest."); return; } if (hc.gYH().gFC("config").getBoolean("config.require-chest-shops-to-be-in-shop") && !em.inAnyShop(scevent.getPlayer())) { scevent.setLine(0, ChatColor.DARK_RED + "You must"); scevent.setLine(1, ChatColor.DARK_RED + "place your"); scevent.setLine(2, ChatColor.DARK_RED + "chest shop"); scevent.setLine(3, ChatColor.DARK_RED + "in a shop."); return; } Chest c = (Chest) chestblock; int count = 0; int emptyslots = 0; while (count < 27) { if (c.getInventory().getItem(count) == null) { emptyslots++; } count++; } if (emptyslots != 27) { scevent.setLine(0, ChatColor.DARK_RED + "You must"); scevent.setLine(1, ChatColor.DARK_RED + "use an"); scevent.setLine(2, ChatColor.DARK_RED + "empty"); scevent.setLine(3, ChatColor.DARK_RED + "chest."); return; } if (am == Material.ICE || am == Material.LEAVES || am == Material.SAND || am == Material.GRAVEL || am == Material.SIGN || am == Material.SIGN_POST || am == Material.TNT) { scevent.setLine(0, ChatColor.DARK_RED + "You can't"); scevent.setLine(1, ChatColor.DARK_RED + "attach your"); scevent.setLine(2, ChatColor.DARK_RED + "sign to that"); scevent.setLine(3, ChatColor.DARK_RED + "block!"); return; } String line1 = scevent.getLine(0); if (line1.startsWith(L.gC(false))) { try { String price = line1.substring(1, line1.length()); Double.parseDouble(price); scevent.setLine(0, ChatColor.GREEN + L.fCS(price)); } catch (Exception e) { scevent.setLine(0, ""); } } else { try { String price = line1.substring(0, line1.length()); Double.parseDouble(price); scevent.setLine(0, ChatColor.GREEN + L.fCS(price)); } catch (Exception e) { try { String price = line1.substring(0, line1.length() - 1); Double.parseDouble(price); scevent.setLine(0, ChatColor.GREEN + L.fCS(price)); } catch (Exception e2) { scevent.setLine(0, ""); } } } String fline = ""; if (line2.equalsIgnoreCase("[Trade]")) { fline = "[Trade]"; } else if (line2.equalsIgnoreCase("[Buy]")) { fline = "[Buy]"; } else if (line2.equalsIgnoreCase("[Sell]")) { fline = "[Sell]"; } String pname = scevent.getPlayer().getName(); String line3 = ""; String line4 = ""; if (pname.length() > 12) { line3 = pname.substring(0, 12); line4 = pname.substring(12, pname.length()); } else { line3 = pname; } scevent.setLine(1, ChatColor.AQUA + fline); scevent.setLine(2, ChatColor.WHITE + line3); scevent.setLine(3, ChatColor.WHITE + line4); if (scevent.getBlock() != null && scevent.getBlock().getType().equals(Material.SIGN_POST) || scevent.getBlock() != null && scevent.getBlock().getType().equals(Material.WALL_SIGN)) { Sign s = (Sign) scevent.getBlock().getState(); s.update(); } } catch (Exception e) { hc.gDB().writeError(e); } } @EventHandler(priority = EventPriority.LOW) public void onInventoryClickEvent(InventoryClickEvent icevent) { try { Player p = Bukkit.getPlayer(icevent.getWhoClicked().getName()); if (hc.getHyperLock().isLocked(p)) { if (isChestShop(icevent.getInventory().getHolder())) { hc.getHyperLock().sendLockMessage(p); icevent.setCancelled(true); } return; } Sign s = getChestShopSign(icevent.getInventory().getHolder()); if (s == null) { return; } String line2 = ChatColor.stripColor(s.getLine(1)).trim(); int slot = icevent.getRawSlot(); boolean buy = false; boolean sell = false; if (line2.equalsIgnoreCase("[Trade]")) { buy = true; sell = true; } else if (line2.equalsIgnoreCase("[Buy]")) { buy = true; } else if (line2.equalsIgnoreCase("[Sell]")) { sell = true; } String line34 = ChatColor.stripColor(s.getLine(2)).trim() + ChatColor.stripColor(s.getLine(3)).trim(); String clicker = icevent.getWhoClicked().getName(); // if clicker is owner of chest return if (clicker.equalsIgnoreCase(line34)) { return; } if (icevent.getCurrentItem() == null) { icevent.setCancelled(true); return; } HyperItemStack his = new HyperItemStack(icevent.getCurrentItem()); if (his.isDamaged()) { icevent.setCancelled(true); p.sendMessage(L.get("CHESTSHOP_CANT_TRADE_DAMAGED")); return; } boolean setprice = false; double staticprice = 0.0; String line1 = ChatColor.stripColor(s.getLine(0)).trim(); if (line1.startsWith(L.gC(false))) { try { String price = line1.substring(1, line1.length()); staticprice = cf.twoDecimals(Double.parseDouble(price)); setprice = true; } catch (Exception e) { setprice = false; } } else if (line1.endsWith(L.gC(false))) { try { String price = line1.substring(0, line1.length() - 1); staticprice = cf.twoDecimals(Double.parseDouble(price)); setprice = true; } catch (Exception e) { setprice = false; } } if (icevent.isShiftClick()) { HyperPlayer hp = em.getHyperPlayer(p.getName()); HyperEconomy he = em.getEconomy(hp.getEconomy()); if (new HyperItemStack(icevent.getCurrentItem()).hasenchants()) { icevent.setCancelled(true); return; } HyperItem ho = he.getHyperItem(icevent.getCurrentItem()); if (ho == null) { if (setprice) { ho = new HyperItemStack(icevent.getCurrentItem()).generateTempItem(); } else { icevent.setCancelled(true); return; } } int camount = icevent.getCurrentItem().getAmount(); if (slot < 27) { if (buy) { PlayerTransaction pt = new PlayerTransaction(TransactionType.BUY_FROM_INVENTORY); pt.setHyperObject(ho); pt.setTradePartner(em.getHyperPlayer(line34)); pt.setAmount(camount); pt.setGiveInventory(icevent.getView().getTopInventory()); if (setprice) { pt.setMoney(cf.twoDecimals((camount * staticprice))); pt.setSetPrice(true); } TransactionResponse response = hp.processTransaction(pt); response.sendMessages(); } else { p.sendMessage(L.get("CANNOT_PURCHASE_ENCHANTMENTS_FROM_CHEST")); } } else if (slot >= 27) { if (sell) { if (p.getGameMode() == GameMode.CREATIVE && hc.gYH().gQFC("config").gB("block-selling-in-creative-mode")) { p.sendMessage(L.get("CANT_SELL_CREATIVE")); icevent.setCancelled(true); return; } int itemamount = ho.count(icevent.getView().getTopInventory()); if (itemamount > 0) { int space = ho.getAvailableSpace(icevent.getView().getTopInventory()); if (space >= camount) { if (em.hasAccount(line34)) { double bal = em.getHyperPlayer(line34).getBalance(); double cost = ho.getValue(camount); if (setprice) { cost = staticprice * camount; } if (bal >= cost) { PlayerTransaction pt = new PlayerTransaction(TransactionType.SELL_TO_INVENTORY); pt.setHyperObject(ho); pt.setTradePartner(em.getHyperPlayer(line34)); pt.setAmount(camount); pt.setReceiveInventory(icevent.getView().getTopInventory()); if (setprice) { pt.setMoney(cf.twoDecimals(cost)); pt.setSetPrice(true); } TransactionResponse response = hp.processTransaction(pt); response.sendMessages(); } else { L.f(L.get("PLAYER_DOESNT_HAVE_ENOUGH_MONEY"), line34); } } } else { p.sendMessage(L.get("CHEST_SHOP_NOT_ENOUGH_SPACE")); } } else { p.sendMessage(L.get("CHEST_WILL_NOT_ACCEPT_ITEM")); } } else { p.sendMessage(L.get("CANNOT_SELL_ITEMS_TO_CHEST")); } } icevent.setCancelled(true); return; } else if (icevent.isLeftClick()) { HyperPlayer hp = em.getHyperPlayer(p.getName()); HyperEconomy he = em.getEconomy(hp.getEconomy()); if (!new HyperItemStack(icevent.getCurrentItem()).hasenchants()) { HyperItem ho = he.getHyperItem(icevent.getCurrentItem()); if (ho == null && setprice) { ho = new HyperItemStack(icevent.getCurrentItem()).generateTempItem(); } if (slot < 27 && ho != null) { String name = ho.getDisplayName(); if (buy) { double price = ho.getValue(1); if (setprice) { price = staticprice; } p.sendMessage(L.get("LINE_BREAK")); p.sendMessage(L.f(L.get("CHEST_SHOP_BUY_VALUE"), 1, price, name, line34)); p.sendMessage(L.get("LINE_BREAK")); } else { p.sendMessage(L.get("CANNOT_PURCHASE_ITEMS_FROM_CHEST")); } } else if (slot >= 27 && ho != null) { String name = ho.getDisplayName(); if (sell) { int itemamount = ho.count(icevent.getView().getTopInventory()); if (itemamount > 0) { double price = ho.getValue(1, hp); if (setprice) { price = staticprice; } p.sendMessage(L.get("LINE_BREAK")); p.sendMessage(L.f(L.get("CHEST_SHOP_SELL_VALUE"), 1, price, name, line34)); p.sendMessage(L.get("LINE_BREAK")); } else { p.sendMessage(L.get("CHEST_WILL_NOT_ACCEPT_ITEM")); } } else { p.sendMessage(L.get("CANNOT_SELL_ITEMS_TO_CHEST")); } } } else { if (slot < 27) { if (buy) { double price = 0; for (Enchantment enchantment : new HyperItemStack(icevent.getCurrentItem()).listEnchantments()) { int lvl = new HyperItemStack(icevent.getCurrentItem()).getEnchantmentLevel( enchantment); String nam = he.getEnchantNameWithoutLevel(enchantment.getName()); String fnam = nam + lvl; HyperEnchant ho = he.getHyperEnchant(fnam); price += ho.getValue(EnchantmentClass.fromString(p.getItemInHand().getType().name()), hp); if (setprice) { price = staticprice; } } price = cf.twoDecimals(price); if (new HyperItemStack(p.getItemInHand()).canEnchantItem()) { p.sendMessage(L.get("LINE_BREAK")); p.sendMessage(L.f(L.get("CHEST_SHOP_ENCHANTMENT_VALUE"), price, line34)); p.sendMessage(L.get("LINE_BREAK")); } else { p.sendMessage(L.get("ITEM_CANNOT_ACCEPT_ENCHANTMENTS")); } } else { p.sendMessage(L.get("CANNOT_PURCHASE_ENCHANTMENTS_FROM_CHEST")); } } else { p.sendMessage(L.get("CANNOT_SELL_ENCHANTMENTS_HERE")); } } icevent.setCancelled(true); return; } else if (icevent.isRightClick()) { HyperPlayer hp = em.getHyperPlayer(p.getName()); HyperEconomy he = em.getEconomy(hp.getEconomy()); if (!new HyperItemStack(icevent.getCurrentItem()).hasenchants()) { HyperItem ho = he.getHyperItem(icevent.getCurrentItem()); if (ho == null && setprice) { ho = new HyperItemStack(icevent.getCurrentItem()).generateTempItem(); } if (slot < 27 && ho != null) { if (buy) { PlayerTransaction pt = new PlayerTransaction(TransactionType.BUY_FROM_INVENTORY); pt.setHyperObject(ho); pt.setTradePartner(em.getHyperPlayer(line34)); pt.setAmount(1); pt.setGiveInventory(icevent.getView().getTopInventory()); if (setprice) { pt.setMoney(staticprice); pt.setSetPrice(true); } TransactionResponse response = hp.processTransaction(pt); response.sendMessages(); } else { p.sendMessage(L.get("CANNOT_BUY_ITEMS_FROM_CHEST")); } } else if (slot >= 27 && ho != null) { if (sell) { if (p.getGameMode() == GameMode.CREATIVE && hc.gYH().gQFC("config").gB("block-selling-in-creative-mode")) { p.sendMessage(L.get("CANT_SELL_CREATIVE")); icevent.setCancelled(true); return; } int itemamount = ho.count(icevent.getView().getTopInventory()); if (itemamount > 0) { int space = ho.getAvailableSpace(icevent.getView().getTopInventory()); if (space >= 1) { if (em.hasAccount(line34)) { double bal = em.getHyperPlayer(line34).getBalance(); double cost = ho.getValue(1); if (setprice) { cost = staticprice; } if (bal >= cost) { PlayerTransaction pt = new PlayerTransaction(TransactionType.SELL_TO_INVENTORY); pt.setHyperObject(ho); pt.setTradePartner(em.getHyperPlayer(line34)); pt.setAmount(1); pt.setReceiveInventory(icevent.getView().getTopInventory()); if (setprice) { pt.setMoney(cost); pt.setSetPrice(true); } TransactionResponse response = hp.processTransaction(pt); response.sendMessages(); } else { p.sendMessage(L.f(L.get("PLAYER_DOESNT_HAVE_ENOUGH_MONEY"), line34)); } } } else { p.sendMessage(L.get("CHEST_SHOP_NOT_ENOUGH_SPACE")); } } else { p.sendMessage(L.get("CHEST_WILL_NOT_ACCEPT_ITEM")); } } else { p.sendMessage(L.get("CANNOT_SELL_ITEMS_TO_CHEST")); } } } else { if (slot < 27) { if (buy) { for (Enchantment enchantment : new HyperItemStack(icevent.getCurrentItem()).listEnchantments()) { int lvl = new HyperItemStack(icevent.getCurrentItem()).getEnchantmentLevel(enchantment); String nam = he.getEnchantNameWithoutLevel(enchantment.getName()); String fnam = nam + lvl; HyperObject ho = he.getHyperObject(fnam); PlayerTransaction pt = new PlayerTransaction(TransactionType.BUY_FROM_ITEM); pt.setHyperObject(ho); pt.setTradePartner(em.getHyperPlayer(line34)); pt.setGiveItem(icevent.getCurrentItem()); if (setprice) { pt.setMoney(staticprice); pt.setSetPrice(true); } TransactionResponse response = hp.processTransaction(pt); response.sendMessages(); } } else { p.sendMessage(L.get("CANNOT_BUY_ITEMS_FROM_CHEST")); } } else if (slot >= 27) { p.sendMessage(L.get("CANNOT_SELL_ENCHANTMENTS_HERE")); } } icevent.setCancelled(true); return; } else { icevent.setCancelled(true); return; } } catch (Exception e) { hc.gDB().writeError(e); } } }