Jump to content

Recommended Posts

Posted

I've created a tile entity that will revert most crafting recipes. However, I've run into an interesting bug. All vanilla blocks are returned with a missing texture. This is only for vanilla blocks. All items and mod blocks return the correct textures.

 

Tile Entity (Thanks to Jabelar for this tutorial)

 

 

public class TileEntityDisassembler extends TileEntityPoweredMachine implements ISidedInventory

{

private static final int[] slotsBottom = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};

private static final int[] slotsSides  = new int[]{0};

 

private int disassembleTime;

 

public TileEntityDisassembler()

{

super(1, 10);

}

 

private boolean canDisassemble()

{

ItemStack input = this.itemStacks[0];

if (input != null)

{

ItemStack crushOutput = CrusherRecipes.instance().getCrushingResult(input);

ItemStack[] disassembleOutput = DisassemblingRecipeHandler.getDisassembleResults(input);

 

if (crushOutput == null && disassembleOutput == null)

{

return false;

}

 

if (crushOutput != null)

{

ItemStack outputSlot = this.itemStacks[1];

if (outputSlot == null)

{

return true;

}

if (!outputSlot.isItemEqual(crushOutput))

{

return false;

}

int result = outputSlot.stackSize + crushOutput.stackSize;

return result <= crushOutput.getMaxStackSize();

}

if (disassembleOutput != null)

{

int nullCount = 0;

int equalCount = 0;

 

for(int i = 1; i < 10; i++)

{

if(itemStacks == null)

{

nullCount++;

}

if(nullCount == 9)

{

return true;

}

}

// for (int i = 1; i < 10; i++)

// {

// if(itemStacks == disassembleOutput[i - 1])

// {

// if(!((itemStacks.stackSize + disassembleOutput[i - 1].stackSize) >= disassembleOutput[i - 1].getMaxStackSize()))

// {

// equalCount++;

// }

// if(equalCount == 9)

// {

// return true;

// }

// }

// }

}

}

return false;

}

 

@Override

public int getSizeInventory()

{

return itemStacks.length;

}

 

@Override

public int[] getSlotsForFace(EnumFacing side)

{

return side == EnumFacing.DOWN ? slotsBottom : slotsSides;

}

 

@Override

public boolean canInsertItem(int index, ItemStack itemStackIn, EnumFacing direction)

{

return isItemValidForSlot(index, itemStackIn);

}

 

@Override

public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)

{

return direction == EnumFacing.DOWN && index != 0;

}

 

@Override

public int guiID()

{

return GuiHandler.GuiIDs.DISASSEMBLER.ordinal();

}

 

private void disassembleItem()

{

boolean flag = false;

if (this.canDisassemble())

{

ItemStack itemstack = CrusherRecipes.instance().getCrushingResult(itemStacks[0]);

if(itemstack != null)

{

flag = true;

if (itemStacks[1] == null)

{

itemStacks[1] = itemstack.copy();

}

else if (itemStacks[1].getItem() == itemstack.getItem())

{

itemStacks[1].stackSize += itemstack.stackSize; // Forge BugFix: Results may have multiple items

}

 

--itemStacks[0].stackSize;

 

if (itemStacks[0].stackSize <= 0)

{

itemStacks[0] = null;

}

}

 

if(!flag)

{

ItemStack [] disassembleResults = DisassemblingRecipeHandler.getDisassembleResults(itemStacks[0]);

if(disassembleResults != null)

{

for(int i = 1; i < 10; i++)

{

if(itemStacks == null)

{

if(disassembleResults[i-1] == null)

{

itemStacks = null;

}

else

{

itemStacks = disassembleResults[i - 1].copy();

}

}

else if(itemStacks.getItem() == disassembleResults[i - 1].getItem())

{

itemStacks.stackSize += disassembleResults[i - 1].stackSize;

}

}

--itemStacks[0].stackSize;

 

if (itemStacks[0].stackSize <= 0)

{

itemStacks[0] = null;

}

}

}

}

}

 

@Override

public String getCommandSenderName()

{

return createInventoryName(Reference.TileEntities.DISASSEMBLER);

}

 

@Override

public int getField(int id)

{

switch (id)

{

case 0:

return disassembleTime;

default:

return 0;

}

}

 

@Override

public int getFieldCount()

{

return 1;

}

 

public final int getMaxDisassembleTime()

{

return itemStacks[0] == null ? 0 : DisassemblingRecipeHandler.getDisassembleResults(itemStacks[0]) != null ? 200 : 100;

}

 

