forked from Kolyah35/minecraft-pe-0.6.1
FEAT: Ban command, save ops and banned ppl in files
TODO: fix many crashes...
This commit is contained in:
@@ -3,5 +3,8 @@
|
||||
#include <client/Minecraft.h>
|
||||
|
||||
bool Command::isPlayerOp(Minecraft& mc, Player& player) {
|
||||
return mc.level->ops.find(player.name) != mc.level->ops.end();
|
||||
std::string nicknameLower = player.name;
|
||||
std::transform(nicknameLower.begin(), nicknameLower.end(), nicknameLower.begin(), ::tolower);
|
||||
|
||||
return mc.level->ops.find(nicknameLower) != mc.level->ops.end();
|
||||
}
|
||||
52
src/commands/CommandBan.cpp
Normal file
52
src/commands/CommandBan.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "CommandBan.hpp"
|
||||
#include "commands/Command.hpp"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "raknet/RakPeerInterface.h"
|
||||
#include "world/level/Level.h"
|
||||
#include <algorithm>
|
||||
#include <client/Minecraft.h>
|
||||
|
||||
CommandBan::CommandBan() : Command("ban") {}
|
||||
|
||||
std::string CommandBan::execute(Minecraft& mc, Player& player, const std::vector<std::string>& 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);
|
||||
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [args, nicknameLower] (auto& it) -> bool {
|
||||
std::string lower = it->name;
|
||||
std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
|
||||
|
||||
return lower == nicknameLower;
|
||||
});
|
||||
|
||||
if (*it == (Player*)mc.player) {
|
||||
return "ban: you can't ban urself lol";
|
||||
}
|
||||
|
||||
if (it != mc.level->players.end()) {
|
||||
mc.level->removePlayer(*it);
|
||||
(*it)->remove();
|
||||
mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true);
|
||||
} else {
|
||||
for (auto& banned : mc.level->bannedPpl) {
|
||||
if (nicknameLower == banned) {
|
||||
return args[0] + "already banned!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mc.level->bannedPpl.insert(nicknameLower);
|
||||
return "ban: successfully banned player " + args[0];
|
||||
}
|
||||
|
||||
std::string CommandBan::help(Minecraft& mc) {
|
||||
return "Usage: /ban <player>";
|
||||
}
|
||||
9
src/commands/CommandBan.hpp
Normal file
9
src/commands/CommandBan.hpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "Command.hpp"
|
||||
|
||||
class CommandBan : public Command {
|
||||
public:
|
||||
CommandBan();
|
||||
|
||||
std::string execute(Minecraft& mc, Player& player, const std::vector<std::string>& args);
|
||||
std::string help(Minecraft& mc);
|
||||
};
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "world/level/Level.h"
|
||||
#include <algorithm>
|
||||
#include <client/Minecraft.h>
|
||||
// RakNet::RakPeerInterface
|
||||
|
||||
CommandKick::CommandKick() : Command("kick") {}
|
||||
|
||||
@@ -18,8 +17,14 @@ std::string CommandKick::execute(Minecraft& mc, Player& player, const std::vecto
|
||||
return help(mc);
|
||||
}
|
||||
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [args] (auto& it) -> bool {
|
||||
return it->name == args[0];
|
||||
std::string nicknameLower = args[0];
|
||||
std::transform(nicknameLower.begin(), nicknameLower.end(), nicknameLower.begin(), ::tolower);
|
||||
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [args, nicknameLower] (auto& it) -> bool {
|
||||
std::string lower = it->name;
|
||||
std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
|
||||
|
||||
return lower == nicknameLower;
|
||||
});
|
||||
|
||||
if (it == mc.level->players.end()) {
|
||||
@@ -33,7 +38,7 @@ std::string CommandKick::execute(Minecraft& mc, Player& player, const std::vecto
|
||||
mc.level->removePlayer(*it);
|
||||
(*it)->remove();
|
||||
mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true);
|
||||
mc.addMessage("kick: successfully kicked player " + args[0]);
|
||||
return "kick: successfully kicked player " + args[0];
|
||||
}
|
||||
|
||||
std::string CommandKick::help(Minecraft& mc) {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "commands/CommandHelp.hpp"
|
||||
#include "commands/CommandKick.hpp"
|
||||
#include "commands/CommandOp.hpp"
|
||||
#include "commands/CommandBan.hpp"
|
||||
#include "network/packet/ChatPacket.h"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "world/level/Level.h"
|
||||
@@ -19,6 +20,7 @@ void CommandManager::registerAllCommands() {
|
||||
m_commands.push_back(new CommandHelp());
|
||||
m_commands.push_back(new CommandKick());
|
||||
m_commands.push_back(new CommandOp());
|
||||
m_commands.push_back(new CommandBan());
|
||||
}
|
||||
|
||||
std::vector<std::string> CommandManager::getListAllCommands() {
|
||||
|
||||
@@ -15,15 +15,14 @@ std::string CommandOp::execute(Minecraft& mc, Player& player, const std::vector<
|
||||
return help(mc);
|
||||
}
|
||||
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [args] (auto& it) -> bool {
|
||||
return it->name == args[0];
|
||||
});
|
||||
|
||||
if (mc.level->ops.find(args[0]) != mc.level->ops.end()) {
|
||||
std::string nicknameLower = args[0];
|
||||
std::transform(nicknameLower.begin(), nicknameLower.end(), nicknameLower.begin(), ::tolower);
|
||||
|
||||
if (mc.level->ops.find(nicknameLower) != mc.level->ops.end()) {
|
||||
return "op: player " + args[0] + " already opped";
|
||||
}
|
||||
|
||||
mc.level->ops.emplace((*it)->name);
|
||||
mc.level->ops.emplace(nicknameLower);
|
||||
return "op: successfully opped player " + args[0];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user