Added ability to create custom objects

This commit is contained in:
Obique PSWG
2016-03-02 00:45:31 -06:00
parent dcec51a24d
commit f324145b8d
+47 -17
View File
@@ -27,6 +27,7 @@
***********************************************************************************/
package services.objects;
import java.lang.reflect.InvocationTargetException;
import java.util.Map.Entry;
import resources.client_info.ClientFactory;
@@ -40,8 +41,10 @@ import resources.objects.cell.CellObject;
import resources.objects.creature.CreatureObject;
import resources.objects.factory.FactoryObject;
import resources.objects.group.GroupObject;
import resources.objects.guild.GuildObject;
import resources.objects.installation.InstallationObject;
import resources.objects.intangible.IntangibleObject;
import resources.objects.manufacture.ManufactureSchematicObject;
import resources.objects.player.PlayerObject;
import resources.objects.resource.ResourceContainerObject;
import resources.objects.ship.ShipObject;
@@ -78,6 +81,23 @@ public final class ObjectCreator {
return obj;
}
public static <T extends SWGObject> T createObjectFromTemplate(long objectId, String template, Class <T> c) {
T obj;
try {
obj = c.getConstructor(Integer.TYPE).newInstance(objectId);
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
e.printStackTrace();
obj = null;
}
if (obj == null)
return null;
obj.setTemplate(template);
handlePostCreation(obj);
updateMaxObjectId(objectId);
return obj;
}
public static SWGObject createObjectFromTemplate(String template) {
long id = 0;
synchronized (OBJECT_ID_MUTEX) {
@@ -86,25 +106,35 @@ public final class ObjectCreator {
return createObjectFromTemplate(id, template);
}
public static <T extends SWGObject> T createObjectFromTemplate(String template, Class <T> c) {
long id = 0;
synchronized (OBJECT_ID_MUTEX) {
id = maxObjectId++;
}
return createObjectFromTemplate(id, template, c);
}
private static SWGObject createObjectFromType(long objectId, String type) {
switch (type) {
case "building": return new BuildingObject(objectId);
case "cell": return new CellObject(objectId);
case "creature": return new CreatureObject(objectId);
case "factory": return new FactoryObject(objectId);
case "group": return new GroupObject(objectId);
case "installation": return new InstallationObject(objectId);
case "intangible": return new IntangibleObject(objectId);
case "mobile": return new CreatureObject(objectId);
case "player": return new PlayerObject(objectId);
case "resource_container": return new ResourceContainerObject(objectId);
case "ship": return new ShipObject(objectId);
case "soundobject": return new SoundObject(objectId);
case "static": return new StaticObject(objectId);
case "tangible": return new TangibleObject(objectId);
case "waypoint": return new WaypointObject(objectId);
case "weapon": return new WeaponObject(objectId);
default: System.err.println("Unknown type: " + type); return null;
case "building": return new BuildingObject(objectId);
case "cell": return new CellObject(objectId);
case "creature": return new CreatureObject(objectId);
case "factory": return new FactoryObject(objectId);
case "group": return new GroupObject(objectId);
case "guild": return new GuildObject(objectId);
case "installation": return new InstallationObject(objectId);
case "intangible": return new IntangibleObject(objectId);
case "manufacture_schematic": return new ManufactureSchematicObject(objectId);
case "mobile": return new CreatureObject(objectId);
case "player": return new PlayerObject(objectId);
case "resource_container": return new ResourceContainerObject(objectId);
case "ship": return new ShipObject(objectId);
case "soundobject": return new SoundObject(objectId);
case "static": return new StaticObject(objectId);
case "tangible": return new TangibleObject(objectId);
case "waypoint": return new WaypointObject(objectId);
case "weapon": return new WeaponObject(objectId);
default: System.err.println("Unknown type: " + type); return null;
}
}