generated from tilera/1710mod
LordMZTE
3d9ef7a3a1
- added powered state and pipe connections to datapacket - fixed nonsensical partial `writeToNBT` (WTF) closes #10
227 lines
6.5 KiB
Java
227 lines
6.5 KiB
Java
package com.eloraam.redpower.machine;
|
|
|
|
import com.eloraam.redpower.core.BluePowerConductor;
|
|
import com.eloraam.redpower.core.BluePowerEndpoint;
|
|
import com.eloraam.redpower.core.CoreLib;
|
|
import com.eloraam.redpower.core.FluidBuffer;
|
|
import com.eloraam.redpower.core.IBluePowerConnectable;
|
|
import com.eloraam.redpower.core.IPipeConnectable;
|
|
import com.eloraam.redpower.core.PipeLib;
|
|
import com.eloraam.redpower.core.RedPowerLib;
|
|
import com.eloraam.redpower.core.WorldCoord;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
|
|
public class TilePump
|
|
extends TileMachinePanel implements IPipeConnectable, IBluePowerConnectable {
|
|
private TilePump.PumpBuffer inbuf = new TilePump.PumpBuffer();
|
|
private TilePump.PumpBuffer outbuf = new TilePump.PumpBuffer();
|
|
BluePowerEndpoint cond = new BluePowerEndpoint() {
|
|
@Override
|
|
public TileEntity getParent() {
|
|
return TilePump.this;
|
|
}
|
|
};
|
|
public int ConMask = -1;
|
|
public byte PumpTick = 0;
|
|
|
|
@Override
|
|
public int getPipeConnectableSides() {
|
|
return 12 << (((super.Rotation ^ 1) & 1) << 1);
|
|
}
|
|
|
|
@Override
|
|
public int getPipeFlangeSides() {
|
|
return 12 << (((super.Rotation ^ 1) & 1) << 1);
|
|
}
|
|
|
|
@Override
|
|
public int getPipePressure(int side) {
|
|
int rt = CoreLib.rotToSide(super.Rotation);
|
|
return !super.Active
|
|
? 0
|
|
: (side == rt ? 1000 : (side == ((rt ^ 1) & 0xFF) ? -1000 : 0));
|
|
}
|
|
|
|
@Override
|
|
public FluidBuffer getPipeBuffer(int side) {
|
|
int rt = CoreLib.rotToSide(super.Rotation);
|
|
return side == rt ? this.outbuf : (side == ((rt ^ 1) & 0xFF) ? this.inbuf : null);
|
|
}
|
|
|
|
@Override
|
|
public int getConnectableMask() {
|
|
return 3 << ((super.Rotation & 1) << 1) | 17895680;
|
|
}
|
|
|
|
@Override
|
|
public int getConnectClass(int side) {
|
|
return 65;
|
|
}
|
|
|
|
@Override
|
|
public int getCornerPowerMode() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public BluePowerConductor getBlueConductor(int side) {
|
|
return this.cond;
|
|
}
|
|
|
|
@Override
|
|
public int getExtendedID() {
|
|
return 1;
|
|
}
|
|
|
|
@Override
|
|
public void onBlockPlaced(ItemStack ist, int side, EntityLivingBase ent) {
|
|
super.Rotation
|
|
= (int) Math.floor((double) (ent.rotationYaw * 4.0F / 360.0F) + 2.5) & 3;
|
|
if (ent instanceof EntityPlayer) {
|
|
super.Owner = ((EntityPlayer) ent).getGameProfile();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onBlockNeighborChange(Block block) {
|
|
this.ConMask = -1;
|
|
if (RedPowerLib.isPowered(
|
|
super.worldObj, super.xCoord, super.yCoord, super.zCoord, 16777215, 63
|
|
)) {
|
|
if (!super.powered) {
|
|
super.powered = true;
|
|
this.markDirty();
|
|
}
|
|
} else {
|
|
super.powered = false;
|
|
this.markDirty();
|
|
}
|
|
}
|
|
|
|
private void pumpFluid() {
|
|
if (this.inbuf.Type != null) {
|
|
int lv = Math.min(
|
|
this.inbuf.getLevel(), this.outbuf.getMaxLevel() - this.outbuf.getLevel()
|
|
);
|
|
lv = Math.min(lv, this.inbuf.getLevel() + this.inbuf.Delta);
|
|
if (lv > 0
|
|
&& (this.inbuf.Type == this.outbuf.Type || this.outbuf.Type == null)) {
|
|
this.outbuf.addLevel(this.inbuf.Type, lv);
|
|
this.inbuf.addLevel(this.inbuf.Type, -lv);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
super.updateEntity();
|
|
if (super.worldObj.isRemote) {
|
|
if (super.Active) {
|
|
++this.PumpTick;
|
|
if (this.PumpTick >= 16) {
|
|
this.PumpTick = 0;
|
|
}
|
|
}
|
|
} else {
|
|
if (this.ConMask < 0) {
|
|
this.ConMask = RedPowerLib.getConnections(
|
|
super.worldObj, this, super.xCoord, super.yCoord, super.zCoord
|
|
);
|
|
this.cond.recache(this.ConMask, 0);
|
|
}
|
|
|
|
this.cond.iterate();
|
|
this.markDirty();
|
|
int rt = CoreLib.rotToSide(super.Rotation);
|
|
PipeLib.movePipeLiquid(
|
|
super.worldObj, this, new WorldCoord(this), 3 << (rt & -2)
|
|
);
|
|
boolean act = super.Active;
|
|
if (super.Active) {
|
|
++this.PumpTick;
|
|
if (this.PumpTick == 8) {
|
|
this.cond.drawPower(10000.0);
|
|
this.pumpFluid();
|
|
}
|
|
|
|
if (this.PumpTick >= 16) {
|
|
this.PumpTick = 0;
|
|
super.Active = false;
|
|
}
|
|
|
|
this.cond.drawPower(200.0);
|
|
}
|
|
|
|
if (this.cond.getVoltage() < 60.0) {
|
|
if (super.Charged && this.cond.Flow == 0) {
|
|
super.Charged = false;
|
|
this.updateBlock();
|
|
}
|
|
} else {
|
|
if (!super.Charged) {
|
|
super.Charged = true;
|
|
this.updateBlock();
|
|
}
|
|
|
|
if (super.Charged && super.powered) {
|
|
super.Active = true;
|
|
}
|
|
|
|
if (super.Active != act) {
|
|
this.updateBlock();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onTileTick() {
|
|
if (!super.worldObj.isRemote && !super.powered) {
|
|
super.Active = false;
|
|
this.updateBlock();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound data) {
|
|
super.readFromNBT(data);
|
|
this.cond.readFromNBT(data);
|
|
this.inbuf.readFromNBT(data, "inb");
|
|
this.outbuf.readFromNBT(data, "outb");
|
|
this.PumpTick = data.getByte("ptk");
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound data) {
|
|
super.writeToNBT(data);
|
|
this.cond.writeToNBT(data);
|
|
this.inbuf.writeToNBT(data, "inb");
|
|
this.outbuf.writeToNBT(data, "outb");
|
|
data.setByte("ptk", this.PumpTick);
|
|
}
|
|
|
|
private class PumpBuffer extends FluidBuffer {
|
|
private PumpBuffer() {}
|
|
|
|
@Override
|
|
public TileEntity getParent() {
|
|
return TilePump.this;
|
|
}
|
|
|
|
@Override
|
|
public void onChange() {
|
|
TilePump.this.markDirty();
|
|
}
|
|
|
|
@Override
|
|
public int getMaxLevel() {
|
|
return 1000;
|
|
}
|
|
}
|
|
}
|