public int getProgressScaled(int scalar)

{

return getMaxDisassembleTime() != 0 ? disassembleTime * scalar / getMaxDisassembleTime() : 0;

}

 

public boolean isDisassembling()

{

return disassembleTime > 0;

}

 

@Override

public boolean isItemValidForSlot(int index, ItemStack stack)

{

return index == 0 && (CrusherRecipes.instance().getCrushingResult(stack) != null || DisassemblingRecipeHandler.getDisassembleResults(stack) != null);

}

 

@Override

public void readFromNBT(NBTTagCompound nbt)

{

super.readFromNBT(nbt);

 

this.disassembleTime = nbt.getShort("DisassembleTime");

NBTTagList nbttaglist = nbt.getTagList("Items", 10);

this.itemStacks = new ItemStack[this.getSizeInventory()];

 

for (int i = 0; i < nbttaglist.tagCount(); ++i)

{

NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i);

byte b0 = nbttagcompound1.getByte("Slot");

 

if (b0 >= 0 && b0 < this.itemStacks.length)

{

this.itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbttagcompound1);

}

}

}

 

@Override

public void setField(int id, int data)

{

switch (id)

{

case 0:

disassembleTime = data;

break;

}

}

 

@Override

public void update()

{

boolean flag1 = false;

 

if (ServerHelper.isServerWorld(this.worldObj))

{

if (hasPower())

{

if (itemStacks[0] != null)

{

if (canDisassemble())

{

++disassembleTime;

if (disassembleTime == getMaxDisassembleTime())

{

disassembleTime = 0;

storage.modifyEnergyStored(-10);

disassembleItem();

flag1 = true;

}

}

else

{

disassembleTime = 0;

}

}

else

{

disassembleTime = 0;

}

}

super.update();

BlockDisassembler.setState(isDisassembling() && hasPower() ? 2 : hasPower() ? 1 : 0, worldObj, pos);

}

if (flag1)

{

markDirty();

this.validate();

}

}

 

@Override

public void writeToNBT(NBTTagCompound nbt)

{

super.writeToNBT(nbt);

 

nbt.setShort("DisassembleTime", (short) this.disassembleTime);

NBTTagList nbttaglist = new NBTTagList();

for (int i = 0; i < this.itemStacks.length; ++i)

{

if (this.itemStacks != null)

{

NBTTagCompound nbttagcompound1 = new NBTTagCompound();

nbttagcompound1.setByte("Slot", (byte) i);

this.itemStacks.writeToNBT(nbttagcompound1);

nbttaglist.appendTag(nbttagcompound1);

}

}

 

nbt.setTag("Items", nbttaglist);

}

}

 

 

 

Disassembling Recipe Handler

 

 

public final class DisassemblingRecipeHandler

{

public static DisassemblingAdjustedRecipes disassemblingAdjustedRecipes = new DisassemblingAdjustedRecipes();

public static Item                        item                        = null;

 

public DisassemblingRecipeHandler()

{

}

 

public static ItemStack[] getCraftingGrid(IRecipe recipe)

{

ItemStack[] resultItemStack = new ItemStack[9];

 

for (int j = 0; j < resultItemStack.length; j++)

{

resultItemStack[j] = null;

}

 

if (recipe instanceof ShapedRecipes)

{

ShapedRecipes shaped = (ShapedRecipes) recipe;

 

System.arraycopy(shaped.recipeItems, 0, resultItemStack, 0, shaped.recipeItems.length);

}

 

if (recipe instanceof ShapelessRecipes)

{

ShapelessRecipes shapeless = (ShapelessRecipes) recipe;

 

for (int j = 0; j < shapeless.recipeItems.size(); j++)

{

resultItemStack[j] = (ItemStack) shapeless.recipeItems.get(j);

}

}

 

if (recipe instanceof ShapedOreRecipe)

{

ShapedOreRecipe shaped = (ShapedOreRecipe) recipe;

 

for (int j = 0; j < shaped.getInput().length; j++)

{

if (shaped.getInput()[j] instanceof ItemStack)

{

resultItemStack[j] = (ItemStack) shaped.getInput()[j];

}

else if (shaped.getInput()[j] instanceof List)

{

Object o = ((List) shaped.getInput()[j]).get(0);

if (o instanceof ItemStack)

{

resultItemStack[j] = (ItemStack) o;

}

}

}

}

 

if (recipe instanceof ShapelessOreRecipe)

{

ArrayList shapelessArray = ((ShapelessOreRecipe) recipe).getInput();

 

for (int j = 0; j < shapelessArray.size(); j++)

{

if (shapelessArray.get(j) instanceof ItemStack)

{

resultItemStack[j] = (ItemStack) shapelessArray.get(j);

}

else if (shapelessArray.get(j) instanceof List)

{

Object o = ((List) shapelessArray.get(j)).get(0);

if (o instanceof ItemStack)

{

resultItemStack[j] = (ItemStack) o;

}

}

}

}

 

if (ConfigurationHandler.allowPartialDisassembling)

{

return disassemblingAdjustedRecipes.adjustOutputQuantities(resultItemStack, recipe.getRecipeOutput());

}

else

{

return resultItemStack;

}

}

 

public static ItemStack[] getDisassembleResults(ItemStack itemStack)

{

item = itemStack.getItem();

 

if (DisassemblingAddedRecipes.shouldAddRecipe(item))

{

return DisassemblingAddedRecipes.getCraftingGrid(item);

}

 

List<?> listAllRecipes = CraftingManager.getInstance().getRecipeList();

 

for (Object listAllRecipe : listAllRecipes)

{

IRecipe recipe = (IRecipe) listAllRecipe;

 

if (recipe != null)

{

ItemStack recipeKeyItemStack = recipe.getRecipeOutput();

 

if (recipeKeyItemStack != null)

{

if (recipeKeyItemStack.getUnlocalizedName().equals(itemStack.getUnlocalizedName()))

{

return getCraftingGrid(recipe);

}

}

}

}

return null;

}

}

 

 

 

