subgame update | part 2/2
Very big update! =)
@ -1,37 +0,0 @@
|
|||||||
-- Armor Configuration (defaults)
|
|
||||||
|
|
||||||
-- Increase this if you get initialization glitches when a player first joins.
|
|
||||||
ARMOR_INIT_DELAY = 1
|
|
||||||
|
|
||||||
-- Number of initialization attempts.
|
|
||||||
-- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist.
|
|
||||||
ARMOR_INIT_TIMES = 1
|
|
||||||
|
|
||||||
-- Increase this if armor is not getting into bones due to server lag.
|
|
||||||
ARMOR_BONES_DELAY = 1
|
|
||||||
|
|
||||||
-- How often player armor/wield items are updated.
|
|
||||||
ARMOR_UPDATE_TIME = 1
|
|
||||||
|
|
||||||
-- Drop armor when a player dies.
|
|
||||||
-- Uses bones mod if present, otherwise items are dropped around the player.
|
|
||||||
ARMOR_DROP = true
|
|
||||||
|
|
||||||
-- Pulverise armor when a player dies, overrides ARMOR_DROP.
|
|
||||||
ARMOR_DESTROY = false
|
|
||||||
|
|
||||||
-- You can use this to increase or decrease overall armor effectiveness,
|
|
||||||
-- eg: ARMOR_LEVEL_MULTIPLIER = 0.5 will reduce armor level by half.
|
|
||||||
ARMOR_LEVEL_MULTIPLIER = 1
|
|
||||||
|
|
||||||
-- You can use this to increase or decrease overall armor healing,
|
|
||||||
-- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether.
|
|
||||||
ARMOR_HEAL_MULTIPLIER = 1
|
|
||||||
|
|
||||||
-- You can also use this file to execute arbitary lua code
|
|
||||||
-- eg: Dumb the armor down if using Simple Mobs
|
|
||||||
if minetest.get_modpath("mobs") then
|
|
||||||
ARMOR_LEVEL_MULTIPLIER = 0.5
|
|
||||||
ARMOR_HEAL_MULTIPLIER = 0
|
|
||||||
end
|
|
||||||
|
|
@ -1,3 +1,2 @@
|
|||||||
|
|
||||||
default
|
default
|
||||||
domb
|
domb
|
@ -9,10 +9,12 @@ end)
|
|||||||
--
|
--
|
||||||
|
|
||||||
local function is_water(pos)
|
local function is_water(pos)
|
||||||
|
|
||||||
return minetest.get_item_group(minetest.get_node(pos).name, "water") ~= 0
|
return minetest.get_item_group(minetest.get_node(pos).name, "water") ~= 0
|
||||||
end
|
end
|
||||||
|
|
||||||
local function get_sign(i)
|
local function get_sign(i)
|
||||||
|
|
||||||
if i == 0 then
|
if i == 0 then
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@ -21,13 +23,18 @@ local function get_sign(i)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function get_velocity(v, yaw, y)
|
local function get_velocity(v, yaw, y)
|
||||||
|
|
||||||
local x = -math.sin(yaw) * v
|
local x = -math.sin(yaw) * v
|
||||||
local z = math.cos(yaw) * v
|
local z = math.cos(yaw) * v
|
||||||
|
|
||||||
return {x = x, y = y, z = z}
|
return {x = x, y = y, z = z}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local square = math.sqrt
|
||||||
|
|
||||||
local function get_v(v)
|
local function get_v(v)
|
||||||
return math.sqrt(v.x ^ 2 + v.z ^ 2)
|
|
||||||
|
return square(v.x *v.x + v.z *v.z)
|
||||||
end
|
end
|
||||||
|
|
||||||
--
|
--
|
||||||
@ -47,32 +54,47 @@ local boat = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function boat.on_rightclick(self, clicker)
|
function boat.on_rightclick(self, clicker)
|
||||||
|
|
||||||
if not clicker or not clicker:is_player() then
|
if not clicker or not clicker:is_player() then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local name = clicker:get_player_name()
|
local name = clicker:get_player_name()
|
||||||
|
|
||||||
if self.driver and clicker == self.driver then
|
if self.driver and clicker == self.driver then
|
||||||
|
|
||||||
handlers[name] = nil
|
handlers[name] = nil
|
||||||
self.driver = nil
|
self.driver = nil
|
||||||
|
|
||||||
clicker:set_detach()
|
clicker:set_detach()
|
||||||
|
|
||||||
default.player_attached[name] = false
|
default.player_attached[name] = false
|
||||||
default.player_set_animation(clicker, "stand" , 30)
|
default.player_set_animation(clicker, "stand" , 30)
|
||||||
|
|
||||||
local pos = clicker:getpos()
|
local pos = clicker:getpos()
|
||||||
|
|
||||||
minetest.after(0.1, function()
|
minetest.after(0.1, function()
|
||||||
clicker:setpos({x=pos.x, y=pos.y+0.2, z=pos.z})
|
clicker:setpos({x=pos.x, y=pos.y+0.2, z=pos.z})
|
||||||
end)
|
end)
|
||||||
|
|
||||||
elseif not self.driver then
|
elseif not self.driver then
|
||||||
|
|
||||||
if handlers[name] and handlers[name].driver then
|
if handlers[name] and handlers[name].driver then
|
||||||
handlers[name].driver = nil
|
handlers[name].driver = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
handlers[name] = self.object:get_luaentity()
|
handlers[name] = self.object:get_luaentity()
|
||||||
self.driver = clicker
|
self.driver = clicker
|
||||||
|
|
||||||
clicker:set_attach(self.object, "",
|
clicker:set_attach(self.object, "",
|
||||||
{x = 0, y = 11, z = -3}, {x = 0, y = 0, z = 0})
|
{x = 0, y = 11, z = -3}, {x = 0, y = 0, z = 0})
|
||||||
|
|
||||||
default.player_attached[name] = true
|
default.player_attached[name] = true
|
||||||
|
|
||||||
minetest.after(0.2, function()
|
minetest.after(0.2, function()
|
||||||
default.player_set_animation(clicker, "sit" , 30)
|
default.player_set_animation(clicker, "sit" , 30)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
self.object:setyaw(clicker:get_look_yaw() - math.pi / 2)
|
self.object:setyaw(clicker:get_look_yaw() - math.pi / 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -106,15 +128,20 @@ function boat.on_punch(self, puncher)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not self.driver then
|
if not self.driver then
|
||||||
|
|
||||||
self.removed = true
|
self.removed = true
|
||||||
|
|
||||||
if not minetest.setting_getbool("creative_mode") then
|
if not minetest.setting_getbool("creative_mode") then
|
||||||
|
|
||||||
local inv = puncher:get_inventory()
|
local inv = puncher:get_inventory()
|
||||||
|
|
||||||
if inv:room_for_item("main", "boats:boat") then
|
if inv:room_for_item("main", "boats:boat") then
|
||||||
inv:add_item("main", "boats:boat")
|
inv:add_item("main", "boats:boat")
|
||||||
else
|
else
|
||||||
minetest.add_item(self.object:getpos(), "boats:boat")
|
minetest.add_item(self.object:getpos(), "boats:boat")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -123,6 +150,7 @@ function boat.on_step(self, dtime)
|
|||||||
|
|
||||||
-- after 10 seconds remove boat and drop as item if not boarded
|
-- after 10 seconds remove boat and drop as item if not boarded
|
||||||
self.count = self.count + dtime
|
self.count = self.count + dtime
|
||||||
|
|
||||||
if self.count > 10 then
|
if self.count > 10 then
|
||||||
minetest.add_item(self.object:getpos(), "boats:boat")
|
minetest.add_item(self.object:getpos(), "boats:boat")
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
@ -132,7 +160,9 @@ function boat.on_step(self, dtime)
|
|||||||
self.v = get_v(self.object:getvelocity()) * get_sign(self.v)
|
self.v = get_v(self.object:getvelocity()) * get_sign(self.v)
|
||||||
|
|
||||||
if self.driver then
|
if self.driver then
|
||||||
|
|
||||||
self.count = 0
|
self.count = 0
|
||||||
|
|
||||||
local ctrl = self.driver:get_player_control()
|
local ctrl = self.driver:get_player_control()
|
||||||
local yaw = self.object:getyaw()
|
local yaw = self.object:getyaw()
|
||||||
|
|
||||||
@ -143,12 +173,15 @@ function boat.on_step(self, dtime)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if ctrl.left then
|
if ctrl.left then
|
||||||
|
|
||||||
if self.v < 0 then
|
if self.v < 0 then
|
||||||
self.object:setyaw(yaw - (1 + dtime) * 0.08) -- 0.03 changed to speed up turning
|
self.object:setyaw(yaw - (1 + dtime) * 0.08) -- 0.03 changed to speed up turning
|
||||||
else
|
else
|
||||||
self.object:setyaw(yaw + (1 + dtime) * 0.08) -- 0.03
|
self.object:setyaw(yaw + (1 + dtime) * 0.08) -- 0.03
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif ctrl.right then
|
elseif ctrl.right then
|
||||||
|
|
||||||
if self.v < 0 then
|
if self.v < 0 then
|
||||||
self.object:setyaw(yaw + (1 + dtime) * 0.08) -- 0.03
|
self.object:setyaw(yaw + (1 + dtime) * 0.08) -- 0.03
|
||||||
else
|
else
|
||||||
@ -158,6 +191,7 @@ function boat.on_step(self, dtime)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local velo = self.object:getvelocity()
|
local velo = self.object:getvelocity()
|
||||||
|
|
||||||
if self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
|
if self.v == 0 and velo.x == 0 and velo.y == 0 and velo.z == 0 then
|
||||||
--self.object:setpos(self.object:getpos())
|
--self.object:setpos(self.object:getpos())
|
||||||
return
|
return
|
||||||
@ -167,8 +201,10 @@ function boat.on_step(self, dtime)
|
|||||||
self.v = self.v - 0.02 * s
|
self.v = self.v - 0.02 * s
|
||||||
|
|
||||||
if s ~= get_sign(self.v) then
|
if s ~= get_sign(self.v) then
|
||||||
|
|
||||||
self.object:setvelocity({x = 0, y = 0, z = 0})
|
self.object:setvelocity({x = 0, y = 0, z = 0})
|
||||||
self.v = 0
|
self.v = 0
|
||||||
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -179,22 +215,29 @@ function boat.on_step(self, dtime)
|
|||||||
local p = self.object:getpos()
|
local p = self.object:getpos()
|
||||||
local new_velo = {x = 0, y = 0, z = 0}
|
local new_velo = {x = 0, y = 0, z = 0}
|
||||||
local new_acce = {x = 0, y = 0, z = 0}
|
local new_acce = {x = 0, y = 0, z = 0}
|
||||||
|
|
||||||
p.y = p.y - 0.5
|
p.y = p.y - 0.5
|
||||||
|
|
||||||
if not is_water(p) then
|
if not is_water(p) then
|
||||||
|
|
||||||
local nodedef = minetest.registered_nodes[minetest.get_node(p).name]
|
local nodedef = minetest.registered_nodes[minetest.get_node(p).name]
|
||||||
|
|
||||||
if (not nodedef) or nodedef.walkable then
|
if (not nodedef) or nodedef.walkable then
|
||||||
self.v = 0
|
self.v = 0
|
||||||
new_acce = {x = 0, y = 0, z = 0} -- y was 1
|
new_acce = {x = 0, y = 0, z = 0} -- y was 1
|
||||||
else
|
else
|
||||||
new_acce = {x = 0, y = -9.8, z = 0}
|
new_acce = {x = 0, y = -9.8, z = 0}
|
||||||
end
|
end
|
||||||
|
|
||||||
new_velo = get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y)
|
new_velo = get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y)
|
||||||
--self.object:setpos(self.object:getpos())
|
--self.object:setpos(self.object:getpos())
|
||||||
else
|
else
|
||||||
p.y = p.y + 1
|
p.y = p.y + 1
|
||||||
|
|
||||||
if is_water(p) then
|
if is_water(p) then
|
||||||
|
|
||||||
local y = self.object:getvelocity().y
|
local y = self.object:getvelocity().y
|
||||||
|
|
||||||
if y >= 4.5 then
|
if y >= 4.5 then
|
||||||
y = 4.5
|
y = 4.5
|
||||||
elseif y < 0 then
|
elseif y < 0 then
|
||||||
@ -202,10 +245,12 @@ function boat.on_step(self, dtime)
|
|||||||
else
|
else
|
||||||
new_acce = {x = 0, y = 5, z = 0}
|
new_acce = {x = 0, y = 5, z = 0}
|
||||||
end
|
end
|
||||||
|
|
||||||
new_velo = get_velocity(self.v, self.object:getyaw(), y)
|
new_velo = get_velocity(self.v, self.object:getyaw(), y)
|
||||||
--self.object:setpos(self.object:getpos())
|
--self.object:setpos(self.object:getpos())
|
||||||
else
|
else
|
||||||
new_acce = {x = 0, y = 0, z = 0}
|
new_acce = {x = 0, y = 0, z = 0}
|
||||||
|
|
||||||
if math.abs(self.object:getvelocity().y) < 1 then
|
if math.abs(self.object:getvelocity().y) < 1 then
|
||||||
local pos = self.object:getpos()
|
local pos = self.object:getpos()
|
||||||
pos.y = math.floor(pos.y) + 0.5
|
pos.y = math.floor(pos.y) + 0.5
|
||||||
@ -223,6 +268,7 @@ function boat.on_step(self, dtime)
|
|||||||
|
|
||||||
-- if boat comes to sudden stop then it has crashed, destroy boat and drop 3x wood
|
-- if boat comes to sudden stop then it has crashed, destroy boat and drop 3x wood
|
||||||
if self.v2 - self.v >= 3 then
|
if self.v2 - self.v >= 3 then
|
||||||
|
|
||||||
if self.driver then
|
if self.driver then
|
||||||
--print ("Crash! with driver", self.v2 - self.v)
|
--print ("Crash! with driver", self.v2 - self.v)
|
||||||
self.driver:set_detach()
|
self.driver:set_detach()
|
||||||
@ -233,7 +279,9 @@ function boat.on_step(self, dtime)
|
|||||||
end
|
end
|
||||||
|
|
||||||
minetest.add_item(self.object:getpos(), "default:wood 3")
|
minetest.add_item(self.object:getpos(), "default:wood 3")
|
||||||
|
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -251,15 +299,20 @@ minetest.register_craftitem("boats:boat", {
|
|||||||
liquids_pointable = true,
|
liquids_pointable = true,
|
||||||
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
|
||||||
if pointed_thing.type ~= "node"
|
if pointed_thing.type ~= "node"
|
||||||
or not is_water(pointed_thing.under) then
|
or not is_water(pointed_thing.under) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
pointed_thing.under.y = pointed_thing.under.y + 0.5
|
pointed_thing.under.y = pointed_thing.under.y + 0.5
|
||||||
|
|
||||||
minetest.add_entity(pointed_thing.under, "boats:boat")
|
minetest.add_entity(pointed_thing.under, "boats:boat")
|
||||||
|
|
||||||
if not minetest.setting_getbool("creative_mode") then
|
if not minetest.setting_getbool("creative_mode") then
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
end
|
end
|
||||||
|
|
||||||
return itemstack
|
return itemstack
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
Before Width: | Height: | Size: 853 B After Width: | Height: | Size: 848 B |
@ -1,25 +0,0 @@
|
|||||||
item_entity.lua
|
|
||||||
|
|
||||||
edited by TenPlus1
|
|
||||||
|
|
||||||
Features:
|
|
||||||
- Items are destroyed by lava
|
|
||||||
- Items are moved along by flowing water (new routine)
|
|
||||||
- Items are removed after 120 seconds or the time that is specified by
|
|
||||||
remove_items in minetest.conf (-1 disables it)
|
|
||||||
- Particle effects added
|
|
||||||
|
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
||||||
Version 2, December 2004
|
|
||||||
|
|
||||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
|
||||||
|
|
||||||
Everyone is permitted to copy and distribute verbatim or modified
|
|
||||||
copies of this license document, and changing it is allowed as long
|
|
||||||
as the name is changed.
|
|
||||||
|
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
@ -1,2 +0,0 @@
|
|||||||
default
|
|
||||||
mobs?
|
|
@ -1,415 +0,0 @@
|
|||||||
-- Minetest: builtin/item_entity.lua (5th October 2015)
|
|
||||||
|
|
||||||
-- water flow functions by QwertyMine3 and edited by TenPlus1
|
|
||||||
local function to_unit_vector(dir_vector)
|
|
||||||
local inv_roots = {
|
|
||||||
[0] = 1, [1] = 1, [2] = 0.70710678118655, [4] = 0.5,
|
|
||||||
[5] = 0.44721359549996, [8] = 0.35355339059327
|
|
||||||
}
|
|
||||||
local sum = dir_vector.x * dir_vector.x + dir_vector.z * dir_vector.z
|
|
||||||
return {
|
|
||||||
x = dir_vector.x * inv_roots[sum],
|
|
||||||
y = dir_vector.y,
|
|
||||||
z = dir_vector.z * inv_roots[sum]
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function is_touching(realpos, nodepos, radius)
|
|
||||||
return (math.abs(realpos - nodepos) > (0.5 - radius))
|
|
||||||
end
|
|
||||||
|
|
||||||
local function node_ok(pos) -- added by TenPlus1
|
|
||||||
local node = minetest.get_node_or_nil(pos)
|
|
||||||
if not node then
|
|
||||||
return minetest.registered_nodes["default:dirt"]
|
|
||||||
end
|
|
||||||
local nodef = minetest.registered_nodes[node.name]
|
|
||||||
if nodef then
|
|
||||||
return node
|
|
||||||
end
|
|
||||||
return minetest.registered_nodes["default:dirt"]
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
local function is_water(pos)
|
|
||||||
return (minetest.get_item_group(
|
|
||||||
node_ok({x=pos.x,y=pos.y,z=pos.z}).name, "water") ~= 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function is_liquid(pos)
|
|
||||||
return (minetest.get_item_group(
|
|
||||||
node_ok({x=pos.x,y=pos.y,z=pos.z}).name, "liquid") ~= 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function node_is_liquid(node)
|
|
||||||
return (minetest.get_item_group(node.name, "liquid") ~= 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function quick_flow_logic(node, pos_testing, direction)
|
|
||||||
|
|
||||||
local nodef = minetest.registered_nodes[node.name]
|
|
||||||
|
|
||||||
if minetest.registered_nodes[node.name].liquidtype == "source" then
|
|
||||||
|
|
||||||
local node_testing = node_ok(pos_testing)
|
|
||||||
local param2_testing = node_testing.param2
|
|
||||||
|
|
||||||
if minetest.registered_nodes[node_testing.name].liquidtype ~= "flowing" then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return direction
|
|
||||||
end
|
|
||||||
|
|
||||||
elseif minetest.registered_nodes[node.name].liquidtype == "flowing" then
|
|
||||||
|
|
||||||
local node_testing = node_ok(pos_testing)
|
|
||||||
local param2_testing = node_testing.param2
|
|
||||||
|
|
||||||
if minetest.registered_nodes[node_testing.name].liquidtype == "source" then
|
|
||||||
return -direction
|
|
||||||
|
|
||||||
elseif minetest.registered_nodes[node_testing.name].liquidtype == "flowing" then
|
|
||||||
|
|
||||||
if param2_testing < node.param2 then
|
|
||||||
if (node.param2 - param2_testing) > 6 then
|
|
||||||
return -direction
|
|
||||||
else
|
|
||||||
return direction
|
|
||||||
end
|
|
||||||
|
|
||||||
elseif param2_testing > node.param2 then
|
|
||||||
if (param2_testing - node.param2) > 6 then
|
|
||||||
return direction
|
|
||||||
else
|
|
||||||
return -direction
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
local function quick_flow(pos, node)
|
|
||||||
local x, z = 0, 0
|
|
||||||
|
|
||||||
if not node_is_liquid(node) then
|
|
||||||
return {x = 0, y = 0, z = 0}
|
|
||||||
end
|
|
||||||
|
|
||||||
x = x + quick_flow_logic(node, {x = pos.x - 1, y = pos.y, z = pos.z},-1)
|
|
||||||
x = x + quick_flow_logic(node, {x = pos.x + 1, y = pos.y, z = pos.z}, 1)
|
|
||||||
z = z + quick_flow_logic(node, {x = pos.x, y = pos.y, z = pos.z - 1},-1)
|
|
||||||
z = z + quick_flow_logic(node, {x = pos.x, y = pos.y, z = pos.z + 1}, 1)
|
|
||||||
|
|
||||||
return to_unit_vector({x = x, y = 0, z = z})
|
|
||||||
end
|
|
||||||
|
|
||||||
--if not in water but touching, move centre to touching block
|
|
||||||
--x has higher precedence than z -- if pos changes with x, it affects z
|
|
||||||
local function move_centre(pos, realpos, node, radius)
|
|
||||||
|
|
||||||
if is_touching(realpos.x, pos.x, radius) then
|
|
||||||
|
|
||||||
if is_liquid({x = pos.x - 1, y = pos.y, z = pos.z}) then
|
|
||||||
pos = {x = pos.x - 1, y = pos.y, z = pos.z}
|
|
||||||
node = node_ok(pos)
|
|
||||||
|
|
||||||
elseif is_liquid({x = pos.x + 1, y = pos.y, z = pos.z}) then
|
|
||||||
pos = {x = pos.x + 1, y = pos.y, z = pos.z}
|
|
||||||
node = node_ok(pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if is_touching(realpos.z, pos.z, radius) then
|
|
||||||
|
|
||||||
if is_liquid({x = pos.x, y = pos.y, z = pos.z - 1}) then
|
|
||||||
pos = {x = pos.x, y = pos.y, z = pos.z - 1}
|
|
||||||
node = node_ok(pos)
|
|
||||||
|
|
||||||
elseif is_liquid({x = pos.x, y = pos.y, z = pos.z + 1}) then
|
|
||||||
pos = {x = pos.x, y = pos.y, z = pos.z + 1}
|
|
||||||
node = node_ok(pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return pos, node
|
|
||||||
end
|
|
||||||
-- END water flow functions
|
|
||||||
|
|
||||||
function core.spawn_item(pos, item)
|
|
||||||
-- take item in any format
|
|
||||||
local stack = ItemStack(item)
|
|
||||||
local obj = core.add_entity(pos, "__builtin:item")
|
|
||||||
-- Don't use obj if it couldn't be added to the map.
|
|
||||||
if obj then
|
|
||||||
obj:get_luaentity():set_item(stack:to_string())
|
|
||||||
end
|
|
||||||
return obj
|
|
||||||
end
|
|
||||||
|
|
||||||
-- if item_entity_ttl is not set, enity will have default life time
|
|
||||||
-- setting to -1 disables the feature
|
|
||||||
local time_to_live = tonumber(core.setting_get("item_entity_ttl")) or 900
|
|
||||||
|
|
||||||
-- if destroy_item is 1 then dropped items will burn inside lava
|
|
||||||
local destroy_item = tonumber(core.setting_get("destroy_item")) or 1
|
|
||||||
|
|
||||||
-- particle effects for when item is destroyed
|
|
||||||
local function add_effects(pos)
|
|
||||||
minetest.add_particlespawner({
|
|
||||||
amount = 1,
|
|
||||||
time = 0.25,
|
|
||||||
minpos = pos,
|
|
||||||
maxpos = pos,
|
|
||||||
minvel = {x = -1, y = 2, z = -1},
|
|
||||||
maxvel = {x = 1, y = 5, z = 1},
|
|
||||||
minacc = {x = -4, y = -4, z = -4},
|
|
||||||
maxacc = {x = 4, y = 4, z = 4},
|
|
||||||
minexptime = 1,
|
|
||||||
maxexptime = 3,
|
|
||||||
minsize = 1,
|
|
||||||
maxsize = 4,
|
|
||||||
texture = "tnt_smoke.png",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- check if within map limits (-30911 to 30927)
|
|
||||||
local function within_limits(pos)
|
|
||||||
if pos.x > -30913
|
|
||||||
and pos.x < 30928
|
|
||||||
and pos.y > -30913
|
|
||||||
and pos.y < 30928
|
|
||||||
and pos.z > -30913
|
|
||||||
and pos.z < 30928 then
|
|
||||||
return true -- within limits
|
|
||||||
end
|
|
||||||
return false -- beyond limits
|
|
||||||
end
|
|
||||||
|
|
||||||
core.register_entity(":__builtin:item", {
|
|
||||||
initial_properties = {
|
|
||||||
hp_max = 1,
|
|
||||||
physical = true,
|
|
||||||
collide_with_objects = false,
|
|
||||||
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3},
|
|
||||||
visual = "wielditem",
|
|
||||||
visual_size = {x = 0.4, y = 0.4},
|
|
||||||
textures = {""},
|
|
||||||
spritediv = {x = 1, y = 1},
|
|
||||||
initial_sprite_basepos = {x = 0, y = 0},
|
|
||||||
is_visible = false,
|
|
||||||
},
|
|
||||||
|
|
||||||
itemstring = "",
|
|
||||||
physical_state = true,
|
|
||||||
age = 0,
|
|
||||||
|
|
||||||
set_item = function(self, itemstring)
|
|
||||||
self.itemstring = itemstring
|
|
||||||
local stack = ItemStack(itemstring)
|
|
||||||
local count = stack:get_count()
|
|
||||||
local max_count = stack:get_stack_max()
|
|
||||||
if count > max_count then
|
|
||||||
count = max_count
|
|
||||||
self.itemstring = stack:get_name().." "..max_count
|
|
||||||
end
|
|
||||||
local s = 0.2 + 0.1 * (count / max_count)
|
|
||||||
local c = s
|
|
||||||
local itemtable = stack:to_table()
|
|
||||||
local itemname = itemtable and itemtable.name
|
|
||||||
local prop = {
|
|
||||||
is_visible = true,
|
|
||||||
visual = "wielditem",
|
|
||||||
textures = {itemname},
|
|
||||||
visual_size = {x = s, y = s},
|
|
||||||
collisionbox = {-c, -c, -c, c, c, c},
|
|
||||||
--automatic_rotate = math.pi * 0.5,
|
|
||||||
automatic_rotate = 1,
|
|
||||||
}
|
|
||||||
self.object:set_properties(prop)
|
|
||||||
end,
|
|
||||||
|
|
||||||
get_staticdata = function(self)
|
|
||||||
return core.serialize({
|
|
||||||
itemstring = self.itemstring,
|
|
||||||
age = self.age
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_activate = function(self, staticdata, dtime_s)
|
|
||||||
|
|
||||||
-- special function to fast remove entities (xanadu only)
|
|
||||||
if mobs and mobs.entity and mobs.entity == false then
|
|
||||||
self.object:remove()
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if string.sub(staticdata, 1, string.len("return")) == "return" then
|
|
||||||
local data = core.deserialize(staticdata)
|
|
||||||
if data and type(data) == "table" then
|
|
||||||
self.itemstring = data.itemstring
|
|
||||||
if data.age then
|
|
||||||
self.age = data.age + dtime_s
|
|
||||||
else
|
|
||||||
self.age = dtime_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
self.itemstring = staticdata
|
|
||||||
end
|
|
||||||
self.object:set_armor_groups({immortal = 1})
|
|
||||||
self.object:setvelocity({x = 0, y = 2, z = 0})
|
|
||||||
self.object:setacceleration({x = 0, y = -10, z = 0})
|
|
||||||
self:set_item(self.itemstring)
|
|
||||||
end,
|
|
||||||
|
|
||||||
try_merge_with = function(self, own_stack, object, obj)
|
|
||||||
local stack = ItemStack(obj.itemstring)
|
|
||||||
if own_stack:get_name() == stack:get_name()
|
|
||||||
and stack:get_free_space() > 0 then
|
|
||||||
local overflow = false
|
|
||||||
local count = stack:get_count() + own_stack:get_count()
|
|
||||||
local max_count = stack:get_stack_max()
|
|
||||||
if count > max_count then
|
|
||||||
overflow = true
|
|
||||||
count = count - max_count
|
|
||||||
else
|
|
||||||
self.itemstring = ""
|
|
||||||
end
|
|
||||||
local pos = object:getpos()
|
|
||||||
pos.y = pos.y + (count - stack:get_count()) / max_count * 0.15
|
|
||||||
object:moveto(pos, false)
|
|
||||||
local s, c
|
|
||||||
local max_count = stack:get_stack_max()
|
|
||||||
local name = stack:get_name()
|
|
||||||
if not overflow then
|
|
||||||
obj.itemstring = name .. " " .. count
|
|
||||||
s = 0.2 + 0.1 * (count / max_count)
|
|
||||||
c = s
|
|
||||||
object:set_properties({
|
|
||||||
visual_size = {x = s, y = s},
|
|
||||||
collisionbox = {-c, -c, -c, c, c, c}
|
|
||||||
})
|
|
||||||
self.object:remove()
|
|
||||||
return true -- merging succeeded
|
|
||||||
else
|
|
||||||
s = 0.4
|
|
||||||
c = 0.3
|
|
||||||
object:set_properties({
|
|
||||||
visual_size = {x = s, y = s},
|
|
||||||
collisionbox = {-c, -c, -c, c, c, c}
|
|
||||||
})
|
|
||||||
obj.itemstring = name .. " " .. max_count
|
|
||||||
s = 0.2 + 0.1 * (count / max_count)
|
|
||||||
c = s
|
|
||||||
self.object:set_properties({
|
|
||||||
visual_size = {x = s, y = s},
|
|
||||||
collisionbox = {-c, -c, -c, c, c, c}
|
|
||||||
})
|
|
||||||
self.itemstring = name .. " " .. count
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return false -- merging didn't succeed
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_step = function(self, dtime)
|
|
||||||
self.age = self.age + dtime
|
|
||||||
local p = self.object:getpos()
|
|
||||||
|
|
||||||
-- remove item if old enough or outside map limits
|
|
||||||
if (time_to_live > 0 and self.age > time_to_live)
|
|
||||||
or not within_limits(p) then
|
|
||||||
self.itemstring = ""
|
|
||||||
self.object:remove()
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
p.y = p.y - 0.5
|
|
||||||
local node = core.get_node_or_nil(p)
|
|
||||||
if not node then
|
|
||||||
-- don't infinetly fall into unloaded map
|
|
||||||
self.object:setvelocity({x = 0, y = 0, z = 0})
|
|
||||||
self.object:setacceleration({x = 0, y = 0, z = 0})
|
|
||||||
self.physical_state = false
|
|
||||||
self.object:set_properties({physical = false})
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local nn = node.name
|
|
||||||
|
|
||||||
-- destroy item when dropped into lava (if enabled)
|
|
||||||
if destroy_item > 0 and minetest.get_item_group(nn, "lava") > 0 then
|
|
||||||
minetest.sound_play("builtin_item_lava", {
|
|
||||||
pos = p,
|
|
||||||
max_hear_distance = 6,
|
|
||||||
gain = 0.5
|
|
||||||
})
|
|
||||||
add_effects(p)
|
|
||||||
self.object:remove()
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- flowing water pushes item along (by QwertyMine3)
|
|
||||||
local nod = node_ok({x = p.x, y = p.y + 0.5, z = p.z})
|
|
||||||
if minetest.registered_nodes[nod.name].liquidtype == "flowing" then
|
|
||||||
|
|
||||||
local vec = quick_flow(self.object:getpos(),
|
|
||||||
node_ok(self.object:getpos()))
|
|
||||||
|
|
||||||
if vec then
|
|
||||||
local v = self.object:getvelocity()
|
|
||||||
self.object:setvelocity(
|
|
||||||
{x = vec.x, y = v.y, z = vec.z})
|
|
||||||
self.object:setacceleration(
|
|
||||||
{x = 0, y = -10, z = 0})
|
|
||||||
self.physical_state = true
|
|
||||||
self.object:set_properties({
|
|
||||||
physical = true
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- if node is not registered or walkably solid
|
|
||||||
local v = self.object:getvelocity()
|
|
||||||
if not core.registered_nodes[nn] or core.registered_nodes[nn].walkable and v.y == 0 then
|
|
||||||
if self.physical_state then
|
|
||||||
local own_stack = ItemStack(self.object:get_luaentity().itemstring)
|
|
||||||
-- merge with close entities of the same item
|
|
||||||
for _, object in ipairs(core.get_objects_inside_radius(p, 0.8)) do
|
|
||||||
local obj = object:get_luaentity()
|
|
||||||
if obj and obj.name == "__builtin:item"
|
|
||||||
and obj.physical_state == false then
|
|
||||||
if self:try_merge_with(own_stack, object, obj) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self.object:setvelocity({x = 0, y = 0, z = 0})
|
|
||||||
self.object:setacceleration({x = 0, y = 0, z = 0})
|
|
||||||
self.physical_state = false
|
|
||||||
self.object:set_properties({physical = false})
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if not self.physical_state then
|
|
||||||
self.object:setvelocity({x = 0, y = 0, z = 0})
|
|
||||||
self.object:setacceleration({x = 0, y = -10, z = 0})
|
|
||||||
self.physical_state = true
|
|
||||||
self.object:set_properties({physical = true})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_punch = function(self, puncher)
|
|
||||||
local inv = puncher:get_inventory()
|
|
||||||
if inv and self.itemstring ~= '' then
|
|
||||||
local left = inv:add_item("main", self.itemstring)
|
|
||||||
if left and not left:is_empty() then
|
|
||||||
self.itemstring = left:to_string()
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self.itemstring = ""
|
|
||||||
self.object:remove()
|
|
||||||
end,
|
|
||||||
})
|
|
Before Width: | Height: | Size: 170 B |
@ -1,2 +0,0 @@
|
|||||||
default
|
|
||||||
|
|
@ -164,10 +164,10 @@ minetest.register_on_joinplayer(function(player)
|
|||||||
set_inventory(player)
|
set_inventory(player)
|
||||||
--set hotbar size
|
--set hotbar size
|
||||||
if player.hud_set_hotbar_itemcount then
|
if player.hud_set_hotbar_itemcount then
|
||||||
minetest.after(0.5, player.hud_set_hotbar_itemcount, player, 8)
|
minetest.after(0, player.hud_set_hotbar_itemcount, player, 8)
|
||||||
end
|
end
|
||||||
--add hotbar images
|
--add hotbar images
|
||||||
minetest.after(0.5,function()
|
minetest.after(0,function()
|
||||||
player:hud_set_hotbar_image("crafting_hotbar.png")
|
player:hud_set_hotbar_image("crafting_hotbar.png")
|
||||||
player:hud_set_hotbar_selected_image("crafting_hotbar_selected.png")
|
player:hud_set_hotbar_selected_image("crafting_hotbar_selected.png")
|
||||||
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
default
|
|
@ -1,19 +1,12 @@
|
|||||||
creative = {}
|
creative = {}
|
||||||
|
local player_inventory = {}
|
||||||
creative.set_creative_formspec = function()
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
||||||
|
|
||||||
end)
|
|
||||||
|
|
||||||
if minetest.setting_getbool("creative_mode") then
|
if minetest.setting_getbool("creative_mode") then
|
||||||
local digtime = 1
|
local digtime = 1
|
||||||
minetest.register_item(":", {
|
minetest.register_item(":", {
|
||||||
type = "none",
|
type = "none",
|
||||||
wield_image = "wieldhand.png",
|
wield_image = "wieldhand.png",
|
||||||
wield_scale = {x=1,y=1,z=0.3},
|
wield_scale = {x=0.7,y=2,z=0.0001},
|
||||||
range = 10,
|
range = 10,
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
full_punch_interval = 0.5,
|
full_punch_interval = 0.5,
|
||||||
@ -25,7 +18,7 @@ if minetest.setting_getbool("creative_mode") then
|
|||||||
choppy = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
choppy = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
oddly_breakable_by_hand = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
oddly_breakable_by_hand = {times={[1]=digtime, [2]=digtime, [3]=digtime}, uses=0, maxlevel=3},
|
||||||
},
|
},
|
||||||
damage_groups = {fleshy = 1},
|
damage_groups = {fleshy = 10},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -39,7 +32,7 @@ if minetest.setting_getbool("creative_mode") then
|
|||||||
end
|
end
|
||||||
local inv = digger:get_inventory()
|
local inv = digger:get_inventory()
|
||||||
if inv then
|
if inv then
|
||||||
for _,item in ipairs(drops) do
|
for _, item in ipairs(drops) do
|
||||||
item = ItemStack(item):get_name()
|
item = ItemStack(item):get_name()
|
||||||
if not inv:contains_item("main", item) then
|
if not inv:contains_item("main", item) then
|
||||||
inv:add_item("main", item)
|
inv:add_item("main", item)
|
||||||
@ -47,5 +40,4 @@ if minetest.setting_getbool("creative_mode") then
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
@ -333,6 +333,50 @@ minetest.register_abm({
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Snowballs
|
||||||
|
--
|
||||||
|
|
||||||
|
snowball_GRAVITY=9
|
||||||
|
snowball_VELOCITY=19
|
||||||
|
|
||||||
|
--Shoot snowball.
|
||||||
|
snow_shoot_snowball=function (item, player, pointed_thing)
|
||||||
|
local playerpos=player:getpos()
|
||||||
|
local obj=minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, "default:snowball_entity")
|
||||||
|
local dir=player:get_look_dir()
|
||||||
|
obj:setvelocity({x=dir.x*snowball_VELOCITY, y=dir.y*snowball_VELOCITY, z=dir.z*snowball_VELOCITY})
|
||||||
|
obj:setacceleration({x=dir.x*-3, y=-snowball_GRAVITY, z=dir.z*-3})
|
||||||
|
item:take_item()
|
||||||
|
return item
|
||||||
|
end
|
||||||
|
|
||||||
|
--The snowball Entity
|
||||||
|
snowball_ENTITY={
|
||||||
|
physical = false,
|
||||||
|
timer=0,
|
||||||
|
textures = {"default_snowball.png"},
|
||||||
|
lastpos={},
|
||||||
|
collisionbox = {0,0,0,0,0,0},
|
||||||
|
}
|
||||||
|
|
||||||
|
--Snowball_entity.on_step()--> called when snowball is moving.
|
||||||
|
snowball_ENTITY.on_step = function(self, dtime)
|
||||||
|
self.timer=self.timer+dtime
|
||||||
|
local pos = self.object:getpos()
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
|
||||||
|
--Become item when hitting a node.
|
||||||
|
if self.lastpos.x~=nil then --If there is no lastpos for some reason.
|
||||||
|
if node.name ~= "air" then
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.lastpos={x=pos.x, y=pos.y, z=pos.z} -- Set lastpos-->Node will be added at last pos outside the node
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_entity("default:snowball_entity", snowball_ENTITY)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Grass and dry grass removed in darkness
|
-- Grass and dry grass removed in darkness
|
||||||
--
|
--
|
||||||
@ -378,7 +422,7 @@ function AddGlass(desc, recipeitem, color)
|
|||||||
minetest.register_node("default:glass"..color, {
|
minetest.register_node("default:glass"..color, {
|
||||||
description = desc,
|
description = desc,
|
||||||
drawtype = "glasslike",
|
drawtype = "glasslike",
|
||||||
tile_images = {"xpanes_pane_glass"..color..".png"},
|
tiles = {"xpanes_pane_glass"..color..".png"},
|
||||||
inventory_image = minetest.inventorycube("xpanes_pane_glass"..color..".png"),
|
inventory_image = minetest.inventorycube("xpanes_pane_glass"..color..".png"),
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
use_texture_alpha = true,
|
use_texture_alpha = true,
|
||||||
|
@ -420,6 +420,24 @@ function default.register_biomes()
|
|||||||
humidity_point = 35,
|
humidity_point = 35,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_biome({
|
||||||
|
name = "tundra_beach",
|
||||||
|
--node_dust = "",
|
||||||
|
node_top = "default:gravel",
|
||||||
|
depth_top = 1,
|
||||||
|
node_filler = "default:gravel",
|
||||||
|
depth_filler = 2,
|
||||||
|
--node_stone = "",
|
||||||
|
--node_water_top = "",
|
||||||
|
--depth_water_top = ,
|
||||||
|
--node_water = "",
|
||||||
|
--node_river_water = "",
|
||||||
|
y_min = -3,
|
||||||
|
y_max = 1,
|
||||||
|
heat_point = 15,
|
||||||
|
humidity_point = 35,
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_biome({
|
minetest.register_biome({
|
||||||
name = "tundra_ocean",
|
name = "tundra_ocean",
|
||||||
--node_dust = "",
|
--node_dust = "",
|
||||||
@ -433,7 +451,7 @@ function default.register_biomes()
|
|||||||
--node_water = "",
|
--node_water = "",
|
||||||
--node_river_water = "",
|
--node_river_water = "",
|
||||||
y_min = -112,
|
y_min = -112,
|
||||||
y_max = 1,
|
y_max = -4,
|
||||||
heat_point = 15,
|
heat_point = 15,
|
||||||
humidity_point = 35,
|
humidity_point = 35,
|
||||||
})
|
})
|
||||||
@ -1218,7 +1236,7 @@ if mg_params.mgname == "v6" then
|
|||||||
default.register_ores()
|
default.register_ores()
|
||||||
default.register_mgv6_decorations()
|
default.register_mgv6_decorations()
|
||||||
elseif mg_params.mgname ~= "singlenode" then
|
elseif mg_params.mgname ~= "singlenode" then
|
||||||
default.register_ores()
|
|
||||||
default.register_biomes()
|
default.register_biomes()
|
||||||
|
default.register_ores()
|
||||||
default.register_decorations()
|
default.register_decorations()
|
||||||
end
|
end
|
@ -1291,37 +1291,46 @@ minetest.register_node("default:lava_flowing", {
|
|||||||
not_in_creative_inventory = 1},
|
not_in_creative_inventory = 1},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("default:torch", {
|
minetest.register_node("default:torch", {
|
||||||
description = "Torch",
|
|
||||||
drawtype = "torchlike",
|
|
||||||
--tiles = {"default_torch_on_floor.png", "default_torch_on_ceiling.png", "default_torch.png"},
|
|
||||||
tiles = {
|
|
||||||
{name="default_torch_on_floor_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
|
|
||||||
{name="default_torch_on_ceiling_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}},
|
|
||||||
{name="default_torch_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=3.0}}
|
|
||||||
},
|
|
||||||
inventory_image = "default_torch_on_floor.png",
|
inventory_image = "default_torch_on_floor.png",
|
||||||
wield_image = "default_torch_on_floor.png",
|
wield_image = "default_torch_on_floor.png",
|
||||||
|
tiles = {
|
||||||
|
"default_torch_on_floor_top.png",
|
||||||
|
"default_torch_on_floor_bottom.png",
|
||||||
|
"default_torch_on_floor.png",
|
||||||
|
"default_torch_on_floor.png",
|
||||||
|
"default_torch_on_floor.png",
|
||||||
|
"default_torch_on_floor.png"
|
||||||
|
},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "wallmounted",
|
paramtype2 = "wallmounted",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
|
is_ground_content = false,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
light_source = default.LIGHT_MAX-1,
|
light_source = default.LIGHT_MAX - 1,
|
||||||
selection_box = {
|
groups = {choppy = 2, dig_immediate = 3, flammable = 1, attached_node = 1},
|
||||||
type = "wallmounted",
|
|
||||||
wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
|
|
||||||
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
|
|
||||||
wall_side = {-0.5, -0.3, -0.1, -0.5+0.3, 0.3, 0.1},
|
|
||||||
},
|
|
||||||
stack_max = 64,
|
|
||||||
groups = {choppy=2,dig_immediate=3,flammable=1,attached_node=1, decorative = 1},
|
|
||||||
legacy_wallmounted = true,
|
legacy_wallmounted = true,
|
||||||
sounds = default.node_sound_defaults(),
|
sounds = default.node_sound_defaults(),
|
||||||
action = function(pos)
|
liquids_pointable = false,
|
||||||
add_fire(pos)
|
drawtype = "nodebox",
|
||||||
end
|
paramtype = "light",
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.0625, -0.5, -0.0625, 0.0625, 0.125, 0.0625}, -- NodeBox1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "wallmounted",
|
||||||
|
wall_top = {-0.1, 0.5 - 0.6, -0.1, 0.1, 0.5, 0.1},
|
||||||
|
wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5 + 0.6, 0.1},
|
||||||
|
wall_side = {-0.5, -0.3, -0.1, -0.5 + 0.3, 0.3, 0.1},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
local function get_chest_neighborpos(pos, param2, side)
|
local function get_chest_neighborpos(pos, param2, side)
|
||||||
if side == "right" then
|
if side == "right" then
|
||||||
if param2 == 0 then
|
if param2 == 0 then
|
||||||
|
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 208 B |
Before Width: | Height: | Size: 208 B |
Before Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 332 B |
Before Width: | Height: | Size: 207 B |
Before Width: | Height: | Size: 206 B |
Before Width: | Height: | Size: 206 B |
Before Width: | Height: | Size: 209 B |
Before Width: | Height: | Size: 208 B |
Before Width: | Height: | Size: 206 B |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 183 B After Width: | Height: | Size: 171 B |
Before Width: | Height: | Size: 283 B After Width: | Height: | Size: 273 B |
Before Width: | Height: | Size: 535 B |
Before Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 223 B |
Before Width: | Height: | Size: 281 B |
Before Width: | Height: | Size: 314 B |
Before Width: | Height: | Size: 285 B |
Before Width: | Height: | Size: 298 B |
Before Width: | Height: | Size: 285 B |
Before Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 271 B |
Before Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 283 B |
Before Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 246 B |
Before Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 294 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 297 B |
Before Width: | Height: | Size: 833 B After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 562 B |
Before Width: | Height: | Size: 676 B |
Before Width: | Height: | Size: 588 B |
Before Width: | Height: | Size: 650 B |
Before Width: | Height: | Size: 573 B |
Before Width: | Height: | Size: 578 B |
Before Width: | Height: | Size: 691 B |
Before Width: | Height: | Size: 650 B |
Before Width: | Height: | Size: 693 B |
Before Width: | Height: | Size: 602 B |
Before Width: | Height: | Size: 718 B |
Before Width: | Height: | Size: 666 B |
Before Width: | Height: | Size: 696 B |
Before Width: | Height: | Size: 625 B |
Before Width: | Height: | Size: 680 B |
@ -8,9 +8,9 @@
|
|||||||
minetest.register_item(":", {
|
minetest.register_item(":", {
|
||||||
type = "none",
|
type = "none",
|
||||||
wield_image = "wieldhand.png",
|
wield_image = "wieldhand.png",
|
||||||
wield_scale = {x=1,y=1,z=0.3},
|
wield_scale = {x=0.7, y=2, z=0.0001},
|
||||||
tool_capabilities = {
|
tool_capabilities = {
|
||||||
full_punch_interval = 0.9,
|
full_punch_interval = 0.5,
|
||||||
max_drop_level = 0,
|
max_drop_level = 0,
|
||||||
groupcaps = {
|
groupcaps = {
|
||||||
crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
|
crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1},
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
local remi = minetest.setting_get("remove_items") or false
|
local remi = minetest.setting_getbool("remove_items") or false
|
||||||
local crea = minetest.setting_getbool("creative_mode")
|
local crea = minetest.setting_getbool("creative_mode")
|
||||||
|
|
||||||
local drop = function(pos, itemstack)
|
local drop = function(pos, itemstack)
|
||||||
|
|
||||||
if remi == "true" then return end
|
if remi == true then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local it = itemstack:take_item(itemstack:get_count())
|
local obj = core.add_item(pos,
|
||||||
local obj = core.add_item(pos, it)
|
itemstack:take_item(itemstack:get_count()))
|
||||||
|
|
||||||
if obj then
|
if obj then
|
||||||
|
|
||||||
obj:setvelocity({
|
obj:setvelocity({
|
||||||
x = math.random(-1, 1),
|
x = math.random(-1, 1),
|
||||||
y = 5,
|
y = 5,
|
||||||
@ -19,7 +22,9 @@ end
|
|||||||
|
|
||||||
minetest.register_on_dieplayer(function(player)
|
minetest.register_on_dieplayer(function(player)
|
||||||
|
|
||||||
if crea then return end
|
if crea then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local pos = player:getpos()
|
local pos = player:getpos()
|
||||||
|
|
||||||
@ -30,12 +35,16 @@ minetest.register_on_dieplayer(function(player)
|
|||||||
local player_inv = player:get_inventory()
|
local player_inv = player:get_inventory()
|
||||||
|
|
||||||
for i = 1, player_inv:get_size("main") do
|
for i = 1, player_inv:get_size("main") do
|
||||||
|
|
||||||
drop(pos, player_inv:get_stack("main", i))
|
drop(pos, player_inv:get_stack("main", i))
|
||||||
|
|
||||||
player_inv:set_stack("main", i, nil)
|
player_inv:set_stack("main", i, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
for i = 1, player_inv:get_size("craft") do
|
for i = 1, player_inv:get_size("craft") do
|
||||||
|
|
||||||
drop(pos, player_inv:get_stack("craft", i))
|
drop(pos, player_inv:get_stack("craft", i))
|
||||||
|
|
||||||
player_inv:set_stack("craft", i, nil)
|
player_inv:set_stack("craft", i, nil)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
@ -1,9 +1,9 @@
|
|||||||
multicraft 0.4 mod: dye
|
Minetest 0.4 mod: dye
|
||||||
======================
|
======================
|
||||||
|
|
||||||
See init.lua for documentation.
|
See init.lua for documentation.
|
||||||
|
|
||||||
License of source code:
|
License of source code and media files:
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
|
Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
|
||||||
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
default
|
|
@ -1,84 +1,30 @@
|
|||||||
-- multicraft/dye/init.lua
|
-- minetest/dye/init.lua
|
||||||
|
|
||||||
-- To make recipes that will work with any dye ever made by anybody, define
|
|
||||||
-- them based on groups.
|
|
||||||
-- You can select any group of groups, based on your need for amount of colors.
|
|
||||||
-- basecolor: 9, excolor: 17, unicolor: 89
|
|
||||||
--
|
|
||||||
-- Example of one shapeless recipe using a color group:
|
|
||||||
-- Note: As this uses basecolor_*, you'd need 9 of these.
|
|
||||||
-- minetest.register_craft({
|
|
||||||
-- type = "shapeless",
|
|
||||||
-- output = '<mod>:item_yellow',
|
|
||||||
-- recipe = {'<mod>:item_no_color', 'group:basecolor_yellow'},
|
|
||||||
-- })
|
|
||||||
|
|
||||||
-- Other mods can use these for looping through available colors
|
-- Other mods can use these for looping through available colors
|
||||||
local dye = {}
|
dye = {}
|
||||||
dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"}
|
dye.basecolors = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta"}
|
||||||
dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"}
|
dye.excolors = {"white", "lightgrey", "grey", "darkgrey", "black", "red", "orange", "yellow", "lime", "green", "aqua", "cyan", "sky_blue", "blue", "violet", "magenta", "red_violet"}
|
||||||
|
|
||||||
-- Base color groups:
|
|
||||||
-- - basecolor_white
|
|
||||||
-- - basecolor_grey
|
|
||||||
-- - basecolor_black
|
|
||||||
-- - basecolor_red
|
|
||||||
-- - basecolor_yellow
|
|
||||||
-- - basecolor_green
|
|
||||||
-- - basecolor_cyan
|
|
||||||
-- - basecolor_blue
|
|
||||||
-- - basecolor_magenta
|
|
||||||
|
|
||||||
-- Extended color groups (* = equal to a base color):
|
|
||||||
-- * excolor_white
|
|
||||||
-- - excolor_lightgrey
|
|
||||||
-- * excolor_grey
|
|
||||||
-- - excolor_darkgrey
|
|
||||||
-- * excolor_black
|
|
||||||
-- * excolor_red
|
|
||||||
-- - excolor_orange
|
|
||||||
-- * excolor_yellow
|
|
||||||
-- - excolor_lime
|
|
||||||
-- * excolor_green
|
|
||||||
-- - excolor_aqua
|
|
||||||
-- * excolor_cyan
|
|
||||||
-- - excolor_sky_blue
|
|
||||||
-- * excolor_blue
|
|
||||||
-- - excolor_violet
|
|
||||||
-- * excolor_magenta
|
|
||||||
-- - excolor_red_violet
|
|
||||||
|
|
||||||
-- The whole unifieddyes palette as groups:
|
|
||||||
-- - unicolor_<excolor>
|
|
||||||
-- For the following, no white/grey/black is allowed:
|
|
||||||
-- - unicolor_medium_<excolor>
|
|
||||||
-- - unicolor_dark_<excolor>
|
|
||||||
-- - unicolor_light_<excolor>
|
|
||||||
-- - unicolor_<excolor>_s50
|
|
||||||
-- - unicolor_medium_<excolor>_s50
|
|
||||||
-- - unicolor_dark_<excolor>_s50
|
|
||||||
|
|
||||||
-- Local stuff
|
-- Local stuff
|
||||||
local dyelocal = {}
|
local dyelocal = {}
|
||||||
|
|
||||||
-- This collection of colors is partly a historic thing, partly something else.
|
-- This collection of colors is partly a historic thing, partly something else.
|
||||||
dyelocal.dyes = {
|
dyelocal.dyes = {
|
||||||
{"white", "Bone Meal", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1, materials =1}},
|
{"white", "White dye", {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1}},
|
||||||
{"grey", "Light Grey Dye", {dye=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1, materials =1}},
|
{"grey", "Grey dye", {dye=1, basecolor_grey=1, excolor_grey=1, unicolor_grey=1}},
|
||||||
{"dark_grey", "Grey Dye", {dye=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1, materials =1}},
|
{"dark_grey", "Dark grey dye", {dye=1, basecolor_grey=1, excolor_darkgrey=1, unicolor_darkgrey=1}},
|
||||||
{"black", "Ink Sac", {dye=1, basecolor_black=1, excolor_black=1, unicolor_black=1, materials =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, materials =1}},
|
{"violet", "Violet dye", {dye=1, basecolor_magenta=1, excolor_violet=1, unicolor_violet=1}},
|
||||||
{"blue", "Lapis Lazuli", {dye=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1, materials =1}},
|
{"blue", "Blue dye", {dye=1, basecolor_blue=1, excolor_blue=1, unicolor_blue=1}},
|
||||||
{"lightblue", "Light Blue Dye", {dye=1, basecolor_blue=1, excolor_lightblue=1, unicolor_lightblue=1, materials =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, materials =1}},
|
{"dark_green", "Dark green dye",{dye=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}},
|
||||||
{"dark_green", "Cactus Green",{dye=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1, materials =1}},
|
{"green", "Green dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_green=1}},
|
||||||
{"green", "Lime Dye", {dye=1, basecolor_green=1, excolor_green=1, unicolor_green=1, materials =1}},
|
{"yellow", "Yellow dye", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}},
|
||||||
{"yellow", "Dandelion Yellow", {dye=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1, materials =1}},
|
{"brown", "Brown dye", {dye=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}},
|
||||||
{"brown", "Cocoa Beans", {dye=1, basecolor_yellow=1, excolor_orange=1, unicolor_dark_orange=1, materials =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, materials =1}},
|
{"red", "Red dye", {dye=1, basecolor_red=1, excolor_red=1, unicolor_red=1}},
|
||||||
{"red", "Rose Red", {dye=1, basecolor_red=1, excolor_red=1, unicolor_red=1, materials =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, materials =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, materials =1}},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Define items
|
-- Define items
|
||||||
@ -91,8 +37,7 @@ for _, row in ipairs(dyelocal.dyes) do
|
|||||||
minetest.register_craftitem(item_name, {
|
minetest.register_craftitem(item_name, {
|
||||||
inventory_image = item_image,
|
inventory_image = item_image,
|
||||||
description = description,
|
description = description,
|
||||||
groups = groups,
|
groups = groups
|
||||||
stack_max = 64,
|
|
||||||
})
|
})
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
@ -100,16 +45,21 @@ for _, row in ipairs(dyelocal.dyes) do
|
|||||||
recipe = {"group:flower,color_"..name},
|
recipe = {"group:flower,color_"..name},
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
-- manually add coal->black dye
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "dye:black 4",
|
||||||
|
recipe = {"group:coal"},
|
||||||
|
})
|
||||||
|
|
||||||
-- Mix recipes
|
-- Mix recipes
|
||||||
-- Just mix everything to everything somehow sanely
|
-- Just mix everything to everything somehow sanely
|
||||||
|
|
||||||
dyelocal.mixbases = {"magenta", "red", "orange", "brown", "yellow", "green", "dark_green", "cyan", "blue", "violet", "black", "dark_grey", "grey", "white", "lightblue"}
|
dyelocal.mixbases = {"magenta", "red", "orange", "brown", "yellow", "green", "dark_green", "cyan", "blue", "violet", "black", "dark_grey", "grey", "white"}
|
||||||
|
|
||||||
dyelocal.mixes = {
|
dyelocal.mixes = {
|
||||||
-- magenta, red, orange, brown, yellow, green, dark_green, cyan, blue, violet, black, dark_grey, grey, white, lightblue
|
-- magenta, red, orange, brown, yellow, green, dark_green, cyan, blue, violet, black, dark_grey, grey, white
|
||||||
lightblue ={ "violet", "violet", "orange", "orange", "green", "green", "green", "blue", "blue", "violet", "black", "grey", "grey", "lightblue", "lightblue" },
|
white = {"pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "violet", "grey", "grey", "white", "white"},
|
||||||
white = {"pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "lightblue", "violet", "grey", "grey", "white", "white" },
|
|
||||||
grey = {"pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "pink", "dark_grey","grey", "grey"},
|
grey = {"pink", "pink", "orange", "orange", "yellow", "green", "green", "grey", "cyan", "pink", "dark_grey","grey", "grey"},
|
||||||
dark_grey={"brown","brown", "brown", "brown", "brown","dark_green","dark_green","blue","blue","violet","black", "black"},
|
dark_grey={"brown","brown", "brown", "brown", "brown","dark_green","dark_green","blue","blue","violet","black", "black"},
|
||||||
black = {"black", "black", "black", "black", "black", "black", "black", "black", "black", "black", "black"},
|
black = {"black", "black", "black", "black", "black", "black", "black", "black", "black", "black", "black"},
|
||||||
@ -135,23 +85,3 @@ for one,results in pairs(dyelocal.mixes) do
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Hide dyelocal
|
|
||||||
dyelocal = nil
|
|
||||||
|
|
||||||
minetest.register_craftitem("dye:white", {
|
|
||||||
inventory_image = "dye_white.png",
|
|
||||||
description = "Bone Meal",
|
|
||||||
stack_max = 64,
|
|
||||||
groups = {dye=1, basecolor_white=1, excolor_white=1, unicolor_white=1, materials =1},
|
|
||||||
on_place = function(itemstack, user, pointed_thing)
|
|
||||||
duengen(pointed_thing)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = 'dye:lightblue',
|
|
||||||
recipe = {
|
|
||||||
{'flowers:blue_orchid'},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
Fire Redo 0.1
|
Minetest 0.4 mod: fire
|
||||||
|
======================
|
||||||
by TenPlus1
|
|
||||||
|
|
||||||
Based on Minetest 0.4 mod: fire
|
|
||||||
===============================
|
|
||||||
|
|
||||||
License of source code:
|
License of source code:
|
||||||
-----------------------
|
-----------------------
|
||||||
|
@ -124,61 +124,11 @@ minetest.register_abm({
|
|||||||
-- Mushrooms
|
-- Mushrooms
|
||||||
--
|
--
|
||||||
|
|
||||||
local mushrooms_datas = {
|
minetest.register_node("flowers:mushroom_red", {
|
||||||
{"brown", 2},
|
description = "Red Mushroom",
|
||||||
{"red", -6}
|
tiles = {"flowers_mushroom_red.png"},
|
||||||
}
|
inventory_image = "flowers_mushroom_red.png",
|
||||||
|
wield_image = "flowers_mushroom_red.png",
|
||||||
for _, m in pairs(mushrooms_datas) do
|
|
||||||
local name, nut = m[1], m[2]
|
|
||||||
|
|
||||||
-- Register fertile mushrooms
|
|
||||||
|
|
||||||
-- These are placed by mapgen and the growing ABM.
|
|
||||||
-- These drop an infertile mushroom, and 0 to 3 spore
|
|
||||||
-- nodes with an average of 1.25 per mushroom, for
|
|
||||||
-- a slow multiplication of mushrooms when farming.
|
|
||||||
|
|
||||||
minetest.register_node("flowers:mushroom_fertile_" .. name, {
|
|
||||||
description = string.sub(string.upper(name), 0, 1) ..
|
|
||||||
string.sub(name, 2) .. " Fertile Mushroom",
|
|
||||||
tiles = {"flowers_mushroom_" .. name .. ".png"},
|
|
||||||
inventory_image = "flowers_mushroom_" .. name .. ".png",
|
|
||||||
wield_image = "flowers_mushroom_" .. name .. ".png",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
walkable = false,
|
|
||||||
buildable_to = true,
|
|
||||||
groups = {snappy = 3, flammable = 3, attached_node = 1,
|
|
||||||
not_in_creative_inventory = 1},
|
|
||||||
drop = {
|
|
||||||
items = {
|
|
||||||
{items = {"flowers:mushroom_" .. name}},
|
|
||||||
{items = {"flowers:mushroom_spores_" .. name}, rarity = 4},
|
|
||||||
{items = {"flowers:mushroom_spores_" .. name}, rarity = 2},
|
|
||||||
{items = {"flowers:mushroom_spores_" .. name}, rarity = 2}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
on_use = minetest.item_eat(nut),
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Register infertile mushrooms
|
|
||||||
|
|
||||||
-- These do not drop spores, to avoid the use of repeated digging
|
|
||||||
-- and placing of a single mushroom to generate unlimited spores.
|
|
||||||
|
|
||||||
minetest.register_node("flowers:mushroom_" .. name, {
|
|
||||||
description = string.sub(string.upper(name), 0, 1) ..
|
|
||||||
string.sub(name, 2) .. " Mushroom",
|
|
||||||
tiles = {"flowers_mushroom_" .. name .. ".png"},
|
|
||||||
inventory_image = "flowers_mushroom_" .. name .. ".png",
|
|
||||||
wield_image = "flowers_mushroom_" .. name .. ".png",
|
|
||||||
drawtype = "plantlike",
|
drawtype = "plantlike",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
@ -186,58 +136,72 @@ for _, m in pairs(mushrooms_datas) do
|
|||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
groups = {snappy = 3, flammable = 3, attached_node = 1},
|
groups = {snappy = 3, flammable = 3, attached_node = 1},
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
on_use = minetest.item_eat(nut),
|
on_use = minetest.item_eat(-5),
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Register mushroom spores
|
minetest.register_node("flowers:mushroom_brown", {
|
||||||
|
description = "Brown Mushroom",
|
||||||
minetest.register_node("flowers:mushroom_spores_" .. name, {
|
tiles = {"flowers_mushroom_brown.png"},
|
||||||
description = string.sub(string.upper(name), 0, 1) ..
|
inventory_image = "flowers_mushroom_brown.png",
|
||||||
string.sub(name, 2) .. " Mushroom Spores",
|
wield_image = "flowers_mushroom_brown.png",
|
||||||
drawtype = "signlike",
|
drawtype = "plantlike",
|
||||||
tiles = {"flowers_mushroom_spores_" .. name .. ".png"},
|
|
||||||
inventory_image = "flowers_mushroom_spores_" .. name .. ".png",
|
|
||||||
wield_image = "flowers_mushroom_spores_" .. name .. ".png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "wallmounted",
|
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
buildable_to = true,
|
buildable_to = true,
|
||||||
|
groups = {snappy = 3, flammable = 3, attached_node = 1},
|
||||||
|
sounds = default.node_sound_leaves_defaults(),
|
||||||
|
on_use = minetest.item_eat(1),
|
||||||
selection_box = {
|
selection_box = {
|
||||||
type = "wallmounted",
|
type = "fixed",
|
||||||
},
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0, 0.3}
|
||||||
groups = {dig_immediate = 3, attached_node = 1},
|
}
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Register growing ABM
|
|
||||||
|
|
||||||
|
-- mushroom spread and death
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {"flowers:mushroom_spores_brown", "flowers:mushroom_spores_red"},
|
nodenames = {"flowers:mushroom_brown", "flowers:mushroom_red"},
|
||||||
interval = 11,
|
interval = 11,
|
||||||
chance = 50,
|
chance = 50,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
local node_under = minetest.get_node_or_nil({x = pos.x,
|
if minetest.get_node_light(pos, nil) == 15 then
|
||||||
y = pos.y - 1, z = pos.z})
|
minetest.remove_node(pos)
|
||||||
|
end
|
||||||
|
local random = {
|
||||||
|
x = pos.x + math.random(-2,2),
|
||||||
|
y = pos.y + math.random(-1,1),
|
||||||
|
z = pos.z + math.random(-2,2)
|
||||||
|
}
|
||||||
|
local random_node = minetest.get_node_or_nil(random)
|
||||||
|
if not random_node then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if random_node.name ~= "air" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local node_under = minetest.get_node_or_nil({x = random.x,
|
||||||
|
y = random.y - 1, z = random.z})
|
||||||
if not node_under then
|
if not node_under then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if minetest.get_item_group(node_under.name, "soil") ~= 0 and
|
if minetest.get_item_group(node_under.name, "soil") ~= 0 and
|
||||||
minetest.get_node_light(pos, nil) <= 13 then
|
minetest.get_node_light(pos, nil) <= 9 and
|
||||||
if node.name == "flowers:mushroom_spores_brown" then
|
minetest.get_node_light(random, nil) <= 9 then
|
||||||
minetest.set_node(pos, {name = "flowers:mushroom_fertile_brown"})
|
minetest.set_node(random, {name = node.name})
|
||||||
elseif node.name == "flowers:mushroom_spores_red" then
|
|
||||||
minetest.set_node(pos, {name = "flowers:mushroom_fertile_red"})
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- these old mushroom related nodes can be simplified now
|
||||||
|
minetest.register_alias("flowers:mushroom_spores_brown", "flowers:mushroom_brown")
|
||||||
|
minetest.register_alias("flowers:mushroom_spores_red", "flowers:mushroom_red")
|
||||||
|
minetest.register_alias("flowers:mushroom_fertile_brown", "flowers:mushroom_brown")
|
||||||
|
minetest.register_alias("flowers:mushroom_fertile_red", "flowers:mushroom_red")
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Waterlily
|
-- Waterlily
|
||||||
|
Before Width: | Height: | Size: 94 B |
Before Width: | Height: | Size: 92 B |
@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
default
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
|||||||
minetest.register_on_newplayer(function(player)
|
minetest.register_on_newplayer(function(player)
|
||||||
player:get_inventory():add_item('main', 'default:pick_steel')
|
|
||||||
player:get_inventory():add_item('main', 'default:sword_steel')
|
player:get_inventory():add_item('main', 'default:sword_steel')
|
||||||
player:get_inventory():add_item('main', 'crafting:workbench')
|
player:get_inventory():add_item('main', 'default:torch 8')
|
||||||
player:get_inventory():add_item('main', 'default:torch 16')
|
|
||||||
player:get_inventory():add_item('main', 'default:wood 64')
|
|
||||||
end)
|
end)
|
||||||
|
@ -1,502 +1,165 @@
|
|||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
Version 2.1, February 1999
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
[This is the first released version of the Lesser GPL. It also counts
|
|
||||||
as the successor of the GNU Library Public License, version 2, hence
|
|
||||||
the version number 2.1.]
|
|
||||||
|
|
||||||
Preamble
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
0. Additional Definitions.
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Lesser General Public License, applies to some
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
specially designated software packages--typically libraries--of the
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
Free Software Foundation and other authors who decide to use it. You
|
General Public License.
|
||||||
can use it too, but we suggest you first think carefully about whether
|
|
||||||
this license or the ordinary General Public License is the better
|
|
||||||
strategy to use in any particular case, based on the explanations below.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom of use,
|
"The Library" refers to a covered work governed by this License,
|
||||||
not price. Our General Public Licenses are designed to make sure that
|
other than an Application or a Combined Work as defined below.
|
||||||
you have the freedom to distribute copies of free software (and charge
|
|
||||||
for this service if you wish); that you receive source code or can get
|
|
||||||
it if you want it; that you can change the software and use pieces of
|
|
||||||
it in new free programs; and that you are informed that you can do
|
|
||||||
these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
An "Application" is any work that makes use of an interface provided
|
||||||
distributors to deny you these rights or to ask you to surrender these
|
by the Library, but which is not otherwise based on the Library.
|
||||||
rights. These restrictions translate to certain responsibilities for
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
you if you distribute copies of the library or if you modify it.
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
Application with the Library. The particular version of the Library
|
||||||
you. You must make sure that they, too, receive or can get the source
|
with which the Combined Work was made is also called the "Linked
|
||||||
code. If you link other code with the library, you must provide
|
Version".
|
||||||
complete object files to the recipients, so that they can relink them
|
|
||||||
with the library after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
We protect your rights with a two-step method: (1) we copyright the
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
library, and (2) we offer you this license, which gives you legal
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
permission to copy, distribute and/or modify the library.
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
To protect each distributor, we want to make it very clear that
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
there is no warranty for the free library. Also, if the library is
|
object code and/or source code for the Application, including any data
|
||||||
modified by someone else and passed on, the recipients should know
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
that what they have is not the original version, so that the original
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
author's reputation will not be affected by problems that might be
|
|
||||||
introduced by others.
|
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
|
||||||
any free program. We wish to make sure that a company cannot
|
|
||||||
effectively restrict the users of a free program by obtaining a
|
|
||||||
restrictive license from a patent holder. Therefore, we insist that
|
|
||||||
any patent license obtained for a version of the library must be
|
|
||||||
consistent with the full freedom of use specified in this license.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
ordinary GNU General Public License. This license, the GNU Lesser
|
|
||||||
General Public License, applies to certain designated libraries, and
|
|
||||||
is quite different from the ordinary General Public License. We use
|
|
||||||
this license for certain libraries in order to permit linking those
|
|
||||||
libraries into non-free programs.
|
|
||||||
|
|
||||||
When a program is linked with a library, whether statically or using
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
a shared library, the combination of the two is legally speaking a
|
without being bound by section 3 of the GNU GPL.
|
||||||
combined work, a derivative of the original library. The ordinary
|
|
||||||
General Public License therefore permits such linking only if the
|
|
||||||
entire combination fits its criteria of freedom. The Lesser General
|
|
||||||
Public License permits more lax criteria for linking other code with
|
|
||||||
the library.
|
|
||||||
|
|
||||||
We call this license the "Lesser" General Public License because it
|
2. Conveying Modified Versions.
|
||||||
does Less to protect the user's freedom than the ordinary General
|
|
||||||
Public License. It also provides other free software developers Less
|
|
||||||
of an advantage over competing non-free programs. These disadvantages
|
|
||||||
are the reason we use the ordinary General Public License for many
|
|
||||||
libraries. However, the Lesser license provides advantages in certain
|
|
||||||
special circumstances.
|
|
||||||
|
|
||||||
For example, on rare occasions, there may be a special need to
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
encourage the widest possible use of a certain library, so that it becomes
|
facility refers to a function or data to be supplied by an Application
|
||||||
a de-facto standard. To achieve this, non-free programs must be
|
that uses the facility (other than as an argument passed when the
|
||||||
allowed to use the library. A more frequent case is that a free
|
facility is invoked), then you may convey a copy of the modified
|
||||||
library does the same job as widely used non-free libraries. In this
|
version:
|
||||||
case, there is little to gain by limiting the free library to free
|
|
||||||
software only, so we use the Lesser General Public License.
|
|
||||||
|
|
||||||
In other cases, permission to use a particular library in non-free
|
a) under this License, provided that you make a good faith effort to
|
||||||
programs enables a greater number of people to use a large body of
|
ensure that, in the event an Application does not supply the
|
||||||
free software. For example, permission to use the GNU C Library in
|
function or data, the facility still operates, and performs
|
||||||
non-free programs enables many more people to use the whole GNU
|
whatever part of its purpose remains meaningful, or
|
||||||
operating system, as well as its variant, the GNU/Linux operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
Although the Lesser General Public License is Less protective of the
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
users' freedom, it does ensure that the user of a program that is
|
this License applicable to that copy.
|
||||||
linked with the Library has the freedom and the wherewithal to run
|
|
||||||
that program using a modified version of the Library.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, whereas the latter must
|
|
||||||
be combined with the library in order to run.
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
The object code form of an Application may incorporate material from
|
||||||
program which contains a notice placed by the copyright holder or
|
a header file that is part of the Library. You may convey such object
|
||||||
other authorized party saying it may be distributed under the terms of
|
code under terms of your choice, provided that, if the incorporated
|
||||||
this Lesser General Public License (also called "this License").
|
material is not limited to numerical parameters, data structure
|
||||||
Each licensee is addressed as "you".
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
a) Give prominent notice with each copy of the object code that the
|
||||||
prepared so as to be conveniently linked with application programs
|
Library is used in it and that the Library and its use are
|
||||||
(which use some of those functions and data) to form executables.
|
covered by this License.
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
which has been distributed under these terms. A "work based on the
|
document.
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
4. Combined Works.
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
You may convey a Combined Work under terms of your choice that,
|
||||||
covered by this License; they are outside its scope. The act of
|
taken together, effectively do not restrict modification of the
|
||||||
running a program using the Library is not restricted, and output from
|
portions of the Library contained in the Combined Work and reverse
|
||||||
such a program is covered only if its contents constitute a work based
|
engineering for debugging such modifications, if you also do each of
|
||||||
on the Library (independent of the use of the Library in a tool for
|
the following:
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
complete source code as you receive it, in any medium, provided that
|
the Library is used in it and that the Library and its use are
|
||||||
you conspicuously and appropriately publish on each copy an
|
covered by this License.
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
warranty; and distribute a copy of this License along with the
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser General Public License from time to time. Such new
|
||||||
|
versions will be similar in spirit to the present version, but may
|
||||||
|
differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
Library.
|
Library.
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Use a suitable shared library mechanism for linking with the
|
|
||||||
Library. A suitable mechanism is one that (1) uses at run time a
|
|
||||||
copy of the library already present on the user's computer system,
|
|
||||||
rather than copying library functions into the executable, and (2)
|
|
||||||
will operate properly with a modified version of the library, if
|
|
||||||
the user installs one, as long as the modified version is
|
|
||||||
interface-compatible with the version that the work was made with.
|
|
||||||
|
|
||||||
c) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
d) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
e) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the materials to be distributed need not include anything that is
|
|
||||||
normally distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties with
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Lesser General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
|
@ -30,7 +30,7 @@ License:
|
|||||||
|
|
||||||
|
|
||||||
Code:
|
Code:
|
||||||
Licensed under the GNU LGPL version 2.1 or higher.
|
Licensed under the GNU LGPL version 3.0 or higher.
|
||||||
You can redistribute it and/or modify it under
|
You can redistribute it and/or modify it under
|
||||||
the terms of the GNU Lesser General Public License
|
the terms of the GNU Lesser General Public License
|
||||||
as published by the Free Software Foundation;
|
as published by the Free Software Foundation;
|
||||||
@ -39,7 +39,7 @@ You should have received a copy of the GNU Lesser General Public
|
|||||||
License along with this library; if not, write to the Free Software
|
License along with this library; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
See LICENSE.txt and http://www.gnu.org/licenses/lgpl-2.1.txt
|
See LICENSE.txt and http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||||
|
|
||||||
|
|
||||||
Textures:
|
Textures:
|
||||||
|
@ -7,13 +7,13 @@ HUD_ENABLE_HUNGER = true
|
|||||||
HUD_SB_SIZE = {x = 24, y = 24}
|
HUD_SB_SIZE = {x = 24, y = 24}
|
||||||
|
|
||||||
HUD_HEALTH_POS = {x = 0.5,y = 1}
|
HUD_HEALTH_POS = {x = 0.5,y = 1}
|
||||||
HUD_HEALTH_OFFSET = {x = -252, y = -93}
|
HUD_HEALTH_OFFSET = {x = -248, y = -93}
|
||||||
HUD_AIR_POS = {x = 0.5, y = 1}
|
HUD_AIR_POS = {x = 0.5, y = 1}
|
||||||
HUD_AIR_OFFSET = {x = 9, y = -93}
|
HUD_AIR_OFFSET = {x = 6, y = -93}
|
||||||
HUD_HUNGER_POS = {x = 0.5, y = 1}
|
HUD_HUNGER_POS = {x = 0.5, y = 1}
|
||||||
HUD_HUNGER_OFFSET = {x = 9, y = -124}
|
HUD_HUNGER_OFFSET = {x = 6, y = -124}
|
||||||
HUD_ARMOR_POS = {x = 0.5, y = 1}
|
HUD_ARMOR_POS = {x = 0.5, y = 1}
|
||||||
HUD_ARMOR_OFFSET = {x = -252, y = -124}
|
HUD_ARMOR_OFFSET = {x = -248, y = -124}
|
||||||
|
|
||||||
-- Reorder everything when using ItemWeel
|
-- Reorder everything when using ItemWeel
|
||||||
hud.item_wheel = minetest.setting_getbool("hud_item_wheel")
|
hud.item_wheel = minetest.setting_getbool("hud_item_wheel")
|
||||||
|
Before Width: | Height: | Size: 713 B After Width: | Height: | Size: 359 B |
Before Width: | Height: | Size: 305 B After Width: | Height: | Size: 212 B |
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 346 B |
Before Width: | Height: | Size: 386 B After Width: | Height: | Size: 249 B |