PaperMC / Paper

The most widely used, high performance Minecraft server that aims to fix gameplay and mechanics inconsistencies
https://papermc.io/
Other
9.98k stars 2.31k forks source link

[Feature] Disable Mushroom blocks behaviour #2649

Closed LoneDev6 closed 4 years ago

LoneDev6 commented 5 years ago

Is your feature request related to a problem? Please describe. I would like to disable mushroom blocks faces change behaviour introduced in 1.13 so that all BlockFace values will always stay TRUE. So I'd be able to disable my plugin custom logic that reverts these changes (which are heavy tasks).

https://www.reddit.com/r/Minecraft/comments/7eu5em/how_to_change_your_mushroom_blocks_to_the_porous/

Describe the solution you'd like I would like to have an API method and/or a paper.yml option to be able to disable this behaviour and always have this blockstate on any mushroom block: image

This feature request applies to these materials:

Minecraft changes blockstates on these Spigot events:

Onyxtite commented 5 years ago

+1 :) It'd be certainly useful for more than just ItemAdder. I'm sure that users of ItemAdder, CustomItems, and any other plugin that adds mushroom-based-blocks, aswell as anyone who builds with mushroomblocks (even vanilla ones), would appreciate, plus it'd probably slightly enhance server performance since the blocks wouldn't need to check for those events ;)

Thanks for considering it and Good luck!

Ps: @LoneDev6 if you could contribute with a pull request or at least with the code you use to revert the changes, that would probably increase the chances of this feature being implemented, since paper's developers do have a lot to take care of and it'd save them some time. I hope you'll consider it :)

Th0rgal commented 5 years ago

It would definitively be useful. Here is my own fix for it: https://github.com/Th0rgal/Oraxen/blob/master/src/main/java/io/th0rgal/oraxen/mechanics/provided/block/BlockMechanicsListener.java This is not working perfectly (if you place too much blocks it doesn't work) but for a few blocks it's okay. I would really like an option in spigot or paper in order to disable this mechanic which is completely useless.

LoneDev6 commented 5 years ago

It would definitively be useful. Here is my own fix for it: https://github.com/Th0rgal/Oraxen/blob/master/src/main/java/io/th0rgal/oraxen/mechanics/provided/block/BlockMechanicsListener.java This is not working perfectly (if you place too much blocks it doesn't work) but for a few blocks it's okay. I would really like an option in spigot or paper in order to disable this mechanic which is completely useless.

You should listen also to BlockPhysicsEvent, but note that this event is called a lot of times and may make your server lag

Th0rgal commented 5 years ago

It would definitively be useful. Here is my own fix for it: https://github.com/Th0rgal/Oraxen/blob/master/src/main/java/io/th0rgal/oraxen/mechanics/provided/block/BlockMechanicsListener.java This is not working perfectly (if you place too much blocks it doesn't work) but for a few blocks it's okay. I would really like an option in spigot or paper in order to disable this mechanic which is completely useless.

You should listen also to BlockPhysicsEvent, but note that this event is called a lot of times and may make your server lag

Well I already tried to cancel it for mushroom blocks but it didn't help. Btw here is the spigot issue if you want to upvote it: https://hub.spigotmc.org/jira/projects/SPIGOT/issues/SPIGOT-5390

LoneDev6 commented 5 years ago

It would definitively be useful. Here is my own fix for it: https://github.com/Th0rgal/Oraxen/blob/master/src/main/java/io/th0rgal/oraxen/mechanics/provided/block/BlockMechanicsListener.java This is not working perfectly (if you place too much blocks it doesn't work) but for a few blocks it's okay. I would really like an option in spigot or paper in order to disable this mechanic which is completely useless.

You should listen also to BlockPhysicsEvent, but note that this event is called a lot of times and may make your server lag

Well I already tried to cancel it for mushroom blocks but it didn't help. Btw here is the spigot issue if you want to upvote it: https://hub.spigotmc.org/jira/projects/SPIGOT/issues/SPIGOT-5390

