commit 3275c4089606a12268ddcdacd8d9d6f861e493b3 Author: Leslie Krause Date: Sat Dec 23 22:03:00 2017 -0500 Build 03 - merged colored giftboxes from mt_seasons mod - added aliases for original colored giftboxes diff --git a/config.lua b/config.lua new file mode 100644 index 0000000..daf521d --- /dev/null +++ b/config.lua @@ -0,0 +1,51 @@ +-- giftbox mod configuration file + +giftbox.present_infotext = "Christmas Present" +giftbox.present_greeting = "present_greeting.png" + +giftbox.present_items = { + "default:torch 60", + "default:apple 40", + "farming:bread 20", + "mt_seasons:pumpkin_slice 10", + + "default:junglesapling 5", + "default:pine_sapling 5", + "default:aspen_sapling 5", + "default:acacia_sapling 5", + + "default:pick_diamond", + "default:sword_diamond", + "default:pick_bronze", + "default:sword_bronze", + + "3d_armor:helmet_diamond", + "3d_armor:leggings_diamond", + "3d_armor:chestplate_diamond", + "3d_armor:boots_diamond", + + "default:coalblock 20", + "tnt:tnt 15", + "default:obsidian 10", + "default:snowblock 5", + + "mobs:cursed_stone", + "jt_mods:griefer_soul_block", + "default:meselamp_white 10", + "default:meselamp 10", +} + +giftbox.giftbox_drops = { + -- digging gift box allows for a single drop of items with a given a rarity + { items = { "default:sword_diamond" }, rarity = 50 }, + { items = { "default:sword_bronze" }, rarity = 25 }, + + { items = { "default:pick_diamond" }, rarity = 50 }, + { items = { "default:pick_bronze" }, rarity = 25 }, + + { items = { "default:gold_lump 5" }, rarity = 10 }, + { items = { "default:coal_lump 10" }, rarity = 10 }, + + -- default drop must be placed last and have rarity of 0 to avoid empty drops + { items = { "farming:gingerbread_cookie 5", "farming:candycane 10" }, rarity = 0 }, +} 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..01269ba --- /dev/null +++ b/init.lua @@ -0,0 +1,243 @@ +-------------------------------------------------------- +-- Minetest :: Giftbox Mod v2.0 alpha (giftbox) +-- +-- See README.txt for licensing and other information. +-- Copyright (c) 2016-2017, Leslie Ellen Krause +-- +-- ./games/just_test_tribute/mods/giftbox/init.lua +-------------------------------------------------------- + +giftbox = { } + +dofile( minetest.get_modpath( "giftbox" ) .. "/config.lua" ) + +local box_colors = { "black", "blue", "cyan", "green", "magenta", "red", "white", "yellow" } + -- black = black + grey + -- blue = blue + magenta + -- brown => yellow + -- cyan = cyan + yellow + -- dark_green => green + -- dark_grey => cyan + -- green = green + red + -- grey => white + -- magenta = magenta + cyan + -- orange => red + -- pink => magenta + -- red = red + green + -- violet => blue + -- white = white + grey + -- yellow = yellow + green + +minetest.register_node( "giftbox:giftbox", { + description = "Gift Box", + tiles = { "giftbox_top.png", "giftbox_bottom.png", "giftbox_side.png", + "giftbox_side.png", "giftbox_side.png", "giftbox_side.png" }, + is_ground_content = false, + groups = { choppy = 2, oddly_breakable_by_hand = 2 }, + sounds = default.node_sound_wood_defaults( ), + + after_place_node = function( pos, player ) + local owner = player:get_player_name( ) or "singleplayer" + local meta = minetest.get_meta( pos ) +-- meta:set_string( "owner", owner ) + meta:set_string( "infotext", giftbox.present_infotext .. " (placed by " .. owner .. ")" ) + end, + on_construct = function ( pos ) + local meta = minetest.get_meta( pos ) + meta:get_inventory( ):set_size( "main", 1 ) + meta:set_string( "oldtime", os.time( ) ) + meta:set_string( "newtime", os.time( ) ) + end, + can_dig = function ( pos, player ) + return not minetest.is_protected( pos, player:get_player_name( ) ) and default.is_empty( pos ) + end, + allow_metadata_inventory_take = function( pos, listname, index, stack, player ) + if not default.is_owner( pos, player ) then + return 0 + end + return stack:get_count( ) + end, + allow_metadata_inventory_put = function( pos, listname, index, stack, player ) + return 0 + end, + on_metadata_inventory_take = function( pos, listname, index, stack, player ) + if default.is_empty( pos ) then + minetest.remove_node( pos ) + end + minetest.log( "action", string.format( default.STATUS_CONTAINER_GET, player:get_player_name( ), "giftbox", minetest.pos_to_string( pos ) ) ) + end, + on_open = function( pos, clicker ) + local pname = clicker:get_player_name( ) + local spos = pos.x .. "," .. pos.y .. "," .. pos.z + + if minetest.check_player_privs( pname, { give = true } ) then + local slot, name + local formspec = + "size[8,6]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "label[1,0.8;Select an item to place in the gift box.]" .. + "list[nodemeta:%s;main;6,0.5;1,1;]" + + slot = 0 + for _, name in ipairs( giftbox.present_items ) do + formspec = formspec .. "item_image_button[ " .. ( slot % 8 ) .. "," .. ( math.floor ( slot / 8 ) + 2 ) .. ";1,1;" .. name .. ";add " .. name .. ";]" + slot = slot + 1 + end + return string.format( formspec, spos ) + elseif not minetest.is_protected( pos, pname ) then + local formspec = + "size[10,6.5]" .. + "image[0,0;12,6;" .. giftbox.present_greeting .. "]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "list[nodemeta:%s;main;7,4;1,1;]" .. + "list[current_player;main;1,5.5;8,1;]" .. + default.get_hotbar_bg(1,5.5) + return string.format( formspec, spos ) + end + end, + on_close = function( pos, player, fields ) + local fname, item + + fname = next( fields, nil ) -- use next since we only care about the name of a single button + if minetest.check_player_privs( player:get_player_name( ), { give = true } ) and fname then + item = string.match( fname, "add (.+)" ) + if item then + minetest.get_meta( pos ):get_inventory( ):set_stack( "main", 1, item ) + minetest.log( "action", string.format( default.STATUS_CONTAINER_PUT, player:get_player_name( ), "present", minetest.pos_to_string( pos ) ) ) + end + end + end, +}) + +for i, color in ipairs( box_colors ) do + minetest.register_node( "giftbox:giftbox_" .. color, { + description = ( color:gsub( "^%l", string.upper ) ) .. " Gift Box", + drawtype = "mesh", + mesh = "giftbox.obj", + tiles = { "giftbox_" .. color .. ".png" }, + paramtype = "light", + visual_scale = 0.45, + wield_scale = { x = 1, y = 1, z = 1 }, -- apparently no way to set wield scale of mesh? + sunlight_propagates = true, + is_ground_content = false, + groups = { choppy = 2, oddly_breakable_by_hand = 2, flammable = 1 }, + sounds = default.node_sound_dirt_defaults(), + paramtype2 = "facedir", + + selection_box = { + type = "fixed", + fixed = { + { -0.45, -0.5, -0.45, 0.45, 0.45, 0.45 }, + } + }, + + drop = { max_items = 1, items = giftbox.giftbox_drops }, + + after_place_node = function( pos, player ) + -- initial item string: Gift Box (placed by sorcerykid) + + local placer = player:get_player_name( ) or "singleplayer" + local meta = minetest.get_meta( pos ) + meta:set_string( "owner", default.OWNER_NOBODY ) + meta:set_string( "placer", placer ) + meta:set_string( "is_anonymous", "false" ) + meta:set_string( "infotext", "Public Gift Box (from " .. placer .. ")" ) + end, + on_open = function( pos, player, fields ) + local meta = minetest.get_meta( pos ) + local formspec = + "size[8,3]" .. + default.gui_bg .. + default.gui_bg_img .. + "button_exit[6,2.5;2,0.3;save;Save]" .. + "checkbox[6,1.6;is_anonymous;Anonymous Sender;" .. meta:get_string( "is_anonymous" ) .. "]" .. + "label[0.1,0;Personalize your holiday greeting (or leave blank for the default):]" .. + "field[0.4,1;7.5,0.25;message;;" .. meta:get_string( "message" ) .. "]" .. + "label[0.1,1.5;Recipient:]" .. + "field[1.8,1.9;3.5,0.25;owner;;" .. meta:get_string( "owner" ) .. "]" + + -- only placer of gift box should edit properties, not the receiver + if meta:get_string( "placer" ) ~= placer then + return formspec + end + end, + on_close = function( pos, player, fields ) + local placer = player:get_player_name( ) + local meta = minetest.get_meta( pos ) + + -- only placer of gift box should edit properties, not the receiver + if meta:get_string( "placer" ) ~= placer then return end + + if fields.is_anonymous then + -- in next version of active formspecs, we should save checkbox state + -- in form meta first rather than directly to node meta + meta:set_string( "is_anonymous", fields.is_anonymous ) + + elseif fields.save and fields.message and fields.owner then + local infotext + + if string.len( fields.message ) > 50 then + minetest.chat_send_player( placer, "The specified message is too long." ) + return + elseif fields.owner == placer then + minetest.chat_send_player( placer, "You cannot send a gift to yourself." ) + return + elseif not "" and not string.find( fields.owner, "^[_A-Za-z0-9]+$" ) then + minetest.chat_send_player( placer, "The specified recipient is invalid." ) + return + end + + -- item string with message: Dear sorcerykid: "Happy holidays!" (placed by sorcerykid) + -- item string without message: Gift Box for maikerumine (placed by sorcerykid) + + if fields.owner == default.OWNER_NOBODY then + -- public gift box + infotext = fields.message == "" and "Gift Box" or "\"" .. fields.message .. "\"" + else + -- private gift box + infotext = fields.message == "" and "Gift Box for " .. fields.owner or "Dear " .. fields.owner .. ": \"" .. fields.message .. "\"" + end + + if meta:get_string( "is_anonymous" ) == "false" then + infotext = infotext .. " (from " .. placer .. ")" + end + + minetest.log( "action", string.format( default.STATUS_SIGNATURE_SET, player:get_player_name( ), fields.message, "giftbox", minetest.pos_to_string( pos ) ) ) + + meta:set_string( "owner", fields.owner ) + meta:set_string( "message", fields.message ) + meta:set_string( "infotext", infotext ) + end + end, + } ) + + minetest.register_craft( { + output = "giftbox:giftbox_" .. color, + recipe = { + { "wool:" .. color, "farming:cotton", "wool:" .. color }, + { "default:paper", "default:mese_crystal", "default:paper" }, + { "wool:" .. color, "default:paper", "wool:" .. color }, + } + } ) +end + +minetest.register_alias( "mt_seasons:gift_box_brown", "giftbox:giftbox_yellow" ) +minetest.register_alias( "mt_seasons:gift_box_dark_green", "giftbox:giftbox_green" ) +minetest.register_alias( "mt_seasons:gift_box_dark_grey", "giftbox:giftbox_cyan" ) +minetest.register_alias( "mt_seasons:gift_box_grey", "giftbox:giftbox_white" ) +minetest.register_alias( "mt_seasons:gift_box_orange", "giftbox:giftbox_red" ) +minetest.register_alias( "mt_seasons:gift_box_pink", "giftbox:giftbox_magenta" ) +minetest.register_alias( "mt_seasons:gift_box_violet", "giftbox:giftbox_blue" ) + +minetest.register_alias( "mt_seasons:gift_box_red", "giftbox:giftbox_red" ) +minetest.register_alias( "mt_seasons:gift_box_green", "giftbox:giftbox_green" ) +minetest.register_alias( "mt_seasons:gift_box_blue", "giftbox:giftbox_blue" ) +minetest.register_alias( "mt_seasons:gift_box_cyan", "giftbox:giftbox_cyan" ) +minetest.register_alias( "mt_seasons:gift_box_magenta", "giftbox:giftbox_magenta" ) +minetest.register_alias( "mt_seasons:gift_box_yellow", "giftbox:giftbox_yellow" ) +minetest.register_alias( "mt_seasons:gift_box_white", "giftbox:giftbox_white" ) +minetest.register_alias( "mt_seasons:gift_box_black", "giftbox:giftbox_black" ) diff --git a/models/giftbox.obj b/models/giftbox.obj new file mode 100644 index 0000000..469df81 --- /dev/null +++ b/models/giftbox.obj @@ -0,0 +1,62 @@ +# Blender v2.78 (sub 0) OBJ File: '' +# www.blender.org +mtllib present.mtl +o Shape1 +v 1.000000 -1.000000 -1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +v -1.000000 -1.000000 1.000000 +v 1.000000 -1.000000 1.000000 +v 1.000000 1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -0.707107 1.000000 0.707107 +v 0.707107 1.000000 -0.707107 +v 0.707107 3.000000 -0.707106 +v -0.707107 3.000000 0.707108 +v 0.707107 1.000000 0.707107 +v -0.707107 1.000000 -0.707107 +v -0.707107 3.000000 -0.707106 +v 0.707107 3.000000 0.707108 +vt 0.2500 0.0000 +vt 0.5000 0.0000 +vt 0.5000 0.5000 +vt 0.2500 0.5000 +vt 0.7500 0.0000 +vt 1.0000 0.0000 +vt 1.0000 0.5000 +vt 0.7500 0.5000 +vt 0.5000 1.0000 +vt 0.2500 1.0000 +vt 0.5000 0.5000 +vt 0.7500 0.5000 +vt 0.7500 1.0000 +vt 0.5000 1.0000 +vt 0.0000 0.0000 +vt 0.0000 0.5000 +vt -0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 1.0000 +vt -0.0000 1.0000 +vt 0.0000 0.5000 +vt 0.2500 0.5000 +vt 0.2500 1.0000 +vt 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +usemtl None +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 4/4/3 3/3/3 8/9/3 7/10/3 +f 6/11/4 5/12/4 2/13/4 1/14/4 +f 6/15/5 1/1/5 4/4/5 7/16/5 +f 2/2/6 5/5/6 8/8/6 3/3/6 +f 9/17/7 10/18/7 11/19/7 12/20/7 +f 13/21/8 14/22/8 15/23/8 16/24/8 diff --git a/textures/giftbox_black.png b/textures/giftbox_black.png new file mode 100644 index 0000000..63ecf57 Binary files /dev/null and b/textures/giftbox_black.png differ diff --git a/textures/giftbox_blue.png b/textures/giftbox_blue.png new file mode 100644 index 0000000..77eacd3 Binary files /dev/null and b/textures/giftbox_blue.png differ diff --git a/textures/giftbox_bottom.png b/textures/giftbox_bottom.png new file mode 100644 index 0000000..4181d0c Binary files /dev/null and b/textures/giftbox_bottom.png differ diff --git a/textures/giftbox_cyan.png b/textures/giftbox_cyan.png new file mode 100644 index 0000000..696e4fc Binary files /dev/null and b/textures/giftbox_cyan.png differ diff --git a/textures/giftbox_green.png b/textures/giftbox_green.png new file mode 100644 index 0000000..4e27d9c Binary files /dev/null and b/textures/giftbox_green.png differ diff --git a/textures/giftbox_magenta.png b/textures/giftbox_magenta.png new file mode 100644 index 0000000..e986862 Binary files /dev/null and b/textures/giftbox_magenta.png differ diff --git a/textures/giftbox_red.png b/textures/giftbox_red.png new file mode 100644 index 0000000..72becf5 Binary files /dev/null and b/textures/giftbox_red.png differ diff --git a/textures/giftbox_side.png b/textures/giftbox_side.png new file mode 100644 index 0000000..53bd4ab Binary files /dev/null and b/textures/giftbox_side.png differ diff --git a/textures/giftbox_top.png b/textures/giftbox_top.png new file mode 100644 index 0000000..5e54c88 Binary files /dev/null and b/textures/giftbox_top.png differ diff --git a/textures/giftbox_white.png b/textures/giftbox_white.png new file mode 100644 index 0000000..c9b47e7 Binary files /dev/null and b/textures/giftbox_white.png differ diff --git a/textures/giftbox_yellow.png b/textures/giftbox_yellow.png new file mode 100644 index 0000000..cd8f6ba Binary files /dev/null and b/textures/giftbox_yellow.png differ