BloodMagic/src/main/java/WayofTime/bloodmagic/compress/BaseCompressionHandler.java

92 lines
2.6 KiB
Java
Raw Normal View History

2015-12-29 00:09:51 +00:00
package WayofTime.bloodmagic.compress;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
2017-08-16 04:30:48 +00:00
public class BaseCompressionHandler extends CompressionHandler {
2015-12-29 00:09:51 +00:00
private final ItemStack required;
private final ItemStack result;
private final int leftover;
2017-08-16 04:30:48 +00:00
public BaseCompressionHandler(ItemStack requested, ItemStack result, int leftover) {
2015-12-29 00:09:51 +00:00
super();
this.required = requested;
this.result = result;
this.leftover = leftover;
}
2017-08-16 04:30:48 +00:00
public ItemStack getResultStack() {
2015-12-29 00:09:51 +00:00
return this.result.copy();
}
2017-08-16 04:30:48 +00:00
public ItemStack getRequiredStack() {
2015-12-29 00:09:51 +00:00
return this.required.copy();
}
@Override
2017-08-16 04:30:48 +00:00
public ItemStack compressInventory(ItemStack[] inv, World world) {
2015-12-29 00:09:51 +00:00
int remaining = this.getRemainingNeeded(inv);
2017-08-16 04:30:48 +00:00
if (remaining <= 0) {
2015-12-29 00:09:51 +00:00
this.drainInventory(inv);
return this.getResultStack();
}
2016-12-13 03:56:36 +00:00
return ItemStack.EMPTY;
2015-12-29 00:09:51 +00:00
}
2017-08-16 04:30:48 +00:00
public int getRemainingNeeded(ItemStack[] inv) {
2015-12-29 00:09:51 +00:00
return iterateThroughInventory(inv, false);
}
2017-08-16 04:30:48 +00:00
public int drainInventory(ItemStack[] inv) {
2015-12-29 00:09:51 +00:00
return iterateThroughInventory(inv, true);
}
2017-08-16 04:30:48 +00:00
public int iterateThroughInventory(ItemStack[] inv, boolean doDrain) {
2016-12-13 03:56:36 +00:00
int needed = this.required.getCount();
2015-12-29 00:09:51 +00:00
int kept = this.getLeftover();
int i = -1;
2017-08-16 04:30:48 +00:00
for (ItemStack invStack : inv) {
2015-12-29 00:09:51 +00:00
i++;
2017-08-16 04:30:48 +00:00
if (invStack == null) {
2015-12-29 00:09:51 +00:00
continue;
}
2017-08-16 04:30:48 +00:00
if (invStack.isItemEqual(this.required) && (invStack.getTagCompound() == null ? this.required.getTagCompound() == null : invStack.getTagCompound().equals(this.required.getTagCompound()))) {
2016-12-13 03:56:36 +00:00
int stackSize = invStack.getCount();
2015-12-29 00:09:51 +00:00
int used = 0;
2017-08-16 04:30:48 +00:00
if (kept > 0) {
2015-12-29 00:09:51 +00:00
int remainingFromStack = Math.max(stackSize - kept, 0);
used += stackSize - remainingFromStack;
}
kept -= used;
2017-08-16 04:30:48 +00:00
if (kept <= 0 && needed > 0) {
2015-12-29 00:09:51 +00:00
int remainingFromStack = Math.max(stackSize - used - needed, 0);
2017-08-16 04:30:48 +00:00
if (doDrain) {
2016-12-13 03:56:36 +00:00
invStack.setCount(remainingFromStack + used);
2017-08-16 04:30:48 +00:00
if (invStack.isEmpty()) {
2016-12-13 03:56:36 +00:00
inv[i] = ItemStack.EMPTY;
2015-12-29 00:09:51 +00:00
}
}
needed -= (stackSize - used - remainingFromStack);
}
2017-08-16 04:30:48 +00:00
if (needed <= 0) {
2015-12-29 00:09:51 +00:00
return 0;
}
}
}
return needed;
}
2017-08-16 04:30:48 +00:00
public int getLeftover() {
2015-12-29 00:09:51 +00:00
return this.leftover;
}
}