Novârch Posted June 11, 2020 Share Posted June 11, 2020 In my mod I've made a "timestop" effect where all entities are supposed to stop moving and keep their velocity after the effect is undone. Everything currently works perfectly except the rendering of certain entities(arrows, item entities, etc.), they appear to continue moving and continuously snap back to their original position, but when I disable the effect their position and velocity are correct. Is there a way to fix this rendering issue, if so how? The mod's code can be found here, on GitHub, the event fires each tick from a custom entity. Quote It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support". Link to comment Share on other sites More sharing options...
poopoodice Posted June 11, 2020 Share Posted June 11, 2020 (edited) I'm thinking it's probably because they don't sync the velocity every tick (called update interval or velocity update... not sure), therefore the client does not know the entity has stopped it's motion... you may need to do that yourself Edited June 11, 2020 by poopoodice Quote Link to comment Share on other sites More sharing options...
Novârch Posted June 12, 2020 Author Share Posted June 12, 2020 (edited) 8 hours ago, poopoodice said: you may need to do that yourself What should I send SEntityVelocityPacket to, PacketDistributor#TRACKING_ENTITY? I haven't found much info online on how to send packets to entities. Edited June 12, 2020 by Novârch Quote It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support". Link to comment Share on other sites More sharing options...
DavidM Posted June 12, 2020 Share Posted June 12, 2020 (edited) 13 hours ago, Novârch said: In my mod I've made a "timestop" effect where all entities are supposed to stop moving and keep their velocity after the effect is undone. Everything currently works perfectly except the rendering of certain entities(arrows, item entities, etc.), they appear to continue moving and continuously snap back to their original position, but when I disable the effect their position and velocity are correct. Is there a way to fix this rendering issue, if so how? The mod's code can be found here, on GitHub, the event fires each tick from a custom entity. You will have to cancel the velocity on the client side too. Where are you doing this? If it is in a tile entity or a tickable object then you could get away with canceling the velocity of nearby objects on the client side in tick, otherwise you can create a stop time packet containing the range (coverage of the effect in the world) of the stop time effect, and send that to the client (as sending individual update velocity packets is both inefficient and considered a bad practice). Edited June 12, 2020 by DavidM Quote Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support. Link to comment Share on other sites More sharing options...
Novârch Posted June 12, 2020 Author Share Posted June 12, 2020 1 minute ago, DavidM said: Where are you doing this? In a tick event. Quote It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support". Link to comment Share on other sites More sharing options...
DavidM Posted June 12, 2020 Share Posted June 12, 2020 (edited) Oh hey you are making a JoJo mod! 21 minutes ago, Novârch said: In a tick event. So the effect is global? In that case just send a packet to all clients that is in the same dimension (or else, depending on the coverage of the effect), and cancel all velocity of entities. The same works with continuing the time (except you will need to also include the initial velocity of all entities). Edited June 12, 2020 by DavidM Quote Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support. Link to comment Share on other sites More sharing options...
Novârch Posted June 12, 2020 Author Share Posted June 12, 2020 (edited) 1 hour ago, DavidM said: In that case just send a packet to all clients that is in the same dimension Thanks for the help, I think I've made some progress on this, the packet should in theory set an entities velocity on the client to it's velocity on the server, but I'm still getting the same graphical issues, I have the effect down, everything stops, but some entities like arrows look glitchy. Here's a gif of the glitch, and no that is not a continuous loop of an arrow falling, it just stays like that until I undo the effect. 1 hour ago, DavidM said: Oh hey you are making a JoJo mod! Yeah, I am. I'm pretty disappointed will all the current ones, they're rarely updated and a certain 1.12 ones creator is incompetent at modding. Edited June 12, 2020 by Novârch Quote It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support". Link to comment Share on other sites More sharing options...
DavidM Posted June 12, 2020 Share Posted June 12, 2020 (edited) 51 minutes ago, Novârch said: I think I've made some progress on this, the packet should in theory set an entities velocity on the client to it's velocity on the server That would send a packet for every entity in the world, which is rather inefficient considering that when the time stops, all the values in the velocity would be 0. I would suggest making a separate packet for time stopping and time continuing. Moreover, I would suggest to send a list of all affect entities in one packet. However, if you really want to update the velocity individually, change the velocity of the entity directly and call Entity#markVelocityChanged. This will make the game sync the entity's velocity on the next tick (therefore custom packets are not necessary) (this would send a packet for each marked entity, which would be inefficient on a large scale). I'll check the arrow problem out, but I think it might be caused by the arrow's still picking up downward velocity from gravity every tick. In one of my mod I implemented a similar time stopping concept, and circumvented similar problems by keep setting the velocity of affected entities to 0. The client logic is similar to: listEntity <- a list of entities affected by the time stop; onStopPacketReceive: add specified entities to the list; onContinuePacketReceive: remove entities from the list; onTickEvent: set the velocity of all entities in the list to 0; Edited June 12, 2020 by DavidM 1 Quote Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support. Link to comment Share on other sites More sharing options...
Novârch Posted June 13, 2020 Author Share Posted June 13, 2020 On 6/12/2020 at 9:56 AM, DavidM said: it might be caused by the arrow's still picking up downward velocity from gravity every tick It seems that was the issue, setting the arrows velocity to 0 instead of setting it's position every tick fixed the issue, but now I have a new issue, all arrows face south during timestop. On 6/12/2020 at 9:56 AM, DavidM said: I would suggest to send a list of all affect entities in one packet. I've been trying to do that, but to no avail, how am I supposed to send ALL the velocities in one packet and map them to the correct entity? Quote It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support". Link to comment Share on other sites More sharing options...
poopoodice Posted June 13, 2020 Share Posted June 13, 2020 Maybe there's a better way of doing this but maybe store the entity UUIDs in a hashmap or something and also pass the length (size) of the map to the packet. Or just check the distance between the entity and the player is in a suitable distance, like the sendToAllNearExcept in PlayerList. Quote Link to comment Share on other sites More sharing options...
DavidM Posted June 14, 2020 Share Posted June 14, 2020 6 hours ago, Novârch said: It seems that was the issue, setting the arrows velocity to 0 instead of setting it's position every tick fixed the issue, but now I have a new issue, all arrows face south during timestop. In my previous mod where I attempted the time stop, I didn't cancel the velocity completely. I set them to 0.05 of the original value. This allows projectiles like arrows to maintain its direction, but might not be suitable in your case. I'm not aware of any better ways, but if you would like to sacrifice the "total time stop" in favor of having correct rendering of arrows then it may be worth a try. 6 hours ago, Novârch said: I've been trying to do that, but to no avail, how am I supposed to send ALL the velocities in one packet and map them to the correct entity? Make an array (length N) of UUIDs containing all the N entities in the world. Make another array (length 3 * N) containing the velocity of entities in the same order as the entity array. Quote Some tips: Spoiler Modder Support: Spoiler 1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code. 2. Always post your code. 3. Never copy and paste code. You won't learn anything from doing that. 4. Quote Programming via Eclipse's hotfixes will get you nowhere 5. Learn to use your IDE, especially the debugger. 6. Quote The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it. Support & Bug Reports: Spoiler 1. Read the EAQ before asking for help. Remember to provide the appropriate log(s). 2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support. Link to comment Share on other sites More sharing options...
Novârch Posted June 14, 2020 Author Share Posted June 14, 2020 37 minutes ago, diesieben07 said: Use Entity#getEntityId and World#getEntityByID instead of UUIDs for syncing. I'm already using it, wouldn't have if it wasn't for the helpful code comment above it. Quote It's sad how much time mods spend saying "x is no longer supported on this forum. Please update to a modern version of Minecraft to receive support". Link to comment Share on other sites More sharing options...
Recommended Posts
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.