2015-10-18 19:21:32 +02:00
/ *
2016-05-16 22:52:27 +02:00
* This file ( " BlockLaserRelay.java " ) is part of the Actually Additions mod for Minecraft .
2015-10-18 19:21:32 +02:00
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
2016-05-16 22:52:27 +02:00
* http : //ellpeck.de/actaddlicense
2015-10-18 19:21:32 +02:00
* View the source code at https : //github.com/Ellpeck/ActuallyAdditions
*
2016-05-16 22:54:42 +02:00
* © 2015 - 2016 Ellpeck
2015-10-18 19:21:32 +02:00
* /
2016-01-05 04:47:35 +01:00
package de.ellpeck.actuallyadditions.mod.blocks ;
2015-10-18 19:21:32 +02:00
2016-11-16 18:51:23 +01:00
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI ;
import de.ellpeck.actuallyadditions.api.laser.Network ;
2016-05-10 22:19:15 +02:00
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions ;
2016-01-05 04:47:35 +01:00
import de.ellpeck.actuallyadditions.mod.blocks.base.BlockContainerBase ;
2017-03-10 23:29:16 +01:00
import de.ellpeck.actuallyadditions.mod.config.ConfigValues ;
2016-05-10 22:19:15 +02:00
import de.ellpeck.actuallyadditions.mod.inventory.GuiHandler ;
2017-01-18 14:55:13 +01:00
import de.ellpeck.actuallyadditions.mod.items.ItemLaserWrench ;
2016-07-14 16:44:01 +02:00
import de.ellpeck.actuallyadditions.mod.tile.* ;
2016-11-16 18:51:23 +01:00
import de.ellpeck.actuallyadditions.mod.util.StackUtil ;
import de.ellpeck.actuallyadditions.mod.util.StringUtil ;
2016-03-18 23:47:22 +01:00
import net.minecraft.block.SoundType ;
2015-10-18 19:21:32 +02:00
import net.minecraft.block.material.Material ;
2016-01-08 15:21:05 +01:00
import net.minecraft.block.properties.PropertyInteger ;
2016-01-07 19:47:53 +01:00
import net.minecraft.block.state.IBlockState ;
2016-11-16 18:51:23 +01:00
import net.minecraft.client.Minecraft ;
import net.minecraft.client.gui.ScaledResolution ;
2016-01-07 19:47:53 +01:00
import net.minecraft.entity.EntityLivingBase ;
2016-05-10 22:19:15 +02:00
import net.minecraft.entity.player.EntityPlayer ;
2015-10-18 19:21:32 +02:00
import net.minecraft.item.EnumRarity ;
2016-11-16 18:51:23 +01:00
import net.minecraft.item.ItemCompass ;
2015-10-18 19:21:32 +02:00
import net.minecraft.item.ItemStack ;
import net.minecraft.tileentity.TileEntity ;
2016-01-07 19:47:53 +01:00
import net.minecraft.util.EnumFacing ;
2016-05-10 22:19:15 +02:00
import net.minecraft.util.EnumHand ;
2016-06-11 13:34:18 +02:00
import net.minecraft.util.math.AxisAlignedBB ;
2016-03-18 23:47:22 +01:00
import net.minecraft.util.math.BlockPos ;
2016-11-16 18:51:23 +01:00
import net.minecraft.util.math.RayTraceResult ;
import net.minecraft.util.text.TextFormatting ;
2016-06-11 13:34:18 +02:00
import net.minecraft.world.IBlockAccess ;
2015-10-18 19:21:32 +02:00
import net.minecraft.world.World ;
2016-11-16 18:51:23 +01:00
import net.minecraftforge.common.MinecraftForge ;
import net.minecraftforge.event.entity.player.PlayerInteractEvent ;
import net.minecraftforge.fml.common.eventhandler.Event ;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent ;
2016-11-18 06:40:08 +01:00
import net.minecraftforge.fml.relauncher.Side ;
import net.minecraftforge.fml.relauncher.SideOnly ;
2015-10-18 19:21:32 +02:00
2016-11-16 18:51:23 +01:00
public class BlockLaserRelay extends BlockContainerBase implements IHudDisplay {
2015-10-18 19:21:32 +02:00
2016-06-11 13:34:18 +02:00
//This took way too much fiddling around. I'm not good with numbers.
private static final float F = 1 / 16F ;
2016-11-08 23:04:05 +01:00
private static final AxisAlignedBB AABB_UP = new AxisAlignedBB ( 2 * F , 0 , 2 * F , 1 - 2 * F , 10 * F , 1 - 2 * F ) ;
private static final AxisAlignedBB AABB_DOWN = new AxisAlignedBB ( 2 * F , 6 * F , 2 * F , 1 - 2 * F , 1 , 1 - 2 * F ) ;
private static final AxisAlignedBB AABB_NORTH = new AxisAlignedBB ( 2 * F , 2 * F , 6 * F , 1 - 2 * F , 1 - 2 * F , 1 ) ;
private static final AxisAlignedBB AABB_EAST = new AxisAlignedBB ( 0 , 2 * F , 2 * F , 1 - 6 * F , 1 - 2 * F , 1 - 2 * F ) ;
private static final AxisAlignedBB AABB_SOUTH = new AxisAlignedBB ( 2 * F , 2 * F , 0 , 1 - 2 * F , 1 - 2 * F , 1 - 6 * F ) ;
private static final AxisAlignedBB AABB_WEST = new AxisAlignedBB ( 6 * F , 2 * F , 2 * F , 1 , 1 - 2 * F , 1 - 2 * F ) ;
2016-06-11 13:34:18 +02:00
2016-01-08 15:21:05 +01:00
private static final PropertyInteger META = PropertyInteger . create ( " meta " , 0 , 5 ) ;
2016-05-19 20:05:12 +02:00
private final Type type ;
2016-01-08 15:21:05 +01:00
2016-05-10 22:19:15 +02:00
public BlockLaserRelay ( String name , Type type ) {
2016-04-20 21:39:03 +02:00
super ( Material . ROCK , name ) ;
2015-10-18 19:21:32 +02:00
this . setHarvestLevel ( " pickaxe " , 0 ) ;
this . setHardness ( 1 . 5F ) ;
this . setResistance ( 10 . 0F ) ;
2016-04-20 21:39:03 +02:00
this . setSoundType ( SoundType . STONE ) ;
2016-05-08 21:09:58 +02:00
2016-05-10 22:19:15 +02:00
this . type = type ;
2016-11-16 18:51:23 +01:00
if ( this . type . ordinal ( ) = = 0 ) {
MinecraftForge . EVENT_BUS . register ( this ) ;
}
}
@SubscribeEvent
public void onBlockRightClick ( PlayerInteractEvent . RightClickBlock event ) {
EntityPlayer player = event . getEntityPlayer ( ) ;
World world = event . getWorld ( ) ;
ItemStack stack = event . getItemStack ( ) ;
BlockPos pos = event . getPos ( ) ;
if ( player ! = null & & world ! = null & & StackUtil . isValid ( stack ) & & pos ! = null ) {
IBlockState state = event . getWorld ( ) . getBlockState ( pos ) ;
if ( state ! = null & & state . getBlock ( ) instanceof BlockLaserRelay ) {
if ( stack . getItem ( ) instanceof ItemCompass & & player . isSneaking ( ) ) {
event . setUseBlock ( Event . Result . ALLOW ) ;
}
}
}
2015-10-18 19:21:32 +02:00
}
2016-06-11 13:34:18 +02:00
@Override
public AxisAlignedBB getBoundingBox ( IBlockState state , IBlockAccess source , BlockPos pos ) {
switch ( this . getMetaFromState ( state ) ) {
case 1 :
return AABB_UP ;
case 2 :
return AABB_NORTH ;
case 3 :
return AABB_SOUTH ;
case 4 :
return AABB_WEST ;
case 5 :
return AABB_EAST ;
default :
return AABB_DOWN ;
}
}
2016-01-08 15:21:05 +01:00
@Override
2016-03-18 23:47:22 +01:00
public boolean isFullCube ( IBlockState state ) {
2016-02-01 17:49:55 +01:00
return false ;
2016-01-08 15:21:05 +01:00
}
2015-12-23 22:44:25 +01:00
@Override
2016-03-18 23:47:22 +01:00
public boolean isOpaqueCube ( IBlockState state ) {
2015-10-18 19:21:32 +02:00
return false ;
}
2016-05-29 23:49:35 +02:00
2015-10-23 16:54:33 +02:00
@Override
2016-01-07 19:47:53 +01:00
public IBlockState onBlockPlaced ( World world , BlockPos pos , EnumFacing side , float hitX , float hitY , float hitZ , int meta , EntityLivingBase base ) {
2016-01-09 14:35:04 +01:00
return this . getStateFromMeta ( side . ordinal ( ) ) ;
2015-10-23 16:54:33 +02:00
}
2015-10-18 19:21:32 +02:00
@Override
2015-10-23 16:48:56 +02:00
public EnumRarity getRarity ( ItemStack stack ) {
2016-01-07 19:47:53 +01:00
return EnumRarity . EPIC ;
2015-10-18 19:21:32 +02:00
}
2016-02-01 17:49:55 +01:00
@Override
protected PropertyInteger getMetaProperty ( ) {
return META ;
}
2016-05-10 22:19:15 +02:00
@Override
public boolean onBlockActivated ( World world , BlockPos pos , IBlockState state , EntityPlayer player , EnumHand hand , ItemStack stack , EnumFacing par6 , float par7 , float par8 , float par9 ) {
2017-01-18 15:18:33 +01:00
TileEntity tile = world . getTileEntity ( pos ) ;
if ( tile instanceof TileEntityLaserRelay ) {
TileEntityLaserRelay relay = ( TileEntityLaserRelay ) tile ;
2016-11-16 18:51:23 +01:00
2017-03-10 23:29:16 +01:00
if ( StackUtil . isValid ( stack ) & & stack . getItem ( ) = = ConfigValues . itemCompassConfigurator ) {
2017-01-18 14:55:13 +01:00
if ( ! world . isRemote ) {
relay . onCompassAction ( player ) ;
2016-11-16 18:51:23 +01:00
2017-01-18 15:04:58 +01:00
Network network = relay . getNetwork ( ) ;
2017-01-18 14:55:13 +01:00
if ( network ! = null ) {
network . changeAmount + + ;
}
2016-11-16 18:51:23 +01:00
2017-01-18 14:55:13 +01:00
relay . markDirty ( ) ;
relay . sendUpdate ( ) ;
}
2016-11-16 18:51:23 +01:00
return true ;
}
2017-01-18 14:55:13 +01:00
else if ( relay instanceof TileEntityLaserRelayItemWhitelist ) {
2016-05-10 22:19:15 +02:00
if ( ! world . isRemote ) {
player . openGui ( ActuallyAdditions . instance , GuiHandler . GuiTypes . LASER_RELAY_ITEM_WHITELIST . ordinal ( ) , world , pos . getX ( ) , pos . getY ( ) , pos . getZ ( ) ) ;
}
return true ;
}
}
return false ;
}
2015-10-23 16:48:56 +02:00
@Override
2016-05-29 23:49:35 +02:00
public TileEntity createNewTileEntity ( World world , int i ) {
2016-05-10 22:19:15 +02:00
switch ( this . type ) {
case ITEM :
2016-05-14 17:50:10 +02:00
return new TileEntityLaserRelayItem ( ) ;
2016-05-10 22:19:15 +02:00
case ITEM_WHITELIST :
2016-05-14 17:50:10 +02:00
return new TileEntityLaserRelayItemWhitelist ( ) ;
2016-07-14 16:44:01 +02:00
case ENERGY_ADVANCED :
return new TileEntityLaserRelayEnergyAdvanced ( ) ;
case ENERGY_EXTREME :
return new TileEntityLaserRelayEnergyExtreme ( ) ;
2016-09-01 20:50:44 +02:00
case FLUIDS :
return new TileEntityLaserRelayFluids ( ) ;
2016-05-10 22:19:15 +02:00
default :
2016-05-14 17:50:10 +02:00
return new TileEntityLaserRelayEnergy ( ) ;
2016-05-10 22:19:15 +02:00
}
}
2016-11-16 18:51:23 +01:00
@Override
2016-11-18 06:40:08 +01:00
@SideOnly ( Side . CLIENT )
2016-11-16 18:51:23 +01:00
public void displayHud ( Minecraft minecraft , EntityPlayer player , ItemStack stack , RayTraceResult posHit , ScaledResolution resolution ) {
2017-01-18 14:55:13 +01:00
if ( posHit ! = null & & posHit . getBlockPos ( ) ! = null & & minecraft . theWorld ! = null & & StackUtil . isValid ( stack ) ) {
2017-03-10 23:29:16 +01:00
boolean compass = stack . getItem ( ) = = ConfigValues . itemCompassConfigurator ;
2017-01-18 14:55:13 +01:00
if ( compass | | stack . getItem ( ) instanceof ItemLaserWrench ) {
TileEntity tile = minecraft . theWorld . getTileEntity ( posHit . getBlockPos ( ) ) ;
if ( tile instanceof TileEntityLaserRelay ) {
TileEntityLaserRelay relay = ( TileEntityLaserRelay ) tile ;
String strg = relay . getExtraDisplayString ( ) ;
minecraft . fontRendererObj . drawStringWithShadow ( strg , resolution . getScaledWidth ( ) / 2 + 5 , resolution . getScaledHeight ( ) / 2 + 5 , StringUtil . DECIMAL_COLOR_WHITE ) ;
String expl ;
if ( compass ) {
expl = relay . getCompassDisplayString ( ) ;
}
else {
2017-03-10 23:29:16 +01:00
expl = TextFormatting . GRAY . toString ( ) + TextFormatting . ITALIC + " Hold a " + StringUtil . localize ( ConfigValues . itemCompassConfigurator . getUnlocalizedName ( ) + " .name " ) + " to modify! " ;
2017-01-18 14:55:13 +01:00
}
StringUtil . drawSplitString ( minecraft . fontRendererObj , expl , resolution . getScaledWidth ( ) / 2 + 5 , resolution . getScaledHeight ( ) / 2 + 15 , Integer . MAX_VALUE , StringUtil . DECIMAL_COLOR_WHITE , true ) ;
2016-11-16 18:51:23 +01:00
}
}
}
}
2016-05-10 22:19:15 +02:00
public enum Type {
2016-07-14 16:44:01 +02:00
ENERGY_BASIC ,
ENERGY_ADVANCED ,
ENERGY_EXTREME ,
2016-09-01 20:50:44 +02:00
FLUIDS ,
2016-05-10 22:19:15 +02:00
ITEM ,
ITEM_WHITELIST
2015-10-18 19:21:32 +02:00
}
}