- 55
- 7
- 3
Я сделал кастомную печку с 4-мя слотами (наконец-то) и репецты для неё работают только если используется ингредиент из моего мода (майнкрафтовские не работают).
Слоты: 0 - ингредиент, 1 - топливо, 2 - ещё ингредиент (extractHelper), 3 - вывод.
если нужны будут остальные классы, скину.
пж ответьте кто знает
Слоты: 0 - ингредиент, 1 - топливо, 2 - ещё ингредиент (extractHelper), 3 - вывод.
SoulExtractorRecipes.java:
package ru.wertyfiregames.craftablecreatures.compat;
import net.minecraft.block.Block;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import ru.wertyfiregames.craftablecreatures.init.CCItems;
import java.util.*;
public class SoulExtractorRecipes {
private static final SoulExtractorRecipes extractingBase = new SoulExtractorRecipes();
private final Map<ItemStack, ItemStack> extractingRecipes = new HashMap<>();
private final List<ItemStack> extractHelpers = new ArrayList<>();
private final Map<ItemStack, Float> experienceList = new HashMap<>();
private SoulExtractorRecipes() {
//TODO: add all recipes!
addExtractHelper(new ItemStack(CCItems.soul_element, 1, 0));
addRecipe(Items.gunpowder, new ItemStack(CCItems.soul_element, 1, 1), 0.3f);
addRecipe(Items.bone, new ItemStack(CCItems.soul_element, 1, 2), 0.25f);
addRecipe(Items.spider_eye, new ItemStack(CCItems.soul_element, 1, 3), 0.25f);
addRecipe(Items.fermented_spider_eye, new ItemStack(CCItems.soul_element, 1, 3), 0.25f);
addRecipe(Items.rotten_flesh, new ItemStack(CCItems.soul_element, 1, 4), 0.2f);
addRecipe(Items.slime_ball, new ItemStack(CCItems.soul_element, 1, 5), 0.2f);
addRecipe(Items.ghast_tear, new ItemStack(CCItems.soul_element, 1, 6), 0.35f);
addRecipe(Items.golden_sword, new ItemStack(CCItems.soul_element, 1, 7), 0.25f);
addRecipe(Items.ender_eye, new ItemStack(CCItems.soul_element, 1, 8), 0.35f);
ItemStack stack1 = new ItemStack(CCItems.soul_element);
stack1.setItemDamage(3);
addRecipe(stack1, new ItemStack(CCItems.soul_element, 1, 9), 0.25f);
}
public static SoulExtractorRecipes get() {
return extractingBase;
}
public Map<ItemStack, ItemStack> getExtractingRecipes() {
return extractingRecipes;
}
public void addRecipe(Block input, ItemStack output, float xp) {
addRecipe(Item.getItemFromBlock(input), output, xp);
}
public void addRecipe(Item input, ItemStack output, float xp) {
addRecipe(new ItemStack(input), 1, 32767), output, xp);
}
public void addRecipe(ItemStack input, ItemStack output, float xp) {
extractingRecipes.put(input.copy(), output);
experienceList.put(output.copy(), xp);
}
public void addExtractHelper(Block helper) {
addExtractHelper(Item.getItemFromBlock(helper));
}
public void addExtractHelper(Item helper) {
addExtractHelper(new ItemStack(helper));
}
public void addExtractHelper(ItemStack helper) {
extractHelpers.add(helper.copy());
}
private boolean areStacksEqual(ItemStack stack1, ItemStack stack2) {
return stack1.isItemEqual(stack2) && (stack2.getItemDamage() == 32767 || stack2.getItemDamage() == stack1.getItemDamage());
}
public boolean isItemExtractHelper(ItemStack stack) {
return extractHelpers.stream().anyMatch(helperStack -> areStacksEqual(helperStack, stack));
}
public ItemStack getExtractingResult(ItemStack stack) {
for (Map.Entry<ItemStack, ItemStack> entry : extractingRecipes.entrySet()) {
if (areStacksEqual(entry.getKey(), stack)) return entry.getValue();
}
return null;
}
public float getExtractingExperience(ItemStack stack) {
for (Map.Entry<ItemStack, Float> entry : experienceList.entrySet()) {
if (areStacksEqual(entry.getKey(), stack)) return entry.getValue();
}
return 0f;
}
}
пж ответьте кто знает