1
0
mirror of https://github.com/minetest/minetest_game.git synced 2025-06-28 20:56:02 +02:00

25 Commits

Author SHA1 Message Date
32ee20ebe7 Use working shapeless multigroup recipes for dyeing wool 2012-07-26 13:48:34 +03:00
937ec64ee6 Make wools colorable by any dye (not just the ones in the dye mod) 2012-07-26 04:05:39 +03:00
7db7ea543f Remove some unwanted items from the creative inventory 2012-07-26 00:08:47 +03:00
319ac40fa5 Move creative_inventory to creative 2012-07-25 20:37:47 +03:00
cd4e86773f Add description to bucket to make it show in creative inventory 2012-07-25 18:28:21 +03:00
8643caac3c Add visible page number to creative inventory 2012-07-25 18:18:34 +03:00
81afea1c00 Use new creative mode inventory properly 2012-07-25 18:05:13 +03:00
a29819ebee Add creative mode inventory as a mod 2012-07-25 18:04:25 +03:00
6de625c67f Use improved inventory callbacks 2012-07-25 15:14:36 +03:00
e550a0e26f Update locked chest metadata to new metadata inventory API 2012-07-25 02:40:26 +03:00
8739c4e737 Wool 2012-07-24 18:23:46 +03:00
3ea6096a7a Dyes 2012-07-24 18:20:37 +03:00
f2916c0a31 mods/doors: make variables local 2012-07-24 17:44:26 +03:00
c7b624d67c Remove /give, /giveme, /spawnentity and /pulverize as they are now implemented by the engine 2012-07-23 17:43:47 +03:00
6ba4f01d0b Make fire a tiny bit less eager to jump everywhere 2012-07-21 03:08:59 +03:00
a9da19c590 Merge pull request #3 from sfan5/master
Fix Lava Bucket in Furnace
2012-07-20 13:44:01 -07:00
b1dcbe72aa Merge pull request #2 from cyisfor/master
making rails selectable again.
2012-07-20 13:43:32 -07:00
8c8b4b005e Fix Lava Bucket as Fuel 2012-07-20 08:26:05 +02:00
537344bc62 Make rails selectable.
Rails weren't selectable, and couldn't be removed from a map asides from
using worldedit (or maybe sand)
2012-06-20 04:33:26 +00:00
274f280e10 Add flipped stair recipe for silly minecrafters and make slabs convert to full cubes when placed on each other 2012-06-17 19:47:17 +03:00
3c8d4879a1 Stairs and slabs 2012-06-17 17:46:36 +03:00
d05002ecc0 Rename crack.png to crack_anylength.png as required by new engine (needed for proper texture pack compatibility) 2012-06-16 20:49:37 +03:00
d817c9babe Add flowing lava animation and update some field names 2012-06-16 17:19:35 +03:00
4e996ffa35 Update license in all READMEs (forgot to do that) 2012-06-09 13:33:05 +03:00
1dd62938c1 Use traditional mese texture 2012-06-08 01:43:08 +03:00
54 changed files with 670 additions and 269 deletions

View File

@ -7,11 +7,11 @@ Copyright (C) 2011-2012 Kahrl <kahrl@gmx.net>
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com> Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
http://www.gnu.org/licenses/gpl-2.0.html http://www.gnu.org/licenses/lgpl-2.1.html
License of media (textures and sounds) License of media (textures and sounds)
-------------------------------------- --------------------------------------

View File

