From 6bb7ead58ab4f7903bc87994bf52ed735a866011 Mon Sep 17 00:00:00 2001 From: bazke Date: Sat, 28 Oct 2023 20:29:36 +0200 Subject: [PATCH] todo: figure out how to handle skin changes (or maybe just dont) --- .../lovetropics/extras/client/ClientMapPoiManager.java | 8 ++++++++ .../com/lovetropics/extras/data/poi/MapPoiManager.java | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/main/java/com/lovetropics/extras/client/ClientMapPoiManager.java b/src/main/java/com/lovetropics/extras/client/ClientMapPoiManager.java index 3a957d27..67930625 100644 --- a/src/main/java/com/lovetropics/extras/client/ClientMapPoiManager.java +++ b/src/main/java/com/lovetropics/extras/client/ClientMapPoiManager.java @@ -12,6 +12,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ClientPlayerNetworkEvent; +import net.minecraftforge.event.entity.EntityLeaveLevelEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -47,6 +48,13 @@ public static void onLoggingOut(final ClientPlayerNetworkEvent.LoggingOut event) FACES.clear(); } + //TODO this gets called a bazillion times? just a local thing? + @SubscribeEvent + public static void onPlayerLeave(final EntityLeaveLevelEvent event) { + System.out.println("someone left"); + FACES.remove(event.getEntity().getUUID()); + } + public static ResourceLocation getFace(final UUID uuid) { return FACES.getOrDefault(uuid, getPlayerSkinOrDefault(uuid)); } diff --git a/src/main/java/com/lovetropics/extras/data/poi/MapPoiManager.java b/src/main/java/com/lovetropics/extras/data/poi/MapPoiManager.java index 37a8fa8c..95fc7575 100644 --- a/src/main/java/com/lovetropics/extras/data/poi/MapPoiManager.java +++ b/src/main/java/com/lovetropics/extras/data/poi/MapPoiManager.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.saveddata.SavedData; import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.entity.EntityLeaveLevelEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -117,6 +118,8 @@ public static void onServerTick(TickEvent.ServerTickEvent event) { //TODO consider the case: 2 active hosts. one host is removed -> what happens? iterate all POIs and check if face is host? //maybe something like below? + //TODO concurrentmodex? just a local thing? i dont know. i dont know anything anymore. <- thx copilot + //anyway this crashes with java.util.ConcurrentModificationException: null when the second client leaves. does it only happen with the onPlayerLeave event? for (Poi poi : manager.getAllPois()) { for (UUID face : poi.faces()) {