Disassembling Adjusted Recipes

 

 

public class DisassemblingAdjustedRecipes

{

public int  divideByEightCounter = 7;

public int  divideByFourCounter  = 3;

public int  divideByThreeCounter = 2;

public int  divideByTwoCounter  = 1;

public Item item                = null;

public int  metadata            = 0;

 

public DisassemblingAdjustedRecipes()

{

}

 

public ItemStack[] adjustOutputQuantities(ItemStack[] outputItemStack, ItemStack inputItemStack)

{

item = inputItemStack.getItem();

metadata = item.getMetadata(inputItemStack);

 

if (item == Items.oak_door)

{

return outputForWoodenDoor(0);

}

if (item == Items.spruce_door)

{

return outputForWoodenDoor(1);

}

else if (item == Items.birch_door)

{

return outputForWoodenDoor(2);

}

else if (item == Items.jungle_door)

{

return outputForWoodenDoor(3);

}

else if (item == Items.acacia_door)

{

return outputForWoodenDoor(4);

}

else if (item == Items.dark_oak_door)

{

return outputForWoodenDoor(5);

}

else if (item == Items.iron_door)

{

return new ItemStack[]

{

new ItemStack(Items.iron_ingot, 1, 0),

new ItemStack(Items.iron_ingot, 1, 0),

null, null, null, null, null, null, null

};

}

else if (item == Items.paper)

{

return outputSingle(Items.reeds);

}

else if (item == Items.stick)

{

return outputSingle(Blocks.planks);

}

else if (item == Item.getItemFromBlock(Blocks.ladder))

{

if (divideByThreeCounter <= 0)

{

decrementDivideByThreeCounter();

return new ItemStack[]

{

null, null, null,

new ItemStack(Items.stick, 1, 0),

new ItemStack(Items.stick, 1, 0),

new ItemStack(Items.stick, 1, 0),

null, null, null

};

}

else if (divideByThreeCounter == 1)

{

decrementDivideByThreeCounter();

return new ItemStack[]

{

new ItemStack(Items.stick, 1, 0),

null,

new ItemStack(Items.stick, 1, 0),

null, null, null, null, null, null

};

}

else if (divideByThreeCounter == 2)

{

decrementDivideByThreeCounter();

return new ItemStack[]

{

null, null, null, null, null, null,

new ItemStack(Items.stick, 1, 0),

null,

new ItemStack(Items.stick, 1, 0)

};

}

}

else if (item == Item.getItemFromBlock(Blocks.oak_fence))

{

return outputForWoodenFence(0);

}

else if (item == Item.getItemFromBlock(Blocks.spruce_fence))

{

return outputForWoodenFence(1);

}

else if (item == Item.getItemFromBlock(Blocks.birch_fence))

{

return outputForWoodenFence(2);

}

else if (item == Item.getItemFromBlock(Blocks.jungle_fence))

{

return outputForWoodenFence(3);

}

else if (item == Item.getItemFromBlock(Blocks.acacia_fence))

{

return outputForWoodenFence(4);

}

else if (item == Item.getItemFromBlock(Blocks.dark_oak_fence))

{

return outputForWoodenFence(5);

}

else if (item == Items.enchanted_book)

{

return new ItemStack[]

{

null,

new ItemStack(Items.reeds, 1, 0),

null,

null,

new ItemStack(Items.reeds, 1, 0),

null,

null,

new ItemStack(Items.reeds, 1, 0),

null

};

}

else if (item == Item.getItemFromBlock(Blocks.nether_brick_fence))

{

return outputSingle(Blocks.nether_brick);

}

else if (item == Item.getItemFromBlock(Blocks.wooden_slab))

{

return outputSingle(Blocks.planks, metadata);

}

else if (item == Item.getItemFromBlock(Blocks.stone_slab))

{

return outputForStoneSlab();

}

else if (item == Item.getItemFromBlock(Blocks.stone_slab2))

{

return outputSingle(Blocks.red_sandstone);

}

else if (item == Items.sign)

{

ItemStack planksItemStack = new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 0);

 

if (divideByThreeCounter == 2)

{

decrementDivideByThreeCounter();

return new ItemStack[]

{

planksItemStack, null, null,

planksItemStack, null, null,

null, null, null

};

}

else if (divideByThreeCounter == 0)

{

decrementDivideByThreeCounter();

return new ItemStack[]

{

null, planksItemStack, null,

null, planksItemStack, null,

null, new ItemStack(Items.stick, 1, 0), null

};

}

else if (divideByThreeCounter == 1)

{

decrementDivideByThreeCounter();

return new ItemStack[]

{

null, null, planksItemStack,

null, null, planksItemStack,

null, null, null

};

}

}

else if (item == Items.glass_bottle)

{

return outputSingle(Blocks.glass);

}

else if (item == Item.getItemFromBlock(Blocks.rail))

{

if (divideByTwoCounter == 1)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

new ItemStack(Items.iron_ingot, 1, 0), null, null,

new ItemStack(Items.iron_ingot, 1, 0), null, null,

new ItemStack(Items.iron_ingot, 1, 0), null, null

};

}

