From 8af62cb90c1f2033fe91a6ed5f38c6c9a65024cf Mon Sep 17 00:00:00 2001 From: Niklas Widmann Date: Thu, 17 Oct 2024 23:32:22 +0200 Subject: [PATCH] switch to published model version --- gradle.properties | 2 +- .../atheneum_connector/LocationCache.kt | 61 +++++++++++++------ .../atheneum_connector/events/PlayerEvents.kt | 4 +- .../assets/travelerstitles/lang/en_us.json | 4 ++ 4 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 src/main/resources/assets/travelerstitles/lang/en_us.json diff --git a/gradle.properties b/gradle.properties index 3ef732a..7249776 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,7 +19,7 @@ travelers_titles_version=oUSK4sOQ yungs_api_version=PJOYAmAs dynmap_version=RtI5TFAi graphql_client_version=8.1.0 -atheneum_version=0.0.0-dev +atheneum_version=0.0.7-alpha repository=voidshake/atheneumconnector modrinth_project_id=WIPHNZss diff --git a/src/main/kotlin/com/possible_triangle/atheneum_connector/LocationCache.kt b/src/main/kotlin/com/possible_triangle/atheneum_connector/LocationCache.kt index 9a022e1..85b2f0c 100644 --- a/src/main/kotlin/com/possible_triangle/atheneum_connector/LocationCache.kt +++ b/src/main/kotlin/com/possible_triangle/atheneum_connector/LocationCache.kt @@ -2,9 +2,11 @@ package com.possible_triangle.atheneum_connector import com.mojang.datafixers.util.Either import com.possible_triangle.atheneum_connector.generated.AreasQuery +import com.possible_triangle.atheneum_connector.generated.PlacesQuery import com.possible_triangle.atheneum_connector.generated.areasquery.Area import com.possible_triangle.atheneum_connector.generated.areasquery.FlatPoint import com.possible_triangle.atheneum_connector.generated.placesquery.Place +import kotlinx.coroutines.async import kotlinx.coroutines.runBlocking import net.minecraft.core.BlockPos import net.minecraft.core.SectionPos.blockToSectionCoord @@ -14,29 +16,55 @@ import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.ChunkPos import net.minecraft.world.level.Level -class LocationCache { +class LocationCache(private val getId: (T) -> Int) { private val lookup = hashMapOf, MutableMap>() private val reverseLookup = hashMapOf, List>>() + fun get(level: ResourceKey, chunk: ChunkPos): T? { + return lookup[level]?.get(chunk) + } + + fun set(level: ResourceKey, value: T, chunks: List) { + reverseLookup[getId(value)] = level to chunks + + lookup.getOrPut(level, ::hashMapOf).apply { + chunks.forEach { put(it, value) } + } + } + companion object { - private val AREAS = LocationCache() + private val AREAS = LocationCache { it.id } + private val PLACES = LocationCache { it.id } fun reload() { AREAS.clear() + PLACES.clear() initialize() } + private fun String.levelKey() = ResourceKey.create(Registries.DIMENSION, ResourceLocation(this)) + + private fun chunkAt(x: Int, z: Int) = ChunkPos( + blockToSectionCoord(x), + blockToSectionCoord(z), + ) + fun initialize() = runBlocking { - val areas = GraphQL.query(AreasQuery()).areas - areas.nodes.forEach { area -> - val level = ResourceKey.create(Registries.DIMENSION, ResourceLocation(area.world)) + val areasQuery = async { GraphQL.query(AreasQuery()) } + val placesQuery = async { GraphQL.query(PlacesQuery()) } + + areasQuery.await().areas.nodes.forEach { area -> + val level = area.world.levelKey() val chunks = area.points.containingChunks() - AREAS.reverseLookup[area.id] = level to chunks + AREAS.set(level, area, chunks) + } - AREAS.lookup.getOrPut(level, ::hashMapOf).apply { - chunks.forEach { put(it, area) } - } + placesQuery.await().places.nodes.forEach { place -> + val level = place.pos.world.levelKey() + val chunks = listOf(chunkAt(place.pos.x, place.pos.z)) + + PLACES.set(level, place, chunks) } } @@ -69,20 +97,17 @@ class LocationCache { } odd - }.map { - ChunkPos( - blockToSectionCoord(it.x), - blockToSectionCoord(it.z), - ) - } + }.map { chunkAt(it.x, it.z) } } fun containing(level: ResourceKey, pos: BlockPos): Either? { val chunk = ChunkPos(pos) - val area = AREAS.lookup[level]?.get(chunk) - - return area?.let { Either.left(area) } + return PLACES.get(level, chunk)?.let { + Either.right(it) + } ?: AREAS.get(level, chunk)?.let { + Either.left(it) + } } } diff --git a/src/main/kotlin/com/possible_triangle/atheneum_connector/events/PlayerEvents.kt b/src/main/kotlin/com/possible_triangle/atheneum_connector/events/PlayerEvents.kt index 98b731e..78270df 100644 --- a/src/main/kotlin/com/possible_triangle/atheneum_connector/events/PlayerEvents.kt +++ b/src/main/kotlin/com/possible_triangle/atheneum_connector/events/PlayerEvents.kt @@ -41,13 +41,13 @@ object PlayerEvents { val location = LocationCache.containing(level.dimension(), player.onPos) ?: return location.ifLeft { - Network.sendTo(player, DisplayTitlePaket(Component.literal("You entered ${it.name}"), "area-${it.id}")) + Network.sendTo(player, DisplayTitlePaket(Component.translatable("travelerstitles.entered_area", it.name), "area-${it.id}")) } location.ifRight { Network.sendTo( player, - DisplayTitlePaket(Component.literal("You are close to ${it.name}"), "place-${it.id}") + DisplayTitlePaket(Component.translatable("travelerstitles.at_place", it.name), "place-${it.id}") ) } } diff --git a/src/main/resources/assets/travelerstitles/lang/en_us.json b/src/main/resources/assets/travelerstitles/lang/en_us.json new file mode 100644 index 0000000..ae730e2 --- /dev/null +++ b/src/main/resources/assets/travelerstitles/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "travelerstitles.at_place": "%s", + "travelerstitles.entered_area": "%s" +} \ No newline at end of file