Crossfire JXClient, Trunk
Spell.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.spells;
24 
30 import java.util.Locale;
31 import org.jetbrains.annotations.NotNull;
32 
37 public class Spell {
38 
42  @NotNull
43  private final String name;
44 
48  @NotNull
50 
54  private int faceNum;
55 
59  private int tag;
60 
64  @NotNull
65  private String message = "";
66 
70  private int level;
71 
75  private int castingTime;
76 
80  private int mana;
81 
85  private int grace;
86 
90  private int damage;
91 
95  private int skill;
96 
100  private int path;
101 
105  private boolean unknown;
106 
110  private final SkillSet skillSet;
111 
115  private final Stats stats;
116 
123  public Spell(@NotNull final String name, @NotNull final SkillSet skillSet, @NotNull final Stats stats) {
124  this.name = name;
125  this.skillSet = skillSet;
126  this.stats = stats;
127  }
128 
133  public int getTag() {
134  return tag;
135  }
136 
141  public int getLevel() {
142  return level;
143  }
144 
149  public int getCastingTime() {
150  return castingTime;
151  }
152 
157  public int getMana() {
158  return mana;
159  }
160 
165  public int getGrace() {
166  return grace;
167  }
168 
173  public int getDamage() {
174  return damage;
175  }
176 
181  public int getSkill() {
182  return skill;
183  }
184 
189  public int getPath() {
190  return path;
191  }
192 
197  @NotNull
198  public String getName() {
199  return name;
200  }
201 
206  @NotNull
207  public String getMessage() {
208  return message;
209  }
210 
215  public int getFaceNum() {
216  return faceNum;
217  }
218 
223  public boolean isUnknown() {
224  return unknown;
225  }
226 
231  public void setUnknown(final boolean unknown) {
232  if (this.unknown != unknown) {
233  this.unknown = unknown;
234  fireChanged();
235  }
236  }
237 
251  public void setParameters(final int faceNum, final int tag, @NotNull final String message, final int level, final int castingTime, final int mana, final int grace, final int damage, final int skill, final int path) {
252  boolean changed = false;
253 
254  if (this.faceNum != faceNum) {
255  this.faceNum = faceNum;
256  changed = true;
257  }
258 
259  if (this.tag != tag) {
260  this.tag = tag;
261  changed = true;
262  }
263 
264  if (!this.message.equals(message)) {
265  this.message = message;
266  changed = true;
267  }
268 
269  if (this.level != level) {
270  this.level = level;
271  changed = true;
272  }
273 
274  if (this.castingTime != castingTime) {
275  this.castingTime = castingTime;
276  changed = true;
277  }
278 
279  if (this.mana != mana) {
280  this.mana = mana;
281  changed = true;
282  }
283 
284  if (this.grace != grace) {
285  this.grace = grace;
286  changed = true;
287  }
288 
289  if (this.damage != damage) {
290  this.damage = damage;
291  changed = true;
292  }
293 
294  if (this.skill != skill) {
295  this.skill = skill;
296  changed = true;
297  }
298 
299  if (this.path != path) {
300  this.path = path;
301  changed = true;
302  }
303 
304  if (unknown) {
305  unknown = false;
306  changed = true;
307  }
308 
309  if (changed) {
310  fireChanged();
311  }
312  }
313 
323  public void updateParameters(final boolean updateMana, final int mana, final boolean updateGrace, final int grace, final boolean updateDamage, final int damage) {
324  boolean changed = false;
325 
326  if (updateMana && this.mana != mana) {
327  this.mana = mana;
328  changed = true;
329  }
330 
331  if (updateGrace && this.grace != grace) {
332  this.grace = grace;
333  changed = true;
334  }
335 
336  if (updateDamage && this.damage != damage) {
337  this.damage = damage;
338  changed = true;
339  }
340 
341  if (changed) {
342  fireChanged();
343  }
344  }
345 
346  @NotNull
347  @Override
348  public String toString() {
349  return "Name:"+name+" ID:"+tag+" Level:"+level+" Time:"+castingTime+" Mana:"+mana+" Grace:"+grace+" Damage:"+damage+" Skill:"+skill+" Path:"+path+" Unknown:"+unknown;
350  }
351 
356  @NotNull
357  public String getTooltipText() {
358  final StringBuilder sb = new StringBuilder("<b>");
359  sb.append(name.substring(0, 1).toUpperCase(Locale.ENGLISH)).append(name.substring(1));
360  sb.append("</b>");
361  if (unknown) {
362  sb.append(" (unknown)");
363  }
364  if (path != 0) {
365  sb.append(Integer.bitCount(path) == 1 ? "<br>Spell path:" : "<br>Spell paths:");
367  }
368  if ((path&stats.getStat(Stats.CS_STAT_SPELL_DENY)) == 0) {
369  final Skill sk = skillSet.getSkill(skill);
370  if (sk != null) {
371  sb.append("<br>Skill: ").append(sk);
372  }
373  if (level > 0) {
374  sb.append("<br>Level: ");
375  sb.append(level);
376  if (sk != null && level <= sk.getLevel()) {
378  sb.append(" (attuned => ");
379  sb.append(level+2);
380  sb.append(")");
381  } else if (level-2 > 1 && (path&stats.getStat(Stats.CS_STAT_SPELL_REPEL)) != 0) {
382  sb.append(" (repelled => ");
383  sb.append(level-2);
384  sb.append(")");
385  }
386  }
387  }
388  if (mana > 0) {
389  sb.append("<br>Mana: ").append(mana);
390  }
391  if (grace > 0) {
392  sb.append("<br>Grace: ").append(grace);
393  }
394  if (damage > 0) {
395  sb.append("<br>Damage: ").append(damage);
396  }
397  } else {
398  sb.append("<br><b>You are denied from casting this spell.</b>");
399  }
400  if (!message.isEmpty()) {
401  sb.append("<br>");
402  sb.append(StringSplitter.splitAsHtml(message));
403  }
404  return sb.toString();
405  }
406 
410  private void fireChanged() {
411  for (SpellListener listener : listeners) {
412  listener.spellChanged();
413  }
414  }
415 
420  public void addSpellListener(@NotNull final SpellListener listener) {
421  listeners.add(listener);
422  }
423 
428  public void removeSpellListener(@NotNull final SpellListener listener) {
429  listeners.remove(listener);
430  }
431 
432 }
com.realtime.crossfire.jxclient.spells.Spell.name
final String name
Definition: Spell.java:43
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.util.StringSplitter.splitAsHtml
static String splitAsHtml(@NotNull final String message)
Definition: StringSplitter.java:58
com.realtime.crossfire.jxclient.spells.Spell.getPath
int getPath()
Definition: Spell.java:189
com.realtime.crossfire.jxclient.spells.SpellPaths
Definition: SpellPaths.java:30
com.realtime.crossfire.jxclient.spells.Spell.faceNum
int faceNum
Definition: Spell.java:54
com.realtime.crossfire.jxclient.spells.Spell.setUnknown
void setUnknown(final boolean unknown)
Definition: Spell.java:231
com.realtime.crossfire.jxclient.spells.Spell.getMessage
String getMessage()
Definition: Spell.java:207
com.realtime.crossfire.jxclient.skills.Skill.toString
String toString()
Definition: Skill.java:145
com.realtime.crossfire.jxclient.spells.Spell.getName
String getName()
Definition: Spell.java:198
com.realtime.crossfire.jxclient.spells.Spell.castingTime
int castingTime
Definition: Spell.java:75
com.realtime.crossfire.jxclient.skills.Skill.getLevel
int getLevel()
Definition: Skill.java:107
com.realtime.crossfire.jxclient.util.EventListenerList2
Definition: EventListenerList2.java:37
com.realtime.crossfire.jxclient.skills.Skill
Definition: Skill.java:35
com.realtime.crossfire.jxclient.stats.Stats
Definition: Stats.java:44
com.realtime.crossfire.jxclient.spells.Spell.listeners
final EventListenerList2< SpellListener > listeners
Definition: Spell.java:49
com.realtime.crossfire.jxclient.spells.Spell.isUnknown
boolean isUnknown()
Definition: Spell.java:223
com.realtime.crossfire.jxclient.util.StringSplitter
Definition: StringSplitter.java:33
com.realtime.crossfire.jxclient.stats.Stats.CS_STAT_SPELL_DENY
static final int CS_STAT_SPELL_DENY
Definition: Stats.java:210
com.realtime.crossfire.jxclient.stats.Stats.CS_STAT_SPELL_REPEL
static final int CS_STAT_SPELL_REPEL
Definition: Stats.java:205
com.realtime.crossfire.jxclient.spells.Spell.setParameters
void setParameters(final int faceNum, final int tag, @NotNull final String message, final int level, final int castingTime, final int mana, final int grace, final int damage, final int skill, final int path)
Definition: Spell.java:251
com.realtime.crossfire.jxclient.stats.Stats.getStat
int getStat(final int statNo)
Definition: Stats.java:771
com.realtime.crossfire.jxclient.spells.Spell.getLevel
int getLevel()
Definition: Spell.java:141
com.realtime.crossfire.jxclient.spells.Spell.Spell
Spell(@NotNull final String name, @NotNull final SkillSet skillSet, @NotNull final Stats stats)
Definition: Spell.java:123
com.realtime.crossfire.jxclient.spells.Spell.skillSet
final SkillSet skillSet
Definition: Spell.java:110
com.realtime.crossfire.jxclient.spells.Spell.updateParameters
void updateParameters(final boolean updateMana, final int mana, final boolean updateGrace, final int grace, final boolean updateDamage, final int damage)
Definition: Spell.java:323
com.realtime.crossfire.jxclient.spells.Spell.removeSpellListener
void removeSpellListener(@NotNull final SpellListener listener)
Definition: Spell.java:428
com.realtime.crossfire.jxclient.spells.Spell.unknown
boolean unknown
Definition: Spell.java:105
com.realtime.crossfire.jxclient.skills
Definition: Skill.java:23
com.realtime.crossfire.jxclient.spells.Spell
Definition: Spell.java:37
com.realtime.crossfire.jxclient.spells.Spell.getTag
int getTag()
Definition: Spell.java:133
com.realtime.crossfire.jxclient.spells.Spell.tag
int tag
Definition: Spell.java:59
com.realtime.crossfire.jxclient.spells.Spell.getSkill
int getSkill()
Definition: Spell.java:181
com.realtime.crossfire.jxclient.stats.Stats.CS_STAT_SPELL_ATTUNE
static final int CS_STAT_SPELL_ATTUNE
Definition: Stats.java:200
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.skills.SkillSet.getSkill
Skill getSkill(final int id)
Definition: SkillSet.java:192
com.realtime.crossfire.jxclient.spells.Spell.message
String message
Definition: Spell.java:65
com.realtime.crossfire.jxclient.spells.Spell.level
int level
Definition: Spell.java:70
com.realtime.crossfire.jxclient.spells.Spell.getCastingTime
int getCastingTime()
Definition: Spell.java:149
com.realtime.crossfire.jxclient.spells.Spell.damage
int damage
Definition: Spell.java:90
com.realtime.crossfire.jxclient.spells.Spell.getFaceNum
int getFaceNum()
Definition: Spell.java:215
com.realtime.crossfire.jxclient.spells.SpellPaths.appendSpellPaths
static void appendSpellPaths(final int path, @NotNull final StringBuilder sb)
Definition: SpellPaths.java:150
com.realtime.crossfire.jxclient.spells.Spell.getMana
int getMana()
Definition: Spell.java:157
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.spells.Spell.toString
String toString()
Definition: Spell.java:348
com.realtime.crossfire.jxclient.spells.Spell.getGrace
int getGrace()
Definition: Spell.java:165
com.realtime.crossfire.jxclient.spells.Spell.path
int path
Definition: Spell.java:100
com
com.realtime.crossfire.jxclient.spells.Spell.fireChanged
void fireChanged()
Definition: Spell.java:410
com.realtime.crossfire.jxclient.spells.Spell.grace
int grace
Definition: Spell.java:85
com.realtime.crossfire.jxclient.spells.Spell.addSpellListener
void addSpellListener(@NotNull final SpellListener listener)
Definition: Spell.java:420
com.realtime.crossfire.jxclient.spells.Spell.skill
int skill
Definition: Spell.java:95
com.realtime.crossfire.jxclient.spells.Spell.mana
int mana
Definition: Spell.java:80
com.realtime.crossfire.jxclient.spells.Spell.getTooltipText
String getTooltipText()
Definition: Spell.java:357
com.realtime.crossfire.jxclient.spells.Spell.stats
final Stats stats
Definition: Spell.java:115
com.realtime.crossfire.jxclient.skills.SkillSet
Definition: SkillSet.java:39
com.realtime.crossfire.jxclient.spells.SpellListener
Definition: SpellListener.java:31
com.realtime.crossfire.jxclient.spells.Spell.getDamage
int getDamage()
Definition: Spell.java:173
com.realtime.crossfire.jxclient.stats
Definition: ActiveSkillWatcher.java:23