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.HashMap;
- import java.util.List;
- import java.util.Map;
- public class CraftingUtility {
- private static final Map<ItemStack, ItemStack> craftedItems = 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).getmatrialName();
- String matrialNameSecond = Crafting.valueOf(recipeValues).getmatrialNames1();
- String matrialNameThird = Crafting.valueOf(recipeValues).getmatrialNames2();
- for (ItemStack itemListForCrafting : listOfItems) {
- Map<Material, Integer> amountOfItemsInventory = getItemsAmount(craftingRecipe, itemListForCrafting, inventory);
- if (!amountOfItemsInventory.isEmpty()) {
- Map<Material, ItemStack> itemStacks = setItemstacksAmount(amountOfItemsInventory, craftingRecipe);
- if (matrialNameFirst != null && matrialNameSecond == null && matrialNameThird == null) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues)) {
- Material matrial = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, (Crafting.valueOf(recipeValues).getNumberOutput())));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(ItemUtily.createItemStackAsOne(getmatrialName)))
- itemAmont = craftedItems.get(ItemUtily.createItemStackAsOne(getmatrialName)).getAmount();
- craftedItems.put(ItemUtily.createItemStackAsOne(getmatrialName), ItemUtily.createItemStackWhitAmount(getmatrialName, (Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont))));
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
- //inventory.remove(matrial);
- }
- //inventory.remove(matrial);
- }
- } else if (matrialNameFirst != null && matrialNameSecond != null && matrialNameThird == null) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues) &&
- checkAmountForRecipeSecond(itemStacks, recipeValues)) {
- Material matrial = Material.valueOf(returnItemToRecipe(matrialNameFirst, amountOfItemsInventory));
- Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(ItemUtily.createItemStackWhitAmount(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(ItemUtily.createItemStackAsOne(getmatrialName)))
- itemAmont = craftedItems.get(ItemUtily.createItemStackAsOne(getmatrialName)).getAmount();
- craftedItems.put(ItemUtily.createItemStackAsOne(getmatrialName), ItemUtily.createItemStackWhitAmount(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont)));
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
- }
- }
- } else if (matrialNameFirst != null && matrialNameSecond != null && matrialNameThird != null) {
- if (isItemsMatch(recipeValues, itemListForCrafting) &&
- !itemStacks.isEmpty() && checkAmountForRecipeFirst(itemStacks, recipeValues) &&
- checkAmountForRecipeSecond(itemStacks, recipeValues) && checkAmountForRecipeThird(itemStacks, recipeValues)) {
- Material getmatrialName = Material.valueOf(Crafting.valueOf(recipeValues).name());
- outputItemsIfNoSpaceInChest = inventory.addItem(new ItemStack(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput()));
- if (outputItemsIfNoSpaceInChest.isEmpty()) {
- if (craftedItems.containsKey(ItemUtily.createItemStackAsOne(getmatrialName)))
- itemAmont = craftedItems.get(ItemUtily.createItemStackAsOne(getmatrialName)).getAmount();
- craftedItems.put(ItemUtily.createItemStackAsOne(getmatrialName), ItemUtily.createItemStackWhitAmount(getmatrialName, Crafting.valueOf(recipeValues).getNumberOutput() + (craftedItems.isEmpty() ? 0 : itemAmont)));
- takeItemsRecipeIngrediens(inventory, craftingRecipe, itemStacks);
- }
- /* if (!outputItemsIfNoSpaceInChest.isEmpty()) {
- inventory.addItem(new ItemStack(itemStacks.get(itemListForCrafting.getType()).getType(), itemAmountNeededFirst));
- inventory.addItem(new ItemStack(itemStacks.get(itemListForCrafting.getType()).getType(), itemAmountNeededSecond));
- inventory.addItem(new ItemStack(itemStacks.get(itemListForCrafting.getType()).getType(), itemAmountNeededThird));
- }*/
- }
- }
- }
- }
- }
- return outputItemsIfNoSpaceInChest;
- }
- 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;
- //System.out.println("Test " + ingrediens.getmatrialNames2());
- if (returnItemToRecipe(ingrediens.getmatrialName(), ingrediensMap) != null)
- if (ingrediens.getmatrialName() != null && isMapContainsRecipeIngrediens(ingrediens.getmatrialName(), ingrediensMap)) {
- Material matrialNameFirst = Material.valueOf(returnItemToRecipe(ingrediens.getmatrialName(), ingrediensMap));
- int itemAmount = ingrediensMap.get(matrialNameFirst);
- recipeMatrial = new ItemStack(matrialNameFirst, itemAmount);
- map.put(matrialNameFirst, recipeMatrial);
- }
- if (returnItemToRecipe(ingrediens.getmatrialNames1(), ingrediensMap) != null)
- if (ingrediens.getmatrialNames1() != null && isMapContainsRecipeIngrediens(ingrediens.getmatrialNames1(), ingrediensMap)) {
- for (Map.Entry<Material, Integer> item : ingrediensMap.entrySet())
- if (isItemsMatch(ingrediens.getmatrialNames1(), 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.getmatrialNames2(), ingrediensMap) != null)
- if (ingrediens.getmatrialNames2() != null && isMapContainsRecipeIngrediens(ingrediens.getmatrialNames2(), ingrediensMap)) {
- Material matrialNameThird = Material.valueOf(returnItemToRecipe(ingrediens.getmatrialNames2(), ingrediensMap));
- int itemAmountThird = ingrediensMap.get(matrialNameThird);
- recipeMatrialThird = new ItemStack(matrialNameThird, itemAmountThird);
- map.put(matrialNameThird, recipeMatrialThird);
- }
- 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;
- for (ItemStack itemStacks : inventory) {
- if (listOfItems.getType().toString().equals(recipes.toString()) && itemStacks != null) {
- if (isItemsMatch(recipes.getmatrialName(), itemStacks)) {
- amountFirst += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- } else if (isItemsMatch(recipes.getmatrialNames1(), itemStacks)) {
- amountSecond += itemStacks.getAmount();
- map.put(itemStacks.getType(), ItemUtily.countItemStacks(itemStacks, inventory));
- } else if (isItemsMatch(recipes.getmatrialNames2(), itemStacks)) {
- amountThird += 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) {
- for (Map.Entry<Material, ItemStack> item : itemStacks.entrySet()) {
- ItemStack itemStack = item.getValue();
- if (itemStack != null && isItemsMatch(recipes.getmatrialName(), itemStack)) {
- removeItems(inventory, itemStack.getType().toString());
- System.out.println("recipes.getAmontNeededCrafting()" + recipes.getAmontNeededCrafting() + "recipes.getmatrialName()" + recipes.name());
- itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting());
- inventory.addItem(itemStack);
- } else if (itemStack != null && isItemsMatch(recipes.getmatrialNames1(), itemStack)) {
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting1());
- inventory.addItem(itemStack);
- } else if (itemStack != null && isItemsMatch(recipes.getmatrialNames2(), itemStack)) {
- removeItems(inventory, itemStack.getType().toString());
- itemStack.setAmount(itemStack.getAmount() - recipes.getAmontNeededCrafting2());
- inventory.addItem(itemStack);
- }
- }
- }
- 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 (ingrediensSplit != null && ingrediensSplit.contains(","))
- for (String ingredien : ingrediensSplit.split(","))
- if (ingredien.equals(input)) {
- return ingredien;
- }
- if (ingrediensSplit != null && !ingrediensSplit.contains(","))
- return ingrediensSplit;
- return null;
- }
- public boolean checkAmountForRecipeFirst(Map<Material, ItemStack> ingridents, String amountNeeded) {
- int itemAmount = 0;
- 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).getmatrialName()))) {
- itemAmount += item.getValue().getAmount();
- if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting()) {
- return true;
- }
- }
- }
- return false;
- }
- public boolean checkAmountForRecipeSecond(Map<Material, ItemStack> ingridents, String amountNeeded) {
- int itemSecondAmount = 0;
- 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).getmatrialNames1()))) {
- itemSecondAmount += item.getValue().getAmount();
- if (itemSecondAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting1())
- return true;
- }
- }
- /*System.out.println("getAmontNeededCrafting() " + Crafting.valueOf(amountNeeded).getAmontNeededCrafting());
- System.out.println("getAmontNeededCrafting second " + Crafting.valueOf(amountNeeded).getAmontNeededCrafting1());
- System.out.println("getAmontNeededCrafting threed " + Crafting.valueOf(amountNeeded).getAmontNeededCrafting2());*/
- return false;
- }
- public boolean checkAmountForRecipeThird(Map<Material, ItemStack> ingridents, String amountNeeded) {
- int itemAmount = 0;
- 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).getmatrialNames2()))) {
- itemAmount += item.getValue().getAmount();
- if (itemAmount >= Crafting.valueOf(amountNeeded).getAmontNeededCrafting2())
- return true;
- }
- }
- return false;
- }
- public ItemStack getCraftedItems(ItemStack itemStack) {
- return craftedItems.get(itemStack);
- }
- public Map<ItemStack, ItemStack> getCraftedItems() {
- return craftedItems;
- }
- public void removeCraftedItems(ItemStack itemStack) {
- craftedItems.remove(itemStack);
- }
- }
Add Comment
Please, Sign In to add comment