Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.mason.chest.listeners;
- import com.wasteofplastic.askyblock.ASkyBlockAPI;
- import com.wasteofplastic.askyblock.Island;
- import java.util.List;
- import me.mason.chest.Core;
- import me.mason.chest.utils.LM;
- import me.mason.chest.utils.SignUtil;
- import net.brcdev.shopgui.ShopGuiPlugin;
- import net.brcdev.shopgui.config.Settings;
- import net.brcdev.shopgui.player.PlayerData;
- import net.brcdev.shopgui.shop.ShopManager;
- import net.brcdev.shopgui.shop.WrappedShopItem;
- import org.apache.commons.lang.Validate;
- import org.bukkit.Material;
- import org.bukkit.block.Block;
- import org.bukkit.block.BlockState;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.block.Action;
- import org.bukkit.event.block.SignChangeEvent;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.InventoryHolder;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.material.Sign;
- public class SignListener implements Listener {
- private final Core plugin;
- public SignListener(Core plugin) {
- this.plugin = plugin;
- }
- @EventHandler
- public void onSignPlace(SignChangeEvent event) {
- final Player player = event.getPlayer();
- final SignUtil signUtil = this.plugin.getSignUtil();
- if(!inValidWorld(player) || !signUtil.validSign(event.getLine(0))){
- return;
- }
- if (!ASkyBlockAPI.getInstance().playerIsOnIsland(player)) {
- return;
- }
- final Block block = event.getBlock();
- if (!block.getType().equals(Material.WALL_SIGN) ) {
- this.denySignChange(event, LM.NOT_AGAINST_CHEST.getValue());
- return;
- }
- if(!player.hasPermission(LM.PERMISSION.getValue())){
- this.denySignChange(event, LM.NO_PERMS_PLACE.getValue());
- return;
- }
- final Sign signData = (Sign) event.getBlock().getState().getData();
- final Block relative = block.getRelative(signData.getAttachedFace());
- if (!relative.equals(Material.CHEST) || !relative.equals(Material.TRAPPED_CHEST)) {
- this.denySignChange(event, LM.NOT_AGAINST_CHEST.getValue());
- return;
- }
- final String[] lines = signUtil.getLines();
- for (int i = 0; i < 4; i++) {
- event.setLine(i, lines[i]);
- }
- player.sendMessage(LM.PLACE.getValue());
- }
- private void denySignChange(SignChangeEvent event, String message) {
- event.getBlock().breakNaturally();
- event.getPlayer().sendMessage(message);
- }
- @EventHandler
- public void onSignInteract(PlayerInteractEvent event) {
- final Player player = event.getPlayer();
- final SignUtil signUtil = this.plugin.getSignUtil();
- if (!this.inValidWorld(player)) {
- return;
- }
- final Action action = event.getAction();
- if (action == Action.LEFT_CLICK_BLOCK || action == Action.RIGHT_CLICK_BLOCK) {
- return;
- }
- final Block block = event.getClickedBlock();
- if (block == null || block.getType() != Material.WALL_SIGN) {
- return;
- }
- final org.bukkit.block.Sign sign = (org.bukkit.block.Sign) block.getState();
- if (!signUtil.isSellChestSign(sign)) {
- return;
- }
- final ASkyBlockAPI askyblockAPI = ASkyBlockAPI.getInstance();
- if (!askyblockAPI.playerIsOnIsland(player)) {
- return;
- }
- final Island island = askyblockAPI.getIslandAt(player.getLocation());
- if (island == null) {
- return;
- }
- if (!island.getMembers().contains(player.getUniqueId())) {
- player.sendMessage(LM.NO_PERMS_USE.getValue());
- return;
- }
- final Sign signData = (Sign) sign.getData();
- final BlockState state = block.getRelative(signData.getAttachedFace()).getState();
- if (state instanceof InventoryHolder) {
- final Inventory inventory = ((InventoryHolder) state).getInventory();
- this.sellItems(inventory, player);
- }
- }
- public boolean inValidWorld(Player player) {
- List<String> validWorlds = plugin.getConfig().getStringList("valid-worlds");
- Validate.notEmpty(validWorlds,"[Haunted] Valid?");
- return validWorlds.contains(player.getWorld().getName());
- }
- public void sellItems(Inventory chest, Player seller) {
- ShopGuiPlugin sgp = ShopGuiPlugin.getInstance();
- int amount = 0;
- double value = 0.0;
- ShopManager shopManager = sgp.getShopManager();
- PlayerData playerData = sgp.getPlayerManager().getPlayerData(seller);
- for(int i = 0; i < chest.getContents().length; i++) {
- ItemStack stack = chest.getItem(i);
- if(stack == null || stack.getType().equals(Material.AIR)) {
- continue;
- }
- WrappedShopItem shopItem = shopManager.findShopItemByItemStack(seller, playerData, stack, Settings.sellHandAllExcludeFreeItems);
- if(shopItem == null || shopItem.getShopItem() == null || shopItem.getShop() == null) {
- continue;
- }
- double sellValue = shopItem.getShopItem().getSellPriceForAmount(shopItem.getShop(), seller, playerData, stack.getAmount());
- amount += stack.getAmount();
- value += sellValue;
- chest.setItem(i, new ItemStack(Material.AIR));
- }
- sgp.getEconomyProvider().deposit(seller, value);
- if (amount == 0) {
- seller.sendMessage(LM.EMPTY_CHEST.getValue());
- } else {
- seller.sendMessage(LM.SOLD.getValue().replace("%amount%", amount + "").replace("%value%", value + ""));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement