aboutsummaryrefslogtreecommitdiff
path: root/mod/src
diff options
context:
space:
mode:
authorsyeyoung <42869671+cyoung06@users.noreply.github.com>2023-11-16 18:20:14 +0900
committerGitHub <noreply@github.com>2023-11-16 18:20:14 +0900
commit24fc59daa6da3c48544d2d8aec5606a2089f64d5 (patch)
tree61247e29be92d5489a38e4c4ec1881ee5ff15bd1 /mod/src
parentde2ea64b5127570baa61ade6fd7a63416c8b7cb9 (diff)
downloadSkyblock-Dungeons-Guide-24fc59daa6da3c48544d2d8aec5606a2089f64d5.tar.gz
Skyblock-Dungeons-Guide-24fc59daa6da3c48544d2d8aec5606a2089f64d5.tar.bz2
Skyblock-Dungeons-Guide-24fc59daa6da3c48544d2d8aec5606a2089f64d5.zip
Automatically collect Dungeons Guide stack traces with user approval. (#446)
* - fix error handling, don't use throwables like amateur Signed-off-by: syeyoung <cyoung06@naver.com> * - no need for hack to stop Signed-off-by: syeyoung <cyoung06@naver.com> * - gui error handling Signed-off-by: syeyoung <cyoung06@naver.com> * - remote logging error Signed-off-by: syeyoung <cyoung06@naver.com> * - remote logging error Signed-off-by: syeyoung <cyoung06@naver.com> * - testing privacy policy Signed-off-by: syeyoung <cyoung06@naver.com> * - send traces Signed-off-by: syeyoung <cyoung06@naver.com> * - show collect diagnostic? prompt Signed-off-by: syeyoung <cyoung06@naver.com> --------- Signed-off-by: syeyoung <cyoung06@naver.com>
Diffstat (limited to 'mod/src')
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java1
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/VersionInfo.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticsManager.java10
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java6
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/PathfinderExecutorExecutor.java2
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java5
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorIcePath.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorThorn.java2
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java2
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/icefill/RoomProcessorIcePath2.java2
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/annotations/EventHandlerRegistry.java3
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/DungeonListener.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketInjector.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/listener/PacketListener.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/FeatureRegistry.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/cosmetics/PrefixSelectorGUI.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureCollectDiagnostics.java144
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/FeatureGoodParties.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/party/playerpreview/api/playerprofile/PlayerProfileParser.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/richtext/TextHUDFeature.java5
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/text/StyledTextRenderer.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/gui/MGui.java19
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/GuiScreenAdapter.java37
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Column.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/Row.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/guiv2/elements/TextField.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/overlay/OverlayManager.java22
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/party/PartyManager.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java2
-rw-r--r--mod/src/main/resources/assets/dungeonsguide/gui/collect_diagnostic_approval.gui46
35 files changed, 331 insertions, 28 deletions
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
index c55d21cd..15329e9b 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
@@ -37,6 +37,7 @@ import kr.syeyoung.dungeonsguide.mod.events.listener.DungeonListener;
import kr.syeyoung.dungeonsguide.mod.events.listener.PacketInjector;
import kr.syeyoung.dungeonsguide.mod.events.listener.PacketListener;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.richtext.fonts.DefaultFontRenderer;
import kr.syeyoung.dungeonsguide.mod.overlay.OverlayManager;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/VersionInfo.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/VersionInfo.java
index 37b6c212..8f327986 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/VersionInfo.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/VersionInfo.java
@@ -24,6 +24,7 @@ import kr.syeyoung.dungeonsguide.launcher.branch.UpdateBranch;
import kr.syeyoung.dungeonsguide.launcher.branch.UpdateRetrieverUtil;
import kr.syeyoung.dungeonsguide.launcher.gui.screen.GuiDisplayer;
import kr.syeyoung.dungeonsguide.launcher.loader.*;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.guiv2.GuiScreenAdapter;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.GlobalHUDScale;
import kr.syeyoung.dungeonsguide.mod.guiv2.elements.Scaler;
@@ -53,6 +54,7 @@ public class VersionInfo {
VERSION1 = properties.getProperty("VERSION");
MANDATORY_VERSION1 = Integer.parseInt(properties.getProperty("MANDATORY_VERSION", "0"));
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
VERSION1 = "unknown";
MANDATORY_VERSION1 = 0;
e.printStackTrace();
@@ -133,6 +135,7 @@ public class VersionInfo {
logger.error("Failed to check version: Unknown Loader: " + VersionInfo.getLoaderInfo() + " / " + VersionInfo.getCurrentLoader().getClass().getName());
}
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
logger.error("Error while checking for updates: ",e);
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java
index a5eb360f..f8e89c63 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatProcessor.java
@@ -18,6 +18,7 @@
package kr.syeyoung.dungeonsguide.mod.chat;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiNewChat;
import net.minecraft.util.ChatComponentText;
@@ -81,6 +82,7 @@ public class ChatProcessor {
}
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
@@ -108,6 +110,7 @@ public class ChatProcessor {
if (chatProcessResult.isRemoveChat()) chatReceivedEvent.setResult(Event.Result.DENY);
if (chatProcessResult.isRemoveListener()) it.remove();
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java
index b120499e..c67128ff 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java
@@ -27,6 +27,7 @@ import kr.syeyoung.dungeonsguide.mod.config.guiconfig.location2.HUDLocationConfi
import kr.syeyoung.dungeonsguide.mod.cosmetics.CosmeticsManager;
import kr.syeyoung.dungeonsguide.mod.discord.DiscordIntegrationManager;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.FeatureViewPlayerStatsOnJoin;
import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.HoverEventRenderPlayer;
import kr.syeyoung.dungeonsguide.mod.features.impl.party.playerpreview.api.ApiFetcher;
@@ -216,6 +217,7 @@ public class CommandDungeonsGuide extends CommandBase {
target = null;
}
} catch (Exception t) {
+ FeatureCollectDiagnostics.queueSendLogAsync(t);
t.printStackTrace();
}
}
@@ -272,6 +274,7 @@ public class CommandDungeonsGuide extends CommandBase {
)))));
});
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
@@ -299,6 +302,7 @@ public class CommandDungeonsGuide extends CommandBase {
.put("payload", actualPayload).toString()
));
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticsManager.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticsManager.java
index 2d73ff92..c31b6829 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticsManager.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/cosmetics/CosmeticsManager.java
@@ -25,6 +25,7 @@ import kr.syeyoung.dungeonsguide.mod.cosmetics.surgical.SurgicalReplacer;
import kr.syeyoung.dungeonsguide.mod.events.impl.PlayerListItemPacketEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.StompConnectedEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.stomp.StompHeader;
import kr.syeyoung.dungeonsguide.mod.stomp.StompManager;
import kr.syeyoung.dungeonsguide.mod.stomp.StompPayload;
@@ -166,7 +167,9 @@ public class CosmeticsManager {
EntityPlayer entityPlayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(activeCosmetic.getPlayerUID());
if (entityPlayer != null) entityPlayer.refreshDisplayName();
}
- } catch (Exception exception) {exception.printStackTrace();}
+ } catch (Exception exception) {
+ FeatureCollectDiagnostics.queueSendLogAsync(exception);
+ exception.printStackTrace();}
});
@@ -199,7 +202,8 @@ public class CosmeticsManager {
EntityPlayer entityPlayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(cosmeticData.getPlayerUID());
if (entityPlayer != null) entityPlayer.refreshDisplayName();
}
- } catch (Exception exception) {exception.printStackTrace();}
+ } catch (Exception exception) {
+ FeatureCollectDiagnostics.queueSendLogAsync(exception);exception.printStackTrace();}
}
rebuildCaches();
});
@@ -254,6 +258,7 @@ public class CosmeticsManager {
contextThreadLocal.set(total);
} catch (Exception t) {
System.out.println(clientChatReceivedEvent.message);
+ FeatureCollectDiagnostics.queueSendLogAsync(t);
t.printStackTrace();
}
}
@@ -368,6 +373,7 @@ public class CosmeticsManager {
}
clientChatReceivedEvent.message = SurgicalReplacer.combine(chatComponents);
} catch (Exception t) {
+ FeatureCollectDiagnostics.queueSendLogAsync(t);
System.out.println(clientChatReceivedEvent.message);
t.printStackTrace();
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java
index 86cf868c..b60ef7a7 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/discord/DiscordIntegrationManager.java
@@ -32,6 +32,7 @@ import kr.syeyoung.dungeonsguide.mod.events.impl.DiscordUserJoinRequestEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.DiscordUserUpdateEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
import kr.syeyoung.dungeonsguide.mod.features.impl.discord.inviteViewer.Reply;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.party.PartyContext;
import kr.syeyoung.dungeonsguide.mod.party.PartyManager;
import lombok.Getter;
@@ -127,6 +128,7 @@ public class DiscordIntegrationManager implements IPCListener {
System.out.println("Connecting");
} catch (NoDiscordClientException ignored) {
} catch (Exception t) {
+ FeatureCollectDiagnostics.queueSendLogAsync(t);
t.printStackTrace();
}
}
@@ -184,7 +186,8 @@ public class DiscordIntegrationManager implements IPCListener {
JDiscordRelation relation = JDiscordRelation.parse(obj);
relationMap.put(relation.getDiscordUser().getIdLong(), relation);
}
- } catch (Exception e) {e.printStackTrace();}
+ } catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);e.printStackTrace();}
}
private void sendRichPresence(RichPresence presence) {
@@ -241,6 +244,7 @@ public class DiscordIntegrationManager implements IPCListener {
updatePresence();
}
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace(); // let thread just die if catastrophic failure occurs.
}
try {
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java
index 9ee4a55a..2b721192 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java
@@ -20,6 +20,7 @@ package kr.syeyoung.dungeonsguide.mod.dungeon;
import kr.syeyoung.dungeonsguide.launcher.Main;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoomInfoRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import lombok.Getter;
import lombok.Setter;
@@ -47,6 +48,7 @@ public class DungeonFacade {
DungeonRoomInfoRegistry.loadAll(Main.getConfigDir());
} catch (BadPaddingException | InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException |
IOException | NoSuchAlgorithmException | InvalidAlgorithmParameterException e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/PathfinderExecutorExecutor.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/PathfinderExecutorExecutor.java
index fc991023..c7bf2e2a 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/PathfinderExecutorExecutor.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/PathfinderExecutorExecutor.java
@@ -21,6 +21,7 @@ package kr.syeyoung.dungeonsguide.mod.dungeon;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.dungeon.pathfinding.algorithms.PathfinderExecutor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import net.minecraft.client.Minecraft;
import net.minecraft.util.BlockPos;
import scala.reflect.internal.util.WeakHashSet;
@@ -70,6 +71,7 @@ public class PathfinderExecutorExecutor extends Thread{
}
// Thread.yield();
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace(); // wtf?
try {
Thread.sleep(1000);
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java
index ea1ce09b..04eac305 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomfinder/DungeonRoom.java
@@ -42,6 +42,7 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.ProcessorFactory;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessorGenerator;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.features.impl.secret.FeaturePathfindStrategy;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -222,8 +223,10 @@ public class DungeonRoom {
matchRoomAndSetupRoomProcessor();
matched = true;
} catch (Exception e) {
- if (e.getMessage() == null || !e.getMessage().contains("Chunk not loaded"))
+ if (e.getMessage() == null || !e.getMessage().contains("Chunk not loaded")) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
+ }
} finally {
matching = false;
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorIcePath.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorIcePath.java
index e8088828..337bfe7d 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorIcePath.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/RoomProcessorIcePath.java
@@ -23,6 +23,7 @@ import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPointSet;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -78,6 +79,7 @@ public class RoomProcessorIcePath extends GeneralRoomProcessor {
buildMap();
err = false;
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
err = true;
return;
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java
index a96b23e6..224279fe 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bombdefuse/RoomProcessorBombDefuseSolver.java
@@ -38,6 +38,7 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bombdefuse.chambers.n
import kr.syeyoung.dungeonsguide.mod.events.impl.KeyBindPressedEvent;
import kr.syeyoung.dungeonsguide.mod.events.impl.PlayerInteractEntityEvent;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import lombok.AllArgsConstructor;
@@ -206,6 +207,7 @@ public class RoomProcessorBombDefuseSolver extends GeneralRoomProcessor {
ch.getRight().getProcessor().onDataReceive(compound);
}
} catch (Exception t) {
+ FeatureCollectDiagnostics.queueSendLogAsync(t);
t.printStackTrace();
ChatTransmitter.sendDebugChat(new ChatComponentText("Failed to analyze Bomb Defuse Chat"));
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorThorn.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorThorn.java
index cca070e7..cefb4431 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorThorn.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/bossfight/BossfightProcessorThorn.java
@@ -20,6 +20,7 @@ package kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.bossfight;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import net.minecraft.block.Block;
import net.minecraft.entity.boss.BossStatus;
@@ -99,6 +100,7 @@ public class BossfightProcessorThorn extends GeneralBossfightProcessor {
new Color(0, 255, 0, 50) : new Color(255,0,0, 50), partialTicks, false);
}
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java
index 1171027a..47fea6b2 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/boxpuzzle/RoomProcessorBoxSolver.java
@@ -26,6 +26,7 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessorGenerator;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
@@ -64,6 +65,7 @@ public class RoomProcessorBoxSolver extends GeneralRoomProcessor {
bugged = false;
}
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/icefill/RoomProcessorIcePath2.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/icefill/RoomProcessorIcePath2.java
index 66140160..1f018524 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/icefill/RoomProcessorIcePath2.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/icefill/RoomProcessorIcePath2.java
@@ -26,6 +26,7 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessorGenerator;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import net.minecraft.init.Blocks;
import net.minecraft.util.BlockPos;
@@ -84,6 +85,7 @@ public class RoomProcessorIcePath2 extends GeneralRoomProcessor {
solution.add(poses);
}).start();
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java
index fccfcaa1..e9915a0d 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/roomprocessor/waterpuzzle/RoomProcessorWaterPuzzle.java
@@ -24,6 +24,7 @@ import kr.syeyoung.dungeonsguide.mod.dungeon.roomfinder.DungeonRoom;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.GeneralRoomProcessor;
import kr.syeyoung.dungeonsguide.mod.dungeon.roomprocessor.RoomProcessorGenerator;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.mod.features.impl.etc.FeatureCollectDiagnostics;
import kr.syeyoung.dungeonsguide.mod.utils.RenderUtils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLever;
@@ -226,6 +227,7 @@ public class RoomProcessorWaterPuzzle extends GeneralRoomProcessor {
}
}
} catch (Exception e) {
+ FeatureCollectDiagnostics.queueSendLogAsync(e);
e.printStackTrace();
}
}
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/annotations/EventHandlerRegistry.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/annotations/EventHandlerRegistry.java
index 46fff031..0dd8f261 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/events/annotations/EventHandlerRegistry.java
+++ b/