Jump to content

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


LimpLungs

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)

 

alongside

 

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.

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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Minecraft 1.12.2 Forge 14.23.5.2860   Description: There was a severe problem during mod loading that has caused the game to fail net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from Advanced Solar Panels (advanced_solar_panels) Caused by: java.lang.NoClassDefFoundError: ic2/core/block/IInventorySlotHolder at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671) at java.lang.Class.getConstructor0(Class.java:3075) at java.lang.Class.newInstance(Class.java:412) at com.chocohead.advsolar.tiles.TEs.buildDummies(TEs.java:124) at com.chocohead.advsolar.AdvancedSolarPanels.init(AdvancedSolarPanels.java:125) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:637) at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) at com.google.common.eventbus.EventBus.post(EventBus.java:217) at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219) at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) at com.google.common.eventbus.EventBus.post(EventBus.java:217) at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136) at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:749) at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336) at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:535) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:378) at net.minecraft.client.main.Main.main(SourceFile:123) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) Caused by: java.lang.ClassNotFoundException: ic2.core.block.IInventorySlotHolder at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 46 more Caused by: java.lang.NullPointerException
    • You can try other builds of Quark/Zeta
    • Hello all, I recently tried to upgrade my Minecraft mod to version 1.21.3, and I seem to have a problem with the `RenderSystem#setShaderColor` method. Here is how the screen is usually supposed to look like: Here is how it looks at present: To further explain, the note labels atop of the note buttons are colored cyan (here) using `RenderSystem#setShaderColor`. The note buttons and labels get their colors from their native texture - white. This means that even though I set the coloring to apply to the label (top), it is applied to the button (bottom). What I conclude is happening then, in essence, is that this method (at least for my case) does not color the blit after - but rather the blit before..?  This also blocks me from later resetting the shader, as I need to set it back to white before the blitting is done, and not when it's done. So like... what? I've tested this further with other components that require this method, and this preceding-like behavior seems to be pretty consistent for them too.   I should mention that all the snippets I am about to show have all worked in past versions. In my class `ClientUtil`, the following methods are defined: public static void setShaderColor(final Color color, final float alpha) { RenderSystem.setShaderColor( color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, alpha ); } public static void setShaderColor(final Color color) { setShaderColor(color, 1); } public static void resetShaderColor() { setShaderColor(Color.WHITE); } //... public static RenderType guiRT(final ResourceLocation loc) { return RenderType.guiTextured(loc); } And here is the snippet from `NoteButtonRenderer#renderNote` using it: // "Note" here refers to those symbols in the middle of a note button protected void renderNote(final GuiGraphics gui, final InstrumentThemeLoader themeLoader) { final int noteWidth = noteButton.getWidth()/2, noteHeight = noteButton.getHeight()/2; ClientUtil.setShaderColor((noteButton.isPlaying() && !foreignPlaying) ? themeLoader.notePressed() : themeLoader.noteReleased() ); gui.blit(ClientUtil::guiRT, noteTextureProvider.get(), noteButton.getX() + noteWidth/2, noteButton.getY() + noteHeight/2, 0, 0, noteWidth, noteHeight, noteWidth, noteButton.getHeight()/2 ); ClientUtil.resetShaderColor(); } You may find the full source here. The odd thing is that Minecraft does seem to use this method the regular way I showed, for instance `SkyRenderer#renderSkyDisc` (not sure if I'l allowed to paste it). Could it be that I'm doing something wrong that leads to this issue..? I'm really stumped on this one.  I couldn't really find any change logs or documentation for this rendering API (even in this Fabric blog post), so I'm sorry if this seems obvious or anything.  Either way, any help would be appreciated.
    • This did work. rip Quark Thank you
    • It says Quark Requires zeta. do i just remove Quark? https://mclo.gs/cq799kI
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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