mffs/src/main/java/mffs/base/BlockMachine.java

170 lines
5.3 KiB
Java

package mffs.base;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import icbm.api.ICamouflageMaterial;
import mffs.MFFSCreativeTab;
import mffs.ModularForceFieldSystem;
import mffs.api.IBiometricIdentifierLink;
import mffs.api.security.Permission;
import mffs.item.card.ItemCardLink;
import mffs.render.RenderBlockHandler;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
import universalelectricity.core.UniversalElectricity;
import universalelectricity.prefab.block.BlockRotatable;
import universalelectricity.prefab.implement.IRedstoneReceptor;
public abstract class BlockMachine extends BlockRotatable implements ICamouflageMaterial {
public BlockMachine(final String name) {
super(UniversalElectricity.machine);
this.setBlockName("mffs:" + name);
this.setHardness(Float.MAX_VALUE);
this.setResistance(100.0f);
this.setStepSound(BlockMachine.soundTypeMetal);
this.setCreativeTab(MFFSCreativeTab.INSTANCE);
}
@Override
public boolean onMachineActivated(
final World world,
final int x,
final int y,
final int z,
final EntityPlayer entityPlayer,
final int side,
final float hitX,
final float hitY,
final float hitZ
) {
if (!world.isRemote) {
if (entityPlayer.getCurrentEquippedItem() != null
&& entityPlayer.getCurrentEquippedItem().getItem()
instanceof ItemCardLink) {
return false;
}
entityPlayer.openGui(
(Object) ModularForceFieldSystem.instance, 0, world, x, y, z
);
}
return true;
}
@Override
public boolean onSneakMachineActivated(
final World world,
final int x,
final int y,
final int z,
final EntityPlayer entityPlayer,
final int side,
final float hitX,
final float hitY,
final float hitZ
) {
return this.onUseWrench(world, x, y, z, entityPlayer, side, hitX, hitY, hitZ);
}
@Override
public boolean onSneakUseWrench(
final World world,
final int x,
final int y,
final int z,
final EntityPlayer entityPlayer,
final int side,
final float hitX,
final float hitY,
final float hitZ
) {
if (!world.isRemote) {
final TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity instanceof IBiometricIdentifierLink) {
if (((IBiometricIdentifierLink) tileEntity).getBiometricIdentifier()
== null) {
this.dropBlockAsItem(
world, x, y, z, world.getBlockMetadata(x, y, z), 0
);
world.setBlockToAir(x, y, z);
return true;
}
if (((IBiometricIdentifierLink) tileEntity)
.getBiometricIdentifier()
.isAccessGranted(
entityPlayer.getDisplayName(),
Permission.SECURITY_CENTER_CONFIGURE
)) {
this.dropBlockAsItem(
world, x, y, z, world.getBlockMetadata(x, y, z), 0
);
world.setBlockToAir(x, y, z);
return true;
}
entityPlayer.addChatMessage(new ChatComponentText(
"["
+ ModularForceFieldSystem.blockBiometricIdentifier.getLocalizedName()
+ "]"
+ " Cannot remove machine! Access denied!"
));
}
}
return false;
}
@Override
public void onNeighborBlockChange(
final World world, final int x, final int y, final int z, final Block block
) {
if (!world.isRemote) {
final TileEntity tileEntity = world.getTileEntity(x, y, z);
if (tileEntity instanceof IRedstoneReceptor) {
if (world.isBlockIndirectlyGettingPowered(x, y, z)) {
((IRedstoneReceptor) tileEntity).onPowerOn();
} else {
((IRedstoneReceptor) tileEntity).onPowerOff();
}
}
}
}
@Override
public float getExplosionResistance(
final Entity entity,
final World world,
final int i,
final int j,
final int k,
final double d,
final double d1,
final double d2
) {
return 100.0f;
}
@Override
public void registerBlockIcons(final IIconRegister par1IconRegister) {
this.blockIcon = par1IconRegister.registerIcon("mffs:machine");
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public int getRenderType() {
return RenderBlockHandler.ID;
}
}