Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import org.broken.cheststorage.util.ItemUtily;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import java.util.*;
- public class CraftingUtility {
- private static final Map<Location, Map<ItemStack, ItemStack>> craftedItems = new HashMap<>();
- private final HashMap<ItemStack, ItemStack> itemStacksList = new HashMap<>();
- private Inventory inventory;
- private Location location;
- private List<ItemStack> listOfItems;
- private boolean ifChestFull = false;
- public CraftingUtility(Inventory inventory, Location location, List<ItemStack> listOfItemsToCraft) {
- this.inventory = inventory;
- this.location = location;
- this.listOfItems = listOfItemsToCraft;
- }
- public HashMap<Integer, ItemStack> checkCraftingRecipeExist() {
- HashMap<Integer, ItemStack> outputItemsIfNoSpaceInChest = new HashMap<>();
- int itemAmont = 0;
- for (Crafting craftingRecipe : Crafting.values()) {
- String recipeValues = craftingRecipe.toString();
- String matrialNameFirst = Crafting.valueOf(recipeValues).getMaterialName1();
- String matrialNameSecond = Crafting.valueOf(recipeValues).getMaterialName2();
- String matrialNameThird = Crafting.valueOf(recipeValues).getMaterialName3();
- String matrialNameFourth = Crafting.valueOf(recipeValues).getMaterialName4();
- String matrialNameFifth = Crafting.valueOf(recipeValues).getMaterialName5();
- for (ItemStack itemListForCrafting : listOfItems) {
- Map<Material, Integer> amountOfItemsInventory = getItemsAmount(craftingRecipe, itemListForCrafting, this.inventory);
- if (!amountOfItemsInventory.isEmpty()) {
- Map<Material, ItemStack> itemStacks = setItemstacksAmount(amountOfItemsInventory, craftingRecipe);
- if (ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) || (matrialNameFirst != null && matrialNameSecond == null && matrialNameThird == null && matrialNameFourth == null && matrialNameFifth == null)) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory))) {
- Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, checkIfItTallFlowers(material) ? Crafting.valueOf(recipeValues).getNumberOutput() + 1 : Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
- itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
- ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
- items.clone().setAmount(itemAmont);
- this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
- }
- 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))));
- craftedItems.put(this.location, this.itemStacksList);
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, material);
- }
- }
- } else if (ifItAreColorMatchTwoItems(craftingRecipe, itemListForCrafting, itemStacks) || (!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird == null && matrialNameFourth == null && matrialNameFifth == null)) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameSecond, amountOfItemsInventory)) &&
- checkAmountForRecipeSecond(itemStacks, recipeValues)) {
- Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
- Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(ItemUtily.createItemStackWhitAmount(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() * 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
- itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
- ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
- //items.clone().setAmount(Math.min(items.getMaxStackSize(), items.getAmount() + (isAColor(recipeNameOutput) ? (itemAmont * 2) : itemAmont)));
- this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
- }
- 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))));
- craftedItems.put(this.location, this.itemStacksList);
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, materialSecond);
- }
- }
- } else if ((!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null && matrialNameFourth == null && matrialNameFifth == null)) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory)) &&
- checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues, returnItemToRecipe(matrialNameSecond, amountOfItemsInventory))) {
- Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
- Material matrialThird = Material.valueOf(returnItemToRecipe(matrialNameThird, amountOfItemsInventory));
- Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
- itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
- ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
- items.clone().setAmount(itemAmont);
- this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
- }
- 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))));
- craftedItems.put(this.location, this.itemStacksList);
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, materialSecond);
- }
- }
- } else if ((!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null && matrialNameFourth != null && matrialNameFifth == null)) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory)) &&
- checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues) &&
- checkAmountForRecipeFourth(itemStacks, recipeValues)) {
- Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
- Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
- itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
- ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
- items.clone().setAmount(itemAmont);
- this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
- }
- 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))));
- craftedItems.put(this.location, this.itemStacksList);
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, null);
- }
- }
- } else if ((!ifItAreColor(craftingRecipe, itemListForCrafting, itemStacks) && matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null && matrialNameFourth != null && matrialNameFifth != null)) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues, returnItemToRecipe(matrialNameFirst, amountOfItemsInventory)) &&
- checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues) &&
- checkAmountForRecipeFourth(itemStacks, recipeValues) && checkAmountForRecipeFifth(itemStacks, recipeValues)) {
- Material material = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material materialSecond = Material.valueOf(returnItemToRecipe(matrialNameSecond, amountOfItemsInventory));
- Material recipeNameOutput = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(recipeNameOutput, isAColor(recipeNameOutput) ? (Crafting.valueOf(recipeValues).getNumberOutput() + 2) + addExtraIfSpecialcolor(materialSecond, recipeNameOutput) : Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(this.location) && craftedItems.get(this.location).containsKey(ItemUtily.createItemStackAsOne(new ItemStack(material)))) {
- itemAmont = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material))).getAmount();
- ItemStack items = craftedItems.get(this.location).get(ItemUtily.createItemStackAsOne(new ItemStack(material)));
- items.clone().setAmount(itemAmont);
- this.itemStacksList.put(ItemUtily.createItemStackAsOne(new ItemStack(material)), items);
- }
- 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))));
- craftedItems.put(this.location, this.itemStacksList);
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks, null);
- }
- }
- }
- }
- }
- }
- return outputItemsIfNoSpaceInChest;
- }
- public boolean ifItAreColor(Crafting craftingRecipe, ItemStack itemListForCrafting, Map<Material, ItemStack> inventoryItems) {
- if (craftingRecipe.toString().equals("LIGHT_BLUE_DYE") && itemListForCrafting.getType().toString().equals("LIGHT_BLUE_DYE"))
- for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
- for (ItemStack items : inventoryItems.values()) {
- if (items.getType().toString().equals("BLUE_ORCHID"))
- if (recipe.equals(items.getType().toString())) {
- return true;
- }
- }
- }
- if (craftingRecipe.toString().equals("LIGHT_GRAY_DYE") && itemListForCrafting.getType().toString().equals("LIGHT_GRAY_DYE"))
- for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
- for (ItemStack items : inventoryItems.values()) {
- if (items.getType().toString().equals("WHITE_TULIP") || items.getType().toString().equals("OXEYE_DAISY") || items.getType().toString().equals("AZURE_BLUET"))
- if (recipe.equals(items.getType().toString())) {
- return true;
- }
- }
- }
- if (craftingRecipe.toString().equals("MAGENTA_DYE") && itemListForCrafting.getType().toString().equals("MAGENTA_DYE"))
- for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
- for (ItemStack items : inventoryItems.values()) {
- if (items.getType().toString().equals("ALLIUM"))
- if (recipe.equals(items.getType().toString())) {
- System.out.println("items " + items);
- return true;
- }
- }
- }
- return false;
- }
- public boolean checkIfItTallFlowers(Material itemUsecrafting) {
- if (itemUsecrafting != null)
- return itemUsecrafting == Material.PEONY || itemUsecrafting == Material.ROSE_BUSH;
- return false;
- }
- public boolean ifItAreColorMatchTwoItems(Crafting craftingRecipe, ItemStack itemListForCrafting, Map<Material, ItemStack> inventoryItems) {
- if (craftingRecipe.toString().equals("MAGENTA_DYE") && itemListForCrafting.getType().toString().equals("MAGENTA_DYE"))
- for (String recipe : craftingRecipe.getMaterialName1().split(",")) {
- for (ItemStack items : inventoryItems.values()) {
- if (items.getType().toString().equals("PINK_DYE") || items.getType().toString().equals("PURPLE_DYE"))
- if (recipe.equals(items.getType().toString())) {
- System.out.println("items are " + items);
- return true;
- }
- }
- }
- return false;
- }
- public boolean isAColor(Material outputItem) {
- switch (outputItem.toString()) {
- case "BLACK_DYE":
- case "CYAN_DYE":
- case "LIGHT_BLUE_DYE":
- case "LIGHT_GRAY_DYE":
- case "MAGENTA_DYE":
- case "ORANGE_DYE":
- case "PINK_DYE":
- case "RED_DYE":
- return true;
- default:
- return false;
- }
- }
- public int addExtraIfSpecialcolor(Material itemToTake, Material outputItem) {
- switch (outputItem.toString()) {
- case "LIGHT_GRAY_DYE":
- if (itemToTake == Material.BLACK_DYE)
- return 1;
- case "BLACK_DYE":
- case "CYAN_DYE":
- case "LIGHT_BLUE_DYE":
- case "MAGENTA_DYE":
- if (itemToTake == Material.WHITE_DYE)
- return 1;
- case "ORANGE_DYE":
- case "PINK_DYE":
- case "RED_DYE":
- default:
- return 0;
- }
- }
- public boolean checkIfChestFull() {
- if (checkCraftingRecipeExist().isEmpty()) {
- ifChestFull = !checkCraftingRecipeExist().isEmpty();
- }
- return ifChestFull;
- }
- public Map<Material, ItemStack> setItemstacksAmount(Map<Material, Integer> ingrediensMap, Crafting ingrediens) {
- Map<Material, ItemStack> map = new HashMap<>();
- ItemStack recipeMatrial;
- ItemStack recipeMatrialSecond;
- ItemStack recipeMatrialThird;
- ItemStack recipeMatrialFourth;
- ItemStack recipeMatrialFifth;
- if (returnItemToRecipe(ingrediens.getMaterialName1(), ingrediensMap) != null)
- if (ingrediens.getMaterialName1() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName1(), ingrediensMap)) {
- for (Map.Entry<Material, Integer> item : ingrediensMap.entrySet())
- if (isItemsMatch(ingrediens.getMaterialName1(), ItemUtily.createItemStack(item.getKey()))) {
- Material matrialNameFirst = item.getKey();
- int itemAmountSecond = ingrediensMap.get(matrialNameFirst);
- recipeMatrial = new ItemStack(matrialNameFirst, itemAmountSecond);
- map.put(matrialNameFirst, recipeMatrial);
- }
- }
- if (returnItemToRecipe(ingrediens.getMaterialName2(), ingrediensMap) != null)
- if (ingrediens.getMaterialName2() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName2(), ingrediensMap)) {
- for (Map.Entry<Material, Integer> item : ingrediensMap.entrySet())
- if (isItemsMatch(ingrediens.getMaterialName2(), ItemUtily.createItemStack(item.getKey()))) {
- Material matrialNameSecond = item.getKey();
- int itemAmountSecond = ingrediensMap.get(matrialNameSecond);
- recipeMatrialSecond = new ItemStack(matrialNameSecond, itemAmountSecond);
- map.put(matrialNameSecond, recipeMatrialSecond);
- }
- }
- if (returnItemToRecipe(ingrediens.getMaterialName3(), ingrediensMap) != null)
- if (ingrediens.getMaterialName3() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName3(), ingrediensMap)) {
- Material matrialNameThird = Material.valueOf(returnItemToRecipe(ingrediens.getMaterialName3(), ingrediensMap));
- int itemAmountThird = ingrediensMap.get(matrialNameThird);
- recipeMatrialThird = new ItemStack(matrialNameThird, itemAmountThird);
- map.put(matrialNameThird, recipeMatrialThird);
- }
- if (returnItemToRecipe(ingrediens.getMaterialName4(), ingrediensMap) != null)
- if (ingrediens.getMaterialName4() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName4(), ingrediensMap)) {
- Material matrialNameFourth = Material.valueOf(returnItemToRecipe(ingrediens.getMaterialName4(), ingrediensMap));
- int itemAmountFourth = ingrediensMap.get(matrialNameFourth);
- recipeMatrialFourth = new ItemStack(matrialNameFourth, itemAmountFourth);
- map.put(matrialNameFourth, recipeMatrialFourth);
- }
- if (returnItemToRecipe(ingrediens.getMaterialName5(), ingrediensMap) != null)
- if (ingrediens.getMaterialName5() != null && isMapContainsRecipeIngrediens(ingrediens.getMaterialName5(), ingrediensMap)) {
- Material matrialNameFifth = Material.valueOf(returnItemToRecipe(ingrediens.getMaterialName5(), ingrediensMap));
- int itemAmountFifth = ingrediensMap.get(matrialNameFifth);
- recipeMatrialFifth = new ItemStack(matrialNameFifth, itemAmountFifth);
- map.put(matrialNameFifth, recipeMatrialFifth);
- }
- return map;
- }
- public Map<Material, Integer> getItemsAmount(Crafting recipes, ItemStack listOfItems, Inventory inventory) {
- Map<Material, Integer> map = new HashMap<>();
- int amountFirst = 0;
- int amountSecond = 0;
- int amountThird = 0;
- int amountFourt = 0;
- int amountFifth = 0;
- for (ItemStack itemStacks : inventory) {
- if (listOfItems.getType().toString().equals(recipes.toString()) && itemStacks != null) {
- if (isItemsMatch(recipes.getMaterialName1(), itemStacks)) {
- amountFirst += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- } else if (isItemsMatch(recipes.getMaterialName2(), itemStacks)) {
- amountSecond += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- } else if (isItemsMatch(recipes.getMaterialName3(), itemStacks)) {
- amountThird += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- } else if (isItemsMatch(recipes.getMaterialName4(), itemStacks)) {
- amountFourt += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- } else if (isItemsMatch(recipes.getMaterialName5(), itemStacks)) {
- amountFifth += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- }
- }
- }
- return map;
- }
- public void removeItems(Inventory inventory, String matrialName) {
- for (int i = 0; i < inventory.getSize(); i++) {
- ItemStack itemStacks = inventory.getContents()[i];
- if (itemStacks != null && itemStacks.isSimilar(ItemUtily.createItemStack(matrialName))) {
- inventory.setItem(i, new ItemStack(Material.AIR));
- }
- }
- }
- public void takeItemsRecipeIngrediens(Inventory inventory, Crafting recipes, Map<Material, ItemStack> itemStacks, Material itemToTake) {
- Set<ItemStack> ifItHasRemovedSameItem = new HashSet<>();
- for (Map.Entry<Material, ItemStack> item : itemStacks.entrySet()) {
- ItemStack itemStack = item.getValue();
- if (itemStack != null && isItemsMatch(recipes.getMaterialName1(), itemStack)) {
- if (itemStack.getAmount() >= recipes.getAmontNeededCrafting2() && !ifItHasRemovedSameItem.isEmpty()) {
- if (ifItHasRemovedSameItem.size() == ItemUtily.countItemStacks(inventory, itemStack))
- ifItHasRemovedSameItem.clear();
- System.out.println("test ");
- ifItHasRemovedSameItem.add(itemStack);
- continue;
- }
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(checkAdvanceColorRecipes(recipes.toString(), itemToTake) ? itemStack.getAmount() - (recipes.getAmontNeededCrafting1() + 1) : itemStack.getAmount() - recipes.getAmontNeededCrafting1());
- inventory.addItem(itemStack);
- ifItHasRemovedSameItem.add(itemStack);
- } else if (itemStack != null && isItemsMatch(recipes.getMaterialName2(), itemStack)) {
- if (checkAdvanceColorRecipes(recipes.toString(), itemToTake) && itemStack.getType() == Material.PINK_DYE)
- continue;
- if (!checkAdvanceColorRecipes(recipes.toString(), itemToTake) && itemStack.getType() == Material.WHITE_DYE)
- continue;
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting2());
- inventory.addItem(itemStack);
- } else if (itemStack != null && isItemsMatch(recipes.getMaterialName3(), itemStack)) {
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(checkAdvanceColorRecipes(recipes.toString(), itemToTake) ? itemStack.getAmount() - (recipes.getAmontNeededCrafting3() + 1) : itemStack.getAmount() - recipes.getAmontNeededCrafting3());
- inventory.addItem(itemStack);
- } else if (itemStack != null && isItemsMatch(recipes.getMaterialName4(), itemStack)) {
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting4());
- inventory.addItem(itemStack);
- } else if (itemStack != null && isItemsMatch(recipes.getMaterialName5(), itemStack)) {
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting5());
- inventory.addItem(itemStack);
- }
- }
- }
- private boolean checkAdvanceColorRecipes(String recipeOutput, Material itemUsedInrecipe) {
- if (itemUsedInrecipe != null)
- if (recipeOutput.equals("LIGHT_GRAY_DYE") && itemUsedInrecipe.toString().equals("BLACK_DYE"))
- return true;
- else if (recipeOutput.equals("MAGENTA_DYE") && (itemUsedInrecipe.toString().equals("WHITE_DYE") || itemUsedInrecipe.toString().equals("BONE_MEAL")))
- return true;
- return false;
- }
- public boolean isItemsMatch(String ingridients, ItemStack itemYoucraft) {
- if (ingridients != null && itemYoucraft != null && ingridients.contains(","))
- for (String recipe : ingridients.split(",")) {
- if (recipe.equals(itemYoucraft.getType().toString())) {
- return true;
- }
- }
- else if (ingridients != null && itemYoucraft != null && !ingridients.contains(",")) {
- return ingridients.equals(itemYoucraft.getType().toString());
- }
- return false;
- }
- public String returnItemToRecipe(String ingrediens, Map<Material, Integer> map) {
- for (Map.Entry<Material, Integer> itemStack : map.entrySet())
- if (ingrediens != null && itemStack != null && ingrediens.contains(","))
- for (String recipe : ingrediens.split(",")) {
- if (recipe.equals(itemStack.getKey().toString())) {
- return itemStack.getKey().toString();
- }
- }
- else if (ingrediens != null && !ingrediens.contains(","))
- return ingrediens;
- return null;
- }
- public boolean isMapContainsRecipeIngrediens(String ingrediens, Map<Material, Integer> map) {
- for (Map.Entry<Material, Integer> itemStack : map.entrySet()) {
- if (ingrediens != null && itemStack != null && ingrediens.contains(","))
- for (String recipe : ingrediens.split(",")) {
- if (recipe.equals(itemStack.getKey().toString())) {
- return true;
- }
- }
- else if (ingrediens != null && itemStack != null && !ingrediens.contains(",") && ingrediens.equals(itemStack.getKey().toString()))
- return true;
- }
- return false;
- }
- public String splitIngrediens(String input, String ingrediensSplit) {
- if (input != null && ingrediensSplit != null && ingrediensSplit.contains(","))
- for (String ingredien : ingrediensSplit.split(","))
- if (ingredien.equals(input)) {
- return ingredien;
- }
- if (ingrediensSplit != null && !ingrediensSplit.contains(","))
- return ingrediensSplit;
- return "";
- }
- public boolean checkAmountForRecipeFirst(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
- int itemAmount = 0;
- boolean matchedItem = false;
- if (itemUsedToCrafting != null)
- for (String items : itemUsedToCrafting)
- if (items != null && items.equals("BLACK_DYE")) {
- matchedItem = true;
- break;
- }
- if (ingridents != null && amountNeeded != null)
- for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
- if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName1()))) {
- itemAmount += item.getValue().getAmount();
- if (itemAmount >= ((amountNeeded.equals("LIGHT_GRAY_DYE") && matchedItem) ?
- Crafting.valueOf(amountNeeded).getAmontNeededCrafting1() + 1 : Crafting.valueOf(amountNeeded).getAmontNeededCrafting1())) {
- return true;
- }
- }
- }
- return false;
- }
- public boolean checkAmountForRecipeSecond(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
- int itemSecondAmount = 0;
- boolean matchedItem = false;
- if (itemUsedToCrafting != null)
- for (String items : itemUsedToCrafting)
- if (items != null && items.equals("MAGENTA_DYE")) {
- matchedItem = true;
- break;
- }
- if (ingridents != null && amountNeeded != null)
- for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
- if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName2()))) {
- itemSecondAmount += item.getValue().getAmount();
- if (itemSecondAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting2())
- return true;
- }
- }
- return false;
- }
- public boolean checkAmountForRecipeThird(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
- int itemAmount = 0;
- boolean matchedItem = false;
- if (itemUsedToCrafting != null)
- for (String items : itemUsedToCrafting)
- if (items != null && (items.equals("WHITE_DYE") || items.equals("BONE_MEAL"))) {
- matchedItem = true;
- break;
- }
- if (ingridents != null && amountNeeded != null)
- for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
- if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName3()))) {
- itemAmount += item.getValue().getAmount();
- if (itemAmount >= ((amountNeeded.equals("MAGENTA_DYE") && matchedItem) ?
- Crafting.valueOf(amountNeeded).getAmontNeededCrafting1() + 1 : Crafting.valueOf(amountNeeded).getAmontNeededCrafting3()))
- return true;
- }
- }
- return false;
- }
- public boolean checkAmountForRecipeFourth(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
- int itemAmount = 0;
- boolean matchedItem = false;
- if (itemUsedToCrafting != null)
- for (String items : itemUsedToCrafting)
- if (items != null && (items.equals("WHITE_DYE") || items.equals("BONE_MEAL"))) {
- matchedItem = true;
- break;
- }
- if (ingridents != null && amountNeeded != null)
- for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
- if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName4()))) {
- itemAmount += item.getValue().getAmount();
- if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting4())
- return true;
- }
- }
- return false;
- }
- public boolean checkAmountForRecipeFifth(Map<Material, ItemStack> ingridents, String amountNeeded, String... itemUsedToCrafting) {
- int itemAmount = 0;
- boolean matchedItem = false;
- if (itemUsedToCrafting != null)
- for (String items : itemUsedToCrafting)
- if (items != null && (items.equals("WHITE_DYE") || items.equals("BONE_MEAL"))) {
- matchedItem = true;
- break;
- }
- if (ingridents != null && amountNeeded != null)
- for (Map.Entry<Material, ItemStack> item : ingridents.entrySet()) {
- if (item.getValue().getType().toString().equals(splitIngrediens(item.getValue().getType().toString(), Crafting.valueOf(amountNeeded).getMaterialName5()))) {
- itemAmount += item.getValue().getAmount();
- if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting5())
- return true;
- }
- }
- return false;
- }
- public Map<ItemStack, ItemStack> getCraftedItems(Location location) {
- return craftedItems.get(location);
- }
- public Map<Location, Map<ItemStack, ItemStack>> getCraftedItems() {
- return craftedItems;
- }
- public void removeCraftedItems(Location location) {
- craftedItems.remove(location);
- }
- }
Add Comment
Please, Sign In to add comment