atomicscience/src/main/java/atomicscience/fanwusu/TAccelerator.java
2022-10-21 19:53:56 +02:00

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;
}
}
}