Added an UpgradeBlockTypePalette check script.
This commit is contained in:
parent
859f8d2849
commit
3f78ea7745
140
Tools/BlockTypePaletteGenerator/UpgradePaletteCheck.lua
Normal file
140
Tools/BlockTypePaletteGenerator/UpgradePaletteCheck.lua
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
-- UpgradePaletteCheck.lua
|
||||||
|
|
||||||
|
--[[ Implements a check that lists all entries in the UpgradeBlockTypePalette
|
||||||
|
that are not present in the 1.13 protocol palette.
|
||||||
|
|
||||||
|
The palette files are expected to be in folders relative to this script like
|
||||||
|
they are in the git repo:
|
||||||
|
../../Server/Protocol/UpgradeBlockTypePalette.txt
|
||||||
|
../../Server/Protocol/1.13/base.btp.txt
|
||||||
|
--]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Partially loads a BlockTypePalette file
|
||||||
|
-- Parses the specified file into headers (returned as a key-value table) and data (returned as array of strings)
|
||||||
|
-- Returns a table, {headers = {}, data = {}}
|
||||||
|
local function loadPalSplitHeader(aFileName)
|
||||||
|
local f = assert(io.open(aFileName, "r"))
|
||||||
|
local isFileIdentLine = true
|
||||||
|
local isInHeaders = false
|
||||||
|
local headers = {}
|
||||||
|
local data = {}
|
||||||
|
local idx = 1
|
||||||
|
for ln in f:lines() do
|
||||||
|
if (isFileIdentLine) then
|
||||||
|
assert(not(isInHeaders))
|
||||||
|
assert((ln == "BlockTypePalette") or (ln == "UpgradeBlockTypePalette"))
|
||||||
|
isFileIdentLine = false
|
||||||
|
isInHeaders = true
|
||||||
|
elseif (ln == "") then
|
||||||
|
assert(not(isFileIdentLine))
|
||||||
|
assert(isInHeaders) -- data must not contain an empty line
|
||||||
|
isInHeaders = false
|
||||||
|
elseif (isInHeaders) then
|
||||||
|
assert(not(isFileIdentLine))
|
||||||
|
local key, val = ln:match("(.-)\t(.*)")
|
||||||
|
assert(key)
|
||||||
|
assert(val)
|
||||||
|
headers[key] = val
|
||||||
|
else
|
||||||
|
data[idx] = ln
|
||||||
|
idx = idx + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return { headers = headers, data = data}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Normalizes the block description
|
||||||
|
-- aRawDesc is the description read from the palette file, "grass_block\tsnowy\tfalse"
|
||||||
|
-- Returns the normalized description "grass_block:snowy:false", where the block state keys are alpha-sorted
|
||||||
|
local function normalizeDesc(aRawDesc)
|
||||||
|
local blockTypeName, blockStates = aRawDesc:match("(.-)\t(.*)")
|
||||||
|
if not(blockTypeName) then
|
||||||
|
-- There's no TABs in the raw desc, only simple block
|
||||||
|
return aRawDesc
|
||||||
|
end
|
||||||
|
local blockStatesTab = {}
|
||||||
|
local idx = 1
|
||||||
|
blockStates = blockStates .. "\t"
|
||||||
|
for k, v in blockStates:gmatch("(.-)\t(.-)\t") do
|
||||||
|
blockStatesTab[idx] = k .. ":" .. v
|
||||||
|
idx = idx + 1
|
||||||
|
end
|
||||||
|
table.sort(blockStatesTab)
|
||||||
|
return blockTypeName .. ":" .. table.concat(blockStatesTab, ":")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Loads the 1.13 palette
|
||||||
|
--[[
|
||||||
|
Returns the palette loaded as a table:
|
||||||
|
{
|
||||||
|
numberToDesc = {[1] = "minecraft:stone", [8] = "minecraft:grass_block:snowy:false", ...},
|
||||||
|
descToNumber = {["minecraft:stone"] = 1, ...}
|
||||||
|
}
|
||||||
|
--]]
|
||||||
|
local function loadPalette()
|
||||||
|
local pal = loadPalSplitHeader("../../Server/Protocol/1.13/base.btp.txt")
|
||||||
|
local numberToDesc = {}
|
||||||
|
local descToNumber = {}
|
||||||
|
local prefix = pal.headers["CommonPrefix"] or ""
|
||||||
|
for _, ln in ipairs(pal.data) do
|
||||||
|
local number, desc = ln:match("(.-)\t(.*)")
|
||||||
|
desc = normalizeDesc(desc)
|
||||||
|
desc = prefix .. desc
|
||||||
|
number = tonumber(number) or error("Index is not a number: " .. ln)
|
||||||
|
numberToDesc[number] = desc
|
||||||
|
descToNumber[desc] = number
|
||||||
|
end
|
||||||
|
return { numberToDesc = numberToDesc, descToNumber = descToNumber}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
local function runCheck()
|
||||||
|
-- Load the palettes:
|
||||||
|
local pal = loadPalette()
|
||||||
|
local upg = loadPalSplitHeader("../../Server/Protocol/UpgradeBlockTypePalette.txt")
|
||||||
|
|
||||||
|
-- Check the UpgradePalette's BlockDescs against the 1.13 palette:
|
||||||
|
local prefix = upg.headers["CommonPrefix"] or ""
|
||||||
|
local notFound = {}
|
||||||
|
local idx = 1
|
||||||
|
local totalCnt = 0
|
||||||
|
for _, ln in ipairs(upg.data) do
|
||||||
|
local blockType, blockMeta, desc = ln:match("(.-)\t(.-)\t(.*)")
|
||||||
|
local normDesc = normalizeDesc(prefix .. desc)
|
||||||
|
if not(pal.descToNumber[normDesc]) then
|
||||||
|
notFound[idx] = {blockType = blockType, blockMeta = blockMeta, desc = desc}
|
||||||
|
idx = idx + 1
|
||||||
|
end
|
||||||
|
totalCnt = totalCnt + 1
|
||||||
|
end
|
||||||
|
idx = idx - 1
|
||||||
|
|
||||||
|
-- Print the findings:
|
||||||
|
print("Blocks not found: " .. idx .. " out of " .. totalCnt)
|
||||||
|
for _, nf in ipairs(notFound) do
|
||||||
|
print(nf.blockType .. "\t" .. nf.blockMeta .. "\t" .. nf.desc)
|
||||||
|
end
|
||||||
|
print("Blocks not found: " .. idx .. " out of " .. totalCnt)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- MAIN:
|
||||||
|
runCheck()
|
Loading…
Reference in New Issue
Block a user