Jump to content

[SOLVED] [1.7.10] slightly different problem with markBlockForUpdate()


Recommended Posts

So I have my packet sending working for all my data, but the funny problem I am running into is I cannot use worldObj.markBlockForUpdate(xCoord, yCoord, zCoord) inside the updating of the texture method inside the custom TileEntity. What it requires me to do is:


Somewhere in the block (only viable place is in onBlockActivated) run:

Minecraft.getMinecraft().renderGlobal.markBlockForRenderUpdate(x, y, z);

world.markBlockForUpdate(x, y, z);


This has 2 problems. 1, I need it to update all the time (or at least every half a second or something), and second, it requires me to click on the block 2 more times before the texture finally updates. I don't know why it takes 2 times, but it does. Where can I move this code? I'm sick of posting snippets and then being asked for more of the code, so here are both the TileEntity and Block source:


TE- http://pastebin.com/wa9jbSEb

Block - http://pastebin.com/TmvzRFRG


Also, in previous tests, I've used both:


worldObj.markBlockForUpdate(xCoord, yCoord, zCoord)




Minecraft.getMinecraft().renderGlobal.markBlockForRenderUpdate(xCoord, yCoord, zCoord)


but then anywhere inside the TileEntity that I put the updateCircuitTextures(), it returns a divide by zero error, which is fixed when ran without the renderGlobal update, but then it doens't actually update it until I relaunch the save file.


So final question(s): Where can I safely put an update render/block method inside my TileEntity and have it update regularly, and if in a new method, where can I put that method to have it be updated regularly?

Link to comment
Share on other sites

The metadata is being stored as a way to get directions Left, Right, Back, Top, and Bottom, in relation to the direction the block was placed, because I need to change textures based on those directions instead of north, south, east, west. That functionality works perfectly fine.


As for using  updateCircuitTextures() inside of writeToNBT, I was trying to find a way to update the textures automatically, instead of needing to use it in "onBlockActivated()" inside the block class. THIS even works fine, except it doesn't update the block until a relaunch of the save file, unless I use specifically, world.markBlockForUpdate(x,y,z) inside the block class.


I want a way for it to update inside the tile entity, so that it automatically refreshes, or I can add a counter to refresh every so many ticks. Using worldObj.markBlockForUpdate() doesn't work, even when I add the updateCircuitTextures() to the onBlockActivated() method in the block. It just doesn't update it. I know using it in the NBT write sounds weird, but honestly, it is just 1 step before writing any of the NBT and then it gets ALL of the updated necessary integers needed to be stored. There is NOTHING wrong with using it here, it is just different from standard conventions, and I put it there because nothing else was working any differently, and it was my last attempt at getting it to work as intended.

Link to comment
Share on other sites

Ok, I changed out the metadata integer for just worldObj()getBlockMetadata(xCoord, yCoord, zCoord), thanks for that tip!


I removed the writeToNBT calling of my updateCircuitTextures().


The only problem is, I'm relatively new to server side vs client side / packet handling, so 2 questions:


1. Where can I learn about what functions are called server side and which are called client side, as well as which ones are updated regularly like the updateEntity() method ? (which from my understanding is client side)


2. Do you know one off the top of your head that I can put the updateCircuitTextures() into so I don't need it in the onBlockActivated() method?

Link to comment
Share on other sites

Thank you, I did manage to get it to work by switching the !worldObj.isRemote to just worldObj.isRemote, like you said, do it in server and not client.


However, is there still a good place to learn about server vs client side either specifically for minecraft or for java in general. I'm heading into computer science undergraduate for college this fall as a freshman, so everything so far has been self taught. I sure would like to get a better understanding of server vs client. From my experience here, it seems using a server side check makes it work inside the updateEntity(), but I don't know WHY that is, and so resources would be great if you, or anyone reading, has any for me to look at.

Link to comment
Share on other sites

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.

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.


  • Create New...

Important Information

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