Added AartBluestoke's PR for RoundRobin transactor. Closes #234
This commit is contained in:
parent
30aef0704c
commit
1131a8d661
4 changed files with 61 additions and 43 deletions
|
@ -18,7 +18,7 @@
|
|||
<property name="mcp.version" value="72"/>
|
||||
<property name="forge.version" value="4.0.0.232"/>
|
||||
<property name="bc.version" value="3.2.0"/>
|
||||
<property name="bc.version.full" value="${bc.version}pre4"/>
|
||||
<property name="bc.version.full" value="${bc.version}pre5"/>
|
||||
|
||||
<echo message="Starting build for ${bc.version.full}"/>
|
||||
|
||||
|
@ -77,7 +77,7 @@
|
|||
<exclude name="**/buildcraft/devel"/>
|
||||
</fileset>
|
||||
<filterset>
|
||||
<filter token="VERSION" value="${bc.version}" />
|
||||
<filter token="VERSION" value="${bc.version.full}" />
|
||||
<filter token="BUILD_NUMBER" value="${build.number}" />
|
||||
</filterset>
|
||||
</copy>
|
||||
|
|
53
common/buildcraft/core/inventory/TransactorRoundRobin.java
Normal file
53
common/buildcraft/core/inventory/TransactorRoundRobin.java
Normal file
|
@ -0,0 +1,53 @@
|
|||
package buildcraft.core.inventory;
|
||||
|
||||
import net.minecraft.src.IInventory;
|
||||
import net.minecraft.src.ItemStack;
|
||||
import buildcraft.api.core.Orientations;
|
||||
|
||||
public class TransactorRoundRobin extends TransactorSimple {
|
||||
|
||||
public TransactorRoundRobin(IInventory inventory) {
|
||||
super(inventory);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int inject(ItemStack stack, Orientations orientation, boolean doAdd) {
|
||||
|
||||
int oneLessThanStackSize = stack.stackSize - 1;
|
||||
int added = 0;
|
||||
|
||||
for (int itemLoop = 0; itemLoop < stack.stackSize; ++itemLoop) { // add 1 item n times.
|
||||
|
||||
int minSimilar = Integer.MAX_VALUE;
|
||||
int minSlot = -1;
|
||||
|
||||
for (int j = 0; j < inventory.getSizeInventory() && minSlot > 1; ++j) {
|
||||
ItemStack stackInInventory = inventory.getStackInSlot(j);
|
||||
|
||||
if(stackInInventory == null)
|
||||
continue;
|
||||
|
||||
if(stackInInventory.stackSize >= stackInInventory.getMaxStackSize())
|
||||
continue;
|
||||
|
||||
if(stackInInventory.stackSize >= inventory.getInventoryStackLimit())
|
||||
continue;
|
||||
|
||||
if (stackInInventory.stackSize > 0 && stackInInventory.itemID == stack.itemID
|
||||
&& stackInInventory.getItemDamage() == stack.getItemDamage() && stackInInventory.stackSize < minSimilar) {
|
||||
minSimilar = stackInInventory.stackSize;
|
||||
minSlot = j;
|
||||
}
|
||||
}
|
||||
|
||||
if (minSlot != -1) {
|
||||
added += addToSlot(minSlot, stack, oneLessThanStackSize, doAdd); // add 1 item n times, into the selected slot
|
||||
} else // nowhere to add this
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
return added;
|
||||
}
|
||||
|
||||
}
|
|
@ -6,7 +6,7 @@ import buildcraft.api.core.Orientations;
|
|||
|
||||
public class TransactorSimple extends Transactor {
|
||||
|
||||
private IInventory inventory;
|
||||
protected IInventory inventory;
|
||||
|
||||
public TransactorSimple(IInventory inventory) {
|
||||
this.inventory = inventory;
|
||||
|
|
|
@ -14,8 +14,7 @@ import java.util.LinkedList;
|
|||
import buildcraft.api.core.Orientations;
|
||||
import buildcraft.api.core.Position;
|
||||
import buildcraft.api.inventory.ISpecialInventory;
|
||||
import buildcraft.core.inventory.ITransactor;
|
||||
import buildcraft.core.inventory.TransactorSimple;
|
||||
import buildcraft.core.inventory.TransactorRoundRobin;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
||||
import net.minecraft.src.Container;
|
||||
|
@ -271,47 +270,13 @@ public class TileAutoWorkbench extends TileEntity implements ISpecialInventory {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openChest() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closeChest() {
|
||||
|
||||
}
|
||||
@Override public void openChest() {}
|
||||
@Override public void closeChest() {}
|
||||
|
||||
/* ISPECIALINVENTORY */
|
||||
@Override
|
||||
public int addItem(ItemStack stack, boolean doAdd, Orientations from) {
|
||||
|
||||
ITransactor transactor = new TransactorSimple(this);
|
||||
|
||||
int minSimilar = Integer.MAX_VALUE;
|
||||
int minSlot = -1;
|
||||
|
||||
for (int j = 0; j < getSizeInventory(); ++j) {
|
||||
ItemStack stackInInventory = getStackInSlot(j);
|
||||
|
||||
if (stackInInventory != null && stackInInventory.stackSize > 0 && stackInInventory.itemID == stack.itemID
|
||||
&& stackInInventory.getItemDamage() == stack.getItemDamage() && stackInInventory.stackSize < minSimilar) {
|
||||
minSimilar = stackInInventory.stackSize;
|
||||
minSlot = j;
|
||||
}
|
||||
}
|
||||
|
||||
if (minSlot != -1) {
|
||||
ItemStack added = transactor.add(stack, from, doAdd);
|
||||
ItemStack remaining = stack.copy();
|
||||
remaining.stackSize -= added.stackSize;
|
||||
|
||||
if(doAdd && remaining.stackSize >= 0)
|
||||
added.stackSize += addItem(remaining, doAdd, from);
|
||||
|
||||
return added.stackSize;
|
||||
} else
|
||||
return 0;
|
||||
|
||||
return new TransactorRoundRobin(this).add(stack, from, doAdd).stackSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in a new issue