Jump to content

Recommended Posts

Posted

Hi everybody, I am making a gui with a progress bar (arrow actualy), but for some reason it doesn't update properly.  I'm not sending any packets, which might be part of the problem, but I don't know how to fix it.

 

Code:

 

 


@SideOnly(Side.CLIENT)
public class GUIMageForge extends GuiContainer {

public static final int myYSize = 202;
public static final int myXSize = 176;

public TileEntityMageForge getTile(){
	return ((ContainerMageForge)this.inventorySlots).getTileEntity();
}

public GUIMageForge(InventoryPlayer invPlayer, TileEntityMageForge tileEntity) {
	super(new ContainerMageForge(invPlayer, tileEntity));

	xSize = myXSize;
	ySize = myYSize;

}

private static final ResourceLocation texture = new ResourceLocation("tn3", "textures/gui/mageforgeGUI.png");

@Override
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {

	GL11.glColor4f(1, 1, 1, 1);

	super.mc.renderEngine.bindTexture(texture);

	drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, xSize, ySize);

	drawArrow();

}

private void drawArrow() {

	int srcX = 0;
	int srcY = 202;

	int endX = (int) ((double)116 * getTile().getPrecentFinished());
        
	drawTexturedModalRect(guiLeft + 32, guiTop + 52, srcX, srcY, endX, 22);

}

protected void drawGuiContainerForegroundLayer(int x, int y) {

	if(getTile().getTimeLeft() != -1)
		fontRenderer.drawString("Time Left: " + getTile().getTimeLeft(), 50, 50, 0x404040);

	fontRenderer.drawString("Heat: " + getTile().getHeat(), 135, 100, 0x404040);

}

}

 

 

Posted

TileEntity (a little messy):

 

 


package Technomage3.both.Blocks.tileentities;

import java.util.ArrayList;
import java.util.Arrays;

import Technomage3.both.Blocks.tileentities.recipies.MageForgeRecipie;
import Technomage3.both.Interfaces.ItemValidator;
import Technomage3.both.Network.TMPacketHandeler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.common.ForgeDirection;

