summaryrefslogtreecommitdiff
path: root/src/main/java/darkknight/jewelrycraft/tileentity/TileEntityBlockShadow.java
blob: b17047eec1cc266c4aafc19b2fb4a40923e17f59 (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
package darkknight.jewelrycraft.tileentity;

import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.EnumSkyBlock;

public class TileEntityBlockShadow extends TileEntity {
	public int metadata;

	/**
	 * 
	 */
	public TileEntityBlockShadow() {
		metadata = -1;
	}

	/**
	 * @param nbt
	 */
	@Override
	public void writeToNBT(NBTTagCompound nbt) {
		super.writeToNBT(nbt);
		nbt.setInteger("metadata", metadata);
	}

	/**
	 * @param nbt
	 */
	@Override
	public void readFromNBT(NBTTagCompound nbt) {
		super.readFromNBT(nbt);
		metadata = nbt.getInteger("metadata");
	}

	/**
	 * 
	 */
	@Override
	public void updateEntity() {
		super.updateEntity();
		int blockLight, realLight;
		int lightValue = worldObj.getSavedLightValue(EnumSkyBlock.Sky,
				xCoord, yCoord, zCoord) - worldObj.skylightSubtracted;
		float sunPosAngle = worldObj.getCelestialAngleRadians(1.0F);
		if (sunPosAngle < (float) Math.PI)
			sunPosAngle += (0.0F - sunPosAngle) * 0.2F;
		else
			sunPosAngle += ((float) Math.PI * 2F - sunPosAngle) * 0.2F;
		lightValue = Math.round(lightValue * MathHelper.cos(sunPosAngle));
		if (lightValue < 0)
			lightValue = 0;
		if (lightValue > 15)
			lightValue = 15;
		blockLight = worldObj.getChunkFromBlockCoords(xCoord, zCoord)
				.getSavedLightValue(EnumSkyBlock.Block, xCoord & 15,
						yCoord, zCoord & 15);
		realLight = worldObj.getChunkFromBlockCoords(xCoord, zCoord)
				.getBlockLightValue(xCoord & 15, yCoord, zCoord & 15, 0);
		if (blockLight == 0
				&& worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord)
				|| lightValue >= blockLight)
			metadata = 15 - lightValue;
		else if (!worldObj.canBlockSeeTheSky(xCoord, yCoord, zCoord))
			metadata = 15 - realLight;
		else if (lightValue < blockLight)
			metadata = 15 - blockLight;
		worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord,
				metadata, 2);
		worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord,
				worldObj.getBlock(xCoord, yCoord, zCoord));
	}

	/**
	 * @return
	 */
	@Override
	public Packet getDescriptionPacket() {
		NBTTagCompound nbttagcompound = new NBTTagCompound();
		writeToNBT(nbttagcompound);
		return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1,
				nbttagcompound);
	}

	/**
	 * @param net
	 * @param packet
	 */
	@Override
	public void onDataPacket(NetworkManager net,
			S35PacketUpdateTileEntity packet) {
		readFromNBT(packet.func_148857_g());
		worldObj.func_147479_m(xCoord, yCoord, zCoord);
	}
}