Maxlego08 icon

Untitled

Maxlego08 | PRO | 01/15/21 07:37:32 PM UTC (Edited) | 0 ⭐ | 298 👁️ | Never ⏰ | []
Java |

7.78 KB

|

None

|

0 👍

/

0 👎

package fr.maxlego08.items.sell;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
 
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
 
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
 
import fr.maxlego08.items.ItemAdapter;
import fr.maxlego08.items.save.Config;
import fr.maxlego08.items.zcore.enums.Message;
import fr.maxlego08.items.zcore.logger.Logger;
import fr.maxlego08.items.zcore.utils.loader.ItemStackLoader;
import fr.maxlego08.items.zcore.utils.loader.Loader;
import fr.maxlego08.items.zcore.utils.storage.Persist;
import fr.maxlego08.shop.api.IEconomy;
import fr.maxlego08.shop.api.ShopManager;
import fr.maxlego08.shop.api.button.buttons.ItemButton;
import fr.maxlego08.shop.api.enums.Economy;
 
public class SellManager extends ItemAdapter {
 
    private final ShopManager manager;
    private final String key = "sellKey";
    private final String keyBoost = "keyBoost";
    private final String duraKey = "sellDura";
    private List<String> messages = new ArrayList<String>();
    private List<String> breakMessages = new ArrayList<String>();
    private List<String> error = new ArrayList<String>();
 
    private Map<String, SellItem> items = new HashMap<String, SellItem>();
 
    /**
     * @param plugin
     * @param fileName
     * @param manager
     */
    public SellManager(JavaPlugin plugin, ShopManager manager) {
        super(plugin, "sellstick");
        this.manager = manager;
    }
 
    @Override
    public void load(Persist persist) {
 
        if (fileName == null)
            return;
 
        YamlConfiguration configuration = getConfig(fileName + ".yml");
 
        if (configuration == null)
            return;
 
        Loader<ItemStack> loader = new ItemStackLoader();
 
        ConfigurationSection configurationSection = configuration.getConfigurationSection("items.");
        for (String key : configurationSection.getKeys(false)) {
            String path = "items." + key + ".";
            int dura = configuration.getInt(path + "dura");
            ItemStack itemStack = loader.load(configuration, path + "item.");
            String name = configuration.getString(path + "name");
            double boost = configuration.getDouble(path + "boost");
 
            SellItem item = new SellItem(itemStack, dura, boost);
            this.items.put(name, item);
        }
 
        Logger.info("Chargement de " + items.size() + " sellstick");
 
        this.postLoad(configuration, loader);
    }
 
    @Override
    protected void postLoad(YamlConfiguration configuration, Loader<ItemStack> loader) {
        messages = configuration.getStringList("messages");
        if (messages != null)
            messages = color(messages);
        error = configuration.getStringList("error");
        if (error != null)
            error = color(error);
        breakMessages = configuration.getStringList("breakMessages");
        if (breakMessages != null)
            breakMessages = color(breakMessages);
    }
 
    public ItemStack getItemStack(boolean keepInventory, String name, int dura) {
 
        if (!this.items.containsKey(name))
            return null;
 
        SellItem sellItem = this.items.get(name);
        ItemStack itemStack = sellItem.getItemStack().clone();
        if (keepInventory)
            itemStack = setBoolean(itemStack, keepInventoryKey, true);
 
        itemStack = setInteger(itemStack, duraKey, dura == 0 ? sellItem.getDurability() : dura);
        itemStack = setString(itemStack, key, name);
        itemStack = setDouble(itemStack, keyBoost, sellItem.getBoost());
 
        ItemMeta itemMeta = itemStack.getItemMeta();
        if (itemMeta.hasDisplayName())
            itemMeta.setDisplayName(itemMeta.getDisplayName().replace("%keepInventory%",
                    keepInventory ? Config.isKeepInventory : Config.isNotKeepInventory));
 
        if (itemMeta.hasLore())
            itemMeta.setLore(itemMeta.getLore().stream().map(e -> {
                e = e.replace("%dura%", String.valueOf(dura == 0 ? sellItem.getDurability() : dura));
                e = e.replace("%maxDura%", String.valueOf(sellItem.getDurability()));
                return e.replace("%keepInventory%", keepInventory ? Config.isKeepInventory : Config.isNotKeepInventory);
            }).collect(Collectors.toList()));
        itemStack.setItemMeta(itemMeta);
        return itemStack;
    }
 