public class TileEntityMageForge extends TileEntity implements ISidedInventory {

public TileEntityMageForge(){
	stacks = new ItemStack[9];
}

public static final int maxHeat = 500;

public static ItemValidator getFuelValidator(){

	return new ItemValidator(){

		@Override
		public boolean isValid(ItemStack stack) {
			return TileEntityFurnace.isItemFuel(stack);
		}

	};

}

private static ArrayList<MageForgeRecipie> recipieList = new ArrayList<MageForgeRecipie>();

public double getPrecentFinished(){
	if(actRec != null){
		System.out.println((double)timeIn / (double)actRec.getTime());
		return ((double)timeIn / (double)actRec.getTime());
	}else{
		return (double)0;
	}
}

public static boolean addRecipie(MageForgeRecipie r){
	return r.getBase() != null ? recipieList.add(r) : false;
}

private ItemStack[] stacks;

private MageForgeRecipie actRec;

private int timeIn = 0;

private int heat;

public void resetRecipie(){
	timeIn = 0;
	actRec = null;
	onInventoryChanged();
}

public boolean containsStack(ItemStack have, ItemStack lookFor){

	return have != null && have.itemID == lookFor.itemID &&
			have.getItemDamage() == lookFor.getItemDamage() &&
			have.stackSize >= lookFor.stackSize;



}

public boolean containsRecipie(MageForgeRecipie rec) {

	if(stacks[0] == null)
		return false;

	return  containsStack(stacks[0], rec.getBase()) && 
			containsStack(stacks[1], rec.getAdditives()[0]) && 
			containsStack(stacks[2], rec.getAdditives()[1]) && 
			containsStack(stacks[3], rec.getAdditives()[2]) && 
			containsStack(stacks[4], rec.getAdditives()[3]);

}

public void updateEntity(){

	if(!worldObj.isRemote){
		//heat--;

		takeFuel();

		if(actRec == null)
			findRecipie();


		if(actRec != null){

			if(!containsRecipie(actRec) || heat < actRec.getMinHeat())
				resetRecipie();
			else if(timeIn < actRec.getTime()){
				timeIn++;
			}
			else if(timeIn >= actRec.getTime())
				makeActRecipie();

		}

		for(ItemStack s : stacks){

			if(s != null && s.stackSize <= 0)
				s = null;

		}

		sendUpdatePacket();


	}
	onInventoryChanged();
	super.updateEntity();
}

private void sendUpdatePacket() {
	TMPacketHandeler.sendMageForgeTimePacket(this);

}

private void takeFuel() {

	int room = maxHeat - heat;

	for(int i : getFuelSlots()){

		if(stacks[i] != null && TileEntityFurnace.getItemBurnTime(stacks[i])  > 0 && TileEntityFurnace.getItemBurnTime(stacks[i]) <= room){
			stacks[i].stackSize -= 1;
			heat += TileEntityFurnace.getItemBurnTime(stacks[i]);
			onInventoryChanged();
		}
	}


}

private void findRecipie() {

	for(MageForgeRecipie r : recipieList) {

		if(containsRecipie(r) && actRec == null)
			actRec = r;
	}

}

private void makeActRecipie() {

	if(containsRecipie(actRec) && canFitResult()){

		stacks[0].stackSize -= actRec.getBase().stackSize;

		decrStackSize(1, actRec.getAdditives()[0].stackSize);
		decrStackSize(2, actRec.getAdditives()[1].stackSize);
		decrStackSize(3, actRec.getAdditives()[2].stackSize);
		decrStackSize(4, actRec.getAdditives()[3].stackSize);

		if(stacks[8] == null)
			stacks[8] = actRec.getResult();
		else if(stacks[8].itemID == actRec.getResult().itemID)
			stacks[8].stackSize += actRec.getResult().stackSize;

		onInventoryChanged();

	}

	resetRecipie();

}

private boolean canFitResult() {

	if(actRec == null)
		return false;

	if(stacks[8] == null)
		return true;

	return 
			(stacks[8].itemID == actRec.getResult().itemID && stacks[8].getItemDamage() == actRec.getResult().getItemDamage() && stacks[8].stackSize + actRec.getResult().stackSize <= stacks[8].getMaxStackSize())
			|| stacks[8] == null || stacks[8].stackSize <= 0;
}

public int[] getFuelSlots(){

	int[] a = {5, 6, 7};

	return a; 

}

public int[] getAdditiveSlots(){

	int[] a = {1, 2, 3, 4};

	return a; 

}

@Override
public int getSizeInventory() {
	return 9;
}

@Override
public ItemStack getStackInSlot(int i) {
	return stacks[i];
}

@Override
public ItemStack decrStackSize(int i, int j) {

	ItemStack itemstack = getStackInSlot(i);

	if (itemstack != null) {
		if (itemstack.stackSize <= j) {
			setInventorySlotContents(i, null);
			onInventoryChanged();
		}else{
			itemstack = itemstack.splitStack(j);
			onInventoryChanged();
		}
	}

	return itemstack;

}

@Override
public ItemStack getStackInSlotOnClosing(int i) {

	ItemStack s = getStackInSlot(i);

	setInventorySlotContents(i, null);

	return s;
}

@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {

	if(itemstack != null && itemstack.stackSize > getInventoryStackLimit())
		itemstack.stackSize = getInventoryStackLimit();


	stacks[i] = itemstack;

	onInventoryChanged();

}

@Override
public String getInvName() {
	return "Mage Forge";
}

@Override
public boolean isInvNameLocalized() {
	return false;
}

@Override
public int getInventoryStackLimit() {
	return 64;
}

@Override
public boolean isUseableByPlayer(EntityPlayer entityplayer) {
	return entityplayer.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) <= 64;
}

@Override
public void openChest() {

}

@Override
public void closeChest() {

}

@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) {

	if(Arrays.asList(getFuelSlots()).contains(i))
			return TileEntityFurnace.isItemFuel(itemstack);

	if(i == 
		return false;

	return true;

}

@Override
public int[] getAccessibleSlotsFromSide(int var1) {

	if(var1 == ForgeDirection.UP.ordinal())
		return getAdditiveSlots();

	if(var1 == ForgeDirection.DOWN.ordinal())
		return getFuelSlots();

	int[] a = {0, 8};

	return a;

}

@Override
public boolean canInsertItem(int i, ItemStack itemstack, int j) {

	return
			Arrays.asList(getAccessibleSlotsFromSide(j)).contains(i) &&
			isItemValidForSlot(i, itemstack);

}

@Override
public boolean canExtractItem(int i, ItemStack itemstack, int j) {

	return Arrays.asList(getAccessibleSlotsFromSide(j)).contains(i);

}

@Override
public void writeToNBT(NBTTagCompound compound) {
	super.writeToNBT(compound);

	NBTTagList items = new NBTTagList();

	for (int i = 0; i < getSizeInventory(); i++) {		
		ItemStack stack = getStackInSlot(i);

		if (stack != null) {
			NBTTagCompound item = new NBTTagCompound();
			item.setByte("Slot", (byte)i);
			stack.writeToNBT(item);
			items.appendTag(item);
		}
	}

	compound.setTag("Items", items);
}

@Override
public void readFromNBT(NBTTagCompound compound) {
	super.readFromNBT(compound);

	NBTTagList items = compound.getTagList("Items");

	for (int i = 0; i < items.tagCount(); i++) {
		NBTTagCompound item = (NBTTagCompound)items.tagAt(i);
		int slot = item.getByte("Slot");

		if (slot >= 0 && slot < getSizeInventory()) {
			setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(item));
		}
	}
}

