package game.entity; import game.color.TextColor; import game.entity.projectile.EntityProjectile; import game.entity.types.EntityLiving; import game.world.Explosion; public class DamageSource { public static final DamageSource inFire = (new DamageSource(TextColor.ORANGE, "%s ging in Flammen auf", "%s lief ins Feuer, während er mit %s kämpfte", "%s ins Feuer gelaufen")).setFireDamage(); public static final DamageSource onFire = (new DamageSource(TextColor.ORANGE, "%s wurde zu heiß und verbrannte", "%s wurde während des Kampfes mit %s geröstet", "%s geröstet")).setDamageBypassesArmor().setFireDamage(); public static final DamageSource hotLiquid = (new DamageSource(TextColor.ORANGE, "%s versuchte in einer unangenehm brennenden Flüssigkeit zu schwimmen", "%s fiel beim Versuch %s zu entkommen in eine unangenehm brennende Flüssigkeit", "%s in unangenehm brennender Flüssigkeit gelandet")).setFireDamage(); public static final DamageSource molten = (new DamageSource(TextColor.ORANGE, "%s versuchte dem Magmaregen zu trotzen", "%s geriet beim Versuch %s zu entkommen in Magmaregen", "%s in Magmaregen geraten")).setFireDamage(); public static final DamageSource inWall = (new DamageSource(TextColor.GRAY, "%s wurde lebendig begraben")).setDamageBypassesArmor(); public static final DamageSource dry = (new DamageSource(TextColor.GRAY, "%s ist vertrocknet", "%s ist beim Versuch %s zu entkommen vertrocknet", "%s vertrocknet")).setDamageBypassesArmor(); public static final DamageSource cactus = new DamageSource(TextColor.ORK, "%s wurde zu Tode gestochen", "%s rannte beim Versuch %s zu entkommen in einen Kaktus", "%s in Kaktus gerannt"); public static final DamageSource fall = (new DamageSource(TextColor.NEON, "%s fiel der Schwerkraft zum Opfer")).setDamageBypassesArmor(); public static final DamageSource outOfWorld = (new DamageSource(TextColor.DGRAY, "%s fiel aus der Welt")).setDamageBypassesArmor(); public static final DamageSource generic = (new DamageSource(TextColor.LGRAY, "%s starb")).setDamageBypassesArmor(); public static final DamageSource magic = (new DamageSource(TextColor.DMAGENTA, "%s wurde durch Magie getötet")).setDamageBypassesArmor().setMagicDamage(); public static final DamageSource anvil = new DamageSource(TextColor.DRED, "%s wurde von einem fallenden Amboss zerquetscht"); public static final DamageSource fallingBlock = new DamageSource(TextColor.GRAY, "%s wurde von einem fallenden Block zerquetscht"); public static final DamageSource radiation = (new DamageSource(TextColor.GREEN, "%s hat seine Halbwertszeit nicht rechtzeitig erreicht")).setDamageBypassesArmor(); protected final String display; protected final String displayExtra; protected final String displayKill; protected final TextColor color; private boolean isUnblockable; private boolean fireDamage; private boolean projectile; private boolean magicDamage; private boolean explosion; public static DamageSource causeMobDamage(EntityLiving mob) { return new EntityDamageSource(TextColor.CRIMSON, "%s wurde von %s erschlagen", "%s wurde von %s mit %s erschlagen", "%s erschlagen", "%s mit %s erschlagen", mob); } public static DamageSource causeLightningDamage(EntityLiving mob) { return mob == null ? new DamageSource(TextColor.YELLOW, "%s wurde vom Blitz getroffen und gegrillt") : new EntityDamageSource(TextColor.YELLOW, "%s wurde von %s gegrillt", "%s wurde von %s mit %s gegrillt", "%s gegrillt", "%s mit %s gegrillt", mob); } public static DamageSource causeExterminatusDamage(EntityLiving mob) { return mob == null ? new DamageSource(TextColor.DRED, "%s wurde vernichtet") : new EntityDamageSource(TextColor.DRED, "%s wurde von %s vernichtet", "%s wurde von %s mit %s vernichtet", "%s vernichtet", "%s mit %s vernichtet", mob); } public static DamageSource causeShotDamage(Entity projectile, Entity shooter) { return (new EntityDamageSourceIndirect(TextColor.RED, "%s wurde von %s erschossen", "%s wurde von %s mit %s erschossen", "%s erschossen", "%s mit %s erschossen", projectile, shooter)).setProjectile(); } public static DamageSource causeFireballDamage(EntityProjectile fireball, Entity shooter) { return shooter == null ? (new EntityDamageSourceIndirect(TextColor.YELLOW, "%s wurde von %s flambiert", fireball)).setFireDamage().setProjectile() : (new EntityDamageSourceIndirect(TextColor.YELLOW, "%s wurde von %s flambiert", "%s wurde von %s mit %s flambiert", "%s flambiert", "%s mit %s flambiert", fireball, shooter)).setFireDamage().setProjectile(); } public static DamageSource causeThrownDamage(Entity source, Entity thrower) { return (new EntityDamageSourceIndirect(TextColor.DGREEN, "%s wurde von %s zu Tode geprügelt", "%s wurde von %s mit %s zu Tode geprügelt", "%s zu Tode geprügelt", "%s mit %s zu Tode geprügelt", source, thrower)).setProjectile(); } public static DamageSource causeTeleFragDamage(Entity source, Entity replacer) { return (new EntityDamageSourceIndirect(TextColor.MAGENTA, "%s wurde von %s verdrängt", "%s wurde von %s mit %s verdrängt", "%s verdrängt", "%s mit %s verdrängt", source, replacer)).setDamageBypassesArmor(); } public static DamageSource causeIndirectMagicDamage(Entity source, Entity mage) { return (new EntityDamageSourceIndirect(TextColor.DMAGENTA, "%s wurde von %s mit Magie getötet", "%s wurde von %s mit %s getötet", "%s mit Magie getötet", "%s mit %s getötet", source, mage)).setDamageBypassesArmor().setMagicDamage(); } public static DamageSource causeThornsDamage(Entity source) { return (new EntityDamageSource(TextColor.ORK, "%s wurde beim Versuch %s zu verletzen getötet", "%s durch Dornen getötet", source)).setIsThornsDamage().setMagicDamage(); } public static DamageSource causeExplosionDamage(Explosion explosion) { return explosion != null && explosion.getExplosivePlacedBy() != null ? (new EntityDamageSource(TextColor.YELLOW, "%s wurde durch %s in die Luft gesprengt", "%s in die Luft gesprengt", explosion.getExplosivePlacedBy())).setExplosion() : (new DamageSource(TextColor.YELLOW, "%s wurde in die Luft gesprengt")).setExplosion(); } /** * Returns true if the damage is projectile based. */ public boolean isProjectile() { return this.projectile; } /** * Define the damage type as projectile based. */ public DamageSource setProjectile() { this.projectile = true; return this; } public boolean isExplosion() { return this.explosion; } public DamageSource setExplosion() { this.explosion = true; return this; } public boolean isUnblockable() { return this.isUnblockable; } protected DamageSource(TextColor color, String display, String extra, String kill) { this.color = color; this.display = this.color + display; this.displayExtra = this.color + extra; this.displayKill = this.color + "* " + kill; } protected DamageSource(TextColor color, String display) { this(color, display, display, ""); } public Entity getSourceOfDamage() { return this.getEntity(); } public Entity getEntity() { return null; } protected DamageSource setDamageBypassesArmor() { this.isUnblockable = true; return this; } /** * Define the damage type as fire based. */ protected DamageSource setFireDamage() { this.fireDamage = true; return this; } /** * Gets the death message that is displayed when the player dies * * @param victim The EntityLivingBase that died */ public String getDeathMessage(EntityLiving victim) { EntityLiving killer = victim.getAttackingEntity(); // String s = this.display; // String s1 = s + "Player"; return killer != null ? String.format(this.displayExtra, victim.getColoredName(this.color), killer.getColoredName(this.color)) : String.format(this.display, victim.getColoredName(this.color)); } public String getKillMessage(EntityLiving victim) { return String.format(this.displayKill, victim.getColoredName(this.color)); } /** * Returns true if the damage is fire based. */ public boolean isFireDamage() { return this.fireDamage; } // /** // * Return the name of damage type. // */ // public String getDamageType() // { // return this.damageType; // } // /** // * Set whether this damage source will have its damage amount scaled based on the current difficulty. // */ // public DamageSource setDifficultyScaled() // { // this.difficultyScaled = true; // return this; // } // /** // * Return whether this damage source will have its damage amount scaled based on the current difficulty. // */ // public boolean isDifficultyScaled() // { // return this.difficultyScaled; // } /** * Returns true if the damage is magic based. */ public boolean isMagicDamage() { return this.magicDamage; } /** * Define the damage type as magic based. */ public DamageSource setMagicDamage() { this.magicDamage = true; return this; } // public boolean isCreativePlayer() // { // Entity entity = this.getEntity(); // return entity.isPlayer() && ((EntityNPC)entity).creative; // } }