    @SuppressWarnings("deprecation")
    @Override
    protected void onInteract(PlayerInteractEvent event, Player player) {
 
        if (event.getAction().equals(Action.LEFT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_AIR))
            return;
 
        Block block = event.getClickedBlock();
        Faction faction = FPlayers.getInstance().getByPlayer(player).getFaction();
 
        if (!canBreak(block, faction, player))
            return;
 
        ItemStack itemStack = player.getItemInHand();
        if (isKey(itemStack, key)
                && (block.getType().equals(Material.CHEST) || block.getType().equals(Material.TRAPPED_CHEST))) {
 
            event.setCancelled(true);
 
            Chest chest = (Chest) block.getState();
            Inventory inventory = chest.getInventory();
            if (!sellContenst(inventory, player, getDouble(itemStack, keyBoost)))
                return;
 
            int dura = getInteger(itemStack, duraKey) - 1;
 
            if (dura <= 0) {
 
                if (breakMessages != null)
                    breakMessages.forEach(message -> message(player, message));
                player.setItemInHand(new ItemStack(Material.AIR));
                player.updateInventory();
                return;
            }
 
            boolean keepInventory = isKey(itemStack, keepInventoryKey);
 
            itemStack = getItemStack(keepInventory, getString(itemStack, key), dura);
 
            if (itemStack != null) {
                player.setItemInHand(itemStack);
                player.updateInventory();
            }
 
        }
    }
 
    /**
     * 
     * @param inventory
     * @param player
     * @return
     */
    private boolean sellContenst(Inventory inventory, Player player, double boost) {
        double price = 0;
        long amount = 0;
        Economy economy = null;
        for (int a = 0; a != inventory.getContents().length; a++) {
 
            ItemStack itemStack = inventory.getContents()[a];
 
            if (itemStack == null)
                continue;
 
            Optional<ItemButton> optional = manager.getItemButton(itemStack);
 
            if (optional.isPresent()) {
 
                ItemButton button = optional.get();
 
                if (!button.canSell())
                    continue;
 
                economy = button.getEconomy();
 
                IEconomy iEconomy = button.getIEconomy();
                double sellPrice = button.getSellPrice() * itemStack.getAmount() * boost;
 
                amount += itemStack.getAmount();
                price += sellPrice;
 
                iEconomy.depositMoney(button.getEconomy(), player, sellPrice);
                inventory.setItem(a, new ItemStack(Material.AIR));
 
            }
        }
 
        if (economy == null) {
            for (String e : error)
                message(player, e);
            return false;
        } else {
            for (String e : messages) {
                e = e.replace("%price%", format(price));
                e = e.replace("%amount%", format(amount));
                e = e.replace("%currency%", economy.getCurrenry());
                message(player, e);
            }
            return true;
        }
    }
 
    public void setBreakMessages(List<String> breakMessages) {
        this.breakMessages = breakMessages;
    }
 
    public void give(CommandSender sender, Player player, boolean keepInventory, String name) {
        ItemStack itemStack = getItemStack(keepInventory, name, 0);
 
        if (itemStack == null) {
            message(sender, "cImpossible de trouver l'item: f%s", name);
            return;
        }
 
        super.give(player, itemStack);
 
        message(sender, Message.ITEM_GIVE.getMessage().replace("%item%", name(itemStack.getType().name()))
                .replace("%player%", player.getName()));
    }
 
    public List<String> names() {
        return new ArrayList<>(items.keySet());
    }
 
}
 

Comments