250 lines
9.7 KiB
Java
250 lines
9.7 KiB
Java
![]() |
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;
|
||
|
// }
|
||
|
}
|