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 /** 082 * Returns true if the damage is projectile based. 083 */ 084 public boolean isProjectile() 085 { 086 return this.projectile; 087 } 088 089 /** 090 * Define the damage type as projectile based. 091 */ 092 public DamageSource setProjectile() 093 { 094 this.projectile = true; 095 return this; 096 } 097 098 public boolean isUnblockable() 099 { 100 return this.isUnblockable; 101 } 102 103 /** 104 * How much satiate(food) is consumed by this DamageSource 105 */ 106 public float getHungerDamage() 107 { 108 return this.hungerDamage; 109 } 110 111 public boolean canHarmInCreative() 112 { 113 return this.isDamageAllowedInCreativeMode; 114 } 115 116 protected DamageSource(String par1Str) 117 { 118 this.damageType = par1Str; 119 } 120 121 public Entity getSourceOfDamage() 122 { 123 return this.getEntity(); 124 } 125 126 public Entity getEntity() 127 { 128 return null; 129 } 130 131 protected DamageSource setDamageBypassesArmor() 132 { 133 this.isUnblockable = true; 134 this.hungerDamage = 0.0F; 135 return this; 136 } 137 138 protected DamageSource setDamageAllowedInCreativeMode() 139 { 140 this.isDamageAllowedInCreativeMode = true; 141 return this; 142 } 143 144 /** 145 * Define the damage type as fire based. 146 */ 147 protected DamageSource setFireDamage() 148 { 149 this.fireDamage = true; 150 return this; 151 } 152 153 /** 154 * Returns the message to be displayed on player death. 155 */ 156 public String getDeathMessage(EntityPlayer par1EntityPlayer) 157 { 158 return StatCollector.translateToLocalFormatted("death." + this.damageType, new Object[] {par1EntityPlayer.username}); 159 } 160 161 /** 162 * Returns true if the damage is fire based. 163 */ 164 public boolean isFireDamage() 165 { 166 return this.fireDamage; 167 } 168 169 /** 170 * Return the name of damage type. 171 */ 172 public String getDamageType() 173 { 174 return this.damageType; 175 } 176 177 public DamageSource func_76351_m() 178 { 179 this.field_76381_t = true; 180 return this; 181 } 182 183 public boolean func_76350_n() 184 { 185 return this.field_76381_t; 186 } 187 188 /** 189 * Returns true if the damage is magic based. 190 */ 191 public boolean isMagicDamage() 192 { 193 return this.magicDamage; 194 } 195 196 /** 197 * Define the damage type as magic based. 198 */ 199 public DamageSource setMagicDamage() 200 { 201 this.magicDamage = true; 202 return this; 203 } 204 }