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