diff options
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java')
-rwxr-xr-x | src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java new file mode 100755 index 00000000..c1d3e4ea --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/DungeonsGuide.java @@ -0,0 +1,217 @@ +/* + * Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod + * Copyright (C) 2021 cyoung06 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package kr.syeyoung.dungeonsguide; + +import com.google.common.collect.Sets; +import kr.syeyoung.dungeonsguide.commands.*; +import kr.syeyoung.dungeonsguide.config.Config; +import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoomInfoRegistry; +import kr.syeyoung.dungeonsguide.eventlistener.DungeonListener; +import kr.syeyoung.dungeonsguide.eventlistener.FeatureListener; +import kr.syeyoung.dungeonsguide.eventlistener.PacketListener; +import kr.syeyoung.dungeonsguide.events.StompConnectedEvent; +import kr.syeyoung.dungeonsguide.features.FeatureRegistry; +import kr.syeyoung.dungeonsguide.party.PartyInviteViewer; +import kr.syeyoung.dungeonsguide.party.PartyManager; +import kr.syeyoung.dungeonsguide.resources.DGTexturePack; +import kr.syeyoung.dungeonsguide.stomp.CloseListener; +import kr.syeyoung.dungeonsguide.stomp.StompClient; +import kr.syeyoung.dungeonsguide.stomp.StompInterface; +import kr.syeyoung.dungeonsguide.utils.AhUtils; +import lombok.Getter; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IResourcePack; +import net.minecraft.launchwrapper.LaunchClassLoader; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.client.ClientCommandHandler; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.common.ProgressManager; +import net.minecraftforge.fml.common.event.FMLInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.relauncher.ReflectionHelper; +import org.apache.commons.io.IOUtils; + +import javax.crypto.BadPaddingException; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.io.*; +import java.net.URI; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Set; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class DungeonsGuide implements DGInterface, CloseListener { + + private SkyblockStatus skyblockStatus; + + private static DungeonsGuide dungeonsGuide; + + + @Getter + private final Authenticator authenticator; + + @Getter + private StompInterface stompConnection; + + public DungeonsGuide(Authenticator authenticator) { + this.authenticator = authenticator; + } + + public static void sendDebugChat(IChatComponent iChatComponent) { + if (FeatureRegistry.DEBUG.isEnabled()) + Minecraft.getMinecraft().thePlayer.addChatMessage(iChatComponent); + } + @Getter + CommandReparty commandReparty; + + + private final String stompURL = "wss://dungeons.guide/ws"; +// private String stompURL = "ws://localhost/ws"; + public void init(FMLInitializationEvent event) { + ProgressManager.ProgressBar progressbar = ProgressManager.push("DungeonsGuide", 4); + + + try { + Set<String> invalid = ReflectionHelper.getPrivateValue(LaunchClassLoader.class, (LaunchClassLoader) Main.class.getClassLoader(), "invalidClasses"); + ((LaunchClassLoader) Main.class.getClassLoader()).clearNegativeEntries(Sets.newHashSet("org.slf4j.LoggerFactory")); + for (String s : invalid) { + System.out.println(s+" in invalid"); + } + invalid.clear(); + } catch (Throwable t) { + t.printStackTrace(); + } + + progressbar.step("Registering Events & Commands"); + dungeonsGuide = this; + skyblockStatus = new SkyblockStatus(); + + CommandDungeonsGuide commandDungeonsGuide; + MinecraftForge.EVENT_BUS.register(new DungeonListener()); + ClientCommandHandler.instance.registerCommand(commandDungeonsGuide = new CommandDungeonsGuide()); + MinecraftForge.EVENT_BUS.register(commandDungeonsGuide); + + commandReparty = new CommandReparty(); + if (FeatureRegistry.ETC_REPARTY.isEnabled()) + ClientCommandHandler.instance.registerCommand(commandReparty); + + MinecraftForge.EVENT_BUS.register(commandReparty); + MinecraftForge.EVENT_BUS.register(new FeatureListener()); + MinecraftForge.EVENT_BUS.register(new PacketListener()); + MinecraftForge.EVENT_BUS.register(new Keybinds()); + + RichPresenceManager.INSTANCE.setup(); + MinecraftForge.EVENT_BUS.register(RichPresenceManager.INSTANCE); + MinecraftForge.EVENT_BUS.register(PartyManager.INSTANCE); + MinecraftForge.EVENT_BUS.register(PartyInviteViewer.INSTANCE); + + AhUtils.registerTimer(); + + progressbar.step("Downloading Roomdatas"); + try { + DungeonRoomInfoRegistry.loadAll(configDir); + } catch (BadPaddingException | InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException | IOException | NoSuchAlgorithmException | InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } + Keybinds.register(); + + progressbar.step("Opening connection"); + try { + stompConnection = new StompClient(new URI(stompURL), authenticator.getToken(), this); + MinecraftForge.EVENT_BUS.post(new StompConnectedEvent(stompConnection)); + } catch (Exception e) { + throw new RuntimeException(e); + } + + + progressbar.step("Loading Config"); + try { + Config.loadConfig( null ); + } catch (IOException e) { + e.printStackTrace(); + } + + + ProgressManager.pop(progressbar); + } + public void pre(FMLPreInitializationEvent event) { + configDir = new File(event.getModConfigurationDirectory(),"dungeonsguide"); + File configFile = new File(configDir, "config.json"); + if (!configFile.exists()) { + configDir.mkdirs(); + } + Config.f = configFile; + Minecraft.getMinecraft().getFramebuffer().enableStencil(); + + try { + List<IResourcePack> resourcePackList = ReflectionHelper.getPrivateValue(Minecraft.class, Minecraft.getMinecraft(),"defaultResourcePacks", "aA", "field_110449_ao"); + resourcePackList.add(new DGTexturePack(authenticator)); + } catch (Throwable t){ + t.printStackTrace(); + } + } + private void copy(InputStream inputStream, File f) throws IOException { + FileOutputStream fos = new FileOutputStream(f); + IOUtils.copy(inputStream, fos); + fos.flush(); + fos.close(); + inputStream.close(); + } + + private void combineConfig(Configuration saved, Configuration newest) { + } + + @Getter + private File configDir; + + + public SkyblockStatus getSkyblockStatus() { + return skyblockStatus; + } + + public static DungeonsGuide getDungeonsGuide() { + return dungeonsGuide; + } + ScheduledExecutorService ex = Executors.newScheduledThreadPool(2); + @Override + public void onClose(int code, String reason, boolean remote) { + System.out.println("Stomp Connection closed, trying to reconnect - "+reason+ " - "+code); + connectStomp(); + } + + public void connectStomp() { + ex.schedule(new Runnable() { + @Override + public void run() { + try { + stompConnection = new StompClient(new URI(stompURL), authenticator.getToken(), DungeonsGuide.this); + MinecraftForge.EVENT_BUS.post(new StompConnectedEvent(stompConnection)); + } catch (Exception e) { + e.printStackTrace(); + } + } + }, 5L, TimeUnit.SECONDS); + } +} |