From b865befb0bf7038bcd4a95e7d5e500bde4fde049 Mon Sep 17 00:00:00 2001 From: verinia Date: Sat, 8 Jun 2019 13:03:40 -0800 Subject: [PATCH] Big woah --- .../data/libs/json-simple-1.1.1.jar | Bin 0 -> 23737 bytes .../free/gather/GatheringSkillPulse.java | 3 +- .../game/node/entity/player/Player.java | 13 - .../ai/resource/ResourceAIPActions.java | 13 +- .../src/org/crandor/game/world/GameWorld.java | 2 + .../src/org/crandor/gui/ConsoleFrame.java | 168 +++++ .../src/org/crandor/gui/ConsoleTab.java | 44 ++ .../crandor/gui/component/PlayerViewer.java | 270 ++++++++ .../org/crandor/gui/tab/GrandExchangeTab.java | 193 ++++++ .../src/org/crandor/gui/tab/PlayerTab.java | 185 ++++++ .../src/org/crandor/gui/tab/UtilityTab.java | 598 ++++++++++++++++++ .../net/packet/in/InteractionPacket.java | 2 +- .../src/org/crandor/tools/PlayerLoader.java | 42 ++ 13 files changed, 1512 insertions(+), 21 deletions(-) create mode 100644 09HDscape-server/data/libs/json-simple-1.1.1.jar create mode 100644 09HDscape-server/src/org/crandor/gui/ConsoleFrame.java create mode 100644 09HDscape-server/src/org/crandor/gui/ConsoleTab.java create mode 100644 09HDscape-server/src/org/crandor/gui/component/PlayerViewer.java create mode 100644 09HDscape-server/src/org/crandor/gui/tab/GrandExchangeTab.java create mode 100644 09HDscape-server/src/org/crandor/gui/tab/PlayerTab.java create mode 100644 09HDscape-server/src/org/crandor/gui/tab/UtilityTab.java create mode 100644 09HDscape-server/src/org/crandor/tools/PlayerLoader.java diff --git a/09HDscape-server/data/libs/json-simple-1.1.1.jar b/09HDscape-server/data/libs/json-simple-1.1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..66347a6c86b7d6442358ca7643e4dc484fb01866 GIT binary patch literal 23737 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/09HDscape-server/src/org/crandor/game/content/skill/free/gather/GatheringSkillPulse.java b/09HDscape-server/src/org/crandor/game/content/skill/free/gather/GatheringSkillPulse.java index 9eab654ce..4d6e7e788 100644 --- a/09HDscape-server/src/org/crandor/game/content/skill/free/gather/GatheringSkillPulse.java +++ b/09HDscape-server/src/org/crandor/game/content/skill/free/gather/GatheringSkillPulse.java @@ -59,7 +59,8 @@ public final class GatheringSkillPulse extends SkillPulse { @Override public void start() { - resource = SkillingResource.forId(node.getId()); + resource = SkillingResource.forId( + node.getId()); if (SkillingResource.isEmpty(node.getId())) { player.getPacketDispatch().sendMessage("This rock contains no ore."); return; diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/Player.java b/09HDscape-server/src/org/crandor/game/node/entity/player/Player.java index 616ae8d00..0b30fc11f 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/Player.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/Player.java @@ -77,8 +77,6 @@ import org.crandor.net.packet.out.SkillLevel; import org.crandor.net.packet.out.UpdateSceneGraph; import org.crandor.plugin.Plugin; import org.crandor.tools.StringUtils; -import org.crandor.tools.panel.Controller; -import org.crandor.tools.panel.PlayerListPulse; import java.util.ArrayList; import java.util.List; @@ -250,7 +248,6 @@ public class Player extends Entity { */ private final HunterManager hunterManager = new HunterManager(this); - private final PlayerListPulse playerListPulse = new PlayerListPulse(this); /** * The treasure trail manager. @@ -277,7 +274,6 @@ public class Player extends Entity { */ private final IronmanManager ironmanManager = new IronmanManager(this); - private final Controller controller = new Controller(this); /** * The logout plugins. @@ -1261,15 +1257,6 @@ public class Player extends Entity { this.skillTasks = skillTasks; } - public Controller getController() { - return controller; - } - - public PlayerListPulse getPlayerListPulse() { - return playerListPulse; - } - - @Override public String toString() { return "Player [name=" + name + ", getRights()=" + getRights() + "]"; diff --git a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/resource/ResourceAIPActions.java b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/resource/ResourceAIPActions.java index 19f471b55..ea89768d4 100644 --- a/09HDscape-server/src/org/crandor/game/node/entity/player/ai/resource/ResourceAIPActions.java +++ b/09HDscape-server/src/org/crandor/game/node/entity/player/ai/resource/ResourceAIPActions.java @@ -8,6 +8,7 @@ import org.crandor.game.node.object.GameObject; import org.crandor.game.system.task.Pulse; import org.crandor.game.world.GameWorld; import org.crandor.game.world.map.Location; +import org.crandor.game.world.map.RegionManager; import org.crandor.game.world.map.path.Pathfinder; import java.util.List; @@ -39,7 +40,7 @@ public class ResourceAIPActions { resource_players.remove(bot); return true; } - chopTree(bot, new GameObject(1278, new Location(3212, 3232, 0))); + chopTree(bot, RegionManager.getObject(Location.create(3234,3231,0))); return false; } }); @@ -47,10 +48,10 @@ public class ResourceAIPActions { } private static void chopTree(final AIPlayer bot, final GameObject node) { - //bot.sendChat("WE CHOPPIN"); - Pathfinder.find(bot, node); - Pulse pulse = new GatheringSkillPulse(bot, node); - bot.getPulseManager().run(pulse); - pulse.start(); + bot.sendChat("WE CHOPPIN"); +// Pathfinder.find(bot, node); +// Pulse pulse = new GatheringSkillPulse(bot, node); + bot.getPulseManager().run(new GatheringSkillPulse(bot, node)); +// pulse.start(); } } diff --git a/09HDscape-server/src/org/crandor/game/world/GameWorld.java b/09HDscape-server/src/org/crandor/game/world/GameWorld.java index f6c438025..40da8af5a 100644 --- a/09HDscape-server/src/org/crandor/game/world/GameWorld.java +++ b/09HDscape-server/src/org/crandor/game/world/GameWorld.java @@ -11,6 +11,7 @@ import org.crandor.game.node.entity.player.ai.AIPBuilder; import org.crandor.game.node.entity.player.ai.AIPlayer; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPActions; import org.crandor.game.node.entity.player.ai.pvp.PVPAIPBuilderUtils; +import org.crandor.game.node.entity.player.ai.resource.ResourceAIPManager; import org.crandor.game.node.entity.player.link.appearance.Gender; import org.crandor.game.node.object.GameObject; import org.crandor.game.system.SystemLogger; @@ -270,6 +271,7 @@ public final class GameWorld { ScriptManager.load(); PluginManager.init(); GlobalEventManager.get().init(); + ResourceAIPManager.get().init(); SQLManager.postPlugin(); parseObjects(); CallbackHub.call(); diff --git a/09HDscape-server/src/org/crandor/gui/ConsoleFrame.java b/09HDscape-server/src/org/crandor/gui/ConsoleFrame.java new file mode 100644 index 000000000..ef9b6e3f1 --- /dev/null +++ b/09HDscape-server/src/org/crandor/gui/ConsoleFrame.java @@ -0,0 +1,168 @@ +package org.crandor.gui; + + +import org.crandor.gui.tab.GrandExchangeTab; +import org.crandor.gui.tab.PlayerTab; +import org.crandor.gui.tab.StatisticsTab; +import org.crandor.gui.tab.UtilityTab; + +import javax.swing.*; +import java.awt.*; + +/** + * The console frame tool. + * + * @author Vexia + */ +public class ConsoleFrame extends JFrame { + + /** + * The console frame instance. + */ + public static final ConsoleFrame INSTANCE = new ConsoleFrame(); + + /** + * The serail UID. + */ + private static final long serialVersionUID = 6368064564449356833L; + + /** + * The size of the frame. + */ + private static final Dimension SIZE = new Dimension(1074, 664); + + /** + * The tabbed pane. + */ + private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); + + /** + * The statistics tab. + */ + private final StatisticsTab statisticsTab = StatisticsTab.INSTANCE.init(); + + /** + * The player tab. + */ + private final PlayerTab playerTab = new PlayerTab(); + + /** + * The grand exchange tab. + */ + private final GrandExchangeTab grandExchangeTab = new GrandExchangeTab(); + + /** + * The utility tab. + */ + private final UtilityTab utilityTab = UtilityTab.getInstance(); + + /** + * Constructs a new {@Code consoleFrame} {@Code Object} + */ + private ConsoleFrame() { + super("Console"); + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { + e.printStackTrace(); + } + } + + /** + * Initializes the console frame. + * + * @return the frame. + */ + public ConsoleFrame init() { + setLocationRelativeTo(null); + setSize(SIZE); + getContentPane().setLayout(null); + tabbedPane.setBounds(0, 0, 1068, 636); + Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); + setLocation(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2); + getContentPane().add(tabbedPane); + addTabs(statisticsTab, utilityTab, playerTab, grandExchangeTab); + setResizable(false); + setVisible(true); + return this; + } + + public static void main(String... args) { + INSTANCE.init(); + } + + /** + * Adds tabs. + * + * @param tabs the tabs. + */ + public void addTabs(ConsoleTab... tabs) { + for (ConsoleTab tab : tabs) { + addTab(tab); + } + } + + /** + * Adds a tab to the tabbed pane. + * + * @param tab the tab. + */ + public void addTab(ConsoleTab tab) { + tabbedPane.add(tab.getName(), tab); + } + + /** + * Gets the statisticsTab. + * + * @return the statisticsTab + */ + public StatisticsTab getStatisticsTab() { + return statisticsTab; + } + + /** + * Gets the tabbedPane. + * + * @return the tabbedPane + */ + public JTabbedPane getTabbedPane() { + return tabbedPane; + } + + /** + * Gets the playerTab. + * + * @return the playerTab + */ + public PlayerTab getPlayerTab() { + return playerTab; + } + + /** + * Gets the utilityTab. + * + * @return the utilityTab + */ + public UtilityTab getUtilityTab() { + return utilityTab; + } + + /** + * Gets the instance. + * + * @return the instance. + */ + public static ConsoleFrame getInstance() { + return INSTANCE; + } + + /** + * Gets the grandExchangeTab. + * + * @return the grandExchangeTab + */ + public GrandExchangeTab getGrandExchangeTab() { + return grandExchangeTab; + } + +} diff --git a/09HDscape-server/src/org/crandor/gui/ConsoleTab.java b/09HDscape-server/src/org/crandor/gui/ConsoleTab.java new file mode 100644 index 000000000..430221479 --- /dev/null +++ b/09HDscape-server/src/org/crandor/gui/ConsoleTab.java @@ -0,0 +1,44 @@ +package org.crandor.gui; + +import javax.swing.*; +import java.awt.*; + +/** + * The console tab. + * + * @author Vexia + */ +public class ConsoleTab extends JPanel { + + /** + * The serial UID. + */ + private static final long serialVersionUID = 2899642836866716523L; + + /** + * The name of the console tab. + */ + private final String name; + + /** + * Constructs a new {@Code consoleTab} {@Code Object} + * + * @param name the name. + */ + public ConsoleTab(String name) { + super(); + this.name = name; + setLayout(null); + setBounds(new Rectangle(0, 0, 1068, 663)); + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + +} diff --git a/09HDscape-server/src/org/crandor/gui/component/PlayerViewer.java b/09HDscape-server/src/org/crandor/gui/component/PlayerViewer.java new file mode 100644 index 000000000..07d41d936 --- /dev/null +++ b/09HDscape-server/src/org/crandor/gui/component/PlayerViewer.java @@ -0,0 +1,270 @@ +package org.crandor.gui.component; + + +import org.crandor.game.container.Container; +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.info.PlayerDetails; +import org.crandor.game.node.item.Item; +import org.crandor.game.world.GameWorld; +import org.crandor.game.world.repository.Repository; +import org.crandor.gui.ConsoleFrame; +import org.crandor.tools.PlayerLoader; +import org.crandor.tools.StringUtils; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import java.awt.*; +import java.awt.event.ActionListener; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Views a players details. + * + * @author Vexia + */ +public class PlayerViewer extends JPanel { + + /** + * The serail UID. + */ + private static final long serialVersionUID = 1589056461884384398L; + + /** + * The name of the viewer. + */ + private final String name; + + /** + * The player details. + */ + private PlayerDetails details; + + /** + * The player file. + */ + private Player player; + + /** + * Constructs a new {@Code PlayerViewer} {@Code Object} + * + * @param name the name. + */ + public PlayerViewer(String name) { + super(); + this.name = name; + this.details = PlayerLoader.getPlayerDetailFile(name); + if (Repository.getPlayerByName(name) != null) { + setPlayer(Repository.getPlayerByName(name)); + } else { + if (GameWorld.getMajorUpdateWorker().isStarted()) { + setPlayer(PlayerLoader.getPlayerFile(name)); + } + } + setBounds(new Rectangle(0, 0, 755, 539)); + setLayout(null); + JButton btnClose = new JButton("Close"); + btnClose.addActionListener(e -> ConsoleFrame.getInstance().getPlayerTab().closeViewer(PlayerViewer.this)); + btnClose.setBounds(6, 6, 117, 29); + add(btnClose); + + JPanel panel = new JPanel(); + panel.setBorder(new TitledBorder(null, "Info", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel.setBounds(6, 35, 286, 428); + add(panel); + panel.setLayout(null); + + JLabel lblName = new JLabel("Username: " + details.getUsername()); + lblName.setBounds(6, 16, 224, 16); + panel.add(lblName); + + JLabel lblIp = new JLabel("IP: " + details.getInfo().getIp()); + lblIp.setBounds(6, 96, 190, 16); + panel.add(lblIp); + + JLabel lblMac = new JLabel("Mac: " + details.getInfo().getMac()); + lblMac.setBounds(6, 124, 224, 16); + panel.add(lblMac); + + JLabel lblCompName = new JLabel("Comp name: " + details.getInfo().getCompName()); + lblCompName.setBounds(6, 208, 236, 16); + panel.add(lblCompName); + + JLabel lblLastLogin = new JLabel("Last login: " + new Date(details.getLastLogin())); + lblLastLogin.setBounds(6, 152, 274, 16); + panel.add(lblLastLogin); + + JLabel lblStatus = new JLabel("Status: " + getStatus()); + lblStatus.setBounds(6, 236, 149, 16); + panel.add(lblStatus); + +// JLabel lblCredits = new JLabel("Credits: " + details.getShop().getCredits()); +// lblCredits.setBounds(6, 180, 139, 16); +// panel.add(lblCredits); + + JLabel lblRights = new JLabel("Rights: " + StringUtils.formatDisplayName(details.getRights().toString())); + lblRights.setBounds(6, 68, 176, 16); + panel.add(lblRights); + +// JLabel lblDisplayName = new JLabel("Display name: " + details.getUsername()); +// lblDisplayName.setBounds(6, 40, 213, 16); +// panel.add(lblDisplayName); + + JLabel lblNetworth = new JLabel("Networth:"); + lblNetworth.setBounds(6, 264, 165, 16); + panel.add(lblNetworth); + + JLabel lblBanned = new JLabel("Banned: " + (details.getBanTime() > 0)); + lblBanned.setBounds(6, 292, 149, 16); + panel.add(lblBanned); + + JLabel lblMuted = new JLabel("Muted: " + (details.getMuteTime() > 0)); + lblMuted.setBounds(6, 317, 149, 16); + panel.add(lblMuted); + + JLabel lblActive = new JLabel("Active: " + checkActive()); + lblActive.setBounds(6, 342, 165, 16); + panel.add(lblActive); + if (player != null) { + lblNetworth.setText("Networth: " + player.getMonitor().getNetworth() + ""); + } + + JButton btnRefresh = new JButton("Refresh"); + btnRefresh.setBounds(124, 6, 117, 29); + add(btnRefresh); + + JButton btnViewContainer = new JButton("View Container"); + btnViewContainer.addActionListener(e -> { + if (player == null) { + return; + } + viewContainer(); + }); + btnViewContainer.setBounds(365, 6, 144, 29); + add(btnViewContainer); + + JButton btnDelete = new JButton("Delete"); + btnDelete.addActionListener(e -> { + int result = JOptionPane.showConfirmDialog(null, "Are you sure you want to delete this account!?"); + if (result == 0) { + ConsoleFrame.getInstance().getUtilityTab().delete(details); + ConsoleFrame.getInstance().getPlayerTab().closeViewer(PlayerViewer.this); + } + }); + btnDelete.setBounds(244, 6, 117, 29); + add(btnDelete); + } + + /** + * Opens the view containermanager. + */ + public void viewContainer() { + JPanel panel = new JPanel(new GridLayout(0, 1)); + ActionListener listener = e -> { + String name1 = e.getActionCommand(); + Container container = null; + switch (name1) { + case "Inventory": + container = player.getInventory(); + break; + case "Equipment": + container = player.getEquipment(); + break; + case "Bank": + container = player.getBank(); + break; + } + if (container != null) { + showContainer(container, name1); + } + }; + JButton invy = new JButton("Inventory"); + panel.add(invy); + invy.addActionListener(listener); + JButton equip = new JButton("Equipment"); + panel.add(equip); + equip.addActionListener(listener); + JButton bank = new JButton("Bank"); + bank.addActionListener(listener); + panel.add(bank); + JOptionPane.showConfirmDialog(null, panel, "View Container", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + } + + /** + * Shows a container. + * + * @param container the container. + * @param name the name. + */ + public void showContainer(org.crandor.game.container.Container container, String name) { + JPanel panel = new JPanel(new GridLayout(0, 1)); + JScrollPane pane = new JScrollPane(); + DefaultListModel model = new DefaultListModel<>(); + JList list = new JList<>(); + for (Item i : container.toArray()) { + if (i == null) { + continue; + } + model.addElement(i.toString()); + } + list.setModel(model); + pane.setViewportView(list); + panel.add(pane); + JOptionPane.showConfirmDialog(null, panel, name, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + } + + /** + * Checks if the player is active. + * + * @return {@code True} if so. + */ + public String checkActive() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date cutOff = null; + long mili = 0; + try { + cutOff = sdf.parse("2014-6-10"); + mili = cutOff.getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return ((details.getLastLogin() < mili) ? "Not " : "") + "Active"; + } + + /** + * Checks active status. + * + * @return the status. + */ + public String getStatus() { + return Repository.getPlayerByName(name) != null ? "Online" : "Offline"; + } + + /** + * Gets the name. + * + * @return the name + */ + public String getName() { + return name; + } + + /** + * Gets the player. + * + * @return the player + */ + public Player getPlayer() { + return player; + } + + /** + * Sets the baplayer. + * + * @param player the player to set. + */ + public void setPlayer(Player player) { + this.player = player; + } +} diff --git a/09HDscape-server/src/org/crandor/gui/tab/GrandExchangeTab.java b/09HDscape-server/src/org/crandor/gui/tab/GrandExchangeTab.java new file mode 100644 index 000000000..ebea2b76f --- /dev/null +++ b/09HDscape-server/src/org/crandor/gui/tab/GrandExchangeTab.java @@ -0,0 +1,193 @@ +package org.crandor.gui.tab; + + +import org.crandor.game.content.eco.ge.GEOfferDispatch; +import org.crandor.game.content.eco.ge.GrandExchangeOffer; +import org.crandor.game.node.entity.player.Player; +import org.crandor.gui.ConsoleFrame; +import org.crandor.gui.ConsoleTab; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +/** + * A tab used to view the grand exchange. + * + * @author Vexia + */ +public class GrandExchangeTab extends ConsoleTab { + + /** + * The serial UID. + */ + private static final long serialVersionUID = -1619650762760289798L; + + /** + * The search field. + */ + private JTextField searchField; + + /** + * The jlist. + */ + private final JList list = new JList(); + + /** + * The model. + */ + private final DefaultListModel model = new DefaultListModel(); + + /** + * The id search field. + */ + private JTextField idSearchField; + + /** + * Constructs a new {@Code GrandExchangeTab} {@Code Object} + */ + @SuppressWarnings("serial") + public GrandExchangeTab() { + super("Grand Exchange"); + list.setCellRenderer(new DefaultListCellRenderer() { + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + GrandExchangeOffer offer = (GrandExchangeOffer) value; + if (offer == null) { + return label; + } + Player player = null; + for (Player p : ConsoleFrame.getInstance().getUtilityTab().getPlayers()) { + if (p == null) { + continue; + } + if (p.getDetails().getUid() == offer.getUid()) { + player = p; + break; + } + } + label.setText((player == null ? "" : player.getName() + " - ") + offer.toString()); + return label; + } + + }); + list.setModel(model); + JLabel lblSearch = new JLabel("Search player:"); + lblSearch.setBounds(24, 20, 95, 16); + add(lblSearch); + + searchField = new JTextField(); + searchField.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + searchPlayer(); + } + }); + searchField.setBounds(119, 14, 185, 28); + add(searchField); + searchField.setColumns(10); + + JPanel panel = new JPanel(); + panel.setBounds(24, 78, 1015, 518); + add(panel); + panel.setLayout(null); + + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setBounds(6, 6, 375, 517); + panel.add(scrollPane); + scrollPane.setViewportView(list); + + JButton btnDisplayDatabase = new JButton("Display Database"); + btnDisplayDatabase.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + displayDatabase(); + } + }); + btnDisplayDatabase.setBounds(316, 15, 173, 29); + add(btnDisplayDatabase); + + JLabel lblNewLabel = new JLabel("Search id:"); + lblNewLabel.setBounds(24, 48, 61, 16); + add(lblNewLabel); + + idSearchField = new JTextField(); + idSearchField.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + searchId(); + } + }); + idSearchField.setColumns(10); + idSearchField.setBounds(119, 48, 185, 28); + add(idSearchField); + + JButton btnNewButton = new JButton("Load"); + btnNewButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + ConsoleFrame.getInstance().getUtilityTab().populateList(); + } + }); + btnNewButton.setBounds(316, 43, 173, 29); + add(btnNewButton); + } + + /** + * Searches the player. + */ + private void searchPlayer() { + model.clear(); + Player player = ConsoleFrame.getInstance().getUtilityTab().getPlayer(searchField.getText()); + if (player == null) { + JOptionPane.showMessageDialog(null, "Error! No player found."); + return; + } + for (GrandExchangeOffer o : player.getGrandExchange().getOffers()) { + if (o == null) { + continue; + } + addOffer(o); + } + } + + /** + * Searches the id. + */ + private void searchId() { + model.clear(); + int itemId = 0; + try { + itemId = Integer.parseInt(idSearchField.getText()); + } catch (NumberFormatException e) { + + } + for (GrandExchangeOffer o : GEOfferDispatch.getOfferMapping().values()) { + if (o == null) { + continue; + } + if (o.getItemId() == itemId) { + addOffer(o); + } + } + } + + /** + * Adds a g.e offer. + */ + private void addOffer(GrandExchangeOffer offer) { + model.addElement(offer); + } + + /** + * Displays a database. + */ + private void displayDatabase() { + if (ConsoleFrame.getInstance().getUtilityTab().getPlayers().size() == 0) { + JOptionPane.showMessageDialog(null, "Error! No data in DB yet. Press load."); + return; + } + for (GrandExchangeOffer offer : GEOfferDispatch.getOfferMapping().values()) { + model.addElement(offer); + } + } +} diff --git a/09HDscape-server/src/org/crandor/gui/tab/PlayerTab.java b/09HDscape-server/src/org/crandor/gui/tab/PlayerTab.java new file mode 100644 index 000000000..7091adf0d --- /dev/null +++ b/09HDscape-server/src/org/crandor/gui/tab/PlayerTab.java @@ -0,0 +1,185 @@ +package org.crandor.gui.tab; + + +import org.crandor.gui.ConsoleTab; +import org.crandor.gui.component.PlayerViewer; +import org.crandor.net.Constants; + +import javax.swing.*; +import javax.swing.border.BevelBorder; +import javax.swing.border.SoftBevelBorder; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.*; + +/** + * The player tab. + * + * @author Vexia + */ +public class PlayerTab extends ConsoleTab { + + /** + * The serial UID. + */ + private static final long serialVersionUID = 8865322670299347942L; + + /** + * The list of player names to search through. + */ + private final List playerNames = new ArrayList<>(); + + /** + * The player name text field. + */ + private JTextField textField; + + /** + * The default model. + */ + private final DefaultListModel model = new DefaultListModel(); + + /** + * The tabbed panes. + */ + private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); + + /** + * The mapping of open player viewers. + */ + private final Map viewers = new HashMap<>(); + + /** + * Constructs a new {@Code PlayerTab} {@Code Object} + */ + public PlayerTab() { + super("Players"); + + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null)); + scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + scrollPane.setBounds(6, 43, 260, 539); + add(scrollPane); + + final JList list = new JList(); + list.addListSelectionListener(e -> { + if (list.getSelectedValue() != null) { + openViewer(list.getSelectedValue()); + } + }); + list.setModel(model); + scrollPane.setViewportView(list); + + JLabel lblSearchForPlayer = new JLabel("Search for player:"); + lblSearchForPlayer.setBounds(6, 15, 143, 16); + add(lblSearchForPlayer); + + textField = new JTextField(); + textField.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + model.clear(); + if (textField.getText() == null || textField.getText().length() < 1) { + return; + } + for (String name : playerNames) { + if (name.toLowerCase().startsWith(textField.getText())) { + model.addElement(name); + } + } + } + }); + textField.setBounds(117, 9, 149, 28); + add(textField); + textField.setColumns(10); + + tabbedPane.setBounds(278, 43, 755, 539); + add(tabbedPane); + + JButton btnRepopulate = new JButton("Repopulate"); + btnRepopulate.addActionListener(e -> populatePlayerSearch()); + btnRepopulate.setBounds(278, 10, 117, 29); + add(btnRepopulate); + populatePlayerSearch(); + } + + /** + * Opens a viewer for a player. + * + * @param name the name. + * @return {@code True} if opened. + */ + public boolean openViewer(String name) { + if (viewers.containsKey(name)) { + return false; + } + PlayerViewer viewer = new PlayerViewer(name); + viewers.put(name, viewer); + tabbedPane.add(viewer.getName(), viewer); + return true; + } + + /** + * Closes a viewer. + * + * @param viewer the viewer. + * @return {@code True} if closed. + */ + public boolean closeViewer(PlayerViewer viewer) { + if (!viewers.containsValue(viewer)) { + JOptionPane.showMessageDialog(null, "Error! Viewer wasn't open."); + return false; + } + viewers.remove(viewer.getName()); + tabbedPane.remove(viewer); + return true; + } + + /** + * Populates the searchable names. + */ + public void populatePlayerSearch() { + playerNames.clear(); + model.clear(); + File f = new File("./data/players/"); + if (f.listFiles() == null) { + System.out.println("Player directory was null!"); + return; + } + System.out.println(getPlayerNames().toString()); + for (File file : Objects.requireNonNull(f.listFiles())) { + playerNames.add(file.getName().replace(".keldagrim", "").trim()); + model.addElement(file.getName().replace(".keldagrim", "").trim()); + } + } + + /** + * Adds a searchable name to the list. + * + * @param name the name. + */ + public void addSearchableName(String name) { + playerNames.add(name); + } + + /** + * Gets the playerNames. + * + * @return the playerNames + */ + public List getPlayerNames() { + return playerNames; + } + + /** + * Gets the viewers. + * + * @return the viewers + */ + public Map getViewers() { + return viewers; + } +} diff --git a/09HDscape-server/src/org/crandor/gui/tab/UtilityTab.java b/09HDscape-server/src/org/crandor/gui/tab/UtilityTab.java new file mode 100644 index 000000000..982ff94bd --- /dev/null +++ b/09HDscape-server/src/org/crandor/gui/tab/UtilityTab.java @@ -0,0 +1,598 @@ +package org.crandor.gui.tab; + + +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.info.PlayerDetails; +import org.crandor.game.node.entity.player.info.Rights; +import org.crandor.game.node.item.Item; +import org.crandor.game.system.task.TaskExecutor; +import org.crandor.gui.ConsoleFrame; +import org.crandor.gui.ConsoleTab; +import org.crandor.tools.PlayerLoader; +import org.crandor.tools.StringUtils; + +import javax.swing.*; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.NumberFormat; +import java.util.*; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * Handles the utility programs. + * + * @author Vexia + */ +public final class UtilityTab extends ConsoleTab { + /** + * The {@link Logger} instance. + */ + private static final Logger logger = Logger.getLogger(UtilityTab.class.getName()); + /** + * The utility tab. + */ + private static final UtilityTab INSTANCE = new UtilityTab(); + + /** + * The serial UID. + */ + private static final long serialVersionUID = -4962790192758757624L; + + /** + * The list of players. + */ + private final List players = new ArrayList<>(); + + /** + * The mapping of ips & their users. + */ + private final Map> IPS = new HashMap<>(); + + /** + * The mapping of macs & their users. + */ + private final Map> MACS = new HashMap<>(); + + /** + * The mapping of comp names & their users. + */ + private final Map> COMPS = new HashMap<>(); + + /** + * The players loaded list. + */ + private final JLabel lblPlayersLoaded = new JLabel("Players loaded: "); + + /** + * If the map is being populated. + */ + private boolean populating; + + /** + * Constructs a new {@Code UtilityTab} {@Code Object} + */ + public UtilityTab() { + super("Utilities"); + + JPanel panel = new JPanel(); + panel.setBorder(new TitledBorder(null, "Resolvers & Trackers", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel.setBackground(UIManager.getColor("Button.background")); + panel.setBounds(18, 98, 152, 219); + add(panel); + panel.setLayout(null); + JButton btnResolveIp = new JButton("Resolve Ip"); + btnResolveIp.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + resolve(IPS); + } + }); + btnResolveIp.setBounds(17, 28, 117, 29); + panel.add(btnResolveIp); + + JButton btnResolveMac = new JButton("Resolve Mac"); + btnResolveMac.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + resolve(MACS); + } + }); + btnResolveMac.setBounds(17, 69, 117, 29); + panel.add(btnResolveMac); + + JButton btnResolveCompName = new JButton("Resolve Comp"); + btnResolveCompName.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + resolve(COMPS); + } + }); + btnResolveCompName.setBounds(17, 110, 117, 29); + panel.add(btnResolveCompName); + + JButton btnPopulateMaps = new JButton("Populate Maps"); + btnPopulateMaps.addActionListener(e -> { + populateList(); + JOptionPane.showMessageDialog(null, "Finished populating maps!"); + }); + btnPopulateMaps.setBounds(405, 32, 236, 29); + add(btnPopulateMaps); + + JLabel lblMustBeDone = new JLabel("MUST BE DONE BEFORE RUNNING TOOLS"); + lblMustBeDone.setBounds(390, 6, 379, 16); + add(lblMustBeDone); + + lblPlayersLoaded.setBounds(460, 61, 157, 16); + add(lblPlayersLoaded); + + JPanel panel_1 = new JPanel(); + panel_1.setLayout(null); + panel_1.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Wealth & Items", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel_1.setBackground(UIManager.getColor("Button.background")); + panel_1.setBounds(182, 98, 145, 219); + add(panel_1); + + JButton btnWealthScanner = new JButton("Wealth Scanner"); + btnWealthScanner.addActionListener(e -> wealthScanner()); + btnWealthScanner.setBounds(6, 29, 129, 29); + panel_1.add(btnWealthScanner); + + JButton btnItemScanner = new JButton("Item Scanner"); + btnItemScanner.addActionListener(e -> itemScanner()); + btnItemScanner.setBounds(6, 69, 129, 29); + panel_1.add(btnItemScanner); + + JPanel panel_2 = new JPanel(); + panel_2.setLayout(null); + panel_2.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Player Utils", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel_2.setBackground(UIManager.getColor("Button.background")); + panel_2.setBounds(345, 98, 145, 219); + add(panel_2); + + JButton btnStaffChecker = new JButton("Staff Scanner"); + btnStaffChecker.addActionListener(e -> staffScanner()); + btnStaffChecker.setBounds(6, 29, 129, 29); + panel_2.add(btnStaffChecker); + + JPanel panel_3 = new JPanel(); + panel_3.setLayout(null); + panel_3.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Security", TitledBorder.LEADING, TitledBorder.TOP, null, null)); + panel_3.setBackground(UIManager.getColor("Button.background")); + panel_3.setBounds(502, 98, 145, 219); + add(panel_3); + + JButton btnMacViewer = new JButton("Mac Viewer"); + btnMacViewer.addActionListener(e -> viewMacs()); + btnMacViewer.setBounds(6, 29, 129, 29); + panel_3.add(btnMacViewer); + + JButton btnMacRemover = new JButton("Mac Remover"); + btnMacRemover.addActionListener(e -> removeMac()); + btnMacRemover.setBounds(6, 64, 129, 29); + panel_3.add(btnMacRemover); + } + + /** + * Removes a mac. + */ + public void removeMac() { + String mac = JOptionPane.showInputDialog("Enter address:"); + if (mac == null || mac.length() <= 1) { + JOptionPane.showMessageDialog(null, "Error! Nothing entered."); + return; + } +// if (SystemManager.getSecurity().isBanned(mac)) { +// SystemManager.getSecurity().remove(mac); +// JOptionPane.showMessageDialog(null, "Removed the mac - " + mac + "!"); +// } else { +// JOptionPane.showMessageDialog(null, "Error! Couldn't find mac in system manager."); +// } + } + + /** + * Views the banned macs. + */ + public void viewMacs() { + JPanel panel = new JPanel(new GridLayout(0, 1)); + JScrollPane pane = new JScrollPane(); + DefaultListModel model = new DefaultListModel(); + JList list = new JList(); +// for (String i : SystemManager.getSecurity().getBannedAddresses()) { +// if (i == null) { +// continue; +// } +// model.addElement(i.toString()); +// } + list.setModel(model); + pane.setViewportView(list); + panel.add(pane); + JOptionPane.showConfirmDialog(null, panel, "Banned Addresses", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + } + + /** + * Wealth scanner. + */ + public void wealthScanner() { + String args = JOptionPane.showInputDialog("Enter item id:"); + int id = -1; + if (args != null && args.length() > 0) { + try { + id = Integer.parseInt(args); + } catch (NumberFormatException e) { + id = -1; + logger.log(Level.WARNING, "Error in wealth scanner, number exception!"); + } + } + List data = wealthScanner(id); + JPanel panel = new JPanel(new GridLayout(0, 1)); + JScrollPane pane = new JScrollPane(); + DefaultListModel model = new DefaultListModel(); + JList list = new JList(); + for (String i : data) { + if (i == null) { + continue; + } + model.addElement(i.toString()); + } + list.setModel(model); + pane.setViewportView(list); + panel.add(pane); + JOptionPane.showConfirmDialog(null, panel, "Wealth Scanner", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + + } + + /** + * Wealth scanner. + */ + public List wealthScanner(int itemId) { + Item item = null; + if (itemId != -1) { + item = new Item(itemId); + } + Object[][] mostWealthy = new Object[50][2]; + int player = 0; + long count = 0; + for (Player p : players) { + if (p.getDetails().getRights() == Rights.PLAYER_MODERATOR) { + continue; + } + if (item != null) { + long old = count; + count += p.getInventory().getAmount(item); + count += p.getEquipment().getAmount(item); + count += p.getBank().getAmount(item); + if (old != count) { + player++; + } + } + for (int i = 0; i < mostWealthy.length; i++) { + Long value = (Long) mostWealthy[i][0]; + if (value == null || value < p.getMonitor().getNetworth()) { + for (int j = mostWealthy.length - 1; j > i; j--) { + mostWealthy[j] = mostWealthy[j - 1]; + } + mostWealthy[i] = new Object[2]; + mostWealthy[i][0] = p.getMonitor().getNetworth(); + mostWealthy[i][1] = p.getName(); + break; + } + } + } + List formats = new ArrayList<>(); + for (int i = mostWealthy.length - 1; i >= 0; i--) { + Object[] info = mostWealthy[i]; + if (info != null && info[0] != null) { + formats.add(i + ": " + info[1] + " - " + NumberFormat.getNumberInstance(Locale.US).format((Long) info[0]) + " coins."); + } + } + if (item != null) { + formats.add(NumberFormat.getNumberInstance(Locale.US).format(count) + " occurrences of item " + item.getName() + " (id=" + item.getId() + ") by " + player + " players!"); + } + return formats; + } + + /** + * The item scanner. + */ + public void itemScanner() { + String args = JOptionPane.showInputDialog("Enter item id:"); + Item item = new Item(11694); + if (args != null && args.length() > 0) { + try { + item = new Item(Integer.parseInt(args)); + } catch (NumberFormatException e) { + item = new Item(11694); + logger.log(Level.WARNING, "Error in wealth scanner, number exception!"); + } + } + List formats = itemScanner(item); + JPanel panel = new JPanel(new GridLayout(0, 1)); + JScrollPane pane = new JScrollPane(); + DefaultListModel model = new DefaultListModel(); + JList list = new JList(); + for (String i : formats) { + if (i == null) { + continue; + } + model.addElement(i.toString()); + } + list.setModel(model); + pane.setViewportView(list); + panel.add(pane); + JOptionPane.showConfirmDialog(null, panel, "Item Scanner", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + } + + /** + * Scans for items in the eco. + */ + public List itemScanner(Item item) { + Map map = new HashMap<>(); + for (Player p : players) { + p.getAnimator(); + List containers = new ArrayList<>(); + containers.add(p.getInventory()); + containers.add(p.getBank()); + containers.add(p.getEquipment()); + int amount = 0; + for (org.crandor.game.container.Container container : containers) { + Item i = container.getItem(item); + if (i != null) { + amount += i.getAmount(); + } + } + if (amount > 0) { + map.put(p.getName(), amount); + } + } + List formats = new ArrayList<>(); + for (Map.Entry entry : map.entrySet()) { + formats.add("Player name=" + entry.getKey() + ", contained a total of " + entry.getValue() + " " + item.getName() + "."); + } + if (formats.size() == 0) { + formats.add("There were no occurrences of " + item + "."); + } + return formats; + } + + /** + * Resolves the address. + * + * @param map the map. + */ + public void resolve(Map> map) { + String address = JOptionPane.showInputDialog("Enter the address."); + List names = resolve(map, address, false); + String string = "No names found registered with that address!"; + if (names == null) { + JOptionPane.showMessageDialog(null, string); + } else { + string = "Names:" + Arrays.toString(names.toArray()); + JOptionPane.showMessageDialog(null, string); + } + } + + /** + * Resolves & tracks an adddress. + * + * @param map the map. + * @param value the value. + * @param name if the name or not. + * @return the names resolved. + */ + public List resolve(Map> map, String value, boolean name) { + List names = null; + String address = !name ? value : ""; + if (name) { + for (Map.Entry> entry : map.entrySet()) { + for (String s : entry.getValue()) { + if (s.equals(value)) { + address = entry.getKey(); + break; + } + } + } + } + names = map.get(address); + return names; + } + + /** + * Gets the mapping. + * + * @param id the id. + * @return the map. + */ + public Map> getMap(int id) { + return id == 1 ? IPS : id == 2 ? MACS : COMPS; + } + + /** + * Populates the lists. + */ + public void populateList() { + if (populating) { + return; + } + populating = true; + players.clear(); + TaskExecutor.execute(() -> { + ConsoleFrame.getInstance().getPlayerTab().getPlayerNames().clear(); + ConsoleFrame.getInstance().getPlayerTab().populatePlayerSearch(); + for (String name : ConsoleFrame.getInstance().getPlayerTab().getPlayerNames()) { + Player player = PlayerLoader.getPlayerFile(name); + if (player == null) { + continue; + } + PlayerDetails details = player.getDetails(); + if (details != null) { + addAddressToMap(name, details.getIpAddress(), IPS); + addAddressToMap(name, details.getMacAddress(), MACS); + addAddressToMap(name, details.getCompName(), COMPS); + players.add(player); + } + } + populating = false; + System.gc(); + lblPlayersLoaded.setText("Players loaded: " + players.size()); + }); + } + + /** + * Checks the staff. + */ + public void staffScanner() { + List staff = new ArrayList<>(); + for (Player player : players) { + if (player.getDetails().getRights() != Rights.REGULAR_PLAYER) { + staff.add(player.getName() + " - " + StringUtils.formatDisplayName(player.getDetails().getRights().toString())); + } + } + JPanel panel = new JPanel(new GridLayout(0, 1)); + JScrollPane pane = new JScrollPane(); + DefaultListModel model = new DefaultListModel(); + JList list = new JList(); + for (String i : staff) { + if (i == null) { + continue; + } + model.addElement(i.toString()); + } + list.setModel(model); + pane.setViewportView(list); + panel.add(pane); + JOptionPane.showConfirmDialog(null, panel, "Staff Scanner", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); + } + + /** + * Adds an address with its names to the map. + * + * @param name the name. + * @param address the address. + * @param map the map. + */ + public void addAddressToMap(String name, String address, Map> map) { + if (address == null) { + return; + } + List names = map.get(address); + if (names == null) { + names = new ArrayList(); + } + names.add(name); + map.put(address, names); + } + + /** + * Deletes a player. + * + * @param details the details. + */ + public void delete(PlayerDetails details) { + if (details.getRights() == Rights.PLAYER_MODERATOR) { + return; + } + // TODO +// Connection connection = SQLManager.getConnection(); +// PreparedStatement statement; +// try { +// statement = connection.prepareStatement("DELETE FROM " + "playerdata" + " WHERE " + "" + "username" + "='" + details.getUsername().toLowerCase() + "'"); +// statement.execute(); +// statement = connection.prepareStatement("DELETE FROM " + "highscores" + " WHERE " + "" + "username" + "='" + details.getUsername().toLowerCase() + "'"); +// statement.execute(); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// +// File detailFile = new File(GameConstants.getPlayerDetailsPath() + "/" + details.getUsername() + ".store"); +// File playerFile = new File(GameConstants.getPlayerSavePath() + "/" + details.getUsername() + ".store"); +// detailFile.delete(); +// playerFile.delete(); +// SQLManager.close(connection); +// ConsoleFrame.getInstance().getPlayerTab().getPlayerNames().remove(details.getUsername()); + + } + + /** + * Gets the player. + * + * @param name the name. + * @return the player. + */ + public Player getPlayer(String name) { + if (players.size() == 0) { + populateList(); + return null; + } + for (Player p : players) { + if (p.getName().equals(name)) { + return p; + } + } + return null; + } + + /** + * Gets the ips. + * + * @return the ips. + */ + public Map> getIps() { + return IPS; + } + + /** + * Gets the macs. + * + * @return the macs. + */ + public Map> getMacs() { + return MACS; + } + + /** + * Gets the comps. + * + * @return the comps. + */ + public Map> getComps() { + return COMPS; + } + + /** + * Gets the players. + * + * @return the players. + */ + public List getPlayers() { + return players; + } + + /** + * Gets the populating. + * + * @return the populating + */ + public boolean isPopulating() { + return populating; + } + + /** + * Sets the bapopulating. + * + * @param populating the populating to set. + */ + public void setPopulating(boolean populating) { + this.populating = populating; + } + + /** + * Gets the instance. + * + * @return the instance + */ + public static UtilityTab getInstance() { + return INSTANCE; + } +} diff --git a/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java b/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java index 0a320f083..bb19eebee 100644 --- a/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java +++ b/09HDscape-server/src/org/crandor/net/packet/in/InteractionPacket.java @@ -186,7 +186,7 @@ public final class InteractionPacket implements IncomingPacket { * @param y The y-coordinate of the object. * @param objectId The object id. */ - private static void handleObjectInteraction(final Player player, int optionIndex, int x, int y, int objectId) { + public static void handleObjectInteraction(final Player player, int optionIndex, int x, int y, int objectId) { GameObject object = RegionManager.getObject(player.getLocation().getZ(), x, y, objectId); if (objectId == 29735) {//player safety. player.getPulseManager().run(new MovementPulse(player, Location.create(x, y, player .getLocation().getZ())) { diff --git a/09HDscape-server/src/org/crandor/tools/PlayerLoader.java b/09HDscape-server/src/org/crandor/tools/PlayerLoader.java new file mode 100644 index 000000000..4c212acf3 --- /dev/null +++ b/09HDscape-server/src/org/crandor/tools/PlayerLoader.java @@ -0,0 +1,42 @@ +package org.crandor.tools; + + +import org.crandor.game.node.entity.player.Player; +import org.crandor.game.node.entity.player.info.PlayerDetails; +import org.crandor.game.node.entity.player.info.login.PlayerParser; +import org.crandor.game.world.GameWorld; + +/** + * Represents a class that is used to load a player, or details of it. + * + * @author 'Vexia + */ +public final class PlayerLoader { + + /** + * Method used to load the player file. + * + * @param name the name. + * @return the player. + */ + public static Player getPlayerFile(String name) { + final PlayerDetails playerDetails = new PlayerDetails(name, ""); + playerDetails.parse(); + final Player player = new Player(playerDetails); + PlayerParser.parse(player); +// GameWorld.getWorld().getAccountService().loadPlayer(player); + return player; + } + + /** + * Method used to load the player details file. + * + * @param name the name. + * @return the details + */ + public static PlayerDetails getPlayerDetailFile(String name) { + final PlayerDetails playerDetails = new PlayerDetails(name, ""); + playerDetails.parse(); + return playerDetails; + } +}