Implement JoinLeaveListener with MovingListener and ChatListener.

This commit is contained in:
asofold 2013-03-08 17:28:35 +01:00
parent 5dd09d4476
commit 926556a358
2 changed files with 50 additions and 41 deletions

View File

@ -7,7 +7,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
@ -15,6 +14,7 @@ import fr.neatmonster.nocheatplus.checks.CheckListener;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.command.CommandUtil;
import fr.neatmonster.nocheatplus.command.INotifyReload;
import fr.neatmonster.nocheatplus.components.JoinLeaveListener;
import fr.neatmonster.nocheatplus.config.ConfPaths;
import fr.neatmonster.nocheatplus.config.ConfigFile;
import fr.neatmonster.nocheatplus.config.ConfigManager;
@ -36,7 +36,7 @@ import fr.neatmonster.nocheatplus.utilities.ds.prefixtree.SimpleCharPrefixTree;
*
* @see ChatEvent
*/
public class ChatListener extends CheckListener implements INotifyReload {
public class ChatListener extends CheckListener implements INotifyReload, JoinLeaveListener {
// Checks.
@ -220,22 +220,6 @@ public class ChatListener extends CheckListener implements INotifyReload {
event.disallow(Result.KICK_OTHER, cc.loginsKickMessage);
}
}
@EventHandler(
priority = EventPriority.MONITOR)
public void onPlayerJoin(final PlayerJoinEvent event) {
final Player player = event.getPlayer();
final ChatConfig cc = ChatConfig.getConfig(player);
final ChatData data = ChatData.getData(player);
synchronized (data) {
if (captcha.isEnabled(player) && captcha.shouldCheckCaptcha(cc, data)){
// shouldCheckCaptcha: only if really enabled.
// TODO: Later: add check for cc.captchaOnLogin or so (before shouldCheckCaptcha).
// TODO: maybe schedule this to come after other plugins messages.
captcha.sendNewCaptcha(player, cc, data);
}
}
}
@Override
public void onReload() {
@ -246,4 +230,22 @@ public class ChatListener extends CheckListener implements INotifyReload {
logins.onReload();
}
@Override
public void playerJoins(final Player player) {
final ChatConfig cc = ChatConfig.getConfig(player);
final ChatData data = ChatData.getData(player);
synchronized (data) {
if (captcha.isEnabled(player) && captcha.shouldCheckCaptcha(cc, data)){
// shouldCheckCaptcha: only if really enabled.
// TODO: Later: add check for cc.captchaOnLogin or so (before shouldCheckCaptcha).
// TODO: maybe schedule this to come after other plugins messages.
captcha.sendNewCaptcha(player, cc, data);
}
}
}
@Override
public void playerLeaves(final Player player) {
}
}

View File

@ -25,17 +25,15 @@ import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerBedLeaveEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPortalEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.event.player.PlayerVelocityEvent;
import org.bukkit.event.vehicle.VehicleDestroyEvent;
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleExitEvent;
import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.util.Vector;
@ -52,6 +50,7 @@ import fr.neatmonster.nocheatplus.components.IData;
import fr.neatmonster.nocheatplus.components.IHaveCheckType;
import fr.neatmonster.nocheatplus.components.INeedConfig;
import fr.neatmonster.nocheatplus.components.IRemoveData;
import fr.neatmonster.nocheatplus.components.JoinLeaveListener;
import fr.neatmonster.nocheatplus.components.TickListener;
import fr.neatmonster.nocheatplus.config.ConfPaths;
import fr.neatmonster.nocheatplus.config.ConfigManager;
@ -89,7 +88,7 @@ import fr.neatmonster.nocheatplus.utilities.StringUtil;
*
* @see MovingEvent
*/
public class MovingListener extends CheckListener implements TickListener, IRemoveData, IHaveCheckType, INotifyReload, INeedConfig{
public class MovingListener extends CheckListener implements TickListener, IRemoveData, IHaveCheckType, INotifyReload, INeedConfig, JoinLeaveListener{
/**
* Coupling from and to PlayerLocation objects with a block cache for easy storage and reuse.
@ -948,14 +947,19 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
*/
final Player player = event.getPlayer();
final MovingData data = MovingData.getData(player);
// Ignore velocity if inside of vehicles.
if (player.isInsideVehicle()){
data.removeAllVelocity();
return;
}
data.removeInvalidVelocity();
final MovingConfig cc = MovingConfig.getConfig(player);
final Vector velocity = event.getVelocity();
if (cc.debug) System.out.println(event.getPlayer().getName() + " new velocity: " + velocity);
// TODO: Check for vehicles ?
double newVal = velocity.getY();
if (newVal >= 0D) {
if (data.verticalFreedom <= 0.001 && data.verticalVelocityCounter >= 0){
@ -970,7 +974,6 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
newVal = Math.sqrt(velocity.getX() * velocity.getX() + velocity.getZ() * velocity.getZ());
if (newVal > 0D) {
final Velocity vel = new Velocity(newVal, cc.velocityActivationCounter, 1 + (int) Math.round(newVal * 10.0));
data.removeInvalidVelocity();
data.addHorizontalVelocity(vel);
// data.horizontalFreedom += newVal;
// data.horizontalVelocityCounter = Math.min(100, Math.max(data.horizontalVelocityCounter, cc.velocityGraceTicks ) + 1 + (int) Math.round(newVal * 10.0)); // 30;
@ -1123,9 +1126,8 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// Entity fall-distance should be reset elsewhere.
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(final PlayerJoinEvent event) {
final Player player = event.getPlayer();
@Override
public void playerJoins(final Player player) {
final MovingData data = MovingData.getData(player);
// TODO: on existing set back: detect world changes and loss of world on join (+ set up some paradigm).
data.clearMorePacketsData();
@ -1165,18 +1167,15 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
data.sfHoverLoginTicks = 0;
data.sfHoverTicks = -1;
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(final PlayerQuitEvent event){
onLeave(event.getPlayer());
}
private void onLeave(final Player player) {
@Override
public void playerLeaves(final Player player) {
survivalFly.setReallySneaking(player, false);
noFall.onLeave(player);
final MovingData data = MovingData.getData(player);
// TODO: Add a method for ordinary presence-change resetting (use in join + leave).
data.removeAllVelocity();
}
@ -1194,6 +1193,18 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
onPlayerVehicleLeave((Player) entity);
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public final void onPlayerVehicleEnter(final VehicleEnterEvent event){
final Entity entity = event.getEntered();
if (!(entity instanceof Player)){
return;
}
final Player player = (Player) entity;
final MovingData data = MovingData.getData(player);
data.removeAllVelocity();
// TODO: more resetting, visible check ?
}
private final void onPlayerVehicleLeave(final Player player){
final MovingData data = MovingData.getData(player);
// if (data.morePacketsVehicleTaskId != -1){
@ -1219,11 +1230,6 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
data.verticalVelocity = 0.15;
data.verticalVelocityUsed = 0;
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerKick(final PlayerKickEvent event){
onLeave(event.getPlayer());
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerToggleSneak(final PlayerToggleSneakEvent event){
@ -1362,4 +1368,5 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
parkedInfo.clear();
hoverTicksStep = Math.max(1, ConfigManager.getConfigFile().getInt(ConfPaths.MOVING_SURVIVALFLY_HOVER_STEP));
}
}