@ -56,6 +56,7 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image)
end end
minetest.register_craftitem("bucket:bucket_empty", { minetest.register_craftitem("bucket:bucket_empty", {
description = "Emtpy bucket",
inventory_image = "bucket.png", inventory_image = "bucket.png",
stack_max = 1, stack_max = 1,
liquids_pointable = true, liquids_pointable = true,
@ -90,6 +91,6 @@ bucket.register_liquid(
minetest.register_craft({ minetest.register_craft({
type = "fuel", type = "fuel",
recipe = "default:bucket_lava", recipe = "bucket:bucket_lava",
burntime = 60, burntime = 60,
}) })

22
mods/creative/README.txt Normal file
View File

@ -0,0 +1,22 @@
Minetest 0.4 mod: creative
==========================
Implements creative mode.
Switch on by using the "creative_mode" setting.
Registered items that
- have a description, and
- do not have the group not_in_creative_inventory
are added to the creative inventory.
License of source code and media files:
---------------------------------------
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.

115
mods/creative/init.lua Normal file
View File

@ -0,0 +1,115 @@
-- minetest/creative/init.lua
local creative_inventory = {}
-- Create detached creative inventory after loading all mods
minetest.after(0, function()
local inv = minetest.create_detached_inventory("creative", {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
if minetest.setting_getbool("creative_mode") then
return count
else
return 0
end
end,
allow_put = function(inv, listname, index, stack, player)
if minetest.setting_getbool("creative_mode") then
return -1
else
return 0
end
end,
allow_take = function(inv, listname, index, stack, player)
if minetest.setting_getbool("creative_mode") then
return -1
else
return 0
end
end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
end,
on_put = function(inv, listname, index, stack, player)
end,
on_take = function(inv, listname, index, stack, player)
print(player:get_player_name().." takes item from creative inventory; listname="..dump(listname)..", index="..dump(index)..", stack="..dump(stack))
if stack then
print("stack:get_name()="..dump(stack:get_name())..", stack:get_count()="..dump(stack:get_count()))
end
end,
})
local creative_list = {}
for name,def in pairs(minetest.registered_items) do
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0)
and def.description and def.description ~= "" then
table.insert(creative_list, name)
end
end
table.sort(creative_list)
inv:set_size("main", #creative_list)
for _,itemstring in ipairs(creative_list) do
local stack = ItemStack(itemstring)
-- Make a stack of the right number of items
local stack2 = nil
if stack:get_stack_max() == 1 then
stack2 = ItemStack(stack:get_name())
else
-- Insert half full so that a taken stack can be put back
stack2 = ItemStack(stack:get_name().." "..(stack:get_stack_max()/2))
end
inv:add_item("main", stack2)
end
creative_inventory.creative_inventory_size = #creative_list
print("creative inventory size: "..dump(creative_inventory.creative_inventory_size))
end)
creative_inventory.set_creative_formspec = function(player, start_i, pagenum)
pagenum = math.floor(pagenum)
local pagemax = math.floor((creative_inventory.creative_inventory_size-1) / (6*4) + 1)
player:set_inventory_formspec("size[13,7.5]"..
--"image[6,0.6;1,2;player.png]"..
"list[current_player;main;5,3.5;8,4;]"..
"list[current_player;craft;8,0;3,3;]"..
"list[current_player;craftpreview;12,1;1,1;]"..
"list[detached:creative;main;0.3,0.5;4,6;"..tostring(start_i).."]"..
"label[2.0,6.55;"..tostring(pagenum).."/"..tostring(pagemax).."]"..
"button[0.3,6.5;1.6,1;creative_prev;<<]"..
"button[2.7,6.5;1.6,1;creative_next;>>]")
end
minetest.register_on_joinplayer(function(player)
-- If in creative mode, modify player's inventory forms
if not minetest.setting_getbool("creative_mode") then
return
end
creative_inventory.set_creative_formspec(player, 0, 1)
end)
minetest.register_on_player_receive_fields(function(player, formname, fields)
if not minetest.setting_getbool("creative_mode") then
return
end
-- Figure out current page from formspec
local current_page = 0
local formspec = player:get_inventory_formspec()
local start_i = string.match(formspec, "list%[detached:creative;main;[%d.]+,[%d.]+;[%d.]+,[%d.]+;(%d+)%]")
start_i = tonumber(start_i) or 0
if fields.creative_prev then
start_i = start_i - 4*6
end
if fields.creative_next then
start_i = start_i + 4*6
end
if start_i < 0 then
start_i = start_i + 4*6
end
if start_i >= creative_inventory.creative_inventory_size then
start_i = start_i - 4*6
end
if start_i < 0 or start_i >= creative_inventory.creative_inventory_size then
start_i = 0
end
creative_inventory.set_creative_formspec(player, start_i, start_i / (6*4) + 1)
end)

View File

@ -6,11 +6,11 @@ License of source code:
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com> Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version. (at your option) any later version.
http://www.gnu.org/licenses/gpl-2.0.html http://www.gnu.org/licenses/lgpl-2.1.html
License of media (textures and sounds) License of media (textures and sounds)
-------------------------------------- --------------------------------------

View File

@ -696,7 +696,7 @@ end
minetest.register_node("default:stone", { minetest.register_node("default:stone", {
description = "Stone", description = "Stone",
tile_images = {"default_stone.png"}, tiles = {"default_stone.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
drop = 'default:cobble', drop = 'default:cobble',
@ -706,7 +706,7 @@ minetest.register_node("default:stone", {
minetest.register_node("default:desert_stone", { minetest.register_node("default:desert_stone", {
description = "Desert Stone", description = "Desert Stone",
tile_images = {"default_desert_stone.png"}, tiles = {"default_desert_stone.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
drop = 'default:desert_stone', drop = 'default:desert_stone',
@ -716,7 +716,7 @@ minetest.register_node("default:desert_stone", {
minetest.register_node("default:stone_with_coal", { minetest.register_node("default:stone_with_coal", {
description = "Coal Ore", description = "Coal Ore",
tile_images = {"default_stone.png^default_mineral_coal.png"}, tiles = {"default_stone.png^default_mineral_coal.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
drop = 'default:coal_lump', drop = 'default:coal_lump',
@ -725,7 +725,7 @@ minetest.register_node("default:stone_with_coal", {
minetest.register_node("default:stone_with_iron", { minetest.register_node("default:stone_with_iron", {
description = "Iron Ore", description = "Iron Ore",
tile_images = {"default_stone.png^default_mineral_iron.png"}, tiles = {"default_stone.png^default_mineral_iron.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
drop = 'default:iron_lump', drop = 'default:iron_lump',
@ -734,7 +734,7 @@ minetest.register_node("default:stone_with_iron", {
minetest.register_node("default:dirt_with_grass", { minetest.register_node("default:dirt_with_grass", {
description = "Dirt with Grass", description = "Dirt with Grass",
tile_images = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=3}, groups = {crumbly=3},
drop = 'default:dirt', drop = 'default:dirt',
@ -745,9 +745,9 @@ minetest.register_node("default:dirt_with_grass", {
minetest.register_node("default:dirt_with_grass_footsteps", { minetest.register_node("default:dirt_with_grass_footsteps", {
description = "Dirt with Grass and Footsteps", description = "Dirt with Grass and Footsteps",
tile_images = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, tiles = {"default_grass_footsteps.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=3}, groups = {crumbly=3, not_in_creative_inventory=1},
drop = 'default:dirt', drop = 'default:dirt',
sounds = default.node_sound_dirt_defaults({ sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4}, footstep = {name="default_grass_footstep", gain=0.4},
@ -756,7 +756,7 @@ minetest.register_node("default:dirt_with_grass_footsteps", {
minetest.register_node("default:dirt", { minetest.register_node("default:dirt", {
description = "Dirt", description = "Dirt",
tile_images = {"default_dirt.png"}, tiles = {"default_dirt.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=3}, groups = {crumbly=3},
sounds = default.node_sound_dirt_defaults(), sounds = default.node_sound_dirt_defaults(),
@ -764,7 +764,7 @@ minetest.register_node("default:dirt", {
minetest.register_node("default:sand", { minetest.register_node("default:sand", {
description = "Sand", description = "Sand",
tile_images = {"default_sand.png"}, tiles = {"default_sand.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=3, falling_node=1}, groups = {crumbly=3, falling_node=1},
sounds = default.node_sound_sand_defaults(), sounds = default.node_sound_sand_defaults(),
@ -772,7 +772,7 @@ minetest.register_node("default:sand", {
minetest.register_node("default:desert_sand", { minetest.register_node("default:desert_sand", {
description = "Desert Sand", description = "Desert Sand",
tile_images = {"default_desert_sand.png"}, tiles = {"default_desert_sand.png"},
is_ground_content = true, is_ground_content = true,
groups = {sand=1, crumbly=3, falling_node=1}, groups = {sand=1, crumbly=3, falling_node=1},
sounds = default.node_sound_sand_defaults(), sounds = default.node_sound_sand_defaults(),
@ -780,7 +780,7 @@ minetest.register_node("default:desert_sand", {
minetest.register_node("default:gravel", { minetest.register_node("default:gravel", {
description = "Gravel", description = "Gravel",
tile_images = {"default_gravel.png"}, tiles = {"default_gravel.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=2, falling_node=1}, groups = {crumbly=2, falling_node=1},
sounds = default.node_sound_dirt_defaults({ sounds = default.node_sound_dirt_defaults({
@ -790,7 +790,7 @@ minetest.register_node("default:gravel", {
minetest.register_node("default:sandstone", { minetest.register_node("default:sandstone", {
description = "Sandstone", description = "Sandstone",
tile_images = {"default_sandstone.png"}, tiles = {"default_sandstone.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=2,cracky=2}, groups = {crumbly=2,cracky=2},
drop = 'default:sand', drop = 'default:sand',
@ -799,7 +799,7 @@ minetest.register_node("default:sandstone", {
minetest.register_node("default:clay", { minetest.register_node("default:clay", {
description = "Clay", description = "Clay",
tile_images = {"default_clay.png"}, tiles = {"default_clay.png"},
is_ground_content = true, is_ground_content = true,
groups = {crumbly=3}, groups = {crumbly=3},
drop = 'default:clay_lump 4', drop = 'default:clay_lump 4',
@ -810,7 +810,7 @@ minetest.register_node("default:clay", {
minetest.register_node("default:brick", { minetest.register_node("default:brick", {
description = "Brick Block", description = "Brick Block",
tile_images = {"default_brick.png"}, tiles = {"default_brick.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
drop = 'default:clay_brick 4', drop = 'default:clay_brick 4',
@ -819,7 +819,7 @@ minetest.register_node("default:brick", {
minetest.register_node("default:tree", { minetest.register_node("default:tree", {
description = "Tree", description = "Tree",
tile_images = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
is_ground_content = true, is_ground_content = true,
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
@ -827,7 +827,7 @@ minetest.register_node("default:tree", {
minetest.register_node("default:jungletree", { minetest.register_node("default:jungletree", {
description = "Jungle Tree", description = "Jungle Tree",
tile_images = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
is_ground_content = true, is_ground_content = true,
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2}, groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
@ -837,7 +837,7 @@ minetest.register_node("default:junglegrass", {
description = "Jungle Grass", description = "Jungle Grass",
drawtype = "plantlike", drawtype = "plantlike",
visual_scale = 1.3, visual_scale = 1.3,
tile_images = {"default_junglegrass.png"}, tiles = {"default_junglegrass.png"},
inventory_image = "default_junglegrass.png", inventory_image = "default_junglegrass.png",
wield_image = "default_junglegrass.png", wield_image = "default_junglegrass.png",
paramtype = "light", paramtype = "light",
@ -850,7 +850,7 @@ minetest.register_node("default:leaves", {
description = "Leaves", description = "Leaves",
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
visual_scale = 1.3, visual_scale = 1.3,
tile_images = {"default_leaves.png"}, tiles = {"default_leaves.png"},
paramtype = "light", paramtype = "light",
groups = {snappy=3, leafdecay=3, flammable=2}, groups = {snappy=3, leafdecay=3, flammable=2},
drop = { drop = {
@ -873,7 +873,7 @@ minetest.register_node("default:leaves", {
minetest.register_node("default:cactus", { minetest.register_node("default:cactus", {
description = "Cactus", description = "Cactus",
tile_images = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
is_ground_content = true, is_ground_content = true,
groups = {snappy=2,choppy=3,flammable=2}, groups = {snappy=2,choppy=3,flammable=2},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
@ -882,7 +882,7 @@ minetest.register_node("default:cactus", {
minetest.register_node("default:papyrus", { minetest.register_node("default:papyrus", {
description = "Papyrus", description = "Papyrus",
drawtype = "plantlike", drawtype = "plantlike",
tile_images = {"default_papyrus.png"}, tiles = {"default_papyrus.png"},
inventory_image = "default_papyrus.png", inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png", wield_image = "default_papyrus.png",
paramtype = "light", paramtype = "light",
@ -894,7 +894,7 @@ minetest.register_node("default:papyrus", {
minetest.register_node("default:bookshelf", { minetest.register_node("default:bookshelf", {
description = "Bookshelf", description = "Bookshelf",
tile_images = {"default_wood.png", "default_wood.png", "default_bookshelf.png"}, tiles = {"default_wood.png", "default_wood.png", "default_bookshelf.png"},
is_ground_content = true, is_ground_content = true,
groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2,flammable=3}, groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
@ -903,7 +903,7 @@ minetest.register_node("default:bookshelf", {
minetest.register_node("default:glass", { minetest.register_node("default:glass", {
description = "Glass", description = "Glass",
drawtype = "glasslike", drawtype = "glasslike",
tile_images = {"default_glass.png"}, tiles = {"default_glass.png"},
inventory_image = minetest.inventorycube("default_glass.png"), inventory_image = minetest.inventorycube("default_glass.png"),
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
@ -915,7 +915,7 @@ minetest.register_node("default:glass", {
minetest.register_node("default:fence_wood", { minetest.register_node("default:fence_wood", {
description = "Wooden Fence", description = "Wooden Fence",
drawtype = "fencelike", drawtype = "fencelike",
tile_images = {"default_wood.png"}, tiles = {"default_wood.png"},
inventory_image = "default_fence.png", inventory_image = "default_fence.png",
wield_image = "default_fence.png", wield_image = "default_fence.png",
paramtype = "light", paramtype = "light",
@ -931,7 +931,7 @@ minetest.register_node("default:fence_wood", {
minetest.register_node("default:rail", { minetest.register_node("default:rail", {
description = "Rail", description = "Rail",
drawtype = "raillike", drawtype = "raillike",
tile_images = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
inventory_image = "default_rail.png", inventory_image = "default_rail.png",
wield_image = "default_rail.png", wield_image = "default_rail.png",
paramtype = "light", paramtype = "light",
@ -939,7 +939,8 @@ minetest.register_node("default:rail", {
walkable = false, walkable = false,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
--fixed = <default> -- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
}, },
groups = {bendy=2,snappy=1,dig_immediate=2}, groups = {bendy=2,snappy=1,dig_immediate=2},
}) })
@ -947,7 +948,7 @@ minetest.register_node("default:rail", {
minetest.register_node("default:ladder", { minetest.register_node("default:ladder", {
description = "Ladder", description = "Ladder",
drawtype = "signlike", drawtype = "signlike",
tile_images = {"default_ladder.png"}, tiles = {"default_ladder.png"},
inventory_image = "default_ladder.png", inventory_image = "default_ladder.png",
wield_image = "default_ladder.png", wield_image = "default_ladder.png",
paramtype = "light", paramtype = "light",
@ -968,7 +969,7 @@ minetest.register_node("default:ladder", {
minetest.register_node("default:wood", { minetest.register_node("default:wood", {
description = "Wooden Planks", description = "Wooden Planks",
tile_images = {"default_wood.png"}, tiles = {"default_wood.png"},
is_ground_content = true, is_ground_content = true,
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3}, groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
@ -976,7 +977,7 @@ minetest.register_node("default:wood", {
minetest.register_node("default:mese", { minetest.register_node("default:mese", {
description = "Mese", description = "Mese",
tile_images = {"default_mese.png"}, tiles = {"default_mese.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=1}, groups = {cracky=1},
sounds = default.node_sound_defaults(), sounds = default.node_sound_defaults(),
@ -984,16 +985,21 @@ minetest.register_node("default:mese", {
minetest.register_node("default:cloud", { minetest.register_node("default:cloud", {
description = "Cloud", description = "Cloud",
tile_images = {"default_cloud.png"}, tiles = {"default_cloud.png"},
is_ground_content = true, is_ground_content = true,
sounds = default.node_sound_defaults(), sounds = default.node_sound_defaults(),
groups = {not_in_creative_inventory=1},
}) })
minetest.register_node("default:water_flowing", { minetest.register_node("default:water_flowing", {
description = "Flowing Water", description = "Flowing Water",
inventory_image = minetest.inventorycube("default_water.png"), inventory_image = minetest.inventorycube("default_water.png"),
drawtype = "flowingliquid", drawtype = "flowingliquid",
tile_images = {"default_water.png"}, tiles = {"default_water.png"},
special_tiles = {
{name="default_water.png", backface_culling=false},
{name="default_water.png", backface_culling=true},
},
alpha = WATER_ALPHA, alpha = WATER_ALPHA,
paramtype = "light", paramtype = "light",
walkable = false, walkable = false,
@ -1005,18 +1011,18 @@ minetest.register_node("default:water_flowing", {
liquid_alternative_source = "default:water_source", liquid_alternative_source = "default:water_source",
liquid_viscosity = WATER_VISC, liquid_viscosity = WATER_VISC,
post_effect_color = {a=64, r=100, g=100, b=200}, post_effect_color = {a=64, r=100, g=100, b=200},
special_materials = { groups = {water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1},
{image="default_water.png", backface_culling=false},
{image="default_water.png", backface_culling=true},
},
groups = {water=3, liquid=3, puts_out_fire=1},
}) })
minetest.register_node("default:water_source", { minetest.register_node("default:water_source", {
description = "Water Source", description = "Water Source",
inventory_image = minetest.inventorycube("default_water.png"), inventory_image = minetest.inventorycube("default_water.png"),
drawtype = "liquid", drawtype = "liquid",
tile_images = {"default_water.png"}, tiles = {"default_water.png"},
special_tiles = {
-- New-style water source material (mostly unused)
{name="default_water.png", backface_culling=false},
},
alpha = WATER_ALPHA, alpha = WATER_ALPHA,
paramtype = "light", paramtype = "light",
walkable = false, walkable = false,
@ -1028,10 +1034,6 @@ minetest.register_node("default:water_source", {
liquid_alternative_source = "default:water_source", liquid_alternative_source = "default:water_source",
liquid_viscosity = WATER_VISC, liquid_viscosity = WATER_VISC,
post_effect_color = {a=64, r=100, g=100, b=200}, post_effect_color = {a=64, r=100, g=100, b=200},
special_materials = {
-- New-style water source material (mostly unused)
{image="default_water.png", backface_culling=false},
},
groups = {water=3, liquid=3, puts_out_fire=1}, groups = {water=3, liquid=3, puts_out_fire=1},
}) })
@ -1039,7 +1041,19 @@ minetest.register_node("default:lava_flowing", {
description = "Flowing Lava", description = "Flowing Lava",
inventory_image = minetest.inventorycube("default_lava.png"), inventory_image = minetest.inventorycube("default_lava.png"),
drawtype = "flowingliquid", drawtype = "flowingliquid",
tile_images = {"default_lava.png"}, tiles = {"default_lava.png"},
special_tiles = {
{
image="default_lava_flowing_animated.png",
backface_culling=false,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
},
{
image="default_lava_flowing_animated.png",
backface_culling=true,
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.3}
},
},
paramtype = "light", paramtype = "light",
light_source = LIGHT_MAX - 1, light_source = LIGHT_MAX - 1,
walkable = false, walkable = false,
@ -1052,18 +1066,20 @@ minetest.register_node("default:lava_flowing", {
liquid_viscosity = LAVA_VISC, liquid_viscosity = LAVA_VISC,
damage_per_second = 4*2, damage_per_second = 4*2,
post_effect_color = {a=192, r=255, g=64, b=0}, post_effect_color = {a=192, r=255, g=64, b=0},
special_materials = { groups = {lava=3, liquid=2, hot=3, igniter=1, not_in_creative_inventory=1},
{image="default_lava.png", backface_culling=false},
{image="default_lava.png", backface_culling=true},
},
groups = {lava=3, liquid=2, hot=3, igniter=2},
}) })
minetest.register_node("default:lava_source", { minetest.register_node("default:lava_source", {
description = "Lava Source", description = "Lava Source",
inventory_image = minetest.inventorycube("default_lava.png"), inventory_image = minetest.inventorycube("default_lava.png"),
drawtype = "liquid", drawtype = "liquid",
tile_images = {"default_lava.png"}, tiles = {
{name="default_lava_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
},
special_tiles = {
-- New-style lava source material (mostly unused)
{name="default_lava.png", backface_culling=false},
},
paramtype = "light", paramtype = "light",
light_source = LIGHT_MAX - 1, light_source = LIGHT_MAX - 1,
walkable = false, walkable = false,
@ -1076,17 +1092,13 @@ minetest.register_node("default:lava_source", {
liquid_viscosity = LAVA_VISC, liquid_viscosity = LAVA_VISC,
damage_per_second = 4*2, damage_per_second = 4*2,
post_effect_color = {a=192, r=255, g=64, b=0}, post_effect_color = {a=192, r=255, g=64, b=0},
special_materials = { groups = {lava=3, liquid=2, hot=3, igniter=1},
-- New-style lava source material (mostly unused)
{image="default_lava.png", backface_culling=false},
},
groups = {lava=3, liquid=2, hot=3, igniter=2},
}) })
minetest.register_node("default:torch", { minetest.register_node("default:torch", {
description = "Torch", description = "Torch",
drawtype = "torchlike", drawtype = "torchlike",
tile_images = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"}, tiles = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
inventory_image = "default_torch_on_floor.png", inventory_image = "default_torch_on_floor.png",
wield_image = "default_torch_on_floor.png", wield_image = "default_torch_on_floor.png",
paramtype = "light", paramtype = "light",
@ -1108,7 +1120,7 @@ minetest.register_node("default:torch", {
minetest.register_node("default:sign_wall", { minetest.register_node("default:sign_wall", {
description = "Sign", description = "Sign",
drawtype = "signlike", drawtype = "signlike",
tile_images = {"default_sign_wall.png"}, tiles = {"default_sign_wall.png"},
inventory_image = "default_sign_wall.png", inventory_image = "default_sign_wall.png",
wield_image = "default_sign_wall.png", wield_image = "default_sign_wall.png",
paramtype = "light", paramtype = "light",
@ -1144,7 +1156,7 @@ minetest.register_node("default:sign_wall", {
minetest.register_node("default:chest", { minetest.register_node("default:chest", {
description = "Chest", description = "Chest",
tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
"default_chest_side.png", "default_chest_side.png", "default_chest_front.png"}, "default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
@ -1165,24 +1177,17 @@ minetest.register_node("default:chest", {
local inv = meta:get_inventory() local inv = meta:get_inventory()
return inv:is_empty("main") return inv:is_empty("main")
end, end,
on_metadata_inventory_move = function(pos, from_list, from_index, on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
to_list, to_index, count, player)
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" moves stuff in chest at "..minetest.pos_to_string(pos)) " moves stuff in chest at "..minetest.pos_to_string(pos))
return minetest.node_metadata_inventory_move_allow_all(
pos, from_list, from_index, to_list, to_index, count, player)
end, end,
on_metadata_inventory_offer = function(pos, listname, index, stack, player) on_metadata_inventory_put = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" moves stuff to chest at "..minetest.pos_to_string(pos)) " moves stuff to chest at "..minetest.pos_to_string(pos))
return minetest.node_metadata_inventory_offer_allow_all(
pos, listname, index, stack, player)
end, end,
on_metadata_inventory_take = function(pos, listname, index, count, player) on_metadata_inventory_take = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" takes stuff from chest at "..minetest.pos_to_string(pos)) " takes stuff from chest at "..minetest.pos_to_string(pos))
return minetest.node_metadata_inventory_take_allow_all(
pos, listname, index, count, player)
end, end,
}) })
@ -1195,7 +1200,7 @@ end
minetest.register_node("default:chest_locked", { minetest.register_node("default:chest_locked", {
description = "Locked Chest", description = "Locked Chest",
tile_images = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png", tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
"default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"}, "default_chest_side.png", "default_chest_side.png", "default_chest_lock.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2}, groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
@ -1223,48 +1228,50 @@ minetest.register_node("default:chest_locked", {
local inv = meta:get_inventory() local inv = meta:get_inventory()
return inv:is_empty("main") return inv:is_empty("main")
end, end,
on_metadata_inventory_move = function(pos, from_list, from_index, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
to_list, to_index, count, player)
local meta = minetest.env:get_meta(pos) local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to ".. " tried to access a locked chest belonging to "..
meta:get_string("owner").." at ".. meta:get_string("owner").." at "..
minetest.pos_to_string(pos)) minetest.pos_to_string(pos))
return return 0
end end
return count
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
meta:get_string("owner").." at "..
minetest.pos_to_string(pos))
return 0
end
return stack:get_count()
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
meta:get_string("owner").." at "..
minetest.pos_to_string(pos))
return 0
end
return stack:get_count()
end,
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" moves stuff in locked chest at "..minetest.pos_to_string(pos)) " moves stuff in locked chest at "..minetest.pos_to_string(pos))
return minetest.node_metadata_inventory_move_allow_all(
pos, from_list, from_index, to_list, to_index, count, player)
end, end,
on_metadata_inventory_offer = function(pos, listname, index, stack, player) on_metadata_inventory_put = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
meta:get_string("owner").." at "..
minetest.pos_to_string(pos))
return stack
end
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" moves stuff to locked chest at "..minetest.pos_to_string(pos)) " moves stuff to locked chest at "..minetest.pos_to_string(pos))
return minetest.node_metadata_inventory_offer_allow_all(
pos, listname, index, stack, player)
end, end,
on_metadata_inventory_take = function(pos, listname, index, count, player) on_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.env:get_meta(pos)
if not has_locked_chest_privilege(meta, player) then
minetest.log("action", player:get_player_name()..
" tried to access a locked chest belonging to "..
meta:get_string("owner").." at "..
minetest.pos_to_string(pos))
return
end
minetest.log("action", player:get_player_name().. minetest.log("action", player:get_player_name()..
" takes stuff from locked chest at "..minetest.pos_to_string(pos)) " takes stuff from locked chest at "..minetest.pos_to_string(pos))
return minetest.node_metadata_inventory_take_allow_all(
pos, listname, index, count, player)
end, end,
}) })
@ -1278,7 +1285,7 @@ default.furnace_inactive_formspec =
minetest.register_node("default:furnace", { minetest.register_node("default:furnace", {
description = "Furnace", description = "Furnace",
tile_images = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png", tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
"default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"}, "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=2}, groups = {cracky=2},
@ -1309,12 +1316,12 @@ minetest.register_node("default:furnace", {
minetest.register_node("default:furnace_active", { minetest.register_node("default:furnace_active", {
description = "Furnace", description = "Furnace",
tile_images = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png", tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
"default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"}, "default_furnace_side.png", "default_furnace_side.png", "default_furnace_front_active.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
light_source = 8, light_source = 8,
drop = "default:furnace", drop = "default:furnace",
groups = {cracky=2}, groups = {cracky=2, not_in_creative_inventory=1},
legacy_facedir_simple = true, legacy_facedir_simple = true,
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_construct = function(pos) on_construct = function(pos)
@ -1457,7 +1464,7 @@ minetest.register_abm({
minetest.register_node("default:cobble", { minetest.register_node("default:cobble", {
description = "Cobblestone", description = "Cobblestone",
tile_images = {"default_cobble.png"}, tiles = {"default_cobble.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
@ -1465,7 +1472,7 @@ minetest.register_node("default:cobble", {
minetest.register_node("default:mossycobble", { minetest.register_node("default:mossycobble", {
description = "Mossy Cobblestone", description = "Mossy Cobblestone",
tile_images = {"default_mossycobble.png"}, tiles = {"default_mossycobble.png"},
is_ground_content = true, is_ground_content = true,
groups = {cracky=3}, groups = {cracky=3},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
@ -1473,7 +1480,7 @@ minetest.register_node("default:mossycobble", {
minetest.register_node("default:steelblock", { minetest.register_node("default:steelblock", {
description = "Steel Block", description = "Steel Block",
tile_images = {"default_steel_block.png"}, tiles = {"default_steel_block.png"},
is_ground_content = true, is_ground_content = true,
groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2}, groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
@ -1481,7 +1488,7 @@ minetest.register_node("default:steelblock", {
minetest.register_node("default:nyancat", { minetest.register_node("default:nyancat", {
description = "Nyan Cat", description = "Nyan Cat",
tile_images = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png", tiles = {"default_nc_side.png", "default_nc_side.png", "default_nc_side.png",
"default_nc_side.png", "default_nc_back.png", "default_nc_front.png"}, "default_nc_side.png", "default_nc_back.png", "default_nc_front.png"},
inventory_image = "default_nc_front.png", inventory_image = "default_nc_front.png",
paramtype2 = "facedir", paramtype2 = "facedir",
@ -1492,7 +1499,7 @@ minetest.register_node("default:nyancat", {
minetest.register_node("default:nyancat_rainbow", { minetest.register_node("default:nyancat_rainbow", {
description = "Nyan Cat Rainbow", description = "Nyan Cat Rainbow",
tile_images = {"default_nc_rb.png"}, tiles = {"default_nc_rb.png"},
inventory_image = "default_nc_rb.png", inventory_image = "default_nc_rb.png",
groups = {cracky=2}, groups = {cracky=2},
sounds = default.node_sound_defaults(), sounds = default.node_sound_defaults(),
@ -1502,7 +1509,7 @@ minetest.register_node("default:sapling", {
description = "Sapling", description = "Sapling",
drawtype = "plantlike", drawtype = "plantlike",
visual_scale = 1.0, visual_scale = 1.0,
tile_images = {"default_sapling.png"}, tiles = {"default_sapling.png"},
inventory_image = "default_sapling.png", inventory_image = "default_sapling.png",
wield_image = "default_sapling.png", wield_image = "default_sapling.png",
paramtype = "light", paramtype = "light",
@ -1515,7 +1522,7 @@ minetest.register_node("default:apple", {
description = "Apple", description = "Apple",
drawtype = "plantlike", drawtype = "plantlike",
visual_scale = 1.0, visual_scale = 1.0,
tile_images = {"default_apple.png"}, tiles = {"default_apple.png"},
inventory_image = "default_apple.png", inventory_image = "default_apple.png",
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
@ -1529,7 +1536,7 @@ minetest.register_node("default:dry_shrub", {
description = "Dry Shrub", description = "Dry Shrub",
drawtype = "plantlike", drawtype = "plantlike",
visual_scale = 1.0, visual_scale = 1.0,
tile_images = {"default_dry_shrub.png"}, tiles = {"default_dry_shrub.png"},
inventory_image = "default_dry_shrub.png", inventory_image = "default_dry_shrub.png",
wield_image = "default_dry_shrub.png", wield_image = "default_dry_shrub.png",
paramtype = "light", paramtype = "light",
@ -1592,40 +1599,6 @@ minetest.register_craftitem("default:scorched_stuff", {
inventory_image = "default_scorched_stuff.png", inventory_image = "default_scorched_stuff.png",
}) })
--
-- Creative inventory
--
minetest.add_to_creative_inventory('default:pick_mese')
minetest.add_to_creative_inventory('default:pick_steel')
minetest.add_to_creative_inventory('default:axe_steel')
minetest.add_to_creative_inventory('default:shovel_steel')
minetest.add_to_creative_inventory('default:torch')
minetest.add_to_creative_inventory('default:cobble')
minetest.add_to_creative_inventory('default:dirt')
minetest.add_to_creative_inventory('default:stone')
minetest.add_to_creative_inventory('default:sand')
minetest.add_to_creative_inventory('default:sandstone')
minetest.add_to_creative_inventory('default:clay')
minetest.add_to_creative_inventory('default:brick')
minetest.add_to_creative_inventory('default:tree')
minetest.add_to_creative_inventory('default:wood')
minetest.add_to_creative_inventory('default:leaves')
minetest.add_to_creative_inventory('default:cactus')
minetest.add_to_creative_inventory('default:papyrus')
minetest.add_to_creative_inventory('default:bookshelf')
minetest.add_to_creative_inventory('default:glass')
minetest.add_to_creative_inventory('default:fence_wood')
minetest.add_to_creative_inventory('default:rail')
minetest.add_to_creative_inventory('default:mese')
minetest.add_to_creative_inventory('default:chest')
minetest.add_to_creative_inventory('default:furnace')
minetest.add_to_creative_inventory('default:sign_wall')
minetest.add_to_creative_inventory('default:water_source')
minetest.add_to_creative_inventory('default:lava_source')
minetest.add_to_creative_inventory('default:ladder')
-- --
-- Falling stuff -- Falling stuff
-- --
@ -1784,113 +1757,4 @@ function on_punchnode(p, node)
end end
minetest.register_on_punchnode(on_punchnode) minetest.register_on_punchnode(on_punchnode)
local function handle_give_command(cmd, giver, receiver, stackstring)
if not minetest.get_player_privs(giver)["give"] then
minetest.chat_send_player(giver, "error: you don't have permission to give")
return
end
minetest.debug("DEBUG: "..cmd..' invoked, stackstring="'..stackstring..'"')
minetest.log(cmd..' invoked, stackstring="'..stackstring..'"')
local itemstack = ItemStack(stackstring)
if itemstack:is_empty() then
minetest.chat_send_player(giver, 'error: cannot give an empty item')
return
elseif not itemstack:is_known() then
minetest.chat_send_player(giver, 'error: cannot give an unknown item')
return
end
local receiverref = minetest.env:get_player_by_name(receiver)
if receiverref == nil then
minetest.chat_send_player(giver, receiver..' is not a known player')
return
end
local leftover = receiverref:get_inventory():add_item("main", itemstack)
if leftover:is_empty() then
partiality = ""
elseif leftover:get_count() == itemstack:get_count() then
partiality = "could not be "
else
partiality = "partially "
end
-- The actual item stack string may be different from what the "giver"
-- entered (e.g. big numbers are always interpreted as 2^16-1).
stackstring = itemstack:to_string()
if giver == receiver then
minetest.chat_send_player(giver, '"'..stackstring
..'" '..partiality..'added to inventory.');
else
minetest.chat_send_player(giver, '"'..stackstring
..'" '..partiality..'added to '..receiver..'\'s inventory.');
minetest.chat_send_player(receiver, '"'..stackstring
..'" '..partiality..'added to inventory.');
end
end
minetest.register_on_chat_message(function(name, message)
--print("default on_chat_message: name="..dump(name).." message="..dump(message))
local cmd = "/giveme"
if message:sub(0, #cmd) == cmd then
local stackstring = string.match(message, cmd.." (.*)")
if stackstring == nil then
minetest.chat_send_player(name, 'usage: '..cmd..' stackstring')
return true -- Handled chat message
end
handle_give_command(cmd, name, name, stackstring)
return true
end
local cmd = "/give"
if message:sub(0, #cmd) == cmd then
local receiver, stackstring = string.match(message, cmd.." ([%a%d_-]+) (.*)")
if receiver == nil or stackstring == nil then
minetest.chat_send_player(name, 'usage: '..cmd..' name stackstring')
return true -- Handled chat message
end
handle_give_command(cmd, name, receiver, stackstring)
return true
end
local cmd = "/spawnentity"
if message:sub(0, #cmd) == cmd then
if not minetest.get_player_privs(name)["give"] then
minetest.chat_send_player(name, "you don't have permission to spawn (give)")
return true -- Handled chat message
end
if not minetest.get_player_privs(name)["interact"] then
minetest.chat_send_player(name, "you don't have permission to interact")
return true -- Handled chat message
end
local entityname = string.match(message, cmd.." (.*)")
if entityname == nil then
minetest.chat_send_player(name, 'usage: '..cmd..' entityname')
return true -- Handled chat message
end
print(cmd..' invoked, entityname="'..entityname..'"')
local player = minetest.env:get_player_by_name(name)
if player == nil then
print("Unable to spawn entity, player is nil")
return true -- Handled chat message
end
local p = player:getpos()
p.y = p.y + 1
minetest.env:add_entity(p, entityname)
minetest.chat_send_player(name, '"'..entityname
..'" spawned.');
return true -- Handled chat message
end
local cmd = "/pulverize"
if message:sub(0, #cmd) == cmd then
local player = minetest.env:get_player_by_name(name)
if player == nil then
print("Unable to pulverize, player is nil")
return true -- Handled chat message
end
if player:get_wielded_item():is_empty() then
minetest.chat_send_player(name, 'Unable to pulverize, no item in hand.')
else
player:set_wielded_item(nil)
minetest.chat_send_player(name, 'An item was pulverized.')
end
return true
end
end)
-- END -- END

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 B

After

Width:  |  Height:  |  Size: 203 B

View File

@ -18,11 +18,11 @@ Modifications:
Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com> Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version. (at your option) any later version.
http://www.gnu.org/licenses/gpl-2.0.html http://www.gnu.org/licenses/lgpl-2.1.html
License of media (textures and sounds) License of media (textures and sounds)
-------------------------------------- --------------------------------------

View File

@ -107,12 +107,12 @@ end
local on_door_placed = function( pos, node, placer ) local on_door_placed = function( pos, node, placer )
if node.name ~= 'doors:door_wood' then return end if node.name ~= 'doors:door_wood' then return end
upos = { x = pos.x, y = pos.y - 1, z = pos.z } local upos = { x = pos.x, y = pos.y - 1, z = pos.z }
apos = { x = pos.x, y = pos.y + 1, z = pos.z } local apos = { x = pos.x, y = pos.y + 1, z = pos.z }
und = minetest.env:get_node( upos ) local und = minetest.env:get_node( upos )
abv = minetest.env:get_node( apos ) local abv = minetest.env:get_node( apos )
dir = placer:get_look_dir() local dir = placer:get_look_dir()
if round( dir.x ) == 1 then if round( dir.x ) == 1 then
newparam = WALLMX newparam = WALLMX
@ -140,8 +140,8 @@ end
local on_door_punched = function( pos, node, puncher ) local on_door_punched = function( pos, node, puncher )
if string.find( node.name, 'doors:door_wood' ) == nil then return end if string.find( node.name, 'doors:door_wood' ) == nil then return end
upos = { x = pos.x, y = pos.y - 1, z = pos.z } local upos = { x = pos.x, y = pos.y - 1, z = pos.z }
apos = { x = pos.x, y = pos.y + 1, z = pos.z } local apos = { x = pos.x, y = pos.y + 1, z = pos.z }
if string.find( node.name, '_c', -2 ) ~= nil then if string.find( node.name, '_c', -2 ) ~= nil then
if node.param2 == WALLPX then if node.param2 == WALLPX then
@ -185,8 +185,8 @@ local on_door_punched = function( pos, node, puncher )
end end
local on_door_digged = function( pos, node, digger ) local on_door_digged = function( pos, node, digger )
upos = { x = pos.x, y = pos.y - 1, z = pos.z } local upos = { x = pos.x, y = pos.y - 1, z = pos.z }
apos = { x = pos.x, y = pos.y + 1, z = pos.z } local apos = { x = pos.x, y = pos.y + 1, z = pos.z }
if ( node.name == 'doors:door_wood_a_c' ) or ( node.name == 'doors:door_wood_a_o' ) then if ( node.name == 'doors:door_wood_a_c' ) or ( node.name == 'doors:door_wood_a_o' ) then
minetest.env:remove_node( upos ) minetest.env:remove_node( upos )

15
mods/dye/README.txt Normal file
View File

@ -0,0 +1,15 @@
Minetest 0.4 mod: dye
======================
See init.lua for documentation.
License of source code and media files:
---------------------------------------
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.

0
mods/dye/depends.txt Normal file
View File

134
mods/dye/init.lua Normal file
View File

@ -0,0 +1,134 @@
-- minetest/dye/init.lua
-- To make recipes that will work with any dye ever made by anybody, define
-- them based on groups.
-- You can select any group of groups, based on your need for amount of colors.
-- basecolor: 9, excolor: 17, unicolor: 89
--
-- Example of one shapeless recipe using a color group:
-- Note: As this uses basecolor_*, you'd need 9 of these.
-- minetest.register_craft({
-- type = "shapeless",
-- output = '<mod>:item_yellow',
-- recipe = {'<mod>:item_no_color', 'group:basecolor_yellow'},
-- })
-- Other mods can use these for looping through available colors
local dye = {}
dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"}
dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"}
-- Base color groups:
-- - basecolor_white
-- - basecolor_grey
-- - basecolor_black
-- - basecolor_red
-- - basecolor_yellow
-- - basecolor_green
-- - basecolor_cyan
-- - basecolor_blue
-- - basecolor_magenta
-- Extended color groups (* = equal to a base color):
-- * excolor_white
-- - excolor_lightgrey
-- * excolor_grey
-- - excolor_darkgrey
-- * excolor_black
-- * excolor_red
-- - excolor_orange
-- * excolor_yellow
-- - excolor_lime
-- * excolor_green
-- - excolor_aqua
-- * excolor_cyan
-- - excolor_sky_blue
-- * excolor_blue
-- - excolor_violet
-- * excolor_magenta
-- - excolor_red_violet
-- The whole unifieddyes palette as groups:
-- - unicolor_<excolor>
-- For the following, no white/grey/black is allowed:
-- - unicolor_medium_<excolor>
-- - unicolor_dark_<excolor>
-- - unicolor_light_<excolor>
-- - unicolor_<excolor>_s50
-- - unicolor_medium_<excolor>_s50
-- - unicolor_dark_<excolor>_s50
-- Local stuff
local dyelocal = {}
-- This collection of colors is partly a historic thing, partly something else.
dyelocal.dyes = {
{"white", "White dye", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1}},
{"grey", "Grey dye", {dye=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1}},
{"dark_grey", "Dark grey dye", {dye=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1}},
{"black", "Black dye", {dye=1, basecolor_black=1, excolor_black=1, unicolor_black=1}},
{"violet", "Violet dye", {dye=1, basecolor_magenta=1, excolor_violet=1, unicolor_violet=1}},
{"blue", "Blue dye", {dye=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1}},
{"cyan", "Cyan dye", {dye=1, basecolor_cyan=1, excolor_cyan=1, unicolor_cyan=1}},
{"dark_green", "Dark green dye",{dye=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}},
{"green", "Green dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_green=1}},
{"yellow", "Yellow dye", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}},
{"brown", "Brown dye", {dye=1, basecolor_yellow=1, excolor_orange=1, unicolor_dark_orange=1}},
{"orange", "Orange dye", {dye=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}},
{"red", "Red dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_red=1}},
{"magenta", "Magenta dye", {dye=1, basecolor_magenta=1, excolor_red_violet=1,unicolor_red_violet=1}},
{"pink", "Pink dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}},
}
-- Define items
for _, row in ipairs(dyelocal.dyes) do
local name = row[1]
local description = row[2]
local groups = row[3]
local item_name = "dye:"..name
local item_image = "dye_"..name..".png"
minetest.register_craftitem(item_name, {
inventory_image = item_image,
description = description,
groups = groups
})
end
-- Mix recipes
-- Just mix everything to everything somehow sanely
dyelocal.mixbases = {"magenta", "red", "orange", "brown", "yellow", "green", "dark_green", "cyan", "blue", "violet", "black", "dark_grey", "grey", "white"}
dyelocal.mixes = {
-- magenta, red, orange, brown, yellow, green, dark_green, cyan, blue, violet, black, dark_grey, grey, white
white = {"pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet", "grey", "grey", "white", "white"},
grey = {"pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "pink", "dark_grey","grey", "grey"},
dark_grey={"brown","brown", "brown", "brown", "brown","dark_green","dark_green","blue","blue","violet","black", "black"},
black = {"black", "black", "black", "black", "black", "black", "black", "black", "black", "black", "black"},
violet= {"magenta","magenta","red", "brown", "red", "cyan", "brown", "blue", "violet","violet"},
blue = {"violet", "magenta","brown","brown","dark_green","cyan","cyan", "cyan", "blue"},
cyan = {"blue","brown","dark_green","dark_grey","green","cyan","dark_green","cyan"},
dark_green={"brown","brown","brown", "brown", "green", "green", "dark_green"},
green = {"brown", "yellow","yellow","dark_green","green","green"},
yellow= {"red", "orange", "yellow","orange", "yellow"},
brown = {"brown", "brown","orange", "brown"},
orange= {"red", "orange","orange"},
red = {"magenta","red"},
magenta={"magenta"},
}
for one,results in pairs(dyelocal.mixes) do
for i,result in ipairs(results) do
local another = dyelocal.mixbases[i]
minetest.register_craft({
type = "shapeless",
output = 'dye:'..result..' 2',
recipe = {'dye:'..one, 'dye:'..another},
})
end
end
-- Hide dyelocal
dyelocal = nil
-- EOF

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

View File

@ -6,11 +6,11 @@ License of source code:
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com> Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version. (at your option) any later version.
http://www.gnu.org/licenses/gpl-2.0.html http://www.gnu.org/licenses/lgpl-2.1.html
License of media (textures and sounds) License of media (textures and sounds)
-------------------------------------- --------------------------------------

View File

@ -5,7 +5,7 @@ minetest.register_node("fire:basic_flame", {
drawtype = "glasslike", drawtype = "glasslike",
tile_images = {"fire_basic_flame.png"}, tile_images = {"fire_basic_flame.png"},
light_source = 14, light_source = 14,
groups = {igniter=3,dig_immediate=3}, groups = {igniter=2,dig_immediate=3},
drop = '', drop = '',
walkable = false, walkable = false,
}) })

View File

@ -102,6 +102,7 @@ minetest.register_craftitem(":cooked_rat", {
minetest.register_craftitem(":firefly", { minetest.register_craftitem(":firefly", {
description = "Firefly", description = "Firefly",
inventory_image = "firefly.png", inventory_image = "firefly.png",
groups = {not_in_creative_inventory=1},
on_drop = function(item, dropper, pos) on_drop = function(item, dropper, pos)
minetest.env:add_firefly(pos) minetest.env:add_firefly(pos)
item:take_item() item:take_item()

26
mods/stairs/README.txt Normal file
View File

@ -0,0 +1,26 @@
Minetest 0.4 mod: stairs
=========================
License of source code:
-----------------------
Copyright (C) 2011-2012 Kahrl <kahrl@gmx.net>
Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
http://www.gnu.org/licenses/lgpl-2.1.html
License of media (textures and sounds)
--------------------------------------
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/
Authors of media files
-----------------------
Everything not listed in here:
Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>

1
mods/stairs/depends.txt Normal file
View File

@ -0,0 +1 @@
default

146
mods/stairs/init.lua Normal file
View File

@ -0,0 +1,146 @@
-- Minetest 0.4 mod: stairs
-- See README.txt for licensing and other information.
stairs = {}
-- Node will be called stairs:stair_<subname>
function stairs.register_stair(subname, recipeitem, groups, images, description)
minetest.register_node("stairs:stair_" .. subname, {
description = description,
drawtype = "nodebox",
tiles = images,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.5, 0.5},
},
},
})
minetest.register_craft({
output = 'stairs:stair_' .. subname .. ' 4',
recipe = {
{recipeitem, "", ""},
{recipeitem, recipeitem, ""},
{recipeitem, recipeitem, recipeitem},
},
})
-- Flipped recipe for the silly minecrafters
minetest.register_craft({
output = 'stairs:stair_' .. subname .. ' 4',
recipe = {
{"", "", recipeitem},
{"", recipeitem, recipeitem},
{recipeitem, recipeitem, recipeitem},
},
})
end
-- Node will be called stairs:slab_<subname>
function stairs.register_slab(subname, recipeitem, groups, images, description)
minetest.register_node("stairs:slab_" .. subname, {
description = description,
drawtype = "nodebox",
tiles = images,
paramtype = "light",
is_ground_content = true,
groups = groups,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return itemstack
end
-- If it's being placed on an another similar one, replace it with
-- a full block
local slabpos = nil
local slabnode = nil
local p0 = pointed_thing.under
local p1 = pointed_thing.above
local n0 = minetest.env:get_node(p0)
local n1 = minetest.env:get_node(p1)
if n0.name == "stairs:slab_" .. subname then
slabpos = p0
slabnode = n0
elseif n1.name == "stairs:slab_" .. subname then
slabpos = p1
slabnode = n1
end
if slabpos then
-- Remove the slab at slabpos
minetest.env:remove_node(slabpos)
-- Make a fake stack of a single item and try to place it
local fakestack = ItemStack(recipeitem)
pointed_thing.above = slabpos
fakestack = minetest.item_place(fakestack, placer, pointed_thing)
-- If the item was taken from the fake stack, decrement original
if not fakestack or fakestack:is_empty() then
itemstack:take_item(1)
-- Else put old node back
else
minetest.env:set_node(slabpos, slabnode)
end
return itemstack
end
-- Otherwise place regularly
return minetest.item_place(itemstack, placer, pointed_thing)
end,
})
minetest.register_craft({
output = 'stairs:slab_' .. subname .. ' 3',
recipe = {
{recipeitem, recipeitem, recipeitem},
},
})
end
-- Nodes will be called stairs:{stair,slab}_<subname>
function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab)
stairs.register_stair(subname, recipeitem, groups, images, desc_stair)
stairs.register_slab(subname, recipeitem, groups, images, desc_slab)
end
stairs.register_stair_and_slab("wood", "default:wood",
{snappy=2,choppy=2,oddly_breakable_by_hand=2},
{"default_wood.png"},
"Wooden stair",
"Wooden slab")
stairs.register_stair_and_slab("stone", "default:stone",
{cracky=3},
{"default_stone.png"},
"Stone stair",
"Stone slab")
stairs.register_stair_and_slab("cobble", "default:cobble",
{cracky=3},
{"default_cobble.png"},
"Cobble stair",
"Cobble slab")
stairs.register_stair_and_slab("brick", "default:brick",
{cracky=3},
{"default_brick.png"},
"Brick stair",
"Brick slab")
stairs.register_stair_and_slab("sandstone", "default:sandstone",
{crumbly=2,cracky=2},
{"default_sandstone.png"},
"Sandstone stair",
"Sandstone slab")

28
mods/wool/README.txt Normal file
View File

@ -0,0 +1,28 @@
Minetest 0.4 mod: wool
======================
Mostly backward-compatible with jordach's 16-color wool mod.
License of source code:
-----------------------
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
License of media (textures and sounds)
--------------------------------------
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
http://creativecommons.org/licenses/by-sa/3.0/
Authors of media files
-----------------------
Cisoun:
- wool_black.png wool_brown.png wool_dark_green.png wool_green.png
- wool_magenta.png wool_pink.png wool_violet.png wool_yellow.png wool_blue.png
- wool_cyan.png wool_dark_grey.png wool_grey.png wool_orange.png wool_red.png
- wool_white.png

0
mods/wool/depends.txt Normal file
View File

48
mods/wool/init.lua Normal file
View File

@ -0,0 +1,48 @@
-- minetest/wool/init.lua
-- Backwards compatibility with jordach's 16-color wool mod
minetest.register_alias("wool:dark_blue", "wool:blue")
minetest.register_alias("wool:gold", "wool:yellow")
local wool = {}
-- This uses a trick: you can first define the recipes using all of the base
-- colors, and then some recipes using more specific colors for a few non-base
-- colors available. When crafting, the last recipes will be checked first.
wool.dyes = {
{"white", "White", nil},
{"grey", "Grey", "basecolor_grey"},
{"black", "Black", "basecolor_black"},
{"red", "Red", "basecolor_red"},
{"yellow", "Yellow", "basecolor_yellow"},
{"green", "Green", "basecolor_green"},
{"cyan", "Cyan", "basecolor_cyan"},
{"blue", "Blue", "basecolor_blue"},
{"magenta", "Magenta", "basecolor_magenta"},
{"orange", "Orange", "excolor_orange"},
{"violet", "Violet", "excolor_violet"},
{"brown", "Brown", "unicolor_dark_orange"},
{"pink", "Pink", "unicolor_light_red"},
{"dark_grey", "Dark Grey", "unicolor_darkgrey"},
{"dark_green", "Dark Green", "unicolor_dark_green"},
}
for _, row in ipairs(wool.dyes) do
local name = row[1]
local desc = row[2]
local craft_color_group = row[3]
-- Node Definition
minetest.register_node("wool:"..name, {
description = desc.." Wool",
tile_images = {"wool_"..name..".png"},
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,flammable=3},
})
if craft_color_group then
-- Crafting from dye and white wool
minetest.register_craft({
type = "shapeless",
output = 'wool:'..name..' 16',
recipe = {'group:dye,'..craft_color_group, 'wool:white'},
})
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB