Fixed imprinter outputing only stacks of one
This commit is contained in:
parent
23e432ac23
commit
589290c463
4 changed files with 75 additions and 22 deletions
41
src/minecraft/assemblyline/common/Pair.java
Normal file
41
src/minecraft/assemblyline/common/Pair.java
Normal file
|
@ -0,0 +1,41 @@
|
|||
package assemblyline.common;
|
||||
|
||||
public class Pair<L, R>
|
||||
{
|
||||
private final L left;
|
||||
private final R right;
|
||||
|
||||
public Pair(L left, R right)
|
||||
{
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
}
|
||||
|
||||
public L getKey()
|
||||
{
|
||||
return left;
|
||||
}
|
||||
|
||||
public R getValue()
|
||||
{
|
||||
return right;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return left.hashCode() ^ right.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o)
|
||||
{
|
||||
if (o == null)
|
||||
return false;
|
||||
if (!(o instanceof Pair))
|
||||
return false;
|
||||
Pair pairo = (Pair) o;
|
||||
return this.left.equals(pairo.getKey()) && this.right.equals(pairo.getValue());
|
||||
}
|
||||
|
||||
}
|
|
@ -111,28 +111,30 @@ public class BlockConveyorBelt extends BlockMachine
|
|||
|
||||
if (tileEntity.isRunning())
|
||||
{
|
||||
float acceleration = tileEntity.acceleration;
|
||||
float maxSpeed = tileEntity.maxSpeed;
|
||||
|
||||
SlantType slantType = tileEntity.getSlant();
|
||||
ForgeDirection direction = tileEntity.getDirection();
|
||||
|
||||
float modifier = 1;
|
||||
|
||||
if (entity instanceof EntityLiving)
|
||||
{
|
||||
modifier = 10;
|
||||
acceleration *= 5;
|
||||
maxSpeed *= 10;
|
||||
}
|
||||
|
||||
// Move the entity based on the conveyor belt's direction.
|
||||
entity.addVelocity(direction.offsetX * tileEntity.acceleration * modifier, 0, direction.offsetZ * tileEntity.acceleration * modifier);
|
||||
entity.addVelocity(direction.offsetX * acceleration, 0, direction.offsetZ * acceleration);
|
||||
|
||||
if (direction.offsetX != 0 && Math.abs(entity.motionX) > tileEntity.maxSpeed)
|
||||
if (direction.offsetX != 0 && Math.abs(entity.motionX) > maxSpeed)
|
||||
{
|
||||
entity.motionX = direction.offsetX * tileEntity.maxSpeed;
|
||||
entity.motionX = direction.offsetX * maxSpeed;
|
||||
entity.motionZ = 0;
|
||||
}
|
||||
|
||||
if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > tileEntity.maxSpeed)
|
||||
if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > maxSpeed)
|
||||
{
|
||||
entity.motionZ = direction.offsetZ * tileEntity.maxSpeed;
|
||||
entity.motionZ = direction.offsetZ * maxSpeed;
|
||||
entity.motionX = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import net.minecraft.world.World;
|
|||
import net.minecraftforge.oredict.ShapedOreRecipe;
|
||||
import net.minecraftforge.oredict.ShapelessOreRecipe;
|
||||
import universalelectricity.core.vector.Vector3;
|
||||
import assemblyline.common.Pair;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
|
||||
public class ContainerImprinter extends Container implements IInventory, ISlotWatcher
|
||||
|
@ -79,8 +80,8 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
|
||||
if (slot == 2)
|
||||
{
|
||||
setInventorySlotContents(0, null); // Prevents filter from being
|
||||
// duplicated
|
||||
// Prevents filter from being duplicated
|
||||
this.setInventorySlotContents(0, null);
|
||||
}
|
||||
|
||||
if (slot > 4)
|
||||
|
@ -245,9 +246,12 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
|
||||
if (outputStack != null)
|
||||
{
|
||||
if (this.getIdealRecipe(outputStack) != null)
|
||||
Pair<ItemStack, ItemStack[]> idealRecipe = this.getIdealRecipe(outputStack);
|
||||
|
||||
if (idealRecipe != null)
|
||||
{
|
||||
this.setInventorySlotContents(4, outputStack);
|
||||
System.out.println(idealRecipe.getKey().stackSize);
|
||||
this.setInventorySlotContents(4, idealRecipe.getKey());
|
||||
didCraft = true;
|
||||
}
|
||||
}
|
||||
|
@ -267,7 +271,7 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
*
|
||||
* @return Required Items
|
||||
*/
|
||||
public ItemStack[] getIdealRecipe(ItemStack outputItem)
|
||||
public Pair<ItemStack, ItemStack[]> getIdealRecipe(ItemStack outputItem)
|
||||
{
|
||||
for (Object object : CraftingManager.getInstance().getRecipeList())
|
||||
{
|
||||
|
@ -279,17 +283,17 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
{
|
||||
if (object instanceof ShapedRecipes)
|
||||
{
|
||||
if (this.doesMatch(((ShapedRecipes) object).recipeItems, outputItem)) { return ((ShapedRecipes) object).recipeItems; }
|
||||
if (this.hasResource(((ShapedRecipes) object).recipeItems)) { return new Pair<ItemStack, ItemStack[]>(((ShapedRecipes) object).getRecipeOutput().copy(), ((ShapedRecipes) object).recipeItems); }
|
||||
}
|
||||
else if (object instanceof ShapelessRecipes)
|
||||
{
|
||||
if (this.doesMatch(((ShapelessRecipes) object).recipeItems.toArray(new ItemStack[1]), outputItem)) { return (ItemStack[]) ((ShapelessRecipes) object).recipeItems.toArray(new ItemStack[1]); }
|
||||
if (this.hasResource(((ShapelessRecipes) object).recipeItems.toArray(new ItemStack[1]))) { return new Pair<ItemStack, ItemStack[]>(((ShapedRecipes) object).getRecipeOutput().copy(), (ItemStack[]) ((ShapelessRecipes) object).recipeItems.toArray(new ItemStack[1])); }
|
||||
}
|
||||
else if (object instanceof ShapedOreRecipe)
|
||||
{
|
||||
ShapedOreRecipe oreRecipe = (ShapedOreRecipe) object;
|
||||
Object[] oreRecipeInput = (Object[]) ReflectionHelper.getPrivateValue(ShapedOreRecipe.class, oreRecipe, "input");
|
||||
if (doesMatch(oreRecipeInput, outputItem))
|
||||
if (hasResource(oreRecipeInput))
|
||||
{
|
||||
ArrayList<ItemStack> finalRecipe = new ArrayList<ItemStack>();
|
||||
for (Object ingredientListObject : oreRecipeInput)
|
||||
|
@ -312,14 +316,14 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
}
|
||||
}
|
||||
}
|
||||
if (finalRecipe.size() == oreRecipeInput.length) { return finalRecipe.toArray(new ItemStack[1]); }
|
||||
if (finalRecipe.size() == oreRecipeInput.length) { return new Pair<ItemStack, ItemStack[]>(((ShapedRecipes) object).getRecipeOutput().copy(), finalRecipe.toArray(new ItemStack[1])); }
|
||||
}
|
||||
}
|
||||
else if (object instanceof ShapelessOreRecipe)
|
||||
{
|
||||
ShapelessOreRecipe oreRecipe = (ShapelessOreRecipe) object;
|
||||
ArrayList oreRecipeInput = (ArrayList) ReflectionHelper.getPrivateValue(ShapelessOreRecipe.class, oreRecipe, "input");
|
||||
if (doesMatch(oreRecipeInput.toArray(), outputItem))
|
||||
if (hasResource(oreRecipeInput.toArray()))
|
||||
{
|
||||
ArrayList<ItemStack> finalRecipe = new ArrayList<ItemStack>();
|
||||
for (Object ingredientListObject : oreRecipeInput)
|
||||
|
@ -348,7 +352,7 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
}
|
||||
}
|
||||
}
|
||||
if (finalRecipe.size() == oreRecipeInput.size()) { return finalRecipe.toArray(new ItemStack[1]); }
|
||||
if (finalRecipe.size() == oreRecipeInput.size()) { return new Pair<ItemStack, ItemStack[]>(((ShapedRecipes) object).getRecipeOutput().copy(), finalRecipe.toArray(new ItemStack[1])); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -359,7 +363,12 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
return null;
|
||||
}
|
||||
|
||||
private boolean doesMatch(Object[] recipeItems, ItemStack outputItem)
|
||||
/**
|
||||
* Returns if players has the following resource required.
|
||||
*
|
||||
* @param recipeItems - The items to be checked for the recipes.
|
||||
*/
|
||||
private boolean hasResource(Object[] recipeItems)
|
||||
{
|
||||
int itemMatch = 0;
|
||||
|
||||
|
@ -381,6 +390,7 @@ public class ContainerImprinter extends Container implements IInventory, ISlotWa
|
|||
{
|
||||
// TODO Do NBT CHecking
|
||||
itemMatch++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ public class SlotCraftingResult extends Slot
|
|||
|
||||
if (this.getStack() != null)
|
||||
{
|
||||
ItemStack[] requiredItems = this.container.getIdealRecipe(this.getStack()).clone();
|
||||
ItemStack[] requiredItems = this.container.getIdealRecipe(this.getStack()).getValue().clone();
|
||||
|
||||
if (requiredItems != null)
|
||||
{
|
||||
|
@ -63,7 +63,7 @@ public class SlotCraftingResult extends Slot
|
|||
{
|
||||
if (this.getStack() != null)
|
||||
{
|
||||
ItemStack[] idealRecipe = this.container.getIdealRecipe(this.getStack());
|
||||
ItemStack[] idealRecipe = this.container.getIdealRecipe(this.getStack()).getValue();
|
||||
if (idealRecipe != null)
|
||||
{
|
||||
ItemStack[] requiredItems = idealRecipe.clone();
|
||||
|
|
Loading…
Reference in a new issue