2014-08-25 07:58:39 -04:00
package WayofTime.alchemicalWizardry.common.items.energy ;
2014-10-13 22:33:20 +02:00
import WayofTime.alchemicalWizardry.AlchemicalWizardry ;
import WayofTime.alchemicalWizardry.api.alchemy.energy.* ;
import WayofTime.alchemicalWizardry.api.items.interfaces.IReagentManipulator ;
import cpw.mods.fml.relauncher.Side ;
import cpw.mods.fml.relauncher.SideOnly ;
2014-08-25 07:58:39 -04:00
import net.minecraft.client.renderer.texture.IIconRegister ;
import net.minecraft.entity.player.EntityPlayer ;
import net.minecraft.item.Item ;
import net.minecraft.item.ItemStack ;
import net.minecraft.nbt.NBTTagCompound ;
import net.minecraft.tileentity.TileEntity ;
import net.minecraft.util.ChatComponentText ;
import net.minecraft.util.IIcon ;
import net.minecraft.util.MovingObjectPosition ;
2015-01-22 20:13:57 +03:00
import net.minecraft.util.StatCollector ;
2014-08-25 07:58:39 -04:00
import net.minecraft.world.World ;
import net.minecraftforge.common.util.ForgeDirection ;
2014-10-13 22:33:20 +02:00
import java.util.LinkedList ;
import java.util.List ;
2014-08-25 07:58:39 -04:00
public class ItemTankSegmenter extends Item implements IReagentManipulator
{
2014-10-13 22:33:20 +02:00
public IIcon crystalBody ;
public IIcon crystalLabel ;
public ItemTankSegmenter ( )
{
super ( ) ;
this . setCreativeTab ( AlchemicalWizardry . tabBloodMagic ) ;
this . hasSubtypes = true ;
this . maxStackSize = 1 ;
}
@Override
public String getItemStackDisplayName ( ItemStack stack )
{
Reagent reagent = this . getReagent ( stack ) ;
String name = super . getItemStackDisplayName ( stack ) ;
if ( reagent ! = null )
{
name = name + " ( " + reagent . name + " ) " ;
}
return name ;
}
@Override
2014-08-25 07:58:39 -04:00
public void addInformation ( ItemStack par1ItemStack , EntityPlayer par2EntityPlayer , List par3List , boolean par4 )
{
2015-01-22 20:13:57 +03:00
par3List . add ( StatCollector . translateToLocal ( " tooltip.tanksegmenter.desc1 " ) ) ;
par3List . add ( StatCollector . translateToLocal ( " tooltip.tanksegmenter.desc2 " ) ) ;
2014-08-25 07:58:39 -04:00
2015-01-16 10:00:50 -05:00
if ( ! ( par1ItemStack . getTagCompound ( ) = = null ) )
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
Reagent reagent = this . getReagent ( par1ItemStack ) ;
if ( reagent ! = null )
{
2015-01-22 20:13:57 +03:00
par3List . add ( StatCollector . translateToLocal ( " tooltip.reagent.selectedreagent " ) + " " + reagent . name ) ;
2014-10-13 22:33:20 +02:00
}
2014-08-25 07:58:39 -04:00
}
}
2014-10-13 22:33:20 +02:00
@Override
2014-08-25 07:58:39 -04:00
@SideOnly ( Side . CLIENT )
public void registerIcons ( IIconRegister iconRegister )
{
this . crystalBody = iconRegister . registerIcon ( " AlchemicalWizardry:TankSegmenter1 " ) ;
this . crystalLabel = iconRegister . registerIcon ( " AlchemicalWizardry:TankSegmenter2 " ) ;
}
2014-10-13 22:33:20 +02:00
@Override
@SideOnly ( Side . CLIENT )
public int getColorFromItemStack ( ItemStack stack , int pass )
{
switch ( pass )
{
case 0 :
return 256 * ( 256 * 255 + 255 ) + 255 ;
case 1 :
Reagent reagent = this . getReagent ( stack ) ;
if ( reagent ! = null )
{
return ( reagent . getColourRed ( ) * 256 * 256 + reagent . getColourGreen ( ) * 256 + reagent . getColourBlue ( ) ) ;
}
break ;
}
return 256 * ( 256 * 255 + 255 ) + 255 ;
}
@Override
@SideOnly ( Side . CLIENT )
public boolean requiresMultipleRenderPasses ( )
{
return true ;
}
@Override
@SideOnly ( Side . CLIENT )
public int getRenderPasses ( int meta )
{
return 2 ;
}
@Override
@SideOnly ( Side . CLIENT )
public IIcon getIcon ( ItemStack stack , int pass )
{
switch ( pass )
{
case 0 :
return this . crystalBody ;
case 1 :
return this . crystalLabel ;
}
return this . itemIcon ;
}
@Override
2014-08-25 07:58:39 -04:00
public ItemStack onItemRightClick ( ItemStack itemStack , World world , EntityPlayer player )
{
2014-10-13 22:33:20 +02:00
if ( world . isRemote )
{
return itemStack ;
}
MovingObjectPosition movingobjectposition = this . getMovingObjectPositionFromPlayer ( world , player , false ) ;
2014-08-25 07:58:39 -04:00
if ( movingobjectposition = = null )
{
return itemStack ;
} else
{
2014-10-13 22:33:20 +02:00
if ( movingobjectposition . typeOfHit = = MovingObjectPosition . MovingObjectType . BLOCK )
2014-08-25 07:58:39 -04:00
{
int x = movingobjectposition . blockX ;
int y = movingobjectposition . blockY ;
int z = movingobjectposition . blockZ ;
TileEntity tile = world . getTileEntity ( x , y , z ) ;
2014-10-13 22:33:20 +02:00
if ( ! ( tile instanceof ISegmentedReagentHandler ) )
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
return itemStack ;
2014-08-25 07:58:39 -04:00
}
2014-10-13 22:33:20 +02:00
ISegmentedReagentHandler reagentHandler = ( ISegmentedReagentHandler ) tile ;
if ( player . isSneaking ( ) )
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
ReagentContainerInfo [ ] infos = reagentHandler . getContainerInfo ( ForgeDirection . UNKNOWN ) ;
if ( infos ! = null )
{
List < Reagent > reagentList = new LinkedList ( ) ;
for ( ReagentContainerInfo info : infos )
{
if ( info ! = null )
{
ReagentStack reagentStack = info . reagent ;
if ( reagentStack ! = null )
{
Reagent reagent = reagentStack . reagent ;
if ( reagent ! = null )
{
reagentList . add ( reagent ) ;
}
}
}
}
Reagent pastReagent = this . getReagent ( itemStack ) ;
boolean goForNext = false ;
boolean hasFound = false ;
for ( Reagent reagent : reagentList )
{
if ( goForNext )
{
goForNext = false ;
break ;
}
if ( reagent = = pastReagent )
{
goForNext = true ;
hasFound = true ;
}
}
if ( hasFound )
{
if ( goForNext )
{
this . setReagentWithNotification ( itemStack , reagentList . get ( 0 ) , player ) ;
}
} else
{
if ( reagentList . size ( ) > = 1 )
{
this . setReagentWithNotification ( itemStack , reagentList . get ( 0 ) , player ) ;
}
}
}
} else
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
Reagent reagent = this . getReagent ( itemStack ) ;
if ( reagent = = null )
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
//TODO: Send message that "All are wiped"
reagentHandler . getAttunedTankMap ( ) . clear ( ) ;
return itemStack ;
2014-08-25 07:58:39 -04:00
}
int totalTankSize = reagentHandler . getNumberOfTanks ( ) ;
int numberAssigned = reagentHandler . getTanksTunedToReagent ( reagent ) + 1 ;
2014-10-13 22:33:20 +02:00
if ( numberAssigned > totalTankSize )
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
numberAssigned = 0 ;
2014-08-25 07:58:39 -04:00
}
2014-10-13 22:33:20 +02:00
2015-01-22 20:13:57 +03:00
player . addChatComponentMessage ( new ChatComponentText ( StatCollector . translateToLocal ( " Tank now has " ) + " " + numberAssigned + " " + " message.tanksegmenter.tankssetto " + " " + reagent . name ) ) ;
2014-10-13 22:33:20 +02:00
2014-08-25 07:58:39 -04:00
reagentHandler . setTanksTunedToReagent ( reagent , numberAssigned ) ;
2014-10-13 22:33:20 +02:00
}
} else if ( movingobjectposition . typeOfHit = = MovingObjectPosition . MovingObjectType . MISS )
2014-08-25 07:58:39 -04:00
{
2014-10-13 22:33:20 +02:00
this . setReagent ( itemStack , null ) ;
2014-08-25 07:58:39 -04:00
}
}
2014-10-13 22:33:20 +02:00
return itemStack ;
}
public Reagent getReagent ( ItemStack stack )
{
if ( ! stack . hasTagCompound ( ) )
{
stack . setTagCompound ( new NBTTagCompound ( ) ) ;
}
NBTTagCompound tag = stack . getTagCompound ( ) ;
return ReagentRegistry . getReagentForKey ( tag . getString ( " reagent " ) ) ;
}
public void setReagent ( ItemStack stack , Reagent reagent )
{
if ( ! stack . hasTagCompound ( ) )
{
stack . setTagCompound ( new NBTTagCompound ( ) ) ;
}
NBTTagCompound tag = stack . getTagCompound ( ) ;
tag . setString ( " reagent " , ReagentRegistry . getKeyForReagent ( reagent ) ) ;
}
public void setReagentWithNotification ( ItemStack stack , Reagent reagent , EntityPlayer player )
{
this . setReagent ( stack , reagent ) ;
if ( reagent ! = null )
{
2015-01-22 20:13:57 +03:00
player . addChatComponentMessage ( new ChatComponentText ( StatCollector . translateToLocal ( " message.tanksegmenter.setto " ) + " " + reagent . name ) ) ;
2014-10-13 22:33:20 +02:00
}
2014-08-25 07:58:39 -04:00
}
}