Added the dyeable recipes for the Sigil of Holding to the Alchemy Table.
This commit is contained in:
parent
4eda0d6caa
commit
5388dbf883
|
@ -74,7 +74,15 @@ public class AlchemyTableRecipe
|
||||||
return input.size();
|
return input.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getRecipeOutput()
|
/**
|
||||||
|
* Returns the output of the recipe, sensitive to the input list provided.
|
||||||
|
* If the input list does not technically match, the recipe should return
|
||||||
|
* the default output.
|
||||||
|
*
|
||||||
|
* @param inputList
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ItemStack getRecipeOutput(List<ItemStack> inputList)
|
||||||
{
|
{
|
||||||
return output.copy();
|
return output.copy();
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,7 +42,7 @@ public class AlchemyTableRecipeJEI extends BlankRecipeWrapper
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public List<ItemStack> getOutputs()
|
public List<ItemStack> getOutputs()
|
||||||
{
|
{
|
||||||
return Collections.singletonList(recipe.getRecipeOutput());
|
return Collections.singletonList(recipe.getRecipeOutput(new ArrayList<ItemStack>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
package WayofTime.bloodmagic.recipe.alchemyTable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.init.Items;
|
||||||
|
import net.minecraft.item.EnumDyeColor;
|
||||||
|
import net.minecraft.item.ItemBanner;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
|
import WayofTime.bloodmagic.api.Constants;
|
||||||
|
import WayofTime.bloodmagic.api.recipe.AlchemyTableRecipe;
|
||||||
|
|
||||||
|
public class AlchemyTableDyeableRecipe extends AlchemyTableRecipe
|
||||||
|
{
|
||||||
|
private ItemStack inputItem;
|
||||||
|
|
||||||
|
public AlchemyTableDyeableRecipe(int lpDrained, int ticksRequired, int tierRequired, ItemStack inputItem)
|
||||||
|
{
|
||||||
|
super(inputItem, lpDrained, ticksRequired, tierRequired);
|
||||||
|
|
||||||
|
ArrayList<ItemStack> validDyes = new ArrayList<ItemStack>();
|
||||||
|
validDyes.add(new ItemStack(Items.NAME_TAG));
|
||||||
|
validDyes.add(new ItemStack(Items.DYE, 1, OreDictionary.WILDCARD_VALUE));
|
||||||
|
|
||||||
|
ArrayList<Object> recipe = new ArrayList<Object>();
|
||||||
|
recipe.add(inputItem);
|
||||||
|
recipe.add(validDyes);
|
||||||
|
|
||||||
|
this.input = recipe;
|
||||||
|
|
||||||
|
this.inputItem = inputItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getRecipeOutput(List<ItemStack> inputList)
|
||||||
|
{
|
||||||
|
int nameTagOrDyeLocation = -1;
|
||||||
|
int inputItemLocation = -1;
|
||||||
|
for (int x = 0; x < inputList.size(); x++)
|
||||||
|
{
|
||||||
|
ItemStack slot = inputList.get(x);
|
||||||
|
|
||||||
|
if (slot != null)
|
||||||
|
{
|
||||||
|
boolean match = OreDictionary.itemMatches(inputItem, slot, false);
|
||||||
|
|
||||||
|
if (match)
|
||||||
|
{
|
||||||
|
inputItemLocation = x;
|
||||||
|
continue;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (slot.getItem() == Items.NAME_TAG || slot.getItem() == Items.DYE)
|
||||||
|
{
|
||||||
|
nameTagOrDyeLocation = x;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nameTagOrDyeLocation != -1 && inputItemLocation != -1)
|
||||||
|
{
|
||||||
|
ItemStack tagOrDyeStack = inputList.get(nameTagOrDyeLocation);
|
||||||
|
ItemStack inputStack = inputList.get(inputItemLocation);
|
||||||
|
|
||||||
|
if (inputStack == null || tagOrDyeStack == null)
|
||||||
|
{
|
||||||
|
return output.copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack outputStack = inputStack.copy();
|
||||||
|
|
||||||
|
if (tagOrDyeStack.getItem() == Items.NAME_TAG)
|
||||||
|
{
|
||||||
|
if (!outputStack.hasTagCompound())
|
||||||
|
{
|
||||||
|
outputStack.setTagCompound(new NBTTagCompound());
|
||||||
|
}
|
||||||
|
|
||||||
|
outputStack.getTagCompound().setString(Constants.NBT.COLOR, tagOrDyeStack.getDisplayName());
|
||||||
|
|
||||||
|
return outputStack;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
EnumDyeColor dyeColor = ItemBanner.getBaseColor(tagOrDyeStack);
|
||||||
|
if (!outputStack.hasTagCompound())
|
||||||
|
{
|
||||||
|
outputStack.setTagCompound(new NBTTagCompound());
|
||||||
|
}
|
||||||
|
|
||||||
|
outputStack.getTagCompound().setString(Constants.NBT.COLOR, String.valueOf(dyeColor.getMapColor().colorValue));
|
||||||
|
|
||||||
|
return outputStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output.copy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches(List<ItemStack> checkedList, World world, BlockPos pos)
|
||||||
|
{
|
||||||
|
boolean hasNameTagOrDye = false;
|
||||||
|
boolean hasInputItem = false;
|
||||||
|
|
||||||
|
for (int x = 0; x < checkedList.size(); x++)
|
||||||
|
{
|
||||||
|
ItemStack slot = checkedList.get(x);
|
||||||
|
|
||||||
|
if (slot != null)
|
||||||
|
{
|
||||||
|
boolean match = OreDictionary.itemMatches(inputItem, slot, false);
|
||||||
|
|
||||||
|
if (match && hasInputItem)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
} else if (match)
|
||||||
|
{
|
||||||
|
hasInputItem = true;
|
||||||
|
continue;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (slot.getItem() == Items.NAME_TAG || slot.getItem() == Items.DYE)
|
||||||
|
{
|
||||||
|
if (hasNameTagOrDye)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
hasNameTagOrDye = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hasNameTagOrDye && hasInputItem;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package WayofTime.bloodmagic.registry;
|
package WayofTime.bloodmagic.registry;
|
||||||
|
|
||||||
import WayofTime.bloodmagic.api.BloodMagicAPI;
|
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -15,6 +14,7 @@ import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||||
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||||
import WayofTime.bloodmagic.BloodMagic;
|
import WayofTime.bloodmagic.BloodMagic;
|
||||||
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding;
|
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding;
|
||||||
|
import WayofTime.bloodmagic.api.BloodMagicAPI;
|
||||||
import WayofTime.bloodmagic.api.Constants;
|
import WayofTime.bloodmagic.api.Constants;
|
||||||
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
|
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
|
||||||
import WayofTime.bloodmagic.api.compress.CompressionRegistry;
|
import WayofTime.bloodmagic.api.compress.CompressionRegistry;
|
||||||
|
@ -36,6 +36,7 @@ import WayofTime.bloodmagic.item.ItemComponent;
|
||||||
import WayofTime.bloodmagic.item.ItemDemonCrystal;
|
import WayofTime.bloodmagic.item.ItemDemonCrystal;
|
||||||
import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid;
|
import WayofTime.bloodmagic.item.alchemy.ItemCuttingFluid;
|
||||||
import WayofTime.bloodmagic.item.soul.ItemSoulGem;
|
import WayofTime.bloodmagic.item.soul.ItemSoulGem;
|
||||||
|
import WayofTime.bloodmagic.recipe.alchemyTable.AlchemyTableDyeableRecipe;
|
||||||
|
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
|
|
||||||
|
@ -313,5 +314,7 @@ public class ModRecipes
|
||||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.POTATO, Items.POTATO, new ItemStack(Items.DYE, 1, 15));
|
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.POTATO, Items.POTATO, new ItemStack(Items.DYE, 1, 15));
|
||||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.WHEAT, Items.WHEAT, new ItemStack(Items.DYE, 1, 15));
|
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.WHEAT, Items.WHEAT, new ItemStack(Items.DYE, 1, 15));
|
||||||
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15));
|
AlchemyTableRecipeRegistry.registerRecipe(ItemComponent.getStack(ItemComponent.PLANT_OIL), 100, 100, 1, Items.BEETROOT, Items.BEETROOT, Items.BEETROOT, new ItemStack(Items.DYE, 1, 15));
|
||||||
|
|
||||||
|
AlchemyTableRecipeRegistry.registerRecipe(new AlchemyTableDyeableRecipe(0, 100, 0, new ItemStack(ModItems.sigilHolding)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,7 +254,7 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory,
|
||||||
worldObj.notifyBlockUpdate(getPos(), state, state, 3);
|
worldObj.notifyBlockUpdate(getPos(), state, state, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canCraft(recipe))
|
if (canCraft(inputList, recipe))
|
||||||
{
|
{
|
||||||
ticksRequired = recipe.getTicksRequired();
|
ticksRequired = recipe.getTicksRequired();
|
||||||
burnTime++;
|
burnTime++;
|
||||||
|
@ -274,7 +274,7 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory,
|
||||||
|
|
||||||
if (!worldObj.isRemote)
|
if (!worldObj.isRemote)
|
||||||
{
|
{
|
||||||
craftItem(recipe);
|
craftItem(inputList, recipe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -301,14 +301,14 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory,
|
||||||
return ((double) burnTime) / ticksRequired;
|
return ((double) burnTime) / ticksRequired;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean canCraft(AlchemyTableRecipe recipe)
|
private boolean canCraft(List<ItemStack> inputList, AlchemyTableRecipe recipe)
|
||||||
{
|
{
|
||||||
if (recipe == null)
|
if (recipe == null)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack outputStack = recipe.getRecipeOutput();
|
ItemStack outputStack = recipe.getRecipeOutput(inputList);
|
||||||
ItemStack currentOutputStack = getStackInSlot(outputSlot);
|
ItemStack currentOutputStack = getStackInSlot(outputSlot);
|
||||||
if (outputStack == null)
|
if (outputStack == null)
|
||||||
return false;
|
return false;
|
||||||
|
@ -365,11 +365,11 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void craftItem(AlchemyTableRecipe recipe)
|
public void craftItem(List<ItemStack> inputList, AlchemyTableRecipe recipe)
|
||||||
{
|
{
|
||||||
if (this.canCraft(recipe))
|
if (this.canCraft(inputList, recipe))
|
||||||
{
|
{
|
||||||
ItemStack outputStack = recipe.getRecipeOutput();
|
ItemStack outputStack = recipe.getRecipeOutput(inputList);
|
||||||
ItemStack currentOutputStack = getStackInSlot(outputSlot);
|
ItemStack currentOutputStack = getStackInSlot(outputSlot);
|
||||||
|
|
||||||
if (currentOutputStack == null)
|
if (currentOutputStack == null)
|
||||||
|
|
Loading…
Reference in a new issue