broken-arrow

Untitled

Aug 29th, 2021 (edited)
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.56 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.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12.  
  13. public class CraftingUtility {
  14.  
  15.     private static final Map<ItemStack, ItemStack> craftedItems = new HashMap<>();
  16.     private Inventory inventory;
  17.     private Location location;
  18.     private List<ItemStack> listOfItems;
  19.     private boolean ifChestFull = false;
  20.  
  21.     public CraftingUtility(Inventory inventory, Location location, List<ItemStack> listOfItemsToCraft) {
  22.         this.inventory = inventory;
  23.         this.location = location;
  24.         this.listOfItems = listOfItemsToCraft;
  25.     }
  26.  
  27.     public HashMap<Integer, ItemStack> checkCraftingRecipeExist() {
  28.         HashMap<Integer, ItemStack> outputItemsIfNoSpaceInChest = new HashMap<>();
  29.         int itemAmont = 0;
  30.         for (Crafting craftingRecipe : Crafting.values()) {
  31.             String recipeValues = craftingRecipe.toString();
  32.  
  33.             String matrialNameFirst = Crafting.valueOf(recipeValues).getmatrialName();
  34.             String matrialNameSecond = Crafting.valueOf(recipeValues).getmatrialNames1();
  35.             String matrialNameThird = Crafting.valueOf(recipeValues).getmatrialNames2();
  36.  
  37.  
  38.             for (ItemStack itemListForCrafting : listOfItems) {
  39.  
  40.                 Map<Material, Integer> amountOfItemsInventory = getItemsAmount(craftingRecipe, itemListForCrafting, inventory);
  41.  
  42.                 if (!amountOfItemsInventory.isEmpty()) {
  43.  
  44.                     Map<Material, ItemStack> itemStacks = setItemstacksAmount(amountOfItemsInventory, craftingRecipe);
  45.  
  46.                     if (matrialNameFirst != null && matrialNameSecond == null && matrialNameThird == null) {
  47.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  48.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues)) {
  49.  
  50.                             Material matrial = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  51.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  52.  
  53.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, (Crafting.valueOf(recipeValues).getNumberOutput())));
  54.  
  55.  
  56.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  57.                                 if (craftedItems.containsKey(ItemUtily.createItemStackAsOne(getmatrialName)))
  58.                                     itemAmont = craftedItems.get(ItemUtily.createItemStackAsOne(getmatrialName)).getAmount();
  59.                                 craftedItems.put(ItemUtily.createItemStackAsOne(getmatrialName), ItemUtily.createItemStackWhitAmount(getmatrialName, (Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
  60.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
  61.                                 //inventory.remove(matrial);
  62.                             }
  63.                             //inventory.remove(matrial);
  64.                         }
  65.                     } else if (matrialNameFirst != null && matrialNameSecond != null && matrialNameThird == null) {
  66.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  67.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues) &&
  68.                                 checkAmountForRecipeSecond(itemStacks, recipeValues)) {
  69.                             Material matrial = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
  70.  
  71.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  72.  
  73.                             outputItemsIfNoSpaceInChest = inventory.addItem(ItemUtily.createItemStackWhitAmount(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput()));
  74.  
  75.  
  76.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  77.                                 if (craftedItems.containsKey(ItemUtily.createItemStackAsOne(getmatrialName)))
  78.                                     itemAmont = craftedItems.get(ItemUtily.createItemStackAsOne(getmatrialName)).getAmount();
  79.                                 craftedItems.put(ItemUtily.createItemStackAsOne(getmatrialName), ItemUtily.createItemStackWhitAmount(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont)));
  80.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
  81.                             }
  82.  
  83.  
  84.                         }
  85.  
  86.                     } else if (matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null) {
  87.  
  88.                         if (isItemsMatch(recipeValues, itemListForCrafting) &&
  89.                                 !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues) &&
  90.                                 checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues)) {
  91.  
  92.                             Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
  93.  
  94.                             outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput()));
  95.  
  96.                             if (outputItemsIfNoSpaceInChest.isEmpty()) {
  97.                                 if (craftedItems.containsKey(ItemUtily.createItemStackAsOne(getmatrialName)))
  98.                                     itemAmont = craftedItems.get(ItemUtily.createItemStackAsOne(getmatrialName)).getAmount();
  99.                                 craftedItems.put(ItemUtily.createItemStackAsOne(getmatrialName), ItemUtily.createItemStackWhitAmount(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont)));
  100.                                 takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
  101.                             }
  102.  
  103.                         /*  if (!outputItemsIfNoSpaceInChest.isEmpty()) {
  104.                                 inventory.addItem(new ItemStack(itemStacks.get(itemListForCrafting.getType()).getType(), itemAmountNeededFirst));
  105.                                 inventory.addItem(new ItemStack(itemStacks.get(itemListForCrafting.getType()).getType(), itemAmountNeededSecond));
  106.                                 inventory.addItem(new ItemStack(itemStacks.get(itemListForCrafting.getType()).getType(), itemAmountNeededThird));
  107.                             }*/
  108.                         }
  109.                     }
  110.                 }
  111.             }
  112.         }
  113.         return outputItemsIfNoSpaceInChest;
  114.     }
  115.  
  116.  
  117.     public boolean checkIfChestFull() {
  118.  
  119.         if (checkCraftingRecipeExist().isEmpty()) {
  120.             ifChestFull = !checkCraftingRecipeExist().isEmpty();
  121.         }
  122.  
  123.         return ifChestFull;
  124.     }
  125.  
  126.     public Map<Material, ItemStack> setItemstacksAmount(Map<Material, Integer> ingrediensMap, Crafting ingrediens) {
  127.         Map<Material, ItemStack> map = new HashMap<>();
  128.  
  129.         ItemStack recipeMatrial;
  130.         ItemStack recipeMatrialSecond;
  131.         ItemStack recipeMatrialThird;
  132.         //System.out.println("Test " + ingrediens.getmatrialNames2());
  133.  
  134.         if (returnItemToRecipe(ingrediens.getmatrialName(), ingrediensMap) != null)
  135.             if (ingrediens.getmatrialName() != null && isMapContainsRecipeIngrediens(ingrediens.getmatrialName(), ingrediensMap)) {
  136.                 Material matrialNameFirst = Material.valueOf(returnItemToRecipe(ingrediens.getmatrialName(), ingrediensMap));
  137.                 int itemAmount = ingrediensMap.get(matrialNameFirst);
  138.                 recipeMatrial = new ItemStack(matrialNameFirst, itemAmount);
  139.                 map.put(matrialNameFirst, recipeMatrial);
  140.             }
  141.         if (returnItemToRecipe(ingrediens.getmatrialNames1(), ingrediensMap) != null)
  142.             if (ingrediens.getmatrialNames1() != null && isMapContainsRecipeIngrediens(ingrediens.getmatrialNames1(), ingrediensMap)) {
  143.                 for (Map.Entry<Material, Integer> item : ingrediensMap.entrySet())
  144.                     if (isItemsMatch(ingrediens.getmatrialNames1(), ItemUtily.createItemStack(item.getKey()))) {
  145.                         Material matrialNameSecond = item.getKey();
  146.                         int itemAmountSecond = ingrediensMap.get(matrialNameSecond);
  147.                         recipeMatrialSecond = new ItemStack(matrialNameSecond, itemAmountSecond);
  148.                         map.put(matrialNameSecond, recipeMatrialSecond);
  149.                     }
  150.  
  151.             }
  152.         if (returnItemToRecipe(ingrediens.getmatrialNames2(), ingrediensMap) != null)
  153.             if (ingrediens.getmatrialNames2() != null && isMapContainsRecipeIngrediens(ingrediens.getmatrialNames2(), ingrediensMap)) {
  154.                 Material matrialNameThird = Material.valueOf(returnItemToRecipe(ingrediens.getmatrialNames2(), ingrediensMap));
  155.                 int itemAmountThird = ingrediensMap.get(matrialNameThird);
  156.                 recipeMatrialThird = new ItemStack(matrialNameThird, itemAmountThird);
  157.                 map.put(matrialNameThird, recipeMatrialThird);
  158.             }
  159.  
  160.         return map;
  161.     }
  162.  
  163.     public Map<Material, Integer> getItemsAmount(Crafting recipes, ItemStack listOfItems, Inventory inventory) {
  164.         Map<Material, Integer> map = new HashMap<>();
  165.         int amountFirst = 0;
  166.         int amountSecond = 0;
  167.         int amountThird = 0;
  168.  
  169.         for (ItemStack itemStacks : inventory) {
  170.             if (listOfItems.getType().toString().equals(recipes.toString()) && itemStacks != null) {
  171.                 if (isItemsMatch(recipes.getmatrialName(), itemStacks)) {
  172.                     amountFirst += itemStacks.getAmount();
  173.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  174.                 } else if (isItemsMatch(recipes.getmatrialNames1(), itemStacks)) {
  175.                     amountSecond += itemStacks.getAmount();
  176.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  177.                 } else if (isItemsMatch(recipes.getmatrialNames2(), itemStacks)) {
  178.                     amountThird += itemStacks.getAmount();
  179.                     map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
  180.                 }
  181.             }
  182.         }
  183.         return map;
  184.     }
  185.  
  186.     public void removeItems(Inventory inventory, String matrialName) {
  187.         for (int i = 0; i < inventory.getSize(); i++) {
  188.             ItemStack itemStacks = inventory.getContents()[i];
  189.             if (itemStacks != null && itemStacks.isSimilar(ItemUtily.createItemStack(matrialName))) {
  190.                 inventory.setItem(i, new ItemStack(Material.AIR));
  191.             }
  192.  
  193.         }
  194.     }
  195.  
  196.     public void takeItemsRecipeIngrediens(Inventory inventory, Crafting recipes, Map<Material, ItemStack> itemStacks) {
  197.         for (Map.Entry<Material, ItemStack> item : itemStacks.entrySet()) {
  198.             ItemStack itemStack = item.getValue();
  199.             if (itemStack != null && isItemsMatch(recipes.getmatrialName(), itemStack)) {
  200.                 removeItems(inventory, itemStack.getType().toString());
  201.                 System.out.println("recipes.getAmontNeededCrafting()" + recipes.getAmontNeededCrafting() + "recipes.getmatrialName()" + recipes.name());
  202.                 itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting());
  203.                 inventory.addItem(itemStack);
  204.             } else if (itemStack != null && isItemsMatch(recipes.getmatrialNames1(), itemStack)) {
  205.                 removeItems(inventory, itemStack.getType().toString());
  206.                 itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting1());
  207.                 inventory.addItem(itemStack);
  208.             } else if (itemStack != null && isItemsMatch(recipes.getmatrialNames2(), itemStack)) {
  209.                 removeItems(inventory, itemStack.getType().toString());
  210.                 itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting2());
  211.                 inventory.addItem(itemStack);
  212.  
  213.             }
  214.         }
  215.     }
  216.  
  217.     public boolean isItemsMatch(String ingridients, ItemStack itemYoucraft) {
  218.  
  219.         if (ingridients != null && itemYoucraft != null && ingridients.contains(","))
  220.             for (String recipe : ingridients.split(",")) {
  221.                 if (recipe.equals(itemYoucraft.getType().toString())) {
  222.                     return true;
  223.                 }
  224.             }
  225.         else if (ingridients != null && itemYoucraft != null && !ingridients.contains(",")) {
  226.             return ingridients.equals(itemYoucraft.getType().toString());
  227.         }
  228.         return false;
  229.     }
  230.  
  231.     public String returnItemToRecipe(String ingrediens, Map<Material, Integer> map) {
  232.  
  233.         for (Map.Entry<Material, Integer> itemStack : map.entrySet())
  234.             if (ingrediens != null && itemStack != null && ingrediens.contains(","))
  235.                 for (String recipe : ingrediens.split(",")) {
  236.  
  237.                     if (recipe.equals(itemStack.getKey().toString())) {
  238.                         return itemStack.getKey().toString();
  239.                     }
  240.  
  241.                 }
  242.             else if (ingrediens != null && !ingrediens.contains(","))
  243.                 return ingrediens;
  244.         return null;
  245.     }
  246.  
  247.     public boolean isMapContainsRecipeIngrediens(String ingrediens, Map<Material, Integer> map) {
  248.  
  249.         for (Map.Entry<Material, Integer> itemStack : map.entrySet()) {
  250.             if (ingrediens != null && itemStack != null && ingrediens.contains(","))
  251.                 for (String recipe : ingrediens.split(",")) {
  252.  
  253.                     if (recipe.equals(itemStack.getKey().toString())) {
  254.                         return true;
  255.                     }
  256.  
  257.                 }
  258.             else if (ingrediens != null && itemStack != null && !ingrediens.contains(",") && ingrediens.equals(itemStack.getKey().toString()))
  259.                 return true;
  260.         }
  261.         return false;
  262.     }
  263.  
  264.     public String splitIngrediens(String input, String ingrediensSplit) {
  265.  
  266.         if (ingrediensSplit != null && ingrediensSplit.contains(","))
  267.             for (String ingredien : ingrediensSplit.split(","))
  268.                 if (ingredien.equals(input)) {
  269.                     return ingredien;
  270.                 }
  271.  
  272.         if (ingrediensSplit != null && !ingrediensSplit.contains(","))
  273.             return ingrediensSplit;
  274.  
  275.         return null;
  276.     }
  277.  
  278.     public boolean checkAmountForRecipeFirst(Map<Material, ItemStack> ingridents, String amountNeeded) {
  279.         int itemAmount = 0;
  280.  
  281.         if (ingridents != null && amountNeeded != null)
  282.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  283.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getmatrialName()))) {
  284.                     itemAmount += item.getValue().getAmount();
  285.                     if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting()) {
  286.                         return true;
  287.                     }
  288.                 }
  289.             }
  290.         return false;
  291.     }
  292.  
  293.     public boolean checkAmountForRecipeSecond(Map<Material, ItemStack> ingridents, String amountNeeded) {
  294.  
  295.         int itemSecondAmount = 0;
  296.  
  297.         if (ingridents != null && amountNeeded != null)
  298.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  299.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getmatrialNames1()))) {
  300.                     itemSecondAmount += item.getValue().getAmount();
  301.                     if (itemSecondAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting1())
  302.                         return true;
  303.                 }
  304.             }
  305.  
  306.         /*System.out.println("getAmontNeededCrafting() " + Crafting.valueOf(amountNeeded).getAmontNeededCrafting());
  307.         System.out.println("getAmontNeededCrafting second " + Crafting.valueOf(amountNeeded).getAmontNeededCrafting1());
  308.         System.out.println("getAmontNeededCrafting threed " + Crafting.valueOf(amountNeeded).getAmontNeededCrafting2());*/
  309.  
  310.         return false;
  311.     }
  312.  
  313.     public boolean checkAmountForRecipeThird(Map<Material, ItemStack> ingridents, String amountNeeded) {
  314.         int itemAmount = 0;
  315.  
  316.         if (ingridents != null && amountNeeded != null)
  317.             for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
  318.                 if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getmatrialNames2()))) {
  319.                     itemAmount += item.getValue().getAmount();
  320.                     if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting2())
  321.                         return true;
  322.                 }
  323.             }
  324.         return false;
  325.     }
  326.  
  327.     public ItemStack getCraftedItems(ItemStack itemStack) {
  328.         return craftedItems.get(itemStack);
  329.     }
  330.  
  331.     public Map<ItemStack, ItemStack> getCraftedItems() {
  332.         return craftedItems;
  333.     }
  334.  
  335.     public void removeCraftedItems(ItemStack itemStack) {
  336.         craftedItems.remove(itemStack);
  337.     }
  338. }
  339.  
Add Comment
Please, Sign In to add comment