From 97c655c16d6f7dfefc59ee703ea53d77d09a1f1e Mon Sep 17 00:00:00 2001 From: OgelGames Date: Wed, 2 Aug 2023 16:13:51 +1000 Subject: [PATCH] up to 256 colors of glider with only one recipe --- .luacheckrc | 1 + crafts.lua | 101 ++++++++++++++++++++++++++++++++++ init.lua | 31 +++-------- mod.conf | 4 +- textures/hangglider_color.png | Bin 0 -> 95 bytes 5 files changed, 111 insertions(+), 26 deletions(-) create mode 100644 crafts.lua create mode 100644 textures/hangglider_color.png diff --git a/.luacheckrc b/.luacheckrc index e429272..1502aa3 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -7,4 +7,5 @@ read_globals = { "vector", "ItemStack", "player_monoids", + "unifieddyes", } diff --git a/crafts.lua b/crafts.lua new file mode 100644 index 0000000..656d419 --- /dev/null +++ b/crafts.lua @@ -0,0 +1,101 @@ + +local get_dye_color +if minetest.get_modpath("unifieddyes") then + get_dye_color = unifieddyes.get_color_from_dye_name +else + local colors = { + white = "ffffff", + grey = "888888", + dark_grey = "444444", + black = "111111", + violet = "8000ff", + blue = "0000ff", + cyan = "00ffff", + dark_green = "005900", + green = "00ff00", + yellow = "ffff00", + brown = "592c00", + orange = "ff7f00", + red = "ff0000", + magenta = "ff00ff", + pink = "ff7f9f", + } + get_dye_color = function(name) + local color = string.match(name, "^dye:(%w+)$") + if color then + return colors[color] + end + end +end + +local function get_color_name(name) + name = string.gsub(name, "^dye:", "") + name = string.gsub(name, "_", " ") + name = string.gsub(name, "(%l)(%w*)", function(a, b) return string.upper(a)..b end) + return name +end + +-- This recipe is just a placeholder +do + local item = ItemStack("hangglider:hangglider") + item:get_meta():set_string("description", "Colored Glider") + minetest.register_craft({ + output = item:to_string(), + recipe = {"hangglider:hangglider", "group:dye"}, + type = "shapeless", + }) +end + +-- This is what actually creates the colored hangglider +minetest.register_on_craft(function(crafted_item, _, old_craft_grid) + if crafted_item:get_name() ~= "hangglider:hangglider" then + return + end + local wear, color, color_name + for _,stack in ipairs(old_craft_grid) do + local name = stack:get_name() + if name == "hangglider:hangglider" then + wear = stack:get_wear() + elseif minetest.get_item_group(name, "dye") ~= 0 then + color = get_dye_color(name) + color_name = get_color_name(name) + end + end + if wear and color and color_name then + if color == "ffffff" then + return ItemStack({name = "hangglider:hangglider", wear = wear}) + end + local meta = crafted_item:get_meta() + meta:set_string("description", color_name.." Glider") + meta:set_string("inventory_image", "hangglider_item.png^(hangglider_color.png^[multiply:#"..color..")") + meta:set_string("hangglider_color", color) + crafted_item:set_wear(wear) + return crafted_item + end +end) + +-- Repairing +minetest.register_craft({ + output = "hangglider:hangglider", + recipe = { + {"default:paper", "default:paper", "default:paper"}, + {"default:paper", "hangglider:hangglider", "default:paper"}, + {"default:paper", "default:paper", "default:paper"}, + }, +}) +minetest.register_craft({ + output = "hangglider:hangglider", + recipe = { + {"hangglider:hangglider", "wool:white"}, + }, +}) + +-- Main craft +minetest.register_craft({ + output = "hangglider:hangglider", + recipe = { + {"wool:white", "wool:white", "wool:white"}, + {"default:stick", "", "default:stick"}, + {"", "default:stick", ""}, + } +}) diff --git a/init.lua b/init.lua index 18e0817..3953e5d 100644 --- a/init.lua +++ b/init.lua @@ -181,6 +181,12 @@ local function hangglider_use(stack, player) local entity = minetest.add_entity(pos, "hangglider:glider") if entity then entity:set_attach(player, "", vector.new(0, 10, 0), vector.new(0, 0, 0)) + local color = stack:get_meta():get("hangglider_color") + if color then + entity:set_properties({ + textures = {"wool_white.png^[multiply:#"..color, "default_wood.png"} + }) + end set_hud_overlay(player, name, "hangglider_overlay.png") set_physics_overrides(player, {jump = 0, gravity = 0.25}) hanggliding_players[name] = true @@ -236,27 +242,4 @@ minetest.register_tool("hangglider:hangglider", { on_use = hangglider_use, }) -minetest.register_craft({ - output = "hangglider:hangglider", - recipe = { - {"default:paper", "default:paper", "default:paper"}, - {"default:paper", "hangglider:hangglider", "default:paper"}, - {"default:paper", "default:paper", "default:paper"}, - }, -}) - -minetest.register_craft({ - output = "hangglider:hangglider", - recipe = { - {"hangglider:hangglider", "wool:white"}, - }, -}) - -minetest.register_craft({ - output = "hangglider:hangglider", - recipe = { - {"wool:white", "wool:white", "wool:white"}, - {"default:stick", "", "default:stick"}, - {"", "default:stick", ""}, - } -}) +dofile(minetest.get_modpath("hangglider").."/crafts.lua") diff --git a/mod.conf b/mod.conf index 36218d7..30f6afb 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,4 @@ name = hangglider -depends = default, wool -optional_depends = areas, player_monoids +depends = default, wool, dye +optional_depends = areas, player_monoids, unifieddyes min_minetest_version = 5.0 diff --git a/textures/hangglider_color.png b/textures/hangglider_color.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2a8c727331d0c67c1fc8603e43b0627b6a9fdf GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`YMw5RAr-fh6C_F=oSLfr|6^j8 s$z#(N4e5fF%3;PkU%4ODSYXS*uuC|qK7T`+A5aH_r>mdKI;Vst0F>Drp8x;= literal 0 HcmV?d00001