BallOfEnergy e7b5240a9d Merge remote-tracking branch 'upstream/master' into Optimization
# 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
2024-09-18 19:07:46 -05:00

210 lines
6.0 KiB
Java

package com.hbm.tileentity.network;
import api.hbm.conveyor.IConveyorBelt;
import com.hbm.entity.item.EntityMovingPackage;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerCraneBoxer;
import com.hbm.inventory.gui.GUICraneBoxer;
import com.hbm.tileentity.IGUIProvider;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
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.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityCraneBoxer extends TileEntityCraneBase implements IGUIProvider, IControlReceiver {
public byte mode = 0;
public static final byte MODE_4 = 0;
public static final byte MODE_8 = 1;
public static final byte MODE_16 = 2;
public static final byte MODE_REDSTONE = 3;
private boolean lastRedstone = false;
public TileEntityCraneBoxer() {
super(7 * 3);
}
@Override
public String getName() {
return "container.craneBoxer";
}
@Override
public void updateEntity() {
super.updateEntity();
if(!worldObj.isRemote) {
boolean redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
if(mode == MODE_REDSTONE && redstone && !lastRedstone) {
ForgeDirection outputSide = getOutputSide();
Block b = worldObj.getBlock(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ);
IConveyorBelt belt = null;
if(b instanceof IConveyorBelt) {
belt = (IConveyorBelt) b;
}
int pack = 0;
for(int i = 0; i < slots.length; i++) {
if(slots[i] != null) {
pack++;
}
}
if(belt != null && pack > 0) {
ItemStack[] box = new ItemStack[pack];
for(int i = 0; i < slots.length && pack > 0; i++) {
if(slots[i] != null) {
pack--;
box[pack] = slots[i].copy();
slots[i] = null;
}
}
EntityMovingPackage moving = new EntityMovingPackage(worldObj);
Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55);
Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos);
moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord);
moving.setItemStacks(box);
worldObj.spawnEntityInWorld(moving);
}
}
this.lastRedstone = redstone;
if(mode != MODE_REDSTONE && worldObj.getTotalWorldTime() % 2 == 0) {
int pack = 1;
switch(mode) {
case MODE_4: pack = 4; break;
case MODE_8: pack = 8; break;
case MODE_16: pack = 16; break;
}
int fullStacks = 0;
// NO!
/*StorageManifest manifest = new StorageManifest(); //i wrote some of this for a feature that i scrapped so why not make proper use of it?
for(int i = 0; i < slots.length; i++) {
if(slots[i] != null) {
manifest.writeStack(slots[i]);
}
}*/
for(int i = 0; i < slots.length; i++) {
if(slots[i] != null && slots[i].stackSize == slots[i].getMaxStackSize()) {
fullStacks++;
}
}
ForgeDirection outputSide = getOutputSide();
Block b = worldObj.getBlock(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ);
IConveyorBelt belt = null;
if(b instanceof IConveyorBelt) {
belt = (IConveyorBelt) b;
}
if(belt != null && fullStacks >= pack) {
ItemStack[] box = new ItemStack[pack];
for(int i = 0; i < slots.length && pack > 0; i++) {
if(slots[i] != null && slots[i].stackSize == slots[i].getMaxStackSize()) {
pack--;
box[pack] = slots[i].copy();
slots[i] = null;
}
}
EntityMovingPackage moving = new EntityMovingPackage(worldObj);
Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55);
Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos);
moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord);
moving.setItemStacks(box);
worldObj.spawnEntityInWorld(moving);
}
}
this.networkPackNT(15);
}
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
buf.writeByte(this.mode);
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
this.mode = buf.readByte();
}
@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, 18, 19, 20 };
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
return true;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.mode = nbt.getByte("mode");
this.lastRedstone = nbt.getBoolean("lastRedstone");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setByte("mode", mode);
nbt.setBoolean("lastRedstone", lastRedstone);
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerCraneBoxer(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUICraneBoxer(player.inventory, this);
}
@Override
public boolean hasPermission(EntityPlayer player) {
return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20;
}
@Override
public void receiveControl(NBTTagCompound data) {
if(data.hasKey("toggle")) {
this.mode = (byte) ((this.mode + 1) % 4);
}
}
}