summaryrefslogtreecommitdiffstats
path: root/src/Protocol
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2019-12-02 16:45:55 +0100
committerMattes D <github@xoft.cz>2019-12-28 22:43:35 +0100
commit7453a9fbe120f345625a24bbea18c35cd3c26a6a (patch)
treee97cc9c90fedcad6e44f4011f0fdc4d2f6a284bf /src/Protocol
parentBlockTypePalette: Refactored for usage in both directions. (diff)
downloadcuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.tar
cuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.tar.gz
cuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.tar.bz2
cuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.tar.lz
cuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.tar.xz
cuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.tar.zst
cuberite-7453a9fbe120f345625a24bbea18c35cd3c26a6a.zip
Diffstat (limited to 'src/Protocol')
-rw-r--r--src/Protocol/CMakeLists.txt2
-rw-r--r--src/Protocol/ProtocolBlockTypePalette.cpp144
-rw-r--r--src/Protocol/ProtocolBlockTypePalette.h40
3 files changed, 0 insertions, 186 deletions
diff --git a/src/Protocol/CMakeLists.txt b/src/Protocol/CMakeLists.txt
index d2170fb95..3e8d65b94 100644
--- a/src/Protocol/CMakeLists.txt
+++ b/src/Protocol/CMakeLists.txt
@@ -13,7 +13,6 @@ SET (SRCS
Protocol_1_12.cpp
Protocol_1_13.cpp
ProtocolRecognizer.cpp
- ProtocolBlockTypePalette.cpp
)
SET (HDRS
@@ -30,7 +29,6 @@ SET (HDRS
Protocol_1_12.h
Protocol_1_13.h
ProtocolRecognizer.h
- ProtocolBlockTypePalette.h
)
if (NOT MSVC)
diff --git a/src/Protocol/ProtocolBlockTypePalette.cpp b/src/Protocol/ProtocolBlockTypePalette.cpp
deleted file mode 100644
index 86d05623b..000000000
--- a/src/Protocol/ProtocolBlockTypePalette.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-#include "Globals.h"
-#include "ProtocolBlockTypePalette.h"
-#include <cstdint>
-#include <sstream>
-#include "json/value.h"
-#include "json/reader.h"
-
-
-
-
-
-ProtocolBlockTypePalette::ProtocolBlockTypePalette()
-{
- // empty
-}
-
-
-
-
-
-bool ProtocolBlockTypePalette::loadFromString(const AString & aMapping)
-{
- std::stringstream stream;
- stream << aMapping;
-
- return loadFromStream(stream);
-}
-
-
-
-
-
-bool ProtocolBlockTypePalette::loadFromStream(std::istream & aInputStream)
-{
- Json::Value root;
-
- try
- {
- aInputStream >> root;
- }
- #if defined _DEBUG
- catch (const std::exception & e)
- {
- LOGD(e.what());
- return false;
- }
- #else
- catch (const std::exception &)
- {
- return false;
- }
- #endif
-
- if (!root.isObject() ||
- !root.isMember("Metadata") ||
- !root["Metadata"].isMember("ProtocolBlockTypePaletteVersion") ||
- !root.isMember("Palette") ||
- !root["Palette"].isArray())
- {
- LOGD("Incorrect palette format.");
- return false;
- }
-
- if (root["Metadata"]["ProtocolBlockTypePaletteVersion"].asUInt() != 1)
- {
- LOGD("Palette format version not supported.");
- return false;
- }
-
- auto len = root["Palette"].size();
- for (decltype(len) i = 0; i < len; ++i)
- {
- const auto & record = root["Palette"][i];
- if (!record.isObject())
- {
- LOGD("Record #%u must be a JSON object.", i);
- return false;
- }
-
- auto blocktype = record["name"].asString();
- auto id = std::stoul(record["id"].asString());
- std::map<AString, AString> state;
-
- if (id >= NOT_FOUND)
- {
- LOGD("`id` must be less than ProtocolBlockTypePalette::NOT_FOUND, but is %lu", id);
- return false;
- }
-
- if (record.isMember("props"))
- {
- const auto & props = record["props"];
- if (!props.isObject())
- {
- LOGD("`props` key must be a JSON object.");
- return false;
- }
- for (const auto & key: props.getMemberNames())
- {
- state[key] = props[key].asString();
- }
- }
-
- // Block type map entry already exists?
- if (mIndex.count(blocktype) == 0)
- {
- mIndex.insert({blocktype, std::map<BlockState, UInt32>()});
- }
-
- const auto & result = mIndex[blocktype].insert({BlockState(state), id});
- if (result.second == false)
- {
- LOGINFO("Duplicate block state encountered (Current ID: %lu, other: %lu)", result.first->second, id);
- }
- }
- return true;
-}
-
-
-
-
-
-UInt32 ProtocolBlockTypePalette::index(const AString & aBlockTypeName, const BlockState & aBlockState) const
-{
- auto a = mIndex.find(aBlockTypeName);
- if (a != mIndex.end())
- {
- auto b = a->second.find(aBlockState);
- if (b != a->second.end())
- {
- return b->second;
- }
- }
- return NOT_FOUND;
-}
-
-
-
-
-
-void ProtocolBlockTypePalette::clear()
-{
- return mIndex.clear();
-}
diff --git a/src/Protocol/ProtocolBlockTypePalette.h b/src/Protocol/ProtocolBlockTypePalette.h
deleted file mode 100644
index fb156cfd5..000000000
--- a/src/Protocol/ProtocolBlockTypePalette.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#pragma once
-#include <unordered_map>
-#include "../BlockState.h"
-
-
-/** Parses and holds a collection of block types and their possible states
-together with their corresponding Id within the Minecraft network protocol. */
-class ProtocolBlockTypePalette
-{
-public:
- static const UInt32 NOT_FOUND = UINT32_MAX;
-
- /** Create a new empty instance. */
- ProtocolBlockTypePalette();
-
- /** Loads the palette from a string.
- See loadFromStream() for further details. */
- bool loadFromString(const AString & aMapping);
-
- /** Loads the palette from an input stream.
- Returns `true` on success, `false` otherwise. Sucessive calls to this method
- will _add_ data to the palette. If duplicate keys are encountered, they will
- be ignored and an info message logged. */
- bool loadFromStream(std::istream & aInputStream);
-
- /** Returns the defined index corresponding of the given aBlockTypeName and
- aBlockState.
- Returns ProtocolBlockTypePalette::NOT_FOUND if the tuple is not found. */
- UInt32 index(const AString & aBlockTypeName, const BlockState & aBlockState) const;
-
- /** Clears the palette. */
- void clear();
-
-
-protected:
-
- /** The palette index. Each item in the map represents a single block state
- palette entry. The value is the block state ID. */
- std::unordered_map<AString, std::map<BlockState, UInt32>> mIndex;
-};