summaryrefslogtreecommitdiff
path: root/ihl/explosion/ExplosiveTileEntity.java
blob: b211d3bff46cad08fd59539a387190eb2fc8243f (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
package ihl.explosion;

import ic2.core.IC2;
import ihl.IHLMod;
import ihl.utils.IHLMathUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.oredict.OreDictionary;

public class ExplosiveTileEntity extends TileEntity {

	public int explosionPower = 10000;
	private int explosionType = 1;
	private int detonator_delay = 1;
	private int burn_time = 0;
	public boolean is_detonator_burning = false;

	public void createExplosion(EntityPlayer player) {
		this.invalidate();
		int power = this.explosionPower;
		this.explosionPower = 0;
		IHLMod.explosionHandler.doExplosion(worldObj, xCoord, yCoord, zCoord, IHLMod.explosionHandler.startVectors,
				power);
		IHLMod.proxy.createExplosionEffectFromServer(worldObj, xCoord, yCoord, zCoord,
				32f * IHLMathUtils.sqrt(power / 16384f));
	}

	@Override
	public boolean canUpdate() {
		return IC2.platform.isSimulating();
	}

	@Override
	public void updateEntity() {
		if (is_detonator_burning) {
			IHLMod.proxy.spawnParticleFromServer(4, worldObj, xCoord + 0.5d, yCoord + 1d, zCoord + 0.5d, 0d, 0.2d, 0d,
					1f);
			if (this.burn_time++ > detonator_delay * 20) {
				this.createExplosion(null);
			}
		}
	}

	@Override
	public void readFromNBT(NBTTagCompound nbt) {
		if (nbt != null) {
			explosionPower = nbt.getInteger("explosionPower");
			explosionType = nbt.getInteger("explosionType");
			detonator_delay = nbt.getInteger("detonator_delay");
		}
	}

	@Override
	public void writeToNBT(NBTTagCompound nbt) {
		nbt.setInteger("explosionPower", explosionPower);
		nbt.setInteger("explosionType", explosionType);
		nbt.setInteger("detonator_delay", detonator_delay);
	}

	public boolean ignite(EntityPlayer player) {
		if (player != null && player.getCurrentEquippedItem() != null) {
			for (int oid : OreDictionary.getOreIDs(player.getCurrentEquippedItem())) {
				if (OreDictionary.getOreName(oid).matches("toolLighter")) {
					ignite();
					return false;
				}
			}
		}
		return true;
	}

	public void ignite() {
		IHLMod.proxy.playSoundEffectFromServer(0, this.worldObj, this.xCoord + 0.5D, this.yCoord + 0.5D,
				this.zCoord + 0.5D, 10.0F, 1.0F);
		this.is_detonator_burning = true;
	}
}