forked from VoxeLibre/VoxeLibre
Merge branch 'master' into totem_particles
This commit is contained in:
commit
1471521709
|
@ -149,7 +149,7 @@ These groups are used mostly for informational purposes
|
||||||
* `trapdoor=2`: Open trapdoor
|
* `trapdoor=2`: Open trapdoor
|
||||||
* `glass=1`: Glass (full cubes only)
|
* `glass=1`: Glass (full cubes only)
|
||||||
* `rail=1`: Rail
|
* `rail=1`: Rail
|
||||||
* `music_record`: Music Disc (rating is track ID)
|
* `music_record`: Item is Music Disc
|
||||||
* `tnt=1`: Block is TNT
|
* `tnt=1`: Block is TNT
|
||||||
* `boat=1`: Boat
|
* `boat=1`: Boat
|
||||||
* `minecart=1`: Minecart
|
* `minecart=1`: Minecart
|
||||||
|
|
|
@ -32,9 +32,9 @@ local singlenode = mg_name == "singlenode"
|
||||||
|
|
||||||
-- Calculate mapgen_edge_min/mapgen_edge_max
|
-- Calculate mapgen_edge_min/mapgen_edge_max
|
||||||
mcl_vars.chunksize = math.max(1, tonumber(minetest.get_mapgen_setting("chunksize")) or 5)
|
mcl_vars.chunksize = math.max(1, tonumber(minetest.get_mapgen_setting("chunksize")) or 5)
|
||||||
mcl_vars.MAP_BLOCKSIZE = math.max(1, core.MAP_BLOCKSIZE or 16)
|
mcl_vars.MAP_BLOCKSIZE = math.max(1, minetest.MAP_BLOCKSIZE or 16)
|
||||||
mcl_vars.mapgen_limit = math.max(1, tonumber(minetest.get_mapgen_setting("mapgen_limit")) or 31000)
|
mcl_vars.mapgen_limit = math.max(1, tonumber(minetest.get_mapgen_setting("mapgen_limit")) or 31000)
|
||||||
mcl_vars.MAX_MAP_GENERATION_LIMIT = math.max(1, core.MAX_MAP_GENERATION_LIMIT or 31000)
|
mcl_vars.MAX_MAP_GENERATION_LIMIT = math.max(1, minetest.MAX_MAP_GENERATION_LIMIT or 31000)
|
||||||
local central_chunk_offset = -math.floor(mcl_vars.chunksize / 2)
|
local central_chunk_offset = -math.floor(mcl_vars.chunksize / 2)
|
||||||
mcl_vars.central_chunk_offset_in_nodes = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE
|
mcl_vars.central_chunk_offset_in_nodes = central_chunk_offset * mcl_vars.MAP_BLOCKSIZE
|
||||||
mcl_vars.chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE
|
mcl_vars.chunk_size_in_nodes = mcl_vars.chunksize * mcl_vars.MAP_BLOCKSIZE
|
||||||
|
|
|
@ -19,7 +19,10 @@ local function deal_falling_damage(self, dtime)
|
||||||
end
|
end
|
||||||
self._hit = self._hit or {}
|
self._hit = self._hit or {}
|
||||||
for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
|
for _, obj in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
|
||||||
if mcl_util.get_hp(obj) > 0 and not self._hit[obj] then
|
local entity = obj:get_luaentity()
|
||||||
|
if entity and entity.name == "__builtin:item" then
|
||||||
|
obj:remove()
|
||||||
|
elseif mcl_util.get_hp(obj) > 0 and not self._hit[obj] then
|
||||||
self._hit[obj] = true
|
self._hit[obj] = true
|
||||||
local way = self._startpos.y - pos.y
|
local way = self._startpos.y - pos.y
|
||||||
local damage = (way - 1) * 2
|
local damage = (way - 1) * 2
|
||||||
|
|
|
@ -129,6 +129,7 @@ end
|
||||||
local api_path = minetest.get_modpath(minetest.get_current_modname()).."/api/mob_functions/"
|
local api_path = minetest.get_modpath(minetest.get_current_modname()).."/api/mob_functions/"
|
||||||
|
|
||||||
--ignite all parts of the api
|
--ignite all parts of the api
|
||||||
|
dofile(api_path .. "flow_lib.lua")
|
||||||
dofile(api_path .. "ai.lua")
|
dofile(api_path .. "ai.lua")
|
||||||
dofile(api_path .. "animation.lua")
|
dofile(api_path .. "animation.lua")
|
||||||
dofile(api_path .. "collision.lua")
|
dofile(api_path .. "collision.lua")
|
||||||
|
|
|
@ -9,6 +9,8 @@ local minetest_get_item_group = minetest.get_item_group
|
||||||
local minetest_get_node = minetest.get_node
|
local minetest_get_node = minetest.get_node
|
||||||
local minetest_line_of_sight = minetest.line_of_sight
|
local minetest_line_of_sight = minetest.line_of_sight
|
||||||
local minetest_get_node_light = minetest.get_node_light
|
local minetest_get_node_light = minetest.get_node_light
|
||||||
|
local minetest_registered_nodes = minetest.registered_nodes
|
||||||
|
local flow = mobs.get_flowing_dir
|
||||||
|
|
||||||
local DOUBLE_PI = math.pi * 2
|
local DOUBLE_PI = math.pi * 2
|
||||||
local THIRTY_SECONDTH_PI = DOUBLE_PI * 0.03125
|
local THIRTY_SECONDTH_PI = DOUBLE_PI * 0.03125
|
||||||
|
@ -1011,6 +1013,19 @@ function mobs.mob_step(self, dtime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--mobs flow from Crafter
|
||||||
|
local pos = self.object:get_pos()
|
||||||
|
if pos then
|
||||||
|
local flow_dir = flow(pos)
|
||||||
|
if flow_dir then
|
||||||
|
flow_dir = vector.multiply(flow_dir,10)
|
||||||
|
local vel = self.object:get_velocity()
|
||||||
|
local acceleration = vector.new(flow_dir.x-vel.x,flow_dir.y-vel.y,flow_dir.z-vel.z)
|
||||||
|
acceleration = vector.multiply(acceleration, 0.01)
|
||||||
|
self.object:add_velocity(acceleration)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--mob is stunned after being hit
|
--mob is stunned after being hit
|
||||||
if self.pause_timer > 0 then
|
if self.pause_timer > 0 then
|
||||||
self.pause_timer = self.pause_timer - dtime
|
self.pause_timer = self.pause_timer - dtime
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
--this is from https://github.com/HybridDog/builtin_item/blob/e6dfd9dce86503b3cbd1474257eca5f6f6ca71c2/init.lua#L50
|
||||||
|
local
|
||||||
|
minetest,vector,math,pairs,minetest_get_node,vector_subtract,minetest_registered_nodes
|
||||||
|
=
|
||||||
|
minetest,vector,math,pairs,minetest.get_node,vector.subtract,minetest.registered_nodes
|
||||||
|
|
||||||
|
local tab
|
||||||
|
local n
|
||||||
|
local function get_nodes(pos)
|
||||||
|
tab,n = {},1
|
||||||
|
for i = -1,1,2 do
|
||||||
|
for _,p in pairs({
|
||||||
|
{x=pos.x+i, y=pos.y, z=pos.z},
|
||||||
|
{x=pos.x, y=pos.y, z=pos.z+i}
|
||||||
|
}) do
|
||||||
|
tab[n] = {p, minetest_get_node(p)}
|
||||||
|
n = n+1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return tab
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local data
|
||||||
|
local param2
|
||||||
|
local nd
|
||||||
|
local par2
|
||||||
|
local name
|
||||||
|
local tmp
|
||||||
|
local c_node
|
||||||
|
function mobs.get_flowing_dir(pos)
|
||||||
|
c_node = minetest_get_node(pos).name
|
||||||
|
if c_node ~= "mcl_core:water_flowing" and c_node ~= "mcl_core:water" then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
data = get_nodes(pos)
|
||||||
|
param2 = minetest_get_node(pos).param2
|
||||||
|
if param2 > 7 then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
if c_node == "mcl_core:water" then
|
||||||
|
for _,i in pairs(data) do
|
||||||
|
nd = i[2]
|
||||||
|
name = nd.name
|
||||||
|
par2 = nd.param2
|
||||||
|
if name == "mcl_core:water_flowing" and par2 == 7 then
|
||||||
|
return(vector_subtract(i[1],pos))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _,i in pairs(data) do
|
||||||
|
nd = i[2]
|
||||||
|
name = nd.name
|
||||||
|
par2 = nd.param2
|
||||||
|
if name == "mcl_core:water_flowing" and par2 < param2 then
|
||||||
|
return(vector_subtract(i[1],pos))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _,i in pairs(data) do
|
||||||
|
nd = i[2]
|
||||||
|
name = nd.name
|
||||||
|
par2 = nd.param2
|
||||||
|
if name == "mcl_core:water_flowing" and par2 >= 11 then
|
||||||
|
return(vector_subtract(i[1],pos))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _,i in pairs(data) do
|
||||||
|
nd = i[2]
|
||||||
|
name = nd.name
|
||||||
|
par2 = nd.param2
|
||||||
|
tmp = minetest_registered_nodes[name]
|
||||||
|
if tmp and not tmp.walkable and name ~= "mcl_core:water_flowing" and name ~= "mcl_core:water" then
|
||||||
|
return(vector_subtract(i[1],pos))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
|
@ -32,12 +32,15 @@ end
|
||||||
mobs.float = function(self)
|
mobs.float = function(self)
|
||||||
|
|
||||||
local acceleration = self.object:get_acceleration()
|
local acceleration = self.object:get_acceleration()
|
||||||
if acceleration and acceleration.y ~= 0 then
|
|
||||||
self.object:set_acceleration(vector.new(0,0,0))
|
if not acceleration then
|
||||||
else
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if acceleration.y ~= 0 then
|
||||||
|
self.object:set_acceleration({x=0, y=0, z=0})
|
||||||
|
end
|
||||||
|
|
||||||
local current_velocity = self.object:get_velocity()
|
local current_velocity = self.object:get_velocity()
|
||||||
|
|
||||||
local goal_velocity = {
|
local goal_velocity = {
|
||||||
|
|
|
@ -190,9 +190,10 @@ Origin of those models:
|
||||||
* [Spennnyyy](https://freesound.org/people/Spennnyyy/) (CC0)
|
* [Spennnyyy](https://freesound.org/people/Spennnyyy/) (CC0)
|
||||||
* `mcl_totems_totem.ogg`
|
* `mcl_totems_totem.ogg`
|
||||||
* Source: <https://freesound.org/people/Spennnyyy/sounds/323502/>
|
* Source: <https://freesound.org/people/Spennnyyy/sounds/323502/>
|
||||||
* [Baŝto](https://opengameart.org/users/ba%C5%9Dto)
|
* [Baŝto](https://opengameart.org/users/ba%C5%9Dto) (remixer) and [kantouth](https://freesound.org/people/kantouth/) (original author)
|
||||||
* `mobs_mc_skeleton_random.*.ogg` (CC BY 3.0)
|
* `mobs_mc_skeleton_random.*.ogg` (CC BY 3.0)
|
||||||
* Source: <https://opengameart.org/content/walking-skeleton>
|
* Source: <https://opengameart.org/content/walking-skeleton>
|
||||||
|
* Based on: <https://freesound.org/people/kantouth/sounds/115113/>
|
||||||
* [spookymodem](https://freesound.org/people/spookymodem/)
|
* [spookymodem](https://freesound.org/people/spookymodem/)
|
||||||
* `mobs_mc_skeleton_death.ogg` (CC0)
|
* `mobs_mc_skeleton_death.ogg` (CC0)
|
||||||
* <https://freesound.org/people/spookymodem/sounds/202091/>
|
* <https://freesound.org/people/spookymodem/sounds/202091/>
|
||||||
|
@ -306,4 +307,4 @@ Origin of those models:
|
||||||
|
|
||||||
Note: Many of these sounds have been more or less modified to fit the game.
|
Note: Many of these sounds have been more or less modified to fit the game.
|
||||||
|
|
||||||
Sounds not mentioned hre are licensed under CC0.
|
Sounds not mentioned here are licensed under CC0.
|
||||||
|
|
|
@ -158,11 +158,11 @@ mobs_mc.tools.check_iron_golem_summon = function(pos)
|
||||||
if ok then
|
if ok then
|
||||||
-- Remove the nodes
|
-- Remove the nodes
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
core.check_for_falling(pos)
|
minetest.check_for_falling(pos)
|
||||||
for i=1, 4 do
|
for i=1, 4 do
|
||||||
local cpos = vector.add(pos, checks[c][i])
|
local cpos = vector.add(pos, checks[c][i])
|
||||||
minetest.remove_node(cpos)
|
minetest.remove_node(cpos)
|
||||||
core.check_for_falling(cpos)
|
minetest.check_for_falling(cpos)
|
||||||
end
|
end
|
||||||
-- Summon iron golem
|
-- Summon iron golem
|
||||||
local place
|
local place
|
||||||
|
|
|
@ -179,9 +179,9 @@ mobs_mc.tools.check_snow_golem_summon = function(pos)
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
minetest.remove_node(b1)
|
minetest.remove_node(b1)
|
||||||
minetest.remove_node(b2)
|
minetest.remove_node(b2)
|
||||||
core.check_for_falling(pos)
|
minetest.check_for_falling(pos)
|
||||||
core.check_for_falling(b1)
|
minetest.check_for_falling(b1)
|
||||||
core.check_for_falling(b2)
|
minetest.check_for_falling(b2)
|
||||||
local obj = minetest.add_entity(place, "mobs_mc:snowman")
|
local obj = minetest.add_entity(place, "mobs_mc:snowman")
|
||||||
if obj then
|
if obj then
|
||||||
summon_particles(obj)
|
summon_particles(obj)
|
||||||
|
|
|
@ -155,7 +155,7 @@ end
|
||||||
local custom_crafts, craft_types = {}, {}
|
local custom_crafts, craft_types = {}, {}
|
||||||
|
|
||||||
function mcl_craftguide.register_craft_type(name, def)
|
function mcl_craftguide.register_craft_type(name, def)
|
||||||
local func = "mcl_craftguide.register_craft_guide(): "
|
local func = "mcl_craftguide.register_craft_type(): "
|
||||||
assert(name, func .. "'name' field missing")
|
assert(name, func .. "'name' field missing")
|
||||||
assert(def.description, func .. "'description' field missing")
|
assert(def.description, func .. "'description' field missing")
|
||||||
assert(def.icon, func .. "'icon' field missing")
|
assert(def.icon, func .. "'icon' field missing")
|
||||||
|
|
|
@ -19,9 +19,9 @@ local function setup_dispenser(pos)
|
||||||
"list[current_player;main;0,7.74;9,1;]"..
|
"list[current_player;main;0,7.74;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||||
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dispenser"))).."]"..
|
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dispenser"))).."]"..
|
||||||
"list[current_name;main;3,0.5;3,3;]"..
|
"list[context;main;3,0.5;3,3;]"..
|
||||||
mcl_formspec.get_itemslot_bg(3,0.5,3,3)..
|
mcl_formspec.get_itemslot_bg(3,0.5,3,3)..
|
||||||
"listring[current_name;main]"..
|
"listring[context;main]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec", form)
|
meta:set_string("formspec", form)
|
||||||
|
|
|
@ -20,9 +20,9 @@ local function setup_dropper(pos)
|
||||||
"list[current_player;main;0,7.74;9,1;]"..
|
"list[current_player;main;0,7.74;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||||
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]"..
|
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]"..
|
||||||
"list[current_name;main;3,0.5;3,3;]"..
|
"list[context;main;3,0.5;3,3;]"..
|
||||||
mcl_formspec.get_itemslot_bg(3,0.5,3,3)..
|
mcl_formspec.get_itemslot_bg(3,0.5,3,3)..
|
||||||
"listring[current_name;main]"..
|
"listring[context;main]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec", form)
|
meta:set_string("formspec", form)
|
||||||
|
|
|
@ -19,8 +19,8 @@ local function setup_dropper(pos)
|
||||||
"list[current_player;main;0,4.5;9,3;9]"..
|
"list[current_player;main;0,4.5;9,3;9]"..
|
||||||
"list[current_player;main;0,7.74;9,1;]"..
|
"list[current_player;main;0,7.74;9,1;]"..
|
||||||
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]"..
|
"label[3,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Dropper"))).."]"..
|
||||||
"list[current_name;main;3,0.5;3,3;]"..
|
"list[context;main;3,0.5;3,3;]"..
|
||||||
"listring[current_name;main]"..
|
"listring[context;main]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("formspec", form)
|
meta:set_string("formspec", form)
|
||||||
|
|
|
@ -66,7 +66,7 @@ local function piston_remove_pusher(pos, oldnode)
|
||||||
|
|
||||||
if pushername == pistonspec.pusher then -- make sure there actually is a pusher
|
if pushername == pistonspec.pusher then -- make sure there actually is a pusher
|
||||||
minetest.remove_node(pusherpos)
|
minetest.remove_node(pusherpos)
|
||||||
core.check_for_falling(pusherpos)
|
minetest.check_for_falling(pusherpos)
|
||||||
minetest.sound_play("piston_retract", {
|
minetest.sound_play("piston_retract", {
|
||||||
pos = pos,
|
pos = pos,
|
||||||
max_hear_distance = 31,
|
max_hear_distance = 31,
|
||||||
|
@ -87,7 +87,7 @@ local function piston_remove_base(pos, oldnode)
|
||||||
|
|
||||||
if basename == pistonspec.onname then -- make sure there actually is a base node
|
if basename == pistonspec.onname then -- make sure there actually is a base node
|
||||||
minetest.remove_node(basepos)
|
minetest.remove_node(basepos)
|
||||||
core.check_for_falling(basepos)
|
minetest.check_for_falling(basepos)
|
||||||
minetest.sound_play("piston_retract", {
|
minetest.sound_play("piston_retract", {
|
||||||
pos = pos,
|
pos = pos,
|
||||||
max_hear_distance = 31,
|
max_hear_distance = 31,
|
||||||
|
|
|
@ -573,7 +573,7 @@ for colorid, colortab in pairs(mcl_banners.colors) do
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
if mod_mcl_core and minetest.get_modpath("mcl_wool") then
|
if mod_mcl_core and minetest.get_modpath("mcl_wool") and pattern_name == "" then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = itemstring,
|
output = itemstring,
|
||||||
recipe = {
|
recipe = {
|
||||||
|
|
|
@ -8,9 +8,6 @@ local N = function(s) return s end
|
||||||
-- Maximum number of layers which can be put on a banner by crafting.
|
-- Maximum number of layers which can be put on a banner by crafting.
|
||||||
local max_layers_crafting = 12
|
local max_layers_crafting = 12
|
||||||
|
|
||||||
-- Maximum number of layers when banner includes a gradient (workaround, see below).
|
|
||||||
local max_layers_gradient = 3
|
|
||||||
|
|
||||||
-- Max. number lines in the descriptions for the banner layers.
|
-- Max. number lines in the descriptions for the banner layers.
|
||||||
-- This is done to avoid huge tooltips.
|
-- This is done to avoid huge tooltips.
|
||||||
local max_layer_lines = 6
|
local max_layer_lines = 6
|
||||||
|
@ -398,16 +395,6 @@ local function banner_pattern_craft(itemstack, player, old_craft_grid, craft_inv
|
||||||
if #layers >= max_layers_crafting then
|
if #layers >= max_layers_crafting then
|
||||||
return ItemStack("")
|
return ItemStack("")
|
||||||
end
|
end
|
||||||
-- Lower layer limit when banner includes any gradient.
|
|
||||||
-- Workaround to circumvent Minetest bug (https://github.com/minetest/minetest/issues/6210)
|
|
||||||
-- TODO: Remove this restriction when bug #6210 is fixed.
|
|
||||||
if #layers >= max_layers_gradient then
|
|
||||||
for l=1, #layers do
|
|
||||||
if layers[l].pattern == "gradient" or layers[l].pattern == "gradient_up" then
|
|
||||||
return ItemStack("")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local matching_pattern
|
local matching_pattern
|
||||||
local max_i = player:get_inventory():get_size("craft")
|
local max_i = player:get_inventory():get_size("craft")
|
||||||
|
|
|
@ -10,9 +10,9 @@ local function active_brewing_formspec(fuel_percent, brew_percent)
|
||||||
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
||||||
"list[current_player;main;0,7.75;9,1;]"..
|
"list[current_player;main;0,7.75;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.75,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.75,9,1)..
|
||||||
"list[current_name;fuel;0.5,1.75;1,1;]"..
|
"list[context;fuel;0.5,1.75;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]"..
|
mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]"..
|
||||||
"list[current_name;input;2.75,0.5;1,1;]"..
|
"list[context;input;2.75,0.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
||||||
"list[context;stand;4.5,2.5;1,1;]"..
|
"list[context;stand;4.5,2.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]"..
|
mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]"..
|
||||||
|
@ -28,8 +28,8 @@ local function active_brewing_formspec(fuel_percent, brew_percent)
|
||||||
(brew_percent)..":mcl_brewing_bubbles_active.png]"..
|
(brew_percent)..":mcl_brewing_bubbles_active.png]"..
|
||||||
|
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_name;fuel]"..
|
"listring[context;fuel]"..
|
||||||
"listring[current_name;input]"..
|
"listring[context;input]"..
|
||||||
"listring[context;stand]"
|
"listring[context;stand]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -41,9 +41,9 @@ local brewing_formspec = "size[9,8.75]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
||||||
"list[current_player;main;0,7.75;9,1;]"..
|
"list[current_player;main;0,7.75;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.75,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.75,9,1)..
|
||||||
"list[current_name;fuel;0.5,1.75;1,1;]"..
|
"list[context;fuel;0.5,1.75;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]"..
|
mcl_formspec.get_itemslot_bg(0.5,1.75,1,1).."image[0.5,1.75;1,1;mcl_brewing_fuel_bg.png]"..
|
||||||
"list[current_name;input;2.75,0.5;1,1;]"..
|
"list[context;input;2.75,0.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
||||||
"list[context;stand;4.5,2.5;1,1;]"..
|
"list[context;stand;4.5,2.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]"..
|
mcl_formspec.get_itemslot_bg(4.5,2.5,1,1).."image[4.5,2.5;1,1;mcl_brewing_bottle_bg.png]"..
|
||||||
|
@ -56,8 +56,8 @@ local brewing_formspec = "size[9,8.75]"..
|
||||||
"image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png]"..
|
"image[2.76,1.4;1,2.15;mcl_brewing_bubbles.png]"..
|
||||||
|
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_name;fuel]"..
|
"listring[context;fuel]"..
|
||||||
"listring[current_name;input]"..
|
"listring[context;input]"..
|
||||||
"listring[context;stand]"
|
"listring[context;stand]"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ local register_slice = function(level, nodebox, desc)
|
||||||
-- Check if we were allowed to eat
|
-- Check if we were allowed to eat
|
||||||
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
core.check_for_falling(pos)
|
minetest.check_for_falling(pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1108,14 +1108,14 @@ local function formspec_shulker_box(name)
|
||||||
end
|
end
|
||||||
return "size[9,8.75]"..
|
return "size[9,8.75]"..
|
||||||
"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]"..
|
"label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", name)).."]"..
|
||||||
"list[current_name;main;0,0.5;9,3;]"..
|
"list[context;main;0,0.5;9,3;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
|
mcl_formspec.get_itemslot_bg(0,0.5,9,3)..
|
||||||
"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
|
"label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
|
||||||
"list[current_player;main;0,4.5;9,3;9]"..
|
"list[current_player;main;0,4.5;9,3;9]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
mcl_formspec.get_itemslot_bg(0,4.5,9,3)..
|
||||||
"list[current_player;main;0,7.74;9,1;]"..
|
"list[current_player;main;0,7.74;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||||
"listring[current_name;main]"..
|
"listring[context;main]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@ minetest.register_abm({
|
||||||
liquid_flow_action(pos, "lava", function(pos)
|
liquid_flow_action(pos, "lava", function(pos)
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
minetest.sound_play("builtin_item_lava", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
|
minetest.sound_play("builtin_item_lava", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
|
||||||
core.check_for_falling(pos)
|
minetest.check_for_falling(pos)
|
||||||
end)
|
end)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
@ -1242,7 +1242,7 @@ minetest.register_abm({
|
||||||
if not mcl_core.check_vines_supported(pos, node) then
|
if not mcl_core.check_vines_supported(pos, node) then
|
||||||
minetest.remove_node(pos)
|
minetest.remove_node(pos)
|
||||||
vinedecay_particles(pos, node)
|
vinedecay_particles(pos, node)
|
||||||
core.check_for_falling(pos)
|
minetest.check_for_falling(pos)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1404,7 +1404,7 @@ minetest.register_abm({
|
||||||
-- Remove node
|
-- Remove node
|
||||||
minetest.remove_node(p0)
|
minetest.remove_node(p0)
|
||||||
leafdecay_particles(p0, n0)
|
leafdecay_particles(p0, n0)
|
||||||
core.check_for_falling(p0)
|
minetest.check_for_falling(p0)
|
||||||
|
|
||||||
-- Kill depending vines immediately to skip the vines decay delay
|
-- Kill depending vines immediately to skip the vines decay delay
|
||||||
local surround = {
|
local surround = {
|
||||||
|
@ -1421,7 +1421,7 @@ minetest.register_abm({
|
||||||
if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then
|
if maybe_vine.name == "mcl_core:vine" and (not mcl_core.check_vines_supported(spos, maybe_vine)) then
|
||||||
minetest.remove_node(spos)
|
minetest.remove_node(spos)
|
||||||
vinedecay_particles(spos, maybe_vine)
|
vinedecay_particles(spos, maybe_vine)
|
||||||
core.check_for_falling(spos)
|
minetest.check_for_falling(spos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1445,7 +1445,7 @@ minetest.register_abm({
|
||||||
minetest.remove_node(p0)
|
minetest.remove_node(p0)
|
||||||
vinedecay_particles(p0, node)
|
vinedecay_particles(p0, node)
|
||||||
-- Just in case a falling node happens to float above vines
|
-- Just in case a falling node happens to float above vines
|
||||||
core.check_for_falling(p0)
|
minetest.check_for_falling(p0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
|
@ -221,17 +221,23 @@ Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly
|
||||||
Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Zuckerrohr kann nur auf Zuckerrohr platziert werden und auf Blöcken, auf denen Zuckerrohr wachsen würde.
|
Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=Zuckerrohr kann nur auf Zuckerrohr platziert werden und auf Blöcken, auf denen Zuckerrohr wachsen würde.
|
||||||
Sugar comes from sugar canes and is used to make sweet foods.=Zucker kommt von Zuckerrohr und wird benutzt, um süße Lebensmittel zu machen.
|
Sugar comes from sugar canes and is used to make sweet foods.=Zucker kommt von Zuckerrohr und wird benutzt, um süße Lebensmittel zu machen.
|
||||||
The stripped trunk of an acacia tree.=Der entrindete Stamm einer Akazie.
|
The stripped trunk of an acacia tree.=Der entrindete Stamm einer Akazie.
|
||||||
The stripped trunk of an birch tree.=Der entrindete Stamm einer Birke.
|
The stripped trunk of a birch tree.=Der entrindete Stamm einer Birke.
|
||||||
The stripped trunk of an dark oak tree.=Der entrindete Stamm einer Schwarzeiche.
|
The stripped trunk of a dark oak tree.=Der entrindete Stamm einer Schwarzeiche.
|
||||||
The stripped trunk of an jungle tree.=Der entrindete Stamm eines Dschungelbaums.
|
The stripped trunk of a jungle tree.=Der entrindete Stamm eines Dschungelbaums.
|
||||||
The stripped trunk of an oak tree.=Der entrindete Stamm einer Eiche.
|
The stripped trunk of an oak tree.=Der entrindete Stamm einer Eiche.
|
||||||
The stripped trunk of an spruce tree.=Der entrindete Stamm einer Fichte.
|
The stripped trunk of a spruce tree.=Der entrindete Stamm einer Fichte.
|
||||||
The trunk of a birch tree.=Der Baumstamm einer Birke.
|
The trunk of a birch tree.=Der Baumstamm einer Birke.
|
||||||
The trunk of a dark oak tree.=Der Baumstamm einer Schwarzeiche.
|
The trunk of a dark oak tree.=Der Baumstamm einer Schwarzeiche.
|
||||||
The trunk of a jungle tree.=Der Baumstamm eines Dschungelbaums.
|
The trunk of a jungle tree.=Der Baumstamm eines Dschungelbaums.
|
||||||
The trunk of a spruce tree.=Der Baumstamm einer Fichte.
|
The trunk of a spruce tree.=Der Baumstamm einer Fichte.
|
||||||
The trunk of an acacia.=Der Baumstamm einer Akazie.
|
The trunk of an acacia.=Der Baumstamm einer Akazie.
|
||||||
The trunk of an oak tree.=Der Baumstamm einer Eiche.
|
The trunk of an oak tree.=Der Baumstamm einer Eiche.
|
||||||
|
The stripped wood of an acacia tree.=Das entrindete Holz einer Akazie.
|
||||||
|
The stripped wood of a birch tree.=Das entrindete Holz einer Birke.
|
||||||
|
The stripped wood of a dark oak tree.=Das entrindete Holz einer Schwarzeiche.
|
||||||
|
The stripped wood of a jungle tree.=Das entrindete Holz eines Dschungelbaums.
|
||||||
|
The stripped wood of an oak tree.=Das entrindete Holz einer Eiche.
|
||||||
|
The stripped wood of a spruce tree.=Das entrindete Holz einer Fichte.
|
||||||
This block consists of a couple of loose stones and can't support itself.=Dieser Block besteht aus ein paar losen Steinchen und kann sich nicht selbst tragen.
|
This block consists of a couple of loose stones and can't support itself.=Dieser Block besteht aus ein paar losen Steinchen und kann sich nicht selbst tragen.
|
||||||
This is a decorative block surrounded by the bark of a tree trunk.=Dies ist ein dekorativer Block, der von der Rinde eines Baumstamms umgeben ist.
|
This is a decorative block surrounded by the bark of a tree trunk.=Dies ist ein dekorativer Block, der von der Rinde eines Baumstamms umgeben ist.
|
||||||
This is a decorative block.=Dies ist ein dekorativer Block.
|
This is a decorative block.=Dies ist ein dekorativer Block.
|
||||||
|
|
|
@ -109,7 +109,7 @@ Gold Ore=Minerai d'Or
|
||||||
Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Les pépites d'or sont de très petites pièces d'or en fusion; le but principal est de créer des lingots d'or.
|
Gold nuggets are very small pieces of molten gold; the main purpose is to create gold ingots.=Les pépites d'or sont de très petites pièces d'or en fusion; le but principal est de créer des lingots d'or.
|
||||||
Golden Apple=Pomme Dorée
|
Golden Apple=Pomme Dorée
|
||||||
Golden apples are precious food items which can be eaten.=Les pommes dorrées sont des aliments précieux qui peuvent être consommés.
|
Golden apples are precious food items which can be eaten.=Les pommes dorrées sont des aliments précieux qui peuvent être consommés.
|
||||||
Granite=Granite
|
Granite=Granit
|
||||||
Grass Block=Bloc d'Herbe
|
Grass Block=Bloc d'Herbe
|
||||||
Grass Path=Chemin d'Herbe
|
Grass Path=Chemin d'Herbe
|
||||||
Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Les chemins d'herbe sont une variante décorative des blocs d'herbe. Leur sommet a une couleur différente et ils sont un peu plus bas que les blocs d'herbe, ce qui les rend utiles pour construire des sentiers. Les chemins d'herbe peuvent être créés avec une pelle. Un chemin d'herbe se transforme en terre quand il est en dessous d'un bloc solide.
|
Grass paths are a decorative variant of grass blocks. Their top has a different color and they are a bit lower than grass blocks, making them useful to build footpaths. Grass paths can be created with a shovel. A grass path turns into dirt when it is below a solid block.=Les chemins d'herbe sont une variante décorative des blocs d'herbe. Leur sommet a une couleur différente et ils sont un peu plus bas que les blocs d'herbe, ce qui les rend utiles pour construire des sentiers. Les chemins d'herbe peuvent être créés avec une pelle. Un chemin d'herbe se transforme en terre quand il est en dessous d'un bloc solide.
|
||||||
|
@ -165,7 +165,7 @@ Podzol=Podzol
|
||||||
Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Le podzol est un type de terre trouvé dans les forêts de la taïga. Seules quelques plantes peuvent y survivre.
|
Podzol is a type of dirt found in taiga forests. Only a few plants are able to survive on it.=Le podzol est un type de terre trouvé dans les forêts de la taïga. Seules quelques plantes peuvent y survivre.
|
||||||
Polished Andesite=Andrésite Polie
|
Polished Andesite=Andrésite Polie
|
||||||
Polished Diorite=Diorite Polie
|
Polished Diorite=Diorite Polie
|
||||||
Polished Granite=Granite Polie
|
Polished Granite=Granit Poli
|
||||||
Polished Stone=Roche Polie
|
Polished Stone=Roche Polie
|
||||||
Polished andesite is a decorative building block made from andesite.=L'andésite polie est un bloc de construction décoratif en andésite.
|
Polished andesite is a decorative building block made from andesite.=L'andésite polie est un bloc de construction décoratif en andésite.
|
||||||
Polished diorite is a decorative building block made from diorite.=La diorite polie est un bloc de construction décoratif en diorite.
|
Polished diorite is a decorative building block made from diorite.=La diorite polie est un bloc de construction décoratif en diorite.
|
||||||
|
|
|
@ -221,17 +221,23 @@ Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly
|
||||||
Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=
|
Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow.=
|
||||||
Sugar comes from sugar canes and is used to make sweet foods.=
|
Sugar comes from sugar canes and is used to make sweet foods.=
|
||||||
The stripped trunk of an acacia tree.=
|
The stripped trunk of an acacia tree.=
|
||||||
The stripped trunk of an birch tree.=
|
The stripped trunk of a birch tree.=
|
||||||
The stripped trunk of an dark oak tree.=
|
The stripped trunk of a dark oak tree.=
|
||||||
The stripped trunk of an jungle tree.=
|
The stripped trunk of a jungle tree.=
|
||||||
The stripped trunk of an oak tree.=
|
The stripped trunk of an oak tree.=
|
||||||
The stripped trunk of an spruce tree.=
|
The stripped trunk of a spruce tree.=
|
||||||
The trunk of a birch tree.=
|
The trunk of a birch tree.=
|
||||||
The trunk of a dark oak tree.=
|
The trunk of a dark oak tree.=
|
||||||
The trunk of a jungle tree.=
|
The trunk of a jungle tree.=
|
||||||
The trunk of a spruce tree.=
|
The trunk of a spruce tree.=
|
||||||
The trunk of an acacia.=
|
The trunk of an acacia.=
|
||||||
The trunk of an oak tree.=
|
The trunk of an oak tree.=
|
||||||
|
The stripped wood of an acacia tree.=
|
||||||
|
The stripped wood of a birch tree.=
|
||||||
|
The stripped wood of a dark oak tree.=
|
||||||
|
The stripped wood of a jungle tree.=
|
||||||
|
The stripped wood of an oak tree.=
|
||||||
|
The stripped wood of a spruce tree.=
|
||||||
This block consists of a couple of loose stones and can't support itself.=
|
This block consists of a couple of loose stones and can't support itself.=
|
||||||
This is a decorative block surrounded by the bark of a tree trunk.=
|
This is a decorative block surrounded by the bark of a tree trunk.=
|
||||||
This is a decorative block.=
|
This is a decorative block.=
|
||||||
|
|
|
@ -1041,7 +1041,7 @@ for i=1,8 do
|
||||||
drop = "mcl_throwing:snowball "..(i+1),
|
drop = "mcl_throwing:snowball "..(i+1),
|
||||||
_mcl_blast_resistance = 0.1,
|
_mcl_blast_resistance = 0.1,
|
||||||
_mcl_hardness = 0.1,
|
_mcl_hardness = 0.1,
|
||||||
_mcl_silk_touch_drop = {"mcl_core:snow " .. (i+1)},
|
_mcl_silk_touch_drop = {"mcl_core:snow " .. i},
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ if mod_screwdriver then
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Register tree trunk (wood) and bark
|
-- Register tree trunk (wood) and bark
|
||||||
local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_varient)
|
local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant)
|
||||||
minetest.register_node("mcl_core:"..subname, {
|
minetest.register_node("mcl_core:"..subname, {
|
||||||
description = description_trunk,
|
description = description_trunk,
|
||||||
_doc_items_longdesc = longdesc,
|
_doc_items_longdesc = longdesc,
|
||||||
|
@ -23,7 +23,7 @@ local function register_tree_trunk(subname, description_trunk, description_bark,
|
||||||
on_rotate = on_rotate,
|
on_rotate = on_rotate,
|
||||||
_mcl_blast_resistance = 2,
|
_mcl_blast_resistance = 2,
|
||||||
_mcl_hardness = 2,
|
_mcl_hardness = 2,
|
||||||
_mcl_stripped_varient = stripped_varient,
|
_mcl_stripped_variant = stripped_variant,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("mcl_core:"..subname.."_bark", {
|
minetest.register_node("mcl_core:"..subname.."_bark", {
|
||||||
|
@ -39,7 +39,7 @@ local function register_tree_trunk(subname, description_trunk, description_bark,
|
||||||
on_rotate = on_rotate,
|
on_rotate = on_rotate,
|
||||||
_mcl_blast_resistance = 2,
|
_mcl_blast_resistance = 2,
|
||||||
_mcl_hardness = 2,
|
_mcl_hardness = 2,
|
||||||
_mcl_stripped_varient = stripped_varient.."_bark",
|
_mcl_stripped_variant = stripped_variant.."_bark",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -52,7 +52,7 @@ local function register_tree_trunk(subname, description_trunk, description_bark,
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Register stripped trunk and stripped wood
|
-- Register stripped trunk and stripped wood
|
||||||
local function register_stripped_trunk(subname, description_stripped_trunk, description_stripped_bark, longdesc, tile_stripped_inner, tile_stripped_bark)
|
local function register_stripped_trunk(subname, description_stripped_trunk, description_stripped_bark, longdesc, longdesc_wood, tile_stripped_inner, tile_stripped_bark)
|
||||||
minetest.register_node("mcl_core:"..subname, {
|
minetest.register_node("mcl_core:"..subname, {
|
||||||
description = description_stripped_trunk,
|
description = description_stripped_trunk,
|
||||||
_doc_items_longdesc = longdesc,
|
_doc_items_longdesc = longdesc,
|
||||||
|
@ -70,7 +70,7 @@ local function register_stripped_trunk(subname, description_stripped_trunk, desc
|
||||||
|
|
||||||
minetest.register_node("mcl_core:"..subname.."_bark", {
|
minetest.register_node("mcl_core:"..subname.."_bark", {
|
||||||
description = description_stripped_bark,
|
description = description_stripped_bark,
|
||||||
_doc_items_longdesc = S("This is a decorative block."),
|
_doc_items_longdesc = longdesc_wood,
|
||||||
tiles = {tile_stripped_bark},
|
tiles = {tile_stripped_bark},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
on_place = mcl_util.rotate_axis,
|
on_place = mcl_util.rotate_axis,
|
||||||
|
@ -223,13 +223,12 @@ register_tree_trunk("sprucetree", S("Spruce Wood"), S("Spruce Bark"), S("The tru
|
||||||
register_tree_trunk("birchtree", S("Birch Wood"), S("Birch Bark"), S("The trunk of a birch tree."), "mcl_core_log_birch_top.png", "mcl_core_log_birch.png", "mcl_core:stripped_birch")
|
register_tree_trunk("birchtree", S("Birch Wood"), S("Birch Bark"), S("The trunk of a birch tree."), "mcl_core_log_birch_top.png", "mcl_core_log_birch.png", "mcl_core:stripped_birch")
|
||||||
register_tree_trunk("jungletree", S("Jungle Wood"), S("Jungle Bark"), S("The trunk of a jungle tree."), "default_jungletree_top.png", "default_jungletree.png", "mcl_core:stripped_jungle")
|
register_tree_trunk("jungletree", S("Jungle Wood"), S("Jungle Bark"), S("The trunk of a jungle tree."), "default_jungletree_top.png", "default_jungletree.png", "mcl_core:stripped_jungle")
|
||||||
|
|
||||||
register_stripped_trunk("stripped_oak", S("Stripped Oak Log"), S("Stripped Oak Wood"), S("The stripped trunk of an oak tree."), "mcl_core_stripped_oak_top.png", "mcl_core_stripped_oak_side.png")
|
register_stripped_trunk("stripped_oak", S("Stripped Oak Log"), S("Stripped Oak Wood"), S("The stripped trunk of an oak tree."), S("The stripped wood of an oak tree."), "mcl_core_stripped_oak_top.png", "mcl_core_stripped_oak_side.png")
|
||||||
register_stripped_trunk("stripped_acacia", S("Stripped Acacia Log"), S("Stripped Acacia Wood"), S("The stripped trunk of an acacia tree."), "mcl_core_stripped_acacia_top.png", "mcl_core_stripped_acacia_side.png")
|
register_stripped_trunk("stripped_acacia", S("Stripped Acacia Log"), S("Stripped Acacia Wood"), S("The stripped trunk of an acacia tree."), S("The stripped wood of an acacia tree."), "mcl_core_stripped_acacia_top.png", "mcl_core_stripped_acacia_side.png")
|
||||||
register_stripped_trunk("stripped_dark_oak", S("Stripped Dark Oak Log"), S("Stripped Dark Oak Wood"), S("The stripped trunk of an dark oak tree."), "mcl_core_stripped_dark_oak_top.png", "mcl_core_stripped_dark_oak_side.png")
|
register_stripped_trunk("stripped_dark_oak", S("Stripped Dark Oak Log"), S("Stripped Dark Oak Wood"), S("The stripped trunk of a dark oak tree."), S("The stripped wood of a dark oak tree."), "mcl_core_stripped_dark_oak_top.png", "mcl_core_stripped_dark_oak_side.png")
|
||||||
register_stripped_trunk("stripped_birch", S("Stripped Birch Log"), S("Stripped Birch Wood"), S("The stripped trunk of an birch tree."), "mcl_core_stripped_birch_top.png", "mcl_core_stripped_birch_side.png")
|
register_stripped_trunk("stripped_birch", S("Stripped Birch Log"), S("Stripped Birch Wood"), S("The stripped trunk of a birch tree."), S("The stripped wood of a birch tree."), "mcl_core_stripped_birch_top.png", "mcl_core_stripped_birch_side.png")
|
||||||
register_stripped_trunk("stripped_spruce", S("Stripped Spruce Log"), S("Stripped Spruce Wood"), S("The stripped trunk of an spruce tree."), "mcl_core_stripped_spruce_top.png", "mcl_core_stripped_spruce_side.png")
|
register_stripped_trunk("stripped_spruce", S("Stripped Spruce Log"), S("Stripped Spruce Wood"), S("The stripped trunk of a spruce tree."), S("The stripped wood of a spruce tree."), "mcl_core_stripped_spruce_top.png", "mcl_core_stripped_spruce_side.png")
|
||||||
register_stripped_trunk("stripped_jungle", S("Stripped Jungle Log"), S("Stripped Jungle Wood"), S("The stripped trunk of an jungle tree."),"mcl_core_stripped_jungle_top.png", "mcl_core_stripped_jungle_side.png")
|
register_stripped_trunk("stripped_jungle", S("Stripped Jungle Log"), S("Stripped Jungle Wood"), S("The stripped trunk of a jungle tree."), S("The stripped wood of a jungle tree."),"mcl_core_stripped_jungle_top.png", "mcl_core_stripped_jungle_side.png")
|
||||||
|
|
||||||
register_wooden_planks("wood", S("Oak Wood Planks"), {"default_wood.png"})
|
register_wooden_planks("wood", S("Oak Wood Planks"), {"default_wood.png"})
|
||||||
register_wooden_planks("darkwood", S("Dark Oak Wood Planks"), {"mcl_core_planks_big_oak.png"})
|
register_wooden_planks("darkwood", S("Dark Oak Wood Planks"), {"mcl_core_planks_big_oak.png"})
|
||||||
register_wooden_planks("junglewood", S("Jungle Wood Planks"), {"default_junglewood.png"})
|
register_wooden_planks("junglewood", S("Jungle Wood Planks"), {"default_junglewood.png"})
|
||||||
|
|
|
@ -7,7 +7,7 @@ Blast Protection=Protection contre les explosions
|
||||||
Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul.
|
Reduces explosion damage and knockback.=Réduit les dégâts d'explosion et de recul.
|
||||||
Channeling=Canalisation
|
Channeling=Canalisation
|
||||||
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques.
|
Channels a bolt of lightning toward a target. Works only during thunderstorms and if target is unobstructed with opaque blocks.=Canalise un éclair vers une cible. Fonctionne uniquement pendant les orages et si la cible n'est pas obstruée par des blocs opaques.
|
||||||
Curse of Binding=Malédiction du lien éterne
|
Curse of Binding=Malédiction du lien éternel
|
||||||
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=L'objet ne peut pas être retiré des emplacements d'armure sauf en cas de mort, de rupture ou en mode créatif.
|
Item cannot be removed from armor slots except due to death, breaking or in Creative Mode.=L'objet ne peut pas être retiré des emplacements d'armure sauf en cas de mort, de rupture ou en mode créatif.
|
||||||
Curse of Vanishing=Malédiction de disparition
|
Curse of Vanishing=Malédiction de disparition
|
||||||
Item destroyed on death.=Objet détruit à la mort.
|
Item destroyed on death.=Objet détruit à la mort.
|
||||||
|
|
|
@ -162,7 +162,9 @@ if minetest.get_modpath("mcl_armor") then
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
minetest.register_on_dieplayer(function(player)
|
minetest.register_on_dieplayer(function(player)
|
||||||
|
if not minetest.settings:get_bool("mcl_keepInventory") then
|
||||||
remove_pumpkin_hud(player)
|
remove_pumpkin_hud(player)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
pumpkin_hud[player] = nil
|
pumpkin_hud[player] = nil
|
||||||
|
|
|
@ -15,11 +15,11 @@ local function active_formspec(fuel_percent, item_percent)
|
||||||
"list[current_player;main;0,7.74;9,1;]"..
|
"list[current_player;main;0,7.74;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||||
"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]"..
|
"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]"..
|
||||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
"list[context;src;2.75,0.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
||||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
"list[context;fuel;2.75,2.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
|
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
|
||||||
"list[current_name;dst;5.75,1.5;1,1;]"..
|
"list[context;dst;5.75,1.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)..
|
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)..
|
||||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||||
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
|
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
|
||||||
|
@ -29,11 +29,11 @@ local function active_formspec(fuel_percent, item_percent)
|
||||||
-- TODO: Add it back when the Minetest bug is fixed.
|
-- TODO: Add it back when the Minetest bug is fixed.
|
||||||
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
|
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
|
||||||
--"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
|
--"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
|
||||||
"listring[current_name;dst]"..
|
"listring[context;dst]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_name;src]"..
|
"listring[context;src]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_name;fuel]"..
|
"listring[context;fuel]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -44,11 +44,11 @@ local inactive_formspec = "size[9,8.75]"..
|
||||||
"list[current_player;main;0,7.74;9,1;]"..
|
"list[current_player;main;0,7.74;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
mcl_formspec.get_itemslot_bg(0,7.74,9,1)..
|
||||||
"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]"..
|
"label[2.75,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Furnace"))).."]"..
|
||||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
"list[context;src;2.75,0.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
mcl_formspec.get_itemslot_bg(2.75,0.5,1,1)..
|
||||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
"list[context;fuel;2.75,2.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
|
mcl_formspec.get_itemslot_bg(2.75,2.5,1,1)..
|
||||||
"list[current_name;dst;5.75,1.5;1,1;]"..
|
"list[context;dst;5.75,1.5;1,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)..
|
mcl_formspec.get_itemslot_bg(5.75,1.5,1,1)..
|
||||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
|
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
|
||||||
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]"..
|
"image[4.1,1.5;1.5,1;gui_furnace_arrow_bg.png^[transformR270]"..
|
||||||
|
@ -56,11 +56,11 @@ local inactive_formspec = "size[9,8.75]"..
|
||||||
-- TODO: Add it back when the Minetest bug is fixed.
|
-- TODO: Add it back when the Minetest bug is fixed.
|
||||||
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
|
--"image_button[8,0;1,1;craftguide_book.png;craftguide;]"..
|
||||||
--"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
|
--"tooltip[craftguide;"..minetest.formspec_escape(S("Recipe book")).."]"..
|
||||||
"listring[current_name;dst]"..
|
"listring[context;dst]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_name;src]"..
|
"listring[context;src]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_name;fuel]"..
|
"listring[context;fuel]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
|
|
||||||
local receive_fields = function(pos, formname, fields, sender)
|
local receive_fields = function(pos, formname, fields, sender)
|
||||||
|
|
|
@ -5,14 +5,14 @@ local S = minetest.get_translator(minetest.get_current_modname())
|
||||||
local mcl_hoppers_formspec =
|
local mcl_hoppers_formspec =
|
||||||
"size[9,7]"..
|
"size[9,7]"..
|
||||||
"label[2,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Hopper"))).."]"..
|
"label[2,0;"..minetest.formspec_escape(minetest.colorize("#313131", S("Hopper"))).."]"..
|
||||||
"list[current_name;main;2,0.5;5,1;]"..
|
"list[context;main;2,0.5;5,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(2,0.5,5,1)..
|
mcl_formspec.get_itemslot_bg(2,0.5,5,1)..
|
||||||
"label[0,2;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
|
"label[0,2;"..minetest.formspec_escape(minetest.colorize("#313131", S("Inventory"))).."]"..
|
||||||
"list[current_player;main;0,2.5;9,3;9]"..
|
"list[current_player;main;0,2.5;9,3;9]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,2.5,9,3)..
|
mcl_formspec.get_itemslot_bg(0,2.5,9,3)..
|
||||||
"list[current_player;main;0,5.74;9,1;]"..
|
"list[current_player;main;0,5.74;9,1;]"..
|
||||||
mcl_formspec.get_itemslot_bg(0,5.74,9,1)..
|
mcl_formspec.get_itemslot_bg(0,5.74,9,1)..
|
||||||
"listring[current_name;main]"..
|
"listring[context;main]"..
|
||||||
"listring[current_player;main]"
|
"listring[current_player;main]"
|
||||||
|
|
||||||
-- Downwards hopper (base definition)
|
-- Downwards hopper (base definition)
|
||||||
|
|
|
@ -94,7 +94,9 @@ minetest.register_craft({
|
||||||
})
|
})
|
||||||
|
|
||||||
local function play_record(pos, itemstack, player)
|
local function play_record(pos, itemstack, player)
|
||||||
local name = itemstack:get_name()
|
local item_name = itemstack:get_name()
|
||||||
|
-- ensure the jukebox uses the new record names for old records
|
||||||
|
local name = minetest.registered_aliases[item_name] or item_name
|
||||||
if mcl_jukebox.registered_records[name] then
|
if mcl_jukebox.registered_records[name] then
|
||||||
local cname = player:get_player_name()
|
local cname = player:get_player_name()
|
||||||
if active_tracks[cname] then
|
if active_tracks[cname] then
|
||||||
|
|
|
@ -27,7 +27,7 @@ Raw Porkchop=Porc Cru
|
||||||
|
|
||||||
A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Un porc cru est la chair d'un porc et peut être mangée en toute sécurité. La cuisson augmentera considérablement sa valeur nutritive.
|
A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value.=Un porc cru est la chair d'un porc et peut être mangée en toute sécurité. La cuisson augmentera considérablement sa valeur nutritive.
|
||||||
|
|
||||||
Cooked Porkchop=Parc Cuit
|
Cooked Porkchop=Porc Cuit
|
||||||
Cooked porkchop is the cooked flesh of a pig and is used as food.=Le porc cuit est la chair cuite d'un porc et est utilisé comme aliment.
|
Cooked porkchop is the cooked flesh of a pig and is used as food.=Le porc cuit est la chair cuite d'un porc et est utilisé comme aliment.
|
||||||
Raw Rabbit=Lapin Cru
|
Raw Rabbit=Lapin Cru
|
||||||
|
|
||||||
|
|
|
@ -307,7 +307,7 @@ minetest.register_node("mcl_portals:end_portal_frame_eye", {
|
||||||
description = S("End Portal Frame with Eye of Ender"),
|
description = S("End Portal Frame with Eye of Ender"),
|
||||||
_tt_help = S("Used to construct end portals"),
|
_tt_help = S("Used to construct end portals"),
|
||||||
_doc_items_create_entry = false,
|
_doc_items_create_entry = false,
|
||||||
groups = { creative_breakable = 1, deco_block = 1, comparator_signal = 15, end_portal_frame = 2 },
|
groups = { creative_breakable = 1, deco_block = 1, comparator_signal = 15, end_portal_frame = 2, not_in_creative_inventory = 1 },
|
||||||
tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" },
|
tiles = { "mcl_portals_endframe_top.png^[lowpart:75:mcl_portals_endframe_eye.png", "mcl_portals_endframe_bottom.png", "mcl_portals_endframe_eye.png^mcl_portals_endframe_side.png" },
|
||||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false,
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
|
|
|
@ -30,9 +30,9 @@ Double Polished Stone Slab=Double Dalle en Pierre Polie
|
||||||
Andesite Stairs=Escalier en Andésite
|
Andesite Stairs=Escalier en Andésite
|
||||||
Andesite Slab=Dalle en Andésite
|
Andesite Slab=Dalle en Andésite
|
||||||
Double Andesite Slab=Double Dalle en Andésite
|
Double Andesite Slab=Double Dalle en Andésite
|
||||||
Granite Stairs=Escalier en Granite
|
Granite Stairs=Escalier en Granit
|
||||||
Granite Slab=Dalle en Granite
|
Granite Slab=Dalle en Granit
|
||||||
Double Granite Slab=Double Dalle en Granite
|
Double Granite Slab=Double Dalle en Granit
|
||||||
Diorite Stairs=Escalier en Diorite
|
Diorite Stairs=Escalier en Diorite
|
||||||
Diorite Slab=Dalle en Diorite
|
Diorite Slab=Dalle en Diorite
|
||||||
Double Diorite Slab=Double Dalle en Diorite
|
Double Diorite Slab=Double Dalle en Diorite
|
||||||
|
|
|
@ -368,10 +368,10 @@ local function make_stripped_trunk(itemstack, placer, pointed_thing)
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
if noddef._mcl_stripped_varient == nil then
|
if noddef._mcl_stripped_variant == nil then
|
||||||
return itemstack
|
return itemstack
|
||||||
else
|
else
|
||||||
minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_varient, param2=node.param2})
|
minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2})
|
||||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||||
-- Add wear (as if digging a axey node)
|
-- Add wear (as if digging a axey node)
|
||||||
local toolname = itemstack:get_name()
|
local toolname = itemstack:get_name()
|
||||||
|
|
|
@ -3,7 +3,7 @@ A piece of wall. It cannot be jumped over with a simple jump. When multiple of t
|
||||||
Cobblestone Wall=Muret de Pierres
|
Cobblestone Wall=Muret de Pierres
|
||||||
Mossy Cobblestone Wall=Muret de Pierres Moussu
|
Mossy Cobblestone Wall=Muret de Pierres Moussu
|
||||||
Andesite Wall=Muret d'Andésite
|
Andesite Wall=Muret d'Andésite
|
||||||
Granite Wall=Muret de Granite
|
Granite Wall=Muret de Granit
|
||||||
Diorite Wall=Muret de Diorite
|
Diorite Wall=Muret de Diorite
|
||||||
Brick Wall=Muret en Brique
|
Brick Wall=Muret en Brique
|
||||||
Sandstone Wall=Muret de Grès
|
Sandstone Wall=Muret de Grès
|
||||||
|
|
|
@ -187,8 +187,6 @@ function mcl_structures.generate_igloo(pos, rotation, pr)
|
||||||
if real_depth <= 6 then
|
if real_depth <= 6 then
|
||||||
return success
|
return success
|
||||||
end
|
end
|
||||||
-- Place hidden trapdoor
|
|
||||||
minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2
|
|
||||||
-- Generate ladder to basement
|
-- Generate ladder to basement
|
||||||
for y=1, real_depth-1 do
|
for y=1, real_depth-1 do
|
||||||
set_brick({x=tpos.x-1,y=tpos.y-y,z=tpos.z })
|
set_brick({x=tpos.x-1,y=tpos.y-y,z=tpos.z })
|
||||||
|
@ -199,6 +197,10 @@ function mcl_structures.generate_igloo(pos, rotation, pr)
|
||||||
end
|
end
|
||||||
-- Place basement
|
-- Place basement
|
||||||
mcl_structures.generate_igloo_basement(bpos, rotation, pr)
|
mcl_structures.generate_igloo_basement(bpos, rotation, pr)
|
||||||
|
-- Place hidden trapdoor
|
||||||
|
minetest.after(5, function(tpos, dir)
|
||||||
|
minetest.set_node(tpos, {name="mcl_doors:trapdoor", param2=20+minetest.dir_to_facedir(dir)}) -- TODO: more reliable param2
|
||||||
|
end, tpos, dir)
|
||||||
end
|
end
|
||||||
return success
|
return success
|
||||||
end
|
end
|
||||||
|
|
|
@ -189,22 +189,15 @@ minetest.register_globalstep(function(dtime)
|
||||||
if vector.length(player_velocity) < 40 then
|
if vector.length(player_velocity) < 40 then
|
||||||
local add_velocity = player.add_velocity or player.add_player_velocity
|
local add_velocity = player.add_velocity or player.add_player_velocity
|
||||||
add_velocity(player, vector.multiply(player:get_look_dir(), 4))
|
add_velocity(player, vector.multiply(player:get_look_dir(), 4))
|
||||||
minetest.add_particlespawner({
|
add_particle({
|
||||||
amount = 1,
|
pos = fly_pos,
|
||||||
time = 0.1,
|
velocity = {x = 0, y = 0, z = 0},
|
||||||
minpos = fly_pos,
|
acceleration = {x = 0, y = 0, z = 0},
|
||||||
maxpos = fly_pos,
|
expirationtime = math.random(0.3, 0.5),
|
||||||
minvel = {x = 0, y = 0, z = 0},
|
size = math.random(1, 2),
|
||||||
maxvel = {x = 0, y = 0, z = 0},
|
|
||||||
minacc = {x = 0, y = 0, z = 0},
|
|
||||||
maxacc = {x = 0, y = 0, z = 0},
|
|
||||||
minexptime = 0.3,
|
|
||||||
maxexptime = 0.5,
|
|
||||||
minsize = 1,
|
|
||||||
maxsize = 2.5,
|
|
||||||
collisiondetection = false,
|
collisiondetection = false,
|
||||||
vertical = false,
|
vertical = false,
|
||||||
texture = "mcl_particles_crit.png^[colorize:#bc7a57:127",
|
texture = "mcl_particles_bonemeal.png^[colorize:#bc7a57:127",
|
||||||
glow = 5,
|
glow = 5,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue