Code:
package server.world;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import server.model.objects.Objects;
import server.model.players.Client;
import server.model.players.Player;
import server.model.players.PlayerHandler;
import server.util.Misc;
import server.clip.region.Region;
import java.util.Map;
import java.util.Iterator;
/**
* @author Sanity
*/
public class ObjectHandler {
public static List<Objects> globalObjects = new ArrayList<Objects>();
public ObjectHandler() {
loadGlobalObjects("./Data/cfg/global-objects.cfg");
}
/**
* Adds object to list
**/
public static void addObject(Objects object) {
globalObjects.add(object);
}
/**
* Removes object from list
**/
public static void removeObject(Objects object) {
globalObjects.remove(object);
}
public static void globalRemoveObject(Objects o) {
if (o == null)
return;
int objectX = o.getObjectX();
int objectY = o.getObjectY();
int objectHeight = o.getObjectHeight();
int objectId = o.getObjectId();
int objectTicks = o.objectTicks;
globalObjects.remove(o);
if (objectId == -1 || objectId == 4425 || objectId == 4466 || objectId == 4429 || objectId == 4468)
Region.removeClipping(objectX, objectY, objectHeight);
for (Player p : PlayerHandler.players){
if(p == null)
continue;
Client person = (Client)p;
if(person.heightLevel == objectHeight && objectTicks == 0) {
if (person.distanceToPoint(objectX, objectY) <= 60)
person.getPA().object(-1, objectX, objectY, 0, 10);
}
}
}
/**
* Does object exist
**/
public static Objects objectExists(int objectX, int objectY, int objectHeight) {
for(Objects o : globalObjects) {
if(o.getObjectX() == objectX && o.getObjectY() == objectY && o.getObjectHeight() == objectHeight) {
return o;
}
}
return null;
}
/**
* Update objects when entering a new region or logging in
**/
public static void updateObjects(Client c) {
; for(Objects o : globalObjects) {
if(c != null) {
if(c.heightLevel == o.getObjectHeight()) {
if (c.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60) {
c.getPA().object(o.getObjectId(), o.getObjectX(), o.getObjectY(), o.getObjectFace(), o.getObjectType());
}
}
}
}
//if (c.distanceToPoint(2813, 3463) <= 60) {
//c.getFarming().updateHerbPatch();
//}
if (c.distanceToPoint(2961, 3389) <= 60) {
c.getPA().object(6552, 2961, 3389, -1, 10);
}
if (c.oilnettle1 == 0) {
c.getPA().object(1181, 2762, 3498, 0, 10);//nettle
}
if (c.oilnettle2 == 0) {
c.getPA().object(1181, 2762, 3501, 1, 10);//nettle
}
if (c.oilnettle3 == 0) {
c.getPA().object(1181, 2758, 3501, 2, 10);//nettle
}
if (c.oilnettle4 == 0) {
c.getPA().object(1181, 2754, 3501, 1, 10);//nettle
}
if (c.oilnettle5 == 0) {
c.getPA().object(1181, 2754, 3497, 2, 10);//nettle
}
if (c.oilnettle6 == 0) {
c.getPA().object(1181, 2760, 3496, 0, 10);//nettle
}
}
/**
* Creates the object for anyone who is within 60 squares of the object
**/
public static void placeObject(Objects o) {
if (o.getObjectId() != 2732)
removeAllObjects(o);
globalObjects.add(o);
int objectId = o.getObjectId();
if (objectId != 4439 && objectId != 2732 && objectId != 4900 && objectId != 4901 && objectId != 14825 && objectId != 1343 && objectId != 734 && objectId != -1 && objectId != 1531 && objectId != 1517 && objectId != 1520)// && objectId != 4466 && objectId != 4466 && objectId != 4425
Region.addObject(objectId, o.getObjectX(), o.getObjectY(), o.getObjectHeight(), o.getObjectType(), o.getObjectFace());
if (objectId == -1 || objectId == 734 || objectId == 4425 || objectId == 4466 || objectId == 4429 || objectId == 4468 || objectId == 1531 || objectId == 1517 || objectId == 1520 || objectId == 4439)
Region.removeClipping(o.getObjectX(), o.getObjectY(), o.getObjectHeight());
for (Player p : PlayerHandler.players){
if(p == null)
continue;
Client person = (Client)p;
if(person.heightLevel == o.getObjectHeight()) {
if (person.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60)
person.getPA().object(objectId, o.getObjectX(), o.getObjectY(), o.getObjectFace(), o.getObjectType());
}
}
}
/**
* addToGlobalList : add to global objects or not
**/
public static void placeSpecialObject(Objects o, boolean addToGlobalList) {
if (o.getObjectId() != 2732)
removeAllObjects(o);
if (addToGlobalList)
globalObjects.add(o);
int objectId = o.getObjectId();
for (Player p : PlayerHandler.players){
if(p == null)
continue;
Client person = (Client)p;
if(person.heightLevel == o.getObjectHeight()) {
if (person.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60)
person.getPA().object(objectId, o.getObjectX(), o.getObjectY(), o.getObjectFace(), o.getObjectType());
}
}
}
/**
* Creates the object for all minigame players who is within 60 squares of the object
**/
@SuppressWarnings("rawtypes")
public static void placeMinigameObject(Objects o, Map<Client, Integer> minigamePlayers) {
removeAllObjects(o);
globalObjects.add(o);
int objectId = o.getObjectId();
if (objectId != 4439 && objectId != 2732 && objectId != 4900 && objectId != 4901 && objectId != 14825 && objectId != 1343 && objectId != 734 && objectId != -1 && objectId != 1531 && objectId != 1517 && objectId != 1520)// && objectId != 4466 && objectId != 4466 && objectId != 4425
Region.addObject(objectId, o.getObjectX(), o.getObjectY(), o.getObjectHeight(), o.getObjectType(), o.getObjectFace());
if (objectId == -1 || objectId == 734 || objectId == 4425 || objectId == 4466 || objectId == 4429 || objectId == 4468 || objectId == 1531 || objectId == 1517 || objectId == 1520 || objectId == 4439)
Region.removeClipping(o.getObjectX(), o.getObjectY(), o.getObjectHeight());
Iterator iterator = minigamePlayers.keySet().iterator();
while (iterator.hasNext()) {
Client minigamePlayer = (Client) iterator.next();
if(minigamePlayer.heightLevel == o.getObjectHeight()) {
if (minigamePlayer.distanceToPoint(o.getObjectX(), o.getObjectY()) <= 60)
minigamePlayer.getPA().object(objectId, o.getObjectX(), o.getObjectY(), o.getObjectFace(), o.getObjectType());
}
}
}
/**
* Creating a global object mostly on startup
**/
public static void addGlobalObject(int objectId, int absX, int absY, int face, int objectType) {
Objects globalObject = new Objects(objectId, absX, absY, objectId == 104 ? 1 : 0, face, objectType, 0);
globalObjects.add(globalObject);
if (objectId != -1)
Region.addObject(objectId, globalObject.getObjectX(), globalObject.getObjectY(), globalObject.getObjectHeight(), globalObject.getObjectType(), globalObject.getObjectFace());
}
public static void removeAllObjects(Objects o) {
for (Objects s : globalObjects) {
if (s.getObjectX() == o.objectX && s.getObjectY() == o.objectY && s.getObjectHeight() == o.getObjectHeight()) {
globalObjects.remove(s);
break;
}
}
}
public static void process() {//process()
for (int j = 0; j < globalObjects.size(); j++) {
if (globalObjects.get(j) != null) {
Objects o = globalObjects.get(j);
if(o.objectTicks > 1) {
o.objectTicks--;
} else if (o.objectTicks == 1) {
Objects deleteObject = objectExists(o.getObjectX(), o.getObjectY(), o.getObjectHeight());
removeObject(deleteObject);
o.objectTicks = 0;
if (o.getReplacementId() != -1) {
boolean addGlobal = false;
if (o.getReplacementId() == 1306)
addGlobal = true;
placeSpecialObject(new Objects(o.getReplacementId(), o.objectX-1, o.objectY-1, o.objectHeight, 0, 10, 0), addGlobal);
placeSpecialObject(new Objects(-1, o.objectX, o.objectY, o.objectHeight, 0, 10, 0), false);
//System.out.println("YOU GOT IT");
}
if (o.objectId == 734) {
Objects normalWeb = new Objects(733, o.objectX, o.objectY, o.objectHeight, 0, 10, 0);
placeObject(normalWeb);
} else if (isObelisk(o.objectId)) {
int index = getObeliskIndex(o.objectId);
if (activated[index]) {
activated[index] = false;
teleportObelisk(index);
}
}
}
}
}
}
@SuppressWarnings("resource")
public static boolean loadGlobalObjects(String fileName) {
String line = "";
String token = "";
String token2 = "";
String token2_2 = "";
String[] token3 = new String[10];
boolean EndOfFile = false;
BufferedReader objectFile = null;
try {
objectFile = new BufferedReader(new FileReader("./"+fileName));
} catch(FileNotFoundException fileex) {
Misc.println(fileName+": file not found.");
return false;
}
try {
line = objectFile.readLine();
} catch(IOException ioexception) {
Misc.println(fileName+": error loading file.");
return false;
}
while(EndOfFile == false && line != null) {
line = line.trim();
int spot = line.indexOf("=");
if (spot > -1) {
token = line.substring(0, spot);
token = token.trim();
token2 = line.substring(spot + 1);
token2 = token2.trim();
token2_2 = token2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token2_2 = token2_2.replaceAll("\t\t", "\t");
token3 = token2_2.split("\t");
if (token.equals("object")) {
Objects object = new Objects(Integer.parseInt(token3[0]), Integer.parseInt(token3[1]), Integer.parseInt(token3[2]), Integer.parseInt(token3[3]), Integer.parseInt(token3[4]), Integer.parseInt(token3[5]), 0);
addObject(object);
}
} else {
if (line.equals("[ENDOFOBJECTLIST]")) {
try { objectFile.close(); } catch(IOException ioexception) { }
return true;
}
}
try {
line = objectFile.readLine();
} catch(IOException ioexception1) { EndOfFile = true; }
}
try { objectFile.close(); } catch(IOException ioexception) { }
return false;
}
public static final int IN_USE_ID = 14825;
public static boolean isObelisk(int id) {
for (int j = 0; j < obeliskIds.length; j++) {
if (obeliskIds[j] == id)
return true;
}
return false;
}
public static int[] obeliskIds = {14829,14830,14827,14828,14826,14831};
public static int[][] obeliskCoords = {{3154,3618},{3225,3665},{3033,3730},{3104,3792},{2978,3864},{3305,3914}};
public static boolean[] activated = {false,false,false,false,false,false};
public static void startObelisk(int obeliskId) {
int index = getObeliskIndex(obeliskId);
if (index >= 0) {
if (!activated[index]) {
activated[index] = true;
Objects obby1 = new Objects(14825, obeliskCoords[index][0], obeliskCoords[index][1], 0, -1, 10, 0);
Objects obby2 = new Objects(14825, obeliskCoords[index][0] + 4, obeliskCoords[index][1], 0, -1, 10, 0);
Objects obby3 = new Objects(14825, obeliskCoords[index][0], obeliskCoords[index][1] + 4, 0, -1, 10, 0);
Objects obby4 = new Objects(14825, obeliskCoords[index][0] + 4, obeliskCoords[index][1] + 4, 0, -1, 10, 0);
addObject(obby1);
addObject(obby2);
addObject(obby3);
addObject(obby4);
ObjectHandler.placeObject(obby1);
ObjectHandler.placeObject(obby2);
ObjectHandler.placeObject(obby3);
ObjectHandler.placeObject(obby4);
Objects obby5 = new Objects(obeliskIds[index], obeliskCoords[index][0], obeliskCoords[index][1], 0, -1, 10, 10);
Objects obby6 = new Objects(obeliskIds[index], obeliskCoords[index][0] + 4, obeliskCoords[index][1], 0, -1, 10, 10);
Objects obby7 = new Objects(obeliskIds[index], obeliskCoords[index][0], obeliskCoords[index][1] + 4, 0, -1, 10, 10);
Objects obby8 = new Objects(obeliskIds[index], obeliskCoords[index][0] + 4, obeliskCoords[index][1] + 4, 0, -1, 10, 10);
addObject(obby5);
addObject(obby6);
addObject(obby7);
addObject(obby8);
}
}
}
public static int getObeliskIndex(int id) {
for (int j = 0; j < obeliskIds.length; j++) {
if (obeliskIds[j] == id)
return j;
}
return -1;
}
public static void teleportObelisk(int port) {
int random = Misc.random(5);
while (random == port) {
random = Misc.random(5);
}
for (int j = 0; j < PlayerHandler.players.length; j++) {
if (PlayerHandler.players[j] != null) {
Client c = (Client)PlayerHandler.players[j];
if (Misc.goodDistance(c.getX(), c.getY(), obeliskCoords[port][0] + 2, obeliskCoords[port][1] + 2, 1)) {
c.getPA().startTeleport2(obeliskCoords[random][0] + 2, obeliskCoords[random][1] + 2, 0);
}
}
}
}
}