TotalFreedomMod/src/me/StevenLawson/TotalFreedomMod/TFM_Jumppads.java

135 lines
3.5 KiB
Java
Raw Normal View History

2013-08-13 14:05:37 +00:00
package me.StevenLawson.TotalFreedomMod;
2013-08-13 20:54:20 +00:00
import java.util.HashMap;
import java.util.Map;
2013-08-13 14:05:37 +00:00
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.util.Vector;
public class TFM_Jumppads
{
2013-08-13 18:53:33 +00:00
public static final Material BLOCK_ID = Material.WOOL;
public static final double DAMPING_COEFFICIENT = 0.8;
2013-08-13 20:54:20 +00:00
public final Map<Player, Boolean> canPushMap = new HashMap<Player, Boolean>();
private JumpPadMode mode = JumpPadMode.MADGEEK;
2013-08-13 18:53:33 +00:00
private double strength = 0.4;
2013-08-13 14:05:37 +00:00
public void PlayerMoveEvent(PlayerMoveEvent event)
{
2013-08-13 18:53:33 +00:00
if (mode == JumpPadMode.OFF)
2013-08-13 14:05:37 +00:00
{
return;
}
2013-08-13 18:53:33 +00:00
final Player player = event.getPlayer();
final Block block = event.getTo().getBlock();
final Vector velocity = player.getVelocity().clone();
2013-08-13 14:05:37 +00:00
2013-08-13 20:54:20 +00:00
if (mode == JumpPadMode.MADGEEK)
2013-08-13 14:05:37 +00:00
{
2013-08-13 20:54:20 +00:00
Boolean canPush = canPushMap.get(player);
if (canPush == null)
2013-08-13 14:05:37 +00:00
{
2013-08-13 20:54:20 +00:00
canPush = true;
2013-08-13 14:05:37 +00:00
}
2013-08-13 20:54:20 +00:00
if (block.getRelative(0, -1, 0).getType() == BLOCK_ID)
2013-08-13 14:05:37 +00:00
{
2013-08-13 20:54:20 +00:00
if (canPush)
{
velocity.multiply(strength + 0.85).multiply(-1.0);
}
canPush = false;
2013-08-13 14:05:37 +00:00
}
2013-08-13 20:54:20 +00:00
else
{
canPush = true;
}
canPushMap.put(player, canPush);
}
else
{
if (block.getRelative(0, -1, 0).getType() == BLOCK_ID)
2013-08-13 14:05:37 +00:00
{
2013-08-13 20:54:20 +00:00
velocity.add(new Vector(0.0, strength, 0.0));
2013-08-13 14:05:37 +00:00
}
2013-08-13 20:54:20 +00:00
if (mode == JumpPadMode.NORMAL_AND_SIDEWAYS)
2013-08-13 14:05:37 +00:00
{
2013-08-13 20:54:20 +00:00
if (block.getRelative(1, 0, 0).getType() == BLOCK_ID)
{
velocity.add(new Vector(-DAMPING_COEFFICIENT * strength, 0.0, 0.0));
}
if (block.getRelative(-1, 0, 0).getType() == BLOCK_ID)
{
velocity.add(new Vector(DAMPING_COEFFICIENT * strength, 0.0, 0.0));
}
if (block.getRelative(0, 0, 1).getType() == BLOCK_ID)
{
velocity.add(new Vector(0.0, 0.0, -DAMPING_COEFFICIENT * strength));
}
if (block.getRelative(0, 0, -1).getType() == BLOCK_ID)
{
velocity.add(new Vector(0.0, 0.0, DAMPING_COEFFICIENT * strength));
}
2013-08-13 14:05:37 +00:00
}
}
2013-08-13 18:53:33 +00:00
if (!player.getVelocity().equals(velocity))
2013-08-13 14:05:37 +00:00
{
2013-08-13 18:53:33 +00:00
player.setFallDistance(0.0f);
player.setVelocity(velocity);
2013-08-13 14:05:37 +00:00
}
}
2013-08-13 18:53:33 +00:00
public JumpPadMode getMode()
{
return mode;
}
public void setMode(JumpPadMode mode)
{
this.mode = mode;
}
public double getStrength()
{
return strength;
}
public void setStrength(double strength)
{
this.strength = strength;
}
public static enum JumpPadMode
2013-08-13 14:05:37 +00:00
{
2013-08-13 20:54:20 +00:00
OFF(false), NORMAL(true), NORMAL_AND_SIDEWAYS(true), MADGEEK(true);
2013-08-13 14:05:37 +00:00
private boolean on;
2013-08-13 18:53:33 +00:00
JumpPadMode(boolean on)
2013-08-13 14:05:37 +00:00
{
this.on = on;
}
public boolean isOn()
{
return on;
}
}
public static TFM_Jumppads getInstance()
{
return TFM_JumpadsHolder.INSTANCE;
}
private static class TFM_JumpadsHolder
{
private static final TFM_Jumppads INSTANCE = new TFM_Jumppads();
}
}