redpower/src/main/java/com/eloraam/redpower/base/ItemScrewdriver.java

106 lines
3.8 KiB
Java

package com.eloraam.redpower.base;
import com.eloraam.redpower.RedPowerBase;
import com.eloraam.redpower.control.TileCPU;
import com.eloraam.redpower.core.CoreLib;
import com.eloraam.redpower.core.IRedbusConnectable;
import com.eloraam.redpower.core.IRotatable;
import com.google.common.collect.Multimap;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class ItemScrewdriver extends Item {
public ItemScrewdriver() {
this.setMaxDamage(200);
this.setMaxStackSize(1);
this.setCreativeTab(CreativeTabs.tabTools);
this.setUnlocalizedName("screwdriver");
this.setTextureName("rpbase:screwdriver");
}
public boolean hitEntity(ItemStack ist, EntityLivingBase ent, EntityLivingBase hitter) {
ist.damageItem(8, hitter);
return true;
}
public boolean onItemUseFirst(ItemStack ist, EntityPlayer player, World world, int x, int y, int z, int side, float xp, float yp, float zp) {
if (!world.isRemote) {
boolean sec = false;
if (player != null && player.isSneaking()) {
sec = true;
}
Block bid = world.getBlock(x, y, z);
int md = world.getBlockMetadata(x, y, z);
if (bid == Blocks.unpowered_repeater || bid == Blocks.powered_repeater) {
world.setBlock(x, y, z, bid, md & 12 | md + 1 & 3, 3);
ist.damageItem(1, player);
return true;
} else if (bid == Blocks.dispenser) {
md = md & 3 ^ md >> 2;
md += 2;
world.setBlock(x, y, z, bid, md, 3);
ist.damageItem(1, player);
return true;
} else if (bid != Blocks.piston && bid != Blocks.sticky_piston) {
if (player.isSneaking()) {
IRedbusConnectable irb = CoreLib.getTileEntity(world, x, y, z, IRedbusConnectable.class);
if (irb != null && !(irb instanceof TileCPU)) {
player.openGui(RedPowerBase.instance, 3, world, x, y, z);
return true;
}
}
IRotatable ir = CoreLib.getTileEntity(world, x, y, z, IRotatable.class);
if (ir == null) {
return false;
} else {
MovingObjectPosition mop = CoreLib.retraceBlock(world, player, x, y, z);
if (mop == null) {
return false;
} else {
int rm = ir.getPartMaxRotation(mop.subHit, sec);
if (rm == 0) {
return false;
} else {
int r = ir.getPartRotation(mop.subHit, sec);
if (++r > rm) {
r = 0;
}
ir.setPartRotation(mop.subHit, sec, r);
ist.damageItem(1, player);
return true;
}
}
}
} else {
if (++md > 5) {
md = 0;
}
world.setBlock(x, y, z, bid, md, 3);
ist.damageItem(1, player);
return true;
}
} else {
return false;
}
}
public Multimap getAttributeModifiers(ItemStack stack) {
Multimap map = super.getAttributeModifiers(stack);
map.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), new AttributeModifier(Item.field_111210_e, "Weapon modifier", 4.0, 0));
return map;
}
}