net.ytbolg.mcxa.ForgeCheck.java Source code

Java tutorial

Introduction

Here is the source code for net.ytbolg.mcxa.ForgeCheck.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package net.ytbolg.mcxa;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.ListSelectionModel;
import static javax.swing.ListSelectionModel.SINGLE_SELECTION;
import javax.swing.table.DefaultTableModel;
import net.ytbolg.mcxa.Launcher.GameInfo;
import static net.ytbolg.mcxa.Launcher.GameInfo.tpf;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 *
 * @author Ytong
 */
public class ForgeCheck extends javax.swing.JFrame {

    /**
     * Creates new form ForgeCheck
     */
    public ForgeCheck() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable2 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jProgressBar1 = new javax.swing.JProgressBar();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Forge");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }

            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });

        jTable1.setFont(new java.awt.Font("", 0, 12)); // NOI18N
        jTable1.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {

        }, new String[] {

        }));
        jTable1.getTableHeader().setReorderingAllowed(false);
        jScrollPane3.setViewportView(jTable1);

        jTabbedPane1.addTab("", jScrollPane3);

        jTable2.setFont(new java.awt.Font("", 0, 12)); // NOI18N
        jTable2.setModel(new javax.swing.table.DefaultTableModel(new Object[][] {

        }, new String[] {

        }));
        jTable2.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(jTable2);

        jTabbedPane1.addTab("", jScrollPane1);

        jButton1.setFont(new java.awt.Font("", 0, 12)); // NOI18N
        jButton1.setText("");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jProgressBar1.setFont(new java.awt.Font("", 0, 12)); // NOI18N

        jLabel1.setFont(new java.awt.Font("", 0, 12)); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
                .addGroup(layout.createSequentialGroup().addContainerGap()
                        .addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 305,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jProgressBar1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addContainerGap()));

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        DefaultTableModel newvm = (DefaultTableModel) jTable1.getModel();
        DefaultTableModel oldvm = (DefaultTableModel) jTable2.getModel();

        String mcver = "";
        String ver = "";
        System.out.println(jTabbedPane1.getSelectedIndex());
        switch (jTabbedPane1.getSelectedIndex()) {
        case 0: {
            //            System.out.println(jTable1.getValueAt(jTable1.getSelectedRow(), 0));
            //   System.out.println(jTable2.getSelectedRow());
            ver = newvm.getValueAt(jTable1.getSelectedRow(), 0).toString();
            mcver = newvm.getValueAt(jTable1.getSelectedRow(), 1).toString();
            System.out.println(ver + mcver);
            break;
            //    System.out.println(ver + mcver);
        }
        case 1: {
            ver = oldvm.getValueAt(jTable2.getSelectedRow(), 0).toString();
            mcver = oldvm.getValueAt(jTable2.getSelectedRow(), 1).toString();
            System.out.println(ver + mcver);
            break;
            // System.out.println(ver + mcver);
        }

        }
        DownloadForge.version = mcver;
        DownloadForge.forgeversion = ver;
        DownloadForge.j = jProgressBar1;
        DownloadForge.l = jLabel1;
        new Thread(new DownloadForge()).start(); // TODO add your handling code here:
    }//GEN-LAST:event_jButton1ActionPerformed

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated

    }//GEN-LAST:event_formWindowActivated

    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        jTable1.setColumnSelectionAllowed(false);
        jTable2.setColumnSelectionAllowed(false);

        jTable1.setRowSelectionAllowed(true);
        jTable2.setRowSelectionAllowed(true);

        setTitle(Lang.getLang("Forge_Window_Loading"));
        jButton1.setText(Lang.getLang("Forge_Button_Download"));
        jTabbedPane1.setTitleAt(0, Lang.getLang("Forge_TabledPanel_OlderVersion"));
        jTabbedPane1.setTitleAt(1, Lang.getLang("Forge_TabledPanel_NewerVersion"));

        DefaultTableModel newvm = (DefaultTableModel) jTable1.getModel();
        DefaultTableModel oldvm = (DefaultTableModel) jTable2.getModel();
        newvm.addColumn(Lang.getLang("Forge_Table_ForgeVer"));
        newvm.addColumn(Lang.getLang("Forge_Table_McVer"));
        newvm.addColumn(Lang.getLang("Forge_Table_RelTime"));
        oldvm.addColumn(Lang.getLang("Forge_Table_ForgeVer"));
        oldvm.addColumn(Lang.getLang("Forge_Table_McVer"));
        oldvm.addColumn(Lang.getLang("Forge_Table_RelTime"));
        jTable1.setSelectionMode(SINGLE_SELECTION);
        jTable2.setSelectionMode(SINGLE_SELECTION);

        JSONArray newv = null;
        try {
            newv = new JSONArray(downloadFile("http://bmclapi.bangbang93.com/forge/versionlist"));
        } catch (JSONException ex) {
            Logger.getLogger(ForgeCheck.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ForgeCheck.class.getName()).log(Level.SEVERE, null, ex);
        }
        JSONArray oldv = null;
        try {
            oldv = new JSONArray(downloadFile("http://bmclapi.bangbang93.com/forge/legacylist"));
        } catch (JSONException ex) {
            Logger.getLogger(ForgeCheck.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ForgeCheck.class.getName()).log(Level.SEVERE, null, ex);
        }
        for (int i = 0; i < newv.length(); i++) {
            try {
                JSONObject jo = newv.getJSONObject(i);
                newvm.addRow(new Object[] { jo.get("ver"), jo.get("mcver"), jo.get("releasetime") });
            } catch (JSONException ex) {
                //    Logger.getogger(ForgeDownloader.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        for (int i = 0; i < oldv.length(); i++) {
            try {
                JSONObject jo = oldv.getJSONObject(i);
                oldvm.addRow(new Object[] { jo.get("ver"), jo.get("mcver"), jo.get("releasetime") });
            } catch (JSONException ex) {
                //    Logger.getogger(ForgeDownloader.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        setTitle(Lang.getLang("Forge_Title"));// TODO add your handling code here:        // TODO add your handling code here:
    }//GEN-LAST:event_formWindowOpened

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JProgressBar jProgressBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTable jTable2;

    // End of variables declaration//GEN-END:variables
    public String downloadFile(String remoteFilePath) throws IOException {

        URL urlfile = null;
        HttpURLConnection httpUrl = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        File f = new File(GameInfo.Rundir + GameInfo.tpf + "temp.tmp");
        File xxxx = new File(f.getParent());
        xxxx.mkdirs();

        //      f.mkdirs();
        try {
            urlfile = new URL(remoteFilePath);
            httpUrl = (HttpURLConnection) urlfile.openConnection();
            httpUrl.connect();
            bis = new BufferedInputStream(httpUrl.getInputStream());
            bos = new BufferedOutputStream(new FileOutputStream(f));
            int len = 2048;
            byte[] b = new byte[len];
            while ((len = bis.read(b)) != -1) {
                bos.write(b, 0, len);
            }
            bos.flush();
            bis.close();
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        String x = ReadFile(GameInfo.Rundir + GameInfo.tpf + "temp.tmp");
        f.delete();
        return x;
    }

    static String ReadFile(String path) throws FileNotFoundException, IOException {

        File file = new File(path);
        FileReader r = new FileReader(file);
        char c[] = new char[(int) file.length()];
        r.read(c);

        r.close();
        return String.valueOf(c);
    }
}

class DownloadForge implements Runnable {

    public static String version = "";
    public static JProgressBar j;
    public static JLabel l;
    public static String forgeversion = "";

    //@Override
    @Override
    public void run() {
        System.out.println(Lang.getLang("Forge_StartDown") + "http://bmclapi.bangbang93.com/forge/getforge" + "/"
                + version + "/" + forgeversion);
        downloadFile("http://bmclapi.bangbang93.com/forge/getforge" + "/" + version + "/" + forgeversion,
                GameInfo.Rundir + tpf + "forgetmp.jar");
        //   downloadFile("http://bmclapi.bangbang93.com/versions/" + version + "/" + version + ".json", GameInfo.GameDir + tpf + "versions" + tpf + version + tpf + version + ".json");
        JOptionPane.showMessageDialog(null, Lang.getLang("Forge_DownSucc"));
        j.setValue(0);
        l.setText("");
        JOptionPane.showMessageDialog(null, Lang.getLang("Forge_SetupForge"));
        Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
        //  String vc = refContent.trim();  
        //  StringSelection ss = new StringSelection(vc);  

        StringSelection selection = new StringSelection(GameInfo.GameDir);//?step1:?Transferable???StringSelectionTransferable?
        clipBoard.setContents(selection, null);//?step2.?Owner
        try {
            Runtime.getRuntime().exec("java -jar " + GameInfo.Rundir + tpf + "forgetmp.jar");
            //  throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        } catch (IOException ex) {
            Logger.getLogger(DownloadForge.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    void downloadFile(String remoteFilePath, String localFilePath) {
        URL urlfile = null;
        HttpURLConnection httpUrl = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        File f = new File(localFilePath);
        File xxxx = new File(f.getParent());
        xxxx.mkdirs();

        //      f.mkdirs();
        try {
            urlfile = new URL(remoteFilePath);
            httpUrl = (HttpURLConnection) urlfile.openConnection();
            httpUrl.connect();
            j.setMaximum(httpUrl.getContentLength());
            j.setValue(0);
            bis = new BufferedInputStream(httpUrl.getInputStream());
            bos = new BufferedOutputStream(new FileOutputStream(f));
            int len = 2048;
            byte[] b = new byte[len];
            int i = 0;
            while ((len = bis.read(b)) != -1) {
                i = i + len;
                j.setValue(i);
                l.setText(i / 1024 + "/" + (httpUrl.getContentLength() / 1024) + "KB");
                bos.write(b, 0, len);
            }
            bos.flush();
            bis.close();
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}