From 84d15a2405e30f6010134ab2264ee00b29d67647 Mon Sep 17 00:00:00 2001 From: James Stevenson Date: Mon, 31 Oct 2016 03:11:38 -0400 Subject: [PATCH] Initial commit. --- LICENSE | 165 +++++++++++++++++++++++ depends.txt | 1 + init.lua | 175 +++++++++++++++++++++++++ textures/character_dusty.png | Bin 0 -> 3632 bytes textures/character_sam.png | Bin 0 -> 2754 bytes textures/kalite_skin_dusty.png | Bin 0 -> 1293 bytes textures/kalite_skin_sam.png | Bin 0 -> 1268 bytes textures/kalite_wardrobe_front.png | Bin 0 -> 422 bytes textures/kalite_wardrobe_sides.png | Bin 0 -> 271 bytes textures/kalite_wardrobe_topbottom.png | Bin 0 -> 160 bytes 10 files changed, 341 insertions(+) create mode 100644 LICENSE create mode 100644 depends.txt create mode 100644 init.lua create mode 100644 textures/character_dusty.png create mode 100644 textures/character_sam.png create mode 100644 textures/kalite_skin_dusty.png create mode 100644 textures/kalite_skin_sam.png create mode 100644 textures/kalite_wardrobe_front.png create mode 100644 textures/kalite_wardrobe_sides.png create mode 100644 textures/kalite_wardrobe_topbottom.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +default diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..3ca6eb1 --- /dev/null +++ b/init.lua @@ -0,0 +1,175 @@ +dresser = {} + +local skin_db = {} + +local load = function () + local fh, err = io.open(minetest.get_worldpath() .. "/skins.txt", "r") + if err then + skin_db = {{"dusty", "Dusty"}, {"sam", "Sam"}} + minetest.log("action", "No skins.txt found! Loading default skins.") + return + end + while true do + local line = fh:read() + if line == nil then + break + end + local paramlist = string.split(line, ":") + local w = { + paramlist[1], + paramlist[2] + } + table.insert(skin_db, w) + end + fh:close() + minetest.log("action", table.getn(skin_db) .. " skins loaded.") +end + +load() -- Why put this in a function? + + +-- Functions +local function get_skin(player) + local skin = player:get_properties().textures[1] + return skin +end + +local function show_formspec(name, skin, spos) + minetest.show_formspec(name, "skinform", + "size[8,8.5]" .. + default.gui_bg_img .. + default.gui_slots .. + "list[detached:skin_" .. name .. ";main;0,1.5;1,1]" .. + "image[0.75,0.1;4,4;kalite_skin_" .. skin .. ".png]" .. + "list[nodemeta:" .. spos .. ";main;4,0.5;4,3]" .. + "list[current_player;main;0,4.25;8,1;]" .. + "list[current_player;main;0,5.5;8,3;8]" .. + default.get_hotbar_bg(0, 4.25) + ) +end + +-- Nodes +minetest.register_node("dresser:dresser", { + description = "Wardrobe", + paramtype2 = "facedir", + tiles = { + "kalite_wardrobe_topbottom.png", + "kalite_wardrobe_topbottom.png", + "kalite_wardrobe_sides.png", + "kalite_wardrobe_sides.png", + "kalite_wardrobe_sides.png", + "kalite_wardrobe_front.png", + }, + sounds = default.node_sound_wood_defaults(), + groups = {choppy = 2, flammable = 5}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Wardrobe") + local inv = meta:get_inventory() + inv:set_size("main", 4 * 3) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local name = clicker:get_player_name() + local spos = pos.x .. "," .. pos.y .. "," .. pos.z + dresser[name] = spos + local skin + local current_skin = get_skin(clicker) + + for _, v in pairs(skin_db) do + if current_skin == "character_" .. v[1] .. ".png" then + skin = v[1] + elseif not skin then + skin = "dusty" + end + end + + show_formspec(name, skin, spos) + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.get_item_group(stack:get_name(), "skin") == 1 then + return 1 + else + return 0 + end + end +}) + +minetest.register_craft({ + output = "dresser:dresser", + recipe = { + {"group:wood", "group:stick", "group:wood"}, + {"group:wood", "group:wool", "group:wood"}, + {"group:wood", "group:wool", "group:wood"}, + } +}) + +-- Craftitems +for _, v in pairs(skin_db) do + minetest.register_craftitem("dresser:skin_" .. v[1], { + description = v[2], + inventory_image = "kalite_skin_" .. v[1] .. ".png", + groups = {skin = 1}, + stack_max = 1 + }) +end + +-- Callbacks? +minetest.register_on_newplayer(function(player) + local name = player:get_player_name() + minetest.after(0.1, function () + local inv = minetest.get_inventory{type = "player", name = name} + inv:set_stack("skin", 1, {name = "dresser:skin_dusty"}) + + local detached = minetest.get_inventory{type = "detached", name = "skin_" .. name} + detached:set_stack("main", 1, {name = "dresser:skin_dusty"}) + end) +end) + + +minetest.register_on_joinplayer(function(player, _) + local skin_inv = player:get_inventory() + skin_inv:set_size("skin", 1) + + -- FIXME Old players missing the skin inventory do not receive their skin + + for _, v in pairs(skin_db) do + if skin_inv:contains_item("skin", {name = "dresser:skin_" .. v[1]}) then + player:set_properties({textures = {"character_" .. v[1] .. ".png"}}) + end + end + + local skin = minetest.create_detached_inventory("skin_" .. player:get_player_name(), { + allow_put = function(inv, listname, index, stack, player) + if minetest.get_item_group(stack:get_name(), "skin") == 1 then + return 1 + else + return 0 + end + end, + allow_take = function(inv, listname, index, stack, player) + return 0 + end, + on_put = function(inv, listname, index, stack, player) + local name = player:get_player_name() + + for _, v in pairs(skin_db) do + if stack:get_name() == "dresser:skin_" .. v[1] then + player:set_properties({textures = {"character_" .. v[1] .. ".png"}}) + skin_inv:set_stack("skin", 1, {name = "dresser:skin_" .. v[1]}) + return show_formspec(name, v[1], dresser[player:get_player_name()]) + end + end + end + }) + skin:set_size("main", 1) + + for _, v in pairs(skin_db) do + if skin_inv:contains_item("skin", {name = "dresser:skin_" .. v[1]}) then + skin:set_stack("main", 1, {name = "dresser:skin_" .. v[1]}) + end + end +end) + +minetest.register_on_leaveplayer(function(player) + dresser[player:get_player_name()] = nil +end) diff --git a/textures/character_dusty.png b/textures/character_dusty.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb2ce74805610902caee4ead02188555dc853bf GIT binary patch literal 3632 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 DM*H3p literal 0 HcmV?d00001 diff --git a/textures/kalite_skin_sam.png b/textures/kalite_skin_sam.png new file mode 100644 index 0000000000000000000000000000000000000000..b072a927a5636840a43cd8e9d0fd7f510fcafe74 GIT binary patch literal 1268 zcmV!~4;DZU7dj6YI|ms-5EnrZ7(6K!2?-iPCl~<{ z7(x;lLlGH0C>aAS7yuL*Ln{~zD;W(H8bmD`2NoMeGa3Ue8xI#8Mlc);HXHyk9SkuZ z4l5rQG9M2!9}qSm0xBXIG$0W*ArdJeIXEH(CnXv-A`>hq86PnNHz*ttISM-}H#{vM z8YsFJJOw*0B_TQhJTE6cFCs!NB0eoTC^-fcLkuTA3qv#}8AS&xLI)g33N1n#B1aD& zN(~rI4o^BMHA5avJ1z`U0US>VJvFosRRbPS2_I1k8dL)rRSh9i3=3NTB2*0-VvB3cS7R~aK)3pG?8NI4HdGj|t5awRl)7&Unr zZEFu?YCbW39cpSoIei>8fEHwLJU4ig&MxZK;cLs*H1_jfAU>bf%7mtd4c4k9)0;cBqkd zs*r-Nkaw?@>^K?EHX47Gu}Sfr3z z&|+to3@w5P!ASzap>-&9Gn=afBI1&eTclAsINa|$CJ)~ooX>ZZkm1v5J|p;`l6)?o z&+$nRq_XR^AY@bUf{VOdc){8g5Gw2}7&!X{2L>x^yIgLq6$m!gp$-0TttHB3)3(i0 zuhFbwK)Ft1<={^XcnI(llw(9)1}Zpz4y?7%R%S zQGcAOI3QP=L)|d+kz9Pn0c5RaEnQXhr>bco9I!Xvqq$+sCl6~I3y?b#HC5H>RT}}| zcc2-DHh6;o`Vl|9DlaY;xVH0g62?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4kCexg0%HA zt8!)Muz!5VDdKN@kuIT|HrDB#(*PrT2gMGCq`)Et(Wt1PoIK MPgg&ebxsLQ030=^k^lez literal 0 HcmV?d00001 diff --git a/textures/kalite_wardrobe_sides.png b/textures/kalite_wardrobe_sides.png new file mode 100644 index 0000000000000000000000000000000000000000..b438a92ae480b6ec8dda2757173f4488ee25c9bb GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR42?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR42T^vI! xdXw*5lKnfsk?DX-=d(a&H(m+T1OrJ1hBNU@JFhG}s|Hla;OXk;vd$@?2>`2LEB62Z literal 0 HcmV?d00001