Add torch wield light (disabled by default)
Thanks to sofar, who wrote this in his fork of BlockMen's torches mod. Everything is credited to him. (But it's GPLv3+, not LGPLv2.1+)master
parent
137b9df403
commit
e27eaabaa4
|
@ -78,6 +78,10 @@ dofile(envpath .. "leafdecay.lua")
|
||||||
dofile(envpath .. "no_sneak_glitch.lua")
|
dofile(envpath .. "no_sneak_glitch.lua")
|
||||||
dofile(envpath .. "sethome.lua")
|
dofile(envpath .. "sethome.lua")
|
||||||
dofile(envpath .. "sounds.lua")
|
dofile(envpath .. "sounds.lua")
|
||||||
|
-- torch wield light (optional)
|
||||||
|
if core.is_yes(core.setting_get("enable_torches_wieldlight") or false) then
|
||||||
|
dofile(envpath .. "torch_wield_light.lua")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
--[[
|
||||||
|
mods/default/lua/environment/torch_wield_light.lua
|
||||||
|
==================================================
|
||||||
|
The code in this file is from sofar's torches mod (licensed under LGPLv2.1+).
|
||||||
|
See https://github.com/minetest-mods/torches for details.
|
||||||
|
|
||||||
|
Copyright (C) 2016 sofar <sofar@foo-projects.org>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
]]
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Torch wield light
|
||||||
|
--
|
||||||
|
|
||||||
|
local torchlight_update_interval = core.setting_get("torches_wieldlight_interval") or 0.25
|
||||||
|
|
||||||
|
-- state tables
|
||||||
|
local torchlight = {}
|
||||||
|
local playerlist = {}
|
||||||
|
|
||||||
|
local function wields_torch(player)
|
||||||
|
if not player then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
local item = player:get_wielded_item()
|
||||||
|
if not item then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return item:get_name() == "default:torch"
|
||||||
|
end
|
||||||
|
|
||||||
|
local function wielded_torch(name)
|
||||||
|
if not torchlight[name] then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
local function is_torchlight(pos)
|
||||||
|
local node = core.get_node(pos)
|
||||||
|
return node.name == "default:torchlight"
|
||||||
|
end
|
||||||
|
|
||||||
|
local function remove_torchlight(pos)
|
||||||
|
if is_torchlight(pos) then
|
||||||
|
core.swap_node(pos, {name = "air"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function place_torchlight(pos)
|
||||||
|
local name = core.get_node(pos).name
|
||||||
|
if name == "default:torchlight" then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
if (core.get_node_light(pos) or 0) > 11 then
|
||||||
|
-- no reason to place torch here, so save a bunch
|
||||||
|
-- of node updates this way
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
if name == "air" then
|
||||||
|
core.swap_node(pos, {name = "default:torchlight"})
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_torchpos(player)
|
||||||
|
return vector.add({x = 0, y = 1, z = 0}, vector.round(player:getpos()))
|
||||||
|
end
|
||||||
|
|
||||||
|
core.register_on_joinplayer(function(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
playerlist[name] = true
|
||||||
|
end)
|
||||||
|
|
||||||
|
core.register_on_leaveplayer(function(player)
|
||||||
|
local name = player:get_player_name()
|
||||||
|
-- don't look at wielded() here, it's likely invalid
|
||||||
|
if torchlight[name] then
|
||||||
|
remove_torchlight(torchlight[name])
|
||||||
|
torchlight[name] = nil
|
||||||
|
end
|
||||||
|
playerlist[name] = nil
|
||||||
|
end)
|
||||||
|
|
||||||
|
core.register_on_shutdown(function()
|
||||||
|
for i, _ in pairs(torchlight) do
|
||||||
|
remove_torchlight(torchlight[i])
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
local function update_torchlight(dtime)
|
||||||
|
for name, _ in pairs(playerlist) do
|
||||||
|
local player = core.get_player_by_name(name)
|
||||||
|
local wielded = wielded_torch(name)
|
||||||
|
local wields = wields_torch(player)
|
||||||
|
|
||||||
|
if not wielded and wields then
|
||||||
|
local torchpos = get_torchpos(player)
|
||||||
|
if place_torchlight(torchpos) then
|
||||||
|
torchlight[name] = vector.new(torchpos)
|
||||||
|
end
|
||||||
|
elseif wielded and not wields then
|
||||||
|
remove_torchlight(torchlight[name])
|
||||||
|
torchlight[name] = nil
|
||||||
|
elseif wielded and wields then
|
||||||
|
local torchpos = get_torchpos(player)
|
||||||
|
if not vector.equals(torchpos, torchlight[name]) or
|
||||||
|
not is_torchlight(torchpos) then
|
||||||
|
if place_torchlight(torchpos) then
|
||||||
|
remove_torchlight(torchlight[name])
|
||||||
|
torchlight[name] = vector.new(torchpos)
|
||||||
|
elseif vector.distance(torchlight[name], torchpos) > 2 then
|
||||||
|
-- player went into some node
|
||||||
|
remove_torchlight(torchlight[name])
|
||||||
|
torchlight[name] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
core.after(torchlight_update_interval, update_torchlight)
|
||||||
|
end
|
||||||
|
|
||||||
|
core.after(torchlight_update_interval, update_torchlight)
|
|
@ -110,6 +110,19 @@ minetest.register_abm({
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- for torch wield light
|
||||||
|
core.register_node("default:torchlight", {
|
||||||
|
drawtype = "airlike",
|
||||||
|
groups = {not_in_creative_inventory = 1},
|
||||||
|
walkable = false,
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
light_source = 11,
|
||||||
|
pointable = false,
|
||||||
|
buildable_to = true,
|
||||||
|
drops = {},
|
||||||
|
})
|
||||||
|
|
||||||
-- Crafting
|
-- Crafting
|
||||||
|
|
||||||
core.register_craft({
|
core.register_craft({
|
||||||
|
|
|
@ -37,3 +37,12 @@ enable_item_drop (Drop items of digged nodes) bool true
|
||||||
|
|
||||||
# General difficulty of the game (WIP: Not everything is using this setting already!)
|
# General difficulty of the game (WIP: Not everything is using this setting already!)
|
||||||
difficulty (General difficulty) enum normal easy,normal,hard
|
difficulty (General difficulty) enum normal easy,normal,hard
|
||||||
|
|
||||||
|
[Beta Features]
|
||||||
|
|
||||||
|
# This lights you up if you hold a torch in your hand.
|
||||||
|
# This will make your server slower.
|
||||||
|
enable_torches_wieldlight (Enable torches wield light) bool false
|
||||||
|
|
||||||
|
# This is the interval for updating the wield light of torches.
|
||||||
|
torches_wieldlight_interval (Wield light interval) float 2.5
|
||||||
|
|
Loading…
Reference in New Issue