else if (divideByTwoCounter == 0)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

null, null, new ItemStack(Items.iron_ingot, 1, 0),

null, new ItemStack(Items.stick, 1, 0), new ItemStack(Items.iron_ingot, 1, 0),

null, null, new ItemStack(Items.iron_ingot, 1, 0)

};

}

}

else if (item == Item.getItemFromBlock(Blocks.golden_rail))

{

if (divideByTwoCounter == 1)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

new ItemStack(Items.gold_ingot, 1, 0), null, null,

new ItemStack(Items.gold_ingot, 1, 0), new ItemStack(Items.stick, 1, 0), null,

new ItemStack(Items.gold_ingot, 1, 0), null, null

};

}

else if (divideByTwoCounter == 0)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

null, null, new ItemStack(Items.gold_ingot, 1, 0),

null, null, new ItemStack(Items.gold_ingot, 1, 0),

null, new ItemStack(Items.redstone), new ItemStack(Items.gold_ingot, 1, 0)

};

}

}

else if (item == Item.getItemFromBlock(Blocks.activator_rail))

{

if (divideByTwoCounter == 1)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

new ItemStack(Items.iron_ingot, 1, 0), new ItemStack(Items.stick, 1, 0), null,

new ItemStack(Items.iron_ingot, 1, 0), null, null,

new ItemStack(Items.iron_ingot, 1, 0), null, null

};

}

else if (divideByTwoCounter == 0)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

null, null, new ItemStack(Items.iron_ingot, 1, 0),

null, new ItemStack(Item.getItemFromBlock(Blocks.redstone_torch), 1, 0), new ItemStack(Items.iron_ingot, 1, 0),

null, new ItemStack(Items.stick, 1, 0), new ItemStack(Items.iron_ingot, 1, 0)

};

}

}

else if (item == Item.getItemFromBlock(Blocks.detector_rail))

{

if (divideByTwoCounter == 1)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

new ItemStack(Items.iron_ingot, 1, 0), null, null,

new ItemStack(Items.iron_ingot, 1, 0), new ItemStack(Item.getItemFromBlock(Blocks.stone_pressure_plate), 1, 0), null,

new ItemStack(Items.iron_ingot, 1, 0), null, null

};

}

