From a0270a6fdb4ea465e37cf4c0d48becd92cb94f6f Mon Sep 17 00:00:00 2001 From: RabbitType99 Date: Mon, 22 Feb 2021 11:24:55 +0100 Subject: Added an Installer Frame. --- .../java/DefenitlyNotAJoikedInstallerFrame.java | 682 +++++++++++++++++++++ src/main/resources/assets/dsm/icons/folder.png | Bin 0 -> 454 bytes src/main/resources/assets/dsm/icons/logo.png | Bin 0 -> 40669 bytes 3 files changed, 682 insertions(+) create mode 100644 src/main/java/DefenitlyNotAJoikedInstallerFrame.java create mode 100644 src/main/resources/assets/dsm/icons/folder.png create mode 100644 src/main/resources/assets/dsm/icons/logo.png (limited to 'src') diff --git a/src/main/java/DefenitlyNotAJoikedInstallerFrame.java b/src/main/java/DefenitlyNotAJoikedInstallerFrame.java new file mode 100644 index 0000000..6caa372 --- /dev/null +++ b/src/main/java/DefenitlyNotAJoikedInstallerFrame.java @@ -0,0 +1,682 @@ +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.image.BufferedImage; +import java.io.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.util.Locale; +import java.util.Objects; +import java.util.jar.JarFile; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; + +public class DefenitlyNotAJoikedInstallerFrame extends JFrame implements ActionListener, MouseListener { + + private static final Pattern IN_MODS_SUBFOLDER = Pattern.compile("1\\.8\\.9[/\\\\]?$"); + + private JLabel logo = null; + private JLabel versionInfo = null; + private JLabel labelFolder = null; + + private JPanel panelCenter = null; + private JPanel panelBottom = null; + private JPanel totalContentPane = null; + + private JTextArea descriptionText = null; + private JTextArea forgeDescriptionText = null; + + private JTextField textFieldFolderLocation = null; + private JButton buttonChooseFolder = null; + + private JButton buttonInstall = null; + private JButton buttonOpenFolder = null; + private JButton buttonClose = null; + + private static final int TOTAL_HEIGHT = 442; //435 + private static final int TOTAL_WIDTH = 404; + + private int x = 0; + private int y = 0; + + private int w = TOTAL_WIDTH; + private int h; + private int margin; + + public DefenitlyNotAJoikedInstallerFrame() { + try { + setName("DankersSkyblockModInstallerFrame"); + setTitle("DSM Installer"); + setResizable(false); + setSize(TOTAL_WIDTH, TOTAL_HEIGHT); + setContentPane(getPanelContentPane()); + + getButtonFolder().addActionListener(this); + getButtonInstall().addActionListener(this); + getButtonOpenFolder().addActionListener(this); + getButtonClose().addActionListener(this); + getForgeTextArea().addMouseListener(this); + + pack(); + setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + getFieldFolder().setText(getModsFolder().getPath()); + getButtonInstall().setEnabled(true); + getButtonInstall().requestFocus(); + } catch (Exception ex) { + showErrorPopup(ex); + } + } + + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + DefenitlyNotAJoikedInstallerFrame frame = new DefenitlyNotAJoikedInstallerFrame(); + frame.centerFrame(frame); + frame.show(); + + } catch (Exception ex) { + showErrorPopup(ex); + } + } + + private JPanel getPanelContentPane() { + if (totalContentPane == null) { + try { + totalContentPane = new JPanel(); + totalContentPane.setName("PanelContentPane"); + totalContentPane.setLayout(new BorderLayout(5, 5)); + totalContentPane.setPreferredSize(new Dimension(TOTAL_WIDTH, TOTAL_HEIGHT)); + totalContentPane.add(getPanelCenter(), "Center"); + totalContentPane.add(getPanelBottom(), "South"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return totalContentPane; + } + + private JPanel getPanelCenter() { + if (panelCenter == null) { + try { + (panelCenter = new JPanel()).setName("PanelCenter"); + panelCenter.setLayout(null); + panelCenter.add(getPictureLabel(), getPictureLabel().getName()); + panelCenter.add(getVersionInfo(), getVersionInfo().getName()); + panelCenter.add(getTextArea(), getTextArea().getName()); + panelCenter.add(getForgeTextArea(), getForgeTextArea().getName()); + panelCenter.add(getLabelFolder(), getLabelFolder().getName()); + panelCenter.add(getFieldFolder(), getFieldFolder().getName()); + panelCenter.add(getButtonFolder(), getButtonFolder().getName()); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return panelCenter; + } + + private JLabel getPictureLabel() { + if (logo == null) { + try { + h = w/2; + margin = 5; + + BufferedImage myPicture = ImageIO.read(Objects.requireNonNull(getClass().getClassLoader() + .getResourceAsStream("assets/dsm/icons/logo.png"), "Logo not found.")); + Image scaled = myPicture.getScaledInstance(w-margin*2, h-margin, Image.SCALE_SMOOTH); + logo = new JLabel(new ImageIcon(scaled)); + logo.setName("logo"); + logo.setBounds(x+margin, y+margin, w-margin*2, h-margin); + logo.setFont(new Font(Font.DIALOG, Font.BOLD, 18)); + logo.setHorizontalAlignment(SwingConstants.CENTER); + logo.setPreferredSize(new Dimension(w, h)); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return logo; + } + + private JLabel getVersionInfo() { + if (versionInfo == null) { + try { + h = 47; //34 + + versionInfo = new JLabel(); + versionInfo.setName("LabelMcVersion"); + versionInfo.setBounds(x, y+1, w, h); + versionInfo.setFont(new Font(Font.DIALOG, Font.BOLD, 14)); + versionInfo.setHorizontalAlignment(SwingConstants.CENTER); + versionInfo.setPreferredSize(new Dimension(w, h)); + versionInfo.setText("Danker's SkyblockMod - Installer by Biscuit
for Minecraft 1.8.9
"); + + y += h-5; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return versionInfo; + } + + + private JTextArea getTextArea() { + if (descriptionText == null) { + try { + h = 60; + margin = 10; + + descriptionText = new JTextArea(); + descriptionText.setName("TextArea"); + setTextAreaProperties(descriptionText); + descriptionText.setText("This installer will copy Danker's SkyblockMod into your forge mods folder for you, and replace any old versions that already exist. " + + "Close this if you prefer to do this yourself!"); + descriptionText.setWrapStyleWord(true); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return descriptionText; + } + + private void setTextAreaProperties(JTextArea textArea) { + textArea.setBounds(x+margin, y+margin, w-margin*2, h-margin); + textArea.setEditable(false); + textArea.setHighlighter(null); + textArea.setEnabled(true); + textArea.setFont(new Font(Font.DIALOG, Font.PLAIN, 12)); + textArea.setLineWrap(true); + textArea.setOpaque(false); + textArea.setPreferredSize(new Dimension(w-margin*2, h-margin)); + } + + private JTextArea getForgeTextArea() { + if (forgeDescriptionText == null) { + try { + h = 55; + margin = 10; + + forgeDescriptionText = new JTextArea(); + forgeDescriptionText.setName("TextAreaForge"); + + + setTextAreaProperties(forgeDescriptionText); + + + + + + forgeDescriptionText.setText("However, you still need to install Forge client in order to be able to run this mod. Click here to visit the download page for Forge 1.8.9!"); + forgeDescriptionText.setForeground(Color.BLUE.darker()); + forgeDescriptionText.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + forgeDescriptionText.setWrapStyleWord(true); + + y += h; + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return forgeDescriptionText; + } + + private JLabel getLabelFolder() { + if (labelFolder == null) { + h = 16; + w = 65; + + x += 10; // Padding + + try { + labelFolder = new JLabel(); + labelFolder.setName("LabelFolder"); + labelFolder.setBounds(x, y+2, w, h); + labelFolder.setPreferredSize(new Dimension(w, h)); + labelFolder.setText("Mods Folder"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + + x += w; + } + return labelFolder; + } + + private JTextField getFieldFolder() { + if (textFieldFolderLocation == null) { + h = 20; + w = 287; + + try { + textFieldFolderLocation = new JTextField(); + textFieldFolderLocation.setName("FieldFolder"); + textFieldFolderLocation.setBounds(x, y, w, h); + textFieldFolderLocation.setEditable(false); + textFieldFolderLocation.setPreferredSize(new Dimension(w, h)); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + + x += w; + } + return textFieldFolderLocation; + } + + private JButton getButtonFolder() { + if (buttonChooseFolder == null) { + h = 20; + w = 25; + + x += 10; // Padding + + try { + BufferedImage myPicture = ImageIO.read(Objects.requireNonNull(getClass().getClassLoader() + .getResourceAsStream("assets/dsm/icons/folder.png"), "Folder icon not found.")); + Image scaled = myPicture.getScaledInstance(w-8, h-6, Image.SCALE_SMOOTH); + buttonChooseFolder = new JButton(new ImageIcon(scaled)); + buttonChooseFolder.setName("ButtonFolder"); + buttonChooseFolder.setBounds(x, y, w, h); + buttonChooseFolder.setPreferredSize(new Dimension(w, h)); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonChooseFolder; + } + + private JPanel getPanelBottom() { + if (panelBottom == null) { + try { + panelBottom = new JPanel(); + panelBottom.setName("PanelBottom"); + panelBottom.setLayout(new FlowLayout(FlowLayout.CENTER, 15, 10)); + panelBottom.setPreferredSize(new Dimension(390, 55)); + panelBottom.add(getButtonInstall(), getButtonInstall().getName()); + panelBottom.add(getButtonOpenFolder(), getButtonOpenFolder().getName()); + panelBottom.add(getButtonClose(), getButtonClose().getName()); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return panelBottom; + } + + private JButton getButtonInstall() { + if (buttonInstall == null) { + w = 100; + h = 26; + + try { + buttonInstall = new JButton(); + buttonInstall.setName("ButtonInstall"); + buttonInstall.setPreferredSize(new Dimension(w, h)); + buttonInstall.setText("Install"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonInstall; + } + + private JButton getButtonOpenFolder() { + if (buttonOpenFolder == null) { + w = 130; + h = 26; + + try { + buttonOpenFolder = new JButton(); + buttonOpenFolder.setName("ButtonOpenFolder"); + buttonOpenFolder.setPreferredSize(new Dimension(w, h)); + buttonOpenFolder.setText("Open Mods Folder"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonOpenFolder; + } + + private JButton getButtonClose() { + if (buttonClose == null) { + w = 100; + h = 26; + + try { + (buttonClose = new JButton()).setName("ButtonClose"); + buttonClose.setPreferredSize(new Dimension(w, h)); + buttonClose.setText("Cancel"); + } catch (Throwable ivjExc) { + showErrorPopup(ivjExc); + } + } + return buttonClose; + } + + public void onFolderSelect() { + File currentDirectory = new File(getFieldFolder().getText()); + + JFileChooser jFileChooser = new JFileChooser(currentDirectory); + jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + jFileChooser.setAcceptAllFileFilterUsed(false); + if (jFileChooser.showOpenDialog(this) == 0) { + File newDirectory = jFileChooser.getSelectedFile(); + getFieldFolder().setText(newDirectory.getPath()); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == getButtonClose()) { + dispose(); + System.exit(0); + } + if (e.getSource() == getButtonFolder()) { + onFolderSelect(); + } + if (e.getSource() == getButtonInstall()) { + onInstall(); + } + if (e.getSource() == getButtonOpenFolder()) { + onOpenFolder(); + } + } + + @Override + public void mouseClicked(MouseEvent e) { + if (e.getSource() == getForgeTextArea()) { + try { + Desktop.getDesktop().browse(new URI("http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.8.9.html")); + } catch (IOException | URISyntaxException ex) { + showErrorPopup(ex); + } + } + } + + public void onInstall() { + try { + File modsFolder = new File(getFieldFolder().getText()); + if (!modsFolder.exists()) { + showErrorMessage("Folder not found: " + modsFolder.getPath()); + return; + } + if (!modsFolder.isDirectory()) { + showErrorMessage("Not a folder: " + modsFolder.getPath()); + return; + } + tryInstall(modsFolder); + } catch (Exception e) { + showErrorPopup(e); + } + } + + private void tryInstall(File modsFolder) { + File thisFile = getThisFile(); + + if (thisFile != null) { + boolean inSubFolder = false; + if (IN_MODS_SUBFOLDER.matcher(modsFolder.getPath()).find()) { + inSubFolder = true; + } + + File newFile = new File(modsFolder, "Dankers_Skyblock_mod-"+getVersionFromMcmodInfo()+".jar"); + if (thisFile.equals(newFile)) { + showErrorMessage("You are opening this file from where the file should be installed... there's nothing to be done!"); + return; + } + + boolean deletingFailure = false; + if (modsFolder.isDirectory()) { // Delete in this current folder. + boolean failed = findSkyblockAddonsAndDelete(modsFolder.listFiles()); + if (failed) deletingFailure = true; + } + if (inSubFolder) { // We are in the 1.8.9 folder, delete in the parent folder as well. + if (modsFolder.getParentFile().isDirectory()) { + boolean failed = findSkyblockAddonsAndDelete(modsFolder.getParentFile().listFiles()); + if (failed) deletingFailure = true; + } + } else { // We are in the main mods folder, but the 1.8.9 subfolder exists... delete in there too. + File subFolder = new File(modsFolder, "1.8.9"); + if (subFolder.exists() && subFolder.isDirectory()) { + boolean failed = findSkyblockAddonsAndDelete(subFolder.listFiles()); + if (failed) deletingFailure = true; + } + } + + if (deletingFailure) return; + + if (thisFile.isDirectory()) { + showErrorMessage("This file is a directory... Are we in a development environment?"); + return; + } + + try { + Files.copy(thisFile.toPath(), newFile.toPath()); + } catch (Exception ex) { + showErrorPopup(ex); + return; + } + + showMessage("Danker's SkyblockMod has been successfully installed into your mods folder."); + dispose(); + System.exit(0); + } + } + + private boolean findSkyblockAddonsAndDelete(File[] files) { + if (files == null) return false; + + for (File file : files) { + if (!file.isDirectory() && file.getPath().endsWith(".jar")) { + try { + JarFile jarFile = new JarFile(file); + ZipEntry mcModInfo = jarFile.getEntry("mcmod.info"); + if (mcModInfo != null) { + InputStream inputStream = jarFile.getInputStream(mcModInfo); + String modID = getModIDFromInputStream(inputStream); + if (modID.equals("dankersskyblockmod")) { + jarFile.close(); + try { + boolean deleted = file.delete(); + if (!deleted) { + throw new Exception(); + } + } catch (Exception ex) { + ex.printStackTrace(); + showErrorMessage("Was not able to delete the other SkyblockAddons files found in your mods folder!" + System.lineSeparator() + + "Please make sure that your minecraft is currently closed and try again, or feel" + System.lineSeparator() + + "free to open your mods folder and delete those files manually."); + return true; + } + continue; + } + } + jarFile.close(); + } catch (Exception ex) { + // Just don't check the file I guess, move on to the next... + } + } + } + return false; + } + + public void onOpenFolder() { + try { + Desktop.getDesktop().open(getModsFolder()); + } catch (Exception e) { + showErrorPopup(e); + } + } + + public File getModsFolder() { + String userHome = System.getProperty("user.home", "."); + + File modsFolder = getFile(userHome, "minecraft/mods/1.8.9"); + if (!modsFolder.exists()) { + modsFolder = getFile(userHome, "minecraft/mods"); + } + + if (!modsFolder.exists() && !modsFolder.mkdirs()) { + throw new RuntimeException("The working directory could not be created: " + modsFolder); + } + return modsFolder; + } + + public File getFile(String userHome, String minecraftPath) { + File workingDirectory; + switch (getOperatingSystem()) { + case LINUX: + case SOLARIS: { + workingDirectory = new File(userHome, '.' + minecraftPath + '/'); + break; + } + case WINDOWS: { + String applicationData = System.getenv("APPDATA"); + if (applicationData != null) { + workingDirectory = new File(applicationData, "." + minecraftPath + '/'); + break; + } + workingDirectory = new File(userHome, '.' + minecraftPath + '/'); + break; + } + case MACOS: { + workingDirectory = new File(userHome, "Library/Application Support/" + minecraftPath); + break; + } + default: { + workingDirectory = new File(userHome, minecraftPath + '/'); + break; + } + } + return workingDirectory; + } + + public OperatingSystem getOperatingSystem() { + String osName = System.getProperty("os.name").toLowerCase(Locale.US); + if (osName.contains("win")) { + return OperatingSystem.WINDOWS; + + } else if (osName.contains("mac")) { + return OperatingSystem.MACOS; + + } else if (osName.contains("solaris") || osName.contains("sunos")) { + + return OperatingSystem.SOLARIS; + } else if (osName.contains("linux") || osName.contains("unix")) { + + return OperatingSystem.LINUX; + } + return OperatingSystem.UNKNOWN; + } + + public void centerFrame(JFrame frame) { + Rectangle rectangle = frame.getBounds(); + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Rectangle screenRectangle = new Rectangle(0, 0, screenSize.width, screenSize.height); + + int newX = screenRectangle.x + (screenRectangle.width - rectangle.width) / 2; + int newY = screenRectangle.y + (screenRectangle.height - rectangle.height) / 2; + + if (newX < 0) newX = 0; + if (newY < 0) newY = 0; + + frame.setBounds(newX, newY, rectangle.width, rectangle.height); + } + + public void showMessage(String message) { + JOptionPane.showMessageDialog(null, message, "Danker's SkyblockMod", JOptionPane.INFORMATION_MESSAGE); + } + + public void showErrorMessage(String message) { + JOptionPane.showMessageDialog(null, message, "Danker's SkyblockMod - Error", JOptionPane.ERROR_MESSAGE); + } + + public enum OperatingSystem { + LINUX, + SOLARIS, + WINDOWS, + MACOS, + UNKNOWN + } + + private static String getStacktraceText(Throwable ex) { + StringWriter stringWriter = new StringWriter(); + ex.printStackTrace(new PrintWriter(stringWriter)); + return stringWriter.toString().replace("\t", " "); + } + + private static void showErrorPopup(Throwable ex) { + ex.printStackTrace(); + + JTextArea textArea = new JTextArea(getStacktraceText(ex)); + textArea.setEditable(false); + Font currentFont = textArea.getFont(); + Font newFont = new Font(Font.MONOSPACED, currentFont.getStyle(), currentFont.getSize()); + textArea.setFont(newFont); + + JScrollPane errorScrollPane = new JScrollPane(textArea); + errorScrollPane.setPreferredSize(new Dimension(600, 400)); + JOptionPane.showMessageDialog(null, errorScrollPane, "Error", JOptionPane.ERROR_MESSAGE); + } + + private String getVersionFromMcmodInfo() { + String version = ""; + try { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Objects.requireNonNull(getClass(). + getClassLoader().getResourceAsStream("mcmod.info"), "mcmod.info not found."))); + while ((version = bufferedReader.readLine()) != null) { + if (version.contains("\"version\": \"")) { + version = version.split(Pattern.quote("\"version\": \""))[1]; + version = version.substring(0, version.length() - 2); + break; + } + } + } catch (Exception ex) { + // It's okay, I guess just don't use the version lol. + } + return version; + } + + private String getModIDFromInputStream(InputStream inputStream) { + String version = ""; + try { + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + while ((version = bufferedReader.readLine()) != null) { + if (version.contains("\"modid\": \"")) { + version = version.split(Pattern.quote("\"modid\": \""))[1]; + version = version.substring(0, version.length() - 2); + break; + } + } + } catch (Exception ex) { + // RIP, couldn't find the modid... + } + return version; + } + + private File getThisFile() { + try { + return new File(DefenitlyNotAJoikedInstallerFrame.class.getProtectionDomain().getCodeSource().getLocation().toURI()); + } catch (URISyntaxException ex) { + showErrorPopup(ex); + } + return null; + } + + @Override + public void mousePressed(MouseEvent e) {} + + @Override + public void mouseReleased(MouseEvent e) {} + + @Override + public void mouseEntered(MouseEvent e) {} + + @Override + public void mouseExited(MouseEvent e) {} +} diff --git a/src/main/resources/assets/dsm/icons/folder.png b/src/main/resources/assets/dsm/icons/folder.png new file mode 100644 index 0000000..f4af735 Binary files /dev/null and b/src/main/resources/assets/dsm/icons/folder.png differ diff --git a/src/main/resources/assets/dsm/icons/logo.png b/src/main/resources/assets/dsm/icons/logo.png new file mode 100644 index 0000000..be4667b Binary files /dev/null and b/src/main/resources/assets/dsm/icons/logo.png differ -- cgit From c74359fb758b6320cd7bea11ef07d2a55367713f Mon Sep 17 00:00:00 2001 From: RabbitType99 Date: Mon, 22 Feb 2021 16:48:15 +0100 Subject: Added an Installer Frame. --- src/main/java/DefenitlyNotAJoikedInstallerFrame.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/DefenitlyNotAJoikedInstallerFrame.java b/src/main/java/DefenitlyNotAJoikedInstallerFrame.java index 6caa372..d52d65b 100644 --- a/src/main/java/DefenitlyNotAJoikedInstallerFrame.java +++ b/src/main/java/DefenitlyNotAJoikedInstallerFrame.java @@ -424,7 +424,7 @@ public class DefenitlyNotAJoikedInstallerFrame extends JFrame implements ActionL inSubFolder = true; } - File newFile = new File(modsFolder, "Dankers_Skyblock_mod-"+getVersionFromMcmodInfo()+".jar"); + File newFile = new File(modsFolder, "Danker's Skyblock Mod-"+getVersionFromMcmodInfo()+".jar"); if (thisFile.equals(newFile)) { showErrorMessage("You are opening this file from where the file should be installed... there's nothing to be done!"); return; @@ -432,18 +432,18 @@ public class DefenitlyNotAJoikedInstallerFrame extends JFrame implements ActionL boolean deletingFailure = false; if (modsFolder.isDirectory()) { // Delete in this current folder. - boolean failed = findSkyblockAddonsAndDelete(modsFolder.listFiles()); + boolean failed = findDSMAndDelete(modsFolder.listFiles()); if (failed) deletingFailure = true; } if (inSubFolder) { // We are in the 1.8.9 folder, delete in the parent folder as well. if (modsFolder.getParentFile().isDirectory()) { - boolean failed = findSkyblockAddonsAndDelete(modsFolder.getParentFile().listFiles()); + boolean failed = findDSMAndDelete(modsFolder.getParentFile().listFiles()); if (failed) deletingFailure = true; } } else { // We are in the main mods folder, but the 1.8.9 subfolder exists... delete in there too. File subFolder = new File(modsFolder, "1.8.9"); if (subFolder.exists() && subFolder.isDirectory()) { - boolean failed = findSkyblockAddonsAndDelete(subFolder.listFiles()); + boolean failed = findDSMAndDelete(subFolder.listFiles()); if (failed) deletingFailure = true; } } @@ -468,7 +468,7 @@ public class DefenitlyNotAJoikedInstallerFrame extends JFrame implements ActionL } } - private boolean findSkyblockAddonsAndDelete(File[] files) { + private boolean findDSMAndDelete(File[] files) { if (files == null) return false; for (File file : files) { @@ -488,7 +488,7 @@ public class DefenitlyNotAJoikedInstallerFrame extends JFrame implements ActionL } } catch (Exception ex) { ex.printStackTrace(); - showErrorMessage("Was not able to delete the other SkyblockAddons files found in your mods folder!" + System.lineSeparator() + + showErrorMessage("Was not able to delete the other DSM files found in your mods folder!" + System.lineSeparator() + "Please make sure that your minecraft is currently closed and try again, or feel" + System.lineSeparator() + "free to open your mods folder and delete those files manually."); return true; -- cgit From ad53066846fb168255499a332a1ad4bca39f5935 Mon Sep 17 00:00:00 2001 From: bowser0000 Date: Sat, 27 Feb 2021 18:25:51 -0500 Subject: Move features into their own files --- src/main/java/me/Danker/DankersSkyblockMod.java | 3914 +------------------- .../me/Danker/commands/BlockSlayerCommand.java | 30 +- .../java/me/Danker/commands/DankerGuiCommand.java | 3 +- .../me/Danker/commands/ImportFishingCommand.java | 249 +- src/main/java/me/Danker/commands/LootCommand.java | 1001 ++--- src/main/java/me/Danker/commands/PetsCommand.java | 1 - .../java/me/Danker/commands/RepartyCommand.java | 5 +- .../java/me/Danker/commands/ResetLootCommand.java | 273 +- .../me/Danker/commands/SkillTrackerCommand.java | 33 +- .../me/Danker/events/ChestSlotClickedEvent.java | 34 + .../events/GuiChestBackgroundDrawnEvent.java | 22 + src/main/java/me/Danker/events/RenderOverlay.java | 6 + src/main/java/me/Danker/features/AutoDisplay.java | 73 + .../me/Danker/features/AutoSwapToPickBlock.java | 51 + .../java/me/Danker/features/BlockWrongSlayer.java | 42 + .../java/me/Danker/features/BonzoMaskTimer.java | 86 + src/main/java/me/Danker/features/CakeTimer.java | 62 + src/main/java/me/Danker/features/DungeonTimer.java | 79 + .../java/me/Danker/features/ExpertiseLore.java | 40 + .../me/Danker/features/FasterMaddoxCalling.java | 64 + .../java/me/Danker/features/GoldenEnchants.java | 68 + .../me/Danker/features/GolemSpawningAlert.java | 26 + .../me/Danker/features/GpartyNotifications.java | 38 + .../Danker/features/HideTooltipsInExperiments.java | 35 + .../me/Danker/features/LowHealthNotifications.java | 36 + .../me/Danker/features/NecronNotifications.java | 78 + src/main/java/me/Danker/features/NoF3Coords.java | 33 + .../java/me/Danker/features/NotifySlayerSlain.java | 88 + src/main/java/me/Danker/features/PetColours.java | 69 + src/main/java/me/Danker/features/Reparty.java | 143 + .../java/me/Danker/features/Skill50Display.java | 77 + src/main/java/me/Danker/features/SkillTracker.java | 208 ++ src/main/java/me/Danker/features/SpamHider.java | 51 + .../java/me/Danker/features/SpiritBearAlert.java | 24 + .../Danker/features/StopSalvagingStarredItems.java | 34 + .../java/me/Danker/features/UpdateChecker.java | 52 + .../java/me/Danker/features/WatcherReadyAlert.java | 22 + .../java/me/Danker/features/loot/LootDisplay.java | 903 +++++ .../java/me/Danker/features/loot/LootTracker.java | 1097 ++++++ .../puzzlesolvers/ArrowTerminalSolver.java | 32 + .../Danker/features/puzzlesolvers/BlazeSolver.java | 86 + .../features/puzzlesolvers/BlockAbilities.java | 84 + .../puzzlesolvers/BlockPlacingFlowers.java | 44 + .../puzzlesolvers/BlockWrongTerminalClicks.java | 112 + .../features/puzzlesolvers/ChronomatronSolver.java | 114 + .../features/puzzlesolvers/ClickInOrderSolver.java | 107 + .../features/puzzlesolvers/CreeperSolver.java | 86 + .../Danker/features/puzzlesolvers/LividSolver.java | 89 + .../puzzlesolvers/SelectAllColourSolver.java | 59 + .../features/puzzlesolvers/StartsWithSolver.java | 31 + .../features/puzzlesolvers/SuperpairsSolver.java | 150 + .../features/puzzlesolvers/ThreeManSolver.java | 75 + .../features/puzzlesolvers/TicTacToeSolver.java | 135 + .../features/puzzlesolvers/TriviaSolver.java | 105 + .../puzzlesolvers/UltrasequencerSolver.java | 112 + .../Danker/features/puzzlesolvers/WaterSolver.java | 162 + src/main/java/me/Danker/gui/EditLocationsGui.java | 19 +- src/main/java/me/Danker/gui/OnlySlayerGui.java | 22 +- src/main/java/me/Danker/gui/SkillTrackerGui.java | 39 +- src/main/java/me/Danker/gui/WarningGui.java | 6 - .../java/me/Danker/gui/WarningGuiRedirect.java | 2 - .../java/me/Danker/handlers/ConfigHandler.java | 346 +- src/main/java/me/Danker/utils/Utils.java | 14 +- 63 files changed, 6268 insertions(+), 4913 deletions(-) create mode 100644 src/main/java/me/Danker/events/ChestSlotClickedEvent.java create mode 100644 src/main/java/me/Danker/events/GuiChestBackgroundDrawnEvent.java create mode 100644 src/main/java/me/Danker/events/RenderOverlay.java create mode 100644 src/main/java/me/Danker/features/AutoDisplay.java create mode 100644 src/main/java/me/Danker/features/AutoSwapToPickBlock.java create mode 100644 src/main/java/me/Danker/features/BlockWrongSlayer.java create mode 100644 src/main/java/me/Danker/features/BonzoMaskTimer.java create mode 100644 src/main/java/me/Danker/features/CakeTimer.java create mode 100644 src/main/java/me/Danker/features/DungeonTimer.java create mode 100644 src/main/java/me/Danker/features/ExpertiseLore.java create mode 100644 src/main/java/me/Danker/features/FasterMaddoxCalling.java create mode 100644 src/main/java/me/Danker/features/GoldenEnchants.java create mode 100644 src/main/java/me/Danker/features/GolemSpawningAlert.java create mode 100644 src/main/java/me/Danker/features/GpartyNotifications.java create mode 100644 src/main/java/me/Danker/features/HideTooltipsInExperiments.java create mode 100644 src/main/java/me/Danker/features/LowHealthNotifications.java create mode 100644 src/main/java/me/Danker/features/NecronNotifications.java create mode 100644 src/main/java/me/Danker/features/NoF3Coords.java create mode 100644 src/main/java/me/Danker/features/NotifySlayerSlain.java create mode 100644 src/main/java/me/Danker/features/PetColours.java create mode 100644 src/main/java/me/Danker/features/Reparty.java create mode 100644 src/main/java/me/Danker/features/Skill50Display.java create mode 100644 src/main/java/me/Danker/features/SkillTracker.java create mode 100644 src/main/java/me/Danker/features/SpamHider.java create mode 100644 src/main/java/me/Danker/features/SpiritBearAlert.java create mode 100644 src/main/java/me/Danker/features/StopSalvagingStarredItems.java create mode 100644 src/main/java/me/Danker/features/UpdateChecker.java create mode 100644 src/main/java/me/Danker/features/WatcherReadyAlert.java create mode 100644 src/main/java/me/Danker/features/loot/LootDisplay.java create mode 100644 src/main/java/me/Danker/features/loot/LootTracker.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/ArrowTerminalSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/BlazeSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/BlockAbilities.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/BlockPlacingFlowers.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/BlockWrongTerminalClicks.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/ChronomatronSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/ClickInOrderSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/CreeperSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/LividSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/SelectAllColourSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/StartsWithSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/SuperpairsSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/ThreeManSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/TicTacToeSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/TriviaSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/UltrasequencerSolver.java create mode 100644 src/main/java/me/Danker/features/puzzlesolvers/WaterSolver.java (limited to 'src') diff --git a/src/main/java/me/Danker/DankersSkyblockMod.java b/src/main/java/me/Danker/DankersSkyblockMod.java index 12a8066..38e956f 100644 --- a/src/main/java/me/Danker/DankersSkyblockMod.java +++ b/src/main/java/me/Danker/DankersSkyblockMod.java @@ -1,52 +1,43 @@ package me.Danker; -import com.google.gson.JsonObject; import me.Danker.commands.*; +import me.Danker.events.ChestSlotClickedEvent; +import me.Danker.events.GuiChestBackgroundDrawnEvent; +import me.Danker.events.RenderOverlay; +import me.Danker.features.*; +import me.Danker.features.loot.LootDisplay; +import me.Danker.features.loot.LootTracker; +import me.Danker.features.puzzlesolvers.*; import me.Danker.gui.*; -import me.Danker.handlers.*; -import me.Danker.utils.TicTacToeUtils; +import me.Danker.handlers.ConfigHandler; +import me.Danker.handlers.PacketHandler; import me.Danker.utils.Utils; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.*; +import net.minecraft.client.gui.GuiMainMenu; import net.minecraft.client.gui.inventory.GuiChest; -import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.command.ICommand; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityArmorStand; -import net.minecraft.entity.item.EntityItemFrame; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.entity.passive.EntityWolf; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.event.ClickEvent; import net.minecraft.event.ClickEvent.Action; import net.minecraft.event.HoverEvent; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; -import net.minecraft.item.Item; -import net.minecraft.item.ItemMap; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.*; -import net.minecraft.world.World; -import net.minecraft.world.storage.MapData; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.util.StringUtils; import net.minecraftforge.client.ClientCommandHandler; import net.minecraftforge.client.GuiIngameForge; -import net.minecraftforge.client.event.*; -import net.minecraftforge.client.event.sound.PlaySoundEvent; +import net.minecraftforge.client.event.ClientChatReceivedEvent; +import net.minecraftforge.client.event.GuiOpenEvent; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.player.*; -import net.minecraftforge.event.world.WorldEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Mod; @@ -54,115 +45,31 @@ import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; import net.minecraftforge.fml.common.network.FMLNetworkEvent.ClientConnectedToServerEvent; -import net.minecraftforge.fml.common.versioning.DefaultArtifactVersion; -import org.apache.commons.lang3.time.StopWatch; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; -import java.awt.*; -import java.text.NumberFormat; import java.util.List; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.Map; @Mod(modid = DankersSkyblockMod.MODID, version = DankersSkyblockMod.VERSION, clientSideOnly = true) public class DankersSkyblockMod { public static final String MODID = "Danker's Skyblock Mod"; - public static final String VERSION = "1.8.5"; - static double checkItemsNow = 0; - static double itemsChecked = 0; - public static Map t6Enchants = new HashMap<>(); - public static Pattern t6EnchantPattern = Pattern.compile(""); - static Pattern petPattern = Pattern.compile("\\[Lvl [\\d]{1,3}]"); - static boolean updateChecked = false; + public static final String VERSION = "1.8.6-beta1"; public static int titleTimer = -1; public static boolean showTitle = false; public static String titleText = ""; - public static int SKILL_TIME; - public static int skillTimer = -1; - public static boolean showSkill = false; - public static String skillText = ""; - static int tickAmount = 1; - static String lastMaddoxCommand = "/cb placeholder"; - static double lastMaddoxTime = 0; - static KeyBinding[] keyBindings = new KeyBinding[3]; + public static int tickAmount = 1; + public static KeyBinding[] keyBindings = new KeyBinding[3]; static boolean usingLabymod = false; static boolean usingOAM = false; static boolean OAMWarning = false; public static String guiToOpen = null; - static boolean foundLivid = false; - static Entity livid = null; - public static double cakeTime; - public static double nextBonzoUse = 0; public static boolean firstLaunch = false; - - public static final ResourceLocation CAKE_ICON = new ResourceLocation("dsm", "icons/cake.png"); - public static final ResourceLocation BONZO_ICON = new ResourceLocation("dsm", "icons/bonzo.png"); - - static String[] riddleSolutions = {"The reward is not in my chest!", "At least one of them is lying, and the reward is not in", - "My chest doesn't have the reward. We are all telling the truth", "My chest has the reward and I'm telling the truth", - "The reward isn't in any of our chests", "Both of them are telling the truth."}; - static BlockPos riddleChest = null; - static Map triviaSolutions = new HashMap<>(); - static String[] triviaAnswers = null; - static Entity highestBlaze = null; - static Entity lowestBlaze = null; - // Among Us colours - static final int[] CREEPER_COLOURS = {0x50EF39, 0xC51111, 0x132ED1, 0x117F2D, 0xED54BA, 0xEF7D0D, 0xF5F557, 0xD6E0F0, 0x6B2FBB, 0x39FEDC}; - static boolean drawCreeperLines = false; - static Vec3 creeperLocation = new Vec3(0, 0, 0); - static List creeperLines = new ArrayList<>(); - static boolean prevInWaterRoom = false; - static boolean inWaterRoom = false; - static String waterAnswers = null; - static AxisAlignedBB correctTicTacToeButton = null; - static Pattern startsWithTerminalPattern = Pattern.compile("[A-Z]{2,}"); - static Slot[] clickInOrderSlots = new Slot[36]; - static int lastChronomatronRound = 0; - static List chronomatronPattern = new ArrayList<>(); - static int chronomatronMouseClicks = 0; - static int lastUltraSequencerClicked = 0; - static ItemStack[] experimentTableSlots = new ItemStack[54]; - static int pickBlockBind; - static boolean pickBlockBindSwapped = false; - static String terminalColorNeeded; - static int[] terminalNumberNeeded = new int[4]; - - static double dungeonStartTime = 0; - static double bloodOpenTime = 0; - static double watcherClearTime = 0; - static double bossClearTime = 0; - static int witherDoors = 0; - static int dungeonDeaths = 0; - static int puzzleFails = 0; - - static String lastSkill = "Farming"; - public static boolean showSkillTracker; - public static StopWatch skillStopwatch = new StopWatch(); - static double farmingXP = 0; - public static double farmingXPGained = 0; - static double miningXP = 0; - public static double miningXPGained = 0; - static double combatXP = 0; - public static double combatXPGained = 0; - static double foragingXP = 0; - public static double foragingXPGained = 0; - static double fishingXP = 0; - public static double fishingXPGained = 0; - static double enchantingXP = 0; - public static double enchantingXPGained = 0; - static double alchemyXP = 0; - public static double alchemyXPGained = 0; - static double xpLeft = 0; - static double timeSinceGained = 0; public static String MAIN_COLOUR; public static String SECONDARY_COLOUR; @@ -172,112 +79,57 @@ public class DankersSkyblockMod { public static String VALUE_COLOUR; public static String SKILL_AVERAGE_COLOUR; public static String ANSWER_COLOUR; - public static String SKILL_50_COLOUR; - public static String COORDS_COLOUR; - public static String CAKE_COLOUR; - public static String SKILL_TRACKER_COLOUR; - public static String TRIVIA_WRONG_ANSWER_COLOUR; - public static String BONZO_COLOR; - public static int LOWEST_BLAZE_COLOUR; - public static int HIGHEST_BLAZE_COLOUR; - public static int PET_1_TO_9; - public static int PET_10_TO_19; - public static int PET_20_TO_29; - public static int PET_30_TO_39; - public static int PET_40_TO_49; - public static int PET_50_TO_59; - public static int PET_60_TO_69; - public static int PET_70_TO_79; - public static int PET_80_TO_89; - public static int PET_90_TO_99; - public static int PET_100; - public static int ULTRASEQUENCER_NEXT; - public static int ULTRASEQUENCER_NEXT_TO_NEXT; - public static int CHRONOMATRON_NEXT; - public static int CHRONOMATRON_NEXT_TO_NEXT; - public static int CLICK_IN_ORDER_NEXT; - public static int CLICK_IN_ORDER_NEXT_TO_NEXT; @EventHandler public void init(FMLInitializationEvent event) { MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.EVENT_BUS.register(new PacketHandler()); + MinecraftForge.EVENT_BUS.register(new ArrowTerminalSolver()); + MinecraftForge.EVENT_BUS.register(new AutoDisplay()); + MinecraftForge.EVENT_BUS.register(new AutoSwapToPickBlock()); + MinecraftForge.EVENT_BUS.register(new BlazeSolver()); + MinecraftForge.EVENT_BUS.register(new BlockAbilities()); + MinecraftForge.EVENT_BUS.register(new BlockPlacingFlowers()); + MinecraftForge.EVENT_BUS.register(new BlockWrongSlayer()); + MinecraftForge.EVENT_BUS.register(new BlockWrongTerminalClicks()); + MinecraftForge.EVENT_BUS.register(new BonzoMaskTimer()); + MinecraftForge.EVENT_BUS.register(new CakeTimer()); + MinecraftForge.EVENT_BUS.register(new ChronomatronSolver()); + MinecraftForge.EVENT_BUS.register(new ClickInOrderSolver()); + MinecraftForge.EVENT_BUS.register(new CreeperSolver()); + MinecraftForge.EVENT_BUS.register(new DungeonTimer()); + MinecraftForge.EVENT_BUS.register(new ExpertiseLore()); + MinecraftForge.EVENT_BUS.register(new FasterMaddoxCalling()); + MinecraftForge.EVENT_BUS.register(new GoldenEnchants()); + MinecraftForge.EVENT_BUS.register(new GolemSpawningAlert()); + MinecraftForge.EVENT_BUS.register(new GpartyNotifications()); + MinecraftForge.EVENT_BUS.register(new HideTooltipsInExperiments()); + MinecraftForge.EVENT_BUS.register(new LividSolver()); + MinecraftForge.EVENT_BUS.register(new LootDisplay()); + MinecraftForge.EVENT_BUS.register(new LootTracker()); + MinecraftForge.EVENT_BUS.register(new LowHealthNotifications()); + MinecraftForge.EVENT_BUS.register(new NecronNotifications()); + MinecraftForge.EVENT_BUS.register(new NoF3Coords()); + MinecraftForge.EVENT_BUS.register(new NotifySlayerSlain()); + MinecraftForge.EVENT_BUS.register(new PetColours()); + MinecraftForge.EVENT_BUS.register(new Reparty()); + MinecraftForge.EVENT_BUS.register(new SelectAllColourSolver()); + MinecraftForge.EVENT_BUS.register(new Skill50Display()); + MinecraftForge.EVENT_BUS.register(new SkillTracker()); + MinecraftForge.EVENT_BUS.register(new SpamHider()); + MinecraftForge.EVENT_BUS.register(new SpiritBearAlert()); + MinecraftForge.EVENT_BUS.register(new StartsWithSolver()); + MinecraftForge.EVENT_BUS.register(new StopSalvagingStarredItems()); + MinecraftForge.EVENT_BUS.register(new SuperpairsSolver()); + MinecraftForge.EVENT_BUS.register(new ThreeManSolver()); + MinecraftForge.EVENT_BUS.register(new TicTacToeSolver()); + MinecraftForge.EVENT_BUS.register(new TriviaSolver()); + MinecraftForge.EVENT_BUS.register(new UltrasequencerSolver()); + MinecraftForge.EVENT_BUS.register(new UpdateChecker()); + MinecraftForge.EVENT_BUS.register(new WatcherReadyAlert()); + MinecraftForge.EVENT_BUS.register(new WaterSolver()); ConfigHandler.reloadConfig(); - - // For golden enchants - t6Enchants.put("9Angler VI", "6Angler VI"); - t6Enchants.put("9Bane of Arthropods VI", "6Bane of Arthropods VI"); - t6Enchants.put("9Caster VI", "6Caster VI"); - t6Enchants.put("9Compact X", "6Compact X"); - t6Enchants.put("9Critical VI", "6Critical VI"); - t6Enchants.put("9Dragon Hunter V", "6Dragon Hunter V"); - t6Enchants.put("9Efficiency VI", "6Efficiency VI"); - t6Enchants.put("9Ender Slayer VI", "6Ender Slayer VI"); - t6Enchants.put("9Experience IV", "6Experience IV"); - t6Enchants.put("9Expertise X", "6Expertise X"); - t6Enchants.put("9Feather Falling X", "6Feather Falling X"); - t6Enchants.put("9Frail VI", "6Frail VI"); - t6Enchants.put("9Giant Killer VI", "6Giant Killer VI"); - t6Enchants.put("9Growth VI", "6Growth VI"); - t6Enchants.put("9Infinite Quiver X", "6Infinite Quiver X"); - t6Enchants.put("9Lethality VI", "6Lethality VI"); - t6Enchants.put("9Life Steal IV", "6Life Steal IV"); - t6Enchants.put("9Looting IV", "6Looting IV"); - t6Enchants.put("9Luck VI", "6Luck VI"); - t6Enchants.put("9Luck of the Sea VI", "6Luck of the Sea VI"); - t6Enchants.put("9Lure VI", "6Lure VI"); - t6Enchants.put("9Magnet VI", "6Magnet VI"); - t6Enchants.put("9Overload V", "6Overload V"); - t6Enchants.put("9Power VI", "6Power VI"); - t6Enchants.put("9Protection VI", "6Protection VI"); - t6Enchants.put("9Scavenger IV", "6Scavenger IV"); - t6Enchants.put("9Scavenger V", "6Scavenger V"); - t6Enchants.put("9Sharpness VI", "6Sharpness VI"); - t6Enchants.put("9Smite VI", "6Smite VI"); - t6Enchants.put("9Spiked Hook VI", "6Spiked Hook VI"); - t6Enchants.put("9Thunderlord VI", "6Thunderlord VI"); - t6Enchants.put("9Vampirism VI", "6Vampirism VI"); - - triviaSolutions.put("What is the status of The Watcher?", new String[]{"Stalker"}); - triviaSolutions.put("What is the status of Bonzo?", new String[]{"New Necromancer"}); - triviaSolutions.put("What is the status of Scarf?", new String[]{"Apprentice Necromancer"}); - triviaSolutions.put("What is the status of The Professor?", new String[]{"Professor"}); - triviaSolutions.put("What is the status of Thorn?", new String[]{"Shaman Necromancer"}); - triviaSolutions.put("What is the status of Livid?", new String[]{"Master Necromancer"}); - triviaSolutions.put("What is the status of Sadan?", new String[]{"Necromancer Lord"}); - triviaSolutions.put("What is the status of Maxor?", new String[]{"Young Wither"}); - triviaSolutions.put("What is the status of Goldor?", new String[]{"Wither Soldier"}); - triviaSolutions.put("What is the status of Storm?", new String[]{"Elementalist"}); - triviaSolutions.put("What is the status of Necron?", new String[]{"Wither Lord"}); - triviaSolutions.put("How many total Fairy Souls are there?", new String[]{"220 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Spider's Den?", new String[]{"17 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in The End?", new String[]{"12 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in The Barn?", new String[]{"7 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Mushroom Desert?", new String[]{"8 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Blazing Fortress?", new String[]{"19 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in The Park?", new String[]{"11 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Jerry's Workshop?", new String[]{"5 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Hub?", new String[]{"79 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in The Hub?", new String[]{"79 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Deep Caverns?", new String[]{"21 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Gold Mine?", new String[]{"12 Fairy Souls"}); - triviaSolutions.put("How many Fairy Souls are there in Dungeon Hub?", new String[]{"7 Fairy Souls"}); - triviaSolutions.put("Which brother is on the Spider's Den?", new String[]{"Rick"}); - triviaSolutions.put("What is the name of Rick's brother?", new String[]{"Pat"}); - triviaSolutions.put("What is the name of the Painter in the Hub?", new String[]{"Marco"}); - triviaSolutions.put("What is the name of the person that upgrades pets?", new String[]{"Kat"}); - triviaSolutions.put("What is the name of the lady of the Nether?", new String[]{"Elle"}); - triviaSolutions.put("Which villager in the Village gives you a Rogue Sword?", new String[]{"Jamie"}); - triviaSolutions.put("How many unique minions are there?", new String[]{"53 Minions"}); - triviaSolutions.put("Which of these enemies does not spawn in the Spider's Den?", new String[]{"Zombie Spider", "Cave Spider", "Wither Skeleton", - "Dashing Spooder", "Broodfather", "Night Spider"}); - triviaSolutions.put("Which of these monsters only spawns at night?", new String[]{"Zombie Villager", "Ghast"}); - triviaSolutions.put("Which of these is not a dragon in The End?", new String[]{"Zoomer Dragon", "Weak Dragon", "Stonk Dragon", "Holy Dragon", "Boomer Dragon", - "Booger Dragon", "Older Dragon", "Elder Dragon", "Stable Dragon", "Professor Dragon"}); - - String patternString = "(" + String.join("|", t6Enchants.keySet()) + ")"; - t6EnchantPattern = Pattern.compile(patternString); + GoldenEnchants.init(); keyBindings[0] = new KeyBinding("Open Maddox Menu", Keyboard.KEY_M, "Danker's Skyblock Mod"); keyBindings[1] = new KeyBinding("Regular Ability", Keyboard.KEY_NUMPAD4, "Danker's Skyblock Mod"); @@ -319,9 +171,10 @@ public class DankersSkyblockMod { @EventHandler public void postInit(final FMLPostInitializationEvent event) { Package[] packages = Package.getPackages(); - for(Package p : packages){ - if(p.getName().startsWith("com.spiderfrog.gadgets") || p.getName().startsWith("com.spiderfrog.oldanimations")){ + for (Package p : packages){ + if (p.getName().startsWith("com.spiderfrog.gadgets") || p.getName().startsWith("com.spiderfrog.oldanimations")){ usingOAM = true; + break; } } System.out.println("OAM detection: " + usingOAM); @@ -329,10 +182,10 @@ public class DankersSkyblockMod { usingLabymod = Loader.isModLoaded("labymod"); System.out.println("LabyMod detection: " + usingLabymod); - if(!ClientCommandHandler.instance.getCommands().containsKey("reparty")) { + if (!ClientCommandHandler.instance.getCommands().containsKey("reparty")) { ClientCommandHandler.instance.registerCommand(new RepartyCommand()); } else if (ConfigHandler.getBoolean("commands", "reparty")) { - for(Map.Entry entry : ClientCommandHandler.instance.getCommands().entrySet()) { + for (Map.Entry entry : ClientCommandHandler.instance.getCommands().entrySet()) { if (entry.getKey().equals("reparty") || entry.getKey().equals("rp")) { entry.setValue(new RepartyCommand()); } @@ -342,19 +195,15 @@ public class DankersSkyblockMod { } @SubscribeEvent - public void onGuiOpenEvent(GuiOpenEvent event){ - if(event.gui instanceof GuiMainMenu && usingOAM && !OAMWarning){ - if(!(event.gui instanceof WarningGui)){ - event.gui = new WarningGuiRedirect(new WarningGui()); - OAMWarning = true; - } + public void onGuiOpenEvent(GuiOpenEvent event) { + if (event.gui instanceof GuiMainMenu && usingOAM && !OAMWarning) { + event.gui = new WarningGuiRedirect(new WarningGui()); + OAMWarning = true; } } - // Update checker @SubscribeEvent public void onJoin(EntityJoinWorldEvent event) { - if (firstLaunch) { firstLaunch = false; ConfigHandler.writeBooleanConfig("misc", "firstLaunch", false); @@ -385,1133 +234,17 @@ public class DankersSkyblockMod { } }).start(); } - - if (!updateChecked) { - updateChecked = true; - - // MULTI THREAD DRIFTING - new Thread(() -> { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - - System.out.println("Checking for updates..."); - JsonObject latestRelease = APIHandler.getResponse("https://api.github.com/repos/bowser0000/SkyblockMod/releases/latest"); - - String latestTag = latestRelease.get("tag_name").getAsString(); - DefaultArtifactVersion currentVersion = new DefaultArtifactVersion(VERSION); - DefaultArtifactVersion latestVersion = new DefaultArtifactVersion(latestTag.substring(1)); - - if (currentVersion.compareTo(latestVersion) < 0) { - String releaseURL = latestRelease.get("html_url").getAsString(); - - ChatComponentText update = new ChatComponentText(EnumChatFormatting.GREEN + "" + EnumChatFormatting.BOLD + " [UPDATE] "); - update.setChatStyle(update.getChatStyle().setChatClickEvent(new ClickEvent(Action.OPEN_URL, releaseURL))); - - try { - Thread.sleep(2000); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - player.addChatMessage(new ChatComponentText(ERROR_COLOUR + MODID + " is outdated. Please update to " + latestTag + ".\n").appendSibling(update)); - } - }).start(); - } } @SubscribeEvent - public void onWorldChange(WorldEvent.Load event) { - riddleChest = null; - foundLivid = false; - livid = null; - lowestBlaze = null; - highestBlaze = null; - nextBonzoUse = 0; - } - - // It randomly broke, so I had to make it the highest priority - @SubscribeEvent(priority = EventPriority.HIGHEST) public void onChat(ClientChatReceivedEvent event) { String message = StringUtils.stripControlCodes(event.message.getUnformattedText()); - + if (message.startsWith("Your new API key is ") && Utils.isOnHypixel()) { String apiKey = event.message.getSiblings().get(0).getChatStyle().getChatClickEvent().getValue(); ConfigHandler.writeStringConfig("api", "APIKey", apiKey); Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentText(DankersSkyblockMod.MAIN_COLOUR + "Set API key to " + DankersSkyblockMod.SECONDARY_COLOUR + apiKey)); } - - // Reparty command - // Getting party - if (RepartyCommand.gettingParty) { - if (message.contains("-----")) { - switch(RepartyCommand.Delimiter) { - case 0: - System.out.println("Get Party Delimiter Cancelled"); - RepartyCommand.Delimiter++; - event.setCanceled(true); - return; - case 1: - System.out.println("Done querying party"); - RepartyCommand.gettingParty = false; - RepartyCommand.Delimiter = 0; - event.setCanceled(true); - return; - } - }else if (message.startsWith("Party M") || message.startsWith("Party Leader")){ - EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; - - Pattern party_start_pattern = Pattern.compile("^Party Members \\((\\d+)\\)$"); - Pattern leader_pattern = Pattern.compile("^Party Leader: (?:\\[.+?] )?(\\w+) ●$"); - Pattern members_pattern = Pattern.compile(" (?:\\[.+?] )?(\\w+) ●"); - Matcher party_start = party_start_pattern.matcher(message); - Matcher leader = leader_pattern.matcher(message); - Matcher members = members_pattern.matcher(message); - - if (party_start.matches() && Integer.parseInt(party_start.group(1)) == 1) { - player.addChatMessage(new ChatComponentText(DankersSkyblockMod.ERROR_COLOUR + "You cannot reparty yourself.")); - RepartyCommand.partyThread.interrupt(); - } else if (leader.matches() && !(leader.group(1).equals(player.getName()))) { - player.addChatMessage(new ChatComponentText(DankersSkyblockMod.ERROR_COLOUR + "You are not party leader.")); - RepartyCommand.partyThread.interrupt(); - } else { - while (members.find()) { - String partyMember = members.group(1); -