Merge pull request #1 from minetest/master

Update to latest commit
This commit is contained in:
hyperdriveguy 2016-02-06 21:49:37 -07:00
commit bd8bfe47a1
16 changed files with 143 additions and 62 deletions

View file

@ -110,6 +110,24 @@ doors.register_trapdoor(name, def)
will be overwritten by the trapdoor registration function
}
Fence API
---------
Allows creation of new fences with "fencelike" drawtype.
default.register_fence(name, item definition)
^ Registers a new fence. Custom fields texture and material are required, as
^ are name and description. The rest is optional. You can pass most normal
^ nodedef fields here except drawtype. The fence group will always be added
^ for this node.
#fence definition
name = "default:fence_wood",
description = "Wooden Fence",
texture = "default_wood.png",
material = "default:wood",
groups = {choppy=2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults(),
Farming API
-----------
The farming API allows you to easily register plants and hoes.

View file

@ -36,7 +36,7 @@ local boat = {
physical = true,
collisionbox = {-0.5, -0.35, -0.5, 0.5, 0.3, 0.5},
visual = "mesh",
mesh = "boat.obj",
mesh = "boats_boat.obj",
textures = {"default_wood.png"},
driver = nil,
@ -215,8 +215,8 @@ minetest.register_entity("boats:boat", boat)
minetest.register_craftitem("boats:boat", {
description = "Boat",
inventory_image = "boat_inventory.png",
wield_image = "boat_wield.png",
inventory_image = "boats_inventory.png",
wield_image = "boats_wield.png",
wield_scale = {x = 2, y = 2, z = 1},
liquids_pointable = true,

View file

Before

Width:  |  Height:  |  Size: 851 B

After

Width:  |  Height:  |  Size: 851 B

View file

Before

Width:  |  Height:  |  Size: 546 B

After

Width:  |  Height:  |  Size: 546 B

View file

@ -1,14 +1,16 @@
-- minetest/creative/init.lua
creative_inventory = {}
creative = {}
local player_inventory = {}
-- Create detached creative inventory after loading all mods
creative_inventory.init_creative_inventory = function(player)
creative.init_creative_inventory = function(player)
local player_name = player:get_player_name()
creative_inventory[player_name] = {}
creative_inventory[player_name].size = 0
creative_inventory[player_name].filter = nil
creative_inventory[player_name].start_i = 1
player_inventory[player_name] = {}
player_inventory[player_name].size = 0
player_inventory[player_name].filter = nil
player_inventory[player_name].start_i = 1
local inv = minetest.create_detached_inventory("creative_" .. player_name, {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
@ -41,8 +43,8 @@ creative_inventory.init_creative_inventory = function(player)
end,
})
creative_inventory.update(player_name, nil, 2)
--print("creative inventory size: "..dump(creative_inventory[player_name].size))
creative.update_creative_inventory(player_name, nil, 2)
--print("creative inventory size: "..dump(player_inventory[player_name].size))
end
local function tab_category(tab_id)
@ -58,14 +60,15 @@ local function tab_category(tab_id)
return id_category[tab_id] or id_category[2]
end
function creative_inventory.update(player_name, filter, tab_id)
function creative.update_creative_inventory(player_name, filter, tab_id)
local creative_list = {}
local inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name})
for name, def in pairs(tab_category(tab_id)) do
if not (def.groups.not_in_creative_inventory == 1) and
def.description and def.description ~= "" and
(not filter or def.name:find(filter, 1, true)) then
(not filter or def.name:find(filter, 1, true) or
def.description:lower():find(filter, 1, true)) then
creative_list[#creative_list+1] = name
end
end
@ -73,7 +76,7 @@ function creative_inventory.update(player_name, filter, tab_id)
table.sort(creative_list)
inv:set_size("main", #creative_list)
inv:set_list("main", creative_list)
creative_inventory[player_name].size = #creative_list
player_inventory[player_name].size = #creative_list
end
-- Create the trash field
@ -93,16 +96,16 @@ local trash = minetest.create_detached_inventory("creative_trash", {
})
trash:set_size("main", 1)
creative_inventory.set_creative_formspec = function(player, start_i, pagenum, tab_id)
creative.set_creative_formspec = function(player, start_i, pagenum, tab_id)
local player_name = player:get_player_name()
local filter = creative_inventory[player_name].filter or ""
local filter = player_inventory[player_name].filter or ""
pagenum = math.floor(pagenum)
local pagemax = math.floor((creative_inventory[player_name].size - 1) / (3*8) + 1)
local pagemax = math.floor((player_inventory[player_name].size - 1) / (3*8) + 1)
tab_id = tab_id or 2
player:set_inventory_formspec([[
size[8,8.6]
image[4.06,3.4;0.8,0.8;trash_icon.png]
image[4.06,3.4;0.8,0.8;creative_trash_icon.png]
list[current_player;main;0,4.7;8,1;]
list[current_player;main;0,5.85;8,3;8]
list[detached:creative_trash;main;4,3.3;1,1;]
@ -126,7 +129,7 @@ creative_inventory.set_creative_formspec = function(player, start_i, pagenum, ta
)
end
creative_inventory.set_crafting_formspec = function(player)
creative.set_crafting_formspec = function(player)
player:set_inventory_formspec([[
size[8,8.6]
list[current_player;craft;2,0.75;3,3;]
@ -134,7 +137,7 @@ creative_inventory.set_crafting_formspec = function(player)
list[current_player;main;0,4.7;8,1;]
list[current_player;main;0,5.85;8,3;8]
list[detached:creative_trash;main;0,2.75;1,1;]
image[0.06,2.85;0.8,0.8;trash_icon.png]
image[0.06,2.85;0.8,0.8;creative_trash_icon.png]
image[5,1.75;1,1;gui_furnace_arrow_bg.png^[transformR270]
tabheader[0,0;tabs;Crafting,All,Nodes,Tools,Items;1;true;false]
listring[current_player;main]
@ -150,8 +153,8 @@ minetest.register_on_joinplayer(function(player)
if not minetest.setting_getbool("creative_mode") then
return
end
creative_inventory.init_creative_inventory(player)
creative_inventory.set_creative_formspec(player, 0, 1, 2)
creative.init_creative_inventory(player)
creative.set_creative_formspec(player, 0, 1, 2)
end)
minetest.register_on_player_receive_fields(function(player, formname, fields)
@ -164,28 +167,28 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local filter = formspec:match("filter;;([%w_:]+)") or ""
local start_i = formspec:match("list%[detached:creative_".. player_name ..";.*;(%d+)%]")
local tab_id = tonumber(formspec:match("tabheader%[.*;(%d+)%;.*%]"))
local inv_size = creative_inventory[player_name].size
local inv_size = player_inventory[player_name].size
start_i = tonumber(start_i) or 0
if fields.quit then
if tab_id == 1 then
creative_inventory.set_crafting_formspec(player)
creative.set_crafting_formspec(player)
end
elseif fields.tabs then
if tonumber(fields.tabs) == 1 then
creative_inventory.set_crafting_formspec(player)
creative.set_crafting_formspec(player)
else
creative_inventory.update(player_name, filter, tonumber(fields.tabs))
creative_inventory.set_creative_formspec(player, 0, 1, tonumber(fields.tabs))
creative.update_creative_inventory(player_name, filter, tonumber(fields.tabs))
creative.set_creative_formspec(player, 0, 1, tonumber(fields.tabs))
end
elseif fields.clear then
creative_inventory[player_name].filter = ""
creative_inventory.update(player_name, nil, tab_id)
creative_inventory.set_creative_formspec(player, 0, 1, tab_id)
player_inventory[player_name].filter = ""
creative.update_creative_inventory(player_name, nil, tab_id)
creative.set_creative_formspec(player, 0, 1, tab_id)
elseif fields.search then
creative_inventory[player_name].filter = fields.filter:lower()
creative_inventory.update(player_name, fields.filter:lower(), tab_id)
creative_inventory.set_creative_formspec(player, 0, 1, tab_id)
player_inventory[player_name].filter = fields.filter:lower()
creative.update_creative_inventory(player_name, fields.filter:lower(), tab_id)
creative.set_creative_formspec(player, 0, 1, tab_id)
else
if fields.creative_prev then
start_i = start_i - 3*8
@ -202,7 +205,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end
creative_inventory.set_creative_formspec(player, start_i, start_i / (3*8) + 1, tab_id)
creative.set_creative_formspec(player, start_i, start_i / (3*8) + 1, tab_id)
end
end)

View file

Before

Width:  |  Height:  |  Size: 179 B

After

Width:  |  Height:  |  Size: 179 B

View file

@ -42,14 +42,6 @@ minetest.register_craft({
}
})
minetest.register_craft({
output = 'default:fence_wood 2',
recipe = {
{'group:stick', 'group:stick', 'group:stick'},
{'group:stick', 'group:stick', 'group:stick'},
}
})
minetest.register_craft({
output = 'default:sign_wall',
recipe = {

View file

@ -209,6 +209,51 @@ function default.dig_up(pos, node, digger)
end
--
-- Fence registration helper
--
function default.register_fence(name, def)
minetest.register_craft({
output = name .. " 4",
recipe = {
{ def.material, 'group:stick', def.material },
{ def.material, 'group:stick', def.material },
}
})
local fence_texture = "default_fence_overlay.png^" .. def.texture ..
"^default_fence_overlay.png^[makealpha:255,126,126"
-- Allow almost everything to be overridden
local default_fields = {
paramtype = "light",
drawtype = "fencelike",
inventory_image = fence_texture,
wield_image = fence_texture,
tiles = { def.texture },
sunlight_propagates = true,
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
},
groups = {},
}
for k, v in pairs(default_fields) do
if not def[k] then
def[k] = v
end
end
-- Always add to the fence group, even if no group provided
def.groups.fence = 1
def.texture = nil
def.material = nil
minetest.register_node(name, def)
end
--
-- Leafdecay
--

View file

@ -1185,8 +1185,8 @@ function default.register_decorations()
place_on = {"default:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0.01,
scale = -0.02,
offset = 0.0,
scale = -0.03,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,
@ -1205,8 +1205,8 @@ function default.register_decorations()
place_on = {"default:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0.0005,
scale = -0.001,
offset = 0.0,
scale = -0.0015,
spread = {x = 250, y = 250, z = 250},
seed = 2,
octaves = 3,

View file

@ -151,6 +151,10 @@ default:sign_wall
default:ladder
default:fence_wood
default:fence_acacia_wood
default:fence_junglewood
default:fence_pine_wood
default:fence_aspen_wood
default:glass
default:obsidian_glass
@ -1674,26 +1678,45 @@ minetest.register_node("default:ladder", {
sounds = default.node_sound_wood_defaults(),
})
local fence_texture =
"default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126"
minetest.register_node("default:fence_wood", {
default.register_fence("default:fence_wood", {
description = "Wooden Fence",
drawtype = "fencelike",
tiles = {"default_wood.png"},
inventory_image = fence_texture,
wield_image = fence_texture,
paramtype = "light",
sunlight_propagates = true,
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
},
texture = "default_wood.png",
material = "default:wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults(),
sounds = default.node_sound_wood_defaults()
})
default.register_fence("default:fence_acacia_wood", {
description = "Acacia Fence",
texture = "default_acacia_wood.png",
material = "default:acacia_wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
default.register_fence("default:fence_junglewood", {
description = "Junglewood Fence",
texture = "default_junglewood.png",
material = "default:junglewood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
default.register_fence("default:fence_pine_wood", {
description = "Pine Fence",
texture = "default_pine_wood.png",
material = "default:pine_wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
default.register_fence("default:fence_aspen_wood", {
description = "Aspen Fence",
texture = "default_aspen_wood.png",
material = "default:aspen_wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
minetest.register_node("default:glass", {
description = "Glass",