Dartcraft/src/main/java/ley/modding/dartcraft/item/tool/ItemForcePickaxe.java

185 lines
6 KiB
Java

package ley.modding.dartcraft.item.tool;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.api.IBreakable;
import ley.modding.dartcraft.api.IForceConsumer;
import ley.modding.dartcraft.api.upgrades.IForceUpgradable;
import ley.modding.dartcraft.item.DartItems;
import ley.modding.dartcraft.util.ForceConsumerUtils;
import ley.modding.dartcraft.util.ForceUpgradeManager;
import ley.modding.dartcraft.util.Util;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemPickaxe;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.EnumHelper;
public class ItemForcePickaxe
extends ItemPickaxe implements IBreakable, IForceConsumer, IForceUpgradable {
private static int damage = 1;
private static float efficiency = 5.0F;
private static int toolLevel = 10;
public static ToolMaterial material = EnumHelper.addToolMaterial(
"FORCE", toolLevel, 512, efficiency, (float) damage, 0
);
private IIcon heatPick;
public ItemForcePickaxe() {
super(material);
Util.configureItem(this, "forcepickaxe");
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (!stack.hasTagCompound()) {
stack.setTagCompound(new NBTTagCompound());
}
stack.getTagCompound().setBoolean(
"active", !stack.getTagCompound().getBoolean("active")
);
if (!Dartcraft.proxy.isSimulating(world)) {
if (stack.getTagCompound().getBoolean("active")) {
Dartcraft.proxy.sendChatToPlayer(player, "Area mode activated.");
} else {
Dartcraft.proxy.sendChatToPlayer(player, "Area mode deactivated");
}
}
return stack;
}
@Override
public ItemStack itemReturned() {
return new ItemStack(DartItems.forceshard);
}
public IIcon getIcon(ItemStack stack, int pass) {
if (stack.hasTagCompound()) {
NBTTagCompound upgrades = stack.getTagCompound().getCompoundTag("upgrades");
if (upgrades != null && upgrades.hasKey("heat")) {
return heatPick;
}
}
return itemIcon;
}
@SideOnly(Side.CLIENT)
@Override
public boolean requiresMultipleRenderPasses() {
return true;
}
@Override
public EnumRarity getRarity(ItemStack stack) {
if (stack.hasTagCompound() && stack.getTagCompound().hasKey("upgrades")) {
NBTTagCompound upgrades = stack.getTagCompound().getCompoundTag("upgrades");
if (upgrades.hasKey("Heat")) {
return EnumRarity.uncommon;
}
}
return EnumRarity.common;
}
@Override
public void registerIcons(IIconRegister reg) {
heatPick = reg.registerIcon(Dartcraft.MODID + ":heatpickaxe");
super.registerIcons(reg);
}
@Override
public int getStored(ItemStack stack) {
return ForceConsumerUtils.getStoredForce(stack);
}
@Override
public int getMaxStored(ItemStack stack) {
return 10000;
}
@Override
public int amountUsedBase(ItemStack stack) {
return 0;
}
@Override
public boolean useForce(ItemStack stack, int var2, boolean var3) {
return ForceConsumerUtils.useForce(stack, var2, var3);
}
@Override
public boolean attemptRepair(ItemStack stack) {
return ForceConsumerUtils.attemptRepair(stack);
}
public int[] validUpgrades() {
return new int[] {
ForceUpgradeManager.HEAT.getID(), ForceUpgradeManager.SPEED.getID(),
ForceUpgradeManager.LUCK.getID(), ForceUpgradeManager.TOUCH.getID(),
ForceUpgradeManager.STURDY.getID(), ForceUpgradeManager.GRINDING.getID(),
ForceUpgradeManager.REPAIR.getID(), ForceUpgradeManager.IMPERVIOUS.getID()
};
}
@Override
public boolean
onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player) {
World world = player.worldObj;
Block tempBlock = world.getBlock(x, y, z);
boolean force = false;
if (!this.canHarvestBlock(tempBlock, stack)) {
return false;
} else {
if (stack.hasTagCompound() && stack.getTagCompound().getBoolean("active")) {
force = true;
}
if (force) {
for (int i = -1; i < 2; ++i) {
for (int j = -1; j < 2; ++j) {
for (int k = -1; k < 2; ++k) {
if (i != 0 || j != 0 || k != 0) {
if (stack == null
|| stack.getItemDamage() >= stack.getMaxDamage()) {
return false;
}
this.tryBlock(stack, x + i, y + j, z + k, player);
}
}
}
}
}
if (stack != null && stack.getItemDamage() < stack.getMaxDamage())
this.tryBlock(stack, x, y, z, player);
return false;
}
}
public void tryBlock(ItemStack stack, int x, int y, int z, EntityPlayer player) {
World world = player.worldObj;
Block block = world.getBlock(x, y, z);
if (this.canHarvestBlock(block, stack)
&& block.getBlockHardness(world, x, y, z) > 0F
& world.getTileEntity(x, y, z) == null) {
world.getBlock(x, y, z).harvestBlock(
world, player, x, y, z, world.getBlockMetadata(x, y, z)
);
world.setBlockToAir(x, y, z);
stack.damageItem(1, player);
}
}
}