mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-24 06:03:37 +00:00
155 lines
6 KiB
C++
155 lines
6 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "Packet.h"
|
|
#include "minecraft/network/packet/Packet.h"
|
|
|
|
class ChatPacket : public Packet,
|
|
public std::enable_shared_from_this<ChatPacket> {
|
|
// longest allowed std::string is "<" + name + "> " + message
|
|
private:
|
|
static const unsigned int MAX_LENGTH;
|
|
|
|
public:
|
|
// 4J - We want to be able to localise the messages sent. The enum also
|
|
// allows for the posibility that there may be different versions playing
|
|
// the game, so the enum should map to a std::string id which may be
|
|
// different on different versions
|
|
enum EChatPacketMessage {
|
|
e_ChatCustom = 0, // No localised std::string, only the text passed in
|
|
e_ChatBedOccupied,
|
|
e_ChatBedNoSleep,
|
|
e_ChatBedNotValid,
|
|
e_ChatBedNotSafe,
|
|
e_ChatBedPlayerSleep,
|
|
e_ChatBedMeSleep,
|
|
e_ChatPlayerLeftGame,
|
|
e_ChatPlayerJoinedGame,
|
|
e_ChatPlayerKickedFromGame,
|
|
e_ChatCannotPlaceLava,
|
|
|
|
e_ChatDeathInFire,
|
|
e_ChatDeathOnFire,
|
|
e_ChatDeathLava,
|
|
e_ChatDeathInWall,
|
|
e_ChatDeathDrown,
|
|
e_ChatDeathStarve,
|
|
e_ChatDeathCactus,
|
|
e_ChatDeathFall,
|
|
e_ChatDeathOutOfWorld,
|
|
e_ChatDeathGeneric,
|
|
e_ChatDeathExplosion,
|
|
e_ChatDeathMagic,
|
|
e_ChatDeathMob,
|
|
e_ChatDeathPlayer,
|
|
e_ChatDeathArrow,
|
|
e_ChatDeathFireball,
|
|
e_ChatDeathThrown,
|
|
e_ChatDeathIndirectMagic,
|
|
e_ChatDeathDragonBreath,
|
|
e_ChatDeathAnvil,
|
|
e_ChatDeathFallingBlock,
|
|
e_ChatDeathThorns,
|
|
|
|
e_ChatDeathFellAccidentLadder,
|
|
e_ChatDeathFellAccidentVines,
|
|
e_ChatDeathFellAccidentWater,
|
|
e_ChatDeathFellAccidentGeneric,
|
|
e_ChatDeathFellKiller,
|
|
e_ChatDeathFellAssist,
|
|
e_ChatDeathFellAssistItem,
|
|
e_ChatDeathFellFinish,
|
|
e_ChatDeathFellFinishItem,
|
|
e_ChatDeathInFirePlayer,
|
|
e_ChatDeathOnFirePlayer,
|
|
e_ChatDeathLavaPlayer,
|
|
e_ChatDeathDrownPlayer,
|
|
e_ChatDeathCactusPlayer,
|
|
e_ChatDeathExplosionPlayer,
|
|
e_ChatDeathWither,
|
|
e_ChatDeathPlayerItem,
|
|
e_ChatDeathArrowItem,
|
|
e_ChatDeathFireballItem,
|
|
e_ChatDeathThrownItem,
|
|
e_ChatDeathIndirectMagicItem,
|
|
|
|
e_ChatPlayerEnteredEnd,
|
|
e_ChatPlayerLeftEnd,
|
|
|
|
e_ChatPlayerMaxPigsSheepCows, // tell the players they can't use the
|
|
// spawn egg
|
|
e_ChatPlayerMaxChickens, // tell the players they can't use the spawn
|
|
// egg
|
|
e_ChatPlayerMaxSquid, // tell the players they can't use the spawn egg
|
|
e_ChatPlayerMaxMooshrooms, // tell the players they can't use the spawn
|
|
// egg
|
|
e_ChatPlayerMaxWolves, // tell the players they can't use the spawn egg
|
|
e_ChatPlayerMaxAnimals, // tell the players they can't use the spawn
|
|
// egg
|
|
e_ChatPlayerMaxEnemies, // tell the players they can't use the spawn
|
|
// egg
|
|
e_ChatPlayerMaxVillagers, // tell the players they can't use the spawn
|
|
// egg
|
|
e_ChatPlayerMaxHangingEntities, // tell the players they hit the
|
|
// picture/itemframe limit
|
|
e_ChatPlayerCantSpawnInPeaceful, // Tell the player they can't spawn
|
|
// enemies in peaceful mode
|
|
e_ChatPlayerMaxBredAnimals, // Tell the player they can't put this
|
|
// animal in love mode because no breeding
|
|
// can be done
|
|
e_ChatPlayerMaxBredPigsSheepCows, // Tell the player they can't put
|
|
// this animal in love mode because
|
|
// no breeding can be done
|
|
e_ChatPlayerMaxBredChickens, // Tell the player they can't put this
|
|
// animal in love mode because no breeding
|
|
// can be done
|
|
e_ChatPlayerMaxBredMooshrooms, // Tell the player they can't put this
|
|
// animal in love mode because no
|
|
// breeding can be done
|
|
e_ChatPlayerMaxBredWolves, // Tell the player they can't put this wolf
|
|
// in love mode because no breeding can be
|
|
// done
|
|
e_ChatPlayerCantShearMooshroom, // Tell the player they can't shear
|
|
// because the limits have been reached
|
|
e_ChatPlayerMaxBoats,
|
|
e_ChatPlayerMaxBats,
|
|
|
|
e_ChatCommandTeleportSuccess,
|
|
e_ChatCommandTeleportMe,
|
|
e_ChatCommandTeleportToMe,
|
|
|
|
};
|
|
|
|
public:
|
|
std::vector<std::string> m_stringArgs;
|
|
std::vector<int> m_intArgs;
|
|
EChatPacketMessage m_messageType;
|
|
|
|
ChatPacket();
|
|
|
|
// 4J: Seperated the one convoluted ctor into three more readable ctors. The
|
|
// last two ctors are only used for death messages and I'd really like to
|
|
// consolodate them and/or the logic that uses them at some point.
|
|
ChatPacket(const std::string& message,
|
|
EChatPacketMessage type = e_ChatCustom, int customData = -1);
|
|
ChatPacket(const std::string& message, EChatPacketMessage type,
|
|
int sourceEntityType, const std::string& sourceName);
|
|
ChatPacket(const std::string& message, EChatPacketMessage type,
|
|
int sourceEntityType, const std::string& sourceName,
|
|
const std::string& itemName);
|
|
|
|
virtual void read(DataInputStream* dis);
|
|
virtual void write(DataOutputStream* dos);
|
|
virtual void handle(PacketListener* listener);
|
|
virtual int getEstimatedSize();
|
|
|
|
public:
|
|
static std::shared_ptr<Packet> create() {
|
|
return std::make_shared<ChatPacket>();
|
|
}
|
|
virtual int getId() { return 3; }
|
|
};
|