2022-05-01 20:10:18 -07:00

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;
}
}