Posted November 10, 201510 yr Hi everyone, I have a little problem with my "machine", but it will probably apply to it more like a "chest". When I place any item in my input slot, nothing strange happens, but if I try to take that item out then it seems copied. It looks that my machine has that item in the input slot, but it stops working (if(inputSlot.stackSize == 0) progress = 0). It's something like ghost item: it disappears if I try to take it out or reopen the GUI. I had the same problem with shift-clicking, but it was solved by: if(te.worldObj.isRemote) return null; in Container.transferStackInSlot. I know that it is client-server sync problem, but I have no idea what piece of code I should modify in that case. My TileEntity: http://pastebin.com/VxFVf8qj and Container: http://pastebin.com/edwPCweR Did anyone had similar problem? Sorry if I write something wrong in English, I'm not native English speaker.
November 10, 201510 yr You shouldn't need to check if the world is remote in your transferStackInSlot method - it can run the same on both sides. #onInventoryChanged is when you are supposed to iterate through all the stacks and replace any that have stack size of 0 with null. Calling super on an interface method (e.g. #onInventoryChanged) does absolutely nothing - interfaces do not provide implementations. You really shouldn't need to constantly mark your block for an update. Look at TileEntityFurnace and you'll see it never calls that method; you probably shouldn't, either. Use your Container properly for sending data to the client side via #detectAndSendChanges etc. In fact, the best advice I can give you is seriously look more closely at TileEntityFurnace and model your methods off of those. You are all over the place in there. Also, don't use FMLCommonHandler#getEffectiveSide when you already have a world object; world.isRemote gives you the side much more efficiently. http://i.imgur.com/NdrFdld.png[/img]
November 10, 201510 yr Author Thanks! It finally works! I checked worldObj.isRemote in #transferStackInSlot because it seemed to remove that issue when shift-clicking. Now, when I iterate through stacks in #onInventoryChanged, I don't need that. When I was changing my code basing on your advises, I observed one interesting thing: Calling super on #onInventoryChanged should do something, because it's implemented in Basic TileEntity from Minecraft. Also, I found out that TileEntityFurnace doesn't implement onInventoryChanged. When I'm implementing a method and super does nothing, then eclipse shows an error if I try to call it. Anyways, I removed that super - it did nothing in my case. Sorry if I write something wrong in English, I'm not native English speaker.
November 11, 201510 yr The base TileEntity class in 1.6.4 implements IInventory? I don't recall that being the case, and it certainly isn't since then, but glad it all worked out for you anyway. http://i.imgur.com/NdrFdld.png[/img]
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.