generated from tilera/1710mod
243 lines
7.9 KiB
Java
243 lines
7.9 KiB
Java
package atomicscience.fanwusu;
|
|
|
|
import atomicscience.AtomicScience;
|
|
import atomicscience.jiqi.TInventory;
|
|
import net.minecraft.inventory.ISidedInventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.network.NetworkManager;
|
|
import net.minecraft.network.Packet;
|
|
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
import universalelectricity.core.UniversalElectricity;
|
|
import universalelectricity.core.electricity.ElectricityPack;
|
|
import universalelectricity.core.vector.Vector3;
|
|
import universalelectricity.prefab.implement.IRotatable;
|
|
|
|
public class TAccelerator
|
|
extends TInventory implements IRotatable, ISidedInventory {
|
|
|
|
public final int DIAN = 10000;
|
|
public double yongDianLiang = 0.0D;
|
|
public int antimatter;
|
|
public EMatter wuSu;
|
|
public static final float SU_DU = 1.0F;
|
|
public float suDu;
|
|
|
|
@Override
|
|
public boolean canConnect(ForgeDirection direction) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public ElectricityPack getRequest() {
|
|
return this.getStackInSlot(0) != null &&
|
|
(this.worldObj.isBlockIndirectlyGettingPowered(
|
|
this.xCoord, this.yCoord, this.zCoord) ||
|
|
this.worldObj.getBlockPowerInput(this.xCoord, this.yCoord,
|
|
this.zCoord) > 0)
|
|
? new ElectricityPack(10000.0D / this.getVoltage(), this.getVoltage())
|
|
: new ElectricityPack();
|
|
}
|
|
|
|
@Override
|
|
public void onReceive(ElectricityPack electricityPack) {
|
|
super.onReceive(electricityPack);
|
|
this.yongDianLiang += electricityPack.getWatts();
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
super.updateEntity();
|
|
if (!this.worldObj.isRemote) {
|
|
this.suDu = 0.0F;
|
|
if (this.wuSu != null) {
|
|
this.suDu = (float)this.wuSu.getSuDu();
|
|
}
|
|
|
|
if (AtomicScience.isCell(this.getStackInSlot(1)) &&
|
|
this.getStackInSlot(1).stackSize > 0 && this.antimatter >= 125) {
|
|
if (this.getStackInSlot(2) != null) {
|
|
if (this.getStackInSlot(2).getItem() == AtomicScience.itCellAntimatter) {
|
|
ItemStack i$ = this.getStackInSlot(2).copy();
|
|
if (i$.stackSize < i$.getMaxStackSize()) {
|
|
this.decrStackSize(1, 1);
|
|
this.antimatter -= 125;
|
|
++i$.stackSize;
|
|
this.setInventorySlotContents(2, i$);
|
|
}
|
|
}
|
|
} else {
|
|
this.antimatter -= 125;
|
|
this.decrStackSize(1, 1);
|
|
this.setInventorySlotContents(2, new ItemStack(AtomicScience.itCellAntimatter));
|
|
}
|
|
}
|
|
|
|
if (!this.isDisabled()) {
|
|
if (this.worldObj.isBlockIndirectlyGettingPowered(
|
|
this.xCoord, this.yCoord, this.zCoord)) {
|
|
double var10000 = super.wattsReceived;
|
|
this.getClass();
|
|
if (var10000 >= 10000.0D) {
|
|
if (this.wuSu == null) {
|
|
if (this.getStackInSlot(0) != null && super.ticks % 20L == 0L) {
|
|
Vector3 i$1 = new Vector3(this);
|
|
i$1.modifyPositionFromSide(
|
|
this.getDirection(this.worldObj, this.xCoord, this.yCoord,
|
|
this.zCoord)
|
|
.getOpposite());
|
|
i$1.add(0.5D);
|
|
if (EMatter.canCunZai(
|
|
this.worldObj, i$1,
|
|
this.getDirection(this.worldObj, this.xCoord,
|
|
this.yCoord, this.zCoord)
|
|
.getOpposite())) {
|
|
this.yongDianLiang = 0.0D;
|
|
this.wuSu =
|
|
new EMatter(this.worldObj, i$1, new Vector3(this),
|
|
this.getDirection(this.worldObj, this.xCoord,
|
|
this.yCoord, this.zCoord)
|
|
.getOpposite());
|
|
this.worldObj.spawnEntityInWorld(this.wuSu);
|
|
this.decrStackSize(0, 1);
|
|
}
|
|
}
|
|
} else if (this.wuSu.isDead) {
|
|
this.wuSu = null;
|
|
} else if (this.suDu > 1.0F) {
|
|
this.worldObj.playSoundEffect(
|
|
(double)this.xCoord, (double)this.yCoord, (double)this.zCoord,
|
|
"atomicscience.antimatter", 2.0F,
|
|
1.0F - this.worldObj.rand.nextFloat() * 0.3F);
|
|
this.antimatter += 5 + this.worldObj.rand.nextInt(5);
|
|
this.yongDianLiang = 0.0D;
|
|
this.wuSu.setDead();
|
|
this.wuSu = null;
|
|
}
|
|
|
|
double var10001 = super.wattsReceived;
|
|
this.getClass();
|
|
super.wattsReceived = Math.max(var10001 - 10000.0D / 10.0D, 0.0D);
|
|
} else {
|
|
if (this.wuSu != null) {
|
|
this.wuSu.setDead();
|
|
}
|
|
|
|
this.wuSu = null;
|
|
}
|
|
} else {
|
|
if (this.wuSu != null) {
|
|
this.wuSu.setDead();
|
|
}
|
|
|
|
this.wuSu = null;
|
|
}
|
|
}
|
|
|
|
if (super.ticks % 5L == 0L) {
|
|
worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onDataPacket(NetworkManager nm,
|
|
S35PacketUpdateTileEntity packet) {
|
|
if (!this.worldObj.isRemote)
|
|
return;
|
|
|
|
NBTTagCompound nbt = packet.func_148857_g();
|
|
super.disabledTicks = nbt.getInteger("disabledTicks");
|
|
this.suDu = nbt.getFloat("suDu");
|
|
this.yongDianLiang = nbt.getDouble("yongDianLiang");
|
|
this.antimatter = nbt.getInteger("antimatter");
|
|
}
|
|
|
|
// public void handlePacketData(INetworkManager network, int packetType,
|
|
// Packet250CustomPayload packet,
|
|
// EntityPlayer player,
|
|
// ByteArrayDataInput dataStream) {
|
|
// try {
|
|
// super.disabledTicks = dataStream.readInt();
|
|
// this.suDu = dataStream.readFloat();
|
|
// this.yongDianLiang = dataStream.readDouble();
|
|
// this.fanWuSu = dataStream.readInt();
|
|
// } catch (Exception var7) {
|
|
// var7.printStackTrace();
|
|
// }
|
|
// }
|
|
|
|
@Override
|
|
public Packet getDescriptionPacket() {
|
|
NBTTagCompound nbt = new NBTTagCompound();
|
|
nbt.setInteger("disabledTicks", super.disabledTicks);
|
|
nbt.setFloat("suDu", this.suDu);
|
|
nbt.setDouble("yongDianLiang", this.yongDianLiang);
|
|
nbt.setInteger("antimatter", this.antimatter);
|
|
|
|
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord,
|
|
this.getBlockMetadata(), nbt);
|
|
}
|
|
|
|
@Override
|
|
public void openInventory() {
|
|
if (!this.worldObj.isRemote) {
|
|
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
super.wattsReceived = nbt.getDouble("wattsReceived");
|
|
this.yongDianLiang = nbt.getDouble("yongDianLiang");
|
|
this.antimatter = nbt.getInteger("antimatter");
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
nbt.setDouble("wattsReceived", super.wattsReceived);
|
|
nbt.setDouble("yongDianLiang", this.yongDianLiang);
|
|
nbt.setInteger("antimatter", this.antimatter);
|
|
}
|
|
|
|
@Override
|
|
public int getSizeInventory() { return 3; }
|
|
|
|
@Override
|
|
public double getVoltage() {
|
|
return UniversalElectricity.isVoltageSensitive ? 480.0D : 120.0D;
|
|
}
|
|
|
|
@Override
|
|
public int[] getAccessibleSlotsFromSide(int side) {
|
|
return new int[] {0, 1, 2};
|
|
}
|
|
|
|
@Override
|
|
public boolean canInsertItem(int slotID, ItemStack itemStack, int j) {
|
|
return this.isItemValidForSlot(slotID, itemStack);
|
|
}
|
|
|
|
@Override
|
|
public boolean canExtractItem(int slotID, ItemStack itemstack, int j) {
|
|
return slotID == 2;
|
|
}
|
|
|
|
@Override
|
|
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
|
switch (i) {
|
|
case 0:
|
|
return true;
|
|
case 1:
|
|
return AtomicScience.isCell(itemStack);
|
|
case 2:
|
|
return itemStack.getItem() instanceof ItAntimatterCell;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
}
|