public int getTimeLeft() {
	return actRec != null ? actRec.getTime() - timeIn : -1;
}

public int getHeat() {
	return heat;
}

}

 

 

Container:

 

 


public class ContainerMageForge extends Container {

private TileEntityMageForge tile;

public ContainerMageForge(InventoryPlayer invPlayer, TileEntityMageForge forge){
	tile = forge;

	for(int x = 0 ; x < 9 ; x ++)
		addSlotToContainer(new Slot(invPlayer, x, 8 + 18 * x, 178));

	for(int y = 0 ; y < 3 ; y++) {
		for(int x = 0 ; x < 9 ; x++){
			addSlotToContainer(new Slot(invPlayer, x + y * 9 + 9, 8 + 18 * x, 120 + y * 18));
		}
	}

	// additive slots
	for(int x = 0 ; x < 4 ; x++){
		addSlotToContainer(new Slot(tile, x + 1, x* 18 + 53 , 25));
	}

	// fuel slots
	for(int x = 0 ; x < 3 ; x++){
		addSlotToContainer(new ItemSelectorSlot(tile, TileEntityMageForge.getFuelValidator(), x + 5, x* 23 + 55 , 96));
	}

	// base slot
	addSlotToContainer(new Slot(tile, 0, 11, 55));

	// result slot
	addSlotToContainer(new SlotPickupOnly(tile, 8, 152, 55));

}

public TileEntityMageForge getTileEntity() {
	return tile;
}

@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
	return tile.isUseableByPlayer(entityplayer);
}

@Override
public ItemStack transferStackInSlot(EntityPlayer player, int i){
	return null;
}
}

[\code]
[\spoiler]

By "doesn't update properly" I mean that when I am crafting something (the arrow is supposed to progress as I nears completion), nothing happens.

Posted

Do I need to addCraftingToCrafters when I open the gui for a player?  I did everything from the furnace container, but it sill won't work.

 

Container:

 

 


private TileEntityMageForge tile;
private double lastTimePrecent;
private int lastHeat;


public ContainerMageForge(InventoryPlayer invPlayer, TileEntityMageForge forge){
	tile = forge;

	for(int x = 0 ; x < 9 ; x ++)
		addSlotToContainer(new Slot(invPlayer, x, 8 + 18 * x, 178));

	for(int y = 0 ; y < 3 ; y++) {
		for(int x = 0 ; x < 9 ; x++){
			addSlotToContainer(new Slot(invPlayer, x + y * 9 + 9, 8 + 18 * x, 120 + y * 18));
		}
	}

	// additive slots
	for(int x = 0 ; x < 4 ; x++){
		addSlotToContainer(new Slot(tile, x + 1, x* 18 + 53 , 25));
	}

	// fuel slots
	for(int x = 0 ; x < 3 ; x++){
		addSlotToContainer(new ItemSelectorSlot(tile, TileEntityMageForge.getFuelValidator(), x + 5, x* 23 + 55 , 96));
	}

	// base slot
	addSlotToContainer(new Slot(tile, 0, 11, 55));

	// result slot
	addSlotToContainer(new SlotPickupOnly(tile, 8, 152, 55));

}

public TileEntityMageForge getTileEntity() {
	return tile;
}

@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
	return tile.isUseableByPlayer(entityplayer);
}

@Override
public ItemStack transferStackInSlot(EntityPlayer player, int i){
	return null;
}

@Override
public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
        super.addCraftingToCrafters(par1ICrafting);
        par1ICrafting.sendProgressBarUpdate(this, 0, this.tile.getTimeLeft());
        par1ICrafting.sendProgressBarUpdate(this, 1, this.tile.getHeat());
    }

