icbm/src/main/java/icbm/zhapin/jiqi/TEmpTower.java

186 lines
5.4 KiB
Java

package icbm.zhapin.jiqi;
import calclavia.lib.TileEntityUniversalStorable;
import icbm.api.RadarRegistry;
import icbm.core.MainBase;
import icbm.zhapin.ICBMExplosion;
import icbm.zhapin.zhapin.ZhaPin;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
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.AxisAlignedBB;
import universalelectricity.core.vector.Vector3;
import universalelectricity.prefab.implement.IRedstoneReceptor;
import universalelectricity.prefab.multiblock.IMultiBlock;
public class TEmpTower
extends TileEntityUniversalStorable implements IMultiBlock, IRedstoneReceptor {
public static final int MAX_RADIUS = 150;
public float rotation;
private float xuanZhuanLu;
public byte holzOhJa;
public int radius;
public TEmpTower() {
this.rotation = 0.0f;
this.holzOhJa = 0;
this.radius = 60;
RadarRegistry.register(this);
}
@Override
public void invalidate() {
RadarRegistry.unregister(this);
super.invalidate();
}
@Override
public void updateEntity() {
super.updateEntity();
if (!this.isDisabled()) {
if (super.ticks % 20L == 0L && this.getJoules() > 0.0) {
this.worldObj.playSoundEffect(
(double) this.xCoord,
(double) this.yCoord,
(double) this.zCoord,
"icbm:machinehum",
0.5f,
(float) (0.8500000238418579 * this.getJoules() / this.getMaxJoules())
);
}
this.xuanZhuanLu
= (float) (Math.pow(this.getJoules() / this.getMaxJoules(), 2.0) * 0.5);
this.rotation += this.xuanZhuanLu;
if (this.rotation > 360.0f) {
this.rotation = 0.0f;
}
}
if (!this.worldObj.isRemote) {
if (super.ticks % 10L == 0L) {
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
}
}
}
@Override
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
NBTTagCompound nbt = pkt.func_148857_g();
this.setJoules(nbt.getDouble("joules"));
super.disabledTicks = nbt.getInteger("disabledTicks");
this.radius = nbt.getInteger("radius");
this.holzOhJa = nbt.getByte("holzOhJa");
}
@Override
public Packet getDescriptionPacket() {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setDouble("joules", this.getJoules());
nbt.setInteger("disabledTicks", super.disabledTicks);
nbt.setInteger("radius", this.radius);
nbt.setByte("holzOhJa", this.holzOhJa);
return new S35PacketUpdateTileEntity(
this.xCoord, this.yCoord, this.zCoord, this.getBlockMetadata(), nbt
);
}
@Override
public double getVoltage() {
return 240.0;
}
@Override
public void readFromNBT(final NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.radius = nbt.getInteger("radius");
this.holzOhJa = nbt.getByte("holzOhJa");
}
@Override
public void writeToNBT(final NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setInteger("radius", this.radius);
nbt.setByte("holzOhJa", this.holzOhJa);
}
@Override
public void onPowerOn() {
if (this.getJoules() >= this.getMaxJoules()) {
if (this.holzOhJa == 0 || this.holzOhJa == 1) {
ZhaPin.empSignal.doBaoZha(
this.worldObj,
new Vector3(this.xCoord, this.yCoord, this.zCoord),
null,
this.radius,
-1
);
}
if (this.holzOhJa == 0 || this.holzOhJa == 2) {
ZhaPin.empWave.doBaoZha(
this.worldObj,
new Vector3(this.xCoord, this.yCoord, this.zCoord),
null,
this.radius,
-1
);
}
this.setJoules(0.0);
}
}
@Override
public void onPowerOff() {}
@Override
public void onDestroy(final TileEntity callingBlock) {
this.worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord, Blocks.air, 0, 3);
this.worldObj.setBlock(
this.xCoord, this.yCoord + 1, this.zCoord, Blocks.air, 0, 3
);
}
@Override
public boolean onActivated(final EntityPlayer entityPlayer) {
entityPlayer.openGui(
(Object) ICBMExplosion.instance,
6,
this.worldObj,
this.xCoord,
this.yCoord,
this.zCoord
);
return true;
}
@Override
public void onCreate(final Vector3 position) {
MainBase.bJia.makeFakeBlock(
this.worldObj,
Vector3.add(position, new Vector3(0.0, 1.0, 0.0)),
new Vector3(this)
);
}
@Override
public double getMaxJoules() {
return Math.max(2000000.0f * (this.radius / 150.0f), 1000000.0f);
}
@Override
public AxisAlignedBB getRenderBoundingBox() {
return TileEntity.INFINITE_EXTENT_AABB;
}
}