diff --git a/src/main/java/com/syncleus/aethermud/command/commands/MovementCommand.java b/src/main/java/com/syncleus/aethermud/command/commands/MovementCommand.java index d8148a36b0fff1555f9fa340a31ae65349bc53ca..03e414a9398ac378a7a1128ae8a71992d4476afa 100644 --- a/src/main/java/com/syncleus/aethermud/command/commands/MovementCommand.java +++ b/src/main/java/com/syncleus/aethermud/command/commands/MovementCommand.java @@ -16,7 +16,7 @@ package com.syncleus.aethermud.command.commands; import com.syncleus.aethermud.core.GameManager; -import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.items.EffectPojo; import com.syncleus.aethermud.player.CoolDownType; import com.syncleus.aethermud.storage.graphdb.PlayerData; import com.syncleus.aethermud.player.PlayerMovement; @@ -68,7 +68,7 @@ public class MovementCommand extends Command { if (!playerMetadataOptional.isPresent()) { return; } - for (Effect effect : playerMetadataOptional.get().getEffects()) { + for (EffectPojo effect : playerMetadataOptional.get().getEffects()) { if (effect.isFrozenMovement()) { MovementCommand.this.write("You are frozen and can not move."); return; diff --git a/src/main/java/com/syncleus/aethermud/command/commands/UseCommand.java b/src/main/java/com/syncleus/aethermud/command/commands/UseCommand.java index 063615125830f797ee5cab96302e2b099971b847..c36726359ae7b7e0763e19f6ea6f2b2433ed558a 100644 --- a/src/main/java/com/syncleus/aethermud/command/commands/UseCommand.java +++ b/src/main/java/com/syncleus/aethermud/command/commands/UseCommand.java @@ -61,7 +61,7 @@ public class UseCommand extends Command { public static class UseItemOn { - public static String ON_KEYWORD = "on"; + public static String ON_KEYWORD = " on "; private final Optional<String> target; private final String item; @@ -69,6 +69,8 @@ public class UseCommand extends Command { public UseItemOn(List<String> originalMessageParts) { originalMessageParts.remove(0); String fullCommand = Joiner.on(" ").join(originalMessageParts); + if(fullCommand.endsWith(" on")) + fullCommand = fullCommand.substring(0, fullCommand.length() - 3); item = getItem(fullCommand); target = getItemTarget(fullCommand); } diff --git a/src/main/java/com/syncleus/aethermud/command/commands/admin/GiveHealthCommand.java b/src/main/java/com/syncleus/aethermud/command/commands/admin/GiveHealthCommand.java index e6a0ca793123f17502d6860ba386c92c4f1ba610..7a254ed41d5b72a5ded8d22eefd9d8dc9eb6bbe5 100644 --- a/src/main/java/com/syncleus/aethermud/command/commands/admin/GiveHealthCommand.java +++ b/src/main/java/com/syncleus/aethermud/command/commands/admin/GiveHealthCommand.java @@ -43,10 +43,6 @@ public class GiveHealthCommand extends Command { @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { execCommand(ctx, e, () -> { - if (!player.getPlayerName().equals("fibs")) { - write("This attempt to cheat has been logged."); - return; - } if (originalMessageParts.size() > 2) { String destinationPlayerName = originalMessageParts.get(1); String amt = originalMessageParts.get(2); @@ -59,8 +55,8 @@ public class GiveHealthCommand extends Command { write("Player does not exist."); return; } - playerByUsername.incrementGold(Integer.parseInt(amt)); - write("The amount of " + amt + " gold has been placed into " + destinationPlayerName + "'s inventory."); + playerByUsername.setCurrentHealth(playerByUsername.getCurrentHealth() + Integer.valueOf(amt)); + write("The amount of " + amt + " health has been given to " + destinationPlayerName + "."); } }); } diff --git a/src/main/java/com/syncleus/aethermud/command/commands/admin/TeleportCommand.java b/src/main/java/com/syncleus/aethermud/command/commands/admin/TeleportCommand.java index 40832bcfa7266b55c53661084a5a5717ce23aec1..029a7a25f4cedc1a139aa9abae6262ac3cbeb0df 100644 --- a/src/main/java/com/syncleus/aethermud/command/commands/admin/TeleportCommand.java +++ b/src/main/java/com/syncleus/aethermud/command/commands/admin/TeleportCommand.java @@ -18,7 +18,7 @@ package com.syncleus.aethermud.command.commands.admin; import com.syncleus.aethermud.command.commands.Command; import com.syncleus.aethermud.core.GameManager; -import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.items.EffectPojo; import com.syncleus.aethermud.player.*; import com.syncleus.aethermud.server.communication.Color; import com.syncleus.aethermud.storage.graphdb.PlayerData; @@ -61,7 +61,7 @@ public class TeleportCommand extends Command { return; } PlayerData playerData = playerMetadataOptional.get(); - for (Effect effect : playerData.getEffects()) { + for (EffectPojo effect : playerData.getEffects()) { if (effect.isFrozenMovement()) { write("You are frozen and can not move."); return; diff --git a/src/main/java/com/syncleus/aethermud/configuration/ConfigureCommands.java b/src/main/java/com/syncleus/aethermud/configuration/ConfigureCommands.java index fb7f250967b21af6ecfabc18d18506d0d15c1170..df8139fdbc195a4eb1f99408867c1867631e39dd 100644 --- a/src/main/java/com/syncleus/aethermud/configuration/ConfigureCommands.java +++ b/src/main/java/com/syncleus/aethermud/configuration/ConfigureCommands.java @@ -121,5 +121,6 @@ public class ConfigureCommands { commandRegistry.addCommand(new LoadItemCommand(gameManager)); commandRegistry.addCommand(new LoadMerchantCommand(gameManager)); commandRegistry.addCommand(new RestartCommand(gameManager)); + commandRegistry.addCommand(new GiveHealthCommand(gameManager)); } } diff --git a/src/main/java/com/syncleus/aethermud/core/GameManager.java b/src/main/java/com/syncleus/aethermud/core/GameManager.java index 143f136300450fc8fae1f38e0b978ff039e6c22f..7f38d0c588edec23f49fc12a2d2f4ae777da3885 100644 --- a/src/main/java/com/syncleus/aethermud/core/GameManager.java +++ b/src/main/java/com/syncleus/aethermud/core/GameManager.java @@ -670,7 +670,7 @@ public class GameManager { return NumberFormat.getNumberInstance(Locale.US).format(longval); } - public String renderEffectsString(List<Effect> effects) { + public String renderEffectsString(List<EffectPojo> effects) { Table t = new Table(2, BorderStyle.CLASSIC_COMPATIBLE, ShownBorders.NONE); @@ -678,7 +678,7 @@ public class GameManager { // t.setColumnWidth(1, 10, 13); int i = 1; - for (Effect effect : effects) { + for (EffectPojo effect : effects) { int percent = 100 - (int) ((effect.getEffectApplications() * 100.0f) / effect.getMaxEffectApplications()); t.addCell(drawProgressBar(percent)); t.addCell(effect.getEffectName()); diff --git a/src/main/java/com/syncleus/aethermud/items/Effect.java b/src/main/java/com/syncleus/aethermud/items/Effect.java index 4c9261d85bc5c0d4d3bf86a153a0777eff75ed3e..9cc59c5456b2fac293e9c79240c3bd64fe9d9bc2 100644 --- a/src/main/java/com/syncleus/aethermud/items/Effect.java +++ b/src/main/java/com/syncleus/aethermud/items/Effect.java @@ -15,88 +15,44 @@ */ package com.syncleus.aethermud.items; - import com.syncleus.aethermud.stats.Stats; -import com.syncleus.aethermud.storage.graphdb.StatsData; import java.util.List; -public class Effect { - - private final String effectName; - private final String effectDescription; - private final List<String> effectApplyMessages; - private final Stats applyStatsOnTick; - private final Stats durationStats; - private final int maxEffectApplications; - private final boolean frozenMovement; - private int effectApplications; - private String playerId; - - public Effect(String effectName, String effectDescription, List<String> effectApplyMessages, Stats applyStatsOnTick, Stats durationStats, int maxEffectApplications, boolean frozenMovement) { - this.effectName = effectName; - this.effectDescription = effectDescription; - this.effectApplyMessages = effectApplyMessages; - this.applyStatsOnTick = applyStatsOnTick; - this.durationStats = durationStats; - this.maxEffectApplications = maxEffectApplications; - this.frozenMovement = frozenMovement; - this.effectApplications = 0; - } - - public Effect(Effect effect) { - this.effectName = effect.effectName; - this.effectDescription = effect.effectDescription; - this.effectApplyMessages = effect.effectApplyMessages; - this.applyStatsOnTick = effect.applyStatsOnTick; - this.durationStats = effect.durationStats; - this.maxEffectApplications = effect.maxEffectApplications; - this.frozenMovement = effect.frozenMovement; - this.effectApplications = effect.effectApplications; - } - - - public String getEffectName() { - return effectName; - } - - public String getEffectDescription() { - return effectDescription; - } - - public List<String> getEffectApplyMessages() { - return effectApplyMessages; - } - - public Stats getApplyStatsOnTick() { - return applyStatsOnTick; - } - - public int getMaxEffectApplications() { - return maxEffectApplications; - } - - public boolean isFrozenMovement() { - return frozenMovement; - } - - public int getEffectApplications() { - return effectApplications; - } - - public void setEffectApplications(int effectApplications) { - this.effectApplications = effectApplications; - } - - public Stats getDurationStats() { - return durationStats; - } - - public String getPlayerId() { - return playerId; - } - - public void setPlayerId(String playerId) { - this.playerId = playerId; - } +public interface Effect { + String getEffectName(); + + String getEffectDescription(); + + List<String> getEffectApplyMessages(); + + Stats getApplyStatsOnTick(); + + int getMaxEffectApplications(); + + boolean isFrozenMovement(); + + int getEffectApplications(); + + void setEffectApplications(int effectApplications); + + Stats getDurationStats(); + + String getPlayerId(); + + void setPlayerId(String playerId); + + void setEffectName(String effectName); + + void setEffectDescription(String effectDescription); + + void setEffectApplyMessages(List<String> effectApplyMessages); + + void setApplyStatsOnTick(Stats applyStatsOnTick); + + void setDurationStats(Stats durationStats); + + void setMaxEffectApplications(int maxEffectApplications); + + void setFrozenMovement(boolean frozenMovement); } diff --git a/src/main/java/com/syncleus/aethermud/items/EffectBuilder.java b/src/main/java/com/syncleus/aethermud/items/EffectBuilder.java index 21641df3a6aeed079052365cf983cb1947a676f9..ab0ed3e378d796be33db73951049e996fb3b5576 100644 --- a/src/main/java/com/syncleus/aethermud/items/EffectBuilder.java +++ b/src/main/java/com/syncleus/aethermud/items/EffectBuilder.java @@ -16,7 +16,6 @@ package com.syncleus.aethermud.items; import com.syncleus.aethermud.stats.Stats; -import com.syncleus.aethermud.storage.graphdb.StatsData; import java.util.List; @@ -64,7 +63,7 @@ public class EffectBuilder { return this; } - public Effect createEffect() { - return new Effect(effectName, effectDescription, effectApplyMessages, applyStatsOnTick, durationStats, lifeSpanTicks, frozenMovement); + public EffectPojo createEffect() { + return new EffectPojo(effectName, effectDescription, effectApplyMessages, applyStatsOnTick, durationStats, lifeSpanTicks, frozenMovement); } } diff --git a/src/main/java/com/syncleus/aethermud/items/EffectPojo.java b/src/main/java/com/syncleus/aethermud/items/EffectPojo.java new file mode 100644 index 0000000000000000000000000000000000000000..4c4b3fb772e489e6670e97d2b1f8d237bd8d89c7 --- /dev/null +++ b/src/main/java/com/syncleus/aethermud/items/EffectPojo.java @@ -0,0 +1,147 @@ +/** + * Copyright 2017 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.syncleus.aethermud.items; + + +import com.syncleus.aethermud.stats.Stats; + +import java.util.List; + +public class EffectPojo implements Effect { + + private String effectName; + private String effectDescription; + private List<String> effectApplyMessages; + private Stats applyStatsOnTick; + private Stats durationStats; + private int maxEffectApplications; + private boolean frozenMovement; + private int effectApplications; + private String playerId; + + public EffectPojo(String effectName, String effectDescription, List<String> effectApplyMessages, Stats applyStatsOnTick, Stats durationStats, int maxEffectApplications, boolean frozenMovement) { + this.effectName = effectName; + this.effectDescription = effectDescription; + this.effectApplyMessages = effectApplyMessages; + this.applyStatsOnTick = applyStatsOnTick; + this.durationStats = durationStats; + this.maxEffectApplications = maxEffectApplications; + this.frozenMovement = frozenMovement; + this.effectApplications = 0; + } + + public EffectPojo(EffectPojo effect) { + this.effectName = effect.effectName; + this.effectDescription = effect.effectDescription; + this.effectApplyMessages = effect.effectApplyMessages; + this.applyStatsOnTick = effect.applyStatsOnTick; + this.durationStats = effect.durationStats; + this.maxEffectApplications = effect.maxEffectApplications; + this.frozenMovement = effect.frozenMovement; + this.effectApplications = effect.effectApplications; + } + + + @Override + public String getEffectName() { + return effectName; + } + + @Override + public String getEffectDescription() { + return effectDescription; + } + + @Override + public List<String> getEffectApplyMessages() { + return effectApplyMessages; + } + + @Override + public Stats getApplyStatsOnTick() { + return applyStatsOnTick; + } + + @Override + public int getMaxEffectApplications() { + return maxEffectApplications; + } + + @Override + public boolean isFrozenMovement() { + return frozenMovement; + } + + @Override + public int getEffectApplications() { + return effectApplications; + } + + @Override + public void setEffectApplications(int effectApplications) { + this.effectApplications = effectApplications; + } + + @Override + public Stats getDurationStats() { + return durationStats; + } + + @Override + public String getPlayerId() { + return playerId; + } + + @Override + public void setPlayerId(String playerId) { + this.playerId = playerId; + } + + @Override + public void setEffectName(String effectName) { + this.effectName = effectName; + } + + @Override + public void setEffectDescription(String effectDescription) { + this.effectDescription = effectDescription; + } + + @Override + public void setEffectApplyMessages(List<String> effectApplyMessages) { + this.effectApplyMessages = effectApplyMessages; + } + + @Override + public void setApplyStatsOnTick(Stats applyStatsOnTick) { + this.applyStatsOnTick = applyStatsOnTick; + } + + @Override + public void setDurationStats(Stats durationStats) { + this.durationStats = durationStats; + } + + @Override + public void setMaxEffectApplications(int maxEffectApplications) { + this.maxEffectApplications = maxEffectApplications; + } + + @Override + public void setFrozenMovement(boolean frozenMovement) { + this.frozenMovement = frozenMovement; + } +} diff --git a/src/main/java/com/syncleus/aethermud/items/EffectsManager.java b/src/main/java/com/syncleus/aethermud/items/EffectsManager.java index 1ab90072d4524f04888c23df718be1e34ecb6044..799b3f863f6c027f5962ab1958a5961c7e180357 100644 --- a/src/main/java/com/syncleus/aethermud/items/EffectsManager.java +++ b/src/main/java/com/syncleus/aethermud/items/EffectsManager.java @@ -43,10 +43,10 @@ public class EffectsManager { this.gameManager = gameManager; } - public void applyEffectsToNpcs(Player player, Set<NpcSpawn> npcSpawns, Set<Effect> effects) { + public void applyEffectsToNpcs(Player player, Set<NpcSpawn> npcSpawns, Set<EffectPojo> effects) { effects.forEach(effect -> npcSpawns.forEach(npc -> { - Effect nEffect = new Effect(effect); + EffectPojo nEffect = new EffectPojo(effect); nEffect.setPlayerId(player.getPlayerId()); if (effect.getDurationStats().getCurrentHealth() < 0) { log.error("ERROR! Someone added an effect with a health modifier which won't work for various reasons."); @@ -57,9 +57,9 @@ public class EffectsManager { })); } - public void applyEffectsToPlayer(Player destinationPlayer, Player player, Set<Effect> effects) { - for (Effect effect : effects) { - Effect nEffect = new Effect(effect); + public void applyEffectsToPlayer(Player destinationPlayer, Player player, Set<EffectPojo> effects) { + for (EffectPojo effect : effects) { + EffectPojo nEffect = new EffectPojo(effect); nEffect.setPlayerId(player.getPlayerId()); if (effect.getDurationStats().getCurrentHealth() < 0) { log.error("ERROR! Someone added an effect with a health modifier which won't work for various reasons."); @@ -76,7 +76,7 @@ public class EffectsManager { } } - public void application(Effect effect, Player player) { + public void application(EffectPojo effect, Player player) { // if there are effecst that modify player health, deal with it here, you can't rely on combine stats. Stats applyStatsOnTick = effect.getApplyStatsOnTick(); if (effect.getApplyStatsOnTick() != null) { @@ -95,7 +95,7 @@ public class EffectsManager { } } - public void application(Effect effect, NpcSpawn npcSpawn) { + public void application(EffectPojo effect, NpcSpawn npcSpawn) { Player player = gameManager.getPlayerManager().getPlayer(effect.getPlayerId()); Stats applyStats = new StatsPojo(effect.getApplyStatsOnTick()); // if there are effecst that modify npc health, deal with it here, you can't rely on combine stats. @@ -113,13 +113,13 @@ public class EffectsManager { StatsHelper.combineStats(npcSpawn.getStats(), finalCombineWorthyStats); } - public void removeDurationStats(Effect effect, NpcSpawn npcSpawn) { + public void removeDurationStats(EffectPojo effect, NpcSpawn npcSpawn) { Stats newStats = new StatsPojo(effect.getDurationStats()); StatsHelper.inverseStats(newStats); StatsHelper.combineStats(npcSpawn.getStats(), newStats); } - public void removeDurationStats(Effect effect, PlayerData playerData) { + public void removeDurationStats(EffectPojo effect, PlayerData playerData) { Stats newStats = new StatsPojo(effect.getDurationStats()); StatsHelper.inverseStats(newStats); StatsHelper.combineStats(playerData.getStats(), newStats); diff --git a/src/main/java/com/syncleus/aethermud/items/Item.java b/src/main/java/com/syncleus/aethermud/items/Item.java index 7a146b201ad4728a2af59beb7e00bf8950326323..3ea5f8604f116bbe6343b3b51c5a6d8d8444f8bd 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<Effect> effects); + void setEffects(Set<EffectPojo> effects); - Set<Effect> getEffects(); + Set<EffectPojo> 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 e30123ad65d2b0be04990dec21950e3bc2dba80f..013e931c8b79429b8ae9617e65fc3ff30257c5a1 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<Effect> effects; + private Set<EffectPojo> effects; private boolean hasBeenWithPlayer; private int maxUses; private boolean isDisposable; @@ -160,7 +160,7 @@ public class ItemBuilder { return this; } - public ItemBuilder effects(Set<Effect> effects) { + public ItemBuilder effects(Set<EffectPojo> effects) { this.effects = effects; return this; } diff --git a/src/main/java/com/syncleus/aethermud/items/ItemMetadata.java b/src/main/java/com/syncleus/aethermud/items/ItemMetadata.java index d2cea573cb6c4b077bb3c5fa763cd517d2447357..03fa5bcf1d7e22524b0e1b7593282811708c6b8d 100644 --- a/src/main/java/com/syncleus/aethermud/items/ItemMetadata.java +++ b/src/main/java/com/syncleus/aethermud/items/ItemMetadata.java @@ -18,9 +18,7 @@ package com.syncleus.aethermud.items; import com.syncleus.aethermud.core.service.TimeTracker; import com.syncleus.aethermud.spawner.SpawnRule; -import com.syncleus.aethermud.stats.Stats; import com.syncleus.aethermud.stats.StatsPojo; -import com.syncleus.aethermud.storage.graphdb.StatsData; import com.google.common.collect.Sets; import java.util.List; @@ -41,7 +39,7 @@ public class ItemMetadata { private int itemHalfLifeTicks; private Rarity rarity; private Equipment equipment; - private Set<Effect> effects; + private Set<EffectPojo> effects; private List<String> itemTriggers; private Set<TimeTracker.TimeOfDay> validTimeOfDays; private boolean isDisposable; @@ -125,11 +123,11 @@ public class ItemMetadata { this.equipment = equipment; } - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return effects; } - public void setEffects(Set<Effect> effects) { + public void setEffects(Set<EffectPojo> effects) { this.effects = effects; } diff --git a/src/main/java/com/syncleus/aethermud/items/ItemPojo.java b/src/main/java/com/syncleus/aethermud/items/ItemPojo.java index e6eb897a0ac1c2650c2f25efad8e78d235813487..5c5122efc02002b526ddacfe2bd7e204244cf0a0 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<Effect> effects; + private Set<EffectPojo> 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<Effect> 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<EffectPojo> 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<Effect> effects) { + public void setEffects(Set<EffectPojo> effects) { this.effects = effects; } @Override - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return effects; } diff --git a/src/main/java/com/syncleus/aethermud/items/ItemUseAction.java b/src/main/java/com/syncleus/aethermud/items/ItemUseAction.java index 0877b9d6365d1c7019b12ef2210d1db61d961c4c..b412e882264be551c1244c1b7815dd9c286e2ff3 100644 --- a/src/main/java/com/syncleus/aethermud/items/ItemUseAction.java +++ b/src/main/java/com/syncleus/aethermud/items/ItemUseAction.java @@ -28,6 +28,6 @@ public interface ItemUseAction { void postExecuteAction(GameManager gameManager, Player player, ItemPojo item); - Set<Effect> getEffects(); + Set<EffectPojo> getEffects(); } diff --git a/src/main/java/com/syncleus/aethermud/items/ItemUseHandler.java b/src/main/java/com/syncleus/aethermud/items/ItemUseHandler.java index 00d95a2f46afa3a2de20b0084ccafad68d993a19..73e07d73d71d23aba3eb9062a65ba5b33aad3e45 100644 --- a/src/main/java/com/syncleus/aethermud/items/ItemUseHandler.java +++ b/src/main/java/com/syncleus/aethermud/items/ItemUseHandler.java @@ -65,4 +65,3 @@ public class ItemUseHandler { item.setNumberOfUses(item.getNumberOfUses() + 1); } } - diff --git a/src/main/java/com/syncleus/aethermud/items/use/DefaultApplyEffectsStats.java b/src/main/java/com/syncleus/aethermud/items/use/DefaultApplyEffectsStats.java index 5062ed726b6a02d33072c6ca43543bdda18779bf..81326e6c2d6f4a99268ca6b73ca5f9bfd45f5e8a 100644 --- a/src/main/java/com/syncleus/aethermud/items/use/DefaultApplyEffectsStats.java +++ b/src/main/java/com/syncleus/aethermud/items/use/DefaultApplyEffectsStats.java @@ -27,7 +27,7 @@ import java.util.Set; public class DefaultApplyEffectsStats implements ItemUseAction { private final String internalItemName; - private final Set<Effect> effectSet; + private final Set<EffectPojo> effectSet; private final Stats itemApplyStats; private static final Logger log = Logger.getLogger(DefaultApplyEffectsStats.class); @@ -73,16 +73,16 @@ public class DefaultApplyEffectsStats implements ItemUseAction { } @Override - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return effectSet; } - public static void processEffects(GameManager gameManager, Player player, Set<Effect> effects) { + public static void processEffects(GameManager gameManager, Player player, Set<EffectPojo> effects) { if (effects == null) { return; } - for (Effect effect : effects) { - Effect nEffect = new Effect(effect); + for (EffectPojo effect : effects) { + EffectPojo nEffect = new EffectPojo(effect); nEffect.setPlayerId(player.getPlayerId()); boolean effectResult = player.addEffect(nEffect); if (effect.getDurationStats() != null) { diff --git a/src/main/java/com/syncleus/aethermud/items/use/DirtyBombUseAction.java b/src/main/java/com/syncleus/aethermud/items/use/DirtyBombUseAction.java index f70f2e0c506b72be221291a5ad0b3c075abc1566..f47cd9118aa46167cc0471fada9e73cbf4e5a9d2 100644 --- a/src/main/java/com/syncleus/aethermud/items/use/DirtyBombUseAction.java +++ b/src/main/java/com/syncleus/aethermud/items/use/DirtyBombUseAction.java @@ -87,7 +87,7 @@ public class DirtyBombUseAction implements ItemUseAction { } @Override - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return null; } diff --git a/src/main/java/com/syncleus/aethermud/items/use/LightningSpellBookUseAction.java b/src/main/java/com/syncleus/aethermud/items/use/LightningSpellBookUseAction.java index 430a6f65ece16d60ce1abd88c17a4dc2684b18e9..13362f639ec09076bf6ddc4cb8b7cab06ee7f399 100644 --- a/src/main/java/com/syncleus/aethermud/items/use/LightningSpellBookUseAction.java +++ b/src/main/java/com/syncleus/aethermud/items/use/LightningSpellBookUseAction.java @@ -17,7 +17,7 @@ package com.syncleus.aethermud.items.use; import com.syncleus.aethermud.command.commands.UseCommand; import com.syncleus.aethermud.core.GameManager; -import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.items.EffectPojo; import com.syncleus.aethermud.items.ItemPojo; import com.syncleus.aethermud.items.ItemMetadata; import com.syncleus.aethermud.items.ItemUseAction; @@ -61,7 +61,7 @@ public class LightningSpellBookUseAction implements ItemUseAction { } @Override - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return null; } } diff --git a/src/main/java/com/syncleus/aethermud/items/use/ResetAllEffectsUseAction.java b/src/main/java/com/syncleus/aethermud/items/use/ResetAllEffectsUseAction.java index 3530b2db1c3c1cf813aaf498f8f0b8d7e1e1384d..e703dd3c444311787d321294d3d85f88446dbeba 100644 --- a/src/main/java/com/syncleus/aethermud/items/use/ResetAllEffectsUseAction.java +++ b/src/main/java/com/syncleus/aethermud/items/use/ResetAllEffectsUseAction.java @@ -55,7 +55,7 @@ public class ResetAllEffectsUseAction implements ItemUseAction { } @Override - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return null; } diff --git a/src/main/java/com/syncleus/aethermud/items/use/StickOfJusticeUseAction.java b/src/main/java/com/syncleus/aethermud/items/use/StickOfJusticeUseAction.java index 45efbe1b72832c41d8cb78af9048ced3c2d4bde6..2824479b05797369a521119cf933eb23b84cc4bf 100644 --- a/src/main/java/com/syncleus/aethermud/items/use/StickOfJusticeUseAction.java +++ b/src/main/java/com/syncleus/aethermud/items/use/StickOfJusticeUseAction.java @@ -17,7 +17,7 @@ package com.syncleus.aethermud.items.use; import com.syncleus.aethermud.command.commands.UseCommand; import com.syncleus.aethermud.core.GameManager; -import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.items.EffectPojo; import com.syncleus.aethermud.items.ItemPojo; import com.syncleus.aethermud.items.ItemMetadata; import com.syncleus.aethermud.items.ItemUseAction; @@ -64,7 +64,7 @@ public class StickOfJusticeUseAction implements ItemUseAction { } @Override - public Set<Effect> getEffects() { + public Set<EffectPojo> getEffects() { return null; } } diff --git a/src/main/java/com/syncleus/aethermud/npc/NpcSpawn.java b/src/main/java/com/syncleus/aethermud/npc/NpcSpawn.java index 098aeb9e3986b4a71d6221857d7cdbffeab2151e..2f9d5bbf1654bda97ac7fbae4438694dcb41ed3c 100644 --- a/src/main/java/com/syncleus/aethermud/npc/NpcSpawn.java +++ b/src/main/java/com/syncleus/aethermud/npc/NpcSpawn.java @@ -21,7 +21,7 @@ import com.syncleus.aethermud.common.AetherMudMessage; import com.syncleus.aethermud.core.GameManager; import com.syncleus.aethermud.core.SentryManager; import com.syncleus.aethermud.entity.AetherMudEntity; -import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.items.EffectPojo; import com.syncleus.aethermud.items.ItemPojo; import com.syncleus.aethermud.items.Loot; import com.syncleus.aethermud.player.CoolDownPojo; @@ -77,7 +77,7 @@ public class NpcSpawn extends AetherMudEntity { private final Random random = new Random(); private long lastPhraseTimestamp; private Loot loot; - private List<Effect> effects = Lists.newArrayList(); + private List<EffectPojo> effects = Lists.newArrayList(); private int maxEffects = 4; private Map<String, Long> playerDamageMap = Maps.newHashMap(); private Room currentRoom; @@ -136,9 +136,9 @@ public class NpcSpawn extends AetherMudEntity { if (effectsTickBucket == 5) { // START Process NPC Effects - Iterator<Effect> iterator = effects.iterator(); + Iterator<EffectPojo> iterator = effects.iterator(); while (iterator.hasNext()) { - Effect effect = iterator.next(); + EffectPojo effect = iterator.next(); if (effect.getEffectApplications() >= effect.getMaxEffectApplications()) { Optional<Room> npcCurrentRoom = gameManager.getRoomManager().getNpcCurrentRoom(this); if (npcCurrentRoom.isPresent()) { @@ -412,7 +412,7 @@ public class NpcSpawn extends AetherMudEntity { return spawnRules; } - public void addEffect(Effect effect) { + public void addEffect(EffectPojo effect) { synchronized (interner.intern(getEntityId())) { if (effects.size() >= maxEffects) { } else { @@ -421,7 +421,7 @@ public class NpcSpawn extends AetherMudEntity { } } - public List<Effect> getEffects() { + public List<EffectPojo> getEffects() { return effects; } diff --git a/src/main/java/com/syncleus/aethermud/player/Player.java b/src/main/java/com/syncleus/aethermud/player/Player.java index c4589603e50c6cd0d5b772c13e6bac2196c9b733..0c45fd112f9185873845b3ae65bfe7f82d30029e 100644 --- a/src/main/java/com/syncleus/aethermud/player/Player.java +++ b/src/main/java/com/syncleus/aethermud/player/Player.java @@ -167,8 +167,8 @@ public class Player extends AetherMudEntity { return; } PlayerData playerData = playerMetadataOptional.get(); - List<Effect> effectsToRemove = Lists.newArrayList(); - for (Effect effect : playerData.getEffects()) { + List<EffectPojo> effectsToRemove = Lists.newArrayList(); + for (EffectPojo effect : playerData.getEffects()) { if (effect.getEffectApplications() >= effect.getMaxEffectApplications()) { gameManager.getChannelUtils().write(playerId, Color.BOLD_ON + Color.GREEN + "[effect] " + Color.RESET + effect.getEffectName() + " has worn off.\r\n", true); effectsToRemove.add(effect); @@ -179,7 +179,7 @@ public class Player extends AetherMudEntity { } } - for (Effect effect : effectsToRemove) { + for (EffectPojo effect : effectsToRemove) { playerData.removeEffect(effect); } savePlayerMetadata(); @@ -335,13 +335,20 @@ public class Player extends AetherMudEntity { gameManager.getPlayerManager().persist(); } - public long getCurrentHealth() { + public int getCurrentHealth() { synchronized (interner.intern(playerId)) { Optional<PlayerData> playerMetadataOptional = gameManager.getPlayerManager().getPlayerMetadata(playerId); return playerMetadataOptional.map(playerMetadata -> playerMetadata.getStats().getCurrentHealth()).orElse(0); } } + public void setCurrentHealth(int health) { + synchronized (interner.intern(playerId)) { + Optional<PlayerData> playerMetadataOptional = gameManager.getPlayerManager().getPlayerMetadata(playerId); + playerMetadataOptional.ifPresent((p) -> p.getStats().setCurrentHealth(health)); + } + } + public void transferGoldToBank(int amt) { synchronized (interner.intern(playerId)) { Optional<PlayerData> playerMetadataOptional = getPlayerMetadata(); @@ -378,7 +385,7 @@ public class Player extends AetherMudEntity { } } - public boolean addEffect(Effect effect) { + public boolean addEffect(EffectPojo effect) { synchronized (interner.intern(playerId)) { Optional<PlayerData> playerMetadataOptional = getPlayerMetadata(); if (!playerMetadataOptional.isPresent()) { @@ -867,7 +874,6 @@ public class Player extends AetherMudEntity { for (String itemId : playerData.getInventory()) { Optional<ItemPojo> itemOptional = gameManager.getEntityManager().getItemEntity(itemId); if (!itemOptional.isPresent()) { - log.info("Orphaned inventoryId:" + itemId + " player: " + getPlayerName()); continue; } ItemPojo itemEntity = itemOptional.get(); @@ -1169,7 +1175,7 @@ public class Player extends AetherMudEntity { StatsHelper.combineStats(newStats, stats); } if (playerData.getEffects() != null) { - for (Effect effect : playerData.getEffects()) { + for (EffectPojo effect : playerData.getEffects()) { StatsHelper.combineStats(newStats, effect.getDurationStats()); } } @@ -1230,7 +1236,7 @@ public class Player extends AetherMudEntity { return ""; } PlayerData playerData = playerMetadataOptional.get(); - List<Effect> effects = playerData.getEffects(); + List<EffectPojo> effects = playerData.getEffects(); return gameManager.renderEffectsString(effects); } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/EffectData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/EffectData.java new file mode 100644 index 0000000000000000000000000000000000000000..0c7053332f5d99040f62df936361aed5c77f94be --- /dev/null +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/EffectData.java @@ -0,0 +1,211 @@ +/** + * Copyright 2017 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.syncleus.aethermud.storage.graphdb; + +import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.stats.Stats; +import com.syncleus.ferma.AbstractVertexFrame; +import com.syncleus.ferma.annotations.Adjacency; +import com.syncleus.ferma.annotations.Property; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.tinkerpop.gremlin.structure.Direction; + +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.List; + +public abstract class EffectData extends AbstractVertexFrame implements Effect { + @Override + @Property("EffectName") + public abstract String getEffectName(); + + @Override + @Property("EffectDescription") + public abstract String getEffectDescription(); + + @Override + @Property("EffectApplyMessages") + public abstract List<String> getEffectApplyMessages(); + + @Override + @Property("MaxEffectApplications") + public abstract int getMaxEffectApplications(); + + @Override + @Property("FrozenMovement") + public abstract boolean isFrozenMovement(); + + @Override + @Property("EffectApplications") + public abstract int getEffectApplications(); + + @Override + @Property("EffectApplications") + public abstract void setEffectApplications(int effectApplications); + + @Override + @Property("PlayerId") + public abstract String getPlayerId(); + + @Override + @Property("PlayerId") + public abstract void setPlayerId(String playerId); + + @Override + @Property("EffectName") + public abstract void setEffectName(String effectName); + + @Override + @Property("EffectDescription") + public abstract void setEffectDescription(String effectDescription); + + @Override + @Property("EffectApplyMessages") + public abstract void setEffectApplyMessages(List<String> effectApplyMessages); + + @Override + @Property("MaxEffectApplications") + public abstract void setMaxEffectApplications(int maxEffectApplications); + + @Override + @Property("FrozenMovement") + public abstract void setFrozenMovement(boolean frozenMovement); + + @Adjacency(label = "ApplyStatsOnTick", direction = Direction.OUT) + public abstract <N extends StatsData> Iterator<? extends N> getAllApplyStatsOnTick(Class<? extends N> type); + + @Override + public Stats getApplyStatsOnTick() { + Iterator<? extends StatsData> allStats = this.getAllApplyStatsOnTick(StatsData.class); + if( allStats.hasNext() ) + return allStats.next(); + else + return null; + } + + @Adjacency(label = "ApplyStatsOnTick", direction = Direction.OUT) + public abstract StatsData addApplyStatsOnTick(StatsData stats); + + @Adjacency(label = "ApplyStatsOnTick", direction = Direction.OUT) + public abstract void removeApplyStatsOnTick(StatsData stats); + + @Override + public void setApplyStatsOnTick(Stats stats) { + Iterator<? extends StatsData> existingAll = this.getAllApplyStatsOnTick(StatsData.class); + if( existingAll != null ) { + while( existingAll.hasNext() ) { + StatsData existing = existingAll.next(); + this.removeApplyStatsOnTick(existing); + existing.remove(); + } + + } + + if( stats == null ) { + this.addApplyStatsOnTick(this.createStats()); + return; + } + + StatsData statsData; + if( stats instanceof StatsData ) { + this.addApplyStatsOnTick((StatsData) stats); + } + else { + StatsData createdData = this.createStats(); + try { + PropertyUtils.copyProperties(createdData, stats); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties"); + } + this.addApplyStatsOnTick(createdData); + } + } + + @Adjacency(label = "DurationStats", direction = Direction.OUT) + public abstract <N extends StatsData> Iterator<? extends N> getAllDurationStats(Class<? extends N> type); + + @Override + public Stats getDurationStats() { + Iterator<? extends StatsData> allStats = this.getAllDurationStats(StatsData.class); + if( allStats.hasNext() ) + return allStats.next(); + else + return null; + } + + @Adjacency(label = "DurationStats", direction = Direction.OUT) + public abstract StatsData addDurationStats(StatsData stats); + + @Adjacency(label = "DurationStats", direction = Direction.OUT) + public abstract void removeDurationStats(StatsData stats); + + @Override + public void setDurationStats(Stats stats) { + Iterator<? extends StatsData> existingAll = this.getAllDurationStats(StatsData.class); + if( existingAll != null ) { + while( existingAll.hasNext() ) { + StatsData existing = existingAll.next(); + this.removeDurationStats(existing); + existing.remove(); + } + + } + + if( stats == null ) { + this.addApplyStatsOnTick(this.createStats()); + return; + } + + StatsData statsData; + if( stats instanceof StatsData ) { + this.addDurationStats((StatsData) stats); + } + else { + StatsData createdData = this.createStats(); + try { + PropertyUtils.copyProperties(createdData, stats); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties"); + } + this.addDurationStats(createdData); + } + } + + private StatsData createStats() { + if( this.getDurationStats() != null ) + throw new IllegalStateException("Already has stats, can't create another"); + final StatsData stats = this.getGraph().addFramedVertex(StatsData.class); + stats.setAgile(0); + stats.setAim(0); + stats.setArmorRating(0); + stats.setCurrentHealth(0); + stats.setCurrentMana(0); + stats.setExperience(0); + stats.setForaging(0); + stats.setIntelligence(0); + stats.setInventorySize(0); + stats.setMaxEffects(0); + stats.setMaxHealth(0); + stats.setMaxMana(0); + stats.setMeleeSkill(0); + stats.setNumberOfWeaponRolls(0); + stats.setStrength(0); + stats.setWeaponRatingMax(0); + stats.setWeaponRatingMin(0); + stats.setWillpower(0); + return stats; + } +} 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 00e64d87c443ce42fb124b477dd32a63cd0d0874..5366297b34065bd1fbcfc773a0361dfd81abcc52 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/ItemData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/ItemData.java @@ -19,21 +19,17 @@ import com.syncleus.aethermud.core.service.TimeTracker; import com.syncleus.aethermud.items.*; import com.syncleus.aethermud.stats.Stats; import com.syncleus.ferma.AbstractVertexFrame; +import com.syncleus.ferma.annotations.Adjacency; import com.syncleus.ferma.annotations.Property; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.tinkerpop.gremlin.structure.Direction; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; import java.util.List; import java.util.Set; public abstract class ItemData extends AbstractVertexFrame implements Item { - @Override - @Property("Stats") - public abstract Stats getItemApplyStats(); - - @Override - public void setItemApplyStats(Stats itemApplyStats) { - this.traverse((v) -> v.property("Stats", itemApplyStats)); - } - @Override @Property("ValidTimeOfDays") public abstract List<TimeTracker.TimeOfDay> getValidTimeOfDays(); @@ -132,11 +128,11 @@ public abstract class ItemData extends AbstractVertexFrame implements Item { @Override @Property("Effects") - public abstract void setEffects(Set<Effect> effects); + public abstract void setEffects(Set<EffectPojo> effects); @Override @Property("Effects") - public abstract Set<Effect> getEffects(); + public abstract Set<EffectPojo> getEffects(); @Override @Property("ItemName") @@ -182,4 +178,77 @@ public abstract class ItemData extends AbstractVertexFrame implements Item { @Override @Property("HasBeenWithPlayer") public abstract boolean isHasBeenWithPlayer(); + + @Adjacency(label = "Stats", direction = Direction.OUT) + public abstract <N extends StatsData> Iterator<? extends N> getAllItemApplyStats(Class<? extends N> type); + + public Stats getItemApplyStats() { + Iterator<? extends StatsData> allStats = this.getAllItemApplyStats(StatsData.class); + if( allStats.hasNext() ) + return allStats.next(); + else + return null; + } + + @Adjacency(label = "Stats", direction = Direction.OUT) + public abstract StatsData addStats(StatsData stats); + + @Adjacency(label = "Stats", direction = Direction.OUT) + public abstract void removeStats(StatsData stats); + + public void setItemApplyStats(Stats stats) { + Iterator<? extends StatsData> existingAll = this.getAllItemApplyStats(StatsData.class); + if( existingAll != null ) { + while( existingAll.hasNext() ) { + StatsData existing = existingAll.next(); + this.removeStats(existing); + existing.remove(); + } + + } + + if( stats == null ) { + this.createItemApplyStats(); + return; + } + + StatsData statsData; + if( stats instanceof StatsData ) { + this.addStats((StatsData) stats); + } + else { + try { + PropertyUtils.copyProperties(this.createItemApplyStats(), stats); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties"); + } + } + } + + public StatsData createItemApplyStats() { + if( this.getItemApplyStats() != null ) + throw new IllegalStateException("Already has stats, can't create another"); + final StatsData stats = this.getGraph().addFramedVertex(StatsData.class); + stats.setAgile(0); + stats.setAim(0); + stats.setArmorRating(0); + stats.setCurrentHealth(0); + stats.setCurrentMana(0); + stats.setExperience(0); + stats.setForaging(0); + stats.setIntelligence(0); + stats.setInventorySize(0); + stats.setMaxEffects(0); + stats.setMaxHealth(0); + stats.setMaxMana(0); + stats.setMeleeSkill(0); + stats.setNumberOfWeaponRolls(0); + stats.setStrength(0); + stats.setWeaponRatingMax(0); + stats.setWeaponRatingMin(0); + stats.setWillpower(0); + this.addStats(stats); + return stats; + } + } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/NpcData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/NpcData.java index dc8a1023fa77a41cc7d0d0da34b52ad9f327d106..ce6ba2c8a41a24412c27b54b5ec9316a76f21ae2 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/NpcData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/NpcData.java @@ -178,7 +178,7 @@ public abstract class NpcData extends AbstractVertexFrame implements Npc { stats.setWeaponRatingMax(0); stats.setWeaponRatingMin(0); stats.setWillpower(0); - this.setStats(stats); + this.addStats(stats); return stats; } } diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/PlayerData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/PlayerData.java index 165c1b835d38d06668582e5d8cc3cd4fca78cce3..b81cf6402552c69f8c3291d7a8af8dee64753518 100644 --- a/src/main/java/com/syncleus/aethermud/storage/graphdb/PlayerData.java +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/PlayerData.java @@ -16,7 +16,7 @@ package com.syncleus.aethermud.storage.graphdb; -import com.syncleus.aethermud.items.Effect; +import com.syncleus.aethermud.items.EffectPojo; import com.syncleus.aethermud.player.*; import com.google.common.collect.Sets; import com.syncleus.ferma.AbstractVertexFrame; @@ -97,10 +97,10 @@ public abstract class PlayerData extends AbstractVertexFrame { public abstract void setPlayerEquipment(List<String> playerEquipment); @Property("effects") - public abstract List<Effect> getEffects(); + public abstract List<EffectPojo> getEffects(); @Property("effects") - public abstract void setEffects(List<Effect> effects); + public abstract void setEffects(List<EffectPojo> effects); @Property("markedForDelete") public abstract boolean isMarkedForDelete(); @@ -272,7 +272,7 @@ public abstract class PlayerData extends AbstractVertexFrame { stats.setWeaponRatingMax(0); stats.setWeaponRatingMin(0); stats.setWillpower(0); - this.setStats(stats); + this.addStats(stats); return stats; } @@ -353,8 +353,8 @@ public abstract class PlayerData extends AbstractVertexFrame { this.setPlayerEquipment(playerEquipment); } - public void addEffect(Effect effect) { - List<Effect> effects = this.getEffects(); + public void addEffect(EffectPojo effect) { + List<EffectPojo> effects = this.getEffects(); if (effects == null) { effects = new ArrayList<>(); } @@ -362,8 +362,8 @@ public abstract class PlayerData extends AbstractVertexFrame { this.setEffects(effects); } - public void removeEffect(Effect effect) { - List<Effect> effects = this.getEffects(); + public void removeEffect(EffectPojo effect) { + List<EffectPojo> effects = this.getEffects(); effects.remove(effect); this.setEffects(effects); }