diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java index e7cc275aab4f48322149e0a94cec9abc0f239f13..4638afb99ba7aeaeabd645dda2857b4ce9556470 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EffectData.java @@ -96,6 +96,8 @@ public abstract class EffectData extends AbstractInterceptingVertexFrame { } private StatData createApplyStatOnTickData() { + if (this.getApplyStatOnTickData() != null) + throw new IllegalStateException("Already has stats, can't create another"); StatData statData = this.createOrphanStats(); this.addApplyStatOnTickData(statData); return statData; @@ -123,14 +125,14 @@ public abstract class EffectData extends AbstractInterceptingVertexFrame { } private StatData createDurationStatData() { + if (this.getDurationStatData() != null) + throw new IllegalStateException("Already has stats, can't create another"); StatData statData = this.createOrphanStats(); this.addDurationStatData(statData); return statData; } private StatData createOrphanStats() { - if (this.getDurationStatData() != null) - throw new IllegalStateException("Already has stats, can't create another"); final StatData stats = this.getGraph().addFramedVertex(StatData.class); stats.setAgile(0); stats.setAim(0); @@ -156,8 +158,8 @@ public abstract class EffectData extends AbstractInterceptingVertexFrame { public static void copyEffect(EffectData dest, Effect src) { try { PropertyUtils.copyProperties(dest, src); - StatData.copyStats(dest.createApplyStatOnTickData(), src.getApplyStatsOnTick()); - StatData.copyStats(dest.createDurationStatData(), src.getDurationStats()); + StatData.copyStats((dest.getApplyStatOnTickData() != null ? dest.getApplyStatOnTickData() : dest.createApplyStatOnTickData()), src.getApplyStatsOnTick()); + StatData.copyStats((dest.getDurationStatData() != null ? dest.getDurationStatData() : dest.createDurationStatData()), src.getDurationStats()); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new IllegalStateException("Could not copy properties", e); } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java index 1bff49e216b2afa0891d21058ce5679038c8eaa6..06924124951d3ea14ae5fe6c84f3124f78152b18 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/EquipmentData.java @@ -87,7 +87,7 @@ public abstract class EquipmentData extends AbstractVertexFrame { public static void copyEquipment(EquipmentData dest, Equipment src) { try { PropertyUtils.copyProperties(dest, src); - StatData.copyStats(dest.getStatData(), src.getStats()); + StatData.copyStats((dest.getStatData() != null ? dest.getStatData() : dest.createStatData()), src.getStats()); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new IllegalStateException("Could not copy properties", e); } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java index 6750709e7320f2773764edd3fba3cddfd95733b4..278844e7bc50fdcac0346f3f6abe92b8bc421a56 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/NpcData.java @@ -282,16 +282,32 @@ public abstract class NpcData extends AbstractInterceptingVertexFrame { public static void copyNpc(NpcData dest, Npc src) { try { PropertyUtils.copyProperties(dest, src); - LootData.copyLoot(dest.createLootData(), src.getLoot()); - StatData.copyStats(dest.createStatsData(), src.getStats()); + LootData.copyLoot((dest.getLootData() != null ? dest.getLootData() : dest.createLootData()), src.getLoot()); + StatData.copyStats((dest.getStatsData() != null ? dest.getStatsData() : dest.createStatsData()), src.getStats()); + + for(SpawnRuleData data : dest.getSpawnRuleDatas()) + data.remove(); for(SpawnRule spawnRule : src.getSpawnRules()) SpawnRuleData.copySpawnRule(dest.createSpawnRuleData(), spawnRule); + + for(AetherMudMessageData data : dest.getAttackMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getAttackMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createAttackMessageData(), message); + + + for(AetherMudMessageData data : dest.getBattleMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getBattleMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createBattleMessageData(), message); + + for(AetherMudMessageData data : dest.getCriticalAttackMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getCriticalAttackMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createCriticalAttackMessageData(), message); + + for(AetherMudMessageData data : dest.getIdleMessageDatas()) + data.remove(); for(AetherMudMessage message : src.getIdleMessages()) AetherMudMessageData.copyAetherMudMessage(dest.createIdleMessageData(), message); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {