Это точная копия поста на Spigot.mc: https://www.spigotmc.org/threads/1-13-2-when-crafting-the-required-items-increases.359924/
Моя проблема в том, что когда я создаю предметы, используя наборы предметов для рецепта, необходимые предметы увеличиваются даже выше предела стека.Я использую «PrepareItemCraftEvent», чтобы проверить, содержит ли рецепт необходимый элемент (Имя, Знания).Мой текущий код:
import java.util.HashMap;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.ItemStack;
public class ItemstackCrafting implements Listener {
private int i = 0;
@SuppressWarnings("serial")
@EventHandler
public void onPlayerCraftItem(PrepareItemCraftEvent e){
if(e.getInventory().getMatrix().length < 9){
return;
}
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier1(), 9), e.getInventory(), new HashMap<Integer, ItemStack>(){{
put(0, CoustomItems.rareEmeraldTier2());
}});
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier2(), 1), e.getInventory(), new HashMap<Integer, ItemStack>(){{
for(int n = 0; n < 9; n++) {
put(n, CoustomItems.rareEmeraldTier1());
}
}});
i = 0;
while (i < 9) {
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier2(), 9), e.getInventory(), new HashMap<Integer, ItemStack>(){{
put(i, CoustomItems.rareEmeraldTier3());
i++;
}});
}
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier3(), 1), e.getInventory(), new HashMap<Integer, ItemStack>(){{
for(int n = 0; n < 9; n++) {
put(n, CoustomItems.rareEmeraldTier2());
}
}});
i = 0;
while (i < 9) {
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier3(), 9), e.getInventory(), new HashMap<Integer, ItemStack>(){{
put(i, CoustomItems.rareEmeraldTier4());
i++;
}});
}
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier4(), 1), e.getInventory(), new HashMap<Integer, ItemStack>(){{
for(int n = 0; n < 9; n++) {
put(n, CoustomItems.rareEmeraldTier3());
}
}});
i = 0;
while (i < 9) {
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier4(), 9), e.getInventory(), new HashMap<Integer, ItemStack>(){{
put(i, CoustomItems.rareEmeraldTier5());
i++;
}});
}
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier5(), 1), e.getInventory(), new HashMap<Integer, ItemStack>(){{
for(int n = 0; n < 9; n++) {
put(n, CoustomItems.rareEmeraldTier4());
}
}});
i = 0;
while (i < 9) {
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier5(), 9), e.getInventory(), new HashMap<Integer, ItemStack>(){{
put(i, CoustomItems.rareEmeraldBlockTier5());
i++;
}});
}
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldBlockTier5(), 1), e.getInventory(), new HashMap<Integer, ItemStack>(){{
for(int n = 0; n < 9; n++) {
put(n, CoustomItems.rareEmeraldTier5());
}
}});
}
public void checkCraft(ItemStack result, CraftingInventory inv, HashMap<Integer, ItemStack> ingredients){
ItemStack[] matrix = inv.getMatrix();
for(int n = 0; n < 9; n++){
if(ingredients.containsKey(n)){
if(matrix[n] == null
|| !matrix[n].getItemMeta().getDisplayName().equals(ingredients.get(n).getItemMeta().getDisplayName())
|| !matrix[n].getItemMeta().getLore().equals(ingredients.get(n).getItemMeta().getLore())){
return;
}
} else {
if(matrix[n] != null){
return;
}
}
}
inv.setResult(result);
}
}
примечание Моя единственная проблема заключается в этом коде:
i = 0;
while (i < 9) {
checkCraft(CoustomItems.changeAmount(CoustomItems.rareEmeraldTier2(), 9), e.getInventory(), new HashMap<Integer, ItemStack>(){{
put(i, CoustomItems.rareEmeraldTier3());
i++;
}});
}
, и это может быть бесформенный рецепт, чтобы сделатьблок вставляется в любой из 9 слотов, чтобы можно было конвертировать в 9 из раннего уровня Tier Emerald.Я могу добавить пользовательский класс элементов, но он содержит только методы для создания пользовательских ItemStacks и для изменения количества, которое содержит ItemStack.если вы не понимаете мои примеры, я предоставил 1 изображение и 1 gif, показывающие проблему из первых рук: Изображение https://gyazo.com/83bc55ac2efaccb1fbc524e90cc88887
Gif https://gyazo.com/517bf73805e40dbe0acf75bc0927d6c6