2017-02-23 13:29:43 +01:00
/ *
* This file is part of TechReborn , licensed under the MIT License ( MIT ) .
*
2018-02-11 15:08:08 +01:00
* Copyright ( c ) 2018 TechReborn
2017-02-23 13:29:43 +01:00
*
* Permission is hereby granted , free of charge , to any person obtaining a copy
* of this software and associated documentation files ( the " Software " ) , to deal
* in the Software without restriction , including without limitation the rights
* to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is
* furnished to do so , subject to the following conditions :
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
* IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
* LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE .
* /
2015-04-11 11:37:47 +02:00
package techreborn.tiles ;
import net.minecraft.entity.player.EntityPlayer ;
import net.minecraft.item.ItemStack ;
import net.minecraft.nbt.NBTTagCompound ;
import net.minecraft.network.NetworkManager ;
2016-03-13 17:08:30 +01:00
import net.minecraft.network.play.server.SPacketUpdateTileEntity ;
2015-11-23 15:45:16 +01:00
import net.minecraft.util.EnumFacing ;
2016-11-19 15:41:00 +01:00
import net.minecraftforge.common.capabilities.Capability ;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler ;
2015-11-08 13:15:45 +01:00
import reborncore.api.IListInfoProvider ;
2017-08-30 22:57:14 +02:00
import reborncore.api.IToolDrop ;
2017-12-25 01:18:43 +01:00
import reborncore.api.tile.IInventoryProvider ;
2017-06-09 04:12:58 +02:00
import reborncore.common.registration.RebornRegistry ;
import reborncore.common.registration.impl.ConfigRegistry ;
2016-11-04 21:03:05 +01:00
import reborncore.common.tile.TileLegacyMachineBase ;
2015-11-08 13:15:45 +01:00
import reborncore.common.util.FluidUtils ;
import reborncore.common.util.Inventory ;
import reborncore.common.util.Tank ;
2017-01-08 20:34:46 +01:00
import techreborn.client.container.IContainerProvider ;
import techreborn.client.container.builder.BuiltContainer ;
import techreborn.client.container.builder.ContainerBuilder ;
2015-04-11 19:14:57 +02:00
import techreborn.init.ModBlocks ;
2017-06-09 04:12:58 +02:00
import techreborn.lib.ModInfo ;
2016-04-11 18:50:00 +02:00
import java.util.List ;
2015-04-11 11:37:47 +02:00
2017-06-09 04:12:58 +02:00
@RebornRegistry ( modID = ModInfo . MOD_ID )
2016-11-04 21:03:05 +01:00
public class TileQuantumTank extends TileLegacyMachineBase
2017-08-30 22:57:14 +02:00
implements IInventoryProvider , IToolDrop , IListInfoProvider , IContainerProvider {
2017-06-09 04:12:58 +02:00
2017-06-09 17:47:44 +02:00
@ConfigRegistry ( config = " machines " , category = " quantum_tank " , key = " QuantumTankMaxStorage " , comment = " Maximum amount of millibuckets a Quantum Tank can store " )
2017-06-09 04:12:58 +02:00
public static int maxStorage = Integer . MAX_VALUE ;
// @ConfigRegistry(config = "machines", category = "quantum_tank", key = "QuantumTankWrenchDropRate", comment = "Quantum Tank Wrench Drop Rate")
public static float wrenchDropRate = 1 . 0F ;
2016-03-25 10:47:34 +01:00
2017-06-09 04:12:58 +02:00
public Tank tank = new Tank ( " TileQuantumTank " , maxStorage , this ) ;
2016-03-25 10:47:34 +01:00
public Inventory inventory = new Inventory ( 3 , " TileQuantumTank " , 64 , this ) ;
@Override
2017-01-08 20:34:46 +01:00
public void readFromNBT ( final NBTTagCompound tagCompound ) {
2016-03-25 10:47:34 +01:00
super . readFromNBT ( tagCompound ) ;
2017-01-08 20:34:46 +01:00
this . readFromNBTWithoutCoords ( tagCompound ) ;
2016-03-25 10:47:34 +01:00
}
2017-01-08 20:34:46 +01:00
public void readFromNBTWithoutCoords ( final NBTTagCompound tagCompound ) {
this . tank . readFromNBT ( tagCompound ) ;
2016-03-25 10:47:34 +01:00
}
@Override
2017-01-08 20:34:46 +01:00
public NBTTagCompound writeToNBT ( final NBTTagCompound tagCompound ) {
2016-03-25 10:47:34 +01:00
super . writeToNBT ( tagCompound ) ;
2017-01-08 20:34:46 +01:00
this . writeToNBTWithoutCoords ( tagCompound ) ;
2016-05-18 17:53:54 +02:00
return tagCompound ;
2016-03-25 10:47:34 +01:00
}
2017-01-08 20:34:46 +01:00
public NBTTagCompound writeToNBTWithoutCoords ( final NBTTagCompound tagCompound ) {
this . tank . writeToNBT ( tagCompound ) ;
2016-05-18 17:53:54 +02:00
return tagCompound ;
2016-03-25 10:47:34 +01:00
}
@Override
2017-01-08 20:34:46 +01:00
public void onDataPacket ( final NetworkManager net , final SPacketUpdateTileEntity packet ) {
this . world . markBlockRangeForRenderUpdate ( this . getPos ( ) . getX ( ) , this . getPos ( ) . getY ( ) , this . getPos ( ) . getZ ( ) ,
2017-06-09 04:12:58 +02:00
this . getPos ( ) . getX ( ) , this . getPos ( ) . getY ( ) , this . getPos ( ) . getZ ( ) ) ;
2017-01-08 20:34:46 +01:00
this . readFromNBT ( packet . getNbtCompound ( ) ) ;
2016-03-25 10:47:34 +01:00
}
@Override
2017-09-28 01:03:16 +02:00
public void update ( ) {
super . update ( ) ;
2017-01-08 20:34:46 +01:00
if ( ! this . world . isRemote ) {
if ( FluidUtils . drainContainers ( this . tank , this . inventory , 0 , 1 )
2017-06-09 04:12:58 +02:00
| | FluidUtils . fillContainers ( this . tank , this . inventory , 0 , 1 , this . tank . getFluidType ( ) ) )
2016-12-16 15:11:46 +01:00
this . syncWithAll ( ) ;
2016-03-25 10:47:34 +01:00
}
2018-03-19 00:27:41 +01:00
tank . compareAndUpdate ( ) ;
2016-03-25 10:47:34 +01:00
}
@Override
2017-01-08 20:34:46 +01:00
public boolean hasCapability ( final Capability < ? > capability , final EnumFacing facing ) {
2016-11-25 14:25:51 +01:00
if ( capability = = CapabilityFluidHandler . FLUID_HANDLER_CAPABILITY ) {
2016-11-19 15:41:00 +01:00
return true ;
}
return super . hasCapability ( capability , facing ) ;
2016-03-25 10:47:34 +01:00
}
2017-09-28 01:03:16 +02:00
@SuppressWarnings ( " unchecked " )
2016-03-25 10:47:34 +01:00
@Override
2017-01-08 20:34:46 +01:00
public < T > T getCapability ( final Capability < T > capability , final EnumFacing facing ) {
2016-11-25 14:25:51 +01:00
if ( capability = = CapabilityFluidHandler . FLUID_HANDLER_CAPABILITY ) {
2017-01-08 20:34:46 +01:00
return ( T ) this . tank ;
2016-11-19 15:41:00 +01:00
}
return super . getCapability ( capability , facing ) ;
2016-03-25 10:47:34 +01:00
}
@Override
2017-08-30 22:57:14 +02:00
public ItemStack getToolDrop ( final EntityPlayer entityPlayer ) {
2017-01-08 20:34:46 +01:00
return this . getDropWithNBT ( ) ;
2016-03-25 10:47:34 +01:00
}
2016-10-08 21:46:16 +02:00
public ItemStack getDropWithNBT ( ) {
2017-01-08 20:34:46 +01:00
final NBTTagCompound tileEntity = new NBTTagCompound ( ) ;
final ItemStack dropStack = new ItemStack ( ModBlocks . QUANTUM_TANK , 1 ) ;
this . writeToNBTWithoutCoords ( tileEntity ) ;
2016-03-25 10:47:34 +01:00
dropStack . setTagCompound ( new NBTTagCompound ( ) ) ;
dropStack . getTagCompound ( ) . setTag ( " tileEntity " , tileEntity ) ;
return dropStack ;
}
@Override
2017-01-08 20:34:46 +01:00
public void addInfo ( final List < String > info , final boolean isRealTile ) {
2016-10-08 21:46:16 +02:00
if ( isRealTile ) {
2017-01-08 20:34:46 +01:00
if ( this . tank . getFluid ( ) ! = null ) {
info . add ( this . tank . getFluidAmount ( ) + " of " + this . tank . getFluidType ( ) . getName ( ) ) ;
2016-10-08 21:46:16 +02:00
} else {
2016-03-25 10:47:34 +01:00
info . add ( " Empty " ) ;
}
}
2017-01-08 20:34:46 +01:00
info . add ( " Capacity " + this . tank . getCapacity ( ) + " mb " ) ;
2016-03-25 10:47:34 +01:00
}
2016-04-11 18:43:54 +02:00
@Override
public Inventory getInventory ( ) {
2017-01-08 20:34:46 +01:00
return this . inventory ;
}
@Override
public BuiltContainer createContainer ( final EntityPlayer player ) {
2018-04-14 01:18:13 +02:00
return new ContainerBuilder ( " quantumtank " ) . player ( player . inventory ) . inventory ( ) . hotbar ( )
. addInventory ( ) . tile ( this ) . fluidSlot ( 0 , 80 , 17 ) . outputSlot ( 1 , 80 , 53 ) . addInventory ( )
2017-09-08 21:39:46 +02:00
. create ( this ) ;
2016-04-11 18:43:54 +02:00
}
2018-04-14 01:18:13 +02:00
@Override
public boolean canBeUpgraded ( ) {
return false ;
}
2015-04-11 11:37:47 +02:00
}