From a08ba2bb93d7683b619a0e6b0bf00e3afd614ae4 Mon Sep 17 00:00:00 2001
From: cx384 <cx384@proton.me>
Date: Mon, 22 Jan 2024 18:27:54 +0100
Subject: [PATCH] Get rid of deprecated metadata (#628)

---
 technic/legacy.lua |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/technic/legacy.lua b/technic/legacy.lua
index 6a080e1..14453eb 100644
--- a/technic/legacy.lua
+++ b/technic/legacy.lua
@@ -39,3 +39,40 @@
 	minetest.register_alias("technic:lv_cable"..i, "technic:lv_cable")
 end
 
+-- Item meta
+
+-- Meta keys that have changed
+technic.legacy_meta_keys = {
+	["charge"] = "technic:charge",
+}
+
+-- Converts legacy itemstack metadata string to itemstack meta and returns the ItemStackMetaRef
+function technic.get_stack_meta(itemstack)
+	local meta = itemstack:get_meta()
+	local legacy_string = meta:get("") -- Get deprecated metadata
+	if legacy_string then
+		local legacy_table = minetest.deserialize(legacy_string)
+		if legacy_table then
+			local table = meta:to_table()
+			for k, v in pairs(legacy_table) do
+				table.fields[technic.legacy_meta_keys[k] or k] = v
+			end
+			meta:from_table(table)
+		end
+		meta:set_string("", "") -- Remove deprecated metadata
+	end
+	return meta
+end
+
+-- Same as technic.get_stack_meta for cans.
+-- (Cans didn't store a serialized table in the legacy metadata string, but just a number.)
+function technic.get_stack_meta_cans(itemstack)
+	local meta = itemstack:get_meta()
+	local legacy_string = meta:get("") -- Get deprecated metadata
+	if legacy_string then
+		meta:set_string("can_level", legacy_string)
+		meta:set_string("", "") -- Remove deprecated metadata
+		return meta
+	end
+	return meta
+end

--
Gitblit v1.8.0