/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * RespawnPlayerDialog.java * * Created on Apr 18, 2011, 12:48:57 PM */ package org.pepsoft.worldpainter.tools; import org.pepsoft.util.DesktopUtils; import org.pepsoft.util.FileUtils; import org.pepsoft.worldpainter.Configuration; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileFilter; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; /** * * @author pepijn */ public class RespawnPlayerDialog extends javax.swing.JDialog { /** Creates new form RespawnPlayerDialog */ public RespawnPlayerDialog(java.awt.Frame parent) { super(parent, true); initComponents(); jTextField1.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { setControlStates(); } public void removeUpdate(DocumentEvent e) { setControlStates(); } public void changedUpdate(DocumentEvent e) { setControlStates(); } }); ActionMap actionMap = rootPane.getActionMap(); actionMap.put("cancel", new AbstractAction("cancel") { public void actionPerformed(ActionEvent e) { dispose(); } private static final long serialVersionUID = 1L; }); InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); setLocationRelativeTo(parent); } private void selectFile() { File mySavesDir; Configuration config = Configuration.getInstance(); if ((config != null) && (config.getSavesDirectory() != null)) { mySavesDir = config.getSavesDirectory(); } else { mySavesDir = DesktopUtils.getDocumentsFolder(); } File levelDatFile = FileUtils.selectFileForOpen(this, "Select Minecraft map level.dat file", mySavesDir, new FileFilter() { @Override public boolean accept(File f) { return f.isDirectory() || f.getName().equalsIgnoreCase("level.dat"); } @Override public String getDescription() { return "Minecraft level.dat files"; } }); if (levelDatFile != null) { jTextField1.setText(levelDatFile.getAbsolutePath()); } } private void respawn() { try { File file = new File(jTextField1.getText()); RespawnPlayer.respawnPlayer(file); Configuration config = Configuration.getInstance(); if (config != null) { config.setSavesDirectory(file.getParentFile().getParentFile()); } JOptionPane.showMessageDialog(this, "Player respawned"); dispose(); } catch (IOException e) { throw new RuntimeException("I/O error while reading or writing level.dat", e); } } private void setControlStates() { File file = new File(jTextField1.getText()); jButton2.setEnabled(file.isFile() && file.getName().equalsIgnoreCase("level.dat")); } /** 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() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Respawn Player"); jLabel1.setText("Use this tool to respawn the player in a single player"); jLabel2.setText("world where respawn after death is broken."); jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() | java.awt.Font.BOLD)); jLabel3.setText("Make sure Minecraft is not running!"); jLabel4.setText("Then, select the level.dat file of the world, and press"); jLabel5.setText("the button to respawn the player:"); jButton1.setText("..."); jButton1.addActionListener(this::jButton1ActionPerformed); jButton2.setText("Respawn"); jButton2.setEnabled(false); jButton2.addActionListener(this::jButton2ActionPerformed); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel1) .addComponent(jLabel2) .addComponent(jLabel3) .addComponent(jLabel4) .addComponent(jLabel5) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1)) .addComponent(jButton2, javax.swing.GroupLayout.Alignment.TRAILING)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel2) .addGap(18, 18, 18) .addComponent(jLabel3) .addGap(18, 18, 18) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel5) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jButton1)) .addGap(18, 18, 18) .addComponent(jButton2) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed respawn(); }//GEN-LAST:event_jButton2ActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed selectFile(); }//GEN-LAST:event_jButton1ActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JTextField jTextField1; // End of variables declaration//GEN-END:variables }