List of usage examples for net.minecraftforge.fluids FluidStack equals
@Override public final boolean equals(Object o)
From source file:buildcraft.transport.PipeTransportFluids.java
License:Minecraft Mod Public
/** * Computes the PacketFluidUpdate packet for transmission to a client * * @param initPacket everything is sent, no delta stuff ( first packet ) * @param persistChange The render cache change is persisted * @return PacketFluidUpdate liquid update packet *///www . ja va 2 s.com private PacketFluidUpdate computeFluidUpdate(boolean initPacket, boolean persistChange) { boolean changed = false; BitSet delta = new BitSet(PacketFluidUpdate.FLUID_DATA_NUM * ForgeDirection.VALID_DIRECTIONS.length); if (initClient > 0) { initClient--; if (initClient == 1) { changed = true; delta.set(0, PacketFluidUpdate.FLUID_DATA_NUM * ForgeDirection.VALID_DIRECTIONS.length); } } FluidStack[] renderCacheCopy = this.renderCache.clone(); int[] colorRenderCacheCopy = this.colorRenderCache.clone(); for (ForgeDirection dir : orientations) { FluidStack current = internalTanks[dir.ordinal()].getFluid(); FluidStack prev = renderCacheCopy[dir.ordinal()]; if (current != null && current.getFluid() == null) { continue; } if (prev == null && current == null) { continue; } if (prev == null ^ current == null) { changed = true; if (current != null) { renderCacheCopy[dir.ordinal()] = current.copy(); colorRenderCacheCopy[dir.ordinal()] = current.getFluid().getColor(current); } else { renderCacheCopy[dir.ordinal()] = null; colorRenderCacheCopy[dir.ordinal()] = 0xFFFFFF; } delta.set(dir.ordinal() * PacketFluidUpdate.FLUID_DATA_NUM + PacketFluidUpdate.FLUID_ID_BIT); delta.set(dir.ordinal() * PacketFluidUpdate.FLUID_DATA_NUM + PacketFluidUpdate.FLUID_AMOUNT_BIT); continue; } if (prev == null || current == null) { continue; } if (!prev.equals(current) || initPacket) { changed = true; renderCacheCopy[dir.ordinal()] = current; colorRenderCacheCopy[dir.ordinal()] = current.getFluid().getColor(current); delta.set(dir.ordinal() * PacketFluidUpdate.FLUID_DATA_NUM + PacketFluidUpdate.FLUID_ID_BIT); } int displayQty = (prev.amount * 4 + current.amount) / 5; if (displayQty == 0 && current.amount > 0 || initPacket) { displayQty = current.amount; } displayQty = Math.min(getCapacity(), displayQty); if (prev.amount != displayQty || initPacket) { changed = true; renderCacheCopy[dir.ordinal()].amount = displayQty; delta.set(dir.ordinal() * PacketFluidUpdate.FLUID_DATA_NUM + PacketFluidUpdate.FLUID_AMOUNT_BIT); } } if (persistChange) { this.renderCache = renderCacheCopy; this.colorRenderCache = colorRenderCacheCopy; } if (changed || initPacket) { PacketFluidUpdate packet = new PacketFluidUpdate(container.xCoord, container.yCoord, container.zCoord, initPacket); packet.renderCache = renderCacheCopy; packet.colorRenderCache = colorRenderCacheCopy; packet.delta = delta; return packet; } return null; }
From source file:ocelot.mods.qp2.TileRefineryPlus.java
License:Open Source License
@Override public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { // if (resource == null) return null; if (resource.equals(this.res)) return drain(from, resource.amount, doDrain); if (resource.equals(this.src1)) { FluidStack ret = this.src1.copy(); ret.amount = Math.min(resource.amount, ret.amount); if (doDrain) { this.src1.amount -= ret.amount; if (this.src1.amount == 0) this.src1 = null; }/*from ww w . j a v a 2 s. c o m*/ return ret; } if (resource.equals(this.src2)) { FluidStack ret = this.src2.copy(); ret.amount = Math.min(resource.amount, ret.amount); if (doDrain) { this.src2.amount -= ret.amount; if (this.src2.amount == 0) this.src2 = null; } return ret; } return null; }