Jump to content

[1.9+] What's the proper way of doing stuff on the main thread in packets?


Recommended Posts

Posted

I need to do some OpenGL stuff in one of my packets (rendering items/blocks and saving them to files) but the OpenGL calls fail because there's no opengl thing associated with the thread, so I need to do this stuff on the main thread. I know you have to schedule an object through the World object or something but I'm not sure how to actually do it.

I like trains.

Posted

I plan to update to 1.10.2. My mod exports item, recipe and mod information to JSON files to be used by a web application which also uses the item/blocks' icons to make it easier to tell what it is you're choosing which I use some OpenGL for. The recipes are collected server-side and then sent to the client. When this is done the server sends a recipe list completion packet then the client exports item, block and mod info then renders all the icons and saves them to files.

I like trains.

Posted

I'm sending the packet via a SimpleNetworkWrapper object. Originally my mod was to be all client side and it was working fine, the items and blocks were being rendered without a GUI but when I tried to add IndustrialCraft 2 support, none of its machine recipes were available so I'm making my mod require a server component to accurately get all the recipes.

I like trains.

Posted
This page explains how to schedule a task on the main thread from an
IMessageHandler

using

IThreadListener

.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Yeah because I haven't pushed any code that uses the packet system to my github because I have a jenkins server that autocompiles whenever I do a push and I didn't want people to download builds that would compile but not run.

I like trains.

Posted

I am just here to say how to do it properly:

 

Use packets to send whatever you need from server to client thread.

On client-netty thread schedule task to client thread (link Choonster gave).

On client thread (runnable) pass some things to some List (so for example - add list of ItemStacks to static client-sided PriorityQueue).

Use RenderGameOverlayEvent to render ItemStacks from queue on screen.

Use ClientTickEvent to remove items from PriorityQueue (so it will be like items show up and disappear after few ticks).

 

Note: I have no idea what is your exact goal so I just gave example on how to generally do this stuff.

 

P.S: Most of this stuff requires more notes (important) that were not included - that later.

 

P.S 2: If you EVER touch OpenGL from outside of rendering events or Gui classes - you are doing it wrong.

1.7.10 is no longer supported by forge, you are on your own.

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.