2022-07-09 14:26:57 +00:00
|
|
|
package dev.plex.listener;
|
|
|
|
|
|
|
|
import dev.plex.TFMExtras;
|
|
|
|
import dev.plex.jumppads.JumpPads;
|
|
|
|
import dev.plex.jumppads.Mode;
|
|
|
|
import dev.plex.util.PlexLog;
|
|
|
|
import org.bukkit.block.Block;
|
|
|
|
import org.bukkit.block.BlockFace;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
import org.bukkit.event.player.PlayerMoveEvent;
|
|
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
public class JumpPadsListener extends PlexListener
|
|
|
|
{
|
|
|
|
JumpPads jumpPads = TFMExtras.getModule().jumpPads;
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.NORMAL)
|
|
|
|
public void jumppadsAction(PlayerMoveEvent event)
|
|
|
|
{
|
|
|
|
Player player = event.getPlayer();
|
|
|
|
Vector playerVector = player.getVelocity().clone();
|
|
|
|
Block block = event.getTo().getBlock();
|
|
|
|
Map<Block, JumpPads.Wrap> blockWrapMap = jumpPads.blockWrapMap(block);
|
|
|
|
if (!jumpPads.playerModeMap.containsKey(player.getUniqueId()))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
Mode mode = jumpPads.playerModeMap.get(player.getUniqueId());
|
|
|
|
if (mode == Mode.NORMAL)
|
|
|
|
{
|
|
|
|
Block below = block.getRelative(BlockFace.DOWN);
|
|
|
|
if (jumpPads.wool.getValues().contains(below.getType()))
|
|
|
|
{
|
|
|
|
if (event.getFrom().getY() > block.getY() + 0.1 && ((int) event.getTo().getY() == block.getY()))
|
|
|
|
{
|
|
|
|
Vector vector = playerVector.multiply(new Vector(0.0, jumpPads.SCALAR * jumpPads.STRENGTH, 0.0));
|
|
|
|
if (vector.getY() < 0)
|
|
|
|
{
|
|
|
|
vector = vector.multiply(new Vector(0, -1, 0));
|
|
|
|
}
|
|
|
|
PlexLog.debug("New Velocity: {0}", vector.toString());
|
|
|
|
player.setFallDistance(0);
|
|
|
|
player.setVelocity(vector);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mode.equals(Mode.ENHANCED))
|
|
|
|
{
|
|
|
|
blockWrapMap.forEach((b, w) ->
|
|
|
|
{
|
|
|
|
if (jumpPads.wool.getValues().contains(b.getType()))
|
|
|
|
{
|
|
|
|
if (!(event.getFrom().getY() > block.getY() + 0.1 && ((int) event.getTo().getY() == block.getY())))
|
2023-03-08 19:30:51 +00:00
|
|
|
{
|
2022-07-09 14:26:57 +00:00
|
|
|
return;
|
2023-03-08 19:30:51 +00:00
|
|
|
}
|
2022-07-09 14:26:57 +00:00
|
|
|
if (w.y() == -1)
|
|
|
|
{
|
|
|
|
playerVector.add(new Vector(0.0, jumpPads.SCALAR * jumpPads.STRENGTH, 0.0));
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (w.x())
|
|
|
|
{
|
|
|
|
case (-1):
|
|
|
|
playerVector.add(new Vector(-jumpPads.SCALAR * jumpPads.STRENGTH, 0.0, 0.0));
|
|
|
|
case (1):
|
|
|
|
playerVector.add(new Vector(jumpPads.SCALAR * jumpPads.STRENGTH, 0.0, 0.0));
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (w.z())
|
|
|
|
{
|
|
|
|
case (-1):
|
|
|
|
playerVector.add(new Vector(0.0, 0.0, -jumpPads.SCALAR * jumpPads.STRENGTH));
|
|
|
|
case (1):
|
|
|
|
playerVector.add(new Vector(0.0, 0.0, jumpPads.SCALAR * jumpPads.STRENGTH));
|
|
|
|
}
|
|
|
|
|
|
|
|
player.setVelocity(playerVector);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mode == Mode.EXTREME)
|
|
|
|
{
|
|
|
|
Block below = block.getRelative(BlockFace.DOWN);
|
|
|
|
if (jumpPads.wool.getValues().contains(below.getType()))
|
|
|
|
{
|
|
|
|
if (event.getFrom().getY() > block.getY() + 0.1 && ((int) event.getTo().getY() == block.getY()))
|
|
|
|
{
|
|
|
|
player.setVelocity(jumpPads.extreme(playerVector));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (mode.equals(Mode.ULTIMATE))
|
|
|
|
{
|
|
|
|
blockWrapMap.forEach((b, w) ->
|
|
|
|
{
|
|
|
|
if (jumpPads.wool.getValues().contains(b.getType()))
|
|
|
|
{
|
|
|
|
if (w.y() == -1)
|
|
|
|
{
|
|
|
|
jumpPads.extreme(playerVector.add(new Vector(0.0, jumpPads.SCALAR * jumpPads.STRENGTH, 0.0)));
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (w.x())
|
|
|
|
{
|
|
|
|
case (-1):
|
|
|
|
jumpPads.extreme(playerVector.add(new Vector(-jumpPads.SCALAR * jumpPads.STRENGTH, 0.0, 0.0)));
|
|
|
|
case (1):
|
|
|
|
jumpPads.extreme(playerVector.add(new Vector(jumpPads.SCALAR * jumpPads.STRENGTH, 0.0, 0.0)));
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (w.z())
|
|
|
|
{
|
|
|
|
case (-1):
|
|
|
|
jumpPads.extreme(playerVector.add(new Vector(0.0, 0.0, -jumpPads.SCALAR * jumpPads.STRENGTH)));
|
|
|
|
case (1):
|
|
|
|
jumpPads.extreme(playerVector.add(new Vector(0.0, 0.0, jumpPads.SCALAR * jumpPads.STRENGTH)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
player.setVelocity(playerVector);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.HIGHEST)
|
|
|
|
public void cleanup(PlayerQuitEvent event)
|
|
|
|
{
|
|
|
|
jumpPads.playerModeMap.remove(event.getPlayer().getUniqueId());
|
|
|
|
}
|
|
|
|
}
|