public void detectAndSendChanges()
    {
        super.detectAndSendChanges();

        for (int i = 0; i < this.crafters.size(); ++i)
        {
            ICrafting icrafting = (ICrafting)this.crafters.get(i);

            if (this.lastHeat != this.tile.getHeat())
            {
                icrafting.sendProgressBarUpdate(this, 1, this.tile.getHeat());
            }

            if (this.lastTimePrecent != this.tile.getPrecentFinishedAsInt())
            {
                icrafting.sendProgressBarUpdate(this, 0, (int) this.tile.getPrecentFinishedAsInt());
            }

            
        }

        this.lastHeat = this.tile.getHeat();
        this.lastTimePrecent = this.tile.getPrecentFinishedAsInt();
    }

@SideOnly(Side.CLIENT)
    public void updateProgressBar(int par1, int par2)
    {
        if (par1 == 0)
        {
            this.tile.setPercentFinished(par2);
        }

        if (par1 == 1)
        {
            this.tile.setHeat(par2);
        }

        
    }


}

[\code]
[\spoiler]

Posted

Better?

 

Container:

 

 


package Technomage3.both.Interfaces;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import Technomage3.both.Blocks.tileentities.TileEntityMageForge;
import am2.playerextensions.ExtendedProperties;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;

public class ContainerMageForge extends Container {

private TileEntityMageForge tile;
private double lastTimePrecent;
private int lastHeat;


public ContainerMageForge(InventoryPlayer invPlayer, TileEntityMageForge forge){
	tile = forge;

	for(int x = 0 ; x < 9 ; x ++)
		addSlotToContainer(new Slot(invPlayer, x, 8 + 18 * x, 178));

	for(int y = 0 ; y < 3 ; y++) {
		for(int x = 0 ; x < 9 ; x++){
			addSlotToContainer(new Slot(invPlayer, x + y * 9 + 9, 8 + 18 * x, 120 + y * 18));
		}
	}

	// additive slots
	for(int x = 0 ; x < 4 ; x++){
		addSlotToContainer(new Slot(tile, x + 1, x* 18 + 53 , 25));
	}

	// fuel slots
	for(int x = 0 ; x < 3 ; x++){
		addSlotToContainer(new ItemSelectorSlot(tile, TileEntityMageForge.getFuelValidator(), x + 5, x* 23 + 55 , 96));
	}

	// base slot
	addSlotToContainer(new Slot(tile, 0, 11, 55));

	// result slot
	addSlotToContainer(new SlotPickupOnly(tile, 8, 152, 55));

}

public TileEntityMageForge getTileEntity() {
	return tile;
}

@Override
public boolean canInteractWith(EntityPlayer entityplayer) {
	return tile.isUseableByPlayer(entityplayer);
}

@Override
public ItemStack transferStackInSlot(EntityPlayer player, int i){
	return null;
}

@Override
public void addCraftingToCrafters(ICrafting par1ICrafting)
    {
        super.addCraftingToCrafters(par1ICrafting);
        par1ICrafting.sendProgressBarUpdate(this, 0, this.tile.getTimeLeft());
        par1ICrafting.sendProgressBarUpdate(this, 1, this.tile.getHeat());
    }

public void detectAndSendChanges()
    {
        super.detectAndSendChanges();

        for (int i = 0; i < this.crafters.size(); ++i)
        {
            ICrafting icrafting = (ICrafting)this.crafters.get(i);

            if (this.lastHeat != this.tile.getHeat())
            {
                icrafting.sendProgressBarUpdate(this, 1, this.tile.getHeat());
            }

            if (this.lastTimePrecent != this.tile.getPrecentFinishedAsInt())
            {
                icrafting.sendProgressBarUpdate(this, 0, (int) this.tile.getPrecentFinishedAsInt());
            }

            
        }

        this.lastHeat = this.tile.getHeat();
        this.lastTimePrecent = this.tile.getPrecentFinishedAsInt();
    }

@SideOnly(Side.CLIENT)
    public void updateProgressBar(int par1, int par2)
    {
        if (par1 == 0)
        {
            this.tile.setPercentFinished(par2 / 100);
        }

        if (par1 == 1)
        {
            this.tile.setHeat(par2);
        }

        
    }


}

 

 

 

TileEntity:

 

 


