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

View File

@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.StringTokenizer;
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>");
if (command.equals("bbs_default"))
{
PlayerInstance[] players = World.getInstance().getAllPlayers();
Collection<PlayerInstance> players = World.getInstance().getAllPlayers();
htmlCode.append("<table border=0>");
int t = GameTimeController.getInstance().getGameTime();
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>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>" + 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;
for (PlayerInstance player : players)
{

View File

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

View File

@@ -18,11 +18,11 @@
package org.l2jmobius.gameserver.model;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.l2jmobius.gameserver.PlayerCountManager;
import org.l2jmobius.gameserver.model.actor.instance.ItemInstance;
@@ -31,8 +31,7 @@ import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
public class World
{
private static Logger _log = Logger.getLogger(World.class.getName());
private final Map<String, WorldObject> _allPlayers = new ConcurrentHashMap<>();
private final Map<String, PlayerInstance> _allPlayers = new ConcurrentHashMap<>();
private final Map<Integer, WorldObject> _allObjects = new ConcurrentHashMap<>();
private final Map<Integer, WorldObject> _visibleObjects = new ConcurrentHashMap<>();
private static World _instance;
@@ -69,10 +68,9 @@ public class World
{
if (object instanceof PlayerInstance)
{
_allPlayers.put(((PlayerInstance) object).getName().toLowerCase(), object);
WorldObject[] visible = getVisibleObjects(object, 2000);
_log.finest("Objects in range:" + visible.length);
for (WorldObject element : visible)
final PlayerInstance player = (PlayerInstance) object;
_allPlayers.put(player.getName().toLowerCase(), player);
for (WorldObject element : getVisibleObjects(object, 2000))
{
object.addKnownObject(element);
if ((object instanceof ItemInstance) && element.getKnownObjects().contains(object))
@@ -88,11 +86,11 @@ public class World
int x = object.getX();
int y = object.getY();
int sqRadius = 4000000;
Iterator<WorldObject> iter = _allPlayers.values().iterator();
Iterator<PlayerInstance> iter = _allPlayers.values().iterator();
while (iter.hasNext())
{
long dy;
PlayerInstance player = (PlayerInstance) iter.next();
PlayerInstance player = iter.next();
int x1 = player.getX();
long dx = x1 - x;
long sqDist = (dx * dx) + ((dy = player.getY() - y) * dy);
@@ -110,7 +108,6 @@ public class World
public void removeVisibleObject(WorldObject object)
{
_visibleObjects.remove(object.getObjectId());
// _log.fine("World has now " + this._visibleObjects.size() + " visible objects");
Object[] temp = object.getKnownObjects().toArray();
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 y = object.getY();
int sqRadius = radius * radius;
List<WorldObject> result = new ArrayList<>();
Iterator<WorldObject> iter = _visibleObjects.values().iterator();
while (iter.hasNext())
for (WorldObject worldObject : _visibleObjects.values())
{
@SuppressWarnings("unused")
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))
if ((worldObject == null) || worldObject.equals(object) || (Math.sqrt(Math.pow(x - worldObject.getX(), 2) + Math.pow(y - worldObject.getY(), 2)) > radius))
{
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)
{
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();
UserInfo ui = new UserInfo(activeChar);
con.sendPacket(ui);
WorldObject[] visible = World.getInstance().getVisibleObjects(activeChar, 2000);
_log.fine("npc in range:" + visible.length);
for (int i = 0; i < visible.length; ++i)
for (WorldObject worldObject : World.getInstance().getVisibleObjects(activeChar, 2000))
{
NpcInfo ni;
Creature npc;
activeChar.addKnownObject(visible[i]);
if (visible[i] instanceof ItemInstance)
activeChar.addKnownObject(worldObject);
if (worldObject instanceof ItemInstance)
{
SpawnItem si = new SpawnItem((ItemInstance) visible[i]);
SpawnItem si = new SpawnItem((ItemInstance) worldObject);
con.sendPacket(si);
continue;
}
if (visible[i] instanceof NpcInstance)
if (worldObject instanceof NpcInstance)
{
ni = new NpcInfo((NpcInstance) visible[i]);
ni = new NpcInfo((NpcInstance) worldObject);
con.sendPacket(ni);
npc = (NpcInstance) visible[i];
npc = (NpcInstance) worldObject;
npc.addKnownObject(activeChar);
continue;
}
if (visible[i] instanceof PetInstance)
if (worldObject instanceof PetInstance)
{
ni = new NpcInfo((PetInstance) visible[i]);
ni = new NpcInfo((PetInstance) worldObject);
con.sendPacket(ni);
npc = (PetInstance) visible[i];
npc = (PetInstance) worldObject;
npc.addKnownObject(activeChar);
continue;
}
if (!(visible[i] instanceof PlayerInstance))
if (!(worldObject instanceof PlayerInstance))
{
continue;
}
PlayerInstance player = (PlayerInstance) visible[i];
PlayerInstance player = (PlayerInstance) worldObject;
con.sendPacket(new CharInfo(player));
player.addKnownObject(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.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.PartyMatchList;
public class RequestPartyMatchList extends ClientBasePacket
@@ -34,8 +33,7 @@ public class RequestPartyMatchList extends ClientBasePacket
int status = readD();
if (status == 1)
{
PlayerInstance[] allPlayers = World.getInstance().getAllPlayers();
PartyMatchList matchList = new PartyMatchList(allPlayers);
PartyMatchList matchList = new PartyMatchList(World.getInstance().getAllPlayers());
client.getConnection().sendPacket(matchList);
}
else if (status == 3)

View File

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

View File

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

View File

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

View File

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

View File

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