Terra (Fabric/Forge/Paper)

Terra (Fabric/Forge/Paper)

74.2k Downloads

BetterStrongholds incompatibility

griffin4cats opened this issue ยท 4 comments

commented

Pre-Issue Checklist

  • I have checked that I am on the latest version of Terra.
  • I have searched the github issue tracker for similar issues, including closed ones.
  • I have made sure that this is not a bug with another mod or plugin, and it is Terra that is causing the issue.
  • I have checked that this is an issue with Terra and not an issue with the pack I am using.
  • I have attached a copy of the latest.log file
  • I have filled out and provided all the appropriate information.

Environment

Name Value
Terra Version Terra-fabric-5.4.1-BETA+40e95073-shaded-mapped
Platform / Platform Version Fabric 1.17.1 (loader version 0.11.6)
Any External Plugins or Mods BetterStrongholds, LazyDFU, and their dependencies (Fabric API, cloth config, Yung's API)
Terra Packs In Use DEFAULT v2.0.0, NETHER v2.0.0
Terra Addons In Use Terra-Fabric v1.0.0

Issue Description

Terra causes a deadlock when using an eye of ender while BetterStrongholds is enabled.

Steps to reproduce

  1. Install aforementioned mods
  2. Create new world with Terra:DEFAULT
  3. Throw eye of ender

Expected behavior

Eye should fly toward a betterstrongholds:stronghold, or to a stronghold from Terra (preferably toward the former)

Actual behavior

The game will deadlock in singleplayer. In multiplayer, the same issue occurs (the server host i used to test this shuts the server off after 60 seconds considering it to have crashed).

Full stacktrace

https://paste.ee/p/0I6xr

Additional details

This comes after a conversation on Yung's discord after it was determined that BetterStrongholds was not the mod at fault.

The full conversation can be viewed at this location on their discord, and you can join their discord here.

The discussion there also brings up a snippet from their code which reveals that the way BetterStrongholds affects eyes of ender is not the cause of the crash.

commented

Gonna pop in to try and help narrow down the issue. It has been reported that Repurposed Structures is also having this issue as well but my strongholds are only in the nether and end. So the fact that a server is deadlocking and being killed by the watchdog with the stacktrace showing my structure is being located implies there's a missing check in Terra or it made normal locate code now loop forever.
Stacktrace shown: https://paste.ee/p/pbKTJ
My mixin: https://github.com/TelepathicGrunt/RepurposedStructures-Fabric/blob/latest-released/src/main/java/com/telepathicgrunt/repurposedstructures/mixin/structures/EnderEyeStrongholdLocatingMixin.java

I had the person blacklist my structure from the overworld so that my structure spacing is not added at all to the overworld's noise setting but that still caused the issue. Very odd

commented

Ok let's backup a waaaaay ton cause i screwed up testing lol.

I didn't realized i needed to explicitly turn on compat with other mods by adding structures: true to the vanilla section in the pack.yml file within terra's Default pack. That now makes my structures spawn.

With my structure's spawning and /locate working, I tried to /locate structures I know spawns in the overworld and it works. If I use /locate for a structure that doesn't spawn in the overworld, the game hangs forever. The biome list here is what should be preventing that locating hang. It should only hold the biomes that the biome source can actually spawn. Although, it looks like that should be the case which is odd.

but at least we narrowed down the issue more properly now. Dont use /locate or any locating mechanic for structures that aren't in the overworld while in the overworld

commented

I just did some more testing and even did /locate command for some of my structures like grassy igloo. Deadlocked. So i took a closer look and just flew around the world in spectator mode and tried to find any of my structures. But no luck at all. None of my structures are spawning in the world which is weird as my structures should be added to biome with Fabric API's BiomeModification event. Without a really deep check and how /locate seems to think the biomes in the world has the structures, I think the issue is this line

public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) {

But it is resolving the biomes with the correct dynamic registry so it should be the correct biomes with the structures inside. I am very confused

commented

6.0 uses Vanilla structures by default.