lol
This commit is contained in:
@@ -287,11 +287,7 @@ void Minecraft::setLevel(Level* level, const std::string& message /* ="" */, Loc
|
||||
}
|
||||
}
|
||||
this->level = level;
|
||||
// So uhhh
|
||||
std::string op = options.getStringValue(OPTIONS_USERNAME);
|
||||
std::transform(op.begin(), op.end(), op.begin(), ::tolower);
|
||||
|
||||
level->ops.emplace(op);
|
||||
_hasSignaledGeneratingLevelFinished = false;
|
||||
#ifdef STANDALONE_SERVER
|
||||
const bool threadedLevelCreation = false;
|
||||
|
||||
@@ -20,7 +20,7 @@ std::string CommandBan::execute(Minecraft& mc, Player& player, const std::vector
|
||||
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 {
|
||||
auto it = std::find_if(mc.level->players.begin(), mc.level->players.end(), [nicknameLower] (auto& it) -> bool {
|
||||
std::string lower = it->name;
|
||||
std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
|
||||
|
||||
@@ -31,10 +31,12 @@ std::string CommandBan::execute(Minecraft& mc, Player& player, const std::vector
|
||||
return "ban: you can't ban urself lol";
|
||||
}
|
||||
|
||||
auto sourceId = (*it)->owner;
|
||||
|
||||
if (it != mc.level->players.end()) {
|
||||
mc.level->removePlayer(*it);
|
||||
(*it)->remove();
|
||||
mc.raknetInstance->getPeer()->CloseConnection((*it)->owner, true);
|
||||
(*it)->reallyRemoveIfPlayer = true;
|
||||
mc.level->removeEntity((*it));
|
||||
mc.raknetInstance->getPeer()->CloseConnection(sourceId, true);
|
||||
} else {
|
||||
for (auto& banned : mc.level->bannedPpl) {
|
||||
if (nicknameLower == banned) {
|
||||
|
||||
58
src/commands/CommandBanIp.cpp
Normal file
58
src/commands/CommandBanIp.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include "CommandBanIp.hpp"
|
||||
#include "commands/Command.hpp"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "raknet/RakPeerInterface.h"
|
||||
#include "world/level/Level.h"
|
||||
#include <algorithm>
|
||||
#include <client/Minecraft.h>
|
||||
|
||||
CommandBanIp::CommandBanIp() : Command("banip") {}
|
||||
|
||||
std::string CommandBanIp::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(), [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 "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;
|
||||
|
||||
if (it != mc.level->players.end()) {
|
||||
(*it)->reallyRemoveIfPlayer = true;
|
||||
mc.level->removeEntity((*it));
|
||||
mc.raknetInstance->getPeer()->CloseConnection(sourceId, true);
|
||||
} else {
|
||||
for (auto& banned : mc.level->bannedIps) {
|
||||
if (clientIp == banned) {
|
||||
return args[0] + " already banned!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mc.level->bannedIps.insert(clientIp);
|
||||
return "banip: successfully banned player by ip " + args[0];
|
||||
}
|
||||
|
||||
std::string CommandBanIp::help(Minecraft& mc) {
|
||||
return "Usage: /banip <player>";
|
||||
}
|
||||
9
src/commands/CommandBanIp.hpp
Normal file
9
src/commands/CommandBanIp.hpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "Command.hpp"
|
||||
|
||||
class CommandBanIp : public Command {
|
||||
public:
|
||||
CommandBanIp();
|
||||
|
||||
std::string execute(Minecraft& mc, Player& player, const std::vector<std::string>& args);
|
||||
std::string help(Minecraft& mc);
|
||||
};
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "commands/CommandKick.hpp"
|
||||
#include "commands/CommandOp.hpp"
|
||||
#include "commands/CommandBan.hpp"
|
||||
#include "commands/CommandBanIp.hpp"
|
||||
#include "network/packet/ChatPacket.h"
|
||||
#include "network/RakNetInstance.h"
|
||||
#include "world/level/Level.h"
|
||||
@@ -21,6 +22,7 @@ void CommandManager::registerAllCommands() {
|
||||
m_commands.push_back(new CommandKick());
|
||||
m_commands.push_back(new CommandOp());
|
||||
m_commands.push_back(new CommandBan());
|
||||
m_commands.push_back(new CommandBanIp());
|
||||
}
|
||||
|
||||
std::vector<std::string> CommandManager::getListAllCommands() {
|
||||
|
||||
@@ -202,6 +202,24 @@ int main(int numArguments, char* pszArgs[]) {
|
||||
}
|
||||
}
|
||||
|
||||
std::ifstream bannedIps("banned-ips.txt");
|
||||
|
||||
if (bannedIps.is_open()) {
|
||||
std::string line;
|
||||
|
||||
while (std::getline(bannedIps, line)) {
|
||||
if (!line.empty()) {
|
||||
((MAIN_CLASS*)g_app)->level->bannedIps.insert(line);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
std::ofstream bannedIp("banned-ips.txt");
|
||||
|
||||
if (!bannedIp.is_open()) {
|
||||
throw std::runtime_error("Cannot create banned players list.");
|
||||
}
|
||||
}
|
||||
|
||||
std::cout << "Level has been generated in " << getTimeS() - startTime << std::endl;
|
||||
((MAIN_CLASS*)g_app)->level->saveLevelData();
|
||||
std::cout << "Level has been saved!" << std::endl;
|
||||
@@ -234,6 +252,18 @@ int main(int numArguments, char* pszArgs[]) {
|
||||
} else {
|
||||
throw std::runtime_error("Cannot open banned players list.");
|
||||
}
|
||||
|
||||
std::ofstream bannedIpsWrite("banned-ips.txt");
|
||||
|
||||
if (bannedIpsWrite.is_open()) {
|
||||
for (auto& banned : ((MAIN_CLASS*)g_app)->level->bannedIps) {
|
||||
bannedIpsWrite << banned << std::endl;
|
||||
}
|
||||
bannedIpsWrite.close();
|
||||
} else {
|
||||
throw std::runtime_error("Cannot open banned players list.");
|
||||
}
|
||||
|
||||
PluginsManager::get().emit("ServerShutdown");
|
||||
|
||||
((MAIN_CLASS*)g_app)->level->saveLevelData();
|
||||
|
||||
@@ -156,6 +156,30 @@ void ServerSideNetworkHandler::displayGameMessage(const std::string& message)
|
||||
raknetInstance->send(packet);
|
||||
}
|
||||
|
||||
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MessagePacket* packet)
|
||||
{
|
||||
auto player = getPlayer(source);
|
||||
|
||||
if (player == nullptr) return; // @todo maybe kick?
|
||||
|
||||
auto msg = std::string(packet->message.C_String());
|
||||
|
||||
if (packet->message[0] == '/') {
|
||||
// This is a command
|
||||
auto cmd = Util::stringTrim(msg);
|
||||
|
||||
if (PluginsManager::get().emitCommands(msg, source)) {
|
||||
ChatPacket resp(minecraft->commandManager().execute(*minecraft, *player, msg));
|
||||
return sendPrivate(resp, source);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
displayGameMessage("<" + player->name + "> " + msg);
|
||||
PluginsManager::get().emit("Message", LuaPlayer(source), packet->message);
|
||||
}
|
||||
|
||||
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ChatPacket* packet)
|
||||
{
|
||||
auto player = getPlayer(source);
|
||||
@@ -195,12 +219,12 @@ void ServerSideNetworkHandler::onDisconnect(const RakNet::RakNetGUID& guid)
|
||||
|
||||
if (player->owner == guid)
|
||||
{
|
||||
PluginsManager::get().emit("PlayerDisconnect", LuaPlayer(guid));
|
||||
minecraft->level->getLevelStorage()->savePlayer(*player);
|
||||
|
||||
std::string message = player->name;
|
||||
message += " disconnected from the game";
|
||||
displayGameMessage(message);
|
||||
PluginsManager::get().emit("PlayerDisconnect", LuaPlayer(guid));
|
||||
|
||||
//RemoveEntityPacket packet(player->entityId);
|
||||
//raknetInstance->send(packet);
|
||||
@@ -234,6 +258,10 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
|
||||
std::string nicknameLower = packet->clientName.C_String();
|
||||
std::transform(nicknameLower.begin(), nicknameLower.end(), nicknameLower.begin(), ::tolower);
|
||||
|
||||
RakNet::SystemAddress sysAddress = rakPeer->GetSystemAddressFromGuid(source);
|
||||
char clientIp[32];
|
||||
sysAddress.ToString(false, clientIp);
|
||||
|
||||
for (int i = 0; i < level->players.size(); i++) {
|
||||
ServerPlayer* player = (ServerPlayer*) level->players.at(i);
|
||||
|
||||
@@ -254,6 +282,13 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& banned : level->bannedIps) {
|
||||
if (clientIp == banned) {
|
||||
loginStatus = packet->newProto ? LoginStatus::Failed_Banned : LoginStatus::Failed_ClientOld;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
RakNet::BitStream bitStream;
|
||||
LoginStatusPacket(loginStatus).write(&bitStream);
|
||||
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
|
||||
@@ -511,6 +546,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RemoveBl
|
||||
|
||||
|
||||
oldTile->destroy(level, x, y, z, data);
|
||||
// RemoveEntityPacket packet(e->entityId);
|
||||
// redistributePacket(&packet, rakPeer->GetMyGUID());
|
||||
}
|
||||
|
||||
LOGI("Remove block [%i, %i, %i]\n", packet->x, packet->y, packet->z);
|
||||
|
||||
@@ -58,6 +58,7 @@ public:
|
||||
virtual void handle(const RakNet::RakNetGUID& source, ContainerClosePacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, SignUpdatePacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, ChatPacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, MessagePacket* packet);
|
||||
virtual void handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet);
|
||||
|
||||
bool allowsIncomingConnections() { return _allowIncoming; }
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <network/packet/ChatPacket.h>
|
||||
#include <network/packet/MovePlayerPacket.h>
|
||||
#include <network/packet/RemoveItemPacket.h>
|
||||
#include <network/packet/SetHealthPacket.h>
|
||||
#include <network/packet/TakeItemPacket.h>
|
||||
#include <world/entity/player/Inventory.h>
|
||||
|
||||
@@ -133,6 +134,26 @@ public:
|
||||
|
||||
return inv;
|
||||
}
|
||||
|
||||
int getHp() {
|
||||
auto plr = getPlayer();
|
||||
if (plr == nullptr) return -1;
|
||||
|
||||
return plr->health;
|
||||
}
|
||||
|
||||
void setHp(int hp) {
|
||||
auto plr = getPlayer();
|
||||
if (plr == nullptr) return;
|
||||
|
||||
plr->health = hp;
|
||||
|
||||
auto mc = PluginsManager::get().getMinecraft();
|
||||
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) mc->netCallback;
|
||||
|
||||
SetHealthPacket hpPacket(plr->health);
|
||||
ss->sendPrivate(hpPacket, m_source);
|
||||
}
|
||||
private:
|
||||
const RakNet::RakNetGUID m_source;
|
||||
};
|
||||
@@ -25,8 +25,6 @@ int PluginsManager::emitCommands(std::string command, const RakNet::RakNetGUID&
|
||||
i++;
|
||||
}
|
||||
|
||||
std::cout << cmd << " " << " ff" << std::endl;
|
||||
|
||||
auto it = m_luaCommands.find(cmd);
|
||||
|
||||
if (it == m_luaCommands.end()) return 1;
|
||||
@@ -76,7 +74,9 @@ void PluginsManager::registerTypes() {
|
||||
"getInventory", &LuaPlayer::getInventory,
|
||||
"addItem", &LuaPlayer::addItem,
|
||||
"getItem", &LuaPlayer::getItem,
|
||||
"clearInventory", &LuaPlayer::clearInventory
|
||||
"clearInventory", &LuaPlayer::clearInventory,
|
||||
"getHp", &LuaPlayer::getHp,
|
||||
"setHp", &LuaPlayer::setHp
|
||||
);
|
||||
|
||||
m_lua["Server"] = &m_srv;
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
//package net.minecraft.world.item;
|
||||
|
||||
#include <string>
|
||||
#include <plugins/PluginsManager.hpp>
|
||||
#include <plugins/LuaPlayer.hpp>
|
||||
|
||||
#include "Item.h"
|
||||
#include "ItemInstance.h"
|
||||
@@ -61,7 +63,7 @@ public:
|
||||
if (level->setTileAndData(x, y, z, tileId, data)) {
|
||||
Tile::tiles[tileId]->setPlacedBy(level, x, y, z, player);
|
||||
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, tile->soundType->getStepSound(), (tile->soundType->getVolume() + 1) / 2, tile->soundType->getPitch() * 0.8f);
|
||||
printf("%f %f %f \n", player->x, player->y, player->z);
|
||||
PluginsManager::get().emit("PlayerPlaceBlock", LuaPlayer(player->owner), x, y, z, face, tileId, instance->getAuxValue());
|
||||
/*
|
||||
PlaceBlockPacket packet(player->entityId, x, y, z, face, tileId, instance->getAuxValue());
|
||||
//LOGI("Place block at @ %d, %d, %d\n", x, y, z);
|
||||
|
||||
@@ -313,6 +313,7 @@ public:
|
||||
|
||||
std::set<std::string> ops;
|
||||
std::set<std::string> bannedPpl;
|
||||
std::set<std::string> bannedIps;
|
||||
protected:
|
||||
bool isFindingSpawn;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user