package Technomage3.both.Blocks.tileentities;

import java.util.ArrayList;
import java.util.Arrays;

import Technomage3.both.Blocks.tileentities.recipies.MageForgeRecipie;
import Technomage3.both.Interfaces.ItemValidator;
import Technomage3.both.Network.TMPacketHandeler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraftforge.common.ForgeDirection;

public class TileEntityMageForge extends TileEntity implements ISidedInventory {

public TileEntityMageForge(){
	stacks = new ItemStack[9];
}

public static final int maxHeat = 500;

public void setPercentFinished(double p){

	if(p > 1 || p < 0 || actRec == null)
		return;

	timeIn = (int) (p * (double)actRec.getTime());

}

public void setHeat(int h){
	heat = h;
}

public static ItemValidator getFuelValidator(){

	return new ItemValidator(){

		@Override
		public boolean isValid(ItemStack stack) {
			return TileEntityFurnace.isItemFuel(stack);
		}

	};

}

private static ArrayList<MageForgeRecipie> recipieList = new ArrayList<MageForgeRecipie>();

public int getPrecentFinishedAsInt(){
	if(actRec != null){
		return (int) (((double)timeIn / (double)actRec.getTime()) * 100);
	}else{
		return (int)0;
	}
}

public static boolean addRecipie(MageForgeRecipie r){
	return r.getBase() != null ? recipieList.add(r) : false;
}

private ItemStack[] stacks;

private MageForgeRecipie actRec;

private int timeIn = 0;

private int heat;

public void resetRecipie(){
	timeIn = 0;
	actRec = null;
	onInventoryChanged();
}

public boolean containsStack(ItemStack have, ItemStack lookFor){

	return have != null && have.itemID == lookFor.itemID &&
			have.getItemDamage() == lookFor.getItemDamage() &&
			have.stackSize >= lookFor.stackSize;



}

public boolean containsRecipie(MageForgeRecipie rec) {

	if(stacks[0] == null)
		return false;

	return  containsStack(stacks[0], rec.getBase()) && 
			containsStack(stacks[1], rec.getAdditives()[0]) && 
			containsStack(stacks[2], rec.getAdditives()[1]) && 
			containsStack(stacks[3], rec.getAdditives()[2]) && 
			containsStack(stacks[4], rec.getAdditives()[3]);

}

public void updateEntity(){

	if(!worldObj.isRemote){
		//heat--;

		takeFuel();

		if(actRec == null)
			findRecipie();


		if(actRec != null){

			if(!containsRecipie(actRec) || heat < actRec.getMinHeat())
				resetRecipie();
			else if(timeIn < actRec.getTime()){
				timeIn++;
			}
			else if(timeIn >= actRec.getTime())
				makeActRecipie();

		}

		for(ItemStack s : stacks){

			if(s != null && s.stackSize <= 0)
				s = null;

		}



	}
	onInventoryChanged();
	super.updateEntity();
}

private void takeFuel() {

	int room = maxHeat - heat;

	for(int i : getFuelSlots()){

		if(stacks[i] != null && TileEntityFurnace.getItemBurnTime(stacks[i])  > 0 && TileEntityFurnace.getItemBurnTime(stacks[i]) <= room){
			stacks[i].stackSize -= 1;
			heat += TileEntityFurnace.getItemBurnTime(stacks[i]);
			onInventoryChanged();
		}
	}


}

private void findRecipie() {

	for(MageForgeRecipie r : recipieList) {

		if(containsRecipie(r) && actRec == null)
			actRec = r;
	}

}

private void makeActRecipie() {

	if(containsRecipie(actRec) && canFitResult()){

		stacks[0].stackSize -= actRec.getBase().stackSize;

		decrStackSize(1, actRec.getAdditives()[0].stackSize);
		decrStackSize(2, actRec.getAdditives()[1].stackSize);
		decrStackSize(3, actRec.getAdditives()[2].stackSize);
		decrStackSize(4, actRec.getAdditives()[3].stackSize);

		if(stacks[8] == null)
			stacks[8] = actRec.getResult();
		else if(stacks[8].itemID == actRec.getResult().itemID)
			stacks[8].stackSize += actRec.getResult().stackSize;

		onInventoryChanged();

	}

	resetRecipie();

}

private boolean canFitResult() {

	if(actRec == null)
		return false;

	if(stacks[8] == null)
		return true;

	return 
			(stacks[8].itemID == actRec.getResult().itemID && stacks[8].getItemDamage() == actRec.getResult().getItemDamage() && stacks[8].stackSize + actRec.getResult().stackSize <= stacks[8].getMaxStackSize())
			|| stacks[8] == null || stacks[8].stackSize <= 0;
}

public int[] getFuelSlots(){

	int[] a = {5, 6, 7};

	return a; 

}

public int[] getAdditiveSlots(){

	int[] a = {1, 2, 3, 4};

	return a; 

}

@Override
public int getSizeInventory() {
	return 9;
}

@Override
public ItemStack getStackInSlot(int i) {
	return stacks[i];
}

@Override
public ItemStack decrStackSize(int i, int j) {

	ItemStack itemstack = getStackInSlot(i);

	if (itemstack != null) {
		if (itemstack.stackSize <= j) {
			setInventorySlotContents(i, null);
			onInventoryChanged();
		}else{
			itemstack = itemstack.splitStack(j);
			onInventoryChanged();
		}
	}

	return itemstack;

}

@Override
public ItemStack getStackInSlotOnClosing(int i) {

	ItemStack s = getStackInSlot(i);

	setInventorySlotContents(i, null);

	return s;
}

@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {

	if(itemstack != null && itemstack.stackSize > getInventoryStackLimit())
		itemstack.stackSize = getInventoryStackLimit();


	stacks[i] = itemstack;

	onInventoryChanged();

}

@Override
public String getInvName() {
	return "Mage Forge";
}

@Override
public boolean isInvNameLocalized() {
	return false;
}

@Override
public int getInventoryStackLimit() {
	return 64;
}

@Override
public boolean isUseableByPlayer(EntityPlayer entityplayer) {
	return entityplayer.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) <= 64;
}

