fix mergeconflicts

This commit is contained in:
Milan* 2017-07-30 12:15:29 +02:00
commit 8a3f06a18f
47 changed files with 1139 additions and 330 deletions

View file

@ -155,7 +155,8 @@ The doors mod allows modders to register custom doors and trapdoors.
### Fence gate definition ### Fence gate definition
description = "Wooden Fence Gate", description = "Wooden Fence Gate",
texture = "default_wood.png", texture = "default_wood.png", -- `backface_culling` will automatically be
-- set to `true` if not specified.
material = "default:wood", material = "default:wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = default.node_sound_wood_defaults(), -- optional sounds = default.node_sound_wood_defaults(), -- optional
@ -591,6 +592,48 @@ Default constants
`default.LIGHT_MAX` The maximum light level (see [Node definition] light_source) `default.LIGHT_MAX` The maximum light level (see [Node definition] light_source)
GUI and formspecs
-----------------
`default.get_hotbar_bg(x, y)`
* Get the hotbar background as string, containing the formspec elements
* x: Horizontal position in the formspec
* y: Vertical position in the formspec
`default.gui_bg`
* Background color formspec element
`default.gui_bg_img`
* Image overlay formspec element for the background to use in formspecs
`default.gui_slots`
* `listcolors` formspec element that is used to format the slots in formspecs
`default.gui_survival_form`
* Entire formspec for the survival inventory
`default.get_chest_formspec(pos)`
* Get the chest formspec using the defined GUI elements
* pos: Location of the node
`default.get_furnace_active_formspec(fuel_percent, item_percent)`
* Get the active furnace formspec using the defined GUI elements
* fuel_percent: Percent of how much the fuel is used
* item_percent: Percent of how much the item is cooked
`default.get_furnace_inactive_formspec()`
* Get the inactive furnace formspec using the defined GUI elements
Player API Player API
---------- ----------

View file

@ -1,7 +1,7 @@
local pi = math.pi local pi = math.pi
local player_in_bed = 0 local player_in_bed = 0
local is_sp = minetest.is_singleplayer() local is_sp = minetest.is_singleplayer()
local enable_respawn = minetest.setting_getbool("enable_bed_respawn") local enable_respawn = minetest.settings:get_bool("enable_bed_respawn")
if enable_respawn == nil then if enable_respawn == nil then
enable_respawn = true enable_respawn = true
end end
@ -22,7 +22,7 @@ local function get_look_yaw(pos)
end end
local function is_night_skip_enabled() local function is_night_skip_enabled()
local enable_night_skip = minetest.setting_getbool("enable_bed_night_skip") local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip")
if enable_night_skip == nil then if enable_night_skip == nil then
enable_night_skip = true enable_night_skip = true
end end

View file

