Maxlego08

Untitled

Jan 15th, 2021 (edited)
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.78 KB | None | 0 0
  1. package fr.maxlego08.items.sell;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Optional;
  8. import java.util.stream.Collectors;
  9.  
  10. import org.bukkit.Material;
  11. import org.bukkit.block.Block;
  12. import org.bukkit.block.Chest;
  13. import org.bukkit.command.CommandSender;
  14. import org.bukkit.configuration.ConfigurationSection;
  15. import org.bukkit.configuration.file.YamlConfiguration;
  16. import org.bukkit.entity.Player;
  17. import org.bukkit.event.block.Action;
  18. import org.bukkit.event.player.PlayerInteractEvent;
  19. import org.bukkit.inventory.Inventory;
  20. import org.bukkit.inventory.ItemStack;
  21. import org.bukkit.inventory.meta.ItemMeta;
  22. import org.bukkit.plugin.java.JavaPlugin;
  23.  
  24. import com.massivecraft.factions.FPlayers;
  25. import com.massivecraft.factions.Faction;
  26.  
  27. import fr.maxlego08.items.ItemAdapter;
  28. import fr.maxlego08.items.save.Config;
  29. import fr.maxlego08.items.zcore.enums.Message;
  30. import fr.maxlego08.items.zcore.logger.Logger;
  31. import fr.maxlego08.items.zcore.utils.loader.ItemStackLoader;
  32. import fr.maxlego08.items.zcore.utils.loader.Loader;
  33. import fr.maxlego08.items.zcore.utils.storage.Persist;
  34. import fr.maxlego08.shop.api.IEconomy;
  35. import fr.maxlego08.shop.api.ShopManager;
  36. import fr.maxlego08.shop.api.button.buttons.ItemButton;
  37. import fr.maxlego08.shop.api.enums.Economy;
  38.  
  39. public class SellManager extends ItemAdapter {
  40.  
  41.     private final ShopManager manager;
  42.     private final String key = "sellKey";
  43.     private final String keyBoost = "keyBoost";
  44.     private final String duraKey = "sellDura";
  45.     private List<String> messages = new ArrayList<String>();
  46.     private List<String> breakMessages = new ArrayList<String>();
  47.     private List<String> error = new ArrayList<String>();
  48.  
  49.     private Map<String, SellItem> items = new HashMap<String, SellItem>();
  50.  
  51.     /**
  52.      * @param plugin
  53.      * @param fileName
  54.      * @param manager
  55.      */
  56.     public SellManager(JavaPlugin plugin, ShopManager manager) {
  57.         super(plugin, "sellstick");
  58.         this.manager = manager;
  59.     }
  60.  
  61.     @Override
  62.     public void load(Persist persist) {
  63.  
  64.         if (fileName == null)
  65.             return;
  66.  
  67.         YamlConfiguration configuration = getConfig(fileName + ".yml");
  68.  
  69.         if (configuration == null)
  70.             return;
  71.  
  72.         Loader<ItemStack> loader = new ItemStackLoader();
  73.  
  74.         ConfigurationSection configurationSection = configuration.getConfigurationSection("items.");
  75.         for (String key : configurationSection.getKeys(false)) {
  76.             String path = "items." + key + ".";
  77.             int dura = configuration.getInt(path + "dura");
  78.             ItemStack itemStack = loader.load(configuration, path + "item.");
  79.             String name = configuration.getString(path + "name");
  80.             double boost = configuration.getDouble(path + "boost");
  81.  
  82.             SellItem item = new SellItem(itemStack, dura, boost);
  83.             this.items.put(name, item);
  84.         }
  85.  
  86.         Logger.info("Chargement de " + items.size() + " sellstick");
  87.  
  88.         this.postLoad(configuration, loader);
  89.     }
  90.  
  91.     @Override
  92.     protected void postLoad(YamlConfiguration configuration, Loader<ItemStack> loader) {
  93.         messages = configuration.getStringList("messages");
  94.         if (messages != null)
  95.             messages = color(messages);
  96.         error = configuration.getStringList("error");
  97.         if (error != null)
  98.             error = color(error);
  99.         breakMessages = configuration.getStringList("breakMessages");
  100.         if (breakMessages != null)
  101.             breakMessages = color(breakMessages);
  102.     }
  103.  
  104.     public ItemStack getItemStack(boolean keepInventory, String name, int dura) {
  105.  
  106.         if (!this.items.containsKey(name))
  107.             return null;
  108.  
  109.         SellItem sellItem = this.items.get(name);
  110.         ItemStack itemStack = sellItem.getItemStack().clone();
  111.         if (keepInventory)
  112.             itemStack = setBoolean(itemStack, keepInventoryKey, true);
  113.  
  114.         itemStack = setInteger(itemStack, duraKey, dura == 0 ? sellItem.getDurability() : dura);
  115.         itemStack = setString(itemStack, key, name);
  116.         itemStack = setDouble(itemStack, keyBoost, sellItem.getBoost());
  117.  
  118.         ItemMeta itemMeta = itemStack.getItemMeta();
  119.         if (itemMeta.hasDisplayName())
  120.             itemMeta.setDisplayName(itemMeta.getDisplayName().replace("%keepInventory%",
  121.                     keepInventory ? Config.isKeepInventory : Config.isNotKeepInventory));
  122.  
  123.         if (itemMeta.hasLore())
  124.             itemMeta.setLore(itemMeta.getLore().stream().map(e -> {
  125.                 e = e.replace("%dura%", String.valueOf(dura == 0 ? sellItem.getDurability() : dura));
  126.                 e = e.replace("%maxDura%", String.valueOf(sellItem.getDurability()));
  127.                 return e.replace("%keepInventory%", keepInventory ? Config.isKeepInventory : Config.isNotKeepInventory);
  128.             }).collect(Collectors.toList()));
  129.         itemStack.setItemMeta(itemMeta);
  130.         return itemStack;
  131.     }
  132.  
  133.     @SuppressWarnings("deprecation")
  134.     @Override
  135.     protected void onInteract(PlayerInteractEvent event, Player player) {
  136.  
  137.         if (event.getAction().equals(Action.LEFT_CLICK_AIR) || event.getAction().equals(Action.RIGHT_CLICK_AIR))
  138.             return;
  139.  
  140.         Block block = event.getClickedBlock();
  141.         Faction faction = FPlayers.getInstance().getByPlayer(player).getFaction();
  142.  
  143.         if (!canBreak(block, faction, player))
  144.             return;
  145.  
  146.         ItemStack itemStack = player.getItemInHand();
  147.         if (isKey(itemStack, key)
  148.                 && (block.getType().equals(Material.CHEST) || block.getType().equals(Material.TRAPPED_CHEST))) {
  149.  
  150.             event.setCancelled(true);
  151.  
  152.             Chest chest = (Chest) block.getState();
  153.             Inventory inventory = chest.getInventory();
  154.             if (!sellContenst(inventory, player, getDouble(itemStack, keyBoost)))
  155.                 return;
  156.  
  157.             int dura = getInteger(itemStack, duraKey) - 1;
  158.  
  159.             if (dura <= 0) {
  160.  
  161.                 if (breakMessages != null)
  162.                     breakMessages.forEach(message -> message(player, message));
  163.                 player.setItemInHand(new ItemStack(Material.AIR));
  164.                 player.updateInventory();
  165.                 return;
  166.             }
  167.  
  168.             boolean keepInventory = isKey(itemStack, keepInventoryKey);
  169.  
  170.             itemStack = getItemStack(keepInventory, getString(itemStack, key), dura);
  171.  
  172.             if (itemStack != null) {
  173.                 player.setItemInHand(itemStack);
  174.                 player.updateInventory();
  175.             }
  176.  
  177.         }
  178.     }
  179.  
  180.     /**
  181.      *
  182.      * @param inventory
  183.      * @param player
  184.      * @return
  185.      */
  186.     private boolean sellContenst(Inventory inventory, Player player, double boost) {
  187.         double price = 0;
  188.         long amount = 0;
  189.         Economy economy = null;
  190.         for (int a = 0; a != inventory.getContents().length; a++) {
  191.  
  192.             ItemStack itemStack = inventory.getContents()[a];
  193.  
  194.             if (itemStack == null)
  195.                 continue;
  196.  
  197.             Optional<ItemButton> optional = manager.getItemButton(itemStack);
  198.  
  199.             if (optional.isPresent()) {
  200.  
  201.                 ItemButton button = optional.get();
  202.  
  203.                 if (!button.canSell())
  204.                     continue;
  205.  
  206.                 economy = button.getEconomy();
  207.  
  208.                 IEconomy iEconomy = button.getIEconomy();
  209.                 double sellPrice = button.getSellPrice() * itemStack.getAmount() * boost;
  210.  
  211.                 amount += itemStack.getAmount();
  212.                 price += sellPrice;
  213.  
  214.                 iEconomy.depositMoney(button.getEconomy(), player, sellPrice);
  215.                 inventory.setItem(a, new ItemStack(Material.AIR));
  216.  
  217.             }
  218.         }
  219.  
  220.         if (economy == null) {
  221.             for (String e : error)
  222.                 message(player, e);
  223.             return false;
  224.         } else {
  225.             for (String e : messages) {
  226.                 e = e.replace("%price%", format(price));
  227.                 e = e.replace("%amount%", format(amount));
  228.                 e = e.replace("%currency%", economy.getCurrenry());
  229.                 message(player, e);
  230.             }
  231.             return true;
  232.         }
  233.     }
  234.  
  235.     public void setBreakMessages(List<String> breakMessages) {
  236.         this.breakMessages = breakMessages;
  237.     }
  238.  
  239.     public void give(CommandSender sender, Player player, boolean keepInventory, String name) {
  240.         ItemStack itemStack = getItemStack(keepInventory, name, 0);
  241.  
  242.         if (itemStack == null) {
  243.             message(sender, "cImpossible de trouver l'item: f%s", name);
  244.             return;
  245.         }
  246.  
  247.         super.give(player, itemStack);
  248.  
  249.         message(sender, Message.ITEM_GIVE.getMessage().replace("%item%", name(itemStack.getType().name()))
  250.                 .replace("%player%", player.getName()));
  251.     }
  252.  
  253.     public List<String> names() {
  254.         return new ArrayList<>(items.keySet());
  255.     }
  256.  
  257. }
  258.  
Add Comment
Please, Sign In to add comment