else if (divideByTwoCounter == 0)

{

decrementDivideByTwoCounter();

return new ItemStack[]

{

null, null, new ItemStack(Items.iron_ingot, 1, 0),

null, null, new ItemStack(Items.iron_ingot, 1, 0),

null, new ItemStack(Items.redstone), new ItemStack(Items.iron_ingot, 1, 0)

};

}

}

else if (item == Item.getItemFromBlock(Blocks.glass_pane))

{

return new ItemStack[]

{

null, null, null, null, null, null,

new ItemStack(Item.getItemFromBlock(Blocks.glass), 1, 0),

new ItemStack(Item.getItemFromBlock(Blocks.glass), 1, 0),

new ItemStack(Item.getItemFromBlock(Blocks.glass), 1, 0)

};

}

else if (item == Item.getItemFromBlock(Blocks.stained_glass_pane))

{

return new ItemStack[]

{

null, null, null, null, null, null,

new ItemStack(Item.getItemFromBlock(Blocks.stained_glass), 1, metadata),

new ItemStack(Item.getItemFromBlock(Blocks.stained_glass), 1, metadata),

new ItemStack(Item.getItemFromBlock(Blocks.stained_glass), 1, metadata)

};

}

else if (item == Item.getItemFromBlock(Blocks.cobblestone_wall))

{

return outputSingle(Blocks.cobblestone);

}

else if (item == Item.getItemFromBlock(Blocks.quartz_block))

{

return outputForQuartz();

}

else if (item == Item.getItemFromBlock(Blocks.stained_hardened_clay))

{

return outputForHardenedClay();

}

else if (item == Item.getItemFromBlock(Blocks.oak_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 0));

}

else if (item == Item.getItemFromBlock(Blocks.spruce_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 1));

}

else if (item == Item.getItemFromBlock(Blocks.birch_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 2));

}

else if (item == Item.getItemFromBlock(Blocks.jungle_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 3));

}

else if (item == Item.getItemFromBlock(Blocks.acacia_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 4));

}

else if (item == Item.getItemFromBlock(Blocks.dark_oak_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, 5));

}

else if (item == Item.getItemFromBlock(Blocks.sandstone_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.sandstone)));

}

else if (item == Item.getItemFromBlock(Blocks.stone_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.cobblestone)));

}

else if (item == Item.getItemFromBlock(Blocks.brick_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.brick_block)));

}

else if (item == Item.getItemFromBlock(Blocks.nether_brick_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.nether_brick)));

}

else if (item == Item.getItemFromBlock(Blocks.red_sandstone_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.red_sandstone)));

}

else if (item == Item.getItemFromBlock(Blocks.stone_brick_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.stonebrick)));

}

else if (item == Item.getItemFromBlock(Blocks.quartz_stairs))

{

return outputForStairs(new ItemStack(Item.getItemFromBlock(Blocks.quartz_block)));

}

return outputItemStack;

}

 

private int convertClayMetaToDyeMeta(int parClayMeta)

{

return 15 - parClayMeta;

}

 

private void decrementDivideByEightCounter()

{

divideByEightCounter--;

if (divideByEightCounter < 0)

{

divideByEightCounter = 7;

}

}

 

private void decrementDivideByFourCounter()

{

divideByFourCounter--;

if (divideByFourCounter < 0)

{

divideByFourCounter = 3;

}

}

 

private void decrementDivideByThreeCounter()

{

divideByThreeCounter--;

if (divideByThreeCounter < 0)

{

divideByThreeCounter = 2;

}

}

 

private void decrementDivideByTwoCounter()

{

divideByTwoCounter--;

if (divideByTwoCounter < 0)

{

divideByTwoCounter = 1;

}

}

 

private ItemStack[] initItemStackArray()

{

ItemStack[] resultItemStackArray = new ItemStack[9];

for (int j = 0; j < resultItemStackArray.length; j++)

{

resultItemStackArray[j] = null;

}

return resultItemStackArray;

}

 

private ItemStack[] outputForHardenedClay()

{

if (divideByEightCounter != 3)

{

decrementDivideByEightCounter();

return new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.clay), 1, 0), null, null,

null, null, null,

null, null, null

};

}

else

{

decrementDivideByEightCounter();

return new ItemStack[]{

new ItemStack(Item.getItemFromBlock(Blocks.clay), 1, 0),

new ItemStack(Items.dye, 1, convertClayMetaToDyeMeta(metadata)), null,

null, null, null,

null, null, null

};

}

}

 

