aboutsummaryrefslogtreecommitdiff
path: root/mod/src/main
diff options
context:
space:
mode:
authorsyeyoung <cyoung06@naver.com>2022-11-17 19:19:49 +0900
committersyeyoung <cyoung06@naver.com>2022-11-17 19:19:49 +0900
commit7a698d3d7e06684419c1c7a99cd59f41fee99524 (patch)
treecc4596d4176e28741542e677d1243eae44c3b0e6 /mod/src/main
parentf033c34b2e2a7824df41ea750b66b21685462279 (diff)
downloadSkyblock-Dungeons-Guide-7a698d3d7e06684419c1c7a99cd59f41fee99524.tar.gz
Skyblock-Dungeons-Guide-7a698d3d7e06684419c1c7a99cd59f41fee99524.tar.bz2
Skyblock-Dungeons-Guide-7a698d3d7e06684419c1c7a99cd59f41fee99524.zip
- Transformer to inject custom ASMEventHandler to handle classloader inconsistency issue
- Transformer to transform Event classes, because FML for some reason injects some stuff - Move all event registration into DungeonsGuide.java Signed-off-by: syeyoung <cyoung06@naver.com>
Diffstat (limited to 'mod/src/main')
-rwxr-xr-xmod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java53
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java5
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/commands/CommandDungeonsGuide.java24
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/dungeon/DungeonFacade.java4
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java1
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java8
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java2
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/BlockCache.java3
-rw-r--r--mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TitleRender.java1
10 files changed, 55 insertions, 48 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 912e3ebc..52515a38 100755
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/DungeonsGuide.java
@@ -30,6 +30,7 @@ import kr.syeyoung.dungeonsguide.mod.config.Config;
import kr.syeyoung.dungeonsguide.mod.cosmetics.CosmeticsManager;
import kr.syeyoung.dungeonsguide.mod.discord.rpc.RichPresenceManager;
import kr.syeyoung.dungeonsguide.mod.dungeon.DungeonFacade;
+import kr.syeyoung.dungeonsguide.mod.events.listener.DungeonListener;
import kr.syeyoung.dungeonsguide.mod.events.listener.FeatureListener;
import kr.syeyoung.dungeonsguide.mod.events.listener.PacketListener;
import kr.syeyoung.dungeonsguide.mod.features.FeatureRegistry;
@@ -58,6 +59,7 @@ import org.apache.logging.log4j.Logger;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -91,9 +93,17 @@ public class DungeonsGuide implements DGInterface {
CommandReparty commandReparty;
+ private List<Object> registeredListeners = new ArrayList<>();
+ public void registerEventsForge(Object object) {
+ registeredListeners.add(object);
+ MinecraftForge.EVENT_BUS.register(object);
+ }
public void init(File f) {
+ ClassLoader orignalLoader = Thread.currentThread().getContextClassLoader();
+
+ Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
ProgressManager.ProgressBar progressbar = ProgressManager.push("DungeonsGuide", 4);
progressbar.step("Creating Configuration");
@@ -115,18 +125,19 @@ public class DungeonsGuide implements DGInterface {
e.printStackTrace();
}
- MinecraftForge.EVENT_BUS.register(this);
+ registerEventsForge(this);
progressbar.step("Registering Events & Commands");
skyblockStatus = new SkyblockStatus();
- MinecraftForge.EVENT_BUS.register(skyblockStatus);
-
+ registerEventsForge(skyblockStatus);
+ registerEventsForge(ChatTransmitter.INSTANCE);
+ registerEventsForge(new BlockCache());
+ registerEventsForge(TitleRender.getInstance());
(new FeatureRegistry()).init();
- new ChatTransmitter();
try {
Set<String> invalid = ReflectionHelper.getPrivateValue(LaunchClassLoader.class, (LaunchClassLoader) Main.class.getClassLoader(), "invalidClasses");
@@ -139,7 +150,9 @@ public class DungeonsGuide implements DGInterface {
this.blockCache = new BlockCache();
+ registerEventsForge(new DungeonListener());
this.dungeonFacade = new DungeonFacade();
+
dungeonFacade.init();
@@ -152,24 +165,24 @@ public class DungeonsGuide implements DGInterface {
ClientCommandHandler.instance.registerCommand(commandDungeonsGuide);
ClientCommandHandler.instance.registerCommand(command);
- MinecraftForge.EVENT_BUS.register(command);
- MinecraftForge.EVENT_BUS.register(commandDungeonsGuide);
+ registerEventsForge(command);
+ registerEventsForge(commandDungeonsGuide);
- MinecraftForge.EVENT_BUS.register(commandReparty = new CommandReparty());
+ registerEventsForge(commandReparty = new CommandReparty());
- MinecraftForge.EVENT_BUS.register(new FeatureListener());
- MinecraftForge.EVENT_BUS.register(new PacketListener());
- MinecraftForge.EVENT_BUS.register(new Keybinds());
+ registerEventsForge(new FeatureListener());
+ registerEventsForge(new PacketListener());
+ registerEventsForge(new Keybinds());
- MinecraftForge.EVENT_BUS.register(PartyManager.INSTANCE);
- MinecraftForge.EVENT_BUS.register(ChatProcessor.INSTANCE);
- MinecraftForge.EVENT_BUS.register(StaticResourceCache.INSTANCE);
+ registerEventsForge(PartyManager.INSTANCE);
+ registerEventsForge(ChatProcessor.INSTANCE);
+ registerEventsForge(StaticResourceCache.INSTANCE);
- MinecraftForge.EVENT_BUS.register(new AhUtils());
+ registerEventsForge(new AhUtils());
progressbar.step("Opening connection");
- MinecraftForge.EVENT_BUS.register(cosmeticsManager = new CosmeticsManager());
+ registerEventsForge(cosmeticsManager = new CosmeticsManager());
progressbar.step("Loading Config");
@@ -187,20 +200,20 @@ public class DungeonsGuide implements DGInterface {
System.setProperty("dg.safe", "true");
}
- MinecraftForge.EVENT_BUS.register(RichPresenceManager.INSTANCE);
+ registerEventsForge(RichPresenceManager.INSTANCE);
TimeScoreUtil.init();
ProgressManager.pop(progressbar);
+ Thread.currentThread().setContextClassLoader(orignalLoader);
}
@Override
public void unload() {
// have FUN!
-
-// bar.step("Instantiating...");
-// partialLoad(obtainLoader(configuration));
- throw new UnsupportedOperationException("Who the heck registered events in features?? This will stay unsupported for now");
+ for (Object registeredListener : registeredListeners) {
+ MinecraftForge.EVENT_BUS.unregister(registeredListener);
+ }
}
@Override
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
index bfdbd5db..8a50211d 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/chat/ChatTransmitter.java
@@ -17,9 +17,8 @@ public class ChatTransmitter {
public static final String PREFIX = "§eDungeons Guide §7:: ";
public static String prefix = "§eDungeons Guide §7:: ";
- public ChatTransmitter() {
- MinecraftForge.EVENT_BUS.register(this);
- }
+
+ public static ChatTransmitter INSTANCE = new ChatTransmitter();
static Queue<ChatComponentText> receiveQueue = new ConcurrentLinkedQueue<>();
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 9b9811cd..5c65424e 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
@@ -18,6 +18,7 @@
package kr.syeyoung.dungeonsguide.mod.commands;
+import kr.syeyoung.dungeonsguide.launcher.Main;
import kr.syeyoung.dungeonsguide.mod.DungeonsGuide;
import kr.syeyoung.dungeonsguide.mod.chat.ChatTransmitter;
import kr.syeyoung.dungeonsguide.mod.config.guiconfig.GuiConfigV2;
@@ -139,17 +140,20 @@ public class CommandDungeonsGuide extends CommandBase {
sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §c" + args[1] + " is not valid number."));
}
}
+ } else if (args[0].equals("reload")) {
+ Main.getMain().reloadWithoutStacktraceReference(Main.getMain().getCurrentLoader());
} else {
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg §7-§fOpens configuration gui"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg gui §7-§fOpens configuration gui"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg help §7-§fShows command help"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg reloadah §7-§f Reloads price data from server."));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg reparty §7-§f Reparty."));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg asktojoin or /dg atj §7-§f Toggle ask to join §cRequires Discord Rich Presence enabled. (/dg -> Advanced)"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg partymax [number] or /dg pm [number] §7-§f Sets partymax §7(maximum amount people in party, for discord rpc)"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg pv [ign] §7-§f Profile Viewer"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg pvall §7-§f Profile Viewer For all people on party"));
- sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg purge §7-§f Purge api cache."));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg §7-§fOpens configuration gui"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg gui §7-§fOpens configuration gui"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg help §7-§fShows command help"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg reloadah §7-§f Reloads price data from server."));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg reparty §7-§f Reparty."));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg asktojoin or /dg atj §7-§f Toggle ask to join §cRequires Discord Rich Presence enabled. (/dg -> Advanced)"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg partymax [number] or /dg pm [number] §7-§f Sets partymax §7(maximum amount people in party, for discord rpc)"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg pv [ign] §7-§f Profile Viewer"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg pvall §7-§f Profile Viewer For all people on party"));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg purge §7-§f Purge api cache."));
+ sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg reload §7-§f Reload Current Version of Dungeons Guide. Auto update versions will not be updated."));
}
}
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 434d3998..76fc482e 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
@@ -6,6 +6,7 @@ import kr.syeyoung.dungeonsguide.mod.events.listener.DungeonListener;
import lombok.Getter;
import lombok.Setter;
import net.minecraftforge.common.MinecraftForge;
+import org.apache.logging.log4j.ThreadContext;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
@@ -22,9 +23,6 @@ public class DungeonFacade {
private DungeonContext context;
public void init() {
- DungeonListener dgEventListener = new DungeonListener();
- MinecraftForge.EVENT_BUS.register(dgEventListener);
-
try {
DungeonRoomInfoRegistry.loadAll(Main.getConfigDir());
} catch (BadPaddingException | InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException |
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java
index cc2f911a..bd495225 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/advanced/FeatureTestPepole.java
@@ -56,7 +56,6 @@ public class FeatureTestPepole extends GuiFeature implements ChatListener, Dunge
addParameter("scale", new FeatureParameter<>("scale", "Scale", "Scale", 2.0f, "float", nval -> this.scale = nval));
- MinecraftForge.EVENT_BUS.register(this);
// (new Thread(() -> {
// while (true){
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java
index f88b2884..70af9397 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/features/impl/etc/FeatureEpicCountdown.java
@@ -5,6 +5,7 @@ import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessResult;
import kr.syeyoung.dungeonsguide.mod.chat.ChatProcessor;
import kr.syeyoung.dungeonsguide.mod.features.FeatureParameter;
import kr.syeyoung.dungeonsguide.mod.features.SimpleFeature;
+import kr.syeyoung.dungeonsguide.mod.features.listener.TickListener;
import kr.syeyoung.dungeonsguide.mod.utils.ScoreBoardUtils;
import kr.syeyoung.dungeonsguide.mod.utils.TextUtils;
import kr.syeyoung.dungeonsguide.mod.utils.TitleRender;
@@ -23,7 +24,7 @@ import static kr.syeyoung.dungeonsguide.mod.chat.ChatProcessResult.REMOVE_CHAT;
/**
* CREDITS FOR THE COUNTDOWN SOUNDTRACK: <a href="https://www.youtube.com/watch?v=acCqrA-JxAw">...</a>
*/
-public class FeatureEpicCountdown extends SimpleFeature {
+public class FeatureEpicCountdown extends SimpleFeature implements TickListener {
static volatile long updatedAt;
static volatile int secondsLeft;
@@ -40,7 +41,6 @@ public class FeatureEpicCountdown extends SimpleFeature {
lastSec = GO_TEXT;
ChatProcessor.INSTANCE.subscribe(FeatureEpicCountdown::processChat);
- MinecraftForge.EVENT_BUS.register(this);
}
public static ChatProcessResult processChat(String txt, Map<String, Object> context) {
@@ -87,8 +87,8 @@ public class FeatureEpicCountdown extends SimpleFeature {
String lastSec;
@SubscribeEvent
- public void onTick(TickEvent.ClientTickEvent e){
- if(e.phase != TickEvent.Phase.START || !isEnabled() || !DungeonsGuide.getDungeonsGuide().getSkyblockStatus().isOnDungeon()) return;
+ public void onTick(){
+ if(!isEnabled() || !DungeonsGuide.getDungeonsGuide().getSkyblockStatus().isOnDungeon()) return;
ScoreBoardUtils.forEachLineClean(line -> {
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java
index 84705a1d..d23debc2 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompClient.java
@@ -131,7 +131,7 @@ public class StompClient extends WebSocketClient {
if (heartbeat != null) heartbeat.cancel(true);
MinecraftForge.EVENT_BUS.post(new StompDiedEvent(code, reason, remote));
-
+ StompManager.getInstance().onStompDied(new StompDiedEvent(code, reason, remote));
}
@Override
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java
index e7248484..d430e586 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/stomp/StompManager.java
@@ -21,7 +21,6 @@ public class StompManager {
public static StompManager getInstance() {
if (instance == null) {
instance = new StompManager();
- MinecraftForge.EVENT_BUS.register(instance);
}
return instance;
}
@@ -48,7 +47,6 @@ public class StompManager {
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
- @SubscribeEvent
public void onStompDied(StompDiedEvent event) {
logger.info("Stomp Connection closed, trying to reconnect - {} - {}", event.reason, event.code);
connectStomp();
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/BlockCache.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/BlockCache.java
index b8313778..366e09a0 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/BlockCache.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/BlockCache.java
@@ -15,9 +15,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.concurrent.TimeUnit;
public class BlockCache {
- public BlockCache() {
- MinecraftForge.EVENT_BUS.register(this);
- }
@SuppressWarnings("UnstableApiUsage")
private final LoadingCache<BlockPos, IBlockState> cache = CacheBuilder.newBuilder()
diff --git a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TitleRender.java b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TitleRender.java
index dfc0b0a1..3b8fe964 100644
--- a/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TitleRender.java
+++ b/mod/src/main/java/kr/syeyoung/dungeonsguide/mod/utils/TitleRender.java
@@ -27,7 +27,6 @@ public class TitleRender {
}
private TitleRender() {
- MinecraftForge.EVENT_BUS.register(this);
}
protected static int titlesTimer;