Cleanup for World class.

This commit is contained in:
MobiusDevelopment
2019-11-21 13:01:05 +00:00
parent 3c3e0ec3e6
commit 750fdf1d6c
11 changed files with 61 additions and 83 deletions

View File

@@ -20,6 +20,7 @@ package org.l2jmobius.gameserver;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.Collection;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -110,8 +111,7 @@ public class AdminCommands extends Thread
} }
else if (command.equals("admin_announce_announcements")) else if (command.equals("admin_announce_announcements"))
{ {
PlayerInstance[] players = World.getInstance().getAllPlayers(); for (PlayerInstance player : World.getInstance().getAllPlayers())
for (PlayerInstance player : players)
{ {
Announcements.getInstance().showAnnouncements(player); Announcements.getInstance().showAnnouncements(player);
} }
@@ -460,12 +460,11 @@ public class AdminCommands extends Thread
public void showMainPage(ClientThread client) public void showMainPage(ClientThread client)
{ {
PlayerInstance activeChar = client.getActiveChar(); PlayerInstance activeChar = client.getActiveChar();
PlayerInstance[] players = World.getInstance().getAllPlayers();
NpcHtmlMessage adminReply = new NpcHtmlMessage(5); NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
StringBuffer replyMSG = new StringBuffer("<html><title>Server Status</title>"); StringBuffer replyMSG = new StringBuffer("<html><title>Server Status</title>");
replyMSG.append("<body>"); replyMSG.append("<body>");
replyMSG.append("<table>"); replyMSG.append("<table>");
replyMSG.append("<tr><td>Players Online: " + players.length + "</td></tr>"); replyMSG.append("<tr><td>Players Online: " + World.getInstance().getAllPlayers().size() + "</td></tr>");
replyMSG.append("<tr><td>Used Memory: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())); replyMSG.append("<tr><td>Used Memory: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
replyMSG.append(" bytes</td></tr>"); replyMSG.append(" bytes</td></tr>");
replyMSG.append("</table>"); replyMSG.append("</table>");
@@ -532,7 +531,8 @@ public class AdminCommands extends Thread
private void listCharacters(ClientThread client, int page) private void listCharacters(ClientThread client, int page)
{ {
PlayerInstance activeChar = client.getActiveChar(); PlayerInstance activeChar = client.getActiveChar();
PlayerInstance[] players = World.getInstance().getAllPlayers(); Collection<PlayerInstance> allWorldPlayers = World.getInstance().getAllPlayers();
PlayerInstance[] players = allWorldPlayers.toArray(new PlayerInstance[allWorldPlayers.size()]);
int MaxCharactersPerPage = 20; int MaxCharactersPerPage = 20;
int MaxPages = players.length / MaxCharactersPerPage; int MaxPages = players.length / MaxCharactersPerPage;
int modulus = players.length % MaxCharactersPerPage; int modulus = players.length % MaxCharactersPerPage;
@@ -823,7 +823,6 @@ public class AdminCommands extends Thread
private void findCharacter(ClientThread client, String CharacterToFind) private void findCharacter(ClientThread client, String CharacterToFind)
{ {
PlayerInstance activeChar = client.getActiveChar(); PlayerInstance activeChar = client.getActiveChar();
PlayerInstance[] players = World.getInstance().getAllPlayers();
NpcHtmlMessage adminReply = new NpcHtmlMessage(5); NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
int CharactersFound = 0; int CharactersFound = 0;
StringBuffer replyMSG = new StringBuffer("<html><title>Character Search</title>"); StringBuffer replyMSG = new StringBuffer("<html><title>Character Search</title>");
@@ -831,7 +830,7 @@ public class AdminCommands extends Thread
replyMSG.append("<br>"); replyMSG.append("<br>");
replyMSG.append("<table>"); replyMSG.append("<table>");
replyMSG.append("<tr><td>Name</td><td>Class</td><td>Level</td></tr>"); replyMSG.append("<tr><td>Name</td><td>Class</td><td>Level</td></tr>");
for (PlayerInstance player : players) for (PlayerInstance player : World.getInstance().getAllPlayers())
{ {
if (!player.getName().startsWith(CharacterToFind)) if (!player.getName().startsWith(CharacterToFind))
{ {
@@ -1002,8 +1001,7 @@ public class AdminCommands extends Thread
private int disconnectAllCharacters() private int disconnectAllCharacters()
{ {
PlayerInstance[] players = World.getInstance().getAllPlayers(); for (PlayerInstance player : World.getInstance().getAllPlayers())
for (PlayerInstance player : players)
{ {
LeaveWorld ql = new LeaveWorld(); LeaveWorld ql = new LeaveWorld();
player.sendPacket(ql); player.sendPacket(ql);
@@ -1163,9 +1161,8 @@ public class AdminCommands extends Thread
public void broadcastToAll(String message) public void broadcastToAll(String message)
{ {
PlayerInstance[] players = World.getInstance().getAllPlayers();
CreatureSay cs = new CreatureSay(0, 9, "[Announcement]", message); CreatureSay cs = new CreatureSay(0, 9, "[Announcement]", message);
for (PlayerInstance player : players) for (PlayerInstance player : World.getInstance().getAllPlayers())
{ {
player.sendPacket(cs); player.sendPacket(cs);
} }

View File

@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.l2jmobius.Config; import org.l2jmobius.Config;
@@ -52,7 +53,7 @@ public class CommunityBoard
StringBuffer htmlCode = new StringBuffer("<html imgsrc=\"sek.cbui353\"><body><br><table border=0><tr><td FIXWIDTH=15></td><td align=center>L2J Community Board<img src=\"sek.cbui355\" width=610 height=1></td></tr><tr><td FIXWIDTH=15></td><td>"); StringBuffer htmlCode = new StringBuffer("<html imgsrc=\"sek.cbui353\"><body><br><table border=0><tr><td FIXWIDTH=15></td><td align=center>L2J Community Board<img src=\"sek.cbui355\" width=610 height=1></td></tr><tr><td FIXWIDTH=15></td><td>");
if (command.equals("bbs_default")) if (command.equals("bbs_default"))
{ {
PlayerInstance[] players = World.getInstance().getAllPlayers(); Collection<PlayerInstance> players = World.getInstance().getAllPlayers();
htmlCode.append("<table border=0>"); htmlCode.append("<table border=0>");
int t = GameTimeController.getInstance().getGameTime(); int t = GameTimeController.getInstance().getGameTime();
int h = t / 60; int h = t / 60;
@@ -67,7 +68,7 @@ public class CommunityBoard
htmlCode.append("<tr><td>Adena Rate: " + Config.RATE_ADENA + "</td></tr>"); htmlCode.append("<tr><td>Adena Rate: " + Config.RATE_ADENA + "</td></tr>");
htmlCode.append("<tr><td>Drop Rate: " + Config.RATE_DROP + "</td></tr>"); htmlCode.append("<tr><td>Drop Rate: " + Config.RATE_DROP + "</td></tr>");
htmlCode.append("<tr><td><img src=\"sek.cbui355\" width=610 height=1><br></td></tr>"); htmlCode.append("<tr><td><img src=\"sek.cbui355\" width=610 height=1><br></td></tr>");
htmlCode.append("<tr><td>" + players.length + " Player(s) Online:</td></tr><tr><td><table border=0><tr>"); htmlCode.append("<tr><td>" + players.size() + " Player(s) Online:</td></tr><tr><td><table border=0><tr>");
int n = 1; int n = 1;
for (PlayerInstance player : players) for (PlayerInstance player : players)
{ {

View File

@@ -77,8 +77,7 @@ public class GameTimeController extends Thread
private void broadcastToPlayers(ServerBasePacket packet) private void broadcastToPlayers(ServerBasePacket packet)
{ {
PlayerInstance[] players = World.getInstance().getAllPlayers(); for (PlayerInstance player : World.getInstance().getAllPlayers())
for (PlayerInstance player : players)
{ {
player.sendPacket(packet); player.sendPacket(packet);
} }

View File

@@ -18,11 +18,11 @@
package org.l2jmobius.gameserver.model; package org.l2jmobius.gameserver.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.l2jmobius.gameserver.PlayerCountManager; import org.l2jmobius.gameserver.PlayerCountManager;
import org.l2jmobius.gameserver.model.actor.instance.ItemInstance; import org.l2jmobius.gameserver.model.actor.instance.ItemInstance;
@@ -31,8 +31,7 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
public class World public class World
{ {
private static Logger _log = Logger.getLogger(World.class.getName()); private final Map<String, PlayerInstance> _allPlayers = new ConcurrentHashMap<>();
private final Map<String, WorldObject> _allPlayers = new ConcurrentHashMap<>();
private final Map<Integer, WorldObject> _allObjects = new ConcurrentHashMap<>(); private final Map<Integer, WorldObject> _allObjects = new ConcurrentHashMap<>();
private final Map<Integer, WorldObject> _visibleObjects = new ConcurrentHashMap<>(); private final Map<Integer, WorldObject> _visibleObjects = new ConcurrentHashMap<>();
private static World _instance; private static World _instance;
@@ -69,10 +68,9 @@ public class World
{ {
if (object instanceof PlayerInstance) if (object instanceof PlayerInstance)
{ {
_allPlayers.put(((PlayerInstance) object).getName().toLowerCase(), object); final PlayerInstance player = (PlayerInstance) object;
WorldObject[] visible = getVisibleObjects(object, 2000); _allPlayers.put(player.getName().toLowerCase(), player);
_log.finest("Objects in range:" + visible.length); for (WorldObject element : getVisibleObjects(object, 2000))
for (WorldObject element : visible)
{ {
object.addKnownObject(element); object.addKnownObject(element);
if ((object instanceof ItemInstance) && element.getKnownObjects().contains(object)) if ((object instanceof ItemInstance) && element.getKnownObjects().contains(object))
@@ -88,11 +86,11 @@ public class World
int x = object.getX(); int x = object.getX();
int y = object.getY(); int y = object.getY();
int sqRadius = 4000000; int sqRadius = 4000000;
Iterator<WorldObject> iter = _allPlayers.values().iterator(); Iterator<PlayerInstance> iter = _allPlayers.values().iterator();
while (iter.hasNext()) while (iter.hasNext())
{ {
long dy; long dy;
PlayerInstance player = (PlayerInstance) iter.next(); PlayerInstance player = iter.next();
int x1 = player.getX(); int x1 = player.getX();
long dx = x1 - x; long dx = x1 - x;
long sqDist = (dx * dx) + ((dy = player.getY() - y) * dy); long sqDist = (dx * dx) + ((dy = player.getY() - y) * dy);
@@ -110,7 +108,6 @@ public class World
public void removeVisibleObject(WorldObject object) public void removeVisibleObject(WorldObject object)
{ {
_visibleObjects.remove(object.getObjectId()); _visibleObjects.remove(object.getObjectId());
// _log.fine("World has now " + this._visibleObjects.size() + " visible objects");
Object[] temp = object.getKnownObjects().toArray(); Object[] temp = object.getKnownObjects().toArray();
for (Object element : temp) for (Object element : temp)
{ {
@@ -128,40 +125,29 @@ public class World
} }
} }
public WorldObject[] getVisibleObjects(WorldObject object, int radius) public Collection<WorldObject> getVisibleObjects(WorldObject object, int radius)
{ {
int x = object.getX(); int x = object.getX();
int y = object.getY(); int y = object.getY();
int sqRadius = radius * radius;
List<WorldObject> result = new ArrayList<>(); List<WorldObject> result = new ArrayList<>();
Iterator<WorldObject> iter = _visibleObjects.values().iterator(); for (WorldObject worldObject : _visibleObjects.values())
while (iter.hasNext())
{ {
@SuppressWarnings("unused") if ((worldObject == null) || worldObject.equals(object) || (Math.sqrt(Math.pow(x - worldObject.getX(), 2) + Math.pow(y - worldObject.getY(), 2)) > radius))
int x1;
@SuppressWarnings("unused")
int y1;
long dx;
long dy;
@SuppressWarnings("unused")
long sqDist;
WorldObject element = iter.next();
if (element.equals(object) || ((sqDist = ((dx = (x1 = element.getX()) - x) * dx) + ((dy = (y1 = element.getY()) - y) * dy)) >= sqRadius))
{ {
continue; continue;
} }
result.add(element); result.add(worldObject);
} }
return result.toArray(new WorldObject[result.size()]); return result;
} }
public PlayerInstance[] getAllPlayers() public Collection<PlayerInstance> getAllPlayers()
{ {
return _allPlayers.values().toArray(new PlayerInstance[_allPlayers.size()]); return _allPlayers.values();
} }
public PlayerInstance getPlayer(String name) public PlayerInstance getPlayer(String name)
{ {
return (PlayerInstance) _allPlayers.get(name.toLowerCase()); return _allPlayers.get(name.toLowerCase());
} }
} }

View File

@@ -45,40 +45,38 @@ public class Appearing extends ClientBasePacket
Connection con = client.getConnection(); Connection con = client.getConnection();
UserInfo ui = new UserInfo(activeChar); UserInfo ui = new UserInfo(activeChar);
con.sendPacket(ui); con.sendPacket(ui);
WorldObject[] visible = World.getInstance().getVisibleObjects(activeChar, 2000); for (WorldObject worldObject : World.getInstance().getVisibleObjects(activeChar, 2000))
_log.fine("npc in range:" + visible.length);
for (int i = 0; i < visible.length; ++i)
{ {
NpcInfo ni; NpcInfo ni;
Creature npc; Creature npc;
activeChar.addKnownObject(visible[i]); activeChar.addKnownObject(worldObject);
if (visible[i] instanceof ItemInstance) if (worldObject instanceof ItemInstance)
{ {
SpawnItem si = new SpawnItem((ItemInstance) visible[i]); SpawnItem si = new SpawnItem((ItemInstance) worldObject);
con.sendPacket(si); con.sendPacket(si);
continue; continue;
} }
if (visible[i] instanceof NpcInstance) if (worldObject instanceof NpcInstance)
{ {
ni = new NpcInfo((NpcInstance) visible[i]); ni = new NpcInfo((NpcInstance) worldObject);
con.sendPacket(ni); con.sendPacket(ni);
npc = (NpcInstance) visible[i]; npc = (NpcInstance) worldObject;
npc.addKnownObject(activeChar); npc.addKnownObject(activeChar);
continue; continue;
} }
if (visible[i] instanceof PetInstance) if (worldObject instanceof PetInstance)
{ {
ni = new NpcInfo((PetInstance) visible[i]); ni = new NpcInfo((PetInstance) worldObject);
con.sendPacket(ni); con.sendPacket(ni);
npc = (PetInstance) visible[i]; npc = (PetInstance) worldObject;
npc.addKnownObject(activeChar); npc.addKnownObject(activeChar);
continue; continue;
} }
if (!(visible[i] instanceof PlayerInstance)) if (!(worldObject instanceof PlayerInstance))
{ {
continue; continue;
} }
PlayerInstance player = (PlayerInstance) visible[i]; PlayerInstance player = (PlayerInstance) worldObject;
con.sendPacket(new CharInfo(player)); con.sendPacket(new CharInfo(player));
player.addKnownObject(activeChar); player.addKnownObject(activeChar);
player.getNetConnection().sendPacket(new CharInfo(activeChar)); player.getNetConnection().sendPacket(new CharInfo(activeChar));

View File

@@ -21,7 +21,6 @@ import java.io.IOException;
import org.l2jmobius.gameserver.ClientThread; import org.l2jmobius.gameserver.ClientThread;
import org.l2jmobius.gameserver.model.World; import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.PartyMatchList; import org.l2jmobius.gameserver.network.serverpackets.PartyMatchList;
public class RequestPartyMatchList extends ClientBasePacket public class RequestPartyMatchList extends ClientBasePacket
@@ -34,8 +33,7 @@ public class RequestPartyMatchList extends ClientBasePacket
int status = readD(); int status = readD();
if (status == 1) if (status == 1)
{ {
PlayerInstance[] allPlayers = World.getInstance().getAllPlayers(); PartyMatchList matchList = new PartyMatchList(World.getInstance().getAllPlayers());
PartyMatchList matchList = new PartyMatchList(allPlayers);
client.getConnection().sendPacket(matchList); client.getConnection().sendPacket(matchList);
} }
else if (status == 3) else if (status == 3)

View File

@@ -72,8 +72,7 @@ public class Say2 extends ClientBasePacket
} }
else if ((type == 1) || (type == 8)) else if ((type == 1) || (type == 8))
{ {
PlayerInstance[] players = World.getInstance().getAllPlayers(); for (PlayerInstance player : World.getInstance().getAllPlayers())
for (PlayerInstance player : players)
{ {
player.sendPacket(cs); player.sendPacket(cs);
} }

View File

@@ -48,8 +48,7 @@ public class SendBypassBuildCmd extends ClientBasePacket
{ {
String text = command.substring(9); String text = command.substring(9);
CreatureSay cs = new CreatureSay(0, 10, activeChar.getName(), text); CreatureSay cs = new CreatureSay(0, 10, activeChar.getName(), text);
PlayerInstance[] players = World.getInstance().getAllPlayers(); for (PlayerInstance player : World.getInstance().getAllPlayers())
for (PlayerInstance player : players)
{ {
player.sendPacket(cs); player.sendPacket(cs);
} }

View File

@@ -83,15 +83,14 @@ public class ValidatePosition extends ClientBasePacket
_log.fine("deleted " + delete + " objects"); _log.fine("deleted " + delete + " objects");
} }
int newObjects = 0; int newObjects = 0;
WorldObject[] visible = World.getInstance().getVisibleObjects(activeChar, 3000); for (WorldObject worldObject : World.getInstance().getVisibleObjects(activeChar, 3000))
for (WorldObject element : visible)
{ {
if (activeChar.knownsObject(element)) if (activeChar.knownsObject(worldObject))
{ {
continue; continue;
} }
activeChar.addKnownObject(element); activeChar.addKnownObject(worldObject);
element.addKnownObject(activeChar); worldObject.addKnownObject(activeChar);
++newObjects; ++newObjects;
} }
if (newObjects > 0) if (newObjects > 0)

View File

@@ -17,14 +17,16 @@
*/ */
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import java.util.Collection;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance; import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
public class PartyMatchList extends ServerBasePacket public class PartyMatchList extends ServerBasePacket
{ {
private static final String _S__AF_PARTYMATCHLIST = "[S] AF PartyMatchList"; private static final String _S__AF_PARTYMATCHLIST = "[S] AF PartyMatchList";
private final PlayerInstance[] _matchingPlayers; private final Collection<PlayerInstance> _matchingPlayers;
public PartyMatchList(PlayerInstance[] allPlayers) public PartyMatchList(Collection<PlayerInstance> allPlayers)
{ {
_matchingPlayers = allPlayers; _matchingPlayers = allPlayers;
} }
@@ -33,24 +35,24 @@ public class PartyMatchList extends ServerBasePacket
public byte[] getContent() public byte[] getContent()
{ {
writeC(175); writeC(175);
int size = _matchingPlayers.length; int size = _matchingPlayers.size();
if (size > 40) if (size > 40)
{ {
size = 40; size = 40;
} }
writeD(size); writeD(size);
for (int i = 0; i < size; ++i) for (PlayerInstance player : _matchingPlayers)
{ {
writeD(_matchingPlayers[i].getObjectId()); writeD(player.getObjectId());
writeS(_matchingPlayers[i].getName()); writeS(player.getName());
writeD(_matchingPlayers[i].getLevel()); writeD(player.getLevel());
writeD(_matchingPlayers[i].getClassId()); writeD(player.getClassId());
writeD(0); writeD(0);
writeD(_matchingPlayers[i].getClanId()); writeD(player.getClanId());
writeD(0); writeD(0);
writeD(_matchingPlayers[i].getX()); writeD(player.getX());
writeD(_matchingPlayers[i].getY()); writeD(player.getY());
writeD(_matchingPlayers[i].getZ()); writeD(player.getZ());
} }
return getBytes(); return getBytes();
} }

View File

@@ -116,7 +116,7 @@ public class SystemPanel extends JPanel
@Override @Override
public void run() public void run()
{ {
lblConnected.setText("Connected: " + World.getInstance().getAllPlayers().length); lblConnected.setText("Connected: " + World.getInstance().getAllPlayers().size());
lblMaxConnected.setText("Max connected: " + PlayerCountManager.getInstance().getMaxConnectedCount()); lblMaxConnected.setText("Max connected: " + PlayerCountManager.getInstance().getMaxConnectedCount());
lblElapsedTime.setText("Elapsed: " + getDurationBreakdown(System.currentTimeMillis() - startTime)); lblElapsedTime.setText("Elapsed: " + getDurationBreakdown(System.currentTimeMillis() - startTime));
} }