/*******************************************************************************
* Copyright (C) 2013 JMaNGOS <http://jmangos.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package org.jmangos.commons.entities;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
import javolution.util.FastMap;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jmangos.commons.enums.Classes;
import org.jmangos.commons.enums.Gender;
import org.jmangos.commons.enums.ModType;
import org.jmangos.commons.enums.ModelType;
import org.jmangos.commons.enums.Powers;
import org.jmangos.commons.enums.Races;
import org.jmangos.commons.enums.SheathState;
import org.jmangos.commons.enums.Stats;
import org.jmangos.commons.enums.TypeID;
import org.jmangos.commons.enums.TypeMask;
import org.jmangos.commons.model.UnitRegenModifier;
import org.jmangos.commons.update.UnitField;
/**
*
* @author MinimaJack
*
*/
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class FieldsUnit extends FieldsObject {
/**
*
*/
private static final long serialVersionUID = -8718270667688469021L;
@Transient
private long charm;
@Transient
private long summon;
@Transient
private long critter;
@Transient
private long charmedBy;
@Transient
private long summonedBy;
@Transient
private long createdBy;
@Transient
private long target;
@Transient
private long channelObject;
@Transient
private int channelSpell;
@Transient
private Map<Byte, UnitRegenModifier> powerRegenModifier =
new FastMap<Byte, UnitRegenModifier>();
{
// FIX for test
final UnitRegenModifier rfm = new UnitRegenModifier();
rfm.setFlat(6.789616f);
this.powerRegenModifier.put((byte) 0, rfm);
}
@Transient
private int faction_template = 1;
@Transient
private int[] virtualItems = new int[3];
@Transient
private int flags;
@Transient
private int flags2;
@Transient
private int aurastate;
@Transient
private final int[] attackTime = new int[3];
@Transient
private float boundingRadius;
@Transient
private float combatReach;
@Transient
private final int[] displayIds = new int[ModelType.COUNT_MODEL_TYPES];
@Transient
private final float[] mainDemage = new float[2];
@Transient
private float[] offDemage = new float[2];
@Transient
private int bytes1;
@Transient
private int petNumber;
@Transient
private int petNameTimeStamp;
@Transient
private int petExperience;
@Transient
private int petNextLevelXp;
@Transient
private int dynamicFlags;
@Transient
private float modCastSpeed;
@Transient
private int createdBySpell;
@Transient
private int npcFlags;
@Transient
private int npcEmoteState;
@Transient
private final int[] stat = new int[5];
@Transient
private final int[] createStat = new int[5];
@Transient
private int[] positiveStat = new int[5];
@Transient
private int[] negativeStat = new int[5];
@Transient
private final int[] resistances = new int[7];
@Transient
private int[] positiveResistances = new int[7];
@Transient
private int[] negativeResistances = new int[7];
@Transient
private int baseMana;
@Transient
private int baseHealth;
@Transient
private int bytes2;
@Transient
private int attackPower;
@Transient
private int attackPowerMod;
@Transient
private float attackPowerMul;
@Transient
private int rangedAttackPower;
@Transient
private int rangedAttackPowerMod;
@Transient
private float rangedAttackPowerMul;
@Transient
private final float[] rangedDemage = new float[2];
@Transient
private int[] powerCostMod = new int[7];
@Transient
private float[] powerCostMul = new float[7];
@Transient
private float maxHealthMul;
@Transient
private float hoverHeight = 1f;
@Transient
private final float[][] powerModifiersGroup =
new float[Powers.values().length][ModType.values().length];
/**
*
*/
public FieldsUnit() {
super();
for (final Powers power : Powers.values()) {
this.powerModifiersGroup[power.ordinal()][ModType.BASE_PCT.ordinal()] = 1f;
this.powerModifiersGroup[power.ordinal()][ModType.TOTAL_PCT.ordinal()] = 1f;
}
}
/*
* (non-Javadoc)
*
* @see org.jmangos.test.subentities.BaseObject#initBits()
*/
@Override
public void initBits() {
super.initBits();
setType(getType() | TypeMask.UNIT.getValue());
this.bitSet.set(UnitField.UNIT_FIELD_BYTES_0.getValue());
this.bitSet.set(UnitField.UNIT_FIELD_LEVEL.getValue());
this.bitSet.set(UnitField.UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER.getValue());
this.bitSet.set(UnitField.UNIT_FIELD_FACTIONTEMPLATE.getValue());
this.bitSet.set(UnitField.UNIT_FIELD_HOVERHEIGHT.getValue());
setModCastSpeed(1.0f);
}
public void initBitsForCollections() {
for (final Powers power : Powers.PLAYER_CREATE_POWERS) {
switch (power) {
case ENERGY:
case RAGE:
case FOCUS:
case RUNE:
case HEALTH:
case MANA:
this.bitSet.set(UnitField.UNIT_FIELD_HEALTH.getValue() + power.ordinal());
this.bitSet.set(UnitField.UNIT_FIELD_MAXHEALTH.getValue() + power.ordinal());
break;
default:
break;
}
}
}
/*
* (non-Javadoc)
*
* @see org.jmangos.test.subentities.BaseObject#getTypeId()
*/
@Override
public TypeID getTypeId() {
return TypeID.UNIT;
}
/*
* (non-Javadoc)
*
* @see
* org.jmangos.test.subentities.ItemObject#writeValuesUpdate(java.nio.ByteBuffer
* )
*/
@Override
public ChannelBuffer writeValuesUpdate() {
final ChannelBuffer ocBuffer = super.writeValuesUpdate();
if (this.bitSet.get(UnitField.UNIT_FIELD_BYTES_0.getValue())) {
ocBuffer.writeInt(getBytes());
};
for (final Powers power : Powers.values()) {
if (this.bitSet.get(UnitField.UNIT_FIELD_HEALTH.getValue() + power.ordinal())) {
ocBuffer.writeInt(getPowers().getPower(power));
}
}
for (final Powers power : Powers.values()) {
if (this.bitSet.get(UnitField.UNIT_FIELD_MAXHEALTH.getValue() + power.ordinal())) {
ocBuffer.writeInt(getPowers().getMaxPower(power));
}
}
for (final Entry<Byte, UnitRegenModifier> mod : this.powerRegenModifier.entrySet()) {
if (this.bitSet.get(UnitField.UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER.getValue() +
mod.getKey())) {
ocBuffer.writeFloat(mod.getValue().getFlat());
}
}
for (final Entry<Byte, UnitRegenModifier> mod : this.powerRegenModifier.entrySet()) {
if (this.bitSet.get(UnitField.UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER.getValue() +
mod.getKey())) {
ocBuffer.writeFloat(mod.getValue().getInterrupted());
}
}
if (this.bitSet.get(UnitField.UNIT_FIELD_LEVEL.getValue())) {
ocBuffer.writeInt(getLevel());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_FACTIONTEMPLATE.getValue())) {
ocBuffer.writeInt(getFaction_template());
}
for (int i = 0; i < 3; i++) {
if (this.bitSet.get(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID.getValue() + i)) {
ocBuffer.writeInt(getVirtualItems()[i]);
}
}
if (this.bitSet.get(UnitField.UNIT_FIELD_FLAGS.getValue())) {
ocBuffer.writeInt(getFlags());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_FLAGS_2.getValue())) {
ocBuffer.writeInt(getFlags2());
}
for (int i = 0; i < 3; i++) {
if (this.bitSet.get(UnitField.UNIT_FIELD_BASEATTACKTIME.getValue() + i)) {
ocBuffer.writeInt(getAttackTime()[i]);
}
}
if (this.bitSet.get(UnitField.UNIT_FIELD_BOUNDINGRADIUS.getValue())) {
ocBuffer.writeFloat(getBoundingRadius());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_COMBATREACH.getValue())) {
ocBuffer.writeFloat(getCombatReach());
}
for (int i = 0; i < 3; i++) {
if (this.bitSet.get(UnitField.UNIT_FIELD_DISPLAYID.getValue() + i)) {
ocBuffer.writeInt(getDisplayIds()[i]);
}
}
for (int i = 0; i < 2; i++) {
if (this.bitSet.get(UnitField.UNIT_FIELD_MINDAMAGE.getValue() + i)) {
ocBuffer.writeFloat(getMainDemage()[i]);
}
}
if (this.bitSet.get(UnitField.UNIT_MOD_CAST_SPEED.getValue())) {
ocBuffer.writeFloat(getModCastSpeed());
}
for (final Stats stat : Stats.values()) {
if (this.bitSet.get(UnitField.UNIT_FIELD_STAT0.getValue() + stat.ordinal())) {
ocBuffer.writeInt(getStat(stat));
}
}
for (int i = 0; i < 7; i++) {
if (this.bitSet.get(UnitField.UNIT_FIELD_RESISTANCES.getValue() + i)) {
ocBuffer.writeInt(getResistances()[i]);
}
}
if (this.bitSet.get(UnitField.UNIT_FIELD_BASE_MANA.getValue())) {
ocBuffer.writeInt(getBaseMana());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_BASE_HEALTH.getValue())) {
ocBuffer.writeInt(getBaseHealth());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_BYTES_2.getValue())) {
ocBuffer.writeInt(getBytes2());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_ATTACK_POWER.getValue())) {
ocBuffer.writeInt(getAttackPower());
}
if (this.bitSet.get(UnitField.UNIT_FIELD_RANGED_ATTACK_POWER.getValue())) {
ocBuffer.writeInt(getRangedAttackPower());
}
for (int i = 0; i < 2; i++) {
if (this.bitSet.get(UnitField.UNIT_FIELD_MINRANGEDDAMAGE.getValue() + i)) {
ocBuffer.writeFloat(getRangedDemage()[i]);
}
}
if (this.bitSet.get(UnitField.UNIT_FIELD_HOVERHEIGHT.getValue())) {
ocBuffer.writeFloat(getHoverHeight());
}
return ocBuffer;
}
public void setRace(final Races race) {
setBytes((getBytes() & 0xFFFFFF00) | (race.getValue()));
}
public Races getRace() {
return Races.get(getBytes() & 0xFF);
}
public void setClazz(final Classes clazz) {
setBytes((getBytes() & 0xFFFF00FF) | (clazz.getValue() << 8));
}
public Classes getClazz() {
return Classes.get((getBytes() >> 8) & 0xFF);
}
public void setGender(final Gender gender) {
setBytes((getBytes() & ~(0xFF << 16)) | (gender.getValue() << 16));
}
public Gender getGender() {
return Gender.get((getBytes() >> 16) & 0xFF);
}
public void setPowerType(final int power) {
setBytes((getBytes() & ~(0xFF << 24)) | (power << 24));
}
/**
* @return the charm
*/
public final long getCharm() {
return this.charm;
}
/**
* @param charm
* the charm to set
*/
public final void setCharm(final long charm) {
this.charm = charm;
}
/**
* @return the summon
*/
public final long getSummon() {
return this.summon;
}
/**
* @param summon
* the summon to set
*/
public final void setSummon(final long summon) {
this.summon = summon;
}
/**
* @return the critter
*/
public final long getCritter() {
return this.critter;
}
/**
* @param critter
* the critter to set
*/
public final void setCritter(final long critter) {
this.critter = critter;
}
/**
* @return the charmedBy
*/
public final long getCharmedBy() {
return this.charmedBy;
}
/**
* @param charmedBy
* the charmedBy to set
*/
public final void setCharmedBy(final long charmedBy) {
this.charmedBy = charmedBy;
}
/**
* @return the summonedBy
*/
public final long getSummonedBy() {
return this.summonedBy;
}
/**
* @param summonedBy
* the summonedBy to set
*/
public final void setSummonedBy(final long summonedBy) {
this.summonedBy = summonedBy;
}
/**
* @return the createdBy
*/
public final long getCreatedBy() {
return this.createdBy;
}
/**
* @param createdBy
* the createdBy to set
*/
public final void setCreatedBy(final long createdBy) {
this.createdBy = createdBy;
}
/**
* @return the target
*/
public final long getTarget() {
return this.target;
}
/**
* @param target
* the target to set
*/
public final void setTarget(final long target) {
this.target = target;
}
/**
* @return the channelObject
*/
public final long getChannelObject() {
return this.channelObject;
}
/**
* @param channelObject
* the channelObject to set
*/
public final void setChannelObject(final long channelObject) {
this.channelObject = channelObject;
}
/**
* @return the channelSpell
*/
public final int getChannelSpell() {
return this.channelSpell;
}
/**
* @param channelSpell
* the channelSpell to set
*/
public final void setChannelSpell(final int channelSpell) {
this.channelSpell = channelSpell;
}
/**
* @return the bytes
*/
public abstract int getBytes();
/**
* @param bytes
* the bytes to set
*/
public void setBytes(final int bytes) {
this.bitSet.set(UnitField.UNIT_FIELD_BYTES_0.getValue());
}
/**
* @return the powers
*/
public abstract CreaturePowers getPowers();
/**
* @param powers
* the powers to set
*/
public abstract void setPowers(final CreaturePowers powers);
/**
* @param powers
* the powers to set
*/
public void setPower(final Powers power, final int value) {
this.bitSet.set(UnitField.UNIT_FIELD_HEALTH.getValue() + power.ordinal());
getPowers().setPower(power, value);
}
/**
* @param powers
* the powers to set
*/
public final void setCreatePower(final Powers power, final int value) {
System.out.println("set create power " + power + " " + value);
getPowers().setCreatePower(power, value);
}
/**
* @param powers
* the powers to set
*/
public final void setMaxPower(final Powers power, final int value) {
this.bitSet.set(UnitField.UNIT_FIELD_MAXHEALTH.getValue() + power.ordinal());
getPowers().setMaxPower(power, value);
}
public final Powers getPowerType() {
switch (getClazz()) {
case DEATH_KNIGHT:
return Powers.RUNIC_POWER;
case ROGUE:
return Powers.ENERGY;
case WARRIOR:
return Powers.RAGE;
default:
return Powers.MANA;
}
}
/**
* @return the powerRegenModifier
*/
public final Map<Byte, UnitRegenModifier> getPowerRegenModifier() {
return this.powerRegenModifier;
}
/**
* @param powerRegenModifier
* the powerRegenModifier to set
*/
public final void setPowerRegenModifier(final Map<Byte, UnitRegenModifier> powerRegenModifier) {
this.powerRegenModifier = powerRegenModifier;
}
/**
* @return the level
*/
public abstract int getLevel();
/**
* @param level
* the level to set
*/
public void setLevel(final int level) {
this.bitSet.set(UnitField.UNIT_FIELD_LEVEL.getValue());
}
/**
* @return the faction_template
*/
public final int getFaction_template() {
return this.faction_template;
}
/**
* @param faction_template
* the faction_template to set
*/
public final void setFaction_template(final int faction_template) {
this.bitSet.set(UnitField.UNIT_FIELD_FACTIONTEMPLATE.getValue());
this.faction_template = faction_template;
}
/**
* @return the virtualItems
*/
public final int[] getVirtualItems() {
return this.virtualItems;
}
/**
* @param virtualItems
* the virtualItems to set
*/
public final void setVirtualItems(final int[] virtualItems) {
this.virtualItems = virtualItems;
}
/**
* @param virtualItems
* the virtualItems to set
*/
public final void setVirtualItem(final int slot, final int virtualItem) {
this.bitSet.set(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID.getValue() + slot);
this.virtualItems[slot] = virtualItem;
}
/**
* @return the flags
*/
public final int getFlags() {
return this.flags;
}
/**
* @param flags
* the flags to set
*/
public final void setFlags(final int flags) {
this.bitSet.set(UnitField.UNIT_FIELD_FLAGS.getValue());
this.flags = flags;
}
/**
* @return the flags2
*/
public final int getFlags2() {
return this.flags2;
}
/**
* @param flags2
* the flags2 to set
*/
public final void setFlags2(final int flags2) {
this.bitSet.set(UnitField.UNIT_FIELD_FLAGS_2.getValue());
this.flags2 = flags2;
}
/**
* @return the aurastate
*/
public final int getAurastate() {
return this.aurastate;
}
/**
* @param aurastate
* the aurastate to set
*/
public final void setAurastate(final int aurastate) {
this.aurastate = aurastate;
}
/**
* @return the attackTime
*/
public final int[] getAttackTime() {
return this.attackTime;
}
/**
* @param attackTime
* the attackTime to set
*/
public final void setAttackTime(final int type, final int attackTime) {
this.bitSet.set(UnitField.UNIT_FIELD_BASEATTACKTIME.getValue() + type);
this.attackTime[type] = attackTime;
}
/**
* @return the boundingRadius
*/
public final float getBoundingRadius() {
return this.boundingRadius;
}
/**
* @param boundingRadius
* the boundingRadius to set
*/
public final void setBoundingRadius(final float boundingRadius) {
this.bitSet.set(UnitField.UNIT_FIELD_BOUNDINGRADIUS.getValue());
this.boundingRadius = boundingRadius;
}
/**
* @return the combatReach
*/
public final float getCombatReach() {
return this.combatReach;
}
/**
* @param combatReach
* the combatReach to set
*/
public final void setCombatReach(final float combatReach) {
this.bitSet.set(UnitField.UNIT_FIELD_COMBATREACH.getValue());
this.combatReach = combatReach;
}
/**
* @return the displayIds
*/
public final int[] getDisplayIds() {
return this.displayIds;
}
/**
* @param displayId
* the displayIds to set
*/
public final void setDisplayId(final ModelType modelType, final int displayId) {
this.bitSet.set(UnitField.UNIT_FIELD_DISPLAYID.getValue() + modelType.ordinal());
this.displayIds[modelType.ordinal()] = displayId;
}
/**
* @return the mainDemage
*/
public final float[] getMainDemage() {
return this.mainDemage;
}
/**
* @param mainDemage
* the mainDemage to set
*/
public final void setMainDemage(final int demageType, final float mainDemage) {
this.bitSet.set(UnitField.UNIT_FIELD_MINDAMAGE.getValue() + demageType);
this.mainDemage[demageType] = mainDemage;
}
/**
* @return the offDemage
*/
public final float[] getOffDemage() {
return this.offDemage;
}
/**
* @param offDemage
* the offDemage to set
*/
public final void setOffDemage(final float[] offDemage) {
this.offDemage = offDemage;
}
/**
* @return the bytes1
*/
public final int getBytes1() {
return this.bytes1;
}
/**
* @param bytes1
* the bytes1 to set
*/
public final void setBytes1(final int bytes1) {
this.bytes1 = bytes1;
}
/**
* @return the petNumber
*/
public final int getPetNumber() {
return this.petNumber;
}
/**
* @param petNumber
* the petNumber to set
*/
public final void setPetNumber(final int petNumber) {
this.petNumber = petNumber;
}
/**
* @return the petNameTimeStamp
*/
public final int getPetNameTimeStamp() {
return this.petNameTimeStamp;
}
/**
* @param petNameTimeStamp
* the petNameTimeStamp to set
*/
public final void setPetNameTimeStamp(final int petNameTimeStamp) {
this.petNameTimeStamp = petNameTimeStamp;
}
/**
* @return the petExperience
*/
public final int getPetExperience() {
return this.petExperience;
}
/**
* @param petExperience
* the petExperience to set
*/
public final void setPetExperience(final int petExperience) {
this.petExperience = petExperience;
}
/**
* @return the petNextLevelXp
*/
public final int getPetNextLevelXp() {
return this.petNextLevelXp;
}
/**
* @param petNextLevelXp
* the petNextLevelXp to set
*/
public final void setPetNextLevelXp(final int petNextLevelXp) {
this.petNextLevelXp = petNextLevelXp;
}
/**
* @return the dynamicFlags
*/
public final int getDynamicFlags() {
return this.dynamicFlags;
}
/**
* @param dynamicFlags
* the dynamicFlags to set
*/
public final void setDynamicFlags(final int dynamicFlags) {
this.dynamicFlags = dynamicFlags;
}
/**
* @return the modCastSpeed
*/
public final float getModCastSpeed() {
return this.modCastSpeed;
}
/**
* @param modCastSpeed
* the modCastSpeed to set
*/
public final void setModCastSpeed(final float modCastSpeed) {
this.bitSet.set(UnitField.UNIT_MOD_CAST_SPEED.getValue());
this.modCastSpeed = modCastSpeed;
}
/**
* @return the createdBySpell
*/
public final int getCreatedBySpell() {
return this.createdBySpell;
}
/**
* @param createdBySpell
* the createdBySpell to set
*/
public final void setCreatedBySpell(final int createdBySpell) {
this.createdBySpell = createdBySpell;
}
/**
* @return the npcFlags
*/
public final int getNpcFlags() {
return this.npcFlags;
}
/**
* @param npcFlags
* the npcFlags to set
*/
public final void setNpcFlags(final int npcFlags) {
this.npcFlags = npcFlags;
}
/**
* @return the npcEmoteState
*/
public final int getNpcEmoteState() {
return this.npcEmoteState;
}
/**
* @param npcEmoteState
* the npcEmoteState to set
*/
public final void setNpcEmoteState(final int npcEmoteState) {
this.npcEmoteState = npcEmoteState;
}
/**
* @param stat
* @return the stat
*/
public final int getStat(final Stats stat) {
return this.stat[stat.ordinal()];
}
/**
* @param stat
* the stat to set
*/
public final void setStat(final Stats stat, final int value) {
this.bitSet.set(UnitField.UNIT_FIELD_STAT0.getValue() + stat.ordinal());
this.stat[stat.ordinal()] = value;
}
/**
* @param stat
* the stat to set
*/
public final void setCreateStat(final Stats stat, final int value) {
this.createStat[stat.ordinal()] = value;
}
public float getModifierValue(final Powers power, final ModType modifierType) {
return this.powerModifiersGroup[power.ordinal()][modifierType.ordinal()];
}
public void setModifierValue(final Powers power, final ModType modifierType, final float value) {
this.powerModifiersGroup[power.ordinal()][modifierType.ordinal()] = value;
}
/**
* @return the positiveStat
*/
public final int[] getPositiveStat() {
return this.positiveStat;
}
/**
* @param positiveStat
* the positiveStat to set
*/
public final void setPositiveStat(final int[] positiveStat) {
this.positiveStat = positiveStat;
}
/**
* @return the negativeStat
*/
public final int[] getNegativeStat() {
return this.negativeStat;
}
/**
* @param negativeStat
* the negativeStat to set
*/
public final void setNegativeStat(final int[] negativeStat) {
this.negativeStat = negativeStat;
}
/**
* @return the resistances
*/
public final int[] getResistances() {
return this.resistances;
}
/**
* @param resistances
* the resistances to set
*/
public final void setResistances(final int resistance, final int value) {
this.bitSet.set(UnitField.UNIT_FIELD_RESISTANCES.getValue() + resistance);
this.resistances[resistance] = value;
}
/**
* @return the positiveResistances
*/
public final int[] getPositiveResistances() {
return this.positiveResistances;
}
/**
* @param positiveResistances
* the positiveResistances to set
*/
public final void setPositiveResistances(final int[] positiveResistances) {
this.positiveResistances = positiveResistances;
}
/**
* @return the negativeResistances
*/
public final int[] getNegativeResistances() {
return this.negativeResistances;
}
/**
* @param negativeResistances
* the negativeResistances to set
*/
public final void setNegativeResistances(final int[] negativeResistances) {
this.negativeResistances = negativeResistances;
}
/**
* @return the baseMana
*/
public final int getBaseMana() {
return this.baseMana;
}
/**
* @param baseMana
* the baseMana to set
*/
public final void setBaseMana(final int baseMana) {
this.bitSet.set(UnitField.UNIT_FIELD_BASE_MANA.getValue());
this.baseMana = baseMana;
}
/**
* @return the baseHealth
*/
public final int getBaseHealth() {
return this.baseHealth;
}
/**
* @param baseHealth
* the baseHealth to set
*/
public final void setBaseHealth(final int baseHealth) {
this.bitSet.set(UnitField.UNIT_FIELD_BASE_HEALTH.getValue());
this.baseHealth = baseHealth;
}
public void setSheath(final SheathState sheathed) {
setBytes2((getBytes2() & 0xFFFFFF00) | (sheathed.ordinal() & 0xFF));
}
public SheathState getSheath() {
return SheathState.get(getBytes2() & 0xFF);
}
/**
* @return the bytes2
*/
public final int getBytes2() {
return this.bytes2;
}
/**
* @param bytes2
* the bytes2 to set
*/
public final void setBytes2(final int bytes2) {
this.bitSet.set(UnitField.UNIT_FIELD_BYTES_2.getValue());
this.bytes2 = bytes2;
}
/**
* @return the attackPower
*/
public final int getAttackPower() {
return this.attackPower;
}
/**
* @param attackPower
* the attackPower to set
*/
public final void setAttackPower(final int attackPower) {
this.bitSet.set(UnitField.UNIT_FIELD_ATTACK_POWER.getValue());
this.attackPower = attackPower;
}
/**
* @return the attackPowerMod
*/
public final int getAttackPowerMod() {
return this.attackPowerMod;
}
/**
* @param attackPowerMod
* the attackPowerMod to set
*/
public final void setAttackPowerMod(final int attackPowerMod) {
this.attackPowerMod = attackPowerMod;
}
/**
* @return the attackPowerMul
*/
public final float getAttackPowerMul() {
return this.attackPowerMul;
}
/**
* @param attackPowerMul
* the attackPowerMul to set
*/
public final void setAttackPowerMul(final float attackPowerMul) {
this.attackPowerMul = attackPowerMul;
}
/**
* @return the rangedAttackPower
*/
public final int getRangedAttackPower() {
return this.rangedAttackPower;
}
/**
* @param rangedAttackPower
* the rangedAttackPower to set
*/
public final void setRangedAttackPower(final int rangedAttackPower) {
this.bitSet.set(UnitField.UNIT_FIELD_RANGED_ATTACK_POWER.getValue());
this.rangedAttackPower = rangedAttackPower;
}
/**
* @return the rangedAttackPowerMod
*/
public final int getRangedAttackPowerMod() {
return this.rangedAttackPowerMod;
}
/**
* @param rangedAttackPowerMod
* the rangedAttackPowerMod to set
*/
public final void setRangedAttackPowerMod(final int rangedAttackPowerMod) {
this.rangedAttackPowerMod = rangedAttackPowerMod;
}
/**
* @return the rangedAttackPowerMul
*/
public final float getRangedAttackPowerMul() {
return this.rangedAttackPowerMul;
}
/**
* @param rangedAttackPowerMul
* the rangedAttackPowerMul to set
*/
public final void setRangedAttackPowerMul(final float rangedAttackPowerMul) {
this.rangedAttackPowerMul = rangedAttackPowerMul;
}
/**
* @return the rangedDemage
*/
public final float[] getRangedDemage() {
return this.rangedDemage;
}
/**
* @param rangedDemage
* the rangedDemage to set
*/
public final void setRangedDemage(final int type, final float rangedDemage) {
this.bitSet.set(UnitField.UNIT_FIELD_MINRANGEDDAMAGE.getValue() + type);
this.rangedDemage[type] = rangedDemage;
}
/**
* @return the powerCostMod
*/
public final int[] getPowerCostMod() {
return this.powerCostMod;
}
/**
* @param powerCostMod
* the powerCostMod to set
*/
public final void setPowerCostMod(final int[] powerCostMod) {
this.powerCostMod = powerCostMod;
}
/**
* @return the powerCostMul
*/
public final float[] getPowerCostMul() {
return this.powerCostMul;
}
/**
* @param powerCostMul
* the powerCostMul to set
*/
public final void setPowerCostMul(final float[] powerCostMul) {
this.powerCostMul = powerCostMul;
}
/**
* @return the maxHealthMul
*/
public final float getMaxHealthMul() {
return this.maxHealthMul;
}
/**
* @param maxHealthMul
* the maxHealthMul to set
*/
public final void setMaxHealthMul(final float maxHealthMul) {
this.maxHealthMul = maxHealthMul;
}
/**
* @return the hoverHeight
*/
public final float getHoverHeight() {
return this.hoverHeight;
}
/**
* @param hoverHeight
* the hoverHeight to set
*/
public final void setHoverHeight(final float hoverHeight) {
this.hoverHeight = hoverHeight;
}
/**
* @return the name
*/
public abstract String getName();
/**
* @param name
* the name to set
*/
public abstract void setName(String name);
}