@ -21,8 +21,8 @@ local bones_formspec =
"listring[current_player;main]" .. "listring[current_player;main]" ..
default.get_hotbar_bg(0,4.85) default.get_hotbar_bg(0,4.85)
local share_bones_time = tonumber(minetest.setting_get("share_bones_time")) or 1200 local share_bones_time = tonumber(minetest.settings:get("share_bones_time")) or 1200
local share_bones_time_early = tonumber(minetest.setting_get("share_bones_time_early")) or share_bones_time / 4 local share_bones_time_early = tonumber(minetest.settings:get("share_bones_time_early")) or share_bones_time / 4
minetest.register_node("bones:bones", { minetest.register_node("bones:bones", {
description = "Bones", description = "Bones",
@ -161,7 +161,7 @@ end
minetest.register_on_dieplayer(function(player) minetest.register_on_dieplayer(function(player)
local bones_mode = minetest.setting_get("bones_mode") or "bones" local bones_mode = minetest.settings:get("bones_mode") or "bones"
if bones_mode ~= "bones" and bones_mode ~= "drop" and bones_mode ~= "keep" then if bones_mode ~= "bones" and bones_mode ~= "drop" and bones_mode ~= "keep" then
bones_mode = "bones" bones_mode = "bones"
end end

View file

@ -58,7 +58,8 @@ end
function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
local pos = self.object:getpos() local pos = self.object:getpos()
if not self.railtype then local vel = self.object:getvelocity()
if not self.railtype or vector.equals(vel, {x=0, y=0, z=0}) then
local node = minetest.get_node(pos).name local node = minetest.get_node(pos).name
self.railtype = minetest.get_item_group(node, "connect_to_raillike") self.railtype = minetest.get_item_group(node, "connect_to_raillike")
end end
@ -105,7 +106,6 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
return return
end end
-- Player punches cart to alter velocity -- Player punches cart to alter velocity
local vel = self.object:getvelocity()
if puncher:get_player_name() == self.driver then if puncher:get_player_name() == self.driver then
if math.abs(vel.x + vel.z) > carts.punch_speed_max then if math.abs(vel.x + vel.z) > carts.punch_speed_max then
return return

View file

@ -211,7 +211,12 @@ end
function carts:get_rail_groups(additional_groups) function carts:get_rail_groups(additional_groups)
-- Get the default rail groups and add more when a table is given -- Get the default rail groups and add more when a table is given
local groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1} local groups = {
dig_immediate = 2,
attached_node = 1,
rail = 1,
connect_to_raillike = minetest.raillike_group("rail")
}
if type(additional_groups) == "table" then if type(additional_groups) == "table" then
for k, v in pairs(additional_groups) do for k, v in pairs(additional_groups) do
groups[k] = v groups[k] = v

View file

@ -22,7 +22,7 @@ minetest.register_alias("default:rail", "carts:rail")
carts:register_rail("carts:powerrail", { carts:register_rail("carts:powerrail", {
description = "Powered rail", description = "Powered Rail",
tiles = { tiles = {
"carts_rail_straight_pwr.png", "carts_rail_curved_pwr.png", "carts_rail_straight_pwr.png", "carts_rail_curved_pwr.png",
"carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png" "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"
@ -41,7 +41,7 @@ minetest.register_craft({
carts:register_rail("carts:brakerail", { carts:register_rail("carts:brakerail", {
description = "Brake rail", description = "Brake Rail",
tiles = { tiles = {
"carts_rail_straight_brk.png", "carts_rail_curved_brk.png", "carts_rail_straight_brk.png", "carts_rail_curved_brk.png",
"carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png" "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png"

View file

@ -1,9 +1,15 @@
creative = {} creative = {}
local creative_mode_cache = minetest.setting_getbool("creative_mode") minetest.register_privilege("creative", {
description = "Allow player to use creative inventory",
give_to_singleplayer = false
})
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
function creative.is_enabled_for(name) function creative.is_enabled_for(name)
return creative_mode_cache return creative_mode_cache or
minetest.check_player_privs(name, {creative = true})
end end
dofile(minetest.get_modpath("creative") .. "/inventory.lua") dofile(minetest.get_modpath("creative") .. "/inventory.lua")

View file

@ -10,22 +10,25 @@ function creative.init_creative_inventory(player)
minetest.create_detached_inventory("creative_" .. player_name, { minetest.create_detached_inventory("creative_" .. player_name, {
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2) allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2)
if not to_list == "main" then local name = player2 and player2:get_player_name() or ""
return count if not creative.is_enabled_for(name) or
else to_list == "main" then
return 0 return 0
end end
return count
end, end,
allow_put = function(inv, listname, index, stack, player2) allow_put = function(inv, listname, index, stack, player2)
return 0 return 0
end, end,
allow_take = function(inv, listname, index, stack, player2) allow_take = function(inv, listname, index, stack, player2)
local name = player2 and player2:get_player_name() or ""
if not creative.is_enabled_for(name) then
return 0
end
return -1 return -1
end, end,
on_move = function(inv, from_list, from_index, to_list, to_index, count, player2) on_move = function(inv, from_list, from_index, to_list, to_index, count, player2)
end, end,
on_put = function(inv, listname, index, stack, player2)
end,
on_take = function(inv, listname, index, stack, player2) on_take = function(inv, listname, index, stack, player2)
if stack and stack:get_count() > 0 then if stack and stack:get_count() > 0 then
minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory") minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory")

View file

@ -190,6 +190,9 @@ minetest.register_craft({
} }
}) })
-- Axes
-- Recipes face left to match appearence in textures and inventory
minetest.register_craft({ minetest.register_craft({
output = 'default:axe_wood', output = 'default:axe_wood',
recipe = { recipe = {
@ -244,60 +247,6 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = 'default:axe_wood',
recipe = {
{'group:wood', 'group:wood'},
{'group:stick', 'group:wood'},
{'group:stick',''},
}
})
minetest.register_craft({
output = 'default:axe_stone',
recipe = {
{'group:stone', 'group:stone'},
{'group:stick', 'group:stone'},
{'group:stick', ''},
}
})
minetest.register_craft({
output = 'default:axe_steel',
recipe = {
{'default:steel_ingot', 'default:steel_ingot'},
{'group:stick', 'default:steel_ingot'},
{'group:stick', ''},
}
})
minetest.register_craft({
output = 'default:axe_bronze',
recipe = {
{'default:bronze_ingot', 'default:bronze_ingot'},
{'group:stick', 'default:bronze_ingot'},
{'group:stick', ''},
}
})
minetest.register_craft({
output = 'default:axe_mese',
recipe = {
{'default:mese_crystal', 'default:mese_crystal'},
{'group:stick', 'default:mese_crystal'},
{'group:stick', ''},
}
})
minetest.register_craft({
output = 'default:axe_diamond',
recipe = {
{'default:diamond', 'default:diamond'},
{'group:stick', 'default:diamond'},
{'group:stick', ''},
}
})
minetest.register_craft({ minetest.register_craft({
output = 'default:sword_wood', output = 'default:sword_wood',
recipe = { recipe = {

View file

@ -75,12 +75,16 @@ local function book_on_use(itemstack, user)
return itemstack return itemstack
end end
local max_text_size = 10000
local max_title_size = 80
local short_title_size = 35
minetest.register_on_player_receive_fields(function(player, formname, fields) minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "default:book" then return end if formname ~= "default:book" then return end
local inv = player:get_inventory() local inv = player:get_inventory()
local stack = player:get_wielded_item() local stack = player:get_wielded_item()
if fields.save and fields.title ~= "" and fields.text ~= "" then if fields.save and fields.title and fields.text
and fields.title ~= "" and fields.text ~= "" then
local new_stack, data local new_stack, data
if stack:get_name() ~= "default:book_written" then if stack:get_name() ~= "default:book_written" then
local count = stack:get_count() local count = stack:get_count()
@ -99,11 +103,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end end
if not data then data = {} end if not data then data = {} end
data.title = fields.title data.title = fields.title:sub(1, max_title_size)
data.owner = player:get_player_name() data.owner = player:get_player_name()
data.description = "\""..fields.title.."\" by "..data.owner local short_title = data.title
data.text = fields.text -- Don't bother triming the title if the trailing dots would make it longer
data.text_len = #data.text if #short_title > short_title_size + 3 then
short_title = short_title:sub(1, short_title_size) .. "..."
end
data.description = "\""..short_title.."\" by "..data.owner
data.text = fields.text:sub(1, max_text_size)
data.page = 1 data.page = 1
data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp) data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp)

View file

@ -140,7 +140,7 @@ default.cool_lava = function(pos, node)
{pos = pos, max_hear_distance = 16, gain = 0.25}) {pos = pos, max_hear_distance = 16, gain = 0.25})
end end
if minetest.setting_getbool("enable_lavacooling") ~= false then if minetest.settings:get_bool("enable_lavacooling") ~= false then
minetest.register_abm({ minetest.register_abm({
label = "Lava cooling", label = "Lava cooling",
nodenames = {"default:lava_source", "default:lava_flowing"}, nodenames = {"default:lava_source", "default:lava_flowing"},
@ -148,7 +148,9 @@ if minetest.setting_getbool("enable_lavacooling") ~= false then
interval = 1, interval = 1,
chance = 2, chance = 2,
catch_up = false, catch_up = false,
action = default.cool_lava, action = function(...)
default.cool_lava(...)
end,
}) })
end end
@ -231,7 +233,9 @@ minetest.register_abm({
neighbors = {"group:sand"}, neighbors = {"group:sand"},
interval = 12, interval = 12,
chance = 83, chance = 83,
action = default.grow_cactus action = function(...)
default.grow_cactus(...)
end
}) })
minetest.register_abm({ minetest.register_abm({
@ -240,7 +244,9 @@ minetest.register_abm({
neighbors = {"default:dirt", "default:dirt_with_grass"}, neighbors = {"default:dirt", "default:dirt_with_grass"},
interval = 14, interval = 14,
chance = 71, chance = 71,
action = default.grow_papyrus action = function(...)
default.grow_papyrus(...)
end
}) })

View file

@ -3,50 +3,49 @@
-- Formspecs -- Formspecs
-- --
local function active_formspec(fuel_percent, item_percent) function default.get_furnace_active_formspec(fuel_percent, item_percent)
local formspec = return "size[8,8.5]"..
"size[8,8.5]"..
default.gui_bg.. default.gui_bg..
default.gui_bg_img.. default.gui_bg_img..
default.gui_slots.. default.gui_slots..
"list[current_name;src;2.75,0.5;1,1;]".. "list[context;src;2.75,0.5;1,1;]"..
"list[current_name;fuel;2.75,2.5;1,1;]".. "list[context;fuel;2.75,2.5;1,1;]"..
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:".. "image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
(100-fuel_percent)..":default_furnace_fire_fg.png]".. (100-fuel_percent)..":default_furnace_fire_fg.png]"..
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]".. (item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
"list[current_name;dst;4.75,0.96;2,2;]".. "list[context;dst;4.75,0.96;2,2;]"..
"list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,4.25;8,1;]"..
"list[current_player;main;0,5.5;8,3;8]".. "list[current_player;main;0,5.5;8,3;8]"..
"listring[current_name;dst]".. "listring[context;dst]"..
"listring[current_player;main]".. "listring[current_player;main]"..
"listring[current_name;src]".. "listring[context;src]"..
"listring[current_player;main]".. "listring[current_player;main]"..
"listring[current_name;fuel]".. "listring[context;fuel]"..
"listring[current_player;main]".. "listring[current_player;main]"..
default.get_hotbar_bg(0, 4.25) default.get_hotbar_bg(0, 4.25)
return formspec
end end
local inactive_formspec = function default.get_furnace_inactive_formspec()
"size[8,8.5]".. return "size[8,8.5]"..
default.gui_bg.. default.gui_bg..
default.gui_bg_img.. default.gui_bg_img..
default.gui_slots.. default.gui_slots..
"list[current_name;src;2.75,0.5;1,1;]".. "list[context;src;2.75,0.5;1,1;]"..
"list[current_name;fuel;2.75,2.5;1,1;]".. "list[context;fuel;2.75,2.5;1,1;]"..
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]".. "image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]".. "image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
"list[current_name;dst;4.75,0.96;2,2;]".. "list[context;dst;4.75,0.96;2,2;]"..
"list[current_player;main;0,4.25;8,1;]".. "list[current_player;main;0,4.25;8,1;]"..
"list[current_player;main;0,5.5;8,3;8]".. "list[current_player;main;0,5.5;8,3;8]"..
"listring[current_name;dst]".. "listring[context;dst]"..
"listring[current_player;main]".. "listring[current_player;main]"..
"listring[current_name;src]".. "listring[context;src]"..
"listring[current_player;main]".. "listring[current_player;main]"..
"listring[current_name;fuel]".. "listring[context;fuel]"..
"listring[current_player;main]".. "listring[current_player;main]"..
default.get_hotbar_bg(0, 4.25) default.get_hotbar_bg(0, 4.25)
end
-- --
-- Node callback functions that are the same for active and inactive furnace -- Node callback functions that are the same for active and inactive furnace
@ -190,7 +189,7 @@ local function furnace_node_timer(pos, elapsed)
-- --
-- Update formspec, infotext and node -- Update formspec, infotext and node
-- --
local formspec = inactive_formspec local formspec
local item_state local item_state
local item_percent = 0 local item_percent = 0
if cookable then if cookable then
@ -216,7 +215,7 @@ local function furnace_node_timer(pos, elapsed)
active = "active " active = "active "
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100) local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
fuel_state = fuel_percent .. "%" fuel_state = fuel_percent .. "%"
formspec = active_formspec(fuel_percent, item_percent) formspec = default.get_furnace_active_formspec(fuel_percent, item_percent)
swap_node(pos, "default:furnace_active") swap_node(pos, "default:furnace_active")
-- make sure timer restarts automatically -- make sure timer restarts automatically
result = true result = true
@ -224,12 +223,14 @@ local function furnace_node_timer(pos, elapsed)
if not fuellist[1]:is_empty() then if not fuellist[1]:is_empty() then
fuel_state = "0%" fuel_state = "0%"
end end
formspec = default.get_furnace_inactive_formspec()
swap_node(pos, "default:furnace") swap_node(pos, "default:furnace")
-- stop timer on the inactive furnace -- stop timer on the inactive furnace
minetest.get_node_timer(pos):stop() minetest.get_node_timer(pos):stop()
end end
local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")" local infotext = "Furnace " .. active .. "(Item: " .. item_state ..
"; Fuel: " .. fuel_state .. ")"
-- --
-- Set meta values -- Set meta values
@ -266,7 +267,7 @@ minetest.register_node("default:furnace", {
on_construct = function(pos) on_construct = function(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("formspec", inactive_formspec) meta:set_string("formspec", default.get_furnace_inactive_formspec())
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size('src', 1) inv:set_size('src', 1)
inv:set_size('fuel', 1) inv:set_size('fuel', 1)
@ -327,4 +328,3 @@ minetest.register_node("default:furnace_active", {
allow_metadata_inventory_move = allow_metadata_inventory_move, allow_metadata_inventory_move = allow_metadata_inventory_move,
allow_metadata_inventory_take = allow_metadata_inventory_take, allow_metadata_inventory_take = allow_metadata_inventory_take,
}) })

View file

@ -43,12 +43,12 @@ minetest.register_alias("mapgen_stair_sandstone_block", "stairs:stair_sandstone_
-- Register ores -- Register ores
-- --
-- Blob ores
-- These first to avoid other ores in blobs
-- Mgv6 -- Mgv6
function default.register_mgv6_blob_ores() function default.register_mgv6_ores()
-- Blob ore
-- These first to avoid other ores in blobs
-- Clay -- Clay
-- This first to avoid clay in sand blobs -- This first to avoid clay in sand blobs
@ -134,14 +134,289 @@ function default.register_mgv6_blob_ores()
persist = 0.0 persist = 0.0
}, },
}) })
-- Scatter ores
-- Coal
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_coal",
wherein = "default:stone",
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 9,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_coal",
wherein = "default:stone",
clust_scarcity = 8 * 8 * 8,
clust_num_ores = 8,
clust_size = 3,
y_min = -31000,
y_max = 64,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_coal",
wherein = "default:stone",
clust_scarcity = 24 * 24 * 24,
clust_num_ores = 27,
clust_size = 6,
y_min = -31000,
y_max = 0,
})
-- Iron
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 9 * 9 * 9,
clust_num_ores = 12,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 7 * 7 * 7,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = 0,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_iron",
wherein = "default:stone",
clust_scarcity = 24 * 24 * 24,
clust_num_ores = 27,
clust_size = 6,
y_min = -31000,
y_max = -64,
})
-- Copper
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_copper",
wherein = "default:stone",
clust_scarcity = 9 * 9 * 9,
clust_num_ores = 5,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_copper",
wherein = "default:stone",
clust_scarcity = 12 * 12 * 12,
clust_num_ores = 4,
clust_size = 3,
y_min = -63,
y_max = -16,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_copper",
wherein = "default:stone",
clust_scarcity = 9 * 9 * 9,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -64,
})
-- Tin
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_tin",
wherein = "default:stone",
clust_scarcity = 10 * 10 * 10,
clust_num_ores = 5,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_tin",
wherein = "default:stone",
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 4,
clust_size = 3,
y_min = -127,
y_max = -32,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_tin",
wherein = "default:stone",
clust_scarcity = 10 * 10 * 10,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -128,
})
-- Gold
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_gold",
wherein = "default:stone",
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 5,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_gold",
wherein = "default:stone",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 3,
clust_size = 2,
y_min = -255,
y_max = -64,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_gold",
wherein = "default:stone",
clust_scarcity = 13 * 13 * 13,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -256,
})
-- Mese crystal
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_mese",
wherein = "default:stone",
clust_scarcity = 14 * 14 * 14,
clust_num_ores = 5,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_mese",
wherein = "default:stone",
clust_scarcity = 18 * 18 * 18,
clust_num_ores = 3,
clust_size = 2,
y_min = -255,
y_max = -64,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_mese",
wherein = "default:stone",
clust_scarcity = 14 * 14 * 14,
clust_num_ores = 5,
clust_size = 3,
y_min = -31000,
y_max = -256,
})
-- Diamond
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_diamond",
wherein = "default:stone",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 4,
clust_size = 3,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_diamond",
wherein = "default:stone",
clust_scarcity = 17 * 17 * 17,
clust_num_ores = 4,
clust_size = 3,
y_min = -255,
y_max = -128,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:stone_with_diamond",
wherein = "default:stone",
clust_scarcity = 15 * 15 * 15,
clust_num_ores = 4,
clust_size = 3,
y_min = -31000,
y_max = -256,
})
-- Mese block
minetest.register_ore({
ore_type = "scatter",
ore = "default:mese",
wherein = "default:stone",
clust_scarcity = 36 * 36 * 36,
clust_num_ores = 3,
clust_size = 2,
y_min = 1025,
y_max = 31000,
})
minetest.register_ore({
ore_type = "scatter",
ore = "default:mese",
wherein = "default:stone",
clust_scarcity = 36 * 36 * 36,
clust_num_ores = 3,
clust_size = 2,
y_min = -31000,
y_max = -1024,
})
end end
-- All mapgens except mgv6 -- All mapgens except mgv6
function default.register_blob_ores() function default.register_ores()
-- Blob ore
-- These first to avoid other ores in blobs
-- Clay -- Clay
-- This first to avoid clay in sand blobs
minetest.register_ore({ minetest.register_ore({
ore_type = "blob", ore_type = "blob",
@ -188,7 +463,7 @@ function default.register_blob_ores()
"deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert",
"cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean",
"rainforest", "rainforest_swamp", "rainforest_ocean", "underground", "rainforest", "rainforest_swamp", "rainforest_ocean", "underground",
"floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} "floatland_coniferous_forest", "floatland_coniferous_forest_ocean"}
}) })
-- Dirt -- Dirt
@ -212,8 +487,7 @@ function default.register_blob_ores()
}, },
biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest", biomes = {"taiga", "snowy_grassland", "grassland", "coniferous_forest",
"deciduous_forest", "deciduous_forest_shore", "savanna", "savanna_shore", "deciduous_forest", "deciduous_forest_shore", "savanna", "savanna_shore",
"rainforest", "rainforest_swamp", "floatland_grassland", "rainforest", "rainforest_swamp", "floatland_coniferous_forest"}
"floatland_coniferous_forest"}
}) })
-- Gravel -- Gravel
@ -242,15 +516,10 @@ function default.register_blob_ores()
"deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert", "deciduous_forest_shore", "deciduous_forest_ocean", "cold_desert",
"cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean", "cold_desert_ocean", "savanna", "savanna_shore", "savanna_ocean",
"rainforest", "rainforest_swamp", "rainforest_ocean", "underground", "rainforest", "rainforest_swamp", "rainforest_ocean", "underground",
"floatland_ocean", "floatland_grassland", "floatland_coniferous_forest"} "floatland_coniferous_forest", "floatland_coniferous_forest_ocean"}
}) })
end
-- Scatter ores -- Scatter ores
-- All mapgens
function default.register_ores()
-- Coal -- Coal
@ -1176,6 +1445,8 @@ end
-- Biomes for floatlands -- Biomes for floatlands
-- Used when mgv7 'biomerepeat' flag is false
-- TODO Temporary simple biomes to be developed later
function default.register_floatland_biomes(floatland_level, shadow_limit) function default.register_floatland_biomes(floatland_level, shadow_limit)
@ -1195,60 +1466,16 @@ function default.register_floatland_biomes(floatland_level, shadow_limit)
--node_river_water = "", --node_river_water = "",
--node_riverbed = "", --node_riverbed = "",
--depth_riverbed = , --depth_riverbed = ,
y_min = floatland_level + 2, y_min = floatland_level + 4,
y_max = 31000, y_max = 31000,
heat_point = 50, heat_point = 50,
humidity_point = 70, humidity_point = 50,
}) })
-- Grassland -- Coniferous forest ocean
minetest.register_biome({ minetest.register_biome({
name = "floatland_grassland", name = "floatland_coniferous_forest_ocean",
--node_dust = "",
node_top = "default:dirt_with_grass",
depth_top = 1,
node_filler = "default:dirt",
depth_filler = 1,
--node_stone = "",
--node_water_top = "",
--depth_water_top = ,
--node_water = "",
--node_river_water = "",
--node_riverbed = "",
--depth_riverbed = ,
y_min = floatland_level + 2,
y_max = 31000,
heat_point = 50,
humidity_point = 35,
})
-- Sandstone desert
minetest.register_biome({
name = "floatland_sandstone_desert",
--node_dust = "",
node_top = "default:sand",
depth_top = 1,
node_filler = "default:sand",
depth_filler = 1,
node_stone = "default:sandstone",
--node_water_top = "",
--depth_water_top = ,
--node_water = "",
--node_river_water = "",
--node_riverbed = "",
--depth_riverbed = ,
y_min = floatland_level + 2,
y_max = 31000,
heat_point = 50,
humidity_point = 0,
})
-- Floatland ocean / underground
minetest.register_biome({
name = "floatland_ocean",
--node_dust = "", --node_dust = "",
node_top = "default:sand", node_top = "default:sand",
depth_top = 1, depth_top = 1,
@ -1262,7 +1489,7 @@ function default.register_floatland_biomes(floatland_level, shadow_limit)
--node_riverbed = "", --node_riverbed = "",
--depth_riverbed = , --depth_riverbed = ,
y_min = shadow_limit, y_min = shadow_limit,
y_max = floatland_level + 1, y_max = floatland_level + 3,
heat_point = 50, heat_point = 50,
humidity_point = 50, humidity_point = 50,
}) })
@ -1794,33 +2021,41 @@ end
-- Get setting or default -- Get setting or default
local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or local mgv7_spflags = minetest.get_mapgen_setting("mgv7_spflags") or
"mountains, ridges, nofloatlands" "mountains, ridges, nofloatlands, caverns, biomerepeat"
local captures_float = string.match(mgv7_spflags, "floatlands") local captures_float = string.match(mgv7_spflags, "floatlands")
local captures_nofloat = string.match(mgv7_spflags, "nofloatlands") local captures_nofloat = string.match(mgv7_spflags, "nofloatlands")
local captures_nobiorep = string.match(mgv7_spflags, "nobiomerepeat")
local mgv7_floatland_level = minetest.get_mapgen_setting("mgv7_floatland_level") or 1280 -- Get setting or default
local mgv7_shadow_limit = minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024 -- Make global for mods to use to register floatland biomes
default.mgv7_floatland_level =
minetest.get_mapgen_setting("mgv7_floatland_level") or 1280
default.mgv7_shadow_limit =
minetest.get_mapgen_setting("mgv7_shadow_limit") or 1024
minetest.clear_registered_biomes() minetest.clear_registered_biomes()
minetest.clear_registered_ores() minetest.clear_registered_ores()
minetest.clear_registered_decorations() minetest.clear_registered_decorations()
local mg_name = minetest.get_mapgen_setting("mg_name") local mg_name = minetest.get_mapgen_setting("mg_name")
if mg_name == "v6" then if mg_name == "v6" then
default.register_mgv6_blob_ores() default.register_mgv6_ores()
default.register_ores()
default.register_mgv6_decorations() default.register_mgv6_decorations()
elseif mg_name == "v7" and captures_float == "floatlands" and elseif mg_name == "v7" and
captures_nofloat ~= "nofloatlands" then captures_float == "floatlands" and
-- Mgv7 with floatlands -- Need to check for 'nofloatlands' because that contains
default.register_biomes(mgv7_shadow_limit - 1) -- 'floatlands' which makes the second condition true.
default.register_floatland_biomes(mgv7_floatland_level, mgv7_shadow_limit) captures_nofloat ~= "nofloatlands" and
default.register_blob_ores() captures_nobiorep == "nobiomerepeat" then
-- Mgv7 with floatlands and floatland biomes
default.register_biomes(default.mgv7_shadow_limit - 1)
default.register_floatland_biomes(
default.mgv7_floatland_level, default.mgv7_shadow_limit)
default.register_ores() default.register_ores()
default.register_decorations() default.register_decorations()
else else
default.register_biomes(31000) default.register_biomes(31000)
default.register_blob_ores()
default.register_ores() default.register_ores()
default.register_decorations() default.register_decorations()
end end

