mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
199 lines
5.5 KiB
Java
199 lines
5.5 KiB
Java
package com.hbm.tileentity.machine;
|
|
|
|
import java.util.List;
|
|
|
|
import com.hbm.inventory.container.ContainerICFPress;
|
|
import com.hbm.inventory.fluid.Fluids;
|
|
import com.hbm.inventory.fluid.tank.FluidTank;
|
|
import com.hbm.inventory.gui.GUIICFPress;
|
|
import com.hbm.inventory.material.MaterialShapes;
|
|
import com.hbm.inventory.material.Mats;
|
|
import com.hbm.inventory.material.Mats.MaterialStack;
|
|
import com.hbm.items.ModItems;
|
|
import com.hbm.items.machine.ItemICFPellet;
|
|
import com.hbm.items.machine.ItemICFPellet.EnumICFFuel;
|
|
import com.hbm.tileentity.IGUIProvider;
|
|
import com.hbm.tileentity.TileEntityMachineBase;
|
|
|
|
import api.hbm.fluid.IFluidStandardReceiver;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import io.netty.buffer.ByteBuf;
|
|
import net.minecraft.client.gui.GuiScreen;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.Container;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.world.World;
|
|
|
|
public class TileEntityICFPress extends TileEntityMachineBase implements IFluidStandardReceiver, IGUIProvider {
|
|
|
|
public FluidTank[] tanks;
|
|
public int muon;
|
|
public static final int maxMuon = 16;
|
|
|
|
public TileEntityICFPress() {
|
|
super(8);
|
|
this.tanks = new FluidTank[2];
|
|
this.tanks[0] = new FluidTank(Fluids.DEUTERIUM, 16_000);
|
|
this.tanks[1] = new FluidTank(Fluids.TRITIUM, 16_000);
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return "container.machineICFPress";
|
|
}
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
|
|
if(!worldObj.isRemote) {
|
|
|
|
this.tanks[0].setType(6, slots);
|
|
this.tanks[1].setType(7, slots);
|
|
|
|
if(worldObj.getTotalWorldTime() % 20 == 0) {
|
|
this.subscribeToAllAround(tanks[0].getTankType(), this);
|
|
this.subscribeToAllAround(tanks[1].getTankType(), this);
|
|
}
|
|
|
|
if(muon <= 0 && slots[2] != null && slots[2].getItem() == ModItems.particle_muon) {
|
|
|
|
ItemStack container = slots[2].getItem().getContainerItem(slots[2]);
|
|
boolean canStore = false;
|
|
|
|
if(container == null) {
|
|
canStore = true;
|
|
} else if(slots[3] == null) {
|
|
slots[3] = container.copy();
|
|
canStore = true;
|
|
} else if(slots[3].getItem() == container.getItem() && slots[3].getItemDamage() == container.getItemDamage() && slots[3].stackSize < slots[3].getMaxStackSize()) {
|
|
slots[3].stackSize++;
|
|
canStore = true;
|
|
}
|
|
|
|
if(canStore) {
|
|
this.muon = this.maxMuon;
|
|
this.decrStackSize(2, 1);
|
|
this.markDirty();
|
|
}
|
|
}
|
|
|
|
press();
|
|
|
|
this.networkPackNT(15);
|
|
}
|
|
}
|
|
|
|
public void press() {
|
|
if(slots[0] == null || slots[0].getItem() != ModItems.icf_pellet_empty) return;
|
|
if(slots[1] != null) return;
|
|
|
|
ItemICFPellet.init();
|
|
|
|
EnumICFFuel fuel1 = getFuel(tanks[0], slots[4], 0);
|
|
EnumICFFuel fuel2 = getFuel(tanks[1], slots[5], 1);
|
|
|
|
if(fuel1 == null || fuel2 == null || fuel1 == fuel2) return;
|
|
|
|
slots[1] = ItemICFPellet.setup(fuel1, fuel2, muon > 0);
|
|
|
|
if(muon > 0) muon--;
|
|
|
|
this.decrStackSize(0, 1);
|
|
if(usedFluid[0]) tanks[0].setFill(tanks[0].getFill() - 1000); else this.decrStackSize(4, 1);
|
|
if(usedFluid[1]) tanks[1].setFill(tanks[1].getFill() - 1000); else this.decrStackSize(5, 1);
|
|
|
|
this.markChanged();
|
|
}
|
|
|
|
public static boolean[] usedFluid = new boolean[2];
|
|
|
|
public EnumICFFuel getFuel(FluidTank tank, ItemStack slot, int index) {
|
|
usedFluid[index] = false;
|
|
if(tank.getFill() >= 1000 && ItemICFPellet.fluidMap.containsKey(tank.getTankType())) {
|
|
usedFluid[index] = true;
|
|
return ItemICFPellet.fluidMap.get(tank.getTankType());
|
|
}
|
|
if(slot == null) return null;
|
|
List<MaterialStack> mats = Mats.getMaterialsFromItem(slot);
|
|
if(mats == null || mats.size() != 1) return null;
|
|
MaterialStack mat = mats.get(0);
|
|
if(mat.amount != MaterialShapes.INGOT.q(1)) return null;
|
|
return ItemICFPellet.materialMap.get(mat.material);
|
|
}
|
|
|
|
@Override public void serialize(ByteBuf buf) {
|
|
super.serialize(buf);
|
|
|
|
buf.writeByte((byte) muon);
|
|
tanks[0].serialize(buf);
|
|
tanks[1].serialize(buf);
|
|
}
|
|
|
|
@Override public void deserialize(ByteBuf buf) {
|
|
super.deserialize(buf);
|
|
|
|
this.muon = buf.readByte();
|
|
tanks[0].deserialize(buf);
|
|
tanks[1].deserialize(buf);
|
|
}
|
|
|
|
@Override
|
|
public boolean isItemValidForSlot(int slot, ItemStack stack) {
|
|
if(stack.getItem() == ModItems.icf_pellet_empty) return slot == 0;
|
|
if(stack.getItem() == ModItems.particle_muon) return slot == 2;
|
|
return slot == 4 || slot == 5;
|
|
}
|
|
|
|
public static final int[] topBottom = new int[] {0, 1, 2, 3, 4};
|
|
public static final int[] sides = new int[] {0, 1, 2, 3, 5};
|
|
|
|
@Override
|
|
public int[] getAccessibleSlotsFromSide(int side) {
|
|
return side == 0 || side == 1 ? topBottom : sides;
|
|
}
|
|
|
|
@Override
|
|
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
|
|
return slot == 1;
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
tanks[0].readFromNBT(nbt, "t0");
|
|
tanks[1].readFromNBT(nbt, "t1");
|
|
this.muon = nbt.getByte("muon");
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
tanks[0].writeToNBT(nbt, "t0");
|
|
tanks[1].writeToNBT(nbt, "t1");
|
|
nbt.setByte("muon", (byte) muon);
|
|
}
|
|
|
|
@Override
|
|
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new ContainerICFPress(player.inventory, this);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
|
return new GUIICFPress(player.inventory, this);
|
|
}
|
|
|
|
@Override
|
|
public FluidTank[] getAllTanks() {
|
|
return tanks;
|
|
}
|
|
|
|
@Override
|
|
public FluidTank[] getReceivingTanks() {
|
|
return tanks;
|
|
}
|
|
}
|