Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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());
- }
- }
Add Comment
Please, Sign In to add comment