Make the compass only show catacombs where the boss has not been killed yet
SiverDX opened this issue ยท 1 comments
Feature description
on kill store the location in here (you can check if the boss is inside a catacomb structure)
// Keep track of listed catacombs in here
DimensionDataStorage storage = serverLevel.getDataStorage();
Have a custom way to locate the structure (to skip completed ones)
or do a mixin to one of the methods responsible, e.g. ChunkGenerator#getStructureGeneratingAt
:
@Nullable
private static Pair<BlockPos, Holder<Structure>> getStructureGeneratingAt(Set<Holder<Structure>> pStructureHoldersSet, LevelReader pLevel, StructureManager pStructureManager, boolean pSkipKnownStructures, StructurePlacement pPlacement, ChunkPos pChunkPos) {
for(Holder<Structure> holder : pStructureHoldersSet) {
// Set this to `START_NOT_PRESENT` if the structure is a catacomb and close to an entry of the known completed ones
// (Unless it already has that value)
StructureCheckResult structurecheckresult = pStructureManager.checkStructurePresence(pChunkPos, holder.value(), pSkipKnownStructures);
if (structurecheckresult != StructureCheckResult.START_NOT_PRESENT) {
if (!pSkipKnownStructures && structurecheckresult == StructureCheckResult.START_PRESENT) {
return Pair.of(pPlacement.getLocatePos(pChunkPos), holder);
}
ChunkAccess chunkaccess = pLevel.getChunk(pChunkPos.x, pChunkPos.z, ChunkStatus.STRUCTURE_STARTS);
StructureStart structurestart = pStructureManager.getStartForStructure(SectionPos.bottomOf(chunkaccess), holder.value(), chunkaccess);
if (structurestart != null && structurestart.isValid() && (!pSkipKnownStructures || tryAddReference(pStructureManager, structurestart))) {
return Pair.of(pPlacement.getLocatePos(structurestart.getChunkPos()), holder);
}
}
}
return null;
}
How it improves the player experience
you wouldn't have to travel an unknown amount of blocks and keep re-crafting the compass to find new catacombs