001 package net.minecraft.src;
002
003 public class DamageSource
004 {
005 public static DamageSource inFire = (new DamageSource("inFire")).setFireDamage();
006 public static DamageSource onFire = (new DamageSource("onFire")).setDamageBypassesArmor().setFireDamage();
007 public static DamageSource lava = (new DamageSource("lava")).setFireDamage();
008 public static DamageSource inWall = (new DamageSource("inWall")).setDamageBypassesArmor();
009 public static DamageSource drown = (new DamageSource("drown")).setDamageBypassesArmor();
010 public static DamageSource starve = (new DamageSource("starve")).setDamageBypassesArmor();
011 public static DamageSource cactus = new DamageSource("cactus");
012 public static DamageSource fall = (new DamageSource("fall")).setDamageBypassesArmor();
013 public static DamageSource outOfWorld = (new DamageSource("outOfWorld")).setDamageBypassesArmor().setDamageAllowedInCreativeMode();
014 public static DamageSource generic = (new DamageSource("generic")).setDamageBypassesArmor();
015 public static DamageSource explosion = (new DamageSource("explosion")).func_76351_m();
016 public static DamageSource field_76375_l = new DamageSource("explosion");
017 public static DamageSource magic = (new DamageSource("magic")).setDamageBypassesArmor().func_82726_p();
018 public static DamageSource field_82727_n = (new DamageSource("wither")).setDamageBypassesArmor();
019 public static DamageSource field_82728_o = new DamageSource("anvil");
020 public static DamageSource field_82729_p = new DamageSource("fallingBlock");
021
022 /** This kind of damage can be blocked or not. */
023 private boolean isUnblockable = false;
024 private boolean isDamageAllowedInCreativeMode = false;
025 private float hungerDamage = 0.3F;
026
027 /** This kind of damage is based on fire or not. */
028 private boolean fireDamage;
029
030 /** This kind of damage is based on a projectile or not. */
031 private boolean projectile;
032 private boolean field_76381_t;
033 private boolean field_82730_x = false;
034 public String damageType;
035
036 public static DamageSource causeMobDamage(EntityLiving par0EntityLiving)
037 {
038 return new EntityDamageSource("mob", par0EntityLiving);
039 }
040
041 /**
042 * returns an EntityDamageSource of type player
043 */
044 public static DamageSource causePlayerDamage(EntityPlayer par0EntityPlayer)
045 {
046 return new EntityDamageSource("player", par0EntityPlayer);
047 }
048
049 /**
050 * returns EntityDamageSourceIndirect of an arrow
051 */
052 public static DamageSource causeArrowDamage(EntityArrow par0EntityArrow, Entity par1Entity)
053 {
054 return (new EntityDamageSourceIndirect("arrow", par0EntityArrow, par1Entity)).setProjectile();
055 }
056
057 /**
058 * returns EntityDamageSourceIndirect of a fireball
059 */
060 public static DamageSource causeFireballDamage(EntityFireball par0EntityFireball, Entity par1Entity)
061 {
062 return par1Entity == null ? (new EntityDamageSourceIndirect("onFire", par0EntityFireball, par0EntityFireball)).setFireDamage().setProjectile() : (new EntityDamageSourceIndirect("fireball", par0EntityFireball, par1Entity)).setFireDamage().setProjectile();
063 }
064
065 public static DamageSource causeThrownDamage(Entity par0Entity, Entity par1Entity)
066 {
067 return (new EntityDamageSourceIndirect("thrown", par0Entity, par1Entity)).setProjectile();
068 }
069
070 public static DamageSource causeIndirectMagicDamage(Entity par0Entity, Entity par1Entity)
071 {
072 return (new EntityDamageSourceIndirect("indirectMagic", par0Entity, par1Entity)).setDamageBypassesArmor().func_82726_p();
073 }
074
075 /**
076 * Returns true if the damage is projectile based.
077 */
078 public boolean isProjectile()
079 {
080 return this.projectile;
081 }
082
083 /**
084 * Define the damage type as projectile based.
085 */
086 public DamageSource setProjectile()
087 {
088 this.projectile = true;
089 return this;
090 }
091
092 public boolean isUnblockable()
093 {
094 return this.isUnblockable;
095 }
096
097 /**
098 * How much satiate(food) is consumed by this DamageSource
099 */
100 public float getHungerDamage()
101 {
102 return this.hungerDamage;
103 }
104
105 public boolean canHarmInCreative()
106 {
107 return this.isDamageAllowedInCreativeMode;
108 }
109
110 protected DamageSource(String par1Str)
111 {
112 this.damageType = par1Str;
113 }
114
115 public Entity getSourceOfDamage()
116 {
117 return this.getEntity();
118 }
119
120 public Entity getEntity()
121 {
122 return null;
123 }
124
125 protected DamageSource setDamageBypassesArmor()
126 {
127 this.isUnblockable = true;
128 this.hungerDamage = 0.0F;
129 return this;
130 }
131
132 protected DamageSource setDamageAllowedInCreativeMode()
133 {
134 this.isDamageAllowedInCreativeMode = true;
135 return this;
136 }
137
138 /**
139 * Define the damage type as fire based.
140 */
141 protected DamageSource setFireDamage()
142 {
143 this.fireDamage = true;
144 return this;
145 }
146
147 /**
148 * Returns the message to be displayed on player death.
149 */
150 public String getDeathMessage(EntityPlayer par1EntityPlayer)
151 {
152 return StatCollector.translateToLocalFormatted("death." + this.damageType, new Object[] {par1EntityPlayer.username});
153 }
154
155 /**
156 * Returns true if the damage is fire based.
157 */
158 public boolean fireDamage()
159 {
160 return this.fireDamage;
161 }
162
163 /**
164 * Return the name of damage type.
165 */
166 public String getDamageType()
167 {
168 return this.damageType;
169 }
170
171 public DamageSource func_76351_m()
172 {
173 this.field_76381_t = true;
174 return this;
175 }
176
177 public boolean func_76350_n()
178 {
179 return this.field_76381_t;
180 }
181
182 public boolean func_82725_o()
183 {
184 return this.field_82730_x;
185 }
186
187 public DamageSource func_82726_p()
188 {
189 this.field_82730_x = true;
190 return this;
191 }
192 }