private ItemStack[] outputForQuartz()

{

ItemStack[] resultItemStackArray = initItemStackArray();

if (metadata == 0)

{

resultItemStackArray = new ItemStack[]

{

null, null, null,

new ItemStack(Items.quartz, 1, 0), new ItemStack(Items.quartz, 1, 0),

null,

new ItemStack(Items.quartz, 1, 0), new ItemStack(Items.quartz, 1, 0),

null

};

}

else if (metadata == 1)

{

resultItemStackArray = new ItemStack[]

{

null, null, null,

null, new ItemStack(Item.getItemFromBlock(Blocks.stone_slab), 1, 7),

null,

null, new ItemStack(Item.getItemFromBlock(Blocks.stone_slab), 1, 7),

null

};

}

else if (metadata == 2 || metadata == 3 || metadata == 4)

{

if (divideByTwoCounter == 1)

{

decrementDivideByTwoCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null,

null, null, null,

null, new ItemStack(Item.getItemFromBlock(Blocks.quartz_block),

1, 0), null

};

}

else if (divideByTwoCounter == 0)

{

decrementDivideByTwoCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null,

null, new ItemStack(Item.getItemFromBlock(Blocks.quartz_block),

1, 0), null,

null, null, null

};

}

}

return resultItemStackArray;

}

 

private ItemStack[] outputForStairs(ItemStack parOutputItemStack)

{

ItemStack[] resultItemStackArray = initItemStackArray();

if (divideByFourCounter == 0)

{

decrementDivideByFourCounter();

resultItemStackArray = new ItemStack[]

{

null, null, parOutputItemStack,

null, null, null,

null, null, null

};

}

else if (divideByFourCounter == 1)

{

decrementDivideByFourCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null,

null, parOutputItemStack, parOutputItemStack,

null, null, null

};

}

else if (divideByFourCounter == 2)

{

decrementDivideByFourCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null,

null, null, null,

null, null, parOutputItemStack

};

}

else if (divideByFourCounter == 3)

{

decrementDivideByFourCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null,

null, null, null,

parOutputItemStack, parOutputItemStack, null

};

}

 

return resultItemStackArray;

}

 

private ItemStack[] outputForStoneSlab()

{

ItemStack[] resultItemStackArray = initItemStackArray();

if ((metadata & 7) == 0)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.stone), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 1)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.sandstone), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 2)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.stone), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 3)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.cobblestone), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 4)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.brick_block), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 5)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.stonebrick), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 6)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.nether_brick), 1, 0),

null, null, null, null, null, null, null, null

};

}

else if ((metadata & 7) == 7)

{

resultItemStackArray = new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.quartz_block), 1, 0),

null, null, null, null, null, null, null, null

};

}

return resultItemStackArray;

}

 

private ItemStack[] outputForWoodenDoor(int parMetadata)

{

return new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, parMetadata),

new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, parMetadata),

null, null, null, null, null, null, null

};

}

 

private ItemStack[] outputForWoodenFence(int parMetadata)

{

ItemStack[] resultItemStackArray = initItemStackArray();

ItemStack  planksItemStack      = new ItemStack(Item.getItemFromBlock(Blocks.planks), 1, parMetadata);

if (divideByThreeCounter == 2)

{

decrementDivideByThreeCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null,

planksItemStack,

new ItemStack(Items.stick, 1, 0),

null, null, null, null

};

}

else if (divideByThreeCounter == 1)

{

decrementDivideByThreeCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null, null, null, null, null,

new ItemStack(Items.stick, 1, 0),

planksItemStack

};

}

else if (divideByThreeCounter == 0)

{

decrementDivideByThreeCounter();

resultItemStackArray = new ItemStack[]

{

null, null, null, null, null,

planksItemStack,

planksItemStack,

null, null

};

}

return resultItemStackArray;

}

 

private ItemStack[] outputSingle(Block block)

{

return new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(block)),

null, null, null, null, null, null, null, null

};

}

 

private ItemStack[] outputSingle(Item item)

{

return new ItemStack[]

{

new ItemStack(item),

null, null, null, null, null, null, null, null

};

}

 

private ItemStack[] outputSingle(Block block, int metadata)

{

return new ItemStack[]

{

new ItemStack(Item.getItemFromBlock(block), 1, metadata),

null, null, null, null, null, null, null, null

};

}

}

 

 

 

