broken-arrow

Untitled

Sep 11th, 2021 (edited)
473
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 31.45 KB | None | 0 0
  1.  
  2.  
  3. import org.broken.cheststorage.util.ItemUtily;
  4. import org.bukkit.Location;
  5. import org.bukkit.Material;
  6. import org.bukkit.inventory.Inventory;
  7. import org.bukkit.inventory.ItemStack;
  8.  
  9. import java.util.*;
  10.  
  11. public class CraftingUtility {
  12.  
  13.     private static final Map<Location, Map<ItemStack, ItemStack>> craftedItems = new HashMap<>();
  14.     private final HashMap<ItemStack, ItemStack> itemStacksList = new HashMap<>();
  15.     private Inventory inventory;
  16.     private Location location;
  17.     private List<ItemStack> listOfItems;
  18.     private boolean ifChestFull = false;
  19.  
  20.     public CraftingUtility(Inventory inventory, Location location, List<ItemStack> listOfItemsToCraft) {
  21.         this.inventory = inventory;
  22.         this.location = location;
  23.         this.listOfItems = listOfItemsToCraft;
  24.     }
  25.  
  26.     public HashMap<Integer, ItemStack> checkCraftingRecipeExist() {
  27.         HashMap<Integer, ItemStack> outputItemsIfNoSpaceInChest = new HashMap<>();
  28.         int itemAmont = 0;
  29.         for (Crafting craftingRecipe : Crafting.values()) {
  30.             String recipeValues = craftingRecipe.toString();
  31.  
  32.             String matrialNameFirst = Crafting.valueOf(recipeValues).getMaterialName1();
  33.             String matrialNameSecond = Crafting.valueOf(recipeValues).getMaterialName2();
  34.             String matrialNameThird = Crafting.valueOf(recipeValues).getMaterialName3();
  35.             String matrialNameFourth = Crafting.valueOf(recipeValues).getMaterialName4();
  36.             String matrialNameFifth = Crafting.valueOf(recipeValues).getMaterialName5();
  37.  
  38.             for (ItemStack itemListForCrafting : listOfItems) {
  39.  
  40.                 Map<Material, Integer> amountOfItemsInventory = getItemsAmount(craftingRecipe, itemListForCrafting, this.inventory);
  41.  
  42.                 if (!amountOfItemsInventory.isEmpty()) {
  43.  
  44.                     Map<Material, ItemStack> itemStacks = setItemstacksAmount(amountOfItemsInventory, craftingRecipe);
  45.  
  46.                     if (ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) || (matrialNameFirst != null && matrialNameSecond == null && matrialNameThird == null && matrialNameFourth == null && matrialNameFifth == null)) {
  47.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  48.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory))) {
  49.  
  50.                             Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  51.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  52.  
  53.  
  54.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, checkIfItTallFlowers(material) ? Crafting.valueOf(recipeValues).getNumberOutput() + 1 : Crafting.valueOf(recipeValues).getNumberOutput()));
  55.  
  56.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  57.                                 if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
  58.                                     itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
  59.                                     ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
  60.  
  61.                                     items.clone().setAmount(itemAmont);
  62.                                     this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
  63.  
  64.                                 }
  65.                                 this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), ItemUtily.createItemStackWhitAmount(getmatrialName, (checkIfItTallFlowers(material) ? Crafting.valueOf(recipeValues).getNumberOutput() + 1 + (craftedItems.isEmpty() ? 0 : itemAmont) : Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
  66.                                 craftedItems.put(this.location, this.itemStacksList);
  67.  
  68.  
  69.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, material);
  70.                             }
  71.                         }
  72.                     } else if (ifItAreColorMatchTwoItems(craftingRecipe, itemListForCrafting, itemStacks) || (!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird == null && matrialNameFourth == null && matrialNameFifth == null)) {
  73.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  74.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameSecond, amountOfItemsInventory)) &&
  75.                                 checkAmountForRecipeSecond(itemStacks, recipeValues)) {
  76.  
  77.                             Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  78.                             Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
  79.                             Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
  80.  
  81.                             outputItemsIfNoSpaceInChest = inventory.addItem(ItemUtily.createItemStackWhitAmount(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() * 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
  82.  
  83.  
  84.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  85.                                 if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
  86.                                     itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
  87.                                     ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
  88.  
  89.                                     //items.clone().setAmount(Math.min(items.getMaxStackSize(), items.getAmount() + (isAColor(recipeNameOutput) ? (itemAmont * 2) : itemAmont)));
  90.                                     this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
  91.  
  92.                                 }
  93.  
  94.                                 this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), ItemUtily.createItemStackWhitAmount(recipeNameOutput, isAColor(recipeNameOutput) ? ((Crafting.valueOf(recipeValues).getNumberOutput() * 2) + (craftedItems.isEmpty() ? 0 : itemAmont) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput)) : (Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
  95.                                 craftedItems.put(this.location, this.itemStacksList);
  96.  
  97.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, materialSecond);
  98.                             }
  99.  
  100.  
  101.                         }
  102.  
  103.                     } else if ((!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null && matrialNameFourth == null && matrialNameFifth == null)) {
  104.  
  105.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  106.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory)) &&
  107.                                 checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues, returnItemToRecipe(matrialNameSecond, amountOfItemsInventory))) {
  108.  
  109.                             Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  110.                             Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
  111.                             Material matrialThird = Material.valueOf(returnItemToRecipe(matrialNameThird, amountOfItemsInventory));
  112.                             Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
  113.  
  114.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
  115.  
  116.  
  117.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  118.                                 if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
  119.                                     itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
  120.                                     ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
  121.  
  122.                                     items.clone().setAmount(itemAmont);
  123.                                     this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
  124.                                 }
  125.  
  126.                                 this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), ItemUtily.createItemStackWhitAmount(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : (Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
  127.                                 craftedItems.put(this.location, this.itemStacksList);
  128.  
  129.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, materialSecond);
  130.                             }
  131.  
  132.                         }
  133.                     } else if ((!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null && matrialNameFourth != null && matrialNameFifth == null)) {
  134.  
  135.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  136.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory)) &&
  137.                                 checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues) &&
  138.                                 checkAmountForRecipeFourth(itemStacks, recipeValues)) {
  139.  
  140.                             Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  141.                             Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
  142.                             Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
  143.  
  144.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
  145.  
  146.  
  147.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  148.                                 if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
  149.                                     itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
  150.                                     ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
  151.  
  152.                                     items.clone().setAmount(itemAmont);
  153.                                     this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
  154.                                 }
  155.  
  156.                                 this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), ItemUtily.createItemStackWhitAmount(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : (Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
  157.                                 craftedItems.put(this.location, this.itemStacksList);
  158.  
  159.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, null);
  160.                             }
  161.  
  162.                         }
  163.                     } else if ((!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null && matrialNameFourth != null && matrialNameFifth != null)) {
  164.  
  165.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  166.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory)) &&
  167.                                 checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues) &&
  168.                                 checkAmountForRecipeFourth(itemStacks, recipeValues) && checkAmountForRecipeFifth(itemStacks, recipeValues)) {
  169.  
  170.                             Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  171.                             Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
  172.                             Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
  173.  
  174.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
  175.  
  176.  
  177.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  178.                                 if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
  179.                                     itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
  180.                                     ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
  181.  
  182.                                     items.clone().setAmount(itemAmont);
  183.                                     this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
  184.                                 }
  185.  
  186.                                 this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), ItemUtily.createItemStackWhitAmount(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : (Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
  187.                                 craftedItems.put(this.location, this.itemStacksList);
  188.  
  189.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, null);
  190.                             }
  191.                         }
  192.                     }
  193.                 }
  194.             }
  195.         }
  196.         return outputItemsIfNoSpaceInChest;
  197.     }
  198.  
  199.     public boolean ifItAreColor(Crafting craftingRecipe, ItemStack itemListForCrafting, Map<Material, ItemStack> inventoryItems) {
  200.  
  201.         if (craftingRecipe.toString().equals("LIGHT_BLUE_DYE") && itemListForCrafting.getType().toString().equals("LIGHT_BLUE_DYE"))
  202.             for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
  203.                 for (ItemStack items : inventoryItems.values()) {
  204.  
  205.                     if (items.getType().toString().equals("BLUE_ORCHID"))
  206.                         if (recipe.equals(items.getType().toString())) {
  207.                             return true;
  208.                         }
  209.                 }
  210.             }
  211.         if (craftingRecipe.toString().equals("LIGHT_GRAY_DYE") && itemListForCrafting.getType().toString().equals("LIGHT_GRAY_DYE"))
  212.             for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
  213.                 for (ItemStack items : inventoryItems.values()) {
  214.  
  215.                     if (items.getType().toString().equals("WHITE_TULIP") || items.getType().toString().equals("OXEYE_DAISY") || items.getType().toString().equals("AZURE_BLUET"))
  216.                         if (recipe.equals(items.getType().toString())) {
  217.                             return true;
  218.                         }
  219.                 }
  220.             }
  221.         if (craftingRecipe.toString().equals("MAGENTA_DYE") && itemListForCrafting.getType().toString().equals("MAGENTA_DYE"))
  222.             for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
  223.                 for (ItemStack items : inventoryItems.values()) {
  224.  
  225.                     if (items.getType().toString().equals("ALLIUM"))
  226.                         if (recipe.equals(items.getType().toString())) {
  227.                             System.out.println("items " + items);
  228.                             return true;
  229.                         }
  230.                 }
  231.             }
  232.  
  233.         return false;
  234.     }
  235.  
  236.     public boolean checkIfItTallFlowers(Material itemUsecrafting) {
  237.         if (itemUsecrafting != null)
  238.             return itemUsecrafting == Material.PEONY || itemUsecrafting == Material.ROSE_BUSH;
  239.         return false;
  240.     }
  241.  
  242.     public boolean ifItAreColorMatchTwoItems(Crafting craftingRecipe, ItemStack itemListForCrafting, Map<Material, ItemStack> inventoryItems) {
  243.  
  244.         if (craftingRecipe.toString().equals("MAGENTA_DYE") && itemListForCrafting.getType().toString().equals("MAGENTA_DYE"))
  245.             for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
  246.                 for (ItemStack items : inventoryItems.values()) {
  247.  
  248.                     if (items.getType().toString().equals("PINK_DYE") || items.getType().toString().equals("PURPLE_DYE"))
  249.                         if (recipe.equals(items.getType().toString())) {
  250.                             System.out.println("items are " + items);
  251.                             return true;
  252.                         }
  253.                 }
  254.             }
  255.  
  256.         return false;
  257.     }
  258.  
  259.     public boolean isAColor(Material outputItem) {
  260.         switch (outputItem.toString()) {
  261.             case "BLACK_DYE":
  262.             case "CYAN_DYE":
  263.             case "LIGHT_BLUE_DYE":
  264.             case "LIGHT_GRAY_DYE":
  265.             case "MAGENTA_DYE":
  266.             case "ORANGE_DYE":
  267.             case "PINK_DYE":
  268.             case "RED_DYE":
  269.                 return true;
  270.             default:
  271.                 return false;
  272.         }
  273.     }
  274.  
  275.     public int addExtraIfSpecialcolor(Material itemToTake, Material outputItem) {
  276.         switch (outputItem.toString()) {
  277.             case "LIGHT_GRAY_DYE":
  278.                 if (itemToTake == Material.BLACK_DYE)
  279.                     return 1;
  280.             case "BLACK_DYE":
  281.             case "CYAN_DYE":
  282.             case "LIGHT_BLUE_DYE":
  283.             case "MAGENTA_DYE":
  284.                 if (itemToTake == Material.WHITE_DYE)
  285.                     return 1;
  286.             case "ORANGE_DYE":
  287.             case "PINK_DYE":
  288.             case "RED_DYE":
  289.             default:
  290.                 return 0;
  291.         }
  292.     }
  293.  
  294.     public boolean checkIfChestFull() {
  295.  
  296.         if (checkCraftingRecipeExist().isEmpty()) {
  297.             ifChestFull = !checkCraftingRecipeExist().isEmpty();
  298.         }
  299.  
  300.         return ifChestFull;
  301.     }
  302.  
  303.     public Map<Material, ItemStack> setItemstacksAmount(Map<Material, Integer> ingrediensMap, Crafting ingrediens) {
  304.         Map<Material, ItemStack> map = new HashMap<>();
  305.  
  306.         ItemStack recipeMatrial;
  307.         ItemStack recipeMatrialSecond;
  308.         ItemStack recipeMatrialThird;
  309.         ItemStack recipeMatrialFourth;
  310.         ItemStack recipeMatrialFifth;
  311.  
  312.         if (returnItemToRecipe(ingrediens.getMaterialName1(), ingrediensMap) != null)
  313.             if (ingrediens.getMaterialName1() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName1(), ingrediensMap)) {
  314.                 for (Map.Entry<Material, Integer> item : ingrediensMap.entrySet())
  315.                     if (isItemsMatch(ingrediens.getMaterialName1(), ItemUtily.createItemStack(item.getKey()))) {
  316.                         Material matrialNameFirst = item.getKey();
  317.                         int itemAmountSecond = ingrediensMap.get(matrialNameFirst);
  318.                         recipeMatrial = new ItemStack(matrialNameFirst, itemAmountSecond);
  319.                         map.put(matrialNameFirst, recipeMatrial);
  320.                     }
  321.             }
  322.         if (returnItemToRecipe(ingrediens.getMaterialName2(), ingrediensMap) != null)
  323.             if (ingrediens.getMaterialName2() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName2(), ingrediensMap)) {
  324.                 for (Map.Entry<Material, Integer> item : ingrediensMap.entrySet())
  325.                     if (isItemsMatch(ingrediens.getMaterialName2(), ItemUtily.createItemStack(item.getKey()))) {
  326.                         Material matrialNameSecond = item.getKey();
  327.                         int itemAmountSecond = ingrediensMap.get(matrialNameSecond);
  328.                         recipeMatrialSecond = new ItemStack(matrialNameSecond, itemAmountSecond);
  329.                         map.put(matrialNameSecond, recipeMatrialSecond);
  330.                     }
  331.  
  332.             }
  333.         if (returnItemToRecipe(ingrediens.getMaterialName3(), ingrediensMap) != null)
  334.             if (ingrediens.getMaterialName3() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName3(), ingrediensMap)) {
  335.                 Material matrialNameThird = Material.valueOf(returnItemToRecipe(ingrediens.getMaterialName3(), ingrediensMap));
  336.                 int itemAmountThird = ingrediensMap.get(matrialNameThird);
  337.                 recipeMatrialThird = new ItemStack(matrialNameThird, itemAmountThird);
  338.                 map.put(matrialNameThird, recipeMatrialThird);
  339.             }
  340.         if (returnItemToRecipe(ingrediens.getMaterialName4(), ingrediensMap) != null)
  341.             if (ingrediens.getMaterialName4() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName4(), ingrediensMap)) {
  342.                 Material matrialNameFourth = Material.valueOf(returnItemToRecipe(ingrediens.getMaterialName4(), ingrediensMap));
  343.                 int itemAmountFourth = ingrediensMap.get(matrialNameFourth);
  344.                 recipeMatrialFourth = new ItemStack(matrialNameFourth, itemAmountFourth);
  345.                 map.put(matrialNameFourth, recipeMatrialFourth);
  346.             }
  347.         if (returnItemToRecipe(ingrediens.getMaterialName5(), ingrediensMap) != null)
  348.             if (ingrediens.getMaterialName5() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName5(), ingrediensMap)) {
  349.                 Material matrialNameFifth = Material.valueOf(returnItemToRecipe(ingrediens.getMaterialName5(), ingrediensMap));
  350.                 int itemAmountFifth = ingrediensMap.get(matrialNameFifth);
  351.                 recipeMatrialFifth = new ItemStack(matrialNameFifth, itemAmountFifth);
  352.                 map.put(matrialNameFifth, recipeMatrialFifth);
  353.             }
  354.  
  355.         return map;
  356.     }
  357.  
  358.     public Map<Material, Integer> getItemsAmount(Crafting recipes, ItemStack listOfItems, Inventory inventory) {
  359.         Map<Material, Integer> map = new HashMap<>();
  360.         int amountFirst = 0;
  361.         int amountSecond = 0;
  362.         int amountThird = 0;
  363.         int amountFourt = 0;
  364.         int amountFifth = 0;
  365.  
  366.         for (ItemStack itemStacks : inventory) {
  367.             if (listOfItems.getType().toString().equals(recipes.toString()) && itemStacks != null) {
  368.                 if (isItemsMatch(recipes.getMaterialName1(), itemStacks)) {
  369.                     amountFirst += itemStacks.getAmount();
  370.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  371.                 } else if (isItemsMatch(recipes.getMaterialName2(), itemStacks)) {
  372.                     amountSecond += itemStacks.getAmount();
  373.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  374.                 } else if (isItemsMatch(recipes.getMaterialName3(), itemStacks)) {
  375.                     amountThird += itemStacks.getAmount();
  376.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  377.                 } else if (isItemsMatch(recipes.getMaterialName4(), itemStacks)) {
  378.                     amountFourt += itemStacks.getAmount();
  379.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  380.                 } else if (isItemsMatch(recipes.getMaterialName5(), itemStacks)) {
  381.                     amountFifth += itemStacks.getAmount();
  382.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  383.                 }
  384.             }
  385.         }
  386.         return map;
  387.     }
  388.  
  389.     public void removeItems(Inventory inventory, String matrialName) {
  390.         for (int i = 0; i < inventory.getSize(); i++) {
  391.             ItemStack itemStacks = inventory.getContents()[i];
  392.             if (itemStacks != null && itemStacks.isSimilar(ItemUtily.createItemStack(matrialName))) {
  393.                 inventory.setItem(i, new ItemStack(Material.AIR));
  394.             }
  395.  
  396.         }
  397.     }
  398.  
  399.     public void takeItemsRecipeIngrediens(Inventory inventory, Crafting recipes, Map<Material, ItemStack> itemStacks, Material itemToTake) {
  400.         Set<ItemStack> ifItHasRemovedSameItem = new HashSet<>();
  401.         for (Map.Entry<Material, ItemStack> item : itemStacks.entrySet()) {
  402.             ItemStack itemStack = item.getValue();
  403.  
  404.             if (itemStack != null && isItemsMatch(recipes.getMaterialName1(), itemStack)) {
  405.                 if (itemStack.getAmount() >= recipes.getAmontNeededCrafting2() && !ifItHasRemovedSameItem.isEmpty()) {
  406.                     if (ifItHasRemovedSameItem.size() == ItemUtily.countItemStacks(inventory, itemStack))
  407.                         ifItHasRemovedSameItem.clear();
  408.                     System.out.println("test ");
  409.                     ifItHasRemovedSameItem.add(itemStack);
  410.                     continue;
  411.                 }
  412.                 removeItems(inventory, itemStack.getType().toString());
  413.                 itemStack.setAmount(checkAdvanceColorRecipes(recipes.toString(), itemToTake) ? itemStack.getAmount() - (recipes.getAmontNeededCrafting1() + 1) : itemStack.getAmount() - recipes.getAmontNeededCrafting1());
  414.                 inventory.addItem(itemStack);
  415.                 ifItHasRemovedSameItem.add(itemStack);
  416.             } else if (itemStack != null && isItemsMatch(recipes.getMaterialName2(), itemStack)) {
  417.                 if (checkAdvanceColorRecipes(recipes.toString(), itemToTake) && itemStack.getType() == Material.PINK_DYE)
  418.                     continue;
  419.                 if (!checkAdvanceColorRecipes(recipes.toString(), itemToTake) && itemStack.getType() == Material.WHITE_DYE)
  420.                     continue;
  421.                 removeItems(inventory, itemStack.getType().toString());
  422.                 itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting2());
  423.                 inventory.addItem(itemStack);
  424.  
  425.             } else if (itemStack != null && isItemsMatch(recipes.getMaterialName3(), itemStack)) {
  426.                 removeItems(inventory, itemStack.getType().toString());
  427.                 itemStack.setAmount(checkAdvanceColorRecipes(recipes.toString(), itemToTake) ? itemStack.getAmount() - (recipes.getAmontNeededCrafting3() + 1) : itemStack.getAmount() - recipes.getAmontNeededCrafting3());
  428.                 inventory.addItem(itemStack);
  429.  
  430.             } else if (itemStack != null && isItemsMatch(recipes.getMaterialName4(), itemStack)) {
  431.                 removeItems(inventory, itemStack.getType().toString());
  432.                 itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting4());
  433.                 inventory.addItem(itemStack);
  434.  
  435.             } else if (itemStack != null && isItemsMatch(recipes.getMaterialName5(), itemStack)) {
  436.                 removeItems(inventory, itemStack.getType().toString());
  437.                 itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting5());
  438.                 inventory.addItem(itemStack);
  439.  
  440.             }
  441.         }
  442.     }
  443.  
  444.     private boolean checkAdvanceColorRecipes(String recipeOutput, Material itemUsedInrecipe) {
  445.         if (itemUsedInrecipe != null)
  446.             if (recipeOutput.equals("LIGHT_GRAY_DYE") && itemUsedInrecipe.toString().equals("BLACK_DYE"))
  447.                 return true;
  448.             else if (recipeOutput.equals("MAGENTA_DYE") && (itemUsedInrecipe.toString().equals("WHITE_DYE") || itemUsedInrecipe.toString().equals("BONE_MEAL")))
  449.                 return true;
  450.  
  451.         return false;
  452.     }
  453.  
  454.     public boolean isItemsMatch(String ingridients, ItemStack itemYoucraft) {
  455.  
  456.         if (ingridients != null && itemYoucraft != null && ingridients.contains(","))
  457.             for (String recipe : ingridients.split(",")) {
  458.                 if (recipe.equals(itemYoucraft.getType().toString())) {
  459.                     return true;
  460.                 }
  461.             }
  462.         else if (ingridients != null && itemYoucraft != null && !ingridients.contains(",")) {
  463.             return ingridients.equals(itemYoucraft.getType().toString());
  464.         }
  465.         return false;
  466.     }
  467.  
  468.     public String returnItemToRecipe(String ingrediens, Map<Material, Integer> map) {
  469.  
  470.         for (Map.Entry<Material, Integer> itemStack : map.entrySet())
  471.             if (ingrediens != null && itemStack != null && ingrediens.contains(","))
  472.                 for (String recipe : ingrediens.split(",")) {
  473.  
  474.                     if (recipe.equals(itemStack.getKey().toString())) {
  475.                         return itemStack.getKey().toString();
  476.                     }
  477.  
  478.                 }
  479.             else if (ingrediens != null && !ingrediens.contains(","))
  480.                 return ingrediens;
  481.         return null;
  482.     }
  483.  
  484.     public boolean isMapContainsRecipeIngrediens(String ingrediens, Map<Material, Integer> map) {
  485.  
  486.         for (Map.Entry<Material, Integer> itemStack : map.entrySet()) {
  487.             if (ingrediens != null && itemStack != null && ingrediens.contains(","))
  488.                 for (String recipe : ingrediens.split(",")) {
  489.  
  490.                     if (recipe.equals(itemStack.getKey().toString())) {
  491.                         return true;
  492.                     }
  493.  
  494.                 }
  495.             else if (ingrediens != null && itemStack != null && !ingrediens.contains(",") && ingrediens.equals(itemStack.getKey().toString()))
  496.                 return true;
  497.         }
  498.         return false;
  499.     }
  500.  
  501.     public String splitIngrediens(String input, String ingrediensSplit) {
  502.  
  503.         if (input != null && ingrediensSplit != null && ingrediensSplit.contains(","))
  504.             for (String ingredien : ingrediensSplit.split(","))
  505.                 if (ingredien.equals(input)) {
  506.                     return ingredien;
  507.                 }
  508.  
  509.         if (ingrediensSplit != null && !ingrediensSplit.contains(","))
  510.             return ingrediensSplit;
  511.  
  512.         return "";
  513.     }
  514.  
  515.     public boolean checkAmountForRecipeFirst(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
  516.         int itemAmount = 0;
  517.         boolean matchedItem = false;
  518.         if (itemUsedToCrafting != null)
  519.             for (String items : itemUsedToCrafting)
  520.                 if (items != null && items.equals("BLACK_DYE")) {
  521.                     matchedItem = true;
  522.                     break;
  523.                 }
  524.  
  525.         if (ingridents != null && amountNeeded != null)
  526.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  527.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName1()))) {
  528.                     itemAmount += item.getValue().getAmount();
  529.                     if (itemAmount >= ((amountNeeded.equals("LIGHT_GRAY_DYE") && matchedItem) ?
  530.                             Crafting.valueOf(amountNeeded).getAmontNeededCrafting1() + 1 : Crafting.valueOf(amountNeeded).getAmontNeededCrafting1())) {
  531.                         return true;
  532.                     }
  533.                 }
  534.             }
  535.         return false;
  536.     }
  537.  
  538.     public boolean checkAmountForRecipeSecond(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
  539.         int itemSecondAmount = 0;
  540.         boolean matchedItem = false;
  541.         if (itemUsedToCrafting != null)
  542.             for (String items : itemUsedToCrafting)
  543.                 if (items != null && items.equals("MAGENTA_DYE")) {
  544.                     matchedItem = true;
  545.                     break;
  546.                 }
  547.  
  548.         if (ingridents != null && amountNeeded != null)
  549.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  550.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName2()))) {
  551.                     itemSecondAmount += item.getValue().getAmount();
  552.                     if (itemSecondAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting2())
  553.                         return true;
  554.  
  555.                 }
  556.  
  557.             }
  558.  
  559.         return false;
  560.     }
  561.  
  562.     public boolean checkAmountForRecipeThird(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
  563.         int itemAmount = 0;
  564.  
  565.         boolean matchedItem = false;
  566.         if (itemUsedToCrafting != null)
  567.             for (String items : itemUsedToCrafting)
  568.  
  569.                 if (items != null && (items.equals("WHITE_DYE") || items.equals("BONE_MEAL"))) {
  570.                     matchedItem = true;
  571.                     break;
  572.                 }
  573.  
  574.         if (ingridents != null && amountNeeded != null)
  575.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  576.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName3()))) {
  577.                     itemAmount += item.getValue().getAmount();
  578.                     if (itemAmount >= ((amountNeeded.equals("MAGENTA_DYE") && matchedItem) ?
  579.                             Crafting.valueOf(amountNeeded).getAmontNeededCrafting1() + 1 : Crafting.valueOf(amountNeeded).getAmontNeededCrafting3()))
  580.                         return true;
  581.                 }
  582.             }
  583.         return false;
  584.     }
  585.  
  586.     public boolean checkAmountForRecipeFourth(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
  587.         int itemAmount = 0;
  588.  
  589.         boolean matchedItem = false;
  590.         if (itemUsedToCrafting != null)
  591.             for (String items : itemUsedToCrafting)
  592.  
  593.                 if (items != null && (items.equals("WHITE_DYE") || items.equals("BONE_MEAL"))) {
  594.                     matchedItem = true;
  595.                     break;
  596.                 }
  597.  
  598.         if (ingridents != null && amountNeeded != null)
  599.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  600.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName4()))) {
  601.                     itemAmount += item.getValue().getAmount();
  602.                     if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting4())
  603.                         return true;
  604.                 }
  605.             }
  606.         return false;
  607.     }
  608.  
  609.     public boolean checkAmountForRecipeFifth(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
  610.         int itemAmount = 0;
  611.  
  612.         boolean matchedItem = false;
  613.         if (itemUsedToCrafting != null)
  614.             for (String items : itemUsedToCrafting)
  615.                 if (items != null && (items.equals("WHITE_DYE") || items.equals("BONE_MEAL"))) {
  616.                     matchedItem = true;
  617.                     break;
  618.                 }
  619.  
  620.         if (ingridents != null && amountNeeded != null)
  621.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  622.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName5()))) {
  623.                     itemAmount += item.getValue().getAmount();
  624.                     if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting5())
  625.                         return true;
  626.                 }
  627.             }
  628.         return false;
  629.     }
  630.  
  631.     public Map<ItemStack, ItemStack> getCraftedItems(Location location) {
  632.         return craftedItems.get(location);
  633.     }
  634.  
  635.     public Map<Location, Map<ItemStack, ItemStack>> getCraftedItems() {
  636.         return craftedItems;
  637.     }
  638.  
  639.     public void removeCraftedItems(Location location) {
  640.         craftedItems.remove(location);
  641.     }
  642. }
  643.  
Add Comment
Please, Sign In to add comment