Revert "Revert "Modified the HorizontalCollision damage calculation.""

This reverts commit 31cbac3666.
This commit is contained in:
Brendan Wilson 2015-02-05 17:42:53 -05:00
parent 31cbac3666
commit b67d3d2e0a
5 changed files with 51 additions and 10 deletions

7
.gitignore vendored
View file

@ -38,4 +38,9 @@ Icon
.Trashes
bin/
*.classpath
*.classpath
.idea/.name
*.xml
*.class
*.class
ProjectKorra.iml

View file

@ -65,6 +65,7 @@ public class ConfigManager {
config.addDefault("Properties.BendingAffectFallingSand.TNTStrengthMultiplier", 1.0);
config.addDefault("Properties.GlobalCooldown", 500);
config.addDefault("Properties.SeaLevel", 62);
config.addDefault("Properties.HorizontalCollisionPhysics.WallDamageMinimumDistance", 5.0);
config.addDefault("Properties.CustomItems.GrapplingHook.Enable", true);
config.addDefault("Properties.CustomItems.GrapplingHook.IronUses", 25);

View file

@ -3,6 +3,7 @@ package com.projectkorra.ProjectKorra.Objects;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
import com.projectkorra.ProjectKorra.Utilities.HorizontalVelocityChangeEvent;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@ -24,6 +25,8 @@ public class HorizontalVelocityTracker
private Player instigator;
private Vector lastVelocity;
private Vector thisVelocity;
private Location launchLocation;
private Location impactLocation;
public HorizontalVelocityTracker(Entity e, Player instigator, long delay)
{
@ -31,7 +34,9 @@ public class HorizontalVelocityTracker
this.instigator = instigator;
fireTime = System.currentTimeMillis();
this.delay = delay;
thisVelocity = e.getVelocity();
thisVelocity = e.getVelocity().clone();
launchLocation = e.getLocation().clone();
impactLocation = launchLocation.clone();
this.delay = delay;
update();
instances.put(entity, this);
@ -69,11 +74,12 @@ public class HorizontalVelocityTracker
if((diff.getX() > 1 || diff.getX() < -1)
|| (diff.getZ() > 1 || diff.getZ() < -1))
{
for(Block b : blocks)
impactLocation = entity.getLocation();
for (Block b : blocks)
{
if(!Methods.isTransparentToEarthbending(instigator, b))
if (!Methods.isTransparentToEarthbending(instigator, b))
{
ProjectKorra.plugin.getServer().getPluginManager().callEvent(new HorizontalVelocityChangeEvent(entity, instigator, lastVelocity, thisVelocity, diff));
ProjectKorra.plugin.getServer().getPluginManager().callEvent(new HorizontalVelocityChangeEvent(entity, instigator, lastVelocity, thisVelocity, diff, launchLocation, impactLocation));
remove();
return;
}

View file

@ -13,10 +13,7 @@ import com.projectkorra.ProjectKorra.earthbending.LavaFlow.AbilityType;
import com.projectkorra.ProjectKorra.firebending.*;
import com.projectkorra.ProjectKorra.firebending.Fireball;
import com.projectkorra.ProjectKorra.waterbending.*;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
@ -71,7 +68,9 @@ public class PKListener implements Listener {
{
if(e.getEntity().getEntityId() != e.getInstigator().getEntityId())
{
Methods.damageEntity(e.getInstigator(), e.getEntity(), e.getDifference().length() * 2);
double minimumDistance = plugin.getConfig().getDouble("Properties.HorizontalCollisionPhysics.WallDamageMinimumDistance");
double damage = ((e.getDistanceTravelled() - minimumDistance) < 0 ? 0 : e.getDistanceTravelled() - minimumDistance) / (e.getDifference().length());
Methods.damageEntity(e.getInstigator(), e.getEntity(), damage);
}
}
}

View file

@ -1,5 +1,6 @@
package com.projectkorra.ProjectKorra.Utilities;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
@ -21,7 +22,10 @@ public class HorizontalVelocityChangeEvent extends Event implements Cancellable
private Vector from;
private Vector to;
private Vector difference;
private Location start;
private Location end;
@Deprecated
public HorizontalVelocityChangeEvent(Entity entity, Player instigator, Vector from, Vector to, Vector difference)
{
this.entity = entity;
@ -31,6 +35,17 @@ public class HorizontalVelocityChangeEvent extends Event implements Cancellable
this.difference = difference;
}
public HorizontalVelocityChangeEvent(Entity entity, Player instigator, Vector from, Vector to, Vector difference, Location start, Location end)
{
this.entity = entity;
this.instigator = instigator;
this.from = from;
this.to = to;
this.difference = difference;
this.start = start;
this.end = end;
}
public Entity getEntity()
{
return entity;
@ -51,6 +66,21 @@ public class HorizontalVelocityChangeEvent extends Event implements Cancellable
return to;
}
public Location getStartPoint()
{
return start;
}
public Location getEndPoint()
{
return end;
}
public double getDistanceTravelled()
{
return start.distance(end);
}
public Vector getDifference()
{
return difference;