From 628f73fe63ca44d4189abb31b3b98cad5ce1a04d Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> Date: Sun, 3 Sep 2017 19:02:23 -0400 Subject: [PATCH] fix: fixed item effects (I think). --- .../com/syncleus/aethermud/items/Item.java | 4 +- .../syncleus/aethermud/items/ItemBuilder.java | 7 +- .../syncleus/aethermud/items/ItemPojo.java | 8 +-- .../aethermud/storage/graphdb/ItemData.java | 65 +++++++++++++++---- 4 files changed, 63 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/syncleus/aethermud/items/Item.java b/src/main/java/com/syncleus/aethermud/items/Item.java index 3ea5f860..7a146b20 100644 --- a/src/main/java/com/syncleus/aethermud/items/Item.java +++ b/src/main/java/com/syncleus/aethermud/items/Item.java @@ -70,9 +70,9 @@ public interface Item { int getValueInGold(); - void setEffects(Set<EffectPojo> effects); + void setEffects(Set<Effect> effects); - Set<EffectPojo> getEffects(); + Set<Effect> getEffects(); void setItemName(String itemName); diff --git a/src/main/java/com/syncleus/aethermud/items/ItemBuilder.java b/src/main/java/com/syncleus/aethermud/items/ItemBuilder.java index 013e931c..0184646b 100644 --- a/src/main/java/com/syncleus/aethermud/items/ItemBuilder.java +++ b/src/main/java/com/syncleus/aethermud/items/ItemBuilder.java @@ -40,7 +40,7 @@ public class ItemBuilder { private Equipment equipment; private Rarity rarity; private int valueInGold; - private Set<EffectPojo> effects; + private Set<Effect> effects; private boolean hasBeenWithPlayer; private int maxUses; private boolean isDisposable; @@ -65,7 +65,8 @@ public class ItemBuilder { this.isDisposable = itemMetadata.isDisposable(); this.equipment = itemMetadata.getEquipment(); this.validTimeOfDays = itemMetadata.getValidTimeOfDays(); - this.effects = itemMetadata.getEffects(); + Set<EffectPojo> effects = itemMetadata.getEffects(); + this.effects = (effects != null ? Sets.newHashSet(itemMetadata.getEffects()) : null ); this.itemApplyStats = itemMetadata.getItemApplyStats(); return this; } @@ -160,7 +161,7 @@ public class ItemBuilder { return this; } - public ItemBuilder effects(Set<EffectPojo> effects) { + public ItemBuilder effects(Set<Effect> effects) { this.effects = effects; return this; } diff --git a/src/main/java/com/syncleus/aethermud/items/ItemPojo.java b/src/main/java/com/syncleus/aethermud/items/ItemPojo.java index 5c5122ef..e6eb897a 100644 --- a/src/main/java/com/syncleus/aethermud/items/ItemPojo.java +++ b/src/main/java/com/syncleus/aethermud/items/ItemPojo.java @@ -40,7 +40,7 @@ public class ItemPojo implements Serializable, Item { private Equipment equipment; private Rarity rarity; private int valueInGold; - private Set<EffectPojo> effects; + private Set<Effect> effects; private boolean hasBeenWithPlayer; private int maxUses; private boolean isDisposable; @@ -49,7 +49,7 @@ public class ItemPojo implements Serializable, Item { public static final String CORPSE_INTENAL_NAME = "corpse"; - protected ItemPojo(String itemName, String itemDescription, String internalItemName, List<String> itemTriggers, String restingName, String itemId, int numberOfUses, boolean isWithPlayer, Loot loot, int itemHalfLifeTicks, Equipment equipment, Rarity rarity, int valueInGold, Set<EffectPojo> effects, boolean hasBeenWithPlayer, int maxUses, boolean isDisposable, Set<TimeTracker.TimeOfDay> validTimeOfDays, Stats itemApplyStats) { + protected ItemPojo(String itemName, String itemDescription, String internalItemName, List<String> itemTriggers, String restingName, String itemId, int numberOfUses, boolean isWithPlayer, Loot loot, int itemHalfLifeTicks, Equipment equipment, Rarity rarity, int valueInGold, Set<Effect> effects, boolean hasBeenWithPlayer, int maxUses, boolean isDisposable, Set<TimeTracker.TimeOfDay> validTimeOfDays, Stats itemApplyStats) { this.itemName = itemName; this.itemDescription = itemDescription; this.internalItemName = internalItemName; @@ -191,12 +191,12 @@ public class ItemPojo implements Serializable, Item { } @Override - public void setEffects(Set<EffectPojo> effects) { + public void setEffects(Set<Effect> effects) { this.effects = effects; } @Override - public Set<EffectPojo> getEffects() { + public Set<Effect> getEffects() { return effects; } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/ItemData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/ItemData.java index 5366297b..cafc92e0 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/ItemData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/ItemData.java @@ -15,6 +15,7 @@ */ package com.syncleus.aethermud.storage.graphdb; +import com.google.common.collect.Sets; import com.syncleus.aethermud.core.service.TimeTracker; import com.syncleus.aethermud.items.*; import com.syncleus.aethermud.stats.Stats; @@ -126,14 +127,6 @@ public abstract class ItemData extends AbstractVertexFrame implements Item { @Property("ValueInGold") public abstract int getValueInGold(); - @Override - @Property("Effects") - public abstract void setEffects(Set<EffectPojo> effects); - - @Override - @Property("Effects") - public abstract Set<EffectPojo> getEffects(); - @Override @Property("ItemName") public abstract void setItemName(String itemName); @@ -179,7 +172,56 @@ public abstract class ItemData extends AbstractVertexFrame implements Item { @Property("HasBeenWithPlayer") public abstract boolean isHasBeenWithPlayer(); - @Adjacency(label = "Stats", direction = Direction.OUT) + @Adjacency(label = "Effects", direction = Direction.OUT) + public abstract EffectData addEffect(EffectData effects); + + @Adjacency(label = "Effects", direction = Direction.OUT) + public abstract void removeEffect(EffectData stats); + + @Adjacency(label = "Effects", direction = Direction.OUT) + public abstract <N extends EffectData> Iterator<? extends N> getEffects(Class<? extends N> type); + + @Override + public Set<Effect> getEffects() { + return Sets.newHashSet(this.getEffects(EffectData.class)); + } + + @Override + public void setEffects(Set<Effect> effects) { + Iterator<? extends EffectData> existingAll = this.getEffects(EffectData.class); + if( existingAll != null ) { + while( existingAll.hasNext() ) { + EffectData existing = existingAll.next(); + this.removeEffect(existing); + existing.remove(); + } + + } + + if( effects == null || effects.size() == 0 ) { + return; + } + + for( Effect effect : effects ) { + if (effect instanceof EffectData) { + this.addEffect((EffectData) effect); + } else { + try { + PropertyUtils.copyProperties(this.createEffect(), effect); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties"); + } + } + } + } + + public EffectData createEffect() { + final EffectData effect = this.getGraph().addFramedVertex(EffectData.class); + this.addEffect(effect); + return effect; + } + + @Adjacency(label = "ItemApplyStats", direction = Direction.OUT) public abstract <N extends StatsData> Iterator<? extends N> getAllItemApplyStats(Class<? extends N> type); public Stats getItemApplyStats() { @@ -190,10 +232,10 @@ public abstract class ItemData extends AbstractVertexFrame implements Item { return null; } - @Adjacency(label = "Stats", direction = Direction.OUT) + @Adjacency(label = "ItemApplyStats", direction = Direction.OUT) public abstract StatsData addStats(StatsData stats); - @Adjacency(label = "Stats", direction = Direction.OUT) + @Adjacency(label = "ItemApplyStats", direction = Direction.OUT) public abstract void removeStats(StatsData stats); public void setItemApplyStats(Stats stats) { @@ -212,7 +254,6 @@ public abstract class ItemData extends AbstractVertexFrame implements Item { return; } - StatsData statsData; if( stats instanceof StatsData ) { this.addStats((StatsData) stats); } -- GitLab