Advertisement
broken-arrow

Untitled

Jul 11th, 2021
769
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.79 KB | None | 0 0
  1. package org.broken.cheststorage.Crafting;
  2.  
  3. import org.bukkit.Material;
  4. import org.bukkit.inventory.Inventory;
  5. import org.bukkit.inventory.ItemStack;
  6.  
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11.  
  12. public class CraftingUtility {
  13.  
  14.     private Inventory inventory;
  15.  
  16.     private List<String> listOfItems;
  17.  
  18.     private boolean ifChestFull = true;
  19.  
  20.     public CraftingUtility(Inventory inventory, List<String> listOfItemsToCraft) {
  21.         this.inventory = inventory;
  22.         this.listOfItems = listOfItemsToCraft;
  23.     }
  24.  
  25.     public HashMap<Integer, ItemStack> checkCraftingRecipeExist() {
  26.         HashMap<Integer, ItemStack> outputItemsIfNoSpaceInChest = new HashMap<>();
  27.         for (Crafting craftingRecipe : Crafting.values()) {
  28.             String recipeValues = craftingRecipe.toString();
  29.  
  30.             String matrialNameFirst = Crafting.valueOf(recipeValues).getmatrialName();
  31.             String matrialNameSecond = Crafting.valueOf(recipeValues).getmatrialNames1();
  32.             String matrialNameThird = Crafting.valueOf(recipeValues).getmatrialNames2();
  33.  
  34.             int itemAmountNeededFirst = Crafting.valueOf(recipeValues).getAmontNeededCrafting();
  35.             int itemAmountNeededSecond = Crafting.valueOf(recipeValues).getAmontNeededCrafting1();
  36.             int itemAmountNeededThird = Crafting.valueOf(recipeValues).getAmontNeededCrafting2();
  37.  
  38.  
  39.             for (String itemListForCrafting : listOfItems) {
  40.  
  41.                 Map<Material, Integer> mapvalues = getItemsAmount(craftingRecipe, itemListForCrafting, inventory);
  42.  
  43.  
  44.                 if (!mapvalues.isEmpty()) {
  45.                     List<ItemStack> itemStacks = convertMatrialToItemstacks(mapvalues, craftingRecipe);
  46.                     if (matrialNameFirst != null && matrialNameSecond == null && matrialNameThird == null) {
  47.  
  48.                         if (itemListForCrafting.equals(Crafting.valueOf(recipeValues).name()) &&
  49.                                 itemStacks.get(0) != null && itemStacks.get(0).getAmount() >= itemAmountNeededFirst) {
  50.                             inventory.remove(Material.valueOf(matrialNameFirst));
  51.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  52.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput() * itemStacks.get(0).getAmount()));
  53.  
  54.                         }
  55.                     } else if (matrialNameFirst != null && matrialNameSecond != null && matrialNameThird == null) {
  56.                         if (itemListForCrafting.equals(Crafting.valueOf(recipeValues).name()) &&
  57.                                 itemStacks.get(0) != null && itemStacks.get(0).getAmount() >= itemAmountNeededFirst &&
  58.                                 itemStacks.get(1) != null && itemStacks.get(1).getAmount() >= itemAmountNeededSecond) {
  59.                             //System.out.println("2items recipe ");
  60.                             takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
  61.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  62.  
  63.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput()));
  64.  
  65.                             if (!outputItemsIfNoSpaceInChest.isEmpty()) {
  66.                                 inventory.addItem(new ItemStack(itemStacks.get(0).getType(), itemAmountNeededFirst));
  67.                                 inventory.addItem(new ItemStack(itemStacks.get(1).getType(), itemAmountNeededSecond));
  68.                             }
  69.                         }
  70.  
  71.                     } else if (matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null) {
  72.  
  73.                         if (itemListForCrafting.equals(Crafting.valueOf(recipeValues).name()) &&
  74.                                 itemStacks.get(0) != null && itemStacks.get(0).getAmount() >= itemAmountNeededFirst &&
  75.                                 itemStacks.get(1) != null && itemStacks.get(1).getAmount() >= itemAmountNeededSecond &&
  76.                                 itemStacks.get(2) != null && itemStacks.get(2).getAmount() >= itemAmountNeededThird) {
  77.                             System.out.println("matrial of items ");
  78.                             takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
  79.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  80.  
  81.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput()));
  82.  
  83.                         }
  84.                     }
  85.                 }
  86.             }
  87.         }
  88.         return outputItemsIfNoSpaceInChest;
  89.     }
  90.  
  91.     public boolean checkIfChestFull() {
  92.  
  93.         if (checkCraftingRecipeExist().isEmpty()) {
  94.             ifChestFull = checkCraftingRecipeExist().isEmpty();
  95.         }
  96.         ifChestFull = true;
  97.         return true;
  98.     }
  99.  
  100.     public List<ItemStack> convertMatrialToItemstacks(Map<Material, Integer> values, Crafting value) {
  101.         List<ItemStack> itemstacks = new ArrayList<>();
  102.  
  103.         ItemStack recipeMatrial = null;
  104.         ItemStack recipeMatrialSecond = null;
  105.         ItemStack recipeMatrialThird = null;
  106.  
  107.         if (value.getmatrialName() != null && values.containsKey(Material.valueOf(value.getmatrialName()))) {
  108.             Material matrialNameFirst = Material.valueOf(value.getmatrialName());
  109.             int itemAmount = values.get(matrialNameFirst);
  110.             recipeMatrial = new ItemStack(matrialNameFirst, itemAmount);
  111.         }
  112.         if (value.getmatrialNames1() != null && values.containsKey(Material.valueOf(value.getmatrialNames1()))) {
  113.             Material matrialNameSecond = Material.valueOf(value.getmatrialNames1());
  114.             int itemAmountSecond = values.get(matrialNameSecond);
  115.             recipeMatrialSecond = new ItemStack(matrialNameSecond, itemAmountSecond);
  116.         }
  117.         if (value.getmatrialNames2() != null && values.containsKey(Material.valueOf(value.getmatrialNames2()))) {
  118.             Material matrialNameThird = Material.valueOf(value.getmatrialNames2());
  119.             int itemAmountThird = values.get(matrialNameThird);
  120.             recipeMatrialThird = new ItemStack(matrialNameThird, itemAmountThird);
  121.         }
  122.  
  123.         itemstacks.add(recipeMatrial);
  124.         itemstacks.add(recipeMatrialSecond);
  125.         itemstacks.add(recipeMatrialThird);
  126.  
  127.         return itemstacks;
  128.     }
  129.  
  130.     public Map<Material, Integer> getItemsAmount(Crafting values, String listOfItems, Inventory inventory) {
  131.         Map<Material, Integer> map = new HashMap<>();
  132.         int amountFirst = 0;
  133.         int amountSecond = 0;
  134.         int amountThird = 0;
  135.  
  136.         for (ItemStack itemStacks : inventory) {
  137.             if (listOfItems.equals(values.toString()) && itemStacks != null) {
  138.                 if (itemStacks.getType().toString().equals(values.getmatrialName())) {
  139.                     amountFirst += itemStacks.getAmount();
  140.                     map.put(itemStacks.getType(), amountFirst);
  141.  
  142.                 } else if (itemStacks.getType().toString().equals(values.getmatrialNames1())) {
  143.                     amountSecond += itemStacks.getAmount();
  144.                     map.put(itemStacks.getType(), amountSecond);
  145.  
  146.                 } else if (itemStacks.getType().toString().equals(values.getmatrialNames2())) {
  147.                     amountThird += itemStacks.getAmount();
  148.                     map.put(itemStacks.getType(), amountThird);
  149.                 }
  150.             }
  151.         }
  152.         return map;
  153.     }
  154.  
  155.     public void getItemsInventory(Inventory inventory, String matrialName) {
  156.         for (int i = 0; i < inventory.getSize(); i++) {
  157.             ItemStack itemStacks = inventory.getContents()[i];
  158.             if (itemStacks != null && itemStacks.isSimilar(new ItemStack(Material.valueOf(matrialName)))) {
  159.                 inventory.setItem(i, new ItemStack(Material.AIR));
  160.             }
  161.  
  162.         }
  163.     }
  164.  
  165.     public void takeItemsRecipeIngrediens(Inventory inventory, Crafting values, List<ItemStack> itemStacks) {
  166.         for (ItemStack itemStack : itemStacks)
  167.             if (itemStack != null && itemStack.getType().toString().equals(values.getmatrialName())) {
  168.                 getItemsInventory(inventory, values.getmatrialName());
  169.                 itemStack.setAmount(itemStack.getAmount() - values.getAmontNeededCrafting());
  170.                 inventory.addItem(itemStack);
  171.             } else if (itemStack != null && itemStack.getType().toString().equals(values.getmatrialNames1())) {
  172.                 getItemsInventory(inventory, values.getmatrialNames1());
  173.                 itemStack.setAmount(itemStack.getAmount() - values.getAmontNeededCrafting1());
  174.                 inventory.addItem(itemStack);
  175.             } else if (itemStack != null && itemStack.getType().toString().equals(values.getmatrialNames2())) {
  176.                 getItemsInventory(inventory, values.getmatrialNames2());
  177.                 itemStack.setAmount(itemStack.getAmount() - values.getAmontNeededCrafting2());
  178.                 inventory.addItem(itemStack);
  179.  
  180.             }
  181.     }
  182.  
  183. }
  184.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement