Jump to content

Recommended Posts

Posted

Hey there,

 

I've been making a mod for the past month or so, and have recently, with a friend, been going through previous code to clean it up, prevent unnecessary lag etc. However, I have 2 small but annoying problems with a nuclear fission reactor which takes a fuel cell, runs a cycle until the fuel runs out, then leaves behind the depleted cell. The first problem is that the fuel level seems to flicker when I put fuel in, (an updating issue I guess), and the other problem is that a 'ghost' image of the depleted fuel cell appears straight after I put the original fuel cell in (clicking on the depleted cell or re-entering the GUI gets rid of it).

 

Tile Entity class:

package com.nr.mod.blocks.tileentities;

import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyHandler;
import cofh.api.energy.IEnergyReceiver;
import cofh.lib.util.helpers.BlockHelper;
import cofh.lib.util.helpers.EnergyHelper;

import com.nr.mod.NuclearRelativistics;
import com.nr.mod.blocks.NRBlocks;
import com.nr.mod.handlers.BombType;
import com.nr.mod.handlers.EntityBomb;
import com.nr.mod.handlers.NRExplosion;
import com.nr.mod.items.NRItems;

public class TileEntityFissionReactorGraphite extends TileEntityInventory implements IEnergyHandler, IEnergyConnection, ISidedInventory, IEnergyReceiver
{
    public EnergyStorage storage = new EnergyStorage(1000000, 1000000);
    
    public int rawR = 1;
    
    public int R = rawR; 
    
    public int D = R*2 + 1;
    public int SR = R-1; 
    public int SD = SR*2 + 1;
    
    public boolean flag;
    public boolean flag1 = false;
    
    public int E;
    public int H;
    public int energy;
    public int fueltime;
public int fueltype;
    public int power = NuclearRelativistics.fissionRF/25;
    public int heat;
    public String typeoffuel = "No Fuel";
    public int fuelmult;
    public int MBNumber;
    public String problem = "Casing Incomplete";
    
    public int maxTransfer = 500000;
    public String direction;
    private static final int[] slotsTop = new int[] {0};
    private static final int[] slotsSides = new int[] {1};

    public TileEntityFissionReactorGraphite()
    {
        super.slots = new ItemStack[3];
        super.localizedName = "Fission Reactor";
    }

    public void updateEntity()
    {
    	super.updateEntity();
    	product();
    	fuel();
        upgrade();
        energy();
        overheat(worldObj, this.xCoord, this.yCoord, this.zCoord, 25F, BombType.BOMB_STANDARD);
        typeoffuelx();
        addEnergy();
        if (flag != flag1) { flag1 = flag; BlockFissionReactorGraphite.updateFissionReactorGraphiteBlockState(flag, this.worldObj, this.xCoord, this.yCoord, this.zCoord); }
    	markDirty();
    }
    
    public void overheat(World world, double x, double y, double z, float radius, BombType type)
    {
    	if (this.heat >= 500000)
    	{
    		if (this.MBNumber == 3)
    		{
    		NRExplosion.createExplosion(new EntityBomb(world).setType(type), world, (double)this.xCoord, (double)this.yCoord + R, (double)this.zCoord - R, 25 + 4*R, 1000F, true);
    		}
    		else if (this.MBNumber == 4)
    		{
    		NRExplosion.createExplosion(new EntityBomb(world).setType(type), world, (double)this.xCoord + R, (double)this.yCoord + R, (double)this.zCoord, 25 + 4*R, 1000F, true);
    		}
    		else if (this.MBNumber == 2)
    		{
    		NRExplosion.createExplosion(new EntityBomb(world).setType(type), world, (double)this.xCoord, (double)this.yCoord + R, (double)this.zCoord + R, 25 + 4*R, 1000F, true);
    		}
    		else if (this.MBNumber == 5)
    		{
    		NRExplosion.createExplosion(new EntityBomb(world).setType(type), world, (double)this.xCoord - R, (double)this.yCoord + R, (double)this.zCoord, 25 + 4*R, 1000F, true);
    		}
    	}
    }
    
    public void typeoffuelx()
    {
    	if (this.fueltype == 1) { typeoffuel = "LEU"; fuelmult = 2; }
    	else if (this.fueltype == 2) { typeoffuel = "HEU"; fuelmult = 4; }
    	else if (this.fueltype == 3) { typeoffuel = "LEP"; fuelmult = 4; }
    	else if (this.fueltype == 4) { typeoffuel = "HEP"; fuelmult = 8; }
    	else if (this.fueltype == 5) { typeoffuel = "MOX"; fuelmult = 4; }
    	else if (this.fueltype == 6) { typeoffuel = "TBU"; fuelmult = 1; }
    	else if (this.fueltype == 7) { typeoffuel = "LEU"; fuelmult = 2; }
    	else if (this.fueltype ==  { typeoffuel = "HEU"; fuelmult = 4; }
    	else if (this.fueltype == 9) { typeoffuel = "LEP"; fuelmult = 4; }
    	else if (this.fueltype == 10) { typeoffuel = "HEP"; fuelmult = 8; }
    	else if (this.fueltype == 11) { typeoffuel = "MOX"; fuelmult = 4; }
    	else if (this.fueltype == 0) { typeoffuel = "No Fuel"; fuelmult = 0; }
    	else { typeoffuel = "No Fuel"; fuelmult = 0; }
    }

    private void energy()
    {
    	int prevE = this.storage.getEnergyStored();
    	int newE;
    	
    	int prevH = this.heat*2;
    	int newH;
    	
    	ForgeDirection forward = ForgeDirection.getOrientation(
          	    this.getBlockMetadata()).getOpposite();
          	  int x = xCoord + R * forward.offsetX;
          	  int y = yCoord;
          	  int z = zCoord + R * forward.offsetZ;
    	
        if (this.getStackInSlot(1) == null && worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord) && this.fueltime > 0 && this.fueltype != 0 && this.multiblock(this.worldObj, this.xCoord, this.yCoord, this.zCoord))
        {
        	flag = true;
        	
        	//LEU
        	if (this.fueltype == 1)
        	{
        		this.storage.receiveEnergy(30*this.power*R, false);
                this.fueltime -= 300*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 7*2*R;
        	}

        	//HEU
        	if (this.fueltype == 2)
        	{
        		this.storage.receiveEnergy(135*this.power*R, false);
                this.fueltime -= 300*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 70*2*R;
        	}

        	//LEP
        	if (this.fueltype == 3)
        	{
        		this.storage.receiveEnergy(60*this.power*R, false);
                this.fueltime -= 576*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 21*2*R;
        	}

        	//HEP
        	if (this.fueltype == 4)
        	{
        		this.storage.receiveEnergy(270*this.power*R, false);
                this.fueltime -= 576*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 210*2*R;
        	}

        	//MOX
        	if (this.fueltype == 5)
        	{
        		this.storage.receiveEnergy(45*this.power*R, false);
                this.fueltime -= 400*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 15*2*R;
        	}
        	
        	//TBU
        	if (this.fueltype == 6)
        	{
        		this.storage.receiveEnergy(8*this.power*R, false);
                this.fueltime -= 75*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 1*2*R;
        	}
        	
        	//LEU
        	if (this.fueltype == 7)
        	{
        		this.storage.receiveEnergy(30*this.power*R, false);
                this.fueltime -= 300*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 7*2*R;
        	}

        	//HEU
        	if (this.fueltype == 
        	{
        		this.storage.receiveEnergy(135*this.power*R, false);
                this.fueltime -= 300*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 70*2*R;
        	}

        	//LEP
        	if (this.fueltype == 9)
        	{
        		this.storage.receiveEnergy(60*this.power*R, false);
                this.fueltime -= 576*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 21*2*R;
        	}

        	//HEP
        	if (this.fueltype == 10)
        	{
        		this.storage.receiveEnergy(270*this.power*R, false);
                this.fueltime -= 576*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 210*2*R;
        	}

        	//MOX
        	if (this.fueltype == 11)
        	{
        		this.storage.receiveEnergy(45*this.power*R, false);
                this.fueltime -= 400*(100/NuclearRelativistics.fissionEfficiency);
                this.heat += 15*2*R;
        	}
        	
        	for (int Z4 = -SR; Z4 <= SR; Z4++) {
          	   for (int X4 = -SR; X4 <= SR; X4++) {
          		for (int Y4 = 1; Y4 <= SD; Y4++) {
          	    if(this.worldObj.getBlock(x + X4, y + Y4, z + Z4)==NRBlocks.graphiteBlock){
          	    	this.storage.receiveEnergy((this.power*fuelmult)/2, false); this.heat += 2*fuelmult*R; }
          	    if(this.worldObj.getBlock(x + X4, y + Y4, z + Z4)==Blocks.lava){
          	    	this.storage.receiveEnergy((this.power*fuelmult)/10, false); this.heat += 4*fuelmult*R; }
          	}}}
        	
        } else { flag = false; }
          	
          	if (this.multiblock(this.worldObj, this.xCoord, this.yCoord, this.zCoord)) {
          	  for (int Z4 = -SR; Z4 <= SR; Z4++) {
             	   for (int X4 = -SR; X4 <= SR; X4++) {
             		for (int Y4 = 1; Y4 <= SD; Y4++) {
             	    if(this.worldObj.getBlock(x + X4, y + Y4, z + Z4)==NRBlocks.coolerBlock){
             	    	if (this.heat > 16-1) { this.heat -= 16; } else { this.heat = 0; } }
             	    if(this.worldObj.getBlock(x + X4, y + Y4, z + Z4)==Blocks.water){
             	    	if (this.heat > 4-1) { this.heat -= 4; } else { this.heat = 0; } }
             	}}}}
          	
          	newE = this.storage.getEnergyStored();
          	E = newE-prevE;
          	prevE = newE;
          	
          	newH = this.heat*2;
          	H = newH-prevH;
          	prevH = newH;
    }
    
    public boolean multiblock(World world, int x, int y, int z)
    {
    	Block block = this.blockType;
    	@SuppressWarnings("unused")
    	BlockFissionReactorGraphite reactorGraphite = (BlockFissionReactorGraphite)block;
    	if (checkReactor())
    	{
    		return true;
    	}
    		return false;
    }

    public boolean multiblockstring()
    {
    	if (multiblock(getWorldObj(), this.xCoord, this.yCoord, this.zCoord))
    	{
    		return true;
    	}
    		return false;
    }

private void addEnergy()
    {
        TileEntity down = BlockHelper.getAdjacentTileEntity(this, ForgeDirection.DOWN);
        TileEntity up = BlockHelper.getAdjacentTileEntity(this, ForgeDirection.UP);
        TileEntity north = BlockHelper.getAdjacentTileEntity(this, ForgeDirection.NORTH);
        TileEntity south = BlockHelper.getAdjacentTileEntity(this, ForgeDirection.SOUTH);
        TileEntity east = BlockHelper.getAdjacentTileEntity(this, ForgeDirection.EAST);
        TileEntity west = BlockHelper.getAdjacentTileEntity(this, ForgeDirection.WEST);


            if (EnergyHelper.isEnergyReceiverFromSide(down, ForgeDirection.DOWN))
            {
                this.storage.extractEnergy(((IEnergyHandler)down).receiveEnergy(ForgeDirection.UP, this.storage.extractEnergy(this.maxTransfer, true), false), false);
            }


            else if (EnergyHelper.isEnergyReceiverFromSide(up, ForgeDirection.UP))
            {
                this.storage.extractEnergy(((IEnergyHandler)up).receiveEnergy(ForgeDirection.DOWN, this.storage.extractEnergy(this.maxTransfer, true), false), false);
            }


            else if (EnergyHelper.isEnergyReceiverFromSide(west, ForgeDirection.WEST))
            {
                this.storage.extractEnergy(((IEnergyHandler)west).receiveEnergy(ForgeDirection.EAST, this.storage.extractEnergy(this.maxTransfer, true), false), false);
            }


            else if (EnergyHelper.isEnergyReceiverFromSide(east, ForgeDirection.EAST))
            {
                this.storage.extractEnergy(((IEnergyHandler)east).receiveEnergy(ForgeDirection.WEST, this.storage.extractEnergy(this.maxTransfer, true), false), false);
            }


            else if (EnergyHelper.isEnergyReceiverFromSide(north, ForgeDirection.NORTH))
            {
                this.storage.extractEnergy(((IEnergyHandler)north).receiveEnergy(ForgeDirection.SOUTH, this.storage.extractEnergy(this.maxTransfer, true), false), false);
            }

            else if (EnergyHelper.isEnergyReceiverFromSide(south, ForgeDirection.SOUTH))
            {
            this.storage.extractEnergy(((IEnergyHandler)south).receiveEnergy(ForgeDirection.NORTH, this.storage.extractEnergy(this.maxTransfer, true), false), false);
            }
    }

    @SuppressWarnings("unused")
private boolean canAddEnergy()
    {
        return this.storage.getEnergyStored() == 0 ? false : this.direction != "none";
    }

    public void updateHandlers()
    {
        String d = this.getHandlers();

        if (d == null)
        {
            this.direction = "none";
        }
        else
        {
            this.direction = d;
        }
    }
    
    public String getInvName()
{
	return this.isInvNameLocalized() ? this.localizedName : "Fission Reactor";
}

public boolean isInvNameLocalized()
{
	return this.localizedName != null && this.localizedName.length() > 0;
}

    public String getHandlers()
    {
        TileEntity down = this.worldObj.getTileEntity(this.xCoord, this.yCoord - 1, this.zCoord);
        TileEntity up = this.worldObj.getTileEntity(this.xCoord, this.yCoord + 1, this.zCoord);
        TileEntity north = this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord - 1);
        TileEntity south = this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord + 1);
        TileEntity east = this.worldObj.getTileEntity(this.xCoord + 1, this.yCoord, this.zCoord);
        TileEntity west = this.worldObj.getTileEntity(this.xCoord - 1, this.yCoord, this.zCoord);
        return EnergyHelper.isEnergyReceiverFromSide(down, ForgeDirection.DOWN) ? "down" : (EnergyHelper.isEnergyReceiverFromSide(up, ForgeDirection.UP) ? "up" : (EnergyHelper.isEnergyReceiverFromSide(west, ForgeDirection.WEST) ? "west" : (EnergyHelper.isEnergyReceiverFromSide(east, ForgeDirection.EAST) ? "east" : (EnergyHelper.isEnergyReceiverFromSide(north, ForgeDirection.NORTH) ? "north" : (EnergyHelper.isEnergyReceiverFromSide(south, ForgeDirection.SOUTH) ? "south" : "none")))));
    }

    private void fuel()
    {
        ItemStack stack = this.getStackInSlot(0);
        ItemStack pstack = this.getStackInSlot(1);

        if (stack != null && pstack == null && isFuel(stack) && this.fueltime == 0 && this.fueltype == 0)
        {
            this.addFuel(fuelValue(stack));
            
            this.fueltype = TileEntityFissionReactorGraphite.setfueltype(stack);
            
            --this.slots[0].stackSize;

            if (this.slots[0].stackSize <= 0)
            {
                this.slots[0] = null;
            }
        }
    }
    
    private void upgrade()
    {
        ItemStack stack = this.getStackInSlot(2);

        if (stack != null && isUpgrade(stack))
        {
        	R = (int) (rawR + stack.stackSize);
        	D = R*2 + 1;
            SR = R-1; 
            SD = SR*2 + 1;
        	
        	if (R != rawR) {
        	}

            if (this.slots[2].stackSize <= 0)
            {
            	R = rawR;
            	D = R*2 + 1;
                SR = R-1; 
                SD = SR*2 + 1;
                this.slots[2] = null;
            }
        }
        else {
        R = rawR;
        D = R*2 + 1;
        SR = R-1; 
        SD = SR*2 + 1;
        }
    }
    
    private void product()
    {
        if (this.slots[1] == null && this.fueltime == 0 && this.fueltype != 0)
        {    
        	if (this.fueltype == 1)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 22); this.fueltype = 0; }

        	else if (this.fueltype == 2)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 23); this.fueltype = 0; }

        	else if (this.fueltype == 3)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 24); this.fueltype = 0; }

        	else if (this.fueltype == 4)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 25); this.fueltype = 0; }

        	else if (this.fueltype == 5)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 26); this.fueltype = 0; }

        	else if (this.fueltype == 6)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 27); this.fueltype = 0; }
        	
        	else if (this.fueltype == 7)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 28); this.fueltype = 0; }

        	else if (this.fueltype == 
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 29); this.fueltype = 0; }

        	else if (this.fueltype == 9)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 30); this.fueltype = 0; }

        	else if (this.fueltype == 10)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 31); this.fueltype = 0; }

        	else if (this.fueltype == 11)
        	{ this.slots[1] = new ItemStack(NRItems.fuel, 1, 32); this.fueltype = 0; }
        	
        	else {}
        }
    }
    
    public static boolean isFuel(ItemStack stack)
    {
        return fuelValue(stack) > 0 && setfueltype(stack) != 0;
    }
    
    public static boolean isUpgrade(ItemStack stack)
    {
        return stack.getItem() == NRItems.upgrade;
    }
    
    public static int fuelValue(ItemStack stack)
    {
	if (stack == null)
        {
            return 0;
        }
        else
        {
        	Item item = stack.getItem();
        	
        	if(item == new ItemStack (NRItems.fuel, 1, 11).getItem() && item.getDamage(stack) == 11) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 12).getItem() && item.getDamage(stack) == 12) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 13).getItem() && item.getDamage(stack) == 13) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 14).getItem() && item.getDamage(stack) == 14) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 15).getItem() && item.getDamage(stack) == 15) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 16).getItem() && item.getDamage(stack) == 16) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 17).getItem() && item.getDamage(stack) == 17) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 18).getItem() && item.getDamage(stack) == 18) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 19).getItem() && item.getDamage(stack) == 19) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 20).getItem() && item.getDamage(stack) == 20) { return 7200000; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 21).getItem() && item.getDamage(stack) == 21) { return 7200000; }
         	return 0; }
   }
    
    public static int setfueltype(ItemStack stack)
    {
	if (stack == null)
        {
            return 0;
        }
        else
        {
        	Item item = stack.getItem();
        	
        	if(item == new ItemStack (NRItems.fuel, 1, 11).getItem() && item.getDamage(stack) == 11) { return 1; }
  		   else if(item == new ItemStack (NRItems.fuel, 1, 12).getItem() && item.getDamage(stack) == 12) { return 2; }
  		   else if(item == new ItemStack (NRItems.fuel, 1, 13).getItem() && item.getDamage(stack) == 13) { return 3; }
  		   else if(item == new ItemStack (NRItems.fuel, 1, 14).getItem() && item.getDamage(stack) == 14) { return 4; }
  		   else if(item == new ItemStack (NRItems.fuel, 1, 15).getItem() && item.getDamage(stack) == 15) { return 5; }
  		   else if(item == new ItemStack (NRItems.fuel, 1, 16).getItem() && item.getDamage(stack) == 16) { return 6; }
  		   else if(item == new ItemStack (NRItems.fuel, 1, 17).getItem() && item.getDamage(stack) == 17) { return 7; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 18).getItem() && item.getDamage(stack) == 18) { return 8; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 19).getItem() && item.getDamage(stack) == 19) { return 9; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 20).getItem() && item.getDamage(stack) == 20) { return 10; }
   		   else if(item == new ItemStack (NRItems.fuel, 1, 21).getItem() && item.getDamage(stack) == 21) { return 11; }
        	return 0; }
   }

    public void readFromNBT(NBTTagCompound nbt)
    {
        super.readFromNBT(nbt);

        if (nbt.hasKey("storage"))
        {
            this.storage.readFromNBT(nbt.getCompoundTag("storage"));
        }

        this.typeoffuel = nbt.getString("Typeoffuel");
        this.problem = nbt.getString("problem");
        this.fueltime = nbt.getInteger("Fueltime");
        this.fueltype = nbt.getInteger("Fueltype");
        this.rawR = nbt.getInteger("rawR");
        this.R = nbt.getInteger("R");
        this.SR = nbt.getInteger("SR");
        this.D = nbt.getInteger("D");
        this.SD = nbt.getInteger("SD");
        this.E = nbt.getInteger("E");
        this.H = nbt.getInteger("H");
        this.flag = nbt.getBoolean("flag");
        this.flag1 = nbt.getBoolean("flag1");
        this.fuelmult = nbt.getInteger("Fuelmult");
        this.MBNumber = nbt.getInteger("MBN");
        this.heat = nbt.getInteger("Heat");
        this.power = nbt.getInteger("Power");
        NBTTagList list = nbt.getTagList("Items", 10);
        this.slots = new ItemStack[this.getSizeInventory()];

        for (int i = 0; i < list.tagCount(); ++i)
        {
            NBTTagCompound compound = list.getCompoundTagAt(i);
            byte b = compound.getByte("Slot");

            if (b >= 0 && b < this.slots.length)
            {
                this.slots[b] = ItemStack.loadItemStackFromNBT(compound);
            }
        }
    }

    public void writeToNBT(NBTTagCompound nbt)
    {
        super.writeToNBT(nbt);
        
        NBTTagCompound energyTag = new NBTTagCompound();
        this.storage.writeToNBT(energyTag);
        nbt.setTag("storage", energyTag);
        nbt.setInteger("Fueltime", this.fueltime);
        nbt.setInteger("Fueltype", this.fueltype);
        nbt.setInteger("rawR", this.rawR);
        nbt.setInteger("R", this.R);
        nbt.setInteger("SR", this.SR);
        nbt.setInteger("D", this.D);
        nbt.setInteger("SD", this.SD);
        nbt.setInteger("E", this.E);
        nbt.setInteger("H", this.H);
        nbt.setBoolean("flag", this.flag);
        nbt.setBoolean("flag1", this.flag1);
        nbt.setInteger("Fuelmult", this.fuelmult);
        nbt.setInteger("MBN", this.MBNumber);
        nbt.setInteger("Heat", this.heat);
        nbt.setInteger("Power", this.power);
        nbt.setString("Typeoffuel", this.typeoffuel);
        nbt.setString("problem", this.problem);
        NBTTagList list = new NBTTagList();

        for (int i = 0; i < this.slots.length; ++i)
        {
            if (this.slots[i] != null)
            {
                NBTTagCompound compound = new NBTTagCompound();
                compound.setByte("Slot", (byte)i);
                this.slots[i].writeToNBT(compound);
                list.appendTag(compound);
            }
        }

        nbt.setTag("Items", list);
        
        if(this.isInvNameLocalized())
	{
		nbt.setString("CustomName", this.localizedName);
	}
    }

    /**
     * Overriden in a sign to provide the text.
     */
    public Packet getDescriptionPacket()
    {
        NBTTagCompound nbtTag = new NBTTagCompound();
        nbtTag.setInteger("Energy", this.storage.getEnergyStored());
        this.energy = nbtTag.getInteger("Energy");
        this.writeToNBT(nbtTag);
        return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbtTag);
    }

    public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
    {
    	super.onDataPacket(net, packet);
        this.readFromNBT(packet.func_148857_g());
    }

    public void addHeat(int add)
    {
        this.heat += add;
    }
    
    public void addFuel(int add)
    {
        this.fueltime += add;
    }

    public void removeHeat(int remove)
    {
        this.heat -= remove;
    }
    
    public void removeFuel(int remove)
    {
        this.fueltime -= remove;
    }

    public boolean canConnectEnergy(ForgeDirection from)
    {
        return true;
    }

    public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
    {
        return 0;
    }

    public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
    {
        return 0;
    }

    public int getEnergyStored(ForgeDirection paramForgeDirection)
    {
        return this.storage.getEnergyStored();
    }

    public int getMaxEnergyStored(ForgeDirection paramForgeDirection)
    {
        return this.storage.getMaxEnergyStored();
    }

    /**
     * Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
     */
    public boolean isItemValidForSlot(int slot, ItemStack stack)
    {
        if (slot == 0)
        {
            return isFuel(stack);
        }
        else
        {
            return false;
        }
    }

    /**
     * Returns an array containing the indices of the slots that can be accessed by automation on the given side of this
     * block.
     */
    public int[] getAccessibleSlotsFromSide(int slot)
    {
        return slot == 0 ? slotsSides : slotsTop;
    }

    /**
     * Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canInsertItem(int slot, ItemStack stack, int par)
    {
        return this.isItemValidForSlot(slot, stack);
    }

    /**
     * Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item,
     * side
     */
    public boolean canExtractItem(int slot, ItemStack stack, int slots)
    {
        return slot == 1;
    }
    
    public int getInventoryStackLimit()
    {
        return 8;
    }
    
    private boolean checkReactor() { 
    	  ForgeDirection forward = ForgeDirection.getOrientation(
    	    this.getBlockMetadata()).getOpposite();
    	  int x = xCoord + R * forward.offsetX;
    	  int y = yCoord;
    	  int z = zCoord + R * forward.offsetZ;

    	  for (int Z4 = -R; Z4 <= R; Z4++) {
       	   for (int X4 = -R; X4 <= R; X4++) {
       		for (int Y4 = 0; Y4 <= 2*R; Y4++) {
       	     if(this.worldObj.getBlock(x + X4, y + Y4, z + Z4)==NRBlocks.fissionReactorGraphiteIdle || this.worldObj.getBlock(x + X4, y + Y4, z + Z4)==NRBlocks.fissionReactorGraphiteActive){
       	    	 if (x + X4 == this.xCoord && y + Y4 == this.yCoord && z + Z4 == this.zCoord) {} else {
       	    		 this.problem = "Multiple Controllers";
       	      return false;
       	}}}}}
    	  
    	  for (int Z1 = -SR; Z1 <= SR; Z1++) {
    	   for (int X1 = -SR; X1 <= SR; X1++) {
    	     if(this.worldObj.getBlock(x + X1, y, z + Z1)!=NRBlocks.reactorBlock){
    	    	 this.problem = "Casing Incomplete";
    	      return false;
    	    }
    	    if(this.worldObj.getBlock(x + X1, y+D-1, z + Z1)!=NRBlocks.reactorBlock){
    	    	this.problem = "Casing Incomplete";
    	     return false;
    	    }}}

    	  for (int Y2 = 1; Y2 <= SD; Y2++) {
    	  for (int XZ = -SR; XZ <= SR; XZ++) {
    	   if(this.worldObj.getBlock(x-R, y+Y2, z+XZ)!=NRBlocks.reactorBlock){
    		   this.problem = "Casing Incomplete";
    	    return false;
    	   	}
    	   if(this.worldObj.getBlock(x+R, y+Y2, z+XZ)!=NRBlocks.reactorBlock){
    		   this.problem = "Casing Incomplete";
    	    return false;
    	   	}
    	   if(x!=R&&x!=-R){
    	   if(this.worldObj.getBlock(x+XZ, y+Y2, z+R)!=NRBlocks.reactorBlock){
    		   this.problem = "Casing Incomplete";
    	    return false;
    	   	}
    	   if(this.worldObj.getBlock(x+XZ, y+Y2, z-R)!=NRBlocks.reactorBlock){
    		   this.problem = "Casing Incomplete";
    	    return false;
    	   }
    	    if(this.worldObj.getBlock(x, y+Y2, z)!=NRBlocks.cellBlock){
    	    	this.problem = "Fuel Rod Incomplete";
        	    return false;
    	    }}}}
    	  
    	  for (int Z3 = -SR; Z3 <= SR; Z3++) {
       	   for (int X3 = -SR; X3 <= SR; X3++) {
       		for (int Y3 = 1; Y3 <= SD; Y3++) {
       	     if(this.worldObj.getBlock(x + X3, y + Y3, z + Z3)==NRBlocks.reactorBlock){
       	    	this.problem = "Casing in Interior";
       	      return false;
       	    }}}}
     	   
    	  this.MBNumber = this.getBlockMetadata();
    	  //this.problem = "No Problem";
    	  return true;
    	 }
}

 

