item_eat particles, don't put lava on the server, Hunger small fixes

master
MoNTE48 2019-05-20 00:38:34 +02:00 committed by Maksim
parent 59f8ef3376
commit b89936fef9
21 changed files with 78 additions and 101 deletions

View File

@ -501,6 +501,28 @@ end
function core.item_eat(hp_change, replace_with_item)
return function(itemstack, user, pointed_thing) -- closure
if user then
local pos = user:getpos()
pos.y = pos.y + 1.5
local itemname = itemstack:get_name()
local texture = minetest.registered_items[itemname].inventory_image
minetest.add_item(pos, drop)
minetest.add_particlespawner({
amount = 10,
time = 0.1,
minpos = {x = pos.x, y = pos.y, z = pos.z},
maxpos = {x = pos.x, y = pos.y, z = pos.z},
minvel = {x = -1, y = 1, z = -1},
maxvel = {x = 1, y = 2, z = 1},
minacc = {x = 0, y = -5, z = 0},
maxacc = {x = 0, y = -9, z = 0},
minexptime = 1,
maxexptime = 1,
minsize = 1,
maxsize = 2,
collisiondetection = true,
vertical = false,
texture = texture,
})
return core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
end
end

View File

@ -237,11 +237,11 @@ function execute_actions(dtime)
local nactions = mesecon.to_update
mesecon.to_update = {}
for _,i in ipairs(nactions) do
node = minetest.get_node(i.pos)
local node = minetest.get_node(i.pos)
if node.name=="ignore" then
add_action(i.pos, i.action, i.rname)
else
effector = mesecon:get_effector(node.name)
local effector = mesecon:get_effector(node.name)
if i.action == "on" then
if effector and effector.action_on then
effector.action_on(i.pos, node, i.rname)

View File

@ -85,7 +85,7 @@ function mesecon:mvps_push(pos, dir, maximum) -- pos: pos of mvps; dir: directio
-- add nodes
for _, n in ipairs(nodes) do
np = mesecon:addPosRule(n.pos, dir)
local np = mesecon:addPosRule(n.pos, dir)
minetest.add_node(np, n.node)
minetest.get_meta(np):from_table(n.meta)
end
@ -104,8 +104,8 @@ function mesecon:mvps_push(pos, dir, maximum) -- pos: pos of mvps; dir: directio
end
function mesecon:mvps_pull_single(pos, dir) -- pos: pos of mvps; direction: direction of pull (matches push direction for sticky pistons)
np = mesecon:addPosRule(pos, dir)
nn = minetest.get_node(np)
local np = mesecon:addPosRule(pos, dir)
local nn = minetest.get_node(np)
if ((not minetest.registered_nodes[nn.name]) --unregistered node
or minetest.registered_nodes[nn.name].liquidtype == "none") --non-liquid node

View File

@ -55,12 +55,12 @@ piston_get_direction = function (dir, node)
end
local piston_remove_pusher = function (pos, node)
pistonspec = minetest.registered_nodes[node.name].mesecons_piston
local pistonspec = minetest.registered_nodes[node.name].mesecons_piston
if pushername == pistonspec.pusher then --make sure there actually is a pusher (for compatibility reasons mainly)
return
end
dir = piston_get_direction(pistonspec.dir, node)
local dir = piston_get_direction(pistonspec.dir, node)
local pusherpos = mesecon:addPosRule(pos, dir)
local pushername = minetest.get_node(pusherpos).name
@ -98,9 +98,9 @@ local piston_off = function (pos, node)
piston_remove_pusher (pos, node)
if pistonspec.sticky then
dir = piston_get_direction(pistonspec.dir, node)
pullpos = mesecon:addPosRule(pos, dir)
stack = mesecon:mvps_pull_single(pullpos, dir)
local dir = piston_get_direction(pistonspec.dir, node)
local pullpos = mesecon:addPosRule(pos, dir)
local stack = mesecon:mvps_pull_single(pullpos, dir)
mesecon:mvps_process_stack(pos, dir, stack)
end
end

View File