Disassembling Added Recipes

 

 

public class DisassemblingAddedRecipes

{

private static ArrayList<Item> shouldAddList;

 

private static void init()

{

initShouldAdd();

}

 

private static void initShouldAdd()

{

shouldAddList = new ArrayList<Item>();

shouldAddList.add(Items.enchanted_book);

shouldAddList.add(Items.iron_horse_armor);

shouldAddList.add(Items.golden_horse_armor);

shouldAddList.add(Items.diamond_horse_armor);

}

 

public static boolean shouldAddRecipe(Item item)

{

if (shouldAddList == null)

{

init();

}

return shouldAddList.contains(item);

}

 

public static ItemStack[] getCraftingGrid(Item item)

{

ItemStack[] resultItemStack = new ItemStack[9];

 

for (int j = 0; j < resultItemStack.length; j++)

{

resultItemStack[j] = null;

}

 

if (item == Items.enchanted_book)

{

resultItemStack = new ItemStack[]

{

null, new ItemStack(Items.leather, 1, 0), null,

new ItemStack(Items.paper, 1, 0), new ItemStack(Items.paper, 1, 0), new ItemStack(Items.paper, 1, 0),

null, null, null

};

}

else if (item == Items.iron_horse_armor)

{

return new ItemStack[]

{

null,

null,

new ItemStack(Items.iron_ingot, 1, 0),

new ItemStack(Items.iron_ingot, 1, 0),

new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 15),

new ItemStack(Items.iron_ingot, 1, 0),

new ItemStack(Items.iron_ingot, 1, 0),

new ItemStack(Items.iron_ingot, 1, 0),

new ItemStack(Items.iron_ingot, 1, 0)

};

}

else if (item == Items.golden_horse_armor)

{

return new ItemStack[]

{

null,

null,

new ItemStack(Items.gold_ingot, 1, 0),

new ItemStack(Items.gold_ingot, 1, 0),

new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 12),

new ItemStack(Items.gold_ingot, 1, 0),

new ItemStack(Items.gold_ingot, 1, 0),

new ItemStack(Items.gold_ingot, 1, 0),

new ItemStack(Items.gold_ingot, 1, 0)

};

}

else if (item == Items.diamond_horse_armor)

{

return new ItemStack[]

{

null,

null,

new ItemStack(Items.diamond, 1, 0),

new ItemStack(Items.diamond, 1, 0),

new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 11),

new ItemStack(Items.diamond, 1, 0),

new ItemStack(Items.diamond, 1, 0),

new ItemStack(Items.diamond, 1, 0),

new ItemStack(Items.diamond, 1, 0)

};

}

return resultItemStack;

 

}

}

 

 

 

Disassembling Input Quantity

 

 

public class DisassemblingInputQuantity

