Crossfire JXClient, Trunk
CfItem.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.items;
24 
28 import org.jetbrains.annotations.NotNull;
29 
37 public class CfItem {
38 
42  private final int tag;
43 
47  private int flags;
48 
52  private int weight;
53 
57  @NotNull
58  private Face face;
59 
63  @NotNull
64  private String name;
65 
69  @NotNull
70  private String namePl;
71 
75  private int anim;
76 
80  private int animSpeed;
81 
85  private int nrof;
86 
90  private int location;
91 
95  private final int type;
96 
101  private boolean modified = true;
102 
106  private boolean marked;
107 
111  public static final int F_APPLIED = 0x000F;
112 
116  public static final int F_UNIDENTIFIED = 0x0010;
117 
121  public static final int F_READ = 0x0020;
122 
126  public static final int F_BLESSED = 0x0100;
127 
131  public static final int F_UNPAID = 0x0200;
132 
136  public static final int F_MAGIC = 0x0400;
137 
141  public static final int F_CURSED = 0x0800;
142 
146  public static final int F_DAMNED = 0x1000;
147 
151  public static final int F_OPEN = 0x2000;
152 
156  public static final int F_NOPICK = 0x4000;
157 
161  public static final int F_LOCKED = 0x8000;
162 
167 
182  public CfItem(final int location, final int tag, final int flags, final int weight, @NotNull final Face face, @NotNull final String name, @NotNull final String namePl, final int anim, final int animSpeed, final int nrof, final int type) {
183  this.location = location;
184  this.tag = tag;
185  this.flags = flags;
186  this.weight = weight;
187  this.face = face;
188  this.name = name;
189  this.namePl = namePl;
190  this.anim = anim;
191  this.animSpeed = animSpeed;
192  this.nrof = nrof;
193  this.type = type;
194  }
195 
200  private void setFlags(final int flags) {
201  if (this.flags != flags) {
202  this.flags = flags;
203  modified = true;
204  }
205  }
206 
211  private void setWeight(final int weight) {
212  if (this.weight != weight) {
213  this.weight = weight;
214  modified = true;
215  }
216  }
217 
222  private void setFace(@NotNull final Face face) {
223  if (this.face != face) {
224  this.face = face;
225  modified = true;
226  }
227  }
228 
234  private void setName(@NotNull final String name, @NotNull final String namePl) {
235  if (!this.name.equals(name) || !this.namePl.equals(namePl)) {
236  this.name = name;
237  this.namePl = namePl;
238  modified = true;
239  }
240  }
241 
246  private void setAnim(final int anim) {
247  if (this.anim != anim) {
248  this.anim = anim;
249  modified = true;
250  }
251  }
252 
257  private void setAnimSpeed(final int animSpeed) {
258  if (this.animSpeed != animSpeed) {
259  this.animSpeed = animSpeed;
260  modified = true;
261  }
262  }
263 
268  private void setNrOf(final int nrof) {
269  if (this.nrof != nrof) {
270  this.nrof = nrof;
271  modified = true;
272  }
273  }
274 
279  public void setLocation(final int location) {
280  this.location = location;
281  }
282 
287  public int getTag() {
288  return tag;
289  }
290 
295  public int getWeight() {
296  return weight;
297  }
298 
303  @NotNull
304  public Face getFace() {
305  return face;
306  }
307 
312  @NotNull
313  public String getName() {
314  return nrof > 1 ? namePl : name;
315  }
316 
321  public int getAnim() {
322  return anim;
323  }
324 
329  public int getAnimSpeed() {
330  return animSpeed;
331  }
332 
337  public int getNrOf() {
338  return nrof;
339  }
340 
345  public boolean isApplied() {
346  return (flags&F_APPLIED) != 0;
347  }
348 
353  public boolean isUnidentified() {
354  return (flags&F_UNIDENTIFIED) != 0;
355  }
356 
361  public boolean isBlessed() {
362  return (flags&F_BLESSED) != 0;
363  }
364 
369  public boolean isUnpaid() {
370  return (flags&F_UNPAID) != 0;
371  }
372 
377  public boolean isMagic() {
378  return (flags&F_MAGIC) != 0;
379  }
380 
385  public boolean isCursed() {
386  return (flags&F_CURSED) != 0;
387  }
388 
393  public boolean isDamned() {
394  return (flags&F_DAMNED) != 0;
395  }
396 
401  public boolean isOpen() {
402  return (flags&F_OPEN) != 0;
403  }
404 
409  public boolean isNoPick() {
410  return (flags&F_NOPICK) != 0;
411  }
412 
417  public boolean isLocked() {
418  return (flags&F_LOCKED) != 0;
419  }
420 
425  public boolean isMarked() {
426  return marked;
427  }
428 
433  public void setMarked(final boolean marked) {
434  if (this.marked == marked) {
435  return;
436  }
437  this.marked = marked;
438  fireModified();
439  }
440 
445  public int getLocation() {
446  return location;
447  }
448 
453  public int getType() {
454  return type;
455  }
456 
470  public void update(final int updateFlags, final int flags, final int weight, @NotNull final Face face, @NotNull final String name, @NotNull final String namePl, final int anim, final int animSpeed, final int nrof, final boolean clearMarked) {
471  if ((updateFlags&UpdItem.UPD_FLAGS) != 0) {
472  setFlags(flags);
473  }
474  if ((updateFlags&UpdItem.UPD_WEIGHT) != 0) {
475  setWeight(weight);
476  }
477  if ((updateFlags&UpdItem.UPD_FACE) != 0) {
478  setFace(face);
479  }
480  if ((updateFlags&UpdItem.UPD_NAME) != 0) {
481  setName(name, namePl);
482  }
483  if ((updateFlags&UpdItem.UPD_ANIM) != 0) {
484  setAnim(anim);
485  }
486  if ((updateFlags&UpdItem.UPD_ANIMSPEED) != 0) {
488  }
489  if ((updateFlags&UpdItem.UPD_NROF) != 0) {
490  setNrOf(nrof);
491  }
492  if (clearMarked) {
493  marked = false;
494  }
495  fireModified();
496  }
497 
501  private void fireModified() {
502  if (!modified) {
503  return;
504  }
505  modified = false;
506 
507  for (CfItemListener listener : listeners) {
508  listener.itemModified();
509  }
510  }
511 
517  public void addCfItemModifiedListener(@NotNull final CfItemListener listener) {
518  listeners.add(listener);
519  }
520 
525  public void removeCfItemModifiedListener(@NotNull final CfItemListener listener) {
526  listeners.remove(listener);
527  }
528 
533  @NotNull
534  public String getTooltipText() {
535  final String tooltipText1 = getTooltipText1();
536  final String tooltipText2 = getTooltipText2();
537  final String tooltipText3 = getTooltipText3();
538  final StringBuilder sb = new StringBuilder(tooltipText1);
539  if (!tooltipText2.isEmpty()) {
540  sb.append("<br>");
541  sb.append(tooltipText2);
542  }
543  if (!tooltipText3.isEmpty()) {
544  sb.append("<br>");
545  sb.append(tooltipText3);
546  }
547  return sb.toString();
548  }
549 
554  @NotNull
555  public String getTooltipText1() {
556  return nrof > 1 ? nrof+" "+namePl : name;
557  }
558 
563  @NotNull
564  public String getTooltipText2() {
565  final int totalWeight = nrof > 0 ? weight*nrof : weight;
566  if (totalWeight <= 0) {
567  return "";
568  }
569  if (totalWeight < 1000) {
570  return totalWeight+" g";
571  }
572  if (totalWeight < 10000) {
573  final int tmp = (totalWeight+50)/100;
574  return tmp/10+"."+tmp%10+" kg";
575  }
576  final int tmp = (totalWeight+500)/1000;
577  return tmp+" kg";
578  }
579 
584  @NotNull
585  public String getTooltipText3() {
586  final StringBuilder sb = new StringBuilder();
587  appendFlag(sb, F_UNIDENTIFIED, "unidentified");
588  appendFlag(sb, F_BLESSED, "blessed");
589  appendFlag(sb, F_MAGIC, "magic");
590  appendFlag(sb, F_CURSED, "cursed");
591  appendFlag(sb, F_DAMNED, "damned");
592  appendFlag(sb, F_UNPAID, "unpaid");
593  appendFlag(sb, F_READ, "read");
594  if (marked) {
595  sb.append("(marked)");
596  }
597  return sb.toString();
598  }
599 
606  private void appendFlag(@NotNull final StringBuilder sb, final int flag, @NotNull final String ident) {
607  if ((flags&flag) != 0) {
608  sb.append('(');
609  sb.append(ident);
610  sb.append(')');
611  }
612  }
613 
619  public boolean isItemGroupButton() {
620  return flags == 0 && weight == -1 && nrof == 0 && type == 0 && name.startsWith("Click here to see ");
621  }
622 
623 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.items.CfItem.modified
boolean modified
Definition: CfItem.java:101
com.realtime.crossfire.jxclient.items.CfItem.anim
int anim
Definition: CfItem.java:75
com.realtime.crossfire.jxclient.items.CfItem.isBlessed
boolean isBlessed()
Definition: CfItem.java:361
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_ANIM
int UPD_ANIM
Definition: UpdItem.java:59
com.realtime.crossfire.jxclient.items.CfItem.addCfItemModifiedListener
void addCfItemModifiedListener(@NotNull final CfItemListener listener)
Definition: CfItem.java:517
com.realtime.crossfire.jxclient.items.CfItem.isMagic
boolean isMagic()
Definition: CfItem.java:377
com.realtime.crossfire.jxclient.items.CfItem.isUnpaid
boolean isUnpaid()
Definition: CfItem.java:369
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_WEIGHT
int UPD_WEIGHT
Definition: UpdItem.java:44
com.realtime.crossfire.jxclient.items.CfItem.getTooltipText3
String getTooltipText3()
Definition: CfItem.java:585
com.realtime.crossfire.jxclient.items.CfItem.F_UNIDENTIFIED
static final int F_UNIDENTIFIED
Definition: CfItem.java:116
com.realtime.crossfire.jxclient.items.CfItem.F_CURSED
static final int F_CURSED
Definition: CfItem.java:141
com.realtime.crossfire.jxclient.items.CfItem.location
int location
Definition: CfItem.java:90
com.realtime.crossfire.jxclient.items.CfItem.isNoPick
boolean isNoPick()
Definition: CfItem.java:409
com.realtime.crossfire.jxclient.util.EventListenerList2
Definition: EventListenerList2.java:37
com.realtime.crossfire.jxclient.items.CfItem.appendFlag
void appendFlag(@NotNull final StringBuilder sb, final int flag, @NotNull final String ident)
Definition: CfItem.java:606
com.realtime.crossfire.jxclient.items.CfItem.setAnimSpeed
void setAnimSpeed(final int animSpeed)
Definition: CfItem.java:257
com.realtime.crossfire.jxclient.items.CfItem.isLocked
boolean isLocked()
Definition: CfItem.java:417
com.realtime.crossfire.jxclient.items.CfItem.type
final int type
Definition: CfItem.java:95
com.realtime.crossfire.jxclient.faces
Definition: AbstractFaceQueue.java:23
com.realtime.crossfire.jxclient.items.CfItem.isDamned
boolean isDamned()
Definition: CfItem.java:393
com.realtime.crossfire.jxclient.items.CfItem.setMarked
void setMarked(final boolean marked)
Definition: CfItem.java:433
com.realtime.crossfire.jxclient.items.CfItem.fireModified
void fireModified()
Definition: CfItem.java:501
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_ANIMSPEED
int UPD_ANIMSPEED
Definition: UpdItem.java:64
com.realtime.crossfire.jxclient.protocol
Definition: MagicMap.java:23
com.realtime.crossfire.jxclient.items.CfItem.F_OPEN
static final int F_OPEN
Definition: CfItem.java:151
com.realtime.crossfire.jxclient.items.CfItem.getTooltipText
String getTooltipText()
Definition: CfItem.java:534
com.realtime.crossfire.jxclient.items.CfItem.isCursed
boolean isCursed()
Definition: CfItem.java:385
com.realtime.crossfire.jxclient.items.CfItem.isOpen
boolean isOpen()
Definition: CfItem.java:401
com.realtime.crossfire.jxclient.items.CfItem.getTooltipText1
String getTooltipText1()
Definition: CfItem.java:555
com.realtime.crossfire.jxclient.items.CfItem.isUnidentified
boolean isUnidentified()
Definition: CfItem.java:353
com.realtime.crossfire.jxclient.items.CfItem.F_APPLIED
static final int F_APPLIED
Definition: CfItem.java:111
com.realtime.crossfire.jxclient.items.CfItem.getNrOf
int getNrOf()
Definition: CfItem.java:337
com.realtime.crossfire.jxclient.items.CfItem.getLocation
int getLocation()
Definition: CfItem.java:445
com.realtime.crossfire.jxclient.items.CfItem.isItemGroupButton
boolean isItemGroupButton()
Definition: CfItem.java:619
com.realtime.crossfire.jxclient.items.CfItem.isMarked
boolean isMarked()
Definition: CfItem.java:425
com.realtime.crossfire.jxclient.items.CfItem.setFlags
void setFlags(final int flags)
Definition: CfItem.java:200
com.realtime.crossfire.jxclient.items.CfItem.face
Face face
Definition: CfItem.java:58
com.realtime.crossfire.jxclient.items.CfItem.namePl
String namePl
Definition: CfItem.java:70
com.realtime.crossfire.jxclient.items.CfItem.marked
boolean marked
Definition: CfItem.java:106
com.realtime.crossfire.jxclient.items.CfItem.isApplied
boolean isApplied()
Definition: CfItem.java:345
com.realtime.crossfire.jxclient.items.CfItem.F_LOCKED
static final int F_LOCKED
Definition: CfItem.java:161
com.realtime.crossfire.jxclient.items.CfItem.setWeight
void setWeight(final int weight)
Definition: CfItem.java:211
com.realtime.crossfire.jxclient.items.CfItem.nrof
int nrof
Definition: CfItem.java:85
com.realtime.crossfire.jxclient.items.CfItem.getAnimSpeed
int getAnimSpeed()
Definition: CfItem.java:329
com.realtime.crossfire.jxclient.items.CfItem.name
String name
Definition: CfItem.java:64
com.realtime.crossfire.jxclient.items.CfItem
Definition: CfItem.java:37
com.realtime.crossfire.jxclient.items.CfItem.F_BLESSED
static final int F_BLESSED
Definition: CfItem.java:126
com.realtime.crossfire.jxclient.items.CfItem.animSpeed
int animSpeed
Definition: CfItem.java:80
com.realtime.crossfire.jxclient.items.CfItem.setLocation
void setLocation(final int location)
Definition: CfItem.java:279
com.realtime.crossfire.jxclient.items.CfItem.flags
int flags
Definition: CfItem.java:47
com.realtime.crossfire.jxclient.items.CfItem.getName
String getName()
Definition: CfItem.java:313
com.realtime.crossfire.jxclient.items.CfItem.listeners
final EventListenerList2< CfItemListener > listeners
Definition: CfItem.java:166
com.realtime.crossfire.jxclient.items.CfItem.getWeight
int getWeight()
Definition: CfItem.java:295
com.realtime.crossfire.jxclient.items.CfItem.F_UNPAID
static final int F_UNPAID
Definition: CfItem.java:131
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_FLAGS
int UPD_FLAGS
Definition: UpdItem.java:39
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_NROF
int UPD_NROF
Definition: UpdItem.java:69
com.realtime.crossfire.jxclient.items.CfItem.F_MAGIC
static final int F_MAGIC
Definition: CfItem.java:136
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_FACE
int UPD_FACE
Definition: UpdItem.java:49
com.realtime.crossfire
com.realtime.crossfire.jxclient.items.CfItem.CfItem
CfItem(final int location, final int tag, final int flags, final int weight, @NotNull final Face face, @NotNull final String name, @NotNull final String namePl, final int anim, final int animSpeed, final int nrof, final int type)
Definition: CfItem.java:182
com.realtime.crossfire.jxclient.items.CfItem.getTag
int getTag()
Definition: CfItem.java:287
com.realtime
com
com.realtime.crossfire.jxclient.items.CfItem.getType
int getType()
Definition: CfItem.java:453
com.realtime.crossfire.jxclient.items.CfItem.F_DAMNED
static final int F_DAMNED
Definition: CfItem.java:146
com.realtime.crossfire.jxclient.items.CfItem.setName
void setName(@NotNull final String name, @NotNull final String namePl)
Definition: CfItem.java:234
com.realtime.crossfire.jxclient.items.CfItem.getFace
Face getFace()
Definition: CfItem.java:304
com.realtime.crossfire.jxclient.protocol.UpdItem
Definition: UpdItem.java:29
com.realtime.crossfire.jxclient.items.CfItem.getTooltipText2
String getTooltipText2()
Definition: CfItem.java:564
com.realtime.crossfire.jxclient.items.CfItem.update
void update(final int updateFlags, final int flags, final int weight, @NotNull final Face face, @NotNull final String name, @NotNull final String namePl, final int anim, final int animSpeed, final int nrof, final boolean clearMarked)
Definition: CfItem.java:470
com.realtime.crossfire.jxclient.items.CfItemListener
Definition: CfItemListener.java:31
com.realtime.crossfire.jxclient.items.CfItem.tag
final int tag
Definition: CfItem.java:42
com.realtime.crossfire.jxclient.items.CfItem.removeCfItemModifiedListener
void removeCfItemModifiedListener(@NotNull final CfItemListener listener)
Definition: CfItem.java:525
com.realtime.crossfire.jxclient.items.CfItem.F_NOPICK
static final int F_NOPICK
Definition: CfItem.java:156
com.realtime.crossfire.jxclient.items.CfItem.setFace
void setFace(@NotNull final Face face)
Definition: CfItem.java:222
com.realtime.crossfire.jxclient.items.CfItem.setNrOf
void setNrOf(final int nrof)
Definition: CfItem.java:268
com.realtime.crossfire.jxclient.items.CfItem.getAnim
int getAnim()
Definition: CfItem.java:321
com.realtime.crossfire.jxclient.items.CfItem.weight
int weight
Definition: CfItem.java:52
com.realtime.crossfire.jxclient.faces.Face
Definition: Face.java:37
com.realtime.crossfire.jxclient.items.CfItem.setAnim
void setAnim(final int anim)
Definition: CfItem.java:246
com.realtime.crossfire.jxclient.protocol.UpdItem.UPD_NAME
int UPD_NAME
Definition: UpdItem.java:54
com.realtime.crossfire.jxclient.items.CfItem.F_READ
static final int F_READ
Definition: CfItem.java:121