From dddd69472aa27c5f6ac2d2791fd9fabf52bcea61 Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Mon, 27 Jul 2026 01:33:26 +0200 Subject: [PATCH] ok --- src/commands/CommandBan.cpp | 12 +++---- src/commands/CommandBanIp.cpp | 25 +++++++++------ src/commands/CommandKick.cpp | 8 +++-- src/commands/CommandManager.cpp | 2 ++ src/commands/CommandPardon.cpp | 40 ++++++++++++++++++++++++ src/commands/CommandPardon.hpp | 9 ++++++ src/network/RakNetInstance.cpp | 7 +++-- src/network/ServerSideNetworkHandler.cpp | 9 ++++-- 8 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 src/commands/CommandPardon.cpp create mode 100644 src/commands/CommandPardon.hpp diff --git a/src/commands/CommandBan.cpp b/src/commands/CommandBan.cpp index b9595c0..8b924bd 100644 --- a/src/commands/CommandBan.cpp +++ b/src/commands/CommandBan.cpp @@ -27,13 +27,13 @@ std::string CommandBan::execute(Minecraft& mc, Player& player, const std::vector return lower == nicknameLower; }); - if (*it == (Player*)mc.player) { - return "ban: you can't ban urself lol"; - } - - auto sourceId = (*it)->owner; - if (it != mc.level->players.end()) { + if (*it == (Player*)mc.player) { + return "banip: you can't ban urself lol"; + } + + auto sourceId = (*it)->owner; + (*it)->reallyRemoveIfPlayer = true; mc.level->removeEntity((*it)); mc.raknetInstance->getPeer()->CloseConnection(sourceId, true); diff --git a/src/commands/CommandBanIp.cpp b/src/commands/CommandBanIp.cpp index 2374903..a829c01 100644 --- a/src/commands/CommandBanIp.cpp +++ b/src/commands/CommandBanIp.cpp @@ -27,17 +27,22 @@ std::string CommandBanIp::execute(Minecraft& mc, Player& player, const std::vect return lower == nicknameLower; }); - if (*it == (Player*)mc.player) { - return "banip: you can't ban urself lol"; - } - - RakNet::SystemAddress sysAddress = mc.raknetInstance->getPeer()->GetSystemAddressFromGuid((*it)->owner); - - char clientIp[32]; - sysAddress.ToString(false, clientIp); - auto sourceId = (*it)->owner; + std::string clientIp; if (it != mc.level->players.end()) { + if (*it == (Player*)mc.player) { + return "banip: you can't ban urself lol"; + } + + RakNet::SystemAddress sysAddress = mc.raknetInstance->getPeer()->GetSystemAddressFromGuid((*it)->owner); + + char ip[32]; + sysAddress.ToString(false, ip); + + clientIp = ip; + + auto sourceId = (*it)->owner; + (*it)->reallyRemoveIfPlayer = true; mc.level->removeEntity((*it)); mc.raknetInstance->getPeer()->CloseConnection(sourceId, true); @@ -47,6 +52,8 @@ std::string CommandBanIp::execute(Minecraft& mc, Player& player, const std::vect return args[0] + " already banned!"; } } + + clientIp = args[0]; } mc.level->bannedIps.insert(clientIp); diff --git a/src/commands/CommandKick.cpp b/src/commands/CommandKick.cpp index b876d9a..52dbe23 100644 --- a/src/commands/CommandKick.cpp +++ b/src/commands/CommandKick.cpp @@ -35,9 +35,11 @@ std::string CommandKick::execute(Minecraft& mc, Player& player, const std::vecto return "kick: you can't kick urself lol"; } - mc.level->removePlayer(*it); - (*it)->remove(); - mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true); + auto sourceId = (*it)->owner; + + (*it)->reallyRemoveIfPlayer = true; + mc.level->removeEntity((*it)); + mc.raknetInstance->getPeer()->CloseConnection(sourceId, true); return "kick: successfully kicked player " + args[0]; } diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 549204c..1e619d7 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -9,6 +9,7 @@ #include "commands/CommandOp.hpp" #include "commands/CommandBan.hpp" #include "commands/CommandBanIp.hpp" +#include "commands/CommandPardon.hpp" #include "network/packet/ChatPacket.h" #include "network/RakNetInstance.h" #include "world/level/Level.h" @@ -23,6 +24,7 @@ void CommandManager::registerAllCommands() { m_commands.push_back(new CommandOp()); m_commands.push_back(new CommandBan()); m_commands.push_back(new CommandBanIp()); + m_commands.push_back(new CommandPardon()); } std::vector CommandManager::getListAllCommands() { diff --git a/src/commands/CommandPardon.cpp b/src/commands/CommandPardon.cpp new file mode 100644 index 0000000..a6ea269 --- /dev/null +++ b/src/commands/CommandPardon.cpp @@ -0,0 +1,40 @@ +#include "CommandPardon.hpp" +#include "commands/Command.hpp" +#include "network/RakNetInstance.h" +#include "raknet/RakPeerInterface.h" +#include "world/level/Level.h" +#include +#include + +CommandPardon::CommandPardon() : Command("pardon") {} + +std::string CommandPardon::execute(Minecraft& mc, Player& player, const std::vector& args) { + if (!isPlayerOp(mc, player)) { + return "You aren't enough priveleged to run this command"; + } + + if (args.empty()) { + return help(mc); + } + + std::string nicknameLower = args[0]; + std::transform(nicknameLower.begin(), nicknameLower.end(), nicknameLower.begin(), ::tolower); + + if (mc.level->bannedPpl.find(nicknameLower) != mc.level->bannedPpl.end()) { + mc.level->bannedPpl.erase(nicknameLower); + + return "pardon: successfully unbanned player " + args[0]; + } + + if (mc.level->bannedIps.find(nicknameLower) != mc.level->bannedIps.end()) { + mc.level->bannedIps.erase(nicknameLower); + + return "pardon: successfully unbanned ip " + args[0]; + } + + return "Player/Ip doesnt banned"; +} + +std::string CommandPardon::help(Minecraft& mc) { + return "Usage: /pardon "; +} \ No newline at end of file diff --git a/src/commands/CommandPardon.hpp b/src/commands/CommandPardon.hpp new file mode 100644 index 0000000..ee08fbc --- /dev/null +++ b/src/commands/CommandPardon.hpp @@ -0,0 +1,9 @@ +#include "Command.hpp" + +class CommandPardon : public Command { +public: + CommandPardon(); + + std::string execute(Minecraft& mc, Player& player, const std::vector& args); + std::string help(Minecraft& mc); +}; \ No newline at end of file diff --git a/src/network/RakNetInstance.cpp b/src/network/RakNetInstance.cpp index 75a2814..f4d0d6f 100755 --- a/src/network/RakNetInstance.cpp +++ b/src/network/RakNetInstance.cpp @@ -173,6 +173,7 @@ bool RakNetInstance::isMyLocalGuid(const RakNet::RakNetGUID& guid) void RakNetInstance::runEvents(NetEventCallback* callback) { RakNet::Packet* currentEvent; + bool disconnect = false; while ((currentEvent = rakPeer->Receive()) != NULL) { @@ -200,6 +201,7 @@ void RakNetInstance::runEvents(NetEventCallback* callback) case ID_DISCONNECTION_NOTIFICATION: case ID_CONNECTION_LOST: callback->onDisconnect(currentEvent->guid); + disconnect = true; break; case ID_UNCONNECTED_PONG: { @@ -233,8 +235,9 @@ void RakNetInstance::runEvents(NetEventCallback* callback) } } } - - rakPeer->DeallocatePacket(currentEvent); + if (!disconnect) { + rakPeer->DeallocatePacket(currentEvent); + } //delete activeBitStream; } diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index 5fbc932..0776339 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -175,9 +175,14 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MessageP return; } } - - displayGameMessage("<" + player->name + "> " + msg); + // @todo rewrite + bool shouldShow = true; + PluginsManager::get().emit("Message", LuaPlayer(source), packet->message); + + if (shouldShow) { + displayGameMessage("<" + player->name + "> " + msg); + } } void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ChatPacket* packet)