TheTorchMod/com/bernard/torch/items/TorchAmulet.java

203 lines
7.1 KiB
Java

package com.bernard.torch.items;
import baubles.api.BaubleType;
import baubles.api.IBauble;
import com.bernard.torch.api.ITorchRechargable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class TorchAmulet
extends Item
implements IBauble, ITorchRechargable
{
public static int yRelative = 0;
public static final int size = 4;
public static final int ecart = 5;
public static final int maxYRelative = 5;
public static final int minYRelative = -5;
public static final int[] maxTorchesFromMeta = { 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144 };
public static String[] names = { "torch_amulet", "coal_torch_amulet", "iron_torch_amulet", "quartz_torch_amulet", "gold_torch_amulet", "redstone_torch_amulet", "lapis_torch_amulet", "diamond_torch_amulet", "emerald_torch_amulet" };
public static IIcon[] textures = new IIcon[names.length];
public TorchAmulet() {
setMaxStackSize(1);
setHasSubtypes(true);
}
public void addInformation(ItemStack itemstack, EntityPlayer player, List l, boolean flag)
{
super.addInformation(itemstack, player, l, flag);
if ((itemstack.stackTagCompound == null) || (!itemstack.stackTagCompound.hasKey("TorchesLeft", 3))) {
itemstack.stackTagCompound = new NBTTagCompound();
int meta = itemstack.getMetadata();
if (meta >= maxTorchesFromMeta.length)
meta = 0;
itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
}
l.add("Torches left :" + itemstack.stackTagCompound.getInteger("TorchesLeft"));
}
public int getMetadata(int meta)
{
return meta;
}
public String getUnlocalizedName(ItemStack stack)
{
int meta = stack.getMetadata();
if ((meta < 0) || (meta >= names.length))
meta = 0;
return names[meta];
}
public void registerIcons(IIconRegister iconregister) {
for (int i = 0; i < names.length; i++)
{
textures[i] = iconregister.registerIcon("torch_mod:" + names[i]);
}
}
@SideOnly(Side.CLIENT)
public void getSubItems(Item i, CreativeTabs creativeTabs, List list)
{
for (int metadata = 0; metadata < names.length; metadata++)
{
list.add(new ItemStack(i, 1, metadata));
}
}
public IIcon getIconFromDamage(int meta)
{
if ((meta < 0) || (meta >= names.length))
meta = 0;
return textures[meta];
}
public void onCreated(ItemStack itemstack, World w, EntityPlayer pl)
{
super.onCreated(itemstack, w, pl);
if ((itemstack.stackTagCompound == null) ||
(!itemstack.stackTagCompound.hasKey("TorchesLeft", 3))) {
itemstack.stackTagCompound = new NBTTagCompound();
int meta = itemstack.getMetadata();
if (meta >= maxTorchesFromMeta.length)
meta = 0;
itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
}
}
public BaubleType getBaubleType(ItemStack itemstack)
{
return BaubleType.AMULET;
}
public void onWornTick(ItemStack itemstack, EntityLivingBase player)
{
if ((itemstack.stackTagCompound == null) ||
(!itemstack.stackTagCompound.hasKey("TorchesLeft", 3))) {
itemstack.stackTagCompound = new NBTTagCompound();
int meta = itemstack.getMetadata();
if (meta >= maxTorchesFromMeta.length)
meta = 0;
itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
}
if (itemstack.stackTagCompound.getInteger("TorchesLeft") > 0) {
int modX = (int)player.posX - (int)player.posX % 5;
int modZ = (int)player.posZ - (int)player.posZ % 5;
int y = (int)player.posY;
for (int x = -20; x <= 20; x += 5) {
for (int z = -20; z <= 20; z += 5) {
if (placeTorch(player.worldObj, modX + x, y + yRelative, modZ + z)) {
itemstack.stackTagCompound.setInteger("TorchesLeft", itemstack.stackTagCompound.getInteger("TorchesLeft") - 1);
}
}
}
yRelative = yRelative == 4 ? -5 : yRelative + 1;
}
}
public boolean placeTorch(World w, int x, int y, int z) {
if ((Blocks.torch.canPlaceBlockAt(w, x, y, z)) && (w.isAirBlock(x, y, z))) {
w.setBlock(x, y, z, Blocks.torch);
return true;
}
return false;
}
public void onEquipped(ItemStack itemstack, EntityLivingBase player)
{
if ((itemstack.stackTagCompound == null) ||
(!itemstack.stackTagCompound.hasKey("TorchesLeft", 3))) {
itemstack.stackTagCompound = new NBTTagCompound();
int meta = itemstack.getMetadata();
if (meta >= maxTorchesFromMeta.length)
meta = 0;
itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
}
}
public void onUnequipped(ItemStack itemstack, EntityLivingBase player) {}
public boolean canEquip(ItemStack itemstack, EntityLivingBase player)
{
return true;
}
public boolean canUnequip(ItemStack itemstack, EntityLivingBase player)
{
return true;
}
public void recharge(ItemStack itemstack, int lux)
{
int meta = itemstack.getMetadata();
if ((itemstack.stackTagCompound == null) ||
(!itemstack.stackTagCompound.hasKey("TorchesLeft", 3))) {
itemstack.stackTagCompound = new NBTTagCompound();
if (meta >= maxTorchesFromMeta.length)
meta = 0;
itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
}
itemstack.stackTagCompound.setInteger("TorchesLeft", Math.min(itemstack.stackTagCompound.getInteger("TorchesLeft") + lux, maxTorchesFromMeta[meta]));
}
public int getLuxNedded(ItemStack itemstack)
{
int meta = itemstack.getMetadata();
if ((itemstack.stackTagCompound == null) ||
(!itemstack.stackTagCompound.hasKey("TorchesLeft", 3))) {
itemstack.stackTagCompound = new NBTTagCompound();
if (meta >= maxTorchesFromMeta.length)
meta = 0;
itemstack.stackTagCompound.setInteger("TorchesLeft", maxTorchesFromMeta[meta]);
}
return maxTorchesFromMeta[meta] - itemstack.stackTagCompound.getInteger("TorchesLeft");
}
}