Posted March 9, 201411 yr 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); } }
March 9, 201411 yr Author 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.
March 10, 201411 yr Author 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]
March 11, 201411 yr Author 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.
March 11, 201411 yr Author Sorry, stupid mistake. It still doesn't work though (I cast both to double).
March 11, 201411 yr 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.
March 12, 201411 yr Author Ok. I will work on it. I can give you my complete source code if you tell me how.
March 12, 201411 yr Author 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.