mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
106 lines
3.1 KiB
Java
106 lines
3.1 KiB
Java
package com.hbm.blocks.machine.pile;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import com.hbm.blocks.ModBlocks;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.lib.RefStrings;
|
|
|
|
import api.hbm.block.IToolable;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.Block;
|
|
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.util.IIcon;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
public class BlockGraphiteRod extends BlockGraphiteDrilledBase implements IToolable {
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
protected IIcon outIcon;
|
|
@SideOnly(Side.CLIENT)
|
|
protected IIcon outIconAluminum;
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister iconRegister) {
|
|
super.registerBlockIcons(iconRegister);
|
|
this.blockIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_rod_in_aluminum");
|
|
this.outIconAluminum = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_rod_out_aluminum");
|
|
this.outIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_graphite_rod_out");
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public IIcon getIcon(int side, int metadata) {
|
|
|
|
int cfg = metadata & 3;
|
|
|
|
if(side == cfg * 2 || side == cfg * 2 + 1) {
|
|
if((metadata & 4) == 4)
|
|
return ((metadata & 8) > 0) ? this.outIconAluminum : this.blockIconAluminum;
|
|
return ((metadata & 8) > 0) ? this.outIcon : this.blockIcon;
|
|
}
|
|
|
|
return this.sideIcon;
|
|
}
|
|
|
|
@Override
|
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
|
|
|
|
if(player.isSneaking())
|
|
return false;
|
|
|
|
int oldMeta = world.getBlockMetadata(x, y, z);
|
|
int newMeta = oldMeta ^ 8; //toggle bit #4
|
|
int pureMeta = oldMeta & 3; //in case the bit was set
|
|
|
|
if(side == pureMeta * 2 || side == pureMeta * 2 + 1) {
|
|
|
|
if(world.isRemote)
|
|
return true;
|
|
|
|
world.setBlockMetadataWithNotify(x, y, z, newMeta, 3);
|
|
|
|
world.playSoundEffect(x + 0.5D, y + 0.5D, z + 0.5D, "random.click", 0.3F, pureMeta == (oldMeta & 11) ? 0.75F : 0.65F);
|
|
|
|
ForgeDirection dir = ForgeDirection.getOrientation(side);
|
|
|
|
if(dir == ForgeDirection.UNKNOWN)
|
|
return true;
|
|
|
|
for(int i = -1; i <= 1; i += 1) {
|
|
|
|
//why is XZ switched? i don't know, man
|
|
/* ForgeDirection's getOrientation method operates on actual sides, not n/s or w/e, so you had to switch x & z for w/e to work since it was actually returning north. also meant that
|
|
n/s hasn't been working this entire time */
|
|
int ix = x + dir.offsetX * i;
|
|
int iy = y + dir.offsetY * i;
|
|
int iz = z + dir.offsetZ * i;
|
|
|
|
while(world.getBlock(ix, iy, iz) == this && world.getBlockMetadata(ix, iy, iz) == oldMeta) {
|
|
|
|
world.setBlockMetadataWithNotify(ix, iy, iz, newMeta, 3);
|
|
|
|
ix += dir.offsetX * i;
|
|
iy += dir.offsetY * i;
|
|
iz += dir.offsetZ * i;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
protected Item getInsertedItem() {
|
|
return ModItems.pile_rod_boron;
|
|
}
|
|
}
|