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 import org.jetbrains.annotations.Nullable;
33 
38 public class Spell {
39 
43  @NotNull
44  private final String name;
45 
49  @NotNull
51 
55  private int faceNum;
56 
60  private int tag;
61 
65  @NotNull
66  private String message = "";
67 
71  private int level;
72 
76  private int castingTime;
77 
81  private int mana;
82 
86  private int grace;
87 
91  private int damage;
92 
96  private int skill;
97 
101  private int path;
102 
106  private boolean unknown;
107 
111  private final SkillSet skillSet;
112 
116  private final Stats stats;
117 
124  public Spell(@NotNull final String name, @NotNull final SkillSet skillSet, @NotNull final Stats stats) {
125  this.name = name;
126  this.skillSet = skillSet;
127  this.stats = stats;
128  }
129 
134  public int getTag() {
135  return tag;
136  }
137 
142  public int getLevel() {
143  return level;
144  }
145 
150  public int getCastingTime() {
151  return castingTime;
152  }
153 
158  public int getMana() {
159  return mana;
160  }
161 
166  public int getGrace() {
167  return grace;
168  }
169 
174  public int getDamage() {
175  return damage;
176  }
177 
182  public int getSkill() {
183  return skill;
184  }
185 
190  public int getPath() {
191  return path;
192  }
193 
198  @NotNull
199  public String getName() {
200  return name;
201  }
202 
207  @NotNull
208  public String getMessage() {
209  return message;
210  }
211 
216  public int getFaceNum() {
217  return faceNum;
218  }
219 
224  public boolean isUnknown() {
225  return unknown;
226  }
227 
232  public void setUnknown(final boolean unknown) {
233  if (this.unknown != unknown) {
234  this.unknown = unknown;
235  fireChanged();
236  }
237  }
238 
252  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) {
253  boolean changed = false;
254 
255  if (this.faceNum != faceNum) {
256  this.faceNum = faceNum;
257  changed = true;
258  }
259 
260  if (this.tag != tag) {
261  this.tag = tag;
262  changed = true;
263  }
264 
265  if (!this.message.equals(message)) {
266  this.message = message;
267  changed = true;
268  }
269 
270  if (this.level != level) {
271  this.level = level;
272  changed = true;
273  }
274 
275  if (this.castingTime != castingTime) {
276  this.castingTime = castingTime;
277  changed = true;
278  }
279 
280  if (this.mana != mana) {
281  this.mana = mana;
282  changed = true;
283  }
284 
285  if (this.grace != grace) {
286  this.grace = grace;
287  changed = true;
288  }
289 
290  if (this.damage != damage) {
291  this.damage = damage;
292  changed = true;
293  }
294 
295  if (this.skill != skill) {
296  this.skill = skill;
297  changed = true;
298  }
299 
300  if (this.path != path) {
301  this.path = path;
302  changed = true;
303  }
304 
305  if (unknown) {
306  unknown = false;
307  changed = true;
308  }
309 
310  if (changed) {
311  fireChanged();
312  }
313  }
314 
324  public void updateParameters(final boolean updateMana, final int mana, final boolean updateGrace, final int grace, final boolean updateDamage, final int damage) {
325  boolean changed = false;
326 
327  if (updateMana && this.mana != mana) {
328  this.mana = mana;
329  changed = true;
330  }
331 
332  if (updateGrace && this.grace != grace) {
333  this.grace = grace;
334  changed = true;
335  }
336 
337  if (updateDamage && this.damage != damage) {
338  this.damage = damage;
339  changed = true;
340  }
341 
342  if (changed) {
343  fireChanged();
344  }
345  }
346 
347  @NotNull
348  @Override
349  public String toString() {
350  return "Name:"+name+" ID:"+tag+" Level:"+level+" Time:"+castingTime+" Mana:"+mana+" Grace:"+grace+" Damage:"+damage+" Skill:"+skill+" Path:"+path+" Unknown:"+unknown;
351  }
352 
357  @NotNull
358  public String getTooltipText() {
359  final StringBuilder sb = new StringBuilder("<b>");
360  sb.append(name.substring(0, 1).toUpperCase(Locale.ENGLISH)).append(name.substring(1));
361  sb.append("</b>");
362  if (unknown) {
363  sb.append(" (unknown)");
364  }
365  if (path != 0) {
366  sb.append(Integer.bitCount(path) == 1 ? "<br>Spell path:" : "<br>Spell paths:");
368  }
369  if ((path&stats.getStat(Stats.CS_STAT_SPELL_DENY)) == 0) {
370  final Skill sk = skillSet.getSkill(skill);
371  if (sk != null) {
372  sb.append("<br>Skill: ").append(sk);
373  }
374  if (level > 0) {
375  sb.append("<br>Level: ");
376  if (sk != null && level <= sk.getLevel()) {
377  int effective = sk.getLevel()-level;
378  @Nullable final String supp;
380  effective += 2;
381  supp = " (attuned)";
382  } else if ((path&stats.getStat(Stats.CS_STAT_SPELL_REPEL)) != 0) {
383  effective -= 2;
384  supp = " (repelled)";
385  } else {
386  supp = null;
387  }
388  sb.append(effective);
389  if (supp != null) {
390  sb.append(supp);
391  }
392  } else {
393  sb.append(level);
394  }
395  }
396  if (mana > 0) {
397  sb.append("<br>Mana: ").append(mana);
398  }
399  if (grace > 0) {
400  sb.append("<br>Grace: ").append(grace);
401  }
402  if (damage > 0) {
403  sb.append("<br>Damage: ").append(damage);
404  }
405  } else {
406  sb.append("<br><b>You are denied from casting this spell.</b>");
407  }
408  if (!message.isEmpty()) {
409  sb.append("<br>");
410  sb.append(StringSplitter.splitAsHtml(message));
411  }
412  return sb.toString();
413  }
414 
418  private void fireChanged() {
419  for (SpellListener listener : listeners) {
420  listener.spellChanged();
421  }
422  }
423 
428  public void addSpellListener(@NotNull final SpellListener listener) {
429  listeners.add(listener);
430  }
431 
436  public void removeSpellListener(@NotNull final SpellListener listener) {
437  listeners.remove(listener);
438  }
439 
440 }
com.realtime.crossfire.jxclient.spells.Spell.removeSpellListener
void removeSpellListener(@NotNull final SpellListener listener)
Definition: Spell.java:436
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.spells.Spell.skill
int skill
Definition: Spell.java:96
com.realtime.crossfire.jxclient.spells.Spell.castingTime
int castingTime
Definition: Spell.java:76
com.realtime.crossfire.jxclient.spells.Spell.mana
int mana
Definition: Spell.java:81
com.realtime.crossfire.jxclient.spells.Spell.getLevel
int getLevel()
Definition: Spell.java:142
com.realtime.crossfire.jxclient.spells.Spell.message
String message
Definition: Spell.java:66
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.spells.Spell.unknown
boolean unknown
Definition: Spell.java:106
com.realtime.crossfire.jxclient.spells.Spell.getPath
int getPath()
Definition: Spell.java:190
com.realtime.crossfire.jxclient.spells.Spell.getMessage
String getMessage()
Definition: Spell.java:208
com.realtime.crossfire.jxclient.spells.SpellPaths
Definition: SpellPaths.java:30
com.realtime.crossfire.jxclient.spells.SpellListener
Definition: SpellListener.java:31
com.realtime.crossfire.jxclient.spells.Spell.getFaceNum
int getFaceNum()
Definition: Spell.java:216
com.realtime.crossfire.jxclient.spells.Spell.path
int path
Definition: Spell.java:101
com.realtime.crossfire.jxclient.spells.Spell.getCastingTime
int getCastingTime()
Definition: Spell.java:150
com.realtime.crossfire.jxclient.spells.Spell.Spell
Spell(@NotNull final String name, @NotNull final SkillSet skillSet, @NotNull final Stats stats)
Definition: Spell.java:124
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.spells.Spell.addSpellListener
void addSpellListener(@NotNull final SpellListener listener)
Definition: Spell.java:428
com.realtime.crossfire.jxclient.spells.Spell.getGrace
int getGrace()
Definition: Spell.java:166
com.realtime.crossfire.jxclient.util.EventListenerList2
Definition: EventListenerList2.java:37
com.realtime.crossfire.jxclient.spells.Spell.listeners
final EventListenerList2< SpellListener > listeners
Definition: Spell.java:50
com.realtime.crossfire.jxclient.spells.Spell
Definition: Spell.java:38
com.realtime.crossfire.jxclient.spells.Spell.name
final String name
Definition: Spell.java:44
com.realtime.crossfire.jxclient.spells.Spell.getTag
int getTag()
Definition: Spell.java:134
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.skills
Definition: Skill.java:23
com.realtime.crossfire.jxclient.skills.Skill
Definition: Skill.java:35
com.realtime.crossfire.jxclient.util.StringSplitter.splitAsHtml
static String splitAsHtml(@NotNull final String message)
Definition: StringSplitter.java:58
com.realtime.crossfire.jxclient.spells.Spell.level
int level
Definition: Spell.java:71
com.realtime.crossfire.jxclient.skills.SkillSet.getSkill
Skill getSkill(final int id)
Definition: SkillSet.java:192
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:252
com.realtime.crossfire.jxclient.spells.Spell.fireChanged
void fireChanged()
Definition: Spell.java:418
com.realtime.crossfire.jxclient.stats.Stats
Definition: Stats.java:44
com.realtime.crossfire.jxclient.util.StringSplitter
Definition: StringSplitter.java:33
com.realtime.crossfire.jxclient.spells.Spell.damage
int damage
Definition: Spell.java:91
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.spells.Spell.isUnknown
boolean isUnknown()
Definition: Spell.java:224
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:324
com.realtime.crossfire.jxclient.spells.Spell.getDamage
int getDamage()
Definition: Spell.java:174
com.realtime.crossfire.jxclient.spells.Spell.faceNum
int faceNum
Definition: Spell.java:55
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.spells.Spell.tag
int tag
Definition: Spell.java:60
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.getName
String getName()
Definition: Spell.java:199
com
com.realtime.crossfire.jxclient.spells.Spell.stats
final Stats stats
Definition: Spell.java:116
com.realtime.crossfire.jxclient.skills.SkillSet
Definition: SkillSet.java:39
com.realtime.crossfire.jxclient.stats.Stats.getStat
int getStat(final int statNo)
Definition: Stats.java:771
com.realtime.crossfire.jxclient.spells.Spell.grace
int grace
Definition: Spell.java:86
com.realtime.crossfire.jxclient.spells.Spell.skillSet
final SkillSet skillSet
Definition: Spell.java:111
com.realtime.crossfire.jxclient.spells.Spell.toString
String toString()
Definition: Spell.java:349
com.realtime.crossfire.jxclient.spells.Spell.getTooltipText
String getTooltipText()
Definition: Spell.java:358
com.realtime.crossfire.jxclient.skills.Skill.getLevel
int getLevel()
Definition: Skill.java:107
com.realtime.crossfire.jxclient.spells.Spell.setUnknown
void setUnknown(final boolean unknown)
Definition: Spell.java:232
com.realtime.crossfire.jxclient.stats
Definition: ActiveSkillWatcher.java:23
com.realtime.crossfire.jxclient.spells.Spell.getSkill
int getSkill()
Definition: Spell.java:182
com.realtime.crossfire.jxclient.spells.Spell.getMana
int getMana()
Definition: Spell.java:158