Plan/Plan/fabric/src/main/java/net/playeranalytics/plan/gathering/listeners/events/PlanFabricEvents.java

177 lines
6.6 KiB
Java

/*
* This file is part of Player Analytics (Plan).
*
* Plan is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License v3 as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Plan is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
*/
package net.playeranalytics.plan.gathering.listeners.events;
import com.mojang.authlib.GameProfile;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text;
import net.minecraft.world.GameMode;
import net.playeranalytics.plan.PlanFabric;
import net.playeranalytics.plan.gathering.FabricPlayerPositionTracker;
import java.net.SocketAddress;
import java.util.Collection;
import java.util.UUID;
public class PlanFabricEvents {
public static final Event<OnKilled> ON_KILLED = EventFactory.createArrayBacked(OnKilled.class, callbacks -> (killed, killer) -> {
for (OnKilled callback : callbacks) {
callback.onKilled(killed, killer);
}
});
public static final Event<OnChat> ON_CHAT = EventFactory.createArrayBacked(OnChat.class, callbacks -> (handler, message) -> {
for (OnChat callback : callbacks) {
callback.onChat(handler, message);
}
});
public static final Event<OnMove> ON_MOVE = EventFactory.createArrayBacked(OnMove.class, callbacks -> (handler, packet) -> {
for (OnMove callback : callbacks) {
UUID playerUUID = handler.player.getUuid();
double[] position = FabricPlayerPositionTracker.getPosition(playerUUID);
double x = position[0];
double y = position[1];
double z = position[2];
float yaw = (float) position[3];
float pitch = (float) position[4];
if (FabricPlayerPositionTracker.moved(playerUUID, packet.getX(x), packet.getY(y), packet.getZ(z), packet.getYaw(yaw), packet.getPitch(pitch))) {
callback.onMove(handler, packet);
}
}
});
public static final Event<OnGameModeChange> ON_GAMEMODE_CHANGE = EventFactory.createArrayBacked(OnGameModeChange.class, callbacks -> (handler, packet) -> {
for (OnGameModeChange callback : callbacks) {
callback.onGameModeChange(handler, packet);
}
});
public static final Event<OnPlayerKicked> ON_KICKED = EventFactory.createArrayBacked(OnPlayerKicked.class, callbacks -> (source, targets, reason) -> {
for (OnPlayerKicked callback : callbacks) {
callback.onKicked(source, targets, reason);
}
});
public static final Event<OnLogin> ON_LOGIN = EventFactory.createArrayBacked(OnLogin.class, callbacks -> (address, profile, reason) -> {
for (OnLogin callback : callbacks) {
callback.onLogin(address, profile, reason);
}
});
/**
* Called when Plan is enabled.
* <p>
* This includes, but might not be limited to:
* <ul>
* <li>First time the plugin enables successfully</li>
* <li>Plan is reloaded</li>
* <li>Plan is enabled after it was disabled</li>
* </ul>
* <p>
* This event provides full access to the Plan instance. However, <strong>it is advised to
* only call {@link PlanFabric#isSystemEnabled} to determine if the enable was successful.</strong>
* It is not guaranteed that this event is called when the plugin fails to enable properly.
*/
public static final Event<OnEnable> ON_ENABLE = EventFactory.createArrayBacked(OnEnable.class, callbacks -> plugin -> {
for (OnEnable callback : callbacks) {
callback.onEnable(plugin);
}
});
@FunctionalInterface
public interface OnKilled {
/**
* Called when a living entity is killed
*
* @param killed the entity that died
* @param killer the entity that killed
*/
void onKilled(LivingEntity killed, Entity killer);
}
@FunctionalInterface
public interface OnChat {
/**
* Called when a player sends a chat message / command
*
* @param handler the handler of the sending player
* @param message the message sent (starts with "/" if it is a command)
*/
void onChat(ServerPlayNetworkHandler handler, String message);
}
@FunctionalInterface
public interface OnMove {
/**
* Called when a sends a valid movement packet
*
* @param handler the handler of the sending player
* @param packet the send packet
*/
void onMove(ServerPlayNetworkHandler handler, PlayerMoveC2SPacket packet);
}
@FunctionalInterface
public interface OnGameModeChange {
/**
* Called when a player changes gamemode
*
* @param player the player that changed gamemodes
* @param newGameMode the new gamemode
*/
void onGameModeChange(ServerPlayerEntity player, GameMode newGameMode);
}
@FunctionalInterface
public interface OnPlayerKicked {
/**
* Called when a player (or multiple) get kicked from the server
*
* @param source the source that initated the kick
* @param targets the player(s) that got kicked
* @param reason the provided kick reason
*/
void onKicked(ServerCommandSource source, Collection<ServerPlayerEntity> targets, Text reason);
}
@FunctionalInterface
public interface OnLogin {
/**
* Called when a player attempts to login
*
* @param address the address of the player
* @param profile the profile of the player
* @param reason the provided kick reason (null if player is permitted to join)
*/
void onLogin(SocketAddress address, GameProfile profile, Text reason);
}
@FunctionalInterface
public interface OnEnable {
void onEnable(PlanFabric plugin);
}
}