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