mcserver/instances/forge-1.20.1-survival/patches/lts-auth/LtsAuthMod.java
2026-08-10 14:24:14 -04:00

165 lines
6.4 KiB
Java

package com.rtxbb.lts_auth;
import com.rtxbb.lts_auth.command.LoginCommand;
import com.rtxbb.lts_auth.command.RegisterCommand;
import com.rtxbb.lts_auth.config.MessageManager;
import com.rtxbb.lts_auth.manager.AuthManager;
import com.mojang.logging.LogUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegisterCommandsEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.entity.item.ItemTossEvent;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.level.BlockEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.loading.FMLPaths;
import org.slf4j.Logger;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@Mod("lts_auth")
public class LtsAuthMod {
public static final String MODID = "lts_auth";
private static final Logger LOGGER = LogUtils.getLogger();
private static final MessageManager MESSAGE_MANAGER = new MessageManager(FMLPaths.CONFIGDIR.get().resolve("lts_auth").resolve("messages.yml"));
private final Map<UUID, Integer> joinTicks = new HashMap<>();
public LtsAuthMod() {
MESSAGE_MANAGER.load();
MinecraftForge.EVENT_BUS.register(this);
LOGGER.info(messages().get("messages.mod_initialized"));
}
public static MessageManager messages() {
return MESSAGE_MANAGER;
}
@SubscribeEvent
public void onRegisterCommands(RegisterCommandsEvent event) {
RegisterCommand.register(event.getDispatcher());
LoginCommand.register(event.getDispatcher());
}
@SubscribeEvent
public void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
AuthManager.getInstance().logout(player.m_20148_());
joinTicks.put(player.m_20148_(), 0);
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
player.m_6842_(true);
}
if (AuthManager.getInstance().isRegistered(player.m_20148_())) {
player.m_213846_(Component.m_237113_(messages().getColored("messages.login_prompt")));
} else {
player.m_213846_(Component.m_237113_(messages().getColored("messages.register_prompt")));
}
}
}
@SubscribeEvent
public void onPlayerQuit(PlayerEvent.PlayerLoggedOutEvent event) {
AuthManager.getInstance().logout(event.getEntity().m_20148_());
joinTicks.remove(event.getEntity().m_20148_());
}
@SubscribeEvent
public void onServerTick(TickEvent.ServerTickEvent event) {
if (event.phase == TickEvent.Phase.END) {
Map<UUID, Integer> ticksCopy = new HashMap<>(joinTicks);
for (UUID uuid : ticksCopy.keySet()) {
if (!AuthManager.getInstance().isAuthenticated(uuid)) {
int ticks = joinTicks.get(uuid) + 1;
joinTicks.put(uuid, ticks);
ServerPlayer player = event.getServer().m_6846_().m_11259_(uuid);
if (player != null) {
if (ticks % 100 == 0) {
if (AuthManager.getInstance().isRegistered(uuid)) {
player.m_240418_(Component.m_237113_(messages().getColored("messages.login_reminder")), true);
} else {
player.m_240418_(Component.m_237113_(messages().getColored("messages.register_reminder")), true);
}
}
if (ticks >= 36000) {
player.f_8906_.m_9942_(Component.m_237113_(messages().getColored("messages.timeout_kick")));
}
}
} else {
joinTicks.remove(uuid);
}
}
}
}
@SubscribeEvent
public void onPlayerMove(TickEvent.PlayerTickEvent event) {
if (event.phase == TickEvent.Phase.START && event.player instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
player.m_6842_(true);
player.m_6021_(player.m_20185_(), player.m_20186_(), player.m_20189_());
}
}
}
@SubscribeEvent
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onLivingHurt(LivingHurtEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onLivingAttack(LivingAttackEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onBlockBreak(BlockEvent.BreakEvent event) {
if (event.getPlayer() instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onItemPickup(EntityItemPickupEvent event) {
if (event.getEntity() instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onItemToss(ItemTossEvent event) {
if (event.getPlayer() instanceof ServerPlayer player) {
if (!AuthManager.getInstance().isAuthenticated(player.m_20148_())) {
event.setCanceled(true);
}
}
}
}