mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-27 10:29:34 +01:00
Merge (latest playerplus)
This commit is contained in:
commit
46379b924d
29 changed files with 96 additions and 102 deletions
|
@ -99,7 +99,7 @@ minetest.register_abm({
|
||||||
-- No decay near unloaded areas since these might include water.
|
-- No decay near unloaded areas since these might include water.
|
||||||
if not check_surroundings(pos, "ignore") then
|
if not check_surroundings(pos, "ignore") then
|
||||||
if wet <= 0 then
|
if wet <= 0 then
|
||||||
local n_def = minetest.registered_nodes[node.name] or nil
|
--local n_def = minetest.registered_nodes[node.name] or nil
|
||||||
local nn = minetest.get_node_or_nil({x=pos.x,y=pos.y+1,z=pos.z})
|
local nn = minetest.get_node_or_nil({x=pos.x,y=pos.y+1,z=pos.z})
|
||||||
if not nn or not nn.name then
|
if not nn or not nn.name then
|
||||||
return
|
return
|
||||||
|
|
|
@ -5,7 +5,10 @@ minetest.register_craftitem("mcl_farming:wheat_seeds", {
|
||||||
description = S("Wheat Seeds"),
|
description = S("Wheat Seeds"),
|
||||||
_tt_help = S("Grows on farmland"),
|
_tt_help = S("Grows on farmland"),
|
||||||
_doc_items_longdesc = S("Grows into a wheat plant. Chickens like wheat seeds."),
|
_doc_items_longdesc = S("Grows into a wheat plant. Chickens like wheat seeds."),
|
||||||
_doc_items_usagehelp = S("Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds."),
|
_doc_items_usagehelp = S([[
|
||||||
|
Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant.
|
||||||
|
They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds.
|
||||||
|
]]),
|
||||||
groups = { craftitem=1 },
|
groups = { craftitem=1 },
|
||||||
inventory_image = "mcl_farming_wheat_seeds.png",
|
inventory_image = "mcl_farming_wheat_seeds.png",
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
on_place = function(itemstack, placer, pointed_thing)
|
||||||
|
@ -28,7 +31,10 @@ for i=1,7 do
|
||||||
if i == 1 then
|
if i == 1 then
|
||||||
create = true
|
create = true
|
||||||
name = S("Premature Wheat Plant")
|
name = S("Premature Wheat Plant")
|
||||||
longdesc = S("Premature wheat plants grow on farmland under sunlight in 8 stages. On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.")
|
longdesc = S([[
|
||||||
|
Premature wheat plants grow on farmland under sunlight in 8 stages.
|
||||||
|
On hydrated farmland, they grow faster. They can be harvested at any time but will only yield a profit when mature.
|
||||||
|
]])
|
||||||
else
|
else
|
||||||
create = false
|
create = false
|
||||||
end
|
end
|
||||||
|
@ -54,7 +60,8 @@ for i=1,7 do
|
||||||
{-0.5, -0.5, -0.5, 0.5, sel_heights[i], 0.5}
|
{-0.5, -0.5, -0.5, 0.5, sel_heights[i], 0.5}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1},
|
groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1,
|
||||||
|
dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1},
|
||||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||||
_mcl_blast_resistance = 0,
|
_mcl_blast_resistance = 0,
|
||||||
})
|
})
|
||||||
|
@ -62,7 +69,10 @@ end
|
||||||
|
|
||||||
minetest.register_node("mcl_farming:wheat", {
|
minetest.register_node("mcl_farming:wheat", {
|
||||||
description = S("Mature Wheat Plant"),
|
description = S("Mature Wheat Plant"),
|
||||||
_doc_items_longdesc = S("Mature wheat plants are ready to be harvested for wheat and wheat seeds. They won't grow any further."),
|
_doc_items_longdesc = S([[
|
||||||
|
Mature wheat plants are ready to be harvested for wheat and wheat seeds.
|
||||||
|
They won't grow any further.
|
||||||
|
]]),
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
paramtype2 = "meshoptions",
|
paramtype2 = "meshoptions",
|
||||||
|
@ -81,7 +91,8 @@ minetest.register_node("mcl_farming:wheat", {
|
||||||
{ items = {'mcl_farming:wheat_item'} }
|
{ items = {'mcl_farming:wheat_item'} }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1,attached_node=1, dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1},
|
groups = {dig_immediate=3, not_in_creative_inventory=1, plant=1, attached_node=1,
|
||||||
|
dig_by_water=1,destroy_by_lava_flow=1, dig_by_piston=1},
|
||||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||||
_mcl_blast_resistance = 0,
|
_mcl_blast_resistance = 0,
|
||||||
})
|
})
|
||||||
|
@ -144,9 +155,9 @@ minetest.register_node("mcl_farming:hay_block", {
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
is_ground_content = false,
|
|
||||||
on_place = mcl_util.rotate_axis,
|
on_place = mcl_util.rotate_axis,
|
||||||
groups = {handy=1, hoey=1, flammable=2, fire_encouragement=60, fire_flammability=20, building_block=1, fall_damage_add_percent=-80},
|
groups = {handy=1, hoey=1, flammable=2, fire_encouragement=60,
|
||||||
|
fire_flammability=20, building_block=1, fall_damage_add_percent=-80},
|
||||||
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
sounds = mcl_sounds.node_sound_leaves_defaults(),
|
||||||
on_rotate = on_rotate,
|
on_rotate = on_rotate,
|
||||||
_mcl_blast_resistance = 0.5,
|
_mcl_blast_resistance = 0.5,
|
||||||
|
|
|
@ -76,7 +76,7 @@ mcl_fences.register_fence_gate = function(id, fence_gate_name, texture, groups,
|
||||||
local meta2
|
local meta2
|
||||||
local state2 = 0
|
local state2 = 0
|
||||||
|
|
||||||
local function update_gate(pos, node)
|
local function update_gate(pos, node)
|
||||||
minetest.set_node(pos, node)
|
minetest.set_node(pos, node)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ local add_entity = minetest.add_entity
|
||||||
-- Fire Charge
|
-- Fire Charge
|
||||||
minetest.register_craftitem("mcl_fire:fire_charge", {
|
minetest.register_craftitem("mcl_fire:fire_charge", {
|
||||||
description = S("Fire Charge"),
|
description = S("Fire Charge"),
|
||||||
_tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"),
|
_tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"),
|
||||||
_doc_items_longdesc = S("Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly."),
|
_doc_items_longdesc = S("Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly."),
|
||||||
_doc_items_usagehelp = S("Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up."),
|
_doc_items_usagehelp = S("Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up."),
|
||||||
inventory_image = "mcl_fire_fire_charge.png",
|
inventory_image = "mcl_fire_fire_charge.png",
|
||||||
|
|
|
@ -5,7 +5,7 @@ local add_node = minetest.add_node
|
||||||
-- Flint and Steel
|
-- Flint and Steel
|
||||||
minetest.register_tool("mcl_fire:flint_and_steel", {
|
minetest.register_tool("mcl_fire:flint_and_steel", {
|
||||||
description = S("Flint and Steel"),
|
description = S("Flint and Steel"),
|
||||||
_tt_help = S("Starts fires and ignites blocks"),
|
_tt_help = S("Starts fires and ignites blocks"),
|
||||||
_doc_items_longdesc = S("Flint and steel is a tool to start fires and ignite blocks."),
|
_doc_items_longdesc = S("Flint and steel is a tool to start fires and ignite blocks."),
|
||||||
_doc_items_usagehelp = S("Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited."),
|
_doc_items_usagehelp = S("Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited."),
|
||||||
inventory_image = "mcl_fire_flint_and_steel.png",
|
inventory_image = "mcl_fire_flint_and_steel.png",
|
||||||
|
|
|
@ -1,11 +1,6 @@
|
||||||
--Fishing Rod, Bobber, and Flying Bobber mechanics and Bobber artwork by Rootyjr.
|
--Fishing Rod, Bobber, and Flying Bobber mechanics and Bobber artwork by Rootyjr.
|
||||||
|
|
||||||
local S = minetest.get_translator("mcl_fishing")
|
local S = minetest.get_translator("mcl_fishing")
|
||||||
local mod_throwing = minetest.get_modpath("mcl_throwing")
|
|
||||||
|
|
||||||
local entity_mapping = {
|
|
||||||
["mcl_fishing:bobber"] = "mcl_fishing:bobber_entity",
|
|
||||||
}
|
|
||||||
|
|
||||||
local bobber_ENTITY={
|
local bobber_ENTITY={
|
||||||
physical = false,
|
physical = false,
|
||||||
|
@ -61,7 +56,6 @@ local fish = function(itemstack, player, pointed_thing)
|
||||||
local itemname
|
local itemname
|
||||||
local items
|
local items
|
||||||
local itemcount = 1
|
local itemcount = 1
|
||||||
local itemwear = 0
|
|
||||||
local pr = PseudoRandom(os.time() * math.random(1, 100))
|
local pr = PseudoRandom(os.time() * math.random(1, 100))
|
||||||
local r = pr:next(1, 100)
|
local r = pr:next(1, 100)
|
||||||
local fish_values = {85, 84.8, 84.7, 84.5}
|
local fish_values = {85, 84.8, 84.7, 84.5}
|
||||||
|
@ -173,7 +167,7 @@ local fish = function(itemstack, player, pointed_thing)
|
||||||
if noent == true then
|
if noent == true then
|
||||||
local playerpos = player:get_pos()
|
local playerpos = player:get_pos()
|
||||||
local dir = player:get_look_dir()
|
local dir = player:get_look_dir()
|
||||||
local obj = mcl_throwing.throw("mcl_fishing:flying_bobber", {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, 15, player:get_player_name())
|
mcl_throwing.throw("mcl_fishing:flying_bobber", {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, 15, player:get_player_name())
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -344,10 +338,8 @@ mcl_throwing.register_throwable_object("mcl_fishing:flying_bobber", "mcl_fishing
|
||||||
-- If player leaves area, remove bobber.
|
-- If player leaves area, remove bobber.
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
local objs = minetest.get_objects_inside_radius(player:get_pos(), 250)
|
local objs = minetest.get_objects_inside_radius(player:get_pos(), 250)
|
||||||
local num = 0
|
|
||||||
local ent = nil
|
local ent = nil
|
||||||
local noent = true
|
local noent = true
|
||||||
|
|
||||||
for n = 1, #objs do
|
for n = 1, #objs do
|
||||||
ent = objs[n]:get_luaentity()
|
ent = objs[n]:get_luaentity()
|
||||||
if ent then
|
if ent then
|
||||||
|
|
|
@ -180,7 +180,7 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im
|
||||||
if not inv_img then
|
if not inv_img then
|
||||||
inv_img = top_img
|
inv_img = top_img
|
||||||
end
|
end
|
||||||
local usagehelp, noncreative, create_entry, paramtype2, palette
|
local noncreative, create_entry, paramtype2, palette
|
||||||
if is_flower == nil then
|
if is_flower == nil then
|
||||||
is_flower = true
|
is_flower = true
|
||||||
end
|
end
|
||||||
|
@ -475,9 +475,6 @@ local fix_doubleplants = minetest.settings:get_bool("fix_doubleplants", true)
|
||||||
|
|
||||||
if mod_mcimport and mg_name == "singlenode" and fix_doubleplants == true then
|
if mod_mcimport and mg_name == "singlenode" and fix_doubleplants == true then
|
||||||
local flowernames = { "peony", "rose_bush", "lilac", "sunflower", "double_fern", "double_grass" }
|
local flowernames = { "peony", "rose_bush", "lilac", "sunflower", "double_fern", "double_grass" }
|
||||||
for c=1, 6 do
|
|
||||||
local flowername = flowernames[c]
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_lbm({
|
minetest.register_lbm({
|
||||||
label = "Add double plant tops.",
|
label = "Add double plant tops.",
|
||||||
|
|
|
@ -384,7 +384,6 @@ local function furnace_node_timer(pos, elapsed)
|
||||||
-- Update formspec and node
|
-- Update formspec and node
|
||||||
--
|
--
|
||||||
local formspec = inactive_formspec
|
local formspec = inactive_formspec
|
||||||
local item_state
|
|
||||||
local item_percent = 0
|
local item_percent = 0
|
||||||
if cookable then
|
if cookable then
|
||||||
item_percent = math.floor(src_time / cooked.time * 100)
|
item_percent = math.floor(src_time / cooked.time * 100)
|
||||||
|
@ -414,7 +413,7 @@ local function furnace_node_timer(pos, elapsed)
|
||||||
meta:set_float("fuel_time", fuel_time)
|
meta:set_float("fuel_time", fuel_time)
|
||||||
meta:set_float("src_time", src_time)
|
meta:set_float("src_time", src_time)
|
||||||
if srclist then
|
if srclist then
|
||||||
meta:set_string("src_item", srclist[1]:get_name())
|
meta:set_string("src_item", src_item)
|
||||||
else
|
else
|
||||||
meta:set_string("src_item", "")
|
meta:set_string("src_item", "")
|
||||||
end
|
end
|
||||||
|
@ -441,7 +440,12 @@ minetest.register_node("mcl_furnaces:furnace", {
|
||||||
_tt_help = S("Uses fuel to smelt or cook items"),
|
_tt_help = S("Uses fuel to smelt or cook items"),
|
||||||
_doc_items_longdesc = S("Furnaces cook or smelt several items, using a furnace fuel, into something else."),
|
_doc_items_longdesc = S("Furnaces cook or smelt several items, using a furnace fuel, into something else."),
|
||||||
_doc_items_usagehelp =
|
_doc_items_usagehelp =
|
||||||
S("Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.").."\n"..
|
S([[
|
||||||
|
Use the furnace to open the furnace menu.
|
||||||
|
Place a furnace fuel in the lower slot and the source material in the upper slot.
|
||||||
|
The furnace will slowly use its fuel to smelt the item.
|
||||||
|
The result will be placed into the output slot at the right side.
|
||||||
|
]]).."\n"..
|
||||||
S("Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn."),
|
S("Use the recipe book to see what you can smelt, what you can use as fuel and how long it will burn."),
|
||||||
_doc_items_hidden = false,
|
_doc_items_hidden = false,
|
||||||
tiles = {
|
tiles = {
|
||||||
|
|
|
@ -90,7 +90,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor)
|
||||||
local wdir = minetest.dir_to_wallmounted(diff)
|
local wdir = minetest.dir_to_wallmounted(diff)
|
||||||
|
|
||||||
local itemstring = itemstack:get_name()
|
local itemstring = itemstack:get_name()
|
||||||
local fakestack = ItemStack(itemstack)
|
--local fakestack = ItemStack(itemstack)
|
||||||
local idef = fakestack:get_definition()
|
local idef = fakestack:get_definition()
|
||||||
local retval
|
local retval
|
||||||
if wdir == 0 or wdir == 1 then
|
if wdir == 0 or wdir == 1 then
|
||||||
|
@ -101,9 +101,7 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor)
|
||||||
if not retval then
|
if not retval then
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
itemstack,_ = minetest.item_place(fakestack, placer, pointed_thing, wdir)
|
||||||
local success
|
|
||||||
itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir)
|
|
||||||
itemstack:set_name(itemstring)
|
itemstack:set_name(itemstring)
|
||||||
return itemstack
|
return itemstack
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -152,7 +152,7 @@ def_hopper_enabled.on_place = function(itemstack, placer, pointed_thing)
|
||||||
local z = upos.z - apos.z
|
local z = upos.z - apos.z
|
||||||
|
|
||||||
local fake_itemstack = ItemStack(itemstack)
|
local fake_itemstack = ItemStack(itemstack)
|
||||||
local newnode, param2
|
local param2
|
||||||
if x == -1 then
|
if x == -1 then
|
||||||
fake_itemstack:set_name("mcl_hoppers:hopper_side")
|
fake_itemstack:set_name("mcl_hoppers:hopper_side")
|
||||||
param2 = 0
|
param2 = 0
|
||||||
|
@ -166,7 +166,7 @@ def_hopper_enabled.on_place = function(itemstack, placer, pointed_thing)
|
||||||
fake_itemstack:set_name("mcl_hoppers:hopper_side")
|
fake_itemstack:set_name("mcl_hoppers:hopper_side")
|
||||||
param2 = 1
|
param2 = 1
|
||||||
end
|
end
|
||||||
local itemstack, success = minetest.item_place_node(fake_itemstack, placer, pointed_thing, param2)
|
local itemstack,_ = minetest.item_place_node(fake_itemstack, placer, pointed_thing, param2)
|
||||||
itemstack:set_name("mcl_hoppers:hopper")
|
itemstack:set_name("mcl_hoppers:hopper")
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
@ -411,7 +411,6 @@ minetest.register_abm({
|
||||||
-- Move an item from the hopper into container below
|
-- Move an item from the hopper into container below
|
||||||
local downnode = minetest.get_node(downpos)
|
local downnode = minetest.get_node(downpos)
|
||||||
if not minetest.registered_nodes[downnode.name] then return end
|
if not minetest.registered_nodes[downnode.name] then return end
|
||||||
g = minetest.registered_nodes[downnode.name].groups.container
|
|
||||||
mcl_util.move_item_container(pos, downpos)
|
mcl_util.move_item_container(pos, downpos)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
@ -462,7 +461,7 @@ minetest.register_abm({
|
||||||
-- Put fuel into fuel slot
|
-- Put fuel into fuel slot
|
||||||
local sinv = minetest.get_inventory({type="node", pos = pos})
|
local sinv = minetest.get_inventory({type="node", pos = pos})
|
||||||
local dinv = minetest.get_inventory({type="node", pos = front})
|
local dinv = minetest.get_inventory({type="node", pos = front})
|
||||||
local slot_id, stack = mcl_util.get_eligible_transfer_item_slot(sinv, "main", dinv, "fuel", is_transferrable_fuel)
|
local slot_id,_ = mcl_util.get_eligible_transfer_item_slot(sinv, "main", dinv, "fuel", is_transferrable_fuel)
|
||||||
if slot_id then
|
if slot_id then
|
||||||
mcl_util.move_item_container(pos, front, nil, slot_id, "fuel")
|
mcl_util.move_item_container(pos, front, nil, slot_id, "fuel")
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,11 +20,13 @@ local register_block = function(subname, description, tiles, is_ground_content)
|
||||||
is_ground_content = is_ground_content,
|
is_ground_content = is_ground_content,
|
||||||
groups = {dig_immediate = 3, spawns_silverfish = 1, deco_block = 1},
|
groups = {dig_immediate = 3, spawns_silverfish = 1, deco_block = 1},
|
||||||
drop = '',
|
drop = '',
|
||||||
is_ground_content = false,
|
|
||||||
sounds = mcl_sounds.node_sound_stone_defaults(),
|
sounds = mcl_sounds.node_sound_stone_defaults(),
|
||||||
after_dig_node = spawn_silverfish,
|
after_dig_node = spawn_silverfish,
|
||||||
_tt_help = S("Hides a silverfish"),
|
_tt_help = S("Hides a silverfish"),
|
||||||
_doc_items_longdesc = S("An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart."),
|
_doc_items_longdesc = S([[
|
||||||
|
An infested block is a block from which a silverfish will pop out when it is broken.
|
||||||
|
It looks identical to its normal counterpart.
|
||||||
|
]]),
|
||||||
_mcl_hardness = 0,
|
_mcl_hardness = 0,
|
||||||
_mcl_blast_resistance = 0.5,
|
_mcl_blast_resistance = 0.5,
|
||||||
})
|
})
|
||||||
|
|
|
@ -4,7 +4,6 @@ local on_place = mcl_util.generate_on_place_plant_function(function(place_pos, p
|
||||||
local soil_node = minetest.get_node_or_nil({x=place_pos.x, y=place_pos.y-1, z=place_pos.z})
|
local soil_node = minetest.get_node_or_nil({x=place_pos.x, y=place_pos.y-1, z=place_pos.z})
|
||||||
if not soil_node then return false end
|
if not soil_node then return false end
|
||||||
local snn = soil_node.name -- soil node name
|
local snn = soil_node.name -- soil node name
|
||||||
local sd = minetest.registered_nodes[snn] -- soil definition
|
|
||||||
|
|
||||||
-- Placement rules:
|
-- Placement rules:
|
||||||
-- * Always allowed on podzol or mycelimu
|
-- * Always allowed on podzol or mycelimu
|
||||||
|
|
|
@ -265,7 +265,6 @@ minetest.register_abm({
|
||||||
if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "mcl_core:water_source" then
|
if minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "mcl_core:water_source" then
|
||||||
-- Find dead form (it's the same as the node's drop)
|
-- Find dead form (it's the same as the node's drop)
|
||||||
local def = minetest.registered_nodes[node.name]
|
local def = minetest.registered_nodes[node.name]
|
||||||
local dead
|
|
||||||
if def then
|
if def then
|
||||||
node.name = def.drop
|
node.name = def.drop
|
||||||
else
|
else
|
||||||
|
|
|
@ -37,14 +37,9 @@ local mt_record_protection_violation = minetest.record_protection_violation
|
||||||
local mt_is_creative_enabled = minetest.is_creative_enabled
|
local mt_is_creative_enabled = minetest.is_creative_enabled
|
||||||
local mt_sound_play = minetest.sound_play
|
local mt_sound_play = minetest.sound_play
|
||||||
|
|
||||||
local math_min = math.min
|
local math = math
|
||||||
local math_max = math.max
|
local string = string
|
||||||
local math_ceil = math.ceil
|
local table = table
|
||||||
local math_floor = math.floor
|
|
||||||
local math_random = math.random
|
|
||||||
local string_format = string.format
|
|
||||||
local table_copy = table.copy
|
|
||||||
local table_insert = table.insert
|
|
||||||
|
|
||||||
-- DEBUG: functions
|
-- DEBUG: functions
|
||||||
-- local log = minetest.log
|
-- local log = minetest.log
|
||||||
|
@ -122,7 +117,7 @@ function kelp.is_downward_flowing(pos, node, pos_above, node_above, __is_above__
|
||||||
-- Function params: (pos[, node]) or (node, pos_above) or (node, node_above)
|
-- Function params: (pos[, node]) or (node, pos_above) or (node, node_above)
|
||||||
local node = node or mt_get_node(pos)
|
local node = node or mt_get_node(pos)
|
||||||
|
|
||||||
local result = (math_floor(node.param2 / 8) % 2) == 1
|
local result = (math.floor(node.param2 / 8) % 2) == 1
|
||||||
if not (result or __is_above__) then
|
if not (result or __is_above__) then
|
||||||
-- If not, also check node above.
|
-- If not, also check node above.
|
||||||
-- (this is needed due a weird quirk in the definition of "downwards flowing"
|
-- (this is needed due a weird quirk in the definition of "downwards flowing"
|
||||||
|
@ -182,14 +177,14 @@ end
|
||||||
-- Roll whether to grow kelp or not.
|
-- Roll whether to grow kelp or not.
|
||||||
function kelp.roll_growth(numerator, denominator)
|
function kelp.roll_growth(numerator, denominator)
|
||||||
-- Optional params: numerator, denominator
|
-- Optional params: numerator, denominator
|
||||||
return math_random(denominator or kelp.ROLL_GROWTH_DENOMINATOR) <= (numerator or kelp.ROLL_GROWTH_NUMERATOR)
|
return math.random(denominator or kelp.ROLL_GROWTH_DENOMINATOR) <= (numerator or kelp.ROLL_GROWTH_NUMERATOR)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Roll initial age for kelp.
|
-- Roll initial age for kelp.
|
||||||
function kelp.roll_init_age(min, max)
|
function kelp.roll_init_age(min, max)
|
||||||
-- Optional params
|
-- Optional params
|
||||||
return math_random(min or kelp.MIN_AGE, (max or kelp.MAX_AGE)-1)
|
return math.random(min or kelp.MIN_AGE, (max or kelp.MAX_AGE)-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -197,7 +192,7 @@ end
|
||||||
-- For the special case where the max param2 is reached, interpret that as the
|
-- For the special case where the max param2 is reached, interpret that as the
|
||||||
-- 16th kelp stem.
|
-- 16th kelp stem.
|
||||||
function kelp.get_height(param2)
|
function kelp.get_height(param2)
|
||||||
return math_floor(param2 / 16) + math_floor(param2 % 16 / 8)
|
return math.floor(param2 / 16) + math.floor(param2 % 16 / 8)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -232,7 +227,7 @@ end
|
||||||
-- Obtain next param2.
|
-- Obtain next param2.
|
||||||
function kelp.next_param2(param2)
|
function kelp.next_param2(param2)
|
||||||
-- param2 max value is 255, so adding to 256 causes overflow.
|
-- param2 max value is 255, so adding to 256 causes overflow.
|
||||||
return math_min(param2+16 - param2 % 16, 255);
|
return math.min(param2+16 - param2 % 16, 255);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -242,8 +237,8 @@ function kelp.store_meta()
|
||||||
for _ in pairs(kelp.age_queue_pos) do
|
for _ in pairs(kelp.age_queue_pos) do
|
||||||
count = count + 1
|
count = count + 1
|
||||||
end
|
end
|
||||||
-- chatlog(string_format("Storing age metadata: %d in queue", #kelp.age_queue))
|
-- chatlog(string.format("Storing age metadata: %d in queue", #kelp.age_queue))
|
||||||
-- chatlog(string_format("Storing age metadata: %d valid in queue", count))
|
-- chatlog(string.format("Storing age metadata: %d valid in queue", count))
|
||||||
for i=1,#kelp.age_queue do
|
for i=1,#kelp.age_queue do
|
||||||
local pos_hash = kelp.age_queue[i]
|
local pos_hash = kelp.age_queue[i]
|
||||||
local pos = kelp.age_queue_pos[pos_hash]
|
local pos = kelp.age_queue_pos[pos_hash]
|
||||||
|
@ -265,7 +260,7 @@ function kelp.store_age(age, pos, pos_hash)
|
||||||
|
|
||||||
kelp.age_pool[pos_hash] = age
|
kelp.age_pool[pos_hash] = age
|
||||||
if not kelp.age_queue_pos[pos_hash] then
|
if not kelp.age_queue_pos[pos_hash] then
|
||||||
table_insert(kelp.age_queue, pos_hash)
|
table.insert(kelp.age_queue, pos_hash)
|
||||||
kelp.age_queue_pos[pos_hash] = pos
|
kelp.age_queue_pos[pos_hash] = pos
|
||||||
return true, pos_hash
|
return true, pos_hash
|
||||||
end
|
end
|
||||||
|
@ -713,7 +708,7 @@ function kelp.register_kelp_surface(surface, surface_deftemplate, surface_docs)
|
||||||
doc.add_entry_alias("nodes", surface_docs.entry_id_orig, "nodes", surfacename)
|
doc.add_entry_alias("nodes", surface_docs.entry_id_orig, "nodes", surfacename)
|
||||||
end
|
end
|
||||||
|
|
||||||
local sounds = table_copy(def.sounds)
|
local sounds = table.copy(def.sounds)
|
||||||
sounds.dig = kelp.leaf_sounds.dig
|
sounds.dig = kelp.leaf_sounds.dig
|
||||||
sounds.dug = kelp.leaf_sounds.dug
|
sounds.dug = kelp.leaf_sounds.dug
|
||||||
sounds.place = kelp.leaf_sounds.place
|
sounds.place = kelp.leaf_sounds.place
|
||||||
|
@ -732,9 +727,9 @@ end
|
||||||
-- Kelp surfaces nodes ---------------------------------------------------------
|
-- Kelp surfaces nodes ---------------------------------------------------------
|
||||||
|
|
||||||
-- Dirt must be registered first, for the docs
|
-- Dirt must be registered first, for the docs
|
||||||
kelp.register_kelp_surface(kelp.surfaces[1], table_copy(kelp.surface_deftemplate), kelp.surface_docs)
|
kelp.register_kelp_surface(kelp.surfaces[1], table.copy(kelp.surface_deftemplate), kelp.surface_docs)
|
||||||
for i=2, #kelp.surfaces do
|
for i=2, #kelp.surfaces do
|
||||||
kelp.register_kelp_surface(kelp.surfaces[i], table_copy(kelp.surface_deftemplate), kelp.surface_docs)
|
kelp.register_kelp_surface(kelp.surfaces[i], table.copy(kelp.surface_deftemplate), kelp.surface_docs)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Kelp item -------------------------------------------------------------------
|
-- Kelp item -------------------------------------------------------------------
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
mcl_throwing = {}
|
mcl_throwing = {}
|
||||||
|
|
||||||
local S = minetest.get_translator("mcl_throwing")
|
|
||||||
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
|
||||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Snowballs and other throwable items
|
-- Snowballs and other throwable items
|
||||||
--
|
--
|
||||||
|
|
||||||
|
@ -42,7 +40,7 @@ function mcl_throwing.get_player_throw_function(entity_name, velocity)
|
||||||
local func = function(item, player, pointed_thing)
|
local func = function(item, player, pointed_thing)
|
||||||
local playerpos = player:get_pos()
|
local playerpos = player:get_pos()
|
||||||
local dir = player:get_look_dir()
|
local dir = player:get_look_dir()
|
||||||
local obj = mcl_throwing.throw(item, {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, velocity, player:get_player_name())
|
mcl_throwing.throw(item, {x=playerpos.x, y=playerpos.y+1.5, z=playerpos.z}, dir, velocity, player:get_player_name())
|
||||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
if not minetest.is_creative_enabled(player:get_player_name()) then
|
||||||
item:take_item()
|
item:take_item()
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
local S = minetest.get_translator("mcl_tnt")
|
local S = minetest.get_translator("mcl_tnt")
|
||||||
local tnt_griefing = minetest.settings:get_bool("mcl_tnt_griefing", true)
|
local tnt_griefing = minetest.settings:get_bool("mcl_tnt_griefing", true)
|
||||||
|
|
||||||
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
|
||||||
|
|
||||||
local function spawn_tnt(pos, entname)
|
local function spawn_tnt(pos, entname)
|
||||||
minetest.sound_play("tnt_ignite", {pos = pos,gain = 1.0,max_hear_distance = 15,}, true)
|
minetest.sound_play("tnt_ignite", {pos = pos,gain = 1.0,max_hear_distance = 15,}, true)
|
||||||
local tnt = minetest.add_entity(pos, entname)
|
local tnt = minetest.add_entity(pos, entname)
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
local S = minetest.get_translator("mcl_commands")
|
|
||||||
|
|
||||||
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
|
||||||
|
|
||||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
|
||||||
dofile(modpath.."/kill.lua")
|
dofile(modpath.."/kill.lua")
|
||||||
|
|
|
@ -6,7 +6,7 @@ minetest.register_chatcommand("setblock", {
|
||||||
privs = {give=true, interact=true},
|
privs = {give=true, interact=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local p = {}
|
local p = {}
|
||||||
local nodestring = nil
|
local nodestring
|
||||||
p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$")
|
p.x, p.y, p.z, nodestring = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) +(.+)$")
|
||||||
p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
|
p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
|
||||||
if p.x and p.y and p.z and nodestring then
|
if p.x and p.y and p.z and nodestring then
|
||||||
|
|
|
@ -4,39 +4,34 @@ minetest.register_chatcommand("playsound",{
|
||||||
params = S("<sound> <target>"), --TODO:add source
|
params = S("<sound> <target>"), --TODO:add source
|
||||||
description = S("Play a sound. Arguments: <sound>: name of the sound. <target>: Target."),
|
description = S("Play a sound. Arguments: <sound>: name of the sound. <target>: Target."),
|
||||||
privs = {server = true},
|
privs = {server = true},
|
||||||
func = function(name, params)
|
func = function(name, rawparams)
|
||||||
local P = {}
|
local P = {}
|
||||||
local i = 0
|
local i = 0
|
||||||
for str in string.gmatch(params, "([^ ]+)") do
|
for str in string.gmatch(rawparams, "([^ ]+)") do
|
||||||
i = i + 1
|
i = i + 1
|
||||||
P[i] = str
|
P[i] = str
|
||||||
end
|
end
|
||||||
|
|
||||||
local params = {}
|
local params = {}
|
||||||
if P[1] == tostring(P[1]) then
|
if P[1] == tostring(P[1]) then
|
||||||
params.name = P[1]
|
params.name = P[1]
|
||||||
else
|
else
|
||||||
return false, S("Sound name is invalid!") --TODO: add mc chat message
|
return false, S("Sound name is invalid!") --TODO: add mc chat message
|
||||||
end
|
end
|
||||||
|
|
||||||
if P[2] == tostring(P[2]) and minetest.player_exists(P[2]) then
|
if P[2] == tostring(P[2]) and minetest.player_exists(P[2]) then
|
||||||
params.target = P[2]
|
params.target = P[2]
|
||||||
else
|
else
|
||||||
return false, S("Target is invalid!!")
|
return false, S("Target is invalid!!")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- if P[3] then
|
-- if P[3] then
|
||||||
-- params.pos = nil --TODO:position
|
-- params.pos = nil --TODO:position
|
||||||
-- else
|
-- else
|
||||||
-- params.pos = nil
|
-- params.pos = nil
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
-- if P[4] == tonumber(P[4]) then
|
-- if P[4] == tonumber(P[4]) then
|
||||||
-- params.gain = P[4]
|
-- params.gain = P[4]
|
||||||
-- else
|
-- else
|
||||||
-- params.gain = 1.0
|
-- params.gain = 1.0
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
-- if P[5] == tonumber(P[5]) then
|
-- if P[5] == tonumber(P[5]) then
|
||||||
-- params.pitch = P[5]
|
-- params.pitch = P[5]
|
||||||
-- else
|
-- else
|
||||||
|
|
|
@ -27,7 +27,12 @@ minetest.register_craft({
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = "mcl_ocean:prismarine_crystals",
|
output = "mcl_ocean:prismarine_crystals",
|
||||||
recipe = { "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_ocean:prismarine_shard", "mcl_core:gold_ingot" },
|
recipe = {
|
||||||
|
"mcl_ocean:prismarine_shard",
|
||||||
|
"mcl_ocean:prismarine_shard",
|
||||||
|
"mcl_ocean:prismarine_shard",
|
||||||
|
"mcl_core:gold_ingot",
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
|
|
@ -20,7 +20,7 @@ minetest.register_on_dieplayer(function(player)
|
||||||
local playerinv = player:get_inventory()
|
local playerinv = player:get_inventory()
|
||||||
local pos = player:get_pos()
|
local pos = player:get_pos()
|
||||||
-- No item drop if in deep void
|
-- No item drop if in deep void
|
||||||
local void, void_deadly = mcl_worlds.is_in_void(pos)
|
local _, void_deadly = mcl_worlds.is_in_void(pos)
|
||||||
|
|
||||||
for l=1,#mcl_death_drop.registered_dropped_lists do
|
for l=1,#mcl_death_drop.registered_dropped_lists do
|
||||||
local inv = mcl_death_drop.registered_dropped_lists[l].inv
|
local inv = mcl_death_drop.registered_dropped_lists[l].inv
|
||||||
|
|
|
@ -86,7 +86,8 @@ if mcl_hunger.active then
|
||||||
|
|
||||||
function mcl_hunger.saturate(playername, increase, update_hudbar)
|
function mcl_hunger.saturate(playername, increase, update_hudbar)
|
||||||
local player = minetest.get_player_by_name(playername)
|
local player = minetest.get_player_by_name(playername)
|
||||||
local ok = mcl_hunger.set_saturation(player, math.min(mcl_hunger.get_saturation(player) + increase, mcl_hunger.get_hunger(player)))
|
local ok = mcl_hunger.set_saturation(player,
|
||||||
|
math.min(mcl_hunger.get_saturation(player) + increase, mcl_hunger.get_hunger(player)))
|
||||||
if update_hudbar ~= false then
|
if update_hudbar ~= false then
|
||||||
mcl_hunger.update_saturation_hud(player, mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player))
|
mcl_hunger.update_saturation_hud(player, mcl_hunger.get_saturation(player), mcl_hunger.get_hunger(player))
|
||||||
end
|
end
|
||||||
|
@ -105,7 +106,7 @@ if mcl_hunger.active then
|
||||||
-- otherwise the following poison/exhaust fields are ignored
|
-- otherwise the following poison/exhaust fields are ignored
|
||||||
food[name].poison = poison -- poison damage per tick for poisonous food
|
food[name].poison = poison -- poison damage per tick for poisonous food
|
||||||
food[name].exhaust = exhaust -- exhaustion per tick for poisonous food
|
food[name].exhaust = exhaust -- exhaustion per tick for poisonous food
|
||||||
food[name].poisonchance = poisonchance -- chance percentage that this item poisons the player (default: 100% if poisoning is enabled)
|
food[name].poisonchance = poisonchance -- chance percentage that this item poisons the player (default: 100%)
|
||||||
food[name].sound = sound -- special sound that is played when eating
|
food[name].sound = sound -- special sound that is played when eating
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ local S = minetest.get_translator("mcl_hunger")
|
||||||
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
local mod_death_messages = minetest.get_modpath("mcl_death_messages")
|
||||||
|
|
||||||
-- wrapper for minetest.item_eat (this way we make sure other mods can't break this one)
|
-- wrapper for minetest.item_eat (this way we make sure other mods can't break this one)
|
||||||
local org_eat = minetest.do_item_eat
|
|
||||||
minetest.do_item_eat = function(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
minetest.do_item_eat = function(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||||
|
|
||||||
if not user or user:is_player() == false then
|
if not user or user:is_player() == false then
|
||||||
|
@ -38,7 +37,8 @@ minetest.do_item_eat = function(hp_change, replace_with_item, itemstack, user, p
|
||||||
-- FIXME: In singleplayer, there's a cheat to circumvent this, simply by pausing the game between eats.
|
-- FIXME: In singleplayer, there's a cheat to circumvent this, simply by pausing the game between eats.
|
||||||
-- This is because os.time() obviously does not care about the pause. A fix needs a different timer mechanism.
|
-- This is because os.time() obviously does not care about the pause. A fix needs a different timer mechanism.
|
||||||
if no_eat_delay or (mcl_hunger.last_eat[name] < 0) or (os.difftime(os.time(), mcl_hunger.last_eat[name]) >= 2) then
|
if no_eat_delay or (mcl_hunger.last_eat[name] < 0) or (os.difftime(os.time(), mcl_hunger.last_eat[name]) >= 2) then
|
||||||
local can_eat_when_full = creative or (mcl_hunger.active == false) or minetest.get_item_group(itemstack:get_name(), "can_eat_when_full") == 1
|
local can_eat_when_full = creative or (mcl_hunger.active == false)
|
||||||
|
or minetest.get_item_group(itemstack:get_name(), "can_eat_when_full") == 1
|
||||||
-- Don't allow eating when player has full hunger bar (some exceptional items apply)
|
-- Don't allow eating when player has full hunger bar (some exceptional items apply)
|
||||||
if can_eat_when_full or (mcl_hunger.get_hunger(user) < 20) then
|
if can_eat_when_full or (mcl_hunger.get_hunger(user) < 20) then
|
||||||
itemstack = mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
itemstack = mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
|
||||||
|
@ -67,7 +67,8 @@ function mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_t
|
||||||
def.saturation = hp_change
|
def.saturation = hp_change
|
||||||
def.replace = replace_with_item
|
def.replace = replace_with_item
|
||||||
end
|
end
|
||||||
local func = mcl_hunger.item_eat(def.saturation, def.replace, def.poisontime, def.poison, def.exhaust, def.poisonchance, def.sound)
|
local func = mcl_hunger.item_eat(def.saturation, def.replace, def.poisontime,
|
||||||
|
def.poison, def.exhaust, def.poisonchance, def.sound)
|
||||||
return func(itemstack, user, pointed_thing)
|
return func(itemstack, user, pointed_thing)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -90,7 +91,6 @@ local function poisonp(tick, time, time_left, damage, exhaustion, name)
|
||||||
if not player then
|
if not player then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local name = player:get_player_name()
|
|
||||||
-- Abort if food poisonings have been stopped
|
-- Abort if food poisonings have been stopped
|
||||||
if mcl_hunger.poison_hunger[name] == 0 then
|
if mcl_hunger.poison_hunger[name] == 0 then
|
||||||
return
|
return
|
||||||
|
@ -131,7 +131,7 @@ function mcl_hunger.item_eat(hunger_change, replace_with_item, poisontime, poiso
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
end
|
end
|
||||||
local name = user:get_player_name()
|
local name = user:get_player_name()
|
||||||
local hp = user:get_hp()
|
--local hp = user:get_hp()
|
||||||
|
|
||||||
local pos = user:get_pos()
|
local pos = user:get_pos()
|
||||||
-- player height
|
-- player height
|
||||||
|
|
|
@ -65,9 +65,7 @@ end
|
||||||
-- Count number of poisonings a player has at once
|
-- Count number of poisonings a player has at once
|
||||||
mcl_hunger.poison_hunger = {} -- food poisoning, increasing hunger
|
mcl_hunger.poison_hunger = {} -- food poisoning, increasing hunger
|
||||||
|
|
||||||
-- HUD item ids
|
-- HUD
|
||||||
local hunger_hud = {}
|
|
||||||
|
|
||||||
local function init_hud(player)
|
local function init_hud(player)
|
||||||
hb.init_hudbar(player, "hunger", mcl_hunger.get_hunger(player))
|
hb.init_hudbar(player, "hunger", mcl_hunger.get_hunger(player))
|
||||||
if mcl_hunger.debug then
|
if mcl_hunger.debug then
|
||||||
|
|
|
@ -63,7 +63,6 @@ end
|
||||||
if has_mcl_skins == true then
|
if has_mcl_skins == true then
|
||||||
--change the player's hand to their skin
|
--change the player's hand to their skin
|
||||||
mcl_skins.register_on_set_skin(function(player, skin)
|
mcl_skins.register_on_set_skin(function(player, skin)
|
||||||
local name = player:get_player_name()
|
|
||||||
local meta = mcl_skins.meta[skin]
|
local meta = mcl_skins.meta[skin]
|
||||||
if meta.gender == "female" then
|
if meta.gender == "female" then
|
||||||
player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin.."_female")
|
player:get_inventory():set_stack("hand", 1, "mcl_meshhand:"..skin.."_female")
|
||||||
|
|
|
@ -9,7 +9,7 @@ local animation_blend = 0
|
||||||
local function get_mouse_button(player)
|
local function get_mouse_button(player)
|
||||||
local controls = player:get_player_control()
|
local controls = player:get_player_control()
|
||||||
local get_wielded_item_name = player:get_wielded_item():get_name()
|
local get_wielded_item_name = player:get_wielded_item():get_name()
|
||||||
if controls.RMB and not string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") or controls.LMB then
|
if controls.RMB and not string.find(get_wielded_item_name, "mcl_bows:bow") or controls.LMB then
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
return false
|
return false
|
||||||
|
@ -110,7 +110,7 @@ function mcl_player.get_player_formspec_model(player, x, y, w, h, fsname)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local model = player_model[name]
|
local model = player_model[name]
|
||||||
local anim = models[model].animations[player_anim[name]]
|
local anim = models[model].animations[player_anim[name]]
|
||||||
return "model[" .. x .. "," .. y .. ";" .. w .. "," .. h .. ";" .. fsname .. ";" .. model .. ";" .. table.concat(player_textures[name], ",") .. ";0," .. 180 .. ";false;false;" .. anim.x .. "," .. anim.y .. "]"
|
return "model["..x..","..y..";"..w..","..h..";"..fsname..";"..model..";"..table.concat(player_textures[name], ",")..";0,".. 180 ..";false;false;"..anim.x..","..anim.y.."]"
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_player.player_set_animation(player, anim_name, speed)
|
function mcl_player.player_set_animation(player, anim_name, speed)
|
||||||
|
@ -179,7 +179,10 @@ minetest.register_globalstep(function(dtime)
|
||||||
-- Apply animations based on what the player is doing
|
-- Apply animations based on what the player is doing
|
||||||
if player:get_hp() == 0 then
|
if player:get_hp() == 0 then
|
||||||
player_set_animation(player, "die")
|
player_set_animation(player, "die")
|
||||||
elseif walking and velocity.x > 0.35 or walking and velocity.x < -0.35 or walking and velocity.z > 0.35 or walking and velocity.z < -0.35 then
|
elseif walking and velocity.x > 0.35
|
||||||
|
or walking and velocity.x < -0.35
|
||||||
|
or walking and velocity.z > 0.35
|
||||||
|
or walking and velocity.z < -0.35 then
|
||||||
if player_sneak[name] ~= controls.sneak then
|
if player_sneak[name] ~= controls.sneak then
|
||||||
player_anim[name] = nil
|
player_anim[name] = nil
|
||||||
player_sneak[name] = controls.sneak
|
player_sneak[name] = controls.sneak
|
||||||
|
|
|
@ -198,7 +198,6 @@ minetest.register_chatcommand("setskin", {
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local skin
|
|
||||||
local ok = mcl_skins.set_player_skin(player, skin_id)
|
local ok = mcl_skins.set_player_skin(player, skin_id)
|
||||||
if not ok then
|
if not ok then
|
||||||
return false, S("Invalid skin number! Valid numbers: 0 to @1", mcl_skins.skin_count)
|
return false, S("Invalid skin number! Valid numbers: 0 to @1", mcl_skins.skin_count)
|
||||||
|
|
|
@ -53,7 +53,10 @@ local function setSprinting(playerName, sprinting) --Sets the state of a player
|
||||||
local controls = player:get_player_control()
|
local controls = player:get_player_control()
|
||||||
if players[playerName] then
|
if players[playerName] then
|
||||||
players[playerName].sprinting = sprinting
|
players[playerName].sprinting = sprinting
|
||||||
if sprinting == true or controls.RMB and string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and player:get_wielded_item():get_name() ~= "mcl_bows:bow" then
|
if sprinting == true
|
||||||
|
or controls.RMB
|
||||||
|
and string.find(player:get_wielded_item():get_name(), "mcl_bows:bow")
|
||||||
|
and player:get_wielded_item():get_name() ~= "mcl_bows:bow" then
|
||||||
if sprinting == true then
|
if sprinting == true then
|
||||||
players[playerName].fov = math.min(players[playerName].fov + 0.05, 1.2)
|
players[playerName].fov = math.min(players[playerName].fov + 0.05, 1.2)
|
||||||
players[playerName].fade_time = .15
|
players[playerName].fade_time = .15
|
||||||
|
@ -65,7 +68,10 @@ local function setSprinting(playerName, sprinting) --Sets the state of a player
|
||||||
if sprinting == true then
|
if sprinting == true then
|
||||||
playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED)
|
playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED)
|
||||||
end
|
end
|
||||||
elseif sprinting == false and player:get_wielded_item():get_name() ~= "mcl_bows:bow_0" and player:get_wielded_item():get_name() ~= "mcl_bows:bow_1" and player:get_wielded_item():get_name() ~= "mcl_bows:bow_2" then
|
elseif sprinting == false
|
||||||
|
and player:get_wielded_item():get_name() ~= "mcl_bows:bow_0"
|
||||||
|
and player:get_wielded_item():get_name() ~= "mcl_bows:bow_1"
|
||||||
|
and player:get_wielded_item():get_name() ~= "mcl_bows:bow_2" then
|
||||||
players[playerName].fov = math.max(players[playerName].fov - 0.05, 1.0)
|
players[playerName].fov = math.max(players[playerName].fov - 0.05, 1.0)
|
||||||
player:set_fov(players[playerName].fov, true, 0.15)
|
player:set_fov(players[playerName].fov, true, 0.15)
|
||||||
if sprinting == false then
|
if sprinting == false then
|
||||||
|
@ -186,7 +192,8 @@ minetest.register_globalstep(function(dtime)
|
||||||
if players[playerName]["shouldSprint"] == true then --Stopped
|
if players[playerName]["shouldSprint"] == true then --Stopped
|
||||||
local sprinting
|
local sprinting
|
||||||
-- Prevent sprinting if hungry or sleeping
|
-- Prevent sprinting if hungry or sleeping
|
||||||
if (mcl_hunger.active and mcl_hunger.get_hunger(player) <= 6) or (player:get_meta():get_string("mcl_beds:sleeping") == "true") then
|
if (mcl_hunger.active and mcl_hunger.get_hunger(player) <= 6)
|
||||||
|
or (player:get_meta():get_string("mcl_beds:sleeping") == "true") then
|
||||||
sprinting = false
|
sprinting = false
|
||||||
cancelClientSprinting(playerName)
|
cancelClientSprinting(playerName)
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
local time = 0
|
|
||||||
local update_time = tonumber(minetest.settings:get("wieldview_update_time"))
|
local update_time = tonumber(minetest.settings:get("wieldview_update_time"))
|
||||||
if not update_time then
|
if not update_time then
|
||||||
update_time = 2
|
update_time = 2
|
||||||
|
@ -69,14 +68,14 @@ end
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
wieldview.wielded_item[name] = ""
|
wieldview.wielded_item[name] = ""
|
||||||
minetest.after(0, function(player)
|
minetest.after(0, function(target)
|
||||||
-- if the player left :is_player() will return nil
|
-- if the player left :is_player() will return nil
|
||||||
if not player:is_player() then
|
if not target:is_player() then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
wieldview:update_wielded_item(player)
|
wieldview:update_wielded_item(target)
|
||||||
local itementity = minetest.add_entity(player:get_pos(), "wieldview:wieldnode")
|
local itementity = minetest.add_entity(target:get_pos(), "wieldview:wieldnode")
|
||||||
itementity:set_attach(player, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 0, 45))
|
itementity:set_attach(target, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 0, 45))
|
||||||
itementity:get_luaentity().wielder = name
|
itementity:get_luaentity().wielder = name
|
||||||
end, player)
|
end, player)
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Reference in a new issue