From caa82c40c9290ef5942159e28518da2825ccae79 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Tue, 10 May 2022 15:55:56 +0200 Subject: [PATCH] Colored Leather Armor --- mods/ITEMS/mcl_armor/init.lua | 1 + mods/ITEMS/mcl_armor/leather.lua | 110 ++++++++++++++++++++++++++++++ mods/ITEMS/mcl_armor/mod.conf | 2 +- mods/ITEMS/mcl_armor/register.lua | 19 ------ 4 files changed, 112 insertions(+), 20 deletions(-) create mode 100644 mods/ITEMS/mcl_armor/leather.lua diff --git a/mods/ITEMS/mcl_armor/init.lua b/mods/ITEMS/mcl_armor/init.lua index 402d9eef3..8f592d3ac 100644 --- a/mods/ITEMS/mcl_armor/init.lua +++ b/mods/ITEMS/mcl_armor/init.lua @@ -71,5 +71,6 @@ dofile(modpath .. "/api.lua") dofile(modpath .. "/player.lua") dofile(modpath .. "/damage.lua") dofile(modpath .. "/register.lua") +dofile(modpath .. "/leather.lua") dofile(modpath .. "/alias.lua") dofile(modpath .. "/trims.lua") diff --git a/mods/ITEMS/mcl_armor/leather.lua b/mods/ITEMS/mcl_armor/leather.lua new file mode 100644 index 000000000..58ea5cc4b --- /dev/null +++ b/mods/ITEMS/mcl_armor/leather.lua @@ -0,0 +1,110 @@ +local C = minetest.colorize + +local colors = { + -- { ID, decription, wool, dye } + { "red", "Red", "mcl_dye:red", "#951d1d" }, + { "blue", "Blue", "mcl_dye:blue", "#2a2c94" }, + { "cyan", "Cyan", "mcl_dye:cyan", "#0d7d8e" }, + { "grey", "Grey", "mcl_dye:dark_grey", "#363a3f" }, + { "silver", "Light Grey", "mcl_dye:grey", "#818177" }, + { "black", "Black", "mcl_dye:black", "#020307" }, + { "yellow", "Yellow", "mcl_dye:yellow", "#f2b410" }, + { "green", "Green", "mcl_dye:dark_green", "#495d20" }, + { "magenta", "Magenta", "mcl_dye:magenta", "#ae2ea4" }, + { "orange", "Orange", "mcl_dye:orange", "#e36501" }, + { "purple", "Purple", "mcl_dye:violet", "#681ba1" }, + { "brown", "Brown", "mcl_dye:brown", "#623b1a" }, + { "pink", "Pink", "mcl_dye:pink", "#d66691" }, + { "lime", "Lime", "mcl_dye:green", "#60ad13" }, + { "light_blue", "Light Blue", "mcl_dye:lightblue", "#1f8eca" }, + { "white", "White", "mcl_dye:white", "#d1d7d8" }, +} + +--local function get_color_rgb(color) +-- return tonumber(str.sub(first, 2, 3)), tonumber(str.sub(first, 4, 5)), tonumber(str.sub(first, 6, 7)) +--end + + +local function calculate_color(first, last) + --local first_r = tonumber(str.sub(first, 2, 3)) + --local first_g = tonumber(str.sub(first, 4, 5)) + return tonumber(first)*tonumber(last) +end + +local function get_texture_function(texture) + local function get_texture(_, itemstack) + local out + local color = itemstack:get_meta():get_string("color") + if color == "" or color == nil then + out = texture + else + out = texture.."^[multiply:"..color + end + + if mcl_enchanting.is_enchanted(itemstack:get_name()) then + minetest.chat_send_all(out..mcl_enchanting.overlay) + return out..mcl_enchanting.overlay + else + minetest.chat_send_all(out) + return out + end + end + return get_texture +end + +mcl_armor.register_set({ + name = "leather", + description = "Leather", + descriptions = { + head = "Cap", + torso = "Tunic", + legs = "Pants", + }, + durability = 80, + enchantability = 15, + points = { + head = 1, + torso = 3, + legs = 2, + feet = 1, + }, + textures = { + head = get_texture_function("mcl_armor_helmet_leather.png"), + torso = get_texture_function("mcl_armor_chestplate_leather.png"), + legs = get_texture_function("mcl_armor_leggings_leather.png"), + feet = get_texture_function("mcl_armor_boots_leather.png"), + }, + craft_material = "mcl_mobitems:leather", +}) + +tt.register_priority_snippet(function(_, _, itemstack) + if not itemstack or not itemstack:get_definition().groups.armor_leather == 1 then + return + end + local color = itemstack:get_meta():get_string("color") + if color and color ~= "" then + --TODO: replace by just "Dyed" + local text = C(mcl_colors.GRAY, "Dyed: "..color) + return text, false + end +end) + + +-- This command is only temporary + +minetest.register_chatcommand("color_leather", { + params = "", + description = "Colorize a leather armor", + func = function(name, param) + local player = minetest.get_player_by_name(name) + if player then + local item = player:get_wielded_item() + item:get_meta():set_string("color", param) + tt.reload_itemstack_description(item) + player:set_wielded_item(item) + return true, "Done." + else + return false, "Player isn't online" + end + end, +}) \ No newline at end of file diff --git a/mods/ITEMS/mcl_armor/mod.conf b/mods/ITEMS/mcl_armor/mod.conf index cfbaa831f..48e00a30c 100644 --- a/mods/ITEMS/mcl_armor/mod.conf +++ b/mods/ITEMS/mcl_armor/mod.conf @@ -1,5 +1,5 @@ name = mcl_armor author = stu description = Adds craftable armor that is visible to other players. -depends = mcl_core, mcl_player, mcl_enchanting, mcl_damage, mcl_grindstone +depends = mcl_core, mcl_player, mcl_enchanting, mcl_damage, mcl_colors, mcl_grindstone optional_depends = mcl_fire, ethereal, bakedclay diff --git a/mods/ITEMS/mcl_armor/register.lua b/mods/ITEMS/mcl_armor/register.lua index f4f1fb4d0..4c4330f3e 100644 --- a/mods/ITEMS/mcl_armor/register.lua +++ b/mods/ITEMS/mcl_armor/register.lua @@ -1,24 +1,5 @@ local S = minetest.get_translator(minetest.get_current_modname()) -mcl_armor.register_set({ - name = "leather", - description = "Leather", - descriptions = { - head = "Cap", - torso = "Tunic", - legs = "Pants", - }, - durability = 80, - enchantability = 15, - points = { - head = 1, - torso = 3, - legs = 2, - feet = 1, - }, - craft_material = "mcl_mobitems:leather", -}) - mcl_armor.register_set({ name = "gold", description = "Golden",