From f324145b8d56355e38dd30a4b341f9ea4efbeaf0 Mon Sep 17 00:00:00 2001 From: Obique PSWG Date: Wed, 2 Mar 2016 00:45:31 -0600 Subject: [PATCH] Added ability to create custom objects --- src/services/objects/ObjectCreator.java | 64 ++++++++++++++++++------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/src/services/objects/ObjectCreator.java b/src/services/objects/ObjectCreator.java index 2b26a3740..db914cf14 100644 --- a/src/services/objects/ObjectCreator.java +++ b/src/services/objects/ObjectCreator.java @@ -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 createObjectFromTemplate(long objectId, String template, Class 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 createObjectFromTemplate(String template, Class 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; } }