diff options
author | Yasin <a.piri@hotmail.de> | 2023-10-09 12:58:02 +0200 |
---|---|---|
committer | Yasin <a.piri@hotmail.de> | 2023-10-09 12:58:02 +0200 |
commit | bd3f0329d0e391bd84b5f9e3ff207d9dd9815853 (patch) | |
tree | 2fd1d1ef625f57acc2e4916c967d8d2393844798 /src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java | |
parent | 2315b90da8117f28f66348927afdb621ee4fc815 (diff) | |
download | Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.gz Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.tar.bz2 Skyblocker-bd3f0329d0e391bd84b5f9e3ff207d9dd9815853.zip |
new pr because fixing merge conflict would take too long
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java deleted file mode 100644 index 994317f8..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java +++ /dev/null @@ -1,171 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.spidersden; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.mojang.brigadier.CommandDispatcher; -import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager; -import me.xmrvizzy.skyblocker.utils.PosUtils; -import me.xmrvizzy.skyblocker.utils.Utils; -import me.xmrvizzy.skyblocker.utils.render.RenderHelper; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; -import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; -import net.minecraft.client.MinecraftClient; -import net.minecraft.command.CommandRegistryAccess; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.text.Text; -import net.minecraft.util.DyeColor; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.BlockPos; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.*; -import java.util.*; -import java.util.concurrent.CompletableFuture; - -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - -public class Relics { - private static final Logger LOGGER = LoggerFactory.getLogger(Relics.class); - private static CompletableFuture<Void> relicsLoaded; - @SuppressWarnings({"unused", "FieldCanBeLocal"}) - private static int totalRelics = 0; - private static final List<BlockPos> relics = new ArrayList<>(); - private static final Map<String, Set<BlockPos>> foundRelics = new HashMap<>(); - - public static void init() { - ClientLifecycleEvents.CLIENT_STARTED.register(Relics::loadRelics); - ClientLifecycleEvents.CLIENT_STOPPING.register(Relics::saveFoundRelics); - ClientCommandRegistrationCallback.EVENT.register(Relics::registerCommands); - WorldRenderEvents.AFTER_TRANSLUCENT.register(Relics::render); - ClientReceiveMessageEvents.GAME.register(Relics::onChatMessage); - } - - private static void loadRelics(MinecraftClient client) { - relicsLoaded = CompletableFuture.runAsync(() -> { - try (BufferedReader reader = client.getResourceManager().openAsReader(new Identifier(SkyblockerMod.NAMESPACE, "spidersden/relics.json"))) { - for (Map.Entry<String, JsonElement> json : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { - if (json.getKey().equals("total")) { - totalRelics = json.getValue().getAsInt(); - } else if (json.getKey().equals("locations")) { - for (JsonElement locationJson : json.getValue().getAsJsonArray().asList()) { - JsonObject posData = locationJson.getAsJsonObject(); - relics.add(new BlockPos(posData.get("x").getAsInt(), posData.get("y").getAsInt(), posData.get("z").getAsInt())); - } - } - } - LOGGER.info("[Skyblocker] Loaded relics locations"); - } catch (IOException e) { - LOGGER.error("[Skyblocker] Failed to load relics locations", e); - } - - try (BufferedReader reader = new BufferedReader(new FileReader(SkyblockerMod.CONFIG_DIR.resolve("found_relics.json").toFile()))) { - for (Map.Entry<String, JsonElement> profileJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { - Set<BlockPos> foundRelicsForProfile = new HashSet<>(); - for (JsonElement foundRelicsJson : profileJson.getValue().getAsJsonArray().asList()) { - foundRelicsForProfile.add(PosUtils.parsePosString(foundRelicsJson.getAsString())); - } - foundRelics.put(profileJson.getKey(), foundRelicsForProfile); - } - LOGGER.debug("[Skyblocker] Loaded found relics"); - } catch (FileNotFoundException ignored) { - } catch (IOException e) { - LOGGER.error("[Skyblocker] Failed to load found relics", e); - } - }); - } - - private static void saveFoundRelics(MinecraftClient client) { - try (BufferedWriter writer = new BufferedWriter(new FileWriter(SkyblockerMod.CONFIG_DIR.resolve("found_relics.json").toFile()))) { - JsonObject json = new JsonObject(); - for (Map.Entry<String, Set<BlockPos>> foundRelicsForProfile : foundRelics.entrySet()) { - JsonArray foundRelicsJson = new JsonArray(); - for (BlockPos foundRelic : foundRelicsForProfile.getValue()) { - foundRelicsJson.add(PosUtils.getPosString(foundRelic)); - } - json.add(foundRelicsForProfile.getKey(), foundRelicsJson); - } - SkyblockerMod.GSON.toJson(json, writer); - LOGGER.debug("[Skyblocker] Saved found relics"); - } catch (IOException e) { - LOGGER.error("[Skyblocker] Failed to write found relics to file", e); - } - } - - private static void registerCommands(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) { - dispatcher.register(literal(SkyblockerMod.NAMESPACE) - .then(literal("relics") - .then(literal("markAllFound").executes(context -> { - Relics.markAllFound(); - context.getSource().sendFeedback(Text.translatable("skyblocker.relics.markAllFound")); - return 1; - })) - .then(literal("markAllMissing").executes(context -> { - Relics.markAllMissing(); - context.getSource().sendFeedback(Text.translatable("skyblocker.relics.markAllMissing")); - return 1; - })))); - } - - private static void render(WorldRenderContext context) { - SkyblockerConfig.Relics config = SkyblockerConfigManager.get().locations.spidersDen.relics; - - if (config.enableRelicsHelper && relicsLoaded.isDone() && Utils.getLocationRaw().equals("combat_1")) { - for (BlockPos fairySoulPos : relics) { - boolean isRelicMissing = isRelicMissing(fairySoulPos); - if (!isRelicMissing && !config.highlightFoundRelics) continue; - float[] colorComponents = isRelicMissing ? DyeColor.YELLOW.getColorComponents() : DyeColor.BROWN.getColorComponents(); - RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoulPos, colorComponents, 0.5F); - } - } - } - - private static void onChatMessage(Text text, boolean overlay) { - String message = text.getString(); - if (message.equals("You've already found this relic!") || message.startsWith("+10,000 Coins! (") && message.endsWith("/28 Relics)")) { - markClosestRelicFound(); - } - } - - private static void markClosestRelicFound() { - if (!relicsLoaded.isDone()) return; - PlayerEntity player = MinecraftClient.getInstance().player; - if (player == null) { - LOGGER.warn("[Skyblocker] Failed to mark closest relic as found because player is null"); - return; - } - relics.stream() - .filter(Relics::isRelicMissing) - .min(Comparator.comparingDouble(relicPos -> relicPos.getSquaredDistance(player.getPos()))) - .filter(relicPos -> relicPos.getSquaredDistance(player.getPos()) <= 16) - .ifPresent(relicPos -> { - foundRelics.computeIfAbsent(Utils.getProfile(), profileKey -> new HashSet<>()); - foundRelics.get(Utils.getProfile()).add(relicPos); - }); - } - - private static boolean isRelicMissing(BlockPos relicPos) { - Set<BlockPos> foundRelicsForProfile = foundRelics.get(Utils.getProfile()); - return foundRelicsForProfile == null || !foundRelicsForProfile.contains(relicPos); - } - - private static void markAllFound() { - foundRelics.computeIfAbsent(Utils.getProfile(), profileKey -> new HashSet<>()); - foundRelics.get(Utils.getProfile()).addAll(relics); - } - - private static void markAllMissing() { - Set<BlockPos> foundRelicsForProfile = foundRelics.get(Utils.getProfile()); - if (foundRelicsForProfile != null) { - foundRelicsForProfile.clear(); - } - } -} |