summaryrefslogtreecommitdiff
path: root/src/main/java/darkknight/jewelrycraft/item/ItemMoltenMetalBucket.java
blob: 09e5adc1e10d449e721dfb85edb68a5584fd93d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package darkknight.jewelrycraft.item;

import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import darkknight.jewelrycraft.block.BlockList;
import darkknight.jewelrycraft.tileentity.TileEntityMoltenMetal;
import darkknight.jewelrycraft.util.JewelryNBT;
import darkknight.jewelrycraft.util.JewelrycraftUtil;
import darkknight.jewelrycraft.util.Variables;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.FillBucketEvent;

public class ItemMoltenMetalBucket extends Item {
	public IIcon liquid;

	public ItemMoltenMetalBucket() {
		maxStackSize = 1;
	}

	@Override
	public ItemStack onItemRightClick(ItemStack stack, World par2World, EntityPlayer par3EntityPlayer) {
		boolean flag = BlockList.moltenMetal == Blocks.air;
		MovingObjectPosition movingobjectposition = getMovingObjectPositionFromPlayer(par2World, par3EntityPlayer, flag);
		if (movingobjectposition == null) return stack;
		else {
			FillBucketEvent event = new FillBucketEvent(par3EntityPlayer, stack, par2World, movingobjectposition);
			if (MinecraftForge.EVENT_BUS.post(event)) return stack;
			if (event.getResult() == Event.Result.ALLOW) {
				if (par3EntityPlayer.capabilities.isCreativeMode) return stack;
				if (--stack.stackSize <= 0) return event.result;
				if (!par3EntityPlayer.inventory.addItemStackToInventory(event.result)) par3EntityPlayer.dropPlayerItemWithRandomChoice(event.result, false);
				return stack;
			}
			if (movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
				int i = movingobjectposition.blockX;
				int j = movingobjectposition.blockY;
				int k = movingobjectposition.blockZ;
				if (!par2World.canMineBlock(par3EntityPlayer, i, j, k)) return stack;
				if (flag) {
					if (!par3EntityPlayer.canPlayerEdit(i, j, k, movingobjectposition.sideHit, stack)) return stack;
					par2World.getBlock(i, j, k).getMaterial();
					par2World.getBlockMetadata(i, j, k);
					par2World.setBlockToAir(i, j, k);
					return func_150910_a(stack, par3EntityPlayer, ItemList.bucket);
				} else {
					if (BlockList.moltenMetal == Blocks.air) return new ItemStack(Items.bucket);
					if (movingobjectposition.sideHit == 0) --j;
					else if (movingobjectposition.sideHit == 1) ++j;
					else if (movingobjectposition.sideHit == 2) --k;
					else if (movingobjectposition.sideHit == 3) ++k;
					else if (movingobjectposition.sideHit == 4) --i;
					else if (movingobjectposition.sideHit == 5) ++i;
					if (!par3EntityPlayer.canPlayerEdit(i, j, k, movingobjectposition.sideHit, stack)) return stack;
					if (tryPlaceContainedLiquid(par2World, i, j, k, stack) && !par3EntityPlayer.capabilities.isCreativeMode) return new ItemStack(Items.bucket);
				}
			}
			return stack;
		}
	}

	private ItemStack func_150910_a(ItemStack p_150910_1_, EntityPlayer p_150910_2_, Item p_150910_3_) {
		if (p_150910_2_.capabilities.isCreativeMode) return p_150910_1_;
		else if (--p_150910_1_.stackSize <= 0) return new ItemStack(p_150910_3_);
		else {
			if (!p_150910_2_.inventory.addItemStackToInventory(new ItemStack(p_150910_3_))) p_150910_2_.dropPlayerItemWithRandomChoice(new ItemStack(p_150910_3_, 1, 0), false);
			return p_150910_1_;
		}
	}

	public static boolean tryPlaceContainedLiquid(World world, int x, int y, int z, ItemStack stack) {
		if (BlockList.moltenMetal == Blocks.air) return false;
		else {
			Material material = world.getBlock(x, y, z).getMaterial();
			boolean flag = !material.isSolid();
			if (!world.isAirBlock(x, y, z) && !flag) return false;
			else if (stack != null && JewelryNBT.ingot(stack) != null) {
				if (!world.isRemote && flag && !material.isLiquid()) world.func_147480_a(x, y, z, true);
				world.setBlock(x, y, z, BlockList.moltenMetal, 0, 3);
            	TileEntity moltenLiquid = world.getTileEntity(x, y, z);
            	if(moltenLiquid instanceof TileEntityMoltenMetal) ((TileEntityMoltenMetal) moltenLiquid).setMetal(JewelryNBT.ingot(stack));
				return true;
			} else return false;
		}
	}

	@Override
	public void registerIcons(IIconRegister iconRegister) {
		itemIcon = iconRegister.registerIcon("bucket_empty");
		liquid = iconRegister.registerIcon(Variables.MODID + ":bucketOverlay");
	}

	@Override
	@SideOnly(Side.CLIENT)
	public int getColorFromItemStack(ItemStack stack, int pass) {
		if (pass == 1 && JewelryNBT.ingot(stack) != null) return JewelrycraftUtil.getColor(JewelryNBT.ingot(stack));
		return 16777215;
	}

	@Override
	public boolean requiresMultipleRenderPasses() {
		return true;
	}

	@Override
	public IIcon getIcon(ItemStack stack, int pass) {
		if (pass == 0) return itemIcon;
		if (pass == 1) return liquid;
		return itemIcon;
	}

	public ItemStack getModifiedItemStack(ItemStack ingot) {
		ItemStack itemstack = new ItemStack(this);
		JewelryNBT.addMetal(itemstack, ingot);
		return itemstack;
	}

	@Override
	public String getItemStackDisplayName(ItemStack stack) {
		try {
			if (JewelryNBT.ingot(stack) != null) {
				ItemStack ingot = JewelryNBT.ingot(stack);
				if (ingot != null) {
					return StatCollector.translateToLocal(getUnlocalizedNameInefficiently(stack) + ".name").trim() + " " + ingot.getDisplayName().replace("Ingot", " ").trim();
				} else return StatCollector.translateToLocal("bucket.unknown");
			}
		} catch (Exception e) {
			System.out.println("Error: " + e);
		}
		return ("" + StatCollector.translateToLocal(getUnlocalizedNameInefficiently(stack) + ".name")).trim() + " " + StatCollector.translateToLocal("info.jewelrycraft2.metal");
	}
}