Skip to content

Commit

Permalink
More cleanup for health API changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
asofold committed Jul 15, 2013
1 parent 489c60f commit f17378b
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 18 deletions.
Expand Up @@ -12,7 +12,6 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.potion.PotionEffectType;

Expand Down Expand Up @@ -122,18 +121,19 @@ public int getInvulnerableTicks(final Player player) {
return player.getNoDamageTicks();
}

@SuppressWarnings("deprecation")
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
// TODO: Ahhh...
player.setLastDamageCause(new EntityDamageEvent(player, DamageCause.CUSTOM, 500));
// TODO: Not really.
player.setLastDamageCause(BridgeHealth.getEntityDamageEvent(player, DamageCause.CUSTOM, 500.0));
player.setNoDamageTicks(ticks);
}

@Override
public void dealFallDamage(final Player player, final double damage) {
// TODO: account for armor, other.
player.damage((int) Math.round(damage));
// TODO: Document in knowledge base.
// TODO: Account for armor, other.
// TODO: use setLastDamageCause here ?
BridgeHealth.damage(player, damage);
}

@Override
Expand All @@ -150,8 +150,9 @@ public boolean shouldBeZombie(final Player player) {
@Override
public void setDead(final Player player, final int deathTicks) {
// TODO: Test / kick ? ...
player.setHealth(0);
player.damage(1);
BridgeHealth.setHealth(player, 0.0);
// TODO: Might try stuff like setNoDamageTicks.
BridgeHealth.damage(player, 1.0);
}

@Override
Expand Down Expand Up @@ -201,6 +202,7 @@ public boolean hasGravity(final Material mat) {
return mat.hasGravity();
}
catch(Throwable t){
// Backwards compatibility.
switch(mat){
case SAND:
case GRAVEL:
Expand Down
Expand Up @@ -126,7 +126,7 @@ public void setInvulnerableTicks(final Player player, final int ticks) {

@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}

@Override
Expand All @@ -137,7 +137,7 @@ public boolean isComplexPart(final Entity entity) {
@Override
public boolean shouldBeZombie(final Player player) {
final net.minecraft.server.v1_6_R1.EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}

@Override
Expand Down
Expand Up @@ -127,7 +127,7 @@ public void setInvulnerableTicks(final Player player, final int ticks) {

@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}

@Override
Expand All @@ -138,7 +138,7 @@ public boolean isComplexPart(final Entity entity) {
@Override
public boolean shouldBeZombie(final Player player) {
final net.minecraft.server.v1_6_R2.EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}

@Override
Expand Down
Expand Up @@ -153,8 +153,9 @@ private boolean handleNormalDamage(final Player player, final Entity damaged, do
}
}

if (damage <= 4 && tick == data.damageTakenByEntityTick && data.thornsId != Integer.MIN_VALUE && data.thornsId == damaged.getEntityId()){
if (damage <= 4.0 && tick == data.damageTakenByEntityTick && data.thornsId != Integer.MIN_VALUE && data.thornsId == damaged.getEntityId()){
// Don't handle further, but do respect selfhit/canceldead.
// TODO: Remove soon.
data.thornsId = Integer.MIN_VALUE;
return cancelled;
}
Expand Down
Expand Up @@ -80,7 +80,7 @@ public boolean check(final Player player, final double damage, final FightData d

// Check if reduced more than expected or new/count down fully.
// TODO: Mostly workarounds.
if (delta <= 0 || data.lastNoDamageTicks <= player.getMaximumNoDamageTicks() / 2 || dTick > data.lastNoDamageTicks || damage > BridgeHealth.getLastDamage(player)|| damage == 0){
if (delta <= 0 || data.lastNoDamageTicks <= player.getMaximumNoDamageTicks() / 2 || dTick > data.lastNoDamageTicks || damage > BridgeHealth.getLastDamage(player)|| damage == 0.0){
// Not resetting acc.
legit = set = true;
}
Expand Down Expand Up @@ -182,7 +182,7 @@ else if (legit){
public void death(final Player player) {
// TODO: Is this still relevant ?
// First check if the player is really dead (e.g. another plugin could have just fired an artificial event).
if (BridgeHealth.getHealth(player) <= 0 && player.isDead()){
if (BridgeHealth.getHealth(player) <= 0.0 && player.isDead()){
try {
// Schedule a task to be executed in roughly 1.5 seconds.
// TODO: Get plugin otherwise !?
Expand Down
Expand Up @@ -1217,7 +1217,7 @@ public void onEntityDamage(final EntityDamageEvent event){
System.out.println(player.getName() + " damage(FALL): " + damage + " / dist=" + player.getFallDistance() + " nf=" + data.noFallFallDistance + " yDiff=" + yDiff);
}
// Fall-back check.
final double maxD = NoFall.getDamage(Math.max(yDiff, Math.max(data.noFallFallDistance, fallDistance))) + (allowReset ? 0 : 3);
final double maxD = NoFall.getDamage(Math.max(yDiff, Math.max(data.noFallFallDistance, fallDistance))) + (allowReset ? 0.0 : 3.0);
if (maxD > damage){
// TODO: respect dealDamage ?
BridgeHealth.setDamage(event, maxD);
Expand Down
Expand Up @@ -165,6 +165,21 @@ public static void setHealth(final LivingEntity entity, final double health){
}
}

/**
* Damage an entity (LivingEntity).
* @param entity
* @param damage
* @throws RuntimeException, in case of an IncompatibleClassChangeError without success on recovery attempts.
*/
public static void damage(final LivingEntity entity, final double damage){
try{
entity.damage(damage);
}
catch(IncompatibleClassChangeError e){
invokeVoid(entity, "damage", (int) Math.round(damage), e);
}
}

@SuppressWarnings("deprecation")
public static EntityDamageEvent getEntityDamageEvent(final Entity entity, final DamageCause damageCause, final double damage){
try{
Expand Down
Expand Up @@ -113,9 +113,12 @@ public interface MCAccess {
public boolean shouldBeZombie(Player player);

/**
* Set flag + death ticks.
* Ensure the player is really taken out: Set flag + death ticks.
*
* TODO: Check if still necessary + make knowledge-base entries for what to check.
*
* @param player
* @param i
* @param deathTicks
*/
public void setDead(Player player, int deathTicks);

Expand Down

0 comments on commit f17378b

Please sign in to comment.