Thanks, I upvoted it! I would implement this into Paper but I have 0 knowledge on how I could patch NMS code rather than Bukkit code as it's not included in BuildTools.jar output.

Black-Hole commented 5 years ago

I think a much better way for getting the desired textures for mushroom blocks would be to disable the whole recursive block updates and then make make a simple plugin that listens for right click with an axe and remove the texture on the clicked block face.

LoneDev6 commented 5 years ago

I think a much better way for getting the desired textures for mushroom blocks would be to disable the whole recursive block updates and then make make a simple plugin that listens for right click with an axe and remove the texture on the clicked block face.

Please elaborate more, thanks

Onyxtite commented 4 years ago

Is it even possible to disable recursive block updates right now? You could listen to events and stop the chain at some point, but to my knowledge there is no way to outright disable recursive block updates right now, am I wrong?

LoneDev6 commented 4 years ago

Sadly you have to cancel block updates and send block update packet manually. I think it's an heavy task that's why I hope someone manages to code add the requested feature. I would try to do that on my own but I have no knowledge on how to patch Minecraft source code in the fastest way

electronicboy commented 4 years ago

That's not really a behaviour that would be exposed in a config file, idea is that plugins should be able to listen to the change and deal with it appropriately, Vs flooding the config files with misc behavioural configs

On Tue, 12 Nov 2019, 19:35 LoneDev, notifications@github.com wrote:

Sadly you have to cancel block updates and send block update packet manually. I think it's an heavy task that's why I hope someone manages to code add the requested feature. I would try to do that on my own but I have no knowledge on how to patch Minecraft source code in the fastest way

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/PaperMC/Paper/issues/2649?email_source=notifications&email_token=AAJMAZB35EK6OQ7HYKJQIKDQTMAO3A5CNFSM4JCUJKN2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOED3VAJY#issuecomment-553078823, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJMAZFVXRED5TGL63QRJKDQTMAO3ANCNFSM4JCUJKNQ .

Onyxtite commented 4 years ago

Yeah, as lonedev said, the problem is that's very resource intensive, since blockphysicsevent is called a lot, Is there any chance you could separate multiblock state update events from physics events in the api or recursive block updates? Or something along those lines?

While I understand where you are coming from, isn't recursive block updates, a behavior worth being configurable? It seems like it could be used to help optimize performance, or at least to just get rid of a weird vanilla behavior, in a way that makes sense from a performance standpoint

Thanks for taking the time to answer to the issue, It's always nice to hear other perspectives

LoneDev6 commented 4 years ago

I think the best solution is to have a paper.yml option to disable blockstate updates for mushroom blocks, other solutions like adding new events would be bad as we would have to listen to new events and cause lag..

Th0rgal commented 4 years ago

That's not really a behaviour that would be exposed in a config file, idea is that plugins should be able to listen to the change and deal with it appropriately, Vs flooding the config files with misc behavioural configs On Tue, 12 Nov 2019, 19:35 LoneDev, @.***> wrote: Sadly you have to cancel block updates and send block update packet manually. I think it's an heavy task that's why I hope someone manages to code add the requested feature. I would try to do that on my own but I have no knowledge on how to patch Minecraft source code in the fastest way — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub <#2649?email_source=notifications&email_token=AAJMAZB35EK6OQ7HYKJQIKDQTMAO3A5CNFSM4JCUJKN2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOED3VAJY#issuecomment-553078823>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAJMAZFVXRED5TGL63QRJKDQTMAO3ANCNFSM4JCUJKNQ .

Yeah I think an event in order to listen to this behavior would already be a good step (even if a configuration option to disable it would be better for performances).

tworstwots commented 4 years ago

Would love something like this!

LoneDev6 commented 4 years ago

I close this since I made some testings and seems to be partially clientsided. Patching Spigot to disable MultipleFacing updates for mushrooms won't help.

EDIT: You can test this:

only way to fix this is to send a chain of blockchange packets to the player, which is not really great.