@Override
public void openChest() {

}

@Override
public void closeChest() {

}

@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack) {

	if(Arrays.asList(getFuelSlots()).contains(i))
			return TileEntityFurnace.isItemFuel(itemstack);

	if(i == 
		return false;

	return true;

}

@Override
public int[] getAccessibleSlotsFromSide(int var1) {

	if(var1 == ForgeDirection.UP.ordinal())
		return getAdditiveSlots();

	if(var1 == ForgeDirection.DOWN.ordinal())
		return getFuelSlots();

	int[] a = {0, 8};

	return a;

}

@Override
public boolean canInsertItem(int i, ItemStack itemstack, int j) {

	return
			Arrays.asList(getAccessibleSlotsFromSide(j)).contains(i) &&
			isItemValidForSlot(i, itemstack);

}

@Override
public boolean canExtractItem(int i, ItemStack itemstack, int j) {

	return Arrays.asList(getAccessibleSlotsFromSide(j)).contains(i);

}

@Override
public void writeToNBT(NBTTagCompound compound) {
	super.writeToNBT(compound);

	NBTTagList items = new NBTTagList();

	for (int i = 0; i < getSizeInventory(); i++) {		
		ItemStack stack = getStackInSlot(i);

		if (stack != null) {
			NBTTagCompound item = new NBTTagCompound();
			item.setByte("Slot", (byte)i);
			stack.writeToNBT(item);
			items.appendTag(item);
		}
	}

	compound.setTag("Items", items);
}

@Override
public void readFromNBT(NBTTagCompound compound) {
	super.readFromNBT(compound);

	NBTTagList items = compound.getTagList("Items");

	for (int i = 0; i < items.tagCount(); i++) {
		NBTTagCompound item = (NBTTagCompound)items.tagAt(i);
		int slot = item.getByte("Slot");

		if (slot >= 0 && slot < getSizeInventory()) {
			setInventorySlotContents(slot, ItemStack.loadItemStackFromNBT(item));
		}
	}
}

public int getTimeLeft() {
	return actRec != null ? actRec.getTime() - timeIn : -1;
}

public int getHeat() {
	return heat;
}

}

 

 

 

Also, if I put print statements in the method, they print the correct value, but if I put the same statements in the gui, but using the return value of the method, they print 0 (wrong), even though the method prints (and returns) the correct value.

 

Posted

Sorry, stupid mistake.  It still doesn't work though (I cast both to double).

 

par2 / 100D is sufficient.

 

(int / double = double)

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

I figured it out.  In the updateEntity() for my tile entity, I had a if(!worldObj.isRemote) statement, which meant it didn't get updated on the client side.  Thank you everybody how helped.

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



×
×
  • Create New...

Important Information

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