{

private static ArrayList<Item> doubleList;

private static ArrayList<Item> horseArmorList;

private static ArrayList<Item> octList;

private static ArrayList<Item> singleList;

private static ArrayList<Item> unrealisticList;

 

public static int adjustQuantity(Item item, int defaultQuantity)

{

if (horseArmorList == null || unrealisticList == null || singleList == null || doubleList == null || octList == null)

{

initLists();

}

 

if (!ConfigurationHandler.allowDisassembleUnrealistic)

{

if (unrealisticList.contains(item))

{

return 0;

}

}

if (!ConfigurationHandler.allowHorseArmorCrafting)

{

if (horseArmorList.contains(item))

{

return 0;

}

}

if (!ConfigurationHandler.allowPartialDisassembling)

{

return defaultQuantity;

}

if (singleList.contains(item))

{

return 1;

}

if (doubleList.contains(item))

{

return 2;

}

if (octList.contains(item))

{

return 8;

}

return defaultQuantity;

}

 

public static int getStackSizeNeeded(ItemStack itemStack)

{

if (horseArmorList == null || unrealisticList == null || singleList == null || doubleList == null || octList == null)

{

initLists();

}

 

Item item = itemStack.getItem();

 

if (item == Items.enchanted_book)

{

if (ConfigurationHandler.allowDisassembleEnchantedBooks)

{

return 1;

}

else

{

return 0;

}

}

 

List<?> crafts = CraftingManager.getInstance().getRecipeList();

 

for (Object craft : crafts)

{

IRecipe recipe = (IRecipe) craft;

 

if (recipe != null)

{

ItemStack outputItemStack = recipe.getRecipeOutput();

 

if (outputItemStack != null)

{

if (outputItemStack.getUnlocalizedName().equals(itemStack.getUnlocalizedName()))

{

return adjustQuantity(item, outputItemStack.stackSize);

}

}

}

}

return 0;

}

 

private static void initDouble()

{

doubleList = new ArrayList<Item>();

doubleList.add(Item.getItemFromBlock(Blocks.wooden_slab));

doubleList.add(Item.getItemFromBlock(Blocks.stone_slab));

doubleList.add(Item.getItemFromBlock(Blocks.stone_slab2));

}

 

private static void initHorseArmor()

{

horseArmorList = new ArrayList<Item>();

horseArmorList.add(Items.saddle);

horseArmorList.add(Items.iron_horse_armor);

horseArmorList.add(Items.golden_horse_armor);

horseArmorList.add(Items.diamond_horse_armor);

}

 

public static void initLists()

{

initUnrealistic();

initHorseArmor();

initSingle();

initDouble();

initOct();

}

 

private static void initOct()

{

octList = new ArrayList<Item>();

octList.add(Item.getItemFromBlock(Blocks.iron_bars));

octList.add(Item.getItemFromBlock(Blocks.rail));

octList.add(Item.getItemFromBlock(Blocks.golden_rail));

octList.add(Item.getItemFromBlock(Blocks.activator_rail));

octList.add(Item.getItemFromBlock(Blocks.detector_rail));

octList.add(Item.getItemFromBlock(Blocks.glass_pane));

octList.add(Item.getItemFromBlock(Blocks.stained_glass_pane));

}

 

private static void initSingle()

{

singleList = new ArrayList<Item>();

singleList.add(Items.oak_door);

singleList.add(Items.spruce_door);

singleList.add(Items.birch_door);

singleList.add(Items.jungle_door);

singleList.add(Items.acacia_door);

singleList.add(Items.dark_oak_door);

singleList.add(Items.iron_door);

singleList.add(Items.paper);

singleList.add(Items.stick);

singleList.add(Item.getItemFromBlock(Blocks.ladder));

singleList.add(Items.enchanted_book);

singleList.add(Item.getItemFromBlock(Blocks.oak_fence));

singleList.add(Item.getItemFromBlock(Blocks.spruce_fence));

singleList.add(Item.getItemFromBlock(Blocks.birch_fence));

singleList.add(Item.getItemFromBlock(Blocks.jungle_fence));

singleList.add(Item.getItemFromBlock(Blocks.acacia_fence));

singleList.add(Item.getItemFromBlock(Blocks.dark_oak_fence));

singleList.add(Item.getItemFromBlock(Blocks.nether_brick_fence));

singleList.add(Items.sign);

singleList.add(Items.glass_bottle);

singleList.add(Item.getItemFromBlock(Blocks.cobblestone_wall));

singleList.add(Item.getItemFromBlock(Blocks.quartz_block));

singleList.add(Item.getItemFromBlock(Blocks.stained_hardened_clay));

singleList.add(Item.getItemFromBlock(Blocks.oak_stairs));

singleList.add(Item.getItemFromBlock(Blocks.spruce_stairs));

singleList.add(Item.getItemFromBlock(Blocks.birch_stairs));

singleList.add(Item.getItemFromBlock(Blocks.jungle_stairs));

singleList.add(Item.getItemFromBlock(Blocks.acacia_stairs));

singleList.add(Item.getItemFromBlock(Blocks.dark_oak_stairs));

singleList.add(Item.getItemFromBlock(Blocks.stone_stairs));

singleList.add(Item.getItemFromBlock(Blocks.sandstone_stairs));

singleList.add(Item.getItemFromBlock(Blocks.nether_brick_stairs));

singleList.add(Item.getItemFromBlock(Blocks.red_sandstone_stairs));

singleList.add(Item.getItemFromBlock(Blocks.quartz_stairs));

singleList.add(Item.getItemFromBlock(Blocks.stone_brick_stairs));

singleList.add(Item.getItemFromBlock(Blocks.brick_stairs));

}

 

private static void initUnrealistic()

{

unrealisticList = new ArrayList<Item>();

unrealisticList.add(Items.paper);

unrealisticList.add(Items.melon_seeds);

unrealisticList.add(Items.pumpkin_seeds);

unrealisticList.add(Items.bread);

unrealisticList.add(Items.cake);

}

}

 

 

 

My GitHub for more info: https://github.com/Tikaji/HaloCraft

 

Any help is appreciated.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.