Refined Storage

Refined Storage

77M Downloads

cover shenanigans supposedly interfere with GTCE recipes

Yoghurt4C opened this issue ยท 7 comments

commented

Issue description:

cover compliance detector is producing weird serverside crashes. I was able to suppress it on the gtce side for a while but now it's completely broken no matter what I try

What happens:

when performing any crafting action with "pipelike" gtce blocks, RS is preventing them from being crafted, sometimes producing fatal crashes. this ONLY happens serverside. all pipelike gtce blocks have "clientside-only" renderer checks added.
this DOES NOT happen without refined storage present.

Steps to reproduce:

  1. get gtce and rs
  2. put them on a server
  3. try to craft a gtce fluid pipe or cable
    ...

Version (make sure you are on the latest version before reporting):

  • Minecraft: 1.12.2
  • Forge: 2757
  • Refined Storage: built from 21973ad

Does this issue occur on a server? [yes/no]
serverside-only

what usually happens: https://pastebin.com/j3TSxA8H
what happens on a fatal crash: https://pastebin.com/KqD4eTa1

commented

The issue here is not with CCL or RS, it is that GregTech is storing their custom BlockRenderType in a class that implements client interfaces. The simple solution would be to store the BlockRenderType elsewhere, so that referencing it does not load client code.

commented

Please take note that you should NEVER, NEVER try to call clientside-only methods on server side. It breaks variety of mods that use CCL which adds additional BlockRenderType values as example. If you try to do such kind of things and it is necessary, just use try/catch and don't except that client-side things will magically work on server side without any errors.

commented

I wonder why this didn't break earlier/before.

commented

AFAIK RS doesn't do anything wrong.

IBlockState#getRenderType is not @SideOnly(Side.CLIENT)

Nor is IBlockState#isFullCube.

@Archengius Your point would be valid except that those methods aren't client-side only. They aren't annotated as @SideOnly(Side.CLIENT).

So perhaps Gregtech is making incorrect assumptions.

commented

IMO, It's a shortcoming of CCL that it doesn't give you an easy way to add those additional BlockRenderType values on the server side, since the code path leading to adding the values is all client-only code.

commented

If you can't understand the fact that method that returns render-related information shouldn't work flawlessly on dedicated server, it's not my issue.
Neither it is my issue it isn't flagged as client-side only. As long as it is in DIRECT correlation with rendering, and ONLY rendering purpose, it should not be used on server-side.
I could understand your response if crash would happen because of some GTCE method like isOpaqueCube, which is used for retrieving general information about block, rather than only rendering-related. That way, i would fix it. But it's completely different situation.
Still, i don't get what prevents you from at least try-catching that kind of code? Heightened self-esteem compared to other mods?

commented

Then the question is whether RS should fix CCL's shortcomings.

I don't believe so.