@Override public TMultiPart newPart( ItemStack stack, EntityPlayer player, World world, BlockCoord coord, int face, Vector3 vecHit) { TransmitterType type = TransmitterType.values()[stack.getItemDamage()]; if (type.getTransmission() != TransmissionType.ITEM) { Coord4D obj = new Coord4D(coord.x, coord.y, coord.z, world.provider.dimensionId); List<ITransmitterNetwork<?, ?>> networks = new ArrayList<ITransmitterNetwork<?, ?>>(); for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { TileEntity tile = obj.getFromSide(side).getTileEntity(world); if (tile instanceof IGridTransmitter && TransmissionType.checkTransmissionType(tile, type.getTransmission())) { networks.add(((IGridTransmitter) tile).getTransmitterNetwork()); } } if (networks.size() > 0) { if (!networks.iterator().next().canMerge(networks)) { return null; } } } return PartTransmitter.getPartType(TransmitterType.values()[getDamage(stack)]); }
@Override public void load(NBTTagCompound nbtTags) { super.load(nbtTags); if (nbtTags.hasKey("cacheFluid")) { cacheFluid = FluidStack.loadFluidStackFromNBT(nbtTags.getCompoundTag("cacheFluid")); } }
@Override public void onChunkUnload() { if (!world().isRemote) { if (lastWrite != null) { if (getTransmitterNetwork().fluidStored != null) { getTransmitterNetwork().fluidStored.amount -= lastWrite.amount; if (getTransmitterNetwork().fluidStored.amount <= 0) { getTransmitterNetwork().fluidStored = null; } } } } super.onChunkUnload(); }
@Override public void update() { if (!world().isRemote) { if (cacheFluid != null) { if (getTransmitterNetwork().fluidStored == null) { getTransmitterNetwork().fluidStored = cacheFluid; } else { getTransmitterNetwork().fluidStored.amount += cacheFluid.amount; } cacheFluid = null; } if (getTransmitterNetwork(false) != null && getTransmitterNetwork(false).getSize() > 0) { int last = lastWrite != null ? lastWrite.amount : 0; if (last != getSaveShare()) { MekanismUtils.saveChunk(tile()); } } IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile()); for (ForgeDirection side : getConnections(ConnectionType.PULL)) { if (connectedAcceptors[side.ordinal()] != null) { IFluidHandler container = connectedAcceptors[side.ordinal()]; if (container != null) { FluidStack received = container.drain(side.getOpposite(), 100, false); if (received != null && received.amount != 0) { container.drain( side.getOpposite(), getTransmitterNetwork().emit(received, true), true); } } } } } super.update(); }
@Override public void save(NBTTagCompound nbtTags) { super.save(nbtTags); if (getTransmitterNetwork().fluidStored != null) { int remain = getTransmitterNetwork().fluidStored.amount % getTransmitterNetwork().transmitters.size(); int toSave = getTransmitterNetwork().fluidStored.amount / getTransmitterNetwork().transmitters.size(); if (getTransmitterNetwork().isFirst((IGridTransmitter<FluidNetwork>) tile())) { toSave += remain; } if (toSave > 0) { FluidStack stack = new FluidStack(getTransmitterNetwork().fluidStored.getFluid(), toSave); lastWrite = stack; nbtTags.setCompoundTag("cacheFluid", stack.writeToNBT(new NBTTagCompound())); } } }