Binary file not shown.

Binary file not shown.

View file

@ -592,7 +592,7 @@ minetest.register_node("default:ice", {
-- --
minetest.register_node("default:tree", { minetest.register_node("default:tree", {
description = "Tree", description = "Apple Tree",
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
is_ground_content = false, is_ground_content = false,
@ -603,7 +603,7 @@ minetest.register_node("default:tree", {
}) })
minetest.register_node("default:wood", { minetest.register_node("default:wood", {
description = "Wooden Planks", description = "Apple Wood Planks",
paramtype2 = "facedir", paramtype2 = "facedir",
place_param2 = 0, place_param2 = 0,
tiles = {"default_wood.png"}, tiles = {"default_wood.png"},
@ -613,7 +613,7 @@ minetest.register_node("default:wood", {
}) })
minetest.register_node("default:sapling", { minetest.register_node("default:sapling", {
description = "Sapling", description = "Apple Tree Sapling",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"default_sapling.png"}, tiles = {"default_sapling.png"},
inventory_image = "default_sapling.png", inventory_image = "default_sapling.png",
@ -631,7 +631,7 @@ minetest.register_node("default:sapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -649,7 +649,7 @@ minetest.register_node("default:sapling", {
}) })
minetest.register_node("default:leaves", { minetest.register_node("default:leaves", {
description = "Leaves", description = "Apple Tree Leaves",
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
waving = 1, waving = 1,
tiles = {"default_leaves.png"}, tiles = {"default_leaves.png"},
@ -716,7 +716,7 @@ minetest.register_node("default:jungletree", {
}) })
minetest.register_node("default:junglewood", { minetest.register_node("default:junglewood", {
description = "Junglewood Planks", description = "Jungle Wood Planks",
paramtype2 = "facedir", paramtype2 = "facedir",
place_param2 = 0, place_param2 = 0,
tiles = {"default_junglewood.png"}, tiles = {"default_junglewood.png"},
@ -726,7 +726,7 @@ minetest.register_node("default:junglewood", {
}) })
minetest.register_node("default:jungleleaves", { minetest.register_node("default:jungleleaves", {
description = "Jungle Leaves", description = "Jungle Tree Leaves",
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
waving = 1, waving = 1,
tiles = {"default_jungleleaves.png"}, tiles = {"default_jungleleaves.png"},
@ -747,7 +747,7 @@ minetest.register_node("default:jungleleaves", {
}) })
minetest.register_node("default:junglesapling", { minetest.register_node("default:junglesapling", {
description = "Jungle Sapling", description = "Jungle Tree Sapling",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"default_junglesapling.png"}, tiles = {"default_junglesapling.png"},
inventory_image = "default_junglesapling.png", inventory_image = "default_junglesapling.png",
@ -765,7 +765,7 @@ minetest.register_node("default:junglesapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -826,7 +826,7 @@ minetest.register_node("default:pine_needles",{
}) })
minetest.register_node("default:pine_sapling", { minetest.register_node("default:pine_sapling", {
description = "Pine Sapling", description = "Pine Tree Sapling",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"default_pine_sapling.png"}, tiles = {"default_pine_sapling.png"},
inventory_image = "default_pine_sapling.png", inventory_image = "default_pine_sapling.png",
@ -844,7 +844,7 @@ minetest.register_node("default:pine_sapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -885,7 +885,7 @@ minetest.register_node("default:acacia_wood", {
}) })
minetest.register_node("default:acacia_leaves", { minetest.register_node("default:acacia_leaves", {
description = "Acacia Leaves", description = "Acacia Tree Leaves",
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
tiles = {"default_acacia_leaves.png"}, tiles = {"default_acacia_leaves.png"},
special_tiles = {"default_acacia_leaves_simple.png"}, special_tiles = {"default_acacia_leaves_simple.png"},
@ -924,7 +924,7 @@ minetest.register_node("default:acacia_sapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -964,7 +964,7 @@ minetest.register_node("default:aspen_wood", {
}) })
minetest.register_node("default:aspen_leaves", { minetest.register_node("default:aspen_leaves", {
description = "Aspen Leaves", description = "Aspen Tree Leaves",
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
tiles = {"default_aspen_leaves.png"}, tiles = {"default_aspen_leaves.png"},
waving = 1, waving = 1,
@ -1002,7 +1002,7 @@ minetest.register_node("default:aspen_sapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(2400,4800)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -1394,7 +1394,7 @@ minetest.register_node("default:bush_sapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(1200, 2400)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -1465,7 +1465,7 @@ minetest.register_node("default:acacia_bush_sapling", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos) on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(1200, 2400)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end, end,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
@ -1798,7 +1798,7 @@ minetest.register_node("default:lava_flowing", {
-- Tools / "Advanced" crafting / Non-"natural" -- Tools / "Advanced" crafting / Non-"natural"
-- --
local function get_chest_formspec(pos) function default.get_chest_formspec(pos)
local spos = pos.x .. "," .. pos.y .. "," .. pos.z local spos = pos.x .. "," .. pos.y .. "," .. pos.z
local formspec = local formspec =
"size[8,9]" .. "size[8,9]" ..
@ -1818,10 +1818,11 @@ local function chest_lid_obstructed(pos)
local above = {x = pos.x, y = pos.y + 1, z = pos.z} local above = {x = pos.x, y = pos.y + 1, z = pos.z}
local def = minetest.registered_nodes[minetest.get_node(above).name] local def = minetest.registered_nodes[minetest.get_node(above).name]
-- allow ladders, signs, wallmounted things and torches to not obstruct -- allow ladders, signs, wallmounted things and torches to not obstruct
if def.drawtype == "airlike" or if def and
(def.drawtype == "airlike" or
def.drawtype == "signlike" or def.drawtype == "signlike" or
def.drawtype == "torchlike" or def.drawtype == "torchlike" or
(def.drawtype == "nodebox" and def.paramtype2 == "wallmounted") then (def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then
return false return false
end end
return true return true
@ -1921,7 +1922,7 @@ function default.register_chest(name, d)
end end
minetest.after(0.2, minetest.show_formspec, minetest.after(0.2, minetest.show_formspec,
clicker:get_player_name(), clicker:get_player_name(),
"default:chest", get_chest_formspec(pos)) "default:chest", default.get_chest_formspec(pos))
open_chests[clicker:get_player_name()] = { pos = pos, open_chests[clicker:get_player_name()] = { pos = pos,
sound = def.sound_close, swap = name } sound = def.sound_close, swap = name }
end end
@ -1943,7 +1944,7 @@ function default.register_chest(name, d)
minetest.show_formspec( minetest.show_formspec(
player:get_player_name(), player:get_player_name(),
"default:chest_locked", "default:chest_locked",
get_chest_formspec(pos) default.get_chest_formspec(pos)
) )
end end
def.on_skeleton_key_use = function(pos, player, newsecret) def.on_skeleton_key_use = function(pos, player, newsecret)
@ -1988,7 +1989,7 @@ function default.register_chest(name, d)
end end
minetest.after(0.2, minetest.show_formspec, minetest.after(0.2, minetest.show_formspec,
clicker:get_player_name(), clicker:get_player_name(),
"default:chest", get_chest_formspec(pos)) "default:chest", default.get_chest_formspec(pos))
open_chests[clicker:get_player_name()] = { pos = pos, open_chests[clicker:get_player_name()] = { pos = pos,
sound = def.sound_close, swap = name } sound = def.sound_close, swap = name }
end end
@ -2021,6 +2022,13 @@ function default.register_chest(name, d)
local def_closed = table.copy(def) local def_closed = table.copy(def)
def_opened.mesh = "chest_open.obj" def_opened.mesh = "chest_open.obj"
for i = 1, #def_opened.tiles do
if type(def_opened.tiles[i]) == "string" then
def_opened.tiles[i] = {name = def_opened.tiles[i], backface_culling = true}
elseif def_opened.tiles[i].backface_culling == nil then
def_opened.tiles[i].backface_culling = true
end
end
def_opened.drop = "default:" .. name def_opened.drop = "default:" .. name
def_opened.groups.not_in_creative_inventory = 1 def_opened.groups.not_in_creative_inventory = 1
def_opened.selection_box = { def_opened.selection_box = {
@ -2276,7 +2284,7 @@ minetest.register_node("default:ladder_steel", {
}) })
default.register_fence("default:fence_wood", { default.register_fence("default:fence_wood", {
description = "Wooden Fence", description = "Apple Wood Fence",
texture = "default_fence_wood.png", texture = "default_fence_wood.png",
inventory_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126", inventory_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126", wield_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
@ -2286,7 +2294,7 @@ default.register_fence("default:fence_wood", {
}) })
default.register_fence("default:fence_acacia_wood", { default.register_fence("default:fence_acacia_wood", {
description = "Acacia Fence", description = "Acacia Wood Fence",
texture = "default_fence_acacia_wood.png", texture = "default_fence_acacia_wood.png",
inventory_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126", inventory_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126", wield_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
@ -2296,7 +2304,7 @@ default.register_fence("default:fence_acacia_wood", {
}) })
default.register_fence("default:fence_junglewood", { default.register_fence("default:fence_junglewood", {
description = "Junglewood Fence", description = "Jungle Wood Fence",
texture = "default_fence_junglewood.png", texture = "default_fence_junglewood.png",
inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126", inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126", wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
@ -2306,7 +2314,7 @@ default.register_fence("default:fence_junglewood", {
}) })
default.register_fence("default:fence_pine_wood", { default.register_fence("default:fence_pine_wood", {
description = "Pine Fence", description = "Pine Wood Fence",
texture = "default_fence_pine_wood.png", texture = "default_fence_pine_wood.png",
inventory_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126", inventory_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126", wield_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
@ -2316,7 +2324,7 @@ default.register_fence("default:fence_pine_wood", {
}) })
default.register_fence("default:fence_aspen_wood", { default.register_fence("default:fence_aspen_wood", {
description = "Aspen Fence", description = "Aspen Wood Fence",
texture = "default_fence_aspen_wood.png", texture = "default_fence_aspen_wood.png",
inventory_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126", inventory_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
wield_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126", wield_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 B

After

Width:  |  Height:  |  Size: 255 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 B

After

Width:  |  Height:  |  Size: 282 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 B

After

Width:  |  Height:  |  Size: 191 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

After

Width:  |  Height:  |  Size: 160 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

After

Width:  |  Height:  |  Size: 128 B

Before After
Before After

View file

@ -283,7 +283,7 @@ minetest.register_tool("default:axe_diamond", {
full_punch_interval = 0.9, full_punch_interval = 0.9,
max_drop_level=1, max_drop_level=1,
groupcaps={ groupcaps={
choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=2}, choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=30, maxlevel=3},
}, },
damage_groups = {fleshy=7}, damage_groups = {fleshy=7},
}, },

View file

@ -31,12 +31,12 @@ local function is_snow_nearby(pos)
end end
-- Sapling ABM -- Grow sapling
function default.grow_sapling(pos) function default.grow_sapling(pos)
if not default.can_grow(pos) then if not default.can_grow(pos) then
-- try a bit later again -- try again 5 min later
minetest.get_node_timer(pos):start(math.random(240, 600)) minetest.get_node_timer(pos):start(300)
return return
end end
@ -94,7 +94,7 @@ minetest.register_lbm({
"default:pine_sapling", "default:acacia_sapling", "default:pine_sapling", "default:acacia_sapling",
"default:aspen_sapling"}, "default:aspen_sapling"},
action = function(pos) action = function(pos)
minetest.get_node_timer(pos):start(math.random(1200, 2400)) minetest.get_node_timer(pos):start(math.random(300, 1500))
end end
}) })

View file

@ -667,7 +667,7 @@ function doors.register_trapdoor(name, def)
end end
doors.register_trapdoor("doors:trapdoor", { doors.register_trapdoor("doors:trapdoor", {
description = "Trapdoor", description = "Wooden Trapdoor",
inventory_image = "doors_trapdoor.png", inventory_image = "doors_trapdoor.png",
wield_image = "doors_trapdoor.png", wield_image = "doors_trapdoor.png",
tile_front = "doors_trapdoor.png", tile_front = "doors_trapdoor.png",
@ -712,7 +712,7 @@ function doors.register_fencegate(name, def)
local fence = { local fence = {
description = def.description, description = def.description,
drawtype = "mesh", drawtype = "mesh",
tiles = {def.texture}, tiles = {},
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
@ -734,6 +734,16 @@ function doors.register_fencegate(name, def)
}, },
} }
if type(def.texture) == "string" then
fence.tiles[1] = {name = def.texture, backface_culling = true}
elseif def.texture.backface_culling == nil then
fence.tiles[1] = table.copy(def.texture)
fence.tiles[1].backface_culling = true
else
fence.tiles[1] = def.texture
end
if not fence.sounds then if not fence.sounds then
fence.sounds = default.node_sound_wood_defaults() fence.sounds = default.node_sound_wood_defaults()
end end
@ -773,35 +783,35 @@ function doors.register_fencegate(name, def)
end end
doors.register_fencegate("doors:gate_wood", { doors.register_fencegate("doors:gate_wood", {
description = "Wooden Fence Gate", description = "Apple Wood Fence Gate",
texture = "default_wood.png", texture = "default_wood.png",
material = "default:wood", material = "default:wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
}) })
doors.register_fencegate("doors:gate_acacia_wood", { doors.register_fencegate("doors:gate_acacia_wood", {
description = "Acacia Fence Gate", description = "Acacia Wood Fence Gate",
texture = "default_acacia_wood.png", texture = "default_acacia_wood.png",
material = "default:acacia_wood", material = "default:acacia_wood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
}) })
doors.register_fencegate("doors:gate_junglewood", { doors.register_fencegate("doors:gate_junglewood", {
description = "Junglewood Fence Gate", description = "Jungle Wood Fence Gate",
texture = "default_junglewood.png", texture = "default_junglewood.png",
material = "default:junglewood", material = "default:junglewood",
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}
}) })
doors.register_fencegate("doors:gate_pine_wood", { doors.register_fencegate("doors:gate_pine_wood", {
description = "Pine Fence Gate", description = "Pine Wood Fence Gate",
texture = "default_pine_wood.png", texture = "default_pine_wood.png",
material = "default:pine_wood", material = "default:pine_wood",
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}
}) })
doors.register_fencegate("doors:gate_aspen_wood", { doors.register_fencegate("doors:gate_aspen_wood", {
description = "Aspen Fence Gate", description = "Aspen Wood Fence Gate",
texture = "default_aspen_wood.png", texture = "default_aspen_wood.png",
material = "default:aspen_wood", material = "default:aspen_wood",
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3} groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

After

Width:  |  Height:  |  Size: 169 B

Before After
Before After

View file

@ -28,21 +28,21 @@ dye.dyes = {
-- This collection of colors is partly a historic thing, partly something else -- This collection of colors is partly a historic thing, partly something else
local dyes = { local dyes = {
{"white", "White dye", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1}}, {"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}}, {"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}}, {"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}}, {"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}}, {"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}}, {"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}}, {"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}}, {"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}}, {"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}}, {"yellow", "Yellow Dye", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}},
{"brown", "Brown dye", {dye=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}}, {"brown", "Brown Dye", {dye=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}},
{"orange", "Orange dye", {dye=1, basecolor_orange=1, excolor_orange=1, unicolor_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}}, {"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}}, {"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}}, {"pink", "Pink Dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_light_red=1}},
} }
-- Define items -- Define items

View file

@ -118,15 +118,6 @@ farming.register_hoe = function(name, def)
{"", "group:stick", ""} {"", "group:stick", ""}
} }
}) })
-- Reverse Recipe
minetest.register_craft({
output = name:sub(2),
recipe = {
{"", def.material, def.material},
{"", "group:stick", ""},
{"", "group:stick", ""}
}
})
end end
end end

View file

@ -1,2 +1,3 @@
default default
wool wool
stairs

View file

@ -9,7 +9,7 @@ dofile(farming.path .. "/hoes.lua")
-- WHEAT -- WHEAT
farming.register_plant("farming:wheat", { farming.register_plant("farming:wheat", {
description = "Wheat seed", description = "Wheat Seed",
paramtype2 = "meshoptions", paramtype2 = "meshoptions",
inventory_image = "farming_wheat_seed.png", inventory_image = "farming_wheat_seed.png",
steps = 8, steps = 8,
@ -47,7 +47,7 @@ minetest.register_craft({
-- Cotton -- Cotton
farming.register_plant("farming:cotton", { farming.register_plant("farming:cotton", {
description = "Cotton seed", description = "Cotton Seed",
inventory_image = "farming_cotton_seed.png", inventory_image = "farming_cotton_seed.png",
steps = 8, steps = 8,
minlight = 13, minlight = 13,

View file

@ -98,6 +98,16 @@ minetest.register_node("farming:straw", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
}) })
stairs.register_stair_and_slab(
"straw",
"farming:straw",
{snappy = 3, flammable = 4},
{"farming_straw.png"},
"Straw Stair",
"Straw Slab",
default.node_sound_leaves_defaults()
)
minetest.register_abm({ minetest.register_abm({
label = "Farming soil", label = "Farming soil",
nodenames = {"group:field"}, nodenames = {"group:field"},

View file

@ -148,7 +148,7 @@ minetest.override_item("default:coalblock", {
-- Sound -- Sound
-- --
local flame_sound = minetest.setting_getbool("flame_sound") local flame_sound = minetest.settings:get_bool("flame_sound")
if flame_sound == nil then if flame_sound == nil then
-- Enable if no setting present -- Enable if no setting present
flame_sound = true flame_sound = true
@ -290,10 +290,10 @@ minetest.register_abm({
-- Enable the following ABMs according to 'enable fire' setting -- Enable the following ABMs according to 'enable fire' setting
local fire_enabled = minetest.setting_getbool("enable_fire") local fire_enabled = minetest.settings:get_bool("enable_fire")
if fire_enabled == nil then if fire_enabled == nil then
-- enable_fire setting not specified, check for disable_fire -- enable_fire setting not specified, check for disable_fire
local fire_disabled = minetest.setting_getbool("disable_fire") local fire_disabled = minetest.settings:get_bool("disable_fire")
if fire_disabled == nil then if fire_disabled == nil then
-- Neither setting specified, check whether singleplayer -- Neither setting specified, check whether singleplayer
fire_enabled = minetest.is_singleplayer() fire_enabled = minetest.is_singleplayer()

View file

@ -11,7 +11,6 @@ Authors of media (textures)
--------------------------- ---------------------------
RHRhino (CC BY-SA 3.0): RHRhino (CC BY-SA 3.0):
flowers_dandelion_white.png flowers_dandelion_white.png
flowers_dandelion_yellow.png
flowers_geranium.png flowers_geranium.png
flowers_rose.png flowers_rose.png
flowers_tulip.png flowers_tulip.png
@ -23,4 +22,7 @@ Gambit (CC BY-SA 3.0):
flowers_waterlily.png flowers_waterlily.png
yyt16384 (CC BY-SA 3.0): yyt16384 (CC BY-SA 3.0):
flowers_waterlily_bottom.png, derived from Gambit's texture flowers_waterlily_bottom.png -- Derived from Gambit's texture
paramat (CC BY-SA 3.0):
flowers_dandelion_yellow.png -- Derived from RHRhino's texture

View file

@ -59,7 +59,7 @@ end
flowers.datas = { flowers.datas = {
{ {
"rose", "rose",
"Rose", "Red Rose",
{-2 / 16, -0.5, -2 / 16, 2 / 16, 5 / 16, 2 / 16}, {-2 / 16, -0.5, -2 / 16, 2 / 16, 5 / 16, 2 / 16},
{color_red = 1, flammable = 1} {color_red = 1, flammable = 1}
}, },
@ -72,7 +72,7 @@ flowers.datas = {
{ {
"dandelion_yellow", "dandelion_yellow",
"Yellow Dandelion", "Yellow Dandelion",
{-2 / 16, -0.5, -2 / 16, 2 / 16, 4 / 16, 2 / 16}, {-4 / 16, -0.5, -4 / 16, 4 / 16, -2 / 16, 4 / 16},
{color_yellow = 1, flammable = 1} {color_yellow = 1, flammable = 1}
}, },
{ {
@ -89,7 +89,7 @@ flowers.datas = {
}, },
{ {
"dandelion_white", "dandelion_white",
"White dandelion", "White Dandelion",
{-5 / 16, -0.5, -5 / 16, 5 / 16, -2 / 16, 5 / 16}, {-5 / 16, -0.5, -5 / 16, 5 / 16, -2 / 16, 5 / 16},
{color_white = 1, flammable = 1} {color_white = 1, flammable = 1}
}, },

View file

@ -32,6 +32,7 @@ Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Copyright (C) 2014-2016 RHRhino Copyright (C) 2014-2016 RHRhino
Copyright (C) 2015-2016 Gambit Copyright (C) 2015-2016 Gambit
Copyright (C) 2016 yyt16384 Copyright (C) 2016 yyt16384
Copyright (C) 2017 paramat
You are free to: You are free to:
Share — copy and redistribute the material in any medium or format. Share — copy and redistribute the material in any medium or format.

View file

@ -87,15 +87,15 @@ local function register_flower(seed, name)
place_on = {"default:dirt_with_grass"}, place_on = {"default:dirt_with_grass"},
sidelen = 16, sidelen = 16,
noise_params = { noise_params = {
offset = -0.015, offset = -0.02,
scale = 0.025, scale = 0.04,
spread = {x = 200, y = 200, z = 200}, spread = {x = 200, y = 200, z = 200},
seed = seed, seed = seed,
octaves = 3, octaves = 3,
persist = 0.6 persist = 0.6
}, },
biomes = {"grassland", "deciduous_forest", "coniferous_forest", biomes = {"grassland", "deciduous_forest", "coniferous_forest",
"floatland_grassland", "floatland_coniferous_forest"}, "floatland_coniferous_forest"},
y_min = 1, y_min = 1,
y_max = 31000, y_max = 31000,
decoration = "flowers:"..name, decoration = "flowers:"..name,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 B

After

Width:  |  Height:  |  Size: 138 B

Before After
Before After

View file

@ -1,8 +1,44 @@
minetest.register_on_newplayer(function(player) local stuff_string = minetest.settings:get("initial_stuff") or
--print("on_newplayer") "illuna:noobcoin 42" ..
if minetest.setting_getbool("give_initial_stuff") then "magical_potion:fly_small 2"
minetest.log("action", "Giving initial stuff to player "..player:get_player_name())
player:get_inventory():add_item('main', 'illuna:noobcoin 42') give_initial_stuff = {
player:get_inventory():add_item('main', 'magical_potion:fly_small 2') items = {}
}
function give_initial_stuff.give(player)
minetest.log("action",
"Giving initial stuff to player " .. player:get_player_name())
local inv = player:get_inventory()
for _, stack in ipairs(give_initial_stuff.items) do
inv:add_item("main", stack)
end
end
function give_initial_stuff.add(stack)
give_initial_stuff.items[#give_initial_stuff.items + 1] = ItemStack(stack)
end
function give_initial_stuff.clear()
give_initial_stuff.items = {}
end
function give_initial_stuff.add_from_csv(str)
local items = str:split(",")
for _, itemname in ipairs(items) do
give_initial_stuff.add(itemname)
end
end
function give_initial_stuff.set_list(list)
give_initial_stuff.items = list
end
function give_initial_stuff.get_list()
return give_initial_stuff.items
end
give_initial_stuff.add_from_csv(stuff_string)
if minetest.settings:get_bool("give_initial_stuff") then
minetest.register_on_newplayer(give_initial_stuff.give)
end end
end)

View file

@ -3,7 +3,7 @@ minetest.register_chatcommand("killme", {
func = function(name) func = function(name)
local player = minetest.get_player_by_name(name) local player = minetest.get_player_by_name(name)
if player then if player then
if minetest.setting_getbool("enable_damage") then if minetest.settings:get_bool("enable_damage") then
player:set_hp(0) player:set_hp(0)
return true return true
else else

View file

@ -12,5 +12,7 @@ Authors of media (models)
------------------------- -------------------------
Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com> (CC BY-SA 3.0): Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com> (CC BY-SA 3.0):
stairs_stair.obj stairs_stair.obj
GreenXenith (CC BY-SA 3.0)
stairs_stair_inner.obj stairs_stair_outer.obj

View file

@ -1,2 +1 @@
default default
farming

View file

@ -18,7 +18,7 @@ minetest.register_alias("moretrees:slab_acacia_planks", "stairs:slab_acacia_wood
-- Get setting for replace ABM -- Get setting for replace ABM
local replace = minetest.setting_getbool("enable_stairs_replace_abm") local replace = minetest.settings:get_bool("enable_stairs_replace_abm")
local function rotate_and_place(itemstack, placer, pointed_thing) local function rotate_and_place(itemstack, placer, pointed_thing)
local p0 = pointed_thing.under local p0 = pointed_thing.under
@ -49,12 +49,24 @@ end
-- Node will be called stairs:stair_<subname> -- Node will be called stairs:stair_<subname>
function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) function stairs.register_stair(subname, recipeitem, groups, images, description, sounds)
local stair_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
stair_images[i] = {
name = image,
backface_culling = true,
}
elseif image.backface_culling == nil then -- override using any other value
stair_images[i] = table.copy(image)
stair_images[i].backface_culling = true
end
end
groups.stair = 1 groups.stair = 1
minetest.register_node(":stairs:stair_" .. subname, { minetest.register_node(":stairs:stair_" .. subname, {
description = description, description = description,
drawtype = "mesh", drawtype = "mesh",
mesh = "stairs_stair.obj", mesh = "stairs_stair.obj",
tiles = images, tiles = stair_images,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
is_ground_content = false, is_ground_content = false,
@ -92,16 +104,7 @@ function stairs.register_stair(subname, recipeitem, groups, images, description,
end end
if recipeitem then if recipeitem then
minetest.register_craft({ -- Recipe matches appearence in inventory
output = 'stairs:stair_' .. subname .. ' 8',
recipe = {
{recipeitem, "", ""},
{recipeitem, recipeitem, ""},
{recipeitem, recipeitem, recipeitem},
},
})
-- Flipped recipe for the silly minecrafters
minetest.register_craft({ minetest.register_craft({
output = 'stairs:stair_' .. subname .. ' 8', output = 'stairs:stair_' .. subname .. ' 8',
recipe = { recipe = {
@ -111,6 +114,15 @@ function stairs.register_stair(subname, recipeitem, groups, images, description,
}, },
}) })
-- Use stairs to craft full blocks again (1:1)
minetest.register_craft({
output = recipeitem .. ' 3',
recipe = {
{'stairs:stair_' .. subname, 'stairs:stair_' .. subname},
{'stairs:stair_' .. subname, 'stairs:stair_' .. subname},
},
})
-- Fuel -- Fuel
local baseburntime = minetest.get_craft_result({ local baseburntime = minetest.get_craft_result({
method = "fuel", method = "fuel",
@ -219,6 +231,15 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
}, },
}) })
-- Use 2 slabs to craft a full block again (1:1)
minetest.register_craft({
output = recipeitem,
recipe = {
{'stairs:slab_' .. subname},
{'stairs:slab_' .. subname},
},
})
-- Fuel -- Fuel
local baseburntime = minetest.get_craft_result({ local baseburntime = minetest.get_craft_result({
method = "fuel", method = "fuel",
@ -258,17 +279,170 @@ if replace then
}) })
end end
-- Register stairs.
-- Node will be called stairs:stair_inner_<subname>
function stairs.register_stair_inner(subname, recipeitem, groups, images, description, sounds)
local stair_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
stair_images[i] = {
name = image,
backface_culling = true,
}
elseif image.backface_culling == nil then -- override using any other value
stair_images[i] = table.copy(image)
stair_images[i].backface_culling = true
end
end
groups.stair = 1
minetest.register_node(":stairs:stair_inner_" .. subname, {
description = description .. " Inner",
drawtype = "mesh",
mesh = "stairs_stair_inner.obj",
tiles = stair_images,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = groups,
sounds = sounds,
selection_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},
{-0.5, 0, -0.5, 0, 0.5, 0},
},
},
collision_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},
{-0.5, 0, -0.5, 0, 0.5, 0},
},
},
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return itemstack
end
return rotate_and_place(itemstack, placer, pointed_thing)
end,
})
if recipeitem then
minetest.register_craft({
output = 'stairs:stair_inner_' .. subname .. ' 7',
recipe = {
{ "", recipeitem, ""},
{ recipeitem, "", recipeitem},
{recipeitem, recipeitem, recipeitem},
},
})
-- Fuel
local baseburntime = minetest.get_craft_result({
method = "fuel",
width = 1,
items = {recipeitem}
}).time
if baseburntime > 0 then
minetest.register_craft({
type = "fuel",
recipe = 'stairs:stair_inner_' .. subname,
burntime = math.floor(baseburntime * 0.875),
})
end
end
end
-- Register stairs.
-- Node will be called stairs:stair_outer_<subname>
function stairs.register_stair_outer(subname, recipeitem, groups, images, description, sounds)
local stair_images = {}
for i, image in ipairs(images) do
if type(image) == "string" then
stair_images[i] = {
name = image,
backface_culling = true,
}
elseif image.backface_culling == nil then -- override using any other value
stair_images[i] = table.copy(image)
stair_images[i].backface_culling = true
end
end
groups.stair = 1
minetest.register_node(":stairs:stair_outer_" .. subname, {
description = description .. " Outer",
drawtype = "mesh",
mesh = "stairs_stair_outer.obj",
tiles = stair_images,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
groups = groups,
sounds = sounds,
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0, 0.5, 0.5},
},
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0, 0.5, 0.5},
},
},
on_place = function(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then
return itemstack
end
return rotate_and_place(itemstack, placer, pointed_thing)
end,
})
if recipeitem then
minetest.register_craft({
output = 'stairs:stair_outer_' .. subname .. ' 6',
recipe = {
{ "", "", ""},
{ "", recipeitem, ""},
{recipeitem, recipeitem, recipeitem},
},
})
-- Fuel
local baseburntime = minetest.get_craft_result({
method = "fuel",
width = 1,
items = {recipeitem}
}).time
if baseburntime > 0 then
minetest.register_craft({
type = "fuel",
recipe = 'stairs:stair_outer_' .. subname,
burntime = math.floor(baseburntime * 0.625),
})
end
end
end
-- Stair/slab registration function. -- Stair/slab registration function.
-- Nodes will be called stairs:{stair,slab}_<subname> -- Nodes will be called stairs:{stair,slab}_<subname>
function stairs.register_stair_and_slab(subname, recipeitem, function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)
groups, images, desc_stair, desc_slab, sounds)
stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds) stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds)
stairs.register_stair_inner(subname, recipeitem, groups, images, desc_stair, sounds)
stairs.register_stair_outer(subname, recipeitem, groups, images, desc_stair, sounds)
stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds) stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds)
end end
-- Register default stairs and slabs -- Register default stairs and slabs
stairs.register_stair_and_slab( stairs.register_stair_and_slab(
@ -343,7 +517,7 @@ stairs.register_stair_and_slab(
stairs.register_stair_and_slab( stairs.register_stair_and_slab(
"mossycobble", "mossycobble",
nil, "default:mossycobble",
{cracky = 3}, {cracky = 3},
{"default_mossycobble.png"}, {"default_mossycobble.png"},
"Mossy Cobblestone Stair", "Mossy Cobblestone Stair",
@ -541,16 +715,6 @@ stairs.register_stair_and_slab(
default.node_sound_stone_defaults() default.node_sound_stone_defaults()
) )
stairs.register_stair_and_slab(
"straw",
"farming:straw",
{snappy = 3, flammable = 4},
{"farming_straw.png"},
"Straw Stair",
"Straw Slab",
default.node_sound_leaves_defaults()
)
stairs.register_stair_and_slab( stairs.register_stair_and_slab(
"steelblock", "steelblock",
"default:steelblock", "default:steelblock",
@ -561,6 +725,16 @@ stairs.register_stair_and_slab(
default.node_sound_metal_defaults() default.node_sound_metal_defaults()
) )
stairs.register_stair_and_slab(
"tinblock",
"default:tinblock",
{cracky = 1, level = 2},
{"default_tin_block.png"},
"Tin Block Stair",
"Tin Block Slab",
default.node_sound_metal_defaults()
)
stairs.register_stair_and_slab( stairs.register_stair_and_slab(
"copperblock", "copperblock",
"default:copperblock", "default:copperblock",

View file

@ -21,6 +21,7 @@ Licenses of media (models)
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com> Copyright (C) 2015-2016 Jean-Patrick G. (kilbith) <jeanpatrick.guerrero@gmail.com>
Copyright (C) 2017 GreenXenith
You are free to: You are free to:
Share — copy and redistribute the material in any medium or format. Share — copy and redistribute the material in any medium or format.

View file

@ -0,0 +1,161 @@
# Blender v2.78 (sub 0) OBJ File: ''
# www.blender.org
mtllib stairs_inner_stair.mtl
o stairs_back_right_stairs_back.001
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 0.500000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
usemtl None.001
s 1
f 1/1/1 2/2/1 3/3/1 4/4/1
o stairs_front_right_stairs_back.003
v 0.000000 0.000000 -0.500000
v 0.000000 0.000000 0.000000
v 0.000000 0.500000 0.000000
v 0.000000 0.500000 -0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.000000 0.000000
v -0.500000 0.500000 0.500000
v -0.500000 0.500000 0.000000
v -0.500000 -0.500000 0.500000
vt 0.0000 0.5000
vt 0.5000 0.5000
vt 0.5000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.5000
vt 0.0000 0.0000
vt 0.5000 0.5000
vt 1.0000 1.0000
vt 0.5000 1.0000
vt 1.0000 0.0000
vn -1.0000 0.0000 0.0000
usemtl None
s 1
f 5/5/2 6/6/2 7/7/2 8/8/2
f 9/9/2 10/10/2 11/11/2
f 11/11/2 12/12/2 13/13/2
f 10/10/2 14/14/2 11/11/2
f 14/14/2 12/12/2 11/11/2
o stairs_bottom
v -0.500000 -0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 0.500000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vn 0.0000 -1.0000 -0.0000
usemtl None
s 1
f 15/15/3 16/16/3 17/17/3 18/18/3
o stairs_front_left_stairs_front.002
v -0.500000 0.000000 0.000000
v -0.500000 0.500000 0.000000
v 0.000000 0.500000 0.000000
v 0.000000 0.000000 0.000000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.000000 -0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 -0.500000 -0.500000
v 0.000000 0.000000 -0.500000
v 0.000000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v 0.500000 0.000000 -0.500000
vt 1.0000 0.5000
vt 1.0000 1.0000
vt 0.5000 1.0000
vt 0.5000 0.5000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt 0.0000 0.5000
vt 0.0000 0.0000
vt 0.5000 0.5000
vt 0.5000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.5000
vn 0.0000 0.0000 -1.0000
usemtl None
s 1
f 19/19/4 20/20/4 21/21/4 22/22/4
f 23/23/4 24/24/4 25/25/4 26/26/4
f 27/27/4 28/28/4 29/29/4 30/30/4
o stairs_top_stairs_top.001
v 0.000000 0.000000 -0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 0.000000 0.000000
v 0.000000 0.000000 0.000000
v 0.500000 0.500000 -0.500000
v 0.000000 0.500000 -0.500000
v 0.000000 0.500000 0.000000
v 0.500000 0.500000 0.000000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v 0.500000 0.500000 0.000000
v -0.500000 0.500000 0.000000
vt 0.5000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.5000
vt 0.5000 0.5000
vt 1.0000 1.0000
vt 0.5000 1.0000
vt 0.5000 0.5000
vt 1.0000 0.5000
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt 0.0000 0.5000
vn 0.0000 1.0000 0.0000
usemtl None
s 1
f 31/31/5 32/32/5 33/33/5 34/34/5
f 35/35/5 36/36/5 37/37/5 38/38/5
f 39/39/5 40/40/5 41/41/5 42/42/5
o stairs_back_left_stairs_back.005
v 0.500000 0.000000 -0.500000
v 0.500000 0.500000 -0.500000
v 0.500000 0.500000 0.000000
v 0.500000 0.000000 0.000000
v 0.500000 0.000000 0.000000
v 0.500000 0.500000 0.000000
v 0.500000 0.500000 0.500000
v 0.500000 -0.000000 0.500000
v 0.500000 -0.500000 -0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 0.000000 0.000000
v 0.500000 -0.500000 -0.000000
v 0.500000 -0.500000 -0.000000
v 0.500000 0.000000 0.000000
v 0.500000 -0.000000 0.500000
v 0.500000 -0.500000 0.500000
vt 0.5000 0.5000
vt 0.5000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.5000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt 0.5000 0.5000
vt 0.5000 0.0000
vt 0.5000 0.0000
vt 0.5000 0.5000
vt 0.0000 0.5000
vt 0.0000 0.0000
vt 1.0000 0.5000
vt 1.0000 1.0000
vt 0.5000 1.0000
vt 0.5000 0.5000
vn 1.0000 0.0000 0.0000
usemtl None
s 1
f 47/43/6 48/44/6 49/45/6 50/46/6
f 51/47/6 52/48/6 53/49/6 54/50/6
f 55/51/6 56/52/6 57/53/6 58/54/6
usemtl None.002
f 43/55/6 44/56/6 45/57/6 46/58/6

View file

@ -0,0 +1,136 @@
# Blender v2.78 (sub 0) OBJ File: ''
# www.blender.org
mtllib stairs_outer_stair.mtl
o stairs_bottom
v -0.500000 -0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 0.500000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vn 0.0000 -1.0000 -0.0000
usemtl None
s 1
f 1/1/1 2/2/1 3/3/1 4/4/1
o stairs_back_left_stairs_left
v 0.500000 0.000000 0.000000
v 0.500000 -0.500000 -0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 0.500000 0.000000
v 0.500000 0.500000 0.500000
v 0.500000 -0.500000 0.500000
vt 0.5000 0.5000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt 0.5000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vn 1.0000 0.0000 0.0000
usemtl None
s 1
f 5/5/2 6/6/2 7/7/2
f 5/5/2 8/8/2 9/9/2
f 6/6/2 5/5/2 10/10/2
f 5/5/2 9/9/2 10/10/2
o stairs_back_right_stairs_back
v 0.000000 -0.500000 0.500000
v 0.000000 -0.000000 0.500000
v -0.500000 -0.000000 0.500000
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v 0.500000 -0.000000 0.500000
v 0.500000 0.500000 0.500000
v 0.000000 0.500000 0.500000
vt 0.5000 0.0000
vt 0.5000 0.5000
vt 0.0000 0.5000
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt 1.0000 1.0000
vt 0.5000 1.0000
vn 0.0000 -0.0000 1.0000
usemtl None
s 1
f 11/11/3 12/12/3 13/13/3 14/14/3
f 15/15/3 16/16/3 12/12/3 11/11/3
f 16/16/3 17/17/3 18/18/3 12/12/3
o stairs_top_stairs_top.001
v 0.000000 0.500000 0.500000
v 0.501689 0.500000 0.500000
v 0.501689 0.500000 0.000000
v 0.000000 0.500000 0.000000
v -0.500000 -0.000000 0.500000
v 0.001689 -0.000000 0.500000
v 0.001689 0.000000 0.000000
v -0.500000 0.000000 0.000000
v 0.500000 0.000000 -0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 0.000000 0.000000
v 0.500000 0.000000 0.000000
vt 0.5000 0.0000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt 0.5000 0.5000
vt 0.0000 0.0000
vt 0.5000 0.0000
vt 0.5000 0.5000
vt 0.0000 0.5000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.5000
vt 1.0000 0.5000
vn 0.0000 1.0000 0.0000
usemtl None
s 1
f 19/19/4 20/20/4 21/21/4 22/22/4
usemtl None.004
f 23/23/4 24/24/4 25/25/4 26/26/4
f 27/27/4 28/28/4 29/29/4 30/30/4
o stairs_front_left_stairs_front.000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.000000 -0.500000
v 0.500000 0.000000 -0.500000
v 0.500000 -0.500000 -0.500000
v 0.500000 0.500000 0.000000
v 0.500000 0.000000 0.000000
v 0.000000 0.000000 0.000000
v 0.000000 0.500000 0.000000
vt 1.0000 0.0000
vt 1.0000 0.5000
vt -0.0000 0.5000
vt -0.0000 0.0000
vt 0.5000 0.5000
vt 0.5000 1.0000
vt -0.0000 1.0000
vt -0.0000 0.5000
vn 0.0000 0.0000 -1.0000
usemtl None.001
s 1
f 31/31/5 32/32/5 33/33/5 34/34/5
usemtl None.003
f 37/35/5 38/36/5 35/37/5 36/38/5
o stairs_front_right_stairs_right.001_stairs_front_left_stairs_front.002
v -0.500000 -0.500000 0.500000
v -0.500000 0.000000 0.500000
v -0.500000 0.000000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.000000 0.000000 0.500000
v 0.000000 0.500000 0.500000
v 0.000000 0.500000 -0.000000
v -0.000000 0.000000 0.000000
vt 1.0000 0.0000
vt 1.0000 0.5021
vt -0.0000 0.5021
vt -0.0000 0.0000
vt 1.0000 0.5021
vt 1.0000 1.0000
vt 0.5000 1.0000
vt 0.5000 0.5021
vn -1.0000 0.0000 0.0000
usemtl None.002
s 1
f 39/39/6 40/40/6 41/41/6 42/42/6
f 43/43/6 44/44/6 45/45/6 46/46/6

View file

@ -7,7 +7,7 @@ local loss_prob = {}
loss_prob["default:cobble"] = 3 loss_prob["default:cobble"] = 3
loss_prob["default:dirt"] = 4 loss_prob["default:dirt"] = 4
local tnt_radius = tonumber(minetest.setting_get("tnt_radius") or 3) local tnt_radius = tonumber(minetest.settings:get("tnt_radius") or 3)
-- Fill a list with data for content IDs, after all nodes are registered -- Fill a list with data for content IDs, after all nodes are registered
local cid_data = {} local cid_data = {}
@ -78,8 +78,12 @@ local function add_drop(drops, item)
end end
end end
local function destroy(drops, npos, cid, c_air, c_fire, on_blast_queue, ignore_protection, ignore_on_blast) =======
if not ignore_protection and minetest.is_protected(npos, "") then local basic_flame_on_construct -- cached value
local function destroy(drops, npos, cid, c_air, c_fire,
on_blast_queue, on_construct_queue,
ignore_protection, ignore_on_blast, owner)
if not ignore_protection and minetest.is_protected(npos, owner) then
return cid return cid
end end
@ -251,13 +255,13 @@ function tnt.burn(pos, nodename)
elseif def.on_ignite then elseif def.on_ignite then
def.on_ignite(pos) def.on_ignite(pos)
elseif minetest.get_item_group(name, "tnt") > 0 then elseif minetest.get_item_group(name, "tnt") > 0 then
minetest.swap_node(pos, {name = name .. "_burning"})
minetest.sound_play("tnt_ignite", {pos = pos}) minetest.sound_play("tnt_ignite", {pos = pos})
minetest.set_node(pos, {name = name .. "_burning"})
minetest.get_node_timer(pos):start(1) minetest.get_node_timer(pos):start(1)
end end
end end
local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast) local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast, owner)
pos = vector.round(pos) pos = vector.round(pos)
-- scan for adjacent TNT nodes first, and enlarge the explosion -- scan for adjacent TNT nodes first, and enlarge the explosion
local vm1 = VoxelManip() local vm1 = VoxelManip()
@ -315,8 +319,8 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast)
local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z} local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z}
if cid ~= c_air then if cid ~= c_air then
data[vi] = destroy(drops, p, cid, c_air, c_fire, data[vi] = destroy(drops, p, cid, c_air, c_fire,
on_blast_queue, ignore_protection, on_blast_queue, on_construct_queue,
ignore_on_blast) ignore_protection, ignore_on_blast, owner)
end end
end end
vi = vi + 1 vi = vi + 1
@ -354,14 +358,23 @@ local function tnt_explode(pos, radius, ignore_protection, ignore_on_blast)
end end
end end
for _, queued_data in pairs(on_construct_queue) do
queued_data.fn(queued_data.pos)
end
minetest.log("action", "TNT owned by " .. owner .. " detonated at " ..
minetest.pos_to_string(pos) .. " with radius " .. radius)
return drops, radius return drops, radius
end end
function tnt.boom(pos, def) function tnt.boom(pos, def)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64}) minetest.sound_play("tnt_explode", {pos = pos, gain = 1.5, max_hear_distance = 2*64})
minetest.set_node(pos, {name = "tnt:boom"}) minetest.set_node(pos, {name = "tnt:boom"})
local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection, local drops, radius = tnt_explode(pos, def.radius, def.ignore_protection,
def.ignore_on_blast) def.ignore_on_blast, owner)
-- append entity drops -- append entity drops
local damage_radius = (radius / def.radius) * def.damage_radius local damage_radius = (radius / def.radius) * def.damage_radius
entity_physics(pos, damage_radius, drops) entity_physics(pos, damage_radius, drops)
@ -490,8 +503,8 @@ minetest.register_node("tnt:gunpowder_burning", {
on_timer = function(pos, elapsed) on_timer = function(pos, elapsed)
for dx = -1, 1 do for dx = -1, 1 do
for dz = -1, 1 do for dz = -1, 1 do
if math.abs(dx) + math.abs(dz) == 1 then
for dy = -1, 1 do for dy = -1, 1 do
if not (dx == 0 and dz == 0) then
tnt.burn({ tnt.burn({
x = pos.x + dx, x = pos.x + dx,
y = pos.y + dy, y = pos.y + dy,
@ -560,9 +573,16 @@ function tnt.register_tnt(def)
is_ground_content = false, is_ground_content = false,
groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5}, groups = {dig_immediate = 2, mesecon = 2, tnt = 1, flammable = 5},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer)
if placer:is_player() then
local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name())
end
end,
on_punch = function(pos, node, puncher) on_punch = function(pos, node, puncher)
if puncher:get_wielded_item():get_name() == "default:torch" then if puncher:get_wielded_item():get_name() == "default:torch" then
minetest.set_node(pos, {name = name .. "_burning"}) minetest.swap_node(pos, {name = name .. "_burning"})
minetest.registered_nodes[name .. "_burning"].on_construct(pos)
minetest.log("action", puncher:get_player_name() .. minetest.log("action", puncher:get_player_name() ..
" ignites " .. node.name .. " at " .. " ignites " .. node.name .. " at " ..
minetest.pos_to_string(pos)) minetest.pos_to_string(pos))
@ -581,10 +601,12 @@ function tnt.register_tnt(def)
} }
}, },
on_burn = function(pos) on_burn = function(pos)
minetest.set_node(pos, {name = name .. "_burning"}) minetest.swap_node(pos, {name = name .. "_burning"})
minetest.registered_nodes[name .. "_burning"].on_construct(pos)
end, end,
on_ignite = function(pos, igniter) on_ignite = function(pos, igniter)
minetest.set_node(pos, {name = name .. "_burning"}) minetest.swap_node(pos, {name = name .. "_burning"})
minetest.registered_nodes[name .. "_burning"].on_construct(pos)
end, end,
}) })
--end --end

View file

@ -94,7 +94,7 @@ minetest.register_craft({
}) })
minetest.register_node("vessels:glass_bottle", { minetest.register_node("vessels:glass_bottle", {
description = "Glass Bottle (empty)", description = "Empty Glass Bottle",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"vessels_glass_bottle.png"}, tiles = {"vessels_glass_bottle.png"},
inventory_image = "vessels_glass_bottle.png", inventory_image = "vessels_glass_bottle.png",
@ -120,7 +120,7 @@ minetest.register_craft( {
}) })
minetest.register_node("vessels:drinking_glass", { minetest.register_node("vessels:drinking_glass", {
description = "Drinking Glass (empty)", description = "Empty Drinking Glass",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"vessels_drinking_glass.png"}, tiles = {"vessels_drinking_glass.png"},
inventory_image = "vessels_drinking_glass_inv.png", inventory_image = "vessels_drinking_glass_inv.png",
@ -146,7 +146,7 @@ minetest.register_craft( {
}) })
minetest.register_node("vessels:steel_bottle", { minetest.register_node("vessels:steel_bottle", {
description = "Heavy Steel Bottle (empty)", description = "Empty Heavy Steel Bottle",
drawtype = "plantlike", drawtype = "plantlike",
tiles = {"vessels_steel_bottle.png"}, tiles = {"vessels_steel_bottle.png"},
inventory_image = "vessels_steel_bottle.png", inventory_image = "vessels_steel_bottle.png",
@ -175,7 +175,7 @@ minetest.register_craft( {
-- Glass and steel recycling -- Glass and steel recycling
minetest.register_craftitem("vessels:glass_fragments", { minetest.register_craftitem("vessels:glass_fragments", {
description = "Pile of Glass Fragments", description = "Glass Fragments",
inventory_image = "vessels_glass_fragments.png", inventory_image = "vessels_glass_fragments.png",
}) })

View file

@ -159,7 +159,7 @@ xpanes.register_pane("pane", {
}) })
xpanes.register_pane("bar", { xpanes.register_pane("bar", {
description = "Iron bar", description = "Iron Bar",
textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_bar_top.png"}, textures = {"xpanes_bar.png","xpanes_bar.png","xpanes_bar_top.png"},
inventory_image = "xpanes_bar.png", inventory_image = "xpanes_bar.png",
wield_image = "xpanes_bar.png", wield_image = "xpanes_bar.png",