From ca1cf885f9c7e2c6fcdf31c697a22f0e984d7525 Mon Sep 17 00:00:00 2001 From: Cow Date: Fri, 18 Dec 2020 13:41:20 +0100 Subject: Fixed some possible problems with bad server connection - Fixed sending offline messages - Fixed rare occurrence of repeated triggering of server join and leave events --- .../de/cowtipper/cowlection/util/ChatHelper.java | 43 +++++++++++++++------- .../cowtipper/cowlection/util/VersionChecker.java | 3 +- 2 files changed, 31 insertions(+), 15 deletions(-) (limited to 'src/main/java/de/cowtipper/cowlection/util') diff --git a/src/main/java/de/cowtipper/cowlection/util/ChatHelper.java b/src/main/java/de/cowtipper/cowlection/util/ChatHelper.java index 42a5790..eef9ca7 100644 --- a/src/main/java/de/cowtipper/cowlection/util/ChatHelper.java +++ b/src/main/java/de/cowtipper/cowlection/util/ChatHelper.java @@ -8,9 +8,10 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IChatComponent; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -30,27 +31,43 @@ public class ChatHelper { } public void sendMessage(IChatComponent chatComponent) { - ClientChatReceivedEvent event = new ClientChatReceivedEvent((byte) 1, chatComponent); - MinecraftForge.EVENT_BUS.post(event); - if (!event.isCanceled()) { - if (Minecraft.getMinecraft().thePlayer == null) { - offlineMessages.add(event.message); - } else { + if (Minecraft.getMinecraft().thePlayer == null) { + putOfflineMessage(chatComponent); + } else { + ClientChatReceivedEvent event = new ClientChatReceivedEvent((byte) 1, chatComponent); + MinecraftForge.EVENT_BUS.post(event); + if (!event.isCanceled()) { Minecraft.getMinecraft().thePlayer.addChatMessage(event.message); } } } - public void sendOfflineMessages() { + private void putOfflineMessage(IChatComponent chatComponent) { + if (offlineMessages.size() == 0) { + // had no offline messages before + MinecraftForge.EVENT_BUS.register(this); + } + offlineMessages.add(chatComponent); + } + + @SubscribeEvent + public void onPlayerWorldJoin(EntityJoinWorldEvent e) { + if (e.entity == Minecraft.getMinecraft().thePlayer) { + new TickDelay(this::sendOfflineMessages, 6 * 20); + } + } + + private void sendOfflineMessages() { if (Minecraft.getMinecraft().thePlayer != null) { - Iterator offlineMessages = this.offlineMessages.iterator(); - if (offlineMessages.hasNext()) { + if (offlineMessages.size() > 0) { Minecraft.getMinecraft().thePlayer.playSound("random.levelup", 0.4F, 0.8F); } - while (offlineMessages.hasNext()) { - Minecraft.getMinecraft().thePlayer.addChatMessage(offlineMessages.next()); - offlineMessages.remove(); + + for (IChatComponent offlineMessage : offlineMessages) { + sendMessage(offlineMessage); } + offlineMessages.clear(); + MinecraftForge.EVENT_BUS.unregister(this); } } diff --git a/src/main/java/de/cowtipper/cowlection/util/VersionChecker.java b/src/main/java/de/cowtipper/cowlection/util/VersionChecker.java index 7f859a6..4fd465e 100644 --- a/src/main/java/de/cowtipper/cowlection/util/VersionChecker.java +++ b/src/main/java/de/cowtipper/cowlection/util/VersionChecker.java @@ -124,8 +124,7 @@ public class VersionChecker { main.getChatHelper().sendMessage(statusMsg); } else { IChatComponent finalStatusMsg = statusMsg; - new TickDelay(() -> main.getChatHelper().sendMessage(finalStatusMsg) - , 6 * 20); + new TickDelay(() -> main.getChatHelper().sendMessage(finalStatusMsg), 6 * 20); } } } -- cgit