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 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 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); } } } }