Thanks in advance for any help :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Managed to solve the issue myself. Solved by a fresh modpack instance.
    • Hello, so straight to the problem. Today i wanted to startup Enigmatica as usual and it just wont startup. Last night everything worked fine, i didnt even turn off my pc. Crash log: https://mclo.gs/GJ6Kcy1
    • Rubidium and Embeddium are versions of the same mod, you can only have one. I believe Embeddium is the one that's actively maintained.
    • Hello, New to modding, but have a solid CS foundation. I've created multiple custom BlockEntities that all have the same issue, which is that the inventory only updates on right click (overriding the useItemOn method). I've seen multiple posts on here outlining a similar issue to mine, but I've already implemented the solution of: overriding the correct methods in the BlockEntity class and calling setChanged(). I've tried every different place for setChanged() to no success. I'm wondering if I'm missing something else or if there was some change to sending data to the client in 1.21.5? Or will I have to use a custom packet sender? Here is the code for one of my BlockEntity classes with a single inventory slot: public class MyCustomBlockEntity extends BlockEntity { public final ItemStackHandler inventory = new ItemStackHandler(1) { @Override protected int getStackLimit(int slot, @NotNull ItemStack stack) { return 1; } @Override protected void onContentsChanged(int slot) { setChanged(); if (!level.isClientSide()) { level.setBlockAndUpdate(getBlockPos(), getBlockState()); } } }; public MyCustomBlockEntity(BlockPos pPos, BlockState pBlockState) { super(ModBlockEntities.MY_CUSTOM_BE.get(), pPos, pBlockState); } public void clearContents() { inventory.setStackInSlot(0, ItemStack.EMPTY); } public void dropItem() { SimpleContainer inv = new SimpleContainer(inventory.getSlots()); inv.setItem(0, inventory.getStackInSlot(0)); Containers.dropContents(this.level, this.worldPosition, inv); } @Override public void setRemoved() { dropItem(); super.setRemoved(); } @Override protected void saveAdditional(CompoundTag pTag, HolderLookup.Provider pRegistries) { super.saveAdditional(pTag, pRegistries); pTag.put("inventory", inventory.serializeNBT(pRegistries)); } @Override protected void loadAdditional(CompoundTag pTag, HolderLookup.Provider pRegistries) { super.loadAdditional(pTag, pRegistries); inventory.deserializeNBT(pRegistries, pTag.getCompound("inventory").get()); } @Override public Packet<ClientGamePacketListener> getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); } @Override public CompoundTag getUpdateTag(HolderLookup.Provider pRegistries) { return saveWithoutMetadata(pRegistries); } } Mostly encountering the issue when calling the clearContents() method anywhere outside of useItemOn() in the Block class. I've also tried overriding both the handleUpdateTag() and onDataPacket() methods, calling their super along with loadAdditional(), but neither changed the outcome. Thanks in advance for any replies.
    • Hi all! I’m working on a Jurassic Park-themed mod for Minecraft 1.20.1, aiming to include dinosaurs, fossils, DNA extraction, and cool machines. This is a free project, mainly passion-driven, and I’ll give full credit to everyone involved. this is the perfect opportunity for beginners of modeling and coding. This project will give you experience and a creative freedom If you love dinosaurs and Minecraft modding, hit me up! Thanks! Add Me ogfrost. <--- Discord
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.