mirror of
https://github.com/TotalFreedomMC/ZeroTelnetClient.git
synced 2024-12-23 00:35:22 +00:00
Added right click player list popup + actions.
This commit is contained in:
parent
ba202365c7
commit
e2eaacd1e0
4 changed files with 250 additions and 24 deletions
|
@ -21,13 +21,15 @@ public class BTC_ConnectionManager
|
||||||
private int port;
|
private int port;
|
||||||
private boolean canDoDisconnect = false;
|
private boolean canDoDisconnect = false;
|
||||||
private String loginName;
|
private String loginName;
|
||||||
|
private final ByteArrayOutputStream consoleBuffer = new ByteArrayOutputStream();
|
||||||
|
private final PrintStream consoleStream = new PrintStream(consoleBuffer);
|
||||||
|
|
||||||
public BTC_ConnectionManager()
|
public BTC_ConnectionManager()
|
||||||
{
|
{
|
||||||
this.telnetClient = new TelnetClient();
|
this.telnetClient = new TelnetClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void triggerConnect(String hostname, int port)
|
public void triggerConnect(final String hostname, final int port)
|
||||||
{
|
{
|
||||||
final BTC_MainPanel btc = BukkitTelnetClient.mainPanel;
|
final BTC_MainPanel btc = BukkitTelnetClient.mainPanel;
|
||||||
|
|
||||||
|
@ -45,7 +47,7 @@ public class BTC_ConnectionManager
|
||||||
startConnectThread();
|
startConnectThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void triggerConnect(String hostnameAndPort)
|
public void triggerConnect(final String hostnameAndPort)
|
||||||
{
|
{
|
||||||
final String[] parts = StringUtils.split(hostnameAndPort, ":");
|
final String[] parts = StringUtils.split(hostnameAndPort, ":");
|
||||||
|
|
||||||
|
@ -103,15 +105,12 @@ public class BTC_ConnectionManager
|
||||||
System.out.println("\nDisconnected.");
|
System.out.println("\nDisconnected.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ByteArrayOutputStream consoleBuffer = new ByteArrayOutputStream();
|
public void sendCommand(final String text)
|
||||||
private final PrintStream consoleStream = new PrintStream(consoleBuffer);
|
|
||||||
|
|
||||||
public void sendCommand(String text)
|
|
||||||
{
|
{
|
||||||
sendCommand(text, true);
|
sendCommand(text, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendCommand(String text, boolean verbose)
|
public void sendCommand(final String text, final boolean verbose)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -169,7 +168,6 @@ public class BTC_ConnectionManager
|
||||||
|
|
||||||
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(telnetClient.getInputStream())))
|
try (final BufferedReader reader = new BufferedReader(new InputStreamReader(telnetClient.getInputStream())))
|
||||||
{
|
{
|
||||||
|
|
||||||
int read = 0;
|
int read = 0;
|
||||||
while (read != -1)
|
while (read != -1)
|
||||||
{
|
{
|
||||||
|
@ -198,7 +196,7 @@ public class BTC_ConnectionManager
|
||||||
{
|
{
|
||||||
BTC_ConnectionManager.this.loginName = _loginName;
|
BTC_ConnectionManager.this.loginName = _loginName;
|
||||||
updateTitle(true);
|
updateTitle(true);
|
||||||
sendDelayedCommand("telnet.enhanced", false, 500);
|
sendDelayedCommand("telnet.enhanced", false, 100);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -247,7 +245,7 @@ public class BTC_ConnectionManager
|
||||||
this.connectThread.start();
|
this.connectThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void updateTitle(boolean isConnected)
|
public final void updateTitle(final boolean isConnected)
|
||||||
{
|
{
|
||||||
final BTC_MainPanel mainPanel = BukkitTelnetClient.mainPanel;
|
final BTC_MainPanel mainPanel = BukkitTelnetClient.mainPanel;
|
||||||
if (mainPanel == null)
|
if (mainPanel == null)
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JSplitPane" name="splitPane">
|
<Container class="javax.swing.JSplitPane" name="splitPane">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="dividerLocation" type="int" value="650"/>
|
<Property name="dividerLocation" type="int" value="700"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="txtCommand" max="32767" attributes="0"/>
|
<Component id="txtCommand" max="32767" attributes="0"/>
|
||||||
<Component id="txtServer" pref="378" max="32767" attributes="0"/>
|
<Component id="txtServer" pref="428" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
|
@ -215,9 +215,9 @@
|
||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane2" pref="346" max="32767" attributes="0"/>
|
<Component id="jScrollPane2" pref="296" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
@ -225,7 +225,7 @@
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane2" pref="395" max="32767" attributes="0"/>
|
<Component id="jScrollPane2" pref="395" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
|
@ -2,8 +2,12 @@ package me.StevenLawson.BukkitTelnetClient;
|
||||||
|
|
||||||
import java.awt.EventQueue;
|
import java.awt.EventQueue;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.KeyAdapter;
|
import java.awt.event.KeyAdapter;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -16,6 +20,9 @@ import java.util.LinkedList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
|
import javax.swing.JPopupMenu;
|
||||||
|
import javax.swing.JTable;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.table.DefaultTableModel;
|
import javax.swing.table.DefaultTableModel;
|
||||||
import javax.swing.text.BadLocationException;
|
import javax.swing.text.BadLocationException;
|
||||||
|
@ -57,10 +64,135 @@ public class BTC_MainPanel extends javax.swing.JFrame
|
||||||
|
|
||||||
this.splitPane.setResizeWeight(1.0);
|
this.splitPane.setResizeWeight(1.0);
|
||||||
|
|
||||||
|
setupTablePopup();
|
||||||
|
|
||||||
this.setLocationRelativeTo(null);
|
this.setLocationRelativeTo(null);
|
||||||
this.setVisible(true);
|
this.setVisible(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final class CommandMenuItem extends JMenuItem
|
||||||
|
{
|
||||||
|
private final ServerCommand command;
|
||||||
|
private final BTC_PlayerListDecoder.PlayerInfo player;
|
||||||
|
|
||||||
|
public CommandMenuItem(String text, ServerCommand command, BTC_PlayerListDecoder.PlayerInfo player)
|
||||||
|
{
|
||||||
|
super(text);
|
||||||
|
this.command = command;
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerCommand getCommand()
|
||||||
|
{
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BTC_PlayerListDecoder.PlayerInfo getPlayer()
|
||||||
|
{
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum ServerCommand
|
||||||
|
{
|
||||||
|
BAN("Ban", "glist ban %s"),
|
||||||
|
MUTE("Toggle Mute", "mute %s"),
|
||||||
|
KICK("Kick", "tempban %s 10s Kicked"),
|
||||||
|
TEMPBAN("Tempban 5m", "tempban %s 5m"),
|
||||||
|
SMITE("Smite", "smite %s"),
|
||||||
|
OP("Op", "op %s"),
|
||||||
|
DEOP("Deop", "deop %s"),
|
||||||
|
GTFO("GTFO", "gtfo %s");
|
||||||
|
|
||||||
|
private final String commandName;
|
||||||
|
private final String commandFormat;
|
||||||
|
|
||||||
|
private ServerCommand(String commandName, String commandFormat)
|
||||||
|
{
|
||||||
|
this.commandName = commandName;
|
||||||
|
this.commandFormat = commandFormat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommandName()
|
||||||
|
{
|
||||||
|
return commandName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommandFormat()
|
||||||
|
{
|
||||||
|
return commandFormat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setupTablePopup()
|
||||||
|
{
|
||||||
|
this.tblPlayers.addMouseListener(new MouseAdapter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void mouseReleased(final MouseEvent mouseEvent)
|
||||||
|
{
|
||||||
|
final JTable table = BTC_MainPanel.this.tblPlayers;
|
||||||
|
|
||||||
|
final int r = table.rowAtPoint(mouseEvent.getPoint());
|
||||||
|
if (r >= 0 && r < table.getRowCount())
|
||||||
|
{
|
||||||
|
table.setRowSelectionInterval(r, r);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
table.clearSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
final int rowindex = table.getSelectedRow();
|
||||||
|
if (rowindex < 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (mouseEvent.isPopupTrigger() && mouseEvent.getComponent() instanceof JTable)
|
||||||
|
{
|
||||||
|
final BTC_PlayerListDecoder.PlayerInfo player = getSelectedPlayer();
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
final JPopupMenu popup = new JPopupMenu(player.getName());
|
||||||
|
|
||||||
|
final JMenuItem header = new JMenuItem("Apply action to " + player.getName() + ":");
|
||||||
|
header.setEnabled(false);
|
||||||
|
popup.add(header);
|
||||||
|
|
||||||
|
popup.addSeparator();
|
||||||
|
|
||||||
|
final ActionListener popupAction = new ActionListener()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent actionEvent)
|
||||||
|
{
|
||||||
|
Object _source = actionEvent.getSource();
|
||||||
|
if (_source instanceof CommandMenuItem)
|
||||||
|
{
|
||||||
|
final CommandMenuItem source = (CommandMenuItem) _source;
|
||||||
|
final BTC_PlayerListDecoder.PlayerInfo _player = source.getPlayer();
|
||||||
|
final ServerCommand _command = source.getCommand();
|
||||||
|
final String output = String.format(_command.getCommandFormat(), _player.getName());
|
||||||
|
|
||||||
|
BTC_MainPanel.this.getConnectionManager().sendDelayedCommand(output, true, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (final ServerCommand command : ServerCommand.values())
|
||||||
|
{
|
||||||
|
final CommandMenuItem item = new CommandMenuItem(command.getCommandName(), command, player);
|
||||||
|
item.addActionListener(popupAction);
|
||||||
|
popup.add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
popup.show(mouseEvent.getComponent(), mouseEvent.getX(), mouseEvent.getY());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public final void updateTextPane(final String text)
|
public final void updateTextPane(final String text)
|
||||||
{
|
{
|
||||||
SwingUtilities.invokeLater(new Runnable()
|
SwingUtilities.invokeLater(new Runnable()
|
||||||
|
@ -91,6 +223,62 @@ public class BTC_MainPanel extends javax.swing.JFrame
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BTC_PlayerListDecoder.PlayerInfo getSelectedPlayer()
|
||||||
|
{
|
||||||
|
String name = null;
|
||||||
|
String ip = null;
|
||||||
|
String displayName = null;
|
||||||
|
|
||||||
|
final JTable table = BTC_MainPanel.this.tblPlayers;
|
||||||
|
final DefaultTableModel model = (DefaultTableModel) table.getModel();
|
||||||
|
|
||||||
|
int selectedRow = table.getSelectedRow();
|
||||||
|
if (selectedRow < 0)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int col = 0; col <= 2; col++)
|
||||||
|
{
|
||||||
|
int modelRow = table.convertRowIndexToModel(selectedRow);
|
||||||
|
int modelCol = table.convertColumnIndexToModel(col);
|
||||||
|
|
||||||
|
String colName = model.getColumnName(modelCol);
|
||||||
|
Object value = model.getValueAt(modelRow, modelCol);
|
||||||
|
|
||||||
|
if (null != colName)
|
||||||
|
{
|
||||||
|
switch (colName)
|
||||||
|
{
|
||||||
|
case "Name":
|
||||||
|
{
|
||||||
|
name = value.toString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "IP":
|
||||||
|
{
|
||||||
|
ip = value.toString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "Display Name":
|
||||||
|
{
|
||||||
|
displayName = value.toString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name != null && ip != null & displayName != null)
|
||||||
|
{
|
||||||
|
return new BTC_PlayerListDecoder.PlayerInfo(name, ip, displayName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public final void updatePlayerList(final Map<String, BTC_PlayerListDecoder.PlayerInfo> playerList)
|
public final void updatePlayerList(final Map<String, BTC_PlayerListDecoder.PlayerInfo> playerList)
|
||||||
{
|
{
|
||||||
EventQueue.invokeLater(new Runnable()
|
EventQueue.invokeLater(new Runnable()
|
||||||
|
@ -98,7 +286,8 @@ public class BTC_MainPanel extends javax.swing.JFrame
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
final DefaultTableModel model = (DefaultTableModel) BTC_MainPanel.this.tblPlayers.getModel();
|
final JTable table = BTC_MainPanel.this.tblPlayers;
|
||||||
|
final DefaultTableModel model = (DefaultTableModel) table.getModel();
|
||||||
|
|
||||||
model.setRowCount(0);
|
model.setRowCount(0);
|
||||||
|
|
||||||
|
@ -219,7 +408,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
|
||||||
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||||
setTitle("BukkitTelnetClient");
|
setTitle("BukkitTelnetClient");
|
||||||
|
|
||||||
splitPane.setDividerLocation(650);
|
splitPane.setDividerLocation(700);
|
||||||
|
|
||||||
mainOutput.setEditable(false);
|
mainOutput.setEditable(false);
|
||||||
mainOutput.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
|
mainOutput.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
|
||||||
|
@ -294,7 +483,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(txtCommand)
|
.addComponent(txtCommand)
|
||||||
.addComponent(txtServer, 0, 378, Short.MAX_VALUE))
|
.addComponent(txtServer, 0, 428, Short.MAX_VALUE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addComponent(btnConnect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(btnConnect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
@ -372,7 +561,7 @@ public class BTC_MainPanel extends javax.swing.JFrame
|
||||||
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel2Layout.createSequentialGroup()
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 346, Short.MAX_VALUE)
|
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 296, Short.MAX_VALUE)
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
jPanel2Layout.setVerticalGroup(
|
jPanel2Layout.setVerticalGroup(
|
||||||
|
|
|
@ -5,6 +5,8 @@ import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
import org.apache.commons.lang3.builder.EqualsBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
@ -73,20 +75,57 @@ public class BTC_PlayerListDecoder
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getIp()
|
|
||||||
{
|
|
||||||
return ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName()
|
public String getName()
|
||||||
{
|
{
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getIp()
|
||||||
|
{
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
public String getDisplayName()
|
public String getDisplayName()
|
||||||
{
|
{
|
||||||
return displayName;
|
return displayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
return new HashCodeBuilder(17, 31).
|
||||||
|
append(name).
|
||||||
|
append(ip).
|
||||||
|
append(displayName).
|
||||||
|
toHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
if (!(obj instanceof PlayerInfo))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj == this)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerInfo rhs = (PlayerInfo) obj;
|
||||||
|
return new EqualsBuilder().
|
||||||
|
append(name, rhs.name).
|
||||||
|
append(ip, rhs.ip).
|
||||||
|
append(displayName, rhs.displayName).
|
||||||
|
isEquals();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return String.format("%s[Name: %s, Display Name: %s, IP: %s]", this.getClass().toString(), name, displayName, ip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class JSONArrayIterable implements Iterable<JSONObject>
|
public static final class JSONArrayIterable implements Iterable<JSONObject>
|
||||||
|
|
Loading…
Reference in a new issue