mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
# Conflicts: # src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBalefire.java # src/main/java/com/hbm/tileentity/machine/TileEntityAshpit.java # src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java # src/main/java/com/hbm/tileentity/machine/TileEntityCondenser.java # src/main/java/com/hbm/tileentity/machine/TileEntityCore.java # src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnace.java # src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java # src/main/java/com/hbm/tileentity/machine/TileEntityElectrolyser.java # src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java # src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java # src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java # src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java # src/main/java/com/hbm/tileentity/machine/TileEntityHeaterHeatex.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineCombustionEngine.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressor.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineDiesel.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineEPress.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineHephaestus.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachinePlasmaHeater.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachinePress.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachinePumpBase.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadGen.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineRadiolysis.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineSolderingStation.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java # src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbofan.java # src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java # src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticReformer.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCoker.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineGasFlare.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java # src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java # src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java # src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlAuto.java # src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java # src/main/java/com/hbm/tileentity/network/TileEntityCraneRouter.java # src/main/java/com/hbm/tileentity/network/TileEntityDroneCrate.java # src/main/java/com/hbm/tileentity/network/TileEntityDroneRequester.java # src/main/java/com/hbm/tileentity/turret/TileEntityTurretFritz.java # src/main/java/com/hbm/tileentity/turret/TileEntityTurretMaxwell.java # src/main/java/com/hbm/tileentity/turret/TileEntityTurretRichard.java # src/main/java/com/hbm/tileentity/turret/TileEntityTurretSentry.java # src/main/java/com/hbm/tileentity/turret/TileEntityTurretTauon.java
294 lines
7.7 KiB
Java
294 lines
7.7 KiB
Java
package com.hbm.tileentity.network;
|
|
|
|
import java.util.List;
|
|
|
|
import com.hbm.entity.item.EntityDeliveryDrone;
|
|
import com.hbm.interfaces.IControlReceiver;
|
|
import com.hbm.inventory.FluidStack;
|
|
import com.hbm.inventory.container.ContainerDroneCrate;
|
|
import com.hbm.inventory.fluid.Fluids;
|
|
import com.hbm.inventory.fluid.tank.FluidTank;
|
|
import com.hbm.inventory.gui.GUIDroneCrate;
|
|
import com.hbm.tileentity.IFluidCopiable;
|
|
import com.hbm.tileentity.IGUIProvider;
|
|
import com.hbm.tileentity.TileEntityMachineBase;
|
|
import com.hbm.util.BufferUtil;
|
|
import com.hbm.util.ParticleUtil;
|
|
import com.hbm.util.fauxpointtwelve.BlockPos;
|
|
|
|
import api.hbm.fluid.IFluidStandardTransceiver;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.Container;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.AxisAlignedBB;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraft.world.World;
|
|
|
|
public class TileEntityDroneCrate extends TileEntityMachineBase implements IGUIProvider, IControlReceiver, IDroneLinkable, IFluidStandardTransceiver, IFluidCopiable {
|
|
|
|
public FluidTank tank;
|
|
|
|
public int nextX = -1;
|
|
public int nextY = -1;
|
|
public int nextZ = -1;
|
|
|
|
public boolean sendingMode = false;
|
|
public boolean itemType = true;
|
|
|
|
public TileEntityDroneCrate() {
|
|
super(19);
|
|
this.tank = new FluidTank(Fluids.NONE, 64_000);
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "container.droneCrate";
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
|
|
if(!worldObj.isRemote) {
|
|
BlockPos pos = getCoord();
|
|
this.tank.setType(18, slots);
|
|
|
|
if(sendingMode && !itemType && worldObj.getTotalWorldTime() % 20 == 0) {
|
|
this.subscribeToAllAround(tank.getTankType(), this);
|
|
}
|
|
|
|
if(!sendingMode && !itemType && worldObj.getTotalWorldTime() % 20 == 0) {
|
|
this.sendFluidToAll(tank, this);
|
|
}
|
|
|
|
if(nextY != -1) {
|
|
|
|
List<EntityDeliveryDrone> drones = worldObj.getEntitiesWithinAABB(EntityDeliveryDrone.class, AxisAlignedBB.getBoundingBox(xCoord, yCoord + 1, zCoord, xCoord + 1, yCoord + 2, zCoord + 1));
|
|
for(EntityDeliveryDrone drone : drones) {
|
|
if(Vec3.createVectorHelper(drone.motionX, drone.motionY, drone.motionZ).lengthVector() < 0.05) {
|
|
drone.setTarget(nextX + 0.5, nextY, nextZ + 0.5);
|
|
|
|
if(sendingMode && itemType) loadItems(drone);
|
|
if(!sendingMode && itemType) unloadItems(drone);
|
|
if(sendingMode && !itemType) loadFluid(drone);
|
|
if(!sendingMode && !itemType) unloadFluid(drone);
|
|
}
|
|
}
|
|
|
|
ParticleUtil.spawnDroneLine(worldObj,
|
|
pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5,
|
|
(nextX - pos.getX()), (nextY - pos.getY()), (nextZ - pos.getZ()), 0x00ffff);
|
|
}
|
|
|
|
networkPackNT(25);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void serialize(ByteBuf buf) {
|
|
BufferUtil.writeIntArray(buf, new int[] {
|
|
this.nextX,
|
|
this.nextY,
|
|
this.nextZ
|
|
});
|
|
buf.writeBoolean(this.sendingMode);
|
|
buf.writeBoolean(this.itemType);
|
|
tank.serialize(buf);
|
|
}
|
|
|
|
@Override
|
|
public void deserialize(ByteBuf buf) {
|
|
int[] pos = BufferUtil.readIntArray(buf);
|
|
this.nextX = pos[0];
|
|
this.nextY = pos[1];
|
|
this.nextZ = pos[2];
|
|
this.sendingMode = buf.readBoolean();
|
|
this.itemType = buf.readBoolean();
|
|
tank.deserialize(buf);
|
|
}
|
|
|
|
protected void loadItems(EntityDeliveryDrone drone) {
|
|
|
|
if(drone.getAppearance() != 0) return;
|
|
|
|
boolean loaded = false;
|
|
|
|
for(int i = 0; i < 18; i++) {
|
|
if(this.slots[i] != null) {
|
|
loaded = true;
|
|
drone.setInventorySlotContents(i, this.slots[i].copy());
|
|
this.slots[i] = null;
|
|
}
|
|
}
|
|
|
|
if(loaded) {
|
|
this.markDirty();
|
|
drone.setAppearance(1);
|
|
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:item.unpack", 0.5F, 0.75F);
|
|
}
|
|
}
|
|
|
|
protected void unloadItems(EntityDeliveryDrone drone) {
|
|
|
|
if(drone.getAppearance() != 1) return;
|
|
|
|
boolean emptied = true;
|
|
|
|
for(int i = 0; i < 18; i++) {
|
|
ItemStack droneSlot = drone.getStackInSlot(i);
|
|
|
|
if(this.slots[i] == null && droneSlot != null) {
|
|
this.slots[i] = droneSlot.copy();
|
|
drone.setInventorySlotContents(i, null);
|
|
} else if(this.slots[i] != null && droneSlot != null) {
|
|
emptied = false;
|
|
}
|
|
}
|
|
|
|
this.markDirty();
|
|
|
|
if(emptied) {
|
|
drone.setAppearance(0);
|
|
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:item.unpack", 0.5F, 0.75F);
|
|
}
|
|
}
|
|
|
|
protected void loadFluid(EntityDeliveryDrone drone) {
|
|
|
|
if(drone.getAppearance() != 0) return;
|
|
|
|
if(this.tank.getFill() > 0) {
|
|
drone.fluid = new FluidStack(tank.getTankType(), tank.getFill());
|
|
this.tank.setFill(0);
|
|
drone.setAppearance(2);
|
|
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:item.unpack", 0.5F, 0.75F);
|
|
|
|
this.markDirty();
|
|
}
|
|
}
|
|
|
|
protected void unloadFluid(EntityDeliveryDrone drone) {
|
|
|
|
if(drone.getAppearance() != 2) return;
|
|
|
|
if(drone.fluid != null && drone.fluid.type == tank.getTankType()) {
|
|
|
|
if(drone.fluid.fill + tank.getFill() <= tank.getMaxFill()) {
|
|
tank.setFill(tank.getFill() + drone.fluid.fill);
|
|
drone.fluid = null;
|
|
drone.setAppearance(0);
|
|
} else {
|
|
int overshoot = drone.fluid.fill + tank.getFill() - tank.getMaxFill();
|
|
tank.setFill(tank.getMaxFill());
|
|
drone.fluid.fill = overshoot;
|
|
}
|
|
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:item.unpack", 0.5F, 0.75F);
|
|
|
|
this.markDirty();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
|
|
return new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
|
|
}
|
|
|
|
@Override
|
|
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public BlockPos getPoint() {
|
|
return new BlockPos(xCoord, yCoord + 1, zCoord);
|
|
}
|
|
|
|
@Override
|
|
public void setNextTarget(int x, int y, int z) {
|
|
this.nextX = x;
|
|
this.nextY = y;
|
|
this.nextZ = z;
|
|
this.markDirty();
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
|
|
int[] pos = nbt.getIntArray("pos");
|
|
this.nextX = pos[0];
|
|
this.nextY = pos[1];
|
|
this.nextZ = pos[2];
|
|
this.sendingMode = nbt.getBoolean("mode");
|
|
this.itemType = nbt.getBoolean("type");
|
|
tank.readFromNBT(nbt, "t");
|
|
}
|
|
|
|
public BlockPos getCoord() {
|
|
return new BlockPos(xCoord, yCoord + 1, zCoord);
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
|
|
nbt.setIntArray("pos", new int[] {nextX, nextY, nextZ});
|
|
nbt.setBoolean("mode", sendingMode);
|
|
nbt.setBoolean("type", itemType);
|
|
tank.writeToNBT(nbt, "t");
|
|
}
|
|
|
|
@Override
|
|
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new ContainerDroneCrate(player.inventory, this);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new GUIDroneCrate(player.inventory, this);
|
|
}
|
|
|
|
@Override
|
|
public boolean hasPermission(EntityPlayer player) {
|
|
return this.isUseableByPlayer(player);
|
|
}
|
|
|
|
@Override
|
|
public void receiveControl(NBTTagCompound data) {
|
|
|
|
if(data.hasKey("mode")) {
|
|
this.sendingMode = !this.sendingMode;
|
|
this.markChanged();
|
|
}
|
|
|
|
if(data.hasKey("type")) {
|
|
this.itemType = !this.itemType;
|
|
this.markChanged();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public FluidTank[] getAllTanks() {
|
|
return new FluidTank[] { tank };
|
|
}
|
|
|
|
@Override
|
|
public FluidTank[] getSendingTanks() {
|
|
return !sendingMode && !itemType ? new FluidTank[] { tank } : new FluidTank[0];
|
|
}
|
|
|
|
@Override
|
|
public FluidTank[] getReceivingTanks() {
|
|
return sendingMode && !itemType ? new FluidTank[] { tank } : new FluidTank[0];
|
|
}
|
|
}
|