Alloy furnace - Output hopper
Takes invalid input and invalid fuel in addition to actual output
This commit is contained in:
parent
c30718080e
commit
258d8b417e
3 changed files with 120 additions and 4 deletions
8
TODO.txt
8
TODO.txt
|
@ -44,10 +44,12 @@ materials.ores No Tin
|
||||||
materials.ores No Zinc
|
materials.ores No Zinc
|
||||||
-------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------
|
||||||
tech.base No Alloy furnace
|
tech.base No Alloy furnace
|
||||||
-> let output hoppers take empty buckets / invalid input
|
-> redstone activation
|
||||||
(make that configurable)
|
-> make redstone activation configurable
|
||||||
|
-> make output hopper configurable
|
||||||
-> comparator signal configuration
|
-> comparator signal configuration
|
||||||
(inventory mode w/ combinations, valid ingredients, burn time, alloying time)
|
(inventory mode w/ combinations, valid ingredients, burn time,
|
||||||
|
alloying time)
|
||||||
-> code clean-up
|
-> code clean-up
|
||||||
tech.base No Coke oven
|
tech.base No Coke oven
|
||||||
-------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------
|
||||||
|
|
114
src/java/mmm/tech/base/TBAlloyFurnaceOutputHopper.java
Normal file
114
src/java/mmm/tech/base/TBAlloyFurnaceOutputHopper.java
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
package mmm.tech.base;
|
||||||
|
|
||||||
|
|
||||||
|
import mmm.utils.UInventoryGrid;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntityFurnace;
|
||||||
|
import net.minecraftforge.items.IItemHandler;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class TBAlloyFurnaceOutputHopper
|
||||||
|
implements IItemHandler
|
||||||
|
{
|
||||||
|
private final TBAlloyFurnaceTileEntity tileEntity;
|
||||||
|
private final int nSlots;
|
||||||
|
|
||||||
|
|
||||||
|
public TBAlloyFurnaceOutputHopper( final TBAlloyFurnaceTileEntity tileEntity )
|
||||||
|
{
|
||||||
|
this.tileEntity = tileEntity;
|
||||||
|
this.nSlots = this.tileEntity.input.getSizeInventory( ) + this.tileEntity.fuel.getSizeInventory( )
|
||||||
|
+ this.tileEntity.output.getSizeInventory( );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlots( )
|
||||||
|
{
|
||||||
|
return this.nSlots;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getStackInSlot( final int slot )
|
||||||
|
{
|
||||||
|
final int nInputSlots = this.tileEntity.input.getSizeInventory( );
|
||||||
|
if ( slot < nInputSlots ) {
|
||||||
|
return this.tileEntity.input.getStackInSlot( slot );
|
||||||
|
} else {
|
||||||
|
final int nFuelSlots = this.tileEntity.fuel.getSizeInventory( );
|
||||||
|
if ( slot < nInputSlots + nFuelSlots ) {
|
||||||
|
return this.tileEntity.fuel.getStackInSlot( slot - nInputSlots );
|
||||||
|
} else {
|
||||||
|
return this.tileEntity.output.getStackInSlot( slot - nInputSlots - nFuelSlots );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack insertItem( final int slot , final ItemStack stack , final boolean simulate )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack extractItem( final int slot , final int amount , final boolean simulate )
|
||||||
|
{
|
||||||
|
if ( amount == 0 ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ItemStack stackInSlot = this.getStackInSlot( slot );
|
||||||
|
|
||||||
|
if ( stackInSlot == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extracting invalid input items
|
||||||
|
final int nInputSlots = this.tileEntity.input.getSizeInventory( );
|
||||||
|
if ( slot < nInputSlots ) {
|
||||||
|
if ( this.tileEntity.recipe.hasInput( stackInSlot ) ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// XXX check configuration
|
||||||
|
return this.doExtractItems( this.tileEntity.input , stackInSlot , slot , amount , simulate );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extracting invalid fuel items
|
||||||
|
final int nFuelSlots = this.tileEntity.fuel.getSizeInventory( );
|
||||||
|
if ( slot < nInputSlots + nFuelSlots ) {
|
||||||
|
if ( TileEntityFurnace.isItemFuel( stackInSlot ) ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return this.doExtractItems( this.tileEntity.fuel , stackInSlot , slot - nInputSlots , amount , simulate );
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.doExtractItems( this.tileEntity.output , stackInSlot , slot - ( nInputSlots + nFuelSlots ) ,
|
||||||
|
amount , simulate );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private ItemStack doExtractItems( final UInventoryGrid inventory , final ItemStack stackInSlot , final int slot ,
|
||||||
|
final int amount , final boolean simulate )
|
||||||
|
{
|
||||||
|
if ( simulate ) {
|
||||||
|
if ( stackInSlot.stackSize < amount ) {
|
||||||
|
return stackInSlot.copy( );
|
||||||
|
} else {
|
||||||
|
final ItemStack copy = stackInSlot.copy( );
|
||||||
|
copy.stackSize = amount;
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
final int m = Math.min( stackInSlot.stackSize , amount );
|
||||||
|
|
||||||
|
final ItemStack decrStackSize = inventory.decrStackSize( slot , m );
|
||||||
|
inventory.markDirty( );
|
||||||
|
return decrStackSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -52,7 +52,7 @@ public class TBAlloyFurnaceTileEntity
|
||||||
|
|
||||||
this.inputHopper = new InvWrapper( this.input );
|
this.inputHopper = new InvWrapper( this.input );
|
||||||
this.fuelHopper = new InvWrapper( this.fuel );
|
this.fuelHopper = new InvWrapper( this.fuel );
|
||||||
this.outputHopper = new InvWrapper( this.output );
|
this.outputHopper = new TBAlloyFurnaceOutputHopper( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in a new issue