[1.10.2] Crash on sponge server start.
rmnaderdev opened this issue ยท 9 comments
Just updated the mod and it seems to be crashing when I start my server. Or is it something else?
Paging @Ordinastie
And that's why you don't reflect on other mod classes...
This is the class that doesn't work : https://github.com/Ordinastie/MalisisDoors/blob/1.9.4/src/main/java/net/malisis/doors/block/VerticalHatchDoor.java
I have no idea how to fix it.
[Edit: so I really don't understand why, but the lambda seems to be the issue. Without it, it doesn't crash. So it'll be fixed in the next update.]
@Ordinastie if the lambada is the issue i think i know what's going on: lambada's are nice but when the code get's compiled at runtime for usage it basicly makes a class and object with it this is heapening before the @SideOnly annotation could have removed the function on the server side but the lambada needs the class
@Ordinastie There is no other way I can reliably detect if other modded doors can be used by my tweak.
The trick is @SideOnly. You're not using it correctly.
On the server side, you should mark every method and field that uses client-side-only classes/fields/methods with it so that they get stripped on the server. It happens with my mod this time, but it could realistically happen with any other mod. It's a bug.
@asiekierka I don't think you can add @SideOnly to to a lambda, can you? So you'd have to write your own class manually which implements IIconProvider
. I suppose, ideally, a compiler generated lambda class used in a side-only context should be removed if on the wrong side, but is that possible?
Hmm I can't fix it completely, the reflection method will still throw an exception. I'll make sure it throws the right exception at least (UnableToFindMethodException
).
Basically the lambda inside a @SideOnly
method causes the reflection call to crash completely. Ordinastie is using @SideOnly
properly and everything works if they avoid using a lambda in the method.
Hum, I thought I responded earlier, but I apparently, I forgot to send the comment.
I did use @SideOnly correctly. The issue is that lambdas are compiled into static methods into the class. Obviously, those ones are not annotated with @SideOnly, and getDeclaredMethod still loop through them.
In this current case, the IIconProvider method has Icon as return type, so, the static method has it too hence the crash.