@ -31,7 +31,7 @@ minetest.register_node("default:chest", {
tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_side.png",
"default_chest_side.png", "default_chest_side.png", "default_chest_front.png"},
paramtype2 = "facedir",
groups = {choppy = 2, oddly_breakable_by_hand = 2, decorative = 1},
groups = {choppy = 2, oddly_breakable_by_hand = 2},
legacy_facedir_simple = true,
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
@ -49,7 +49,7 @@ minetest.register_node("default:chest", {
"list[current_name;main;0.01,3.39;9,3;]"..
"list[current_player;main;0.01,7.4;9,3;9]"..
"list[current_player;main;0,10.61;9,1;]")
meta:set_string("infotext", "Large Chest 1")
meta:set_string("infotext", "Large Chest")
minetest.swap_node(p, {name="default:chest_left", param2=param2})
local m = minetest.get_meta(p)
m:set_string("formspec",
@ -61,7 +61,7 @@ minetest.register_node("default:chest", {
"list[current_name;main;0.01,0.4;9,3;]"..
"list[current_player;main;0.01,7.4;9,3;9]"..
"list[current_player;main;0,10.61;9,1;]")
m:set_string("infotext", "Large Chest 2")
m:set_string("infotext", "Large Chest")
elseif minetest.get_node(get_chest_neighborpos(pos, param2, "left")).name == "default:chest" then
minetest.set_node(pos, {name="default:chest_left",param2=param2})
local p = get_chest_neighborpos(pos, param2, "left")
@ -74,7 +74,7 @@ minetest.register_node("default:chest", {
"list[current_name;main;0.01,0.4;9,3;]"..
"list[current_player;main;0.01,7.4;9,3;9]"..
"list[current_player;main;0,10.61;9,1;]")
meta:set_string("infotext", "Large Chest 3")
meta:set_string("infotext", "Large Chest")
minetest.swap_node(p, {name="default:chest_right", param2=param2})
local m = minetest.get_meta(p)
m:set_string("formspec",
@ -86,7 +86,7 @@ minetest.register_node("default:chest", {
"list[current_name;main;0.01,3.39;9,3;]"..
"list[current_player;main;0.01,7.4;9,3;9]"..
"list[current_player;main;0,10.61;9,1;]")
m:set_string("infotext", "Large Chest 4")
m:set_string("infotext", "Large Chest")
else
meta:set_string("formspec",
"size[9,8.75]"..

View File

@ -1116,6 +1116,13 @@ minetest.register_node("default:lava_source", {
damage_per_second = 4 * 2,
post_effect_color = {a = 191, r = 255, g = 64, b = 0},
groups = {lava = 3, liquid = 2, igniter = 1, not_in_creative_inventory = 1},
on_construct = function(pos)
if minetest.is_singleplayer() ~= true then
if pos.y >= 1 then
minetest.env:remove_node(pos)
end
end
end,
})
minetest.register_node("default:lava_flowing", {

View File

@ -96,7 +96,7 @@ minetest.register_node("fences:fence_wood", {
tiles = {"default_wood.png"},
inventory_image = "fences_fence.png",
paramtype = "light",
groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, fences=1, decorative = 1},
groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, fences = 1},
drop = 'fences:fence_wood',
sunlight_propagates = true,
drawtype = "nodebox",
@ -666,7 +666,7 @@ minetest.register_node("fences:fencegate", {
}
},
on_construct = function(pos)
me2 = minetest.get_node(pos)
local me2 = minetest.get_node(pos)
meta2 = minetest.get_meta(pos)
meta2:set_int("state", 0)
state2 = 0

View File

@ -1,4 +1,3 @@
-- global values
hud.registered_items = {}
hud.damage_events = {}
@ -62,7 +61,7 @@ function hud.register(name, def)
end
end
end
-- no error so far, return success
return true
end
@ -107,7 +106,7 @@ function hud.swap_statbar(player, item1, item2)
player:hud_change(bg1.id, "offset", def2.offset)
if pos_swap == true then
player:hud_change(bg1.id, "position", def2.position)
end
end
end
if bg2 ~= nil and bg2.id then
player:hud_change(bg2.id, "offset", def1.offset)
@ -128,7 +127,7 @@ function hud.change_item(player, name, def)
local i_name = player:get_player_name().."_"..name
local elem = hud_id[i_name]
if not elem then
throw_error("Given HUD element " .. dump(name) .. " does not exist".." hääää")
throw_error("Given HUD element " .. dump(name) .. " does not exist")
return false
end
@ -161,7 +160,7 @@ function hud.change_item(player, name, def)
player:hud_change(bg.id, "number", def.max)
bg.max = def.max
bg.number = def.max
end
end
end
end
end
@ -239,10 +238,10 @@ minetest.register_on_joinplayer(function(player)
end)
function hud.player_event(player, event)
if not player then return end -- ADDED
if not player then return end
--needed for first update called by on_join
minetest.after(0, function(player) -- ADDED (player)
minetest.after(0.1, function(player)
if event == "health_changed" then
for _,v in pairs(hud.damage_events) do
if v.func then
@ -262,7 +261,7 @@ function hud.player_event(player, event)
if event == "hud_changed" then--called when flags changed
end
end, player) -- ADDED , player)
end, player)
end
core.register_playerevent(hud.player_event)
core.register_playerevent(hud.player_event)

View File

@ -1,17 +1,10 @@
HUD_IW_MAX = 8
HUD_IW_TICK = 0.4
if minetest.is_singleplayer() == true then
HUD_IW_TICK = 0.2
end
HUD_SB_SIZE = {x = 24, y = 24}
HUD_HEALTH_POS = {x = 0.5,y = 1}
HUD_HEALTH_POS = {x = 0.5, y = 1}
HUD_HEALTH_OFFSET = {x = -248, y = -93}
HUD_AIR_POS = {x = 0.5, y = 1}
HUD_AIR_OFFSET = {x = 6, y = -93}
HUD_AIR_OFFSET = {x = 6, y = -124}
HUD_HUNGER_POS = {x = 0.5, y = 1}
HUD_HUNGER_OFFSET = {x = 6, y = -124}
HUD_HUNGER_OFFSET = {x = 6, y = -93}
HUD_ARMOR_POS = {x = 0.5, y = 1}
HUD_ARMOR_OFFSET = {x = -248, y = -124}
@ -32,12 +25,6 @@ local damage_enabled = minetest.settings:get_bool("enable_damage")
hud.show_hunger = minetest.get_modpath("hunger") ~= nil
hud.show_armor = minetest.get_modpath("3d_armor") ~= nil
-- check if some settings are invalid
local enable_hunger = minetest.settings:get_bool("hud_hunger_enable")
if (enable_hunger == true) and not hud.show_hunger then
hud.notify_hunger(5)
end
if damage_enabled ~= true then
hud.show_armor = false
return
@ -75,7 +62,7 @@ hud.register("air", {
{
type = "breath",
func = function(player)
if not player then return end -- ADDED
if not player then return end
local air = player:get_breath() or 11
if air > 10 then
air = 0
@ -104,9 +91,9 @@ hud.register("hunger", {
position = HUD_HUNGER_POS,
size = HUD_SB_SIZE,
text = "hud_hunger_fg.png",
number = 0,
number = 20,
alignment = {x = -1, y = -1},
offset = HUD_HUNGER_OFFSET,
background = "hud_hunger_bg.png",
max = 0,
max = 20,
})

View File

@ -1,8 +1,7 @@
hud = {}
local path = minetest.get_modpath("hud")
dofile(path .. "/api.lua")
dofile(path .. "/builtin.lua")
dofile(path .. "/legacy.lua")
dofile(path .. "/legacy.lua")

View File

@ -33,41 +33,3 @@ if hud.show_armor then
hud.change_item(player, "armor", {number = armor_lvl})
end
end
function hud.notify_hunger(delay, use)
local txt_part = "enable"
if use then
txt_part = "use"
end
minetest.after(delay, function()
minetest.chat_send_all("#Better HUD: You can't " .. txt_part .. " hunger without the \"hunger\" mod")
minetest.chat_send_all(" Enable it or download it from \"https://github.com/BlockMen/hunger\"")
end)
end
-- Hunger related functions
if not hud.show_hunger then
function hud.set_hunger()
hud.notify_hunger(1, true)
end
function hud.get_hunger()
hud.notify_hunger(1, true)
end
function hud.item_eat(hp_change, replace_with_item)
return function(itemstack, user, pointed_thing)
hud.notify_hunger(1, true)
local func = minetest.item_eat(hp_change, replace_with_item)
return func(itemstack, user, pointed_thing)
end
end
function hud.save_hunger()
hud.notify_hunger(1, true)
end
function hud.load_hunger(player)
hud.notify_hunger(1, true)
end
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 B

View File

@ -1,4 +1,3 @@
local register_food = hunger.register_food
register_food("default:apple", 2)

View File

@ -1,4 +1,3 @@
-- read/write
function hunger.read(player)
local inv = player:get_inventory()
@ -259,7 +258,7 @@ function hunger.item_eat(hunger_change, replace_with_item, poisen, heal, sound)
-- eating sound
sound = sound or "hunger_eat"
minetest.sound_play(sound, {to_player = name, gain = 0.7})
minetest.sound_play(sound, {to_player = name, gain = 0.5})
if replace_with_item then
if itemstack:is_empty() then

View File

@ -6,9 +6,9 @@ HUNGER_TICK = 600 -- time in seconds after that 1 hunger point is taken
HUNGER_HEALTH_TICK = 4 -- time in seconds after player gets healed/damaged
HUNGER_MOVE_TICK = 0.5 -- time in seconds after the movement is checked
HUNGER_EXHAUST_DIG = 3 -- exhaustion increased this value after digged node
HUNGER_EXHAUST_DIG = 2 -- exhaustion increased this value after digged node
HUNGER_EXHAUST_PLACE = 1 -- exhaustion increased this value after placed
HUNGER_EXHAUST_MOVE = 1.5 -- exhaustion increased this value if player movement detected
HUNGER_EXHAUST_MOVE = 2 -- exhaustion increased this value if player movement detected
HUNGER_EXHAUST_LVL = 160 -- at what exhaustion player saturation gets lowered
HUNGER_HEAL = 1 -- number of HP player gets healed after HUNGER_HEALTH_TICK
@ -47,7 +47,7 @@ if minetest.settings:get_bool("enable_damage") then
lvl = 20
end
hud.swap_statbar(player, "hunger", "air")
-- hud.swap_statbar(player, "hunger", "air")
hud.change_item(player, "hunger", {number = lvl, max = 20})
end)
end)

View File

@ -99,7 +99,7 @@ minetest.register_node("itemframes:frame",{
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
groups = { choppy = 2,dig_immediate=2, decorative = 1 },
groups = {choppy = 2, dig_immediate = 2},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
after_place_node = function(pos, placer, itemstack)

View File

@ -25,7 +25,7 @@ mobs:register_mob("mobs_monster:skeleton", {
armor = 100,
knock_back = 1,
light_damage = 1,
lava_damage = 10,
lava_damage = 5,
damage = 1,
reach = 2,
attack_type = "dogfight",

View File

@ -589,7 +589,7 @@ function mob_class:do_stay_near()
z = target.z - pos.z
}
yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate
local yaw = (atan(vec.z / vec.x) + pi / 2) - self.rotate
if target.x > pos.x then
yaw = yaw + pi

View File

@ -98,7 +98,7 @@ end)
potions.register_potion("Regen", "purple", 35,
function(itemstack, user, pointed_thing)
regen_I = true
local regen_I = true
minetest.chat_send_player(user:get_player_name(), "Regeneration I for 35 seconds")
if regen_II == true then
local regen
@ -116,12 +116,12 @@ function(itemstack, user, pointed_thing)
end,
function(itemstack, user, pointed_thing)
regen_I = false
local regen_I = false
end)
potions.register_potion("Regen II", "purple", 30,
function(itemstack, user, pointed_thing)
regen_II = true
local regen_II = true
minetest.chat_send_player(user:get_player_name(), "Regeneration II for 30 seconds")
if regen_II == true then
local regen
@ -139,7 +139,7 @@ function(itemstack, user, pointed_thing)
end,
function(itemstack, user, pointed_thing)
regen_II = false
local regen_II = false
end)
potions.register_potion("Harming", "red", 1,

View File

@ -80,8 +80,9 @@ function pane(node, desc, dropitem, recipeitem, color)
tiles = {"xpanes_top_"..node..""..color..".png", "xpanes_top_"..node..""..color..".png", texture},
paramtype = "light",
use_texture_alpha = true,
groups = {snappy = 2, cracky=3, oddly_breakable_by_hand = 3, decorative = 1},
groups = {snappy = 2, crack = 3, oddly_breakable_by_hand = 3},
drop = dropitem,
sounds = default.node_sound_glass_defaults(),
node_box = {
type = "fixed",
fixed = take
@ -102,8 +103,10 @@ function pane(node, desc, dropitem, recipeitem, color)
wield_image = "xpanes_pane_"..node..""..color..".png",
node_placement_prediction = "",
on_construct = update_pane,
groups = {snappy = 2, crack = 3, oddly_breakable_by_hand = 3},
drop = "",
groups = {decorative = 1}
sounds = default.node_sound_glass_defaults()
})
minetest.register_on_placenode(update_nearby)
@ -137,4 +140,4 @@ pane("glass", "Glass Pane Purple", "", "default:glass_purple", "_purple")
-- Iron
pane("iron", "Iron Fence", "xpanes:pane_iron", "default:steel_ingot", "")
pane("iron", "Iron Fence", "xpanes:pane_iron", "default:steel_ingot", "")