generated from tilera/1710mod
186 lines
5.4 KiB
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;
|
|
}
|
|
}
|