Slimefun4 icon indicating copy to clipboard operation
Slimefun4 copied to clipboard

Error related to "Slimefun calls PaperLib.getBlockState(block, false)"

Open EchocallingEarth opened this issue 2 years ago • 1 comments

❗ Checklist

  • [X] I am using the official english version of Slimefun and did not modify the jar.
  • [X] I am using an up to date "DEV" (not "RC") version of Slimefun.
  • [X] I am aware that issues related to Slimefun addons need to be reported on their bug trackers and not here.
  • [X] I searched for similar open issues and could not find an existing bug report on this.

📍 Description

Running Slimefun with TransportPipes. I am getting a bug/error which when I spoke to the dev of TransportPipes (the affected plugin) he (Panda) said and I quote The specific issue is Slimefun calls PaperLib.getBlockState(block, false) on the "fake" hoppers that TransportPipes creates to check for build permissions. Since TransportPipes is made to be compatible with Spigot, and PaperLib only checks if the server is running Paper and not if the method exists when it's called, the method call fails and throws the AbstractMethodError

Is this something that can be fixed? or should I reach out to the devs of PaperLib (not sure how I do that)

📑 Reproduction Steps

Install Slimefun and TransportPipes And attempt to place or use TransportPipes

💡 Expected Behavior

No error in Console related to either plugin

📷 Screenshots / Videos

No response

📜 Server Log

https://pastebin.com/q2W662j0

📂 /error-reports/ folder

No response

💻 Server Software

Purpur

🎮 Minecraft Version

1.19.x

⭐ Slimefun version

Slimefun vDEV - 1026 (git 85e8fe81)

🧭 Other plugins

TransportPipes

https://github.com/BlackBeltPanda/Transport-Pipes

EchocallingEarth avatar Aug 10 '22 23:08 EchocallingEarth

I know this is now marked "needs testing", however, if I can provide any other info please let me know - Thanks

EchocallingEarth avatar Aug 13 '22 15:08 EchocallingEarth

This is not something we should or even can really "fix". Slimefun uses the PaperLib API to access methods from Paper for optimization purposes. If you are using Paper for your server, it is to be expected that these methods are available in that environment.

The maintainer(s) of TransportPipes will need to implement these methods if they want to fix this issue. After a quick look at the corresponding code it seems to be related to a mock class of Block.java. So this fix should be as straight-forward as for them to implement the missing method, can even default to the non-Paper method for BlockStates for that.

I looked at the linked issue and my assumption seems to be inline with what a Paper team member (@electronicboy) posted there:

Nevermind, that's nothing to do with paper, that's a compatibility issue with transportpipes not implementing methods used in paper, thus causing issues plugins due to the induced API contract violation, there's not much paperlib can do about this without tryna catch such exceptions and fall back to just returning a standard block state [...] if you don't care about supporting the faster state snapshots, you can just create a method which delegates to the standard method and leave out the override annotation; ideally, you'd made that method call the proper method when running in paper, i.e. using reflection if needs be

So yeah, I am closing this issue on this particular bug tracker as not relevant. The maintainer of TransportPipes seems to be aware of this issue and the suggested approach to fix it. If they need help, they can of course comment and/or ask :)

TheBusyBiscuit avatar Aug 18 '22 10:08 TheBusyBiscuit