116 lines
3.1 KiB
Java
116 lines
3.1 KiB
Java
package me.totalfreedom.totalfreedommod.caging;
|
|
|
|
import io.papermc.lib.PaperLib;
|
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.block.BlockBreakEvent;
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
import org.bukkit.event.player.PlayerKickEvent;
|
|
import org.bukkit.event.player.PlayerMoveEvent;
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
|
|
import java.util.Objects;
|
|
|
|
public class Cager extends FreedomService
|
|
{
|
|
@Override
|
|
public void onStart()
|
|
{
|
|
}
|
|
|
|
@Override
|
|
public void onStop()
|
|
{
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
|
public void onBreakBlock(BlockBreakEvent event)
|
|
{
|
|
Player player = event.getPlayer();
|
|
if (plugin.al.isAdmin(player))
|
|
{
|
|
return;
|
|
}
|
|
|
|
FPlayer fPlayer = plugin.pl.getPlayer(event.getPlayer());
|
|
CageData cage = fPlayer.getCageData();
|
|
|
|
if (cage.isCaged())
|
|
{
|
|
event.setCancelled(true);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onPlayerMove(PlayerMoveEvent event)
|
|
{
|
|
FPlayer player = plugin.pl.getPlayer(event.getPlayer());
|
|
CageData cage = player.getCageData();
|
|
|
|
if (!cage.isCaged())
|
|
{
|
|
return;
|
|
}
|
|
|
|
Location playerLoc = player.getPlayer().getLocation().add(0, 1, 0);
|
|
Location cageLoc = cage.getLocation();
|
|
|
|
final boolean outOfCage;
|
|
if (!Objects.equals(playerLoc.getWorld(), cageLoc.getWorld()))
|
|
{
|
|
outOfCage = true;
|
|
} else
|
|
{
|
|
outOfCage = playerLoc.distanceSquared(cageLoc) > (2.5D * 2.5D);
|
|
}
|
|
|
|
if (outOfCage)
|
|
{
|
|
PaperLib.teleportAsync(player.getPlayer(), cageLoc.subtract(0, 0.1, 0));
|
|
FUtil.playerMsg(player.getPlayer(), "You may not leave your cage.", ChatColor.RED);
|
|
cage.regenerate();
|
|
}
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onPlayerQuit(PlayerQuitEvent event)
|
|
{
|
|
FPlayer player = plugin.pl.getPlayer(event.getPlayer());
|
|
CageData cage = player.getCageData();
|
|
|
|
if (cage.isCaged())
|
|
{
|
|
cage.playerQuit();
|
|
}
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onPlayerKick(PlayerKickEvent event)
|
|
{
|
|
FPlayer player = plugin.pl.getPlayer(event.getPlayer());
|
|
CageData cage = player.getCageData();
|
|
|
|
if (cage.isCaged())
|
|
{
|
|
cage.playerQuit();
|
|
}
|
|
}
|
|
|
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
|
public void onPlayerJoin(PlayerJoinEvent event)
|
|
{
|
|
FPlayer player = plugin.pl.getPlayer(event.getPlayer());
|
|
CageData cage = player.getCageData();
|
|
|
|
if (cage.isCaged())
|
|
{
|
|
cage.playerJoin();
|
|
}
|
|
}
|
|
} |