various things, protect: add beerchat support
This commit is contained in:
parent
dfa3498650
commit
419ed8df07
@ -23,5 +23,5 @@ files["machines_configuration.lua"] = {max_line_length = 190}
|
||||
files["mark.lua"] = {globals = {"machines"}}
|
||||
files["mesecon_adapter.lua"] = {read_globals = {"mesecon"}}
|
||||
files["mover.lua"] = {max_line_length = 290, read_globals = {"bucket", "nodeupdate"}}
|
||||
files["protect.lua"] = {globals = {"minetest.is_protected"}}
|
||||
files["protect.lua"] = {globals = {"minetest.is_protected"}, read_globals = {"beerchat"}}
|
||||
files["technic_power.lua"] = {max_line_length = 140}
|
6
init.lua
6
init.lua
@ -46,7 +46,7 @@ basic_machines = {
|
||||
generator_upgrade = 0, -- upgrade available in addition to the current limit (50)
|
||||
-- space
|
||||
space_start_eff = 1500, -- space efficiency height
|
||||
space_start = 1100, -- space height
|
||||
space_start = 1100, -- space height, set to false to disable
|
||||
space_textures = "", -- skybox space textures replacement with up to 6 texture names separated by commas
|
||||
exclusion_height = 6666, -- above, without "include" priv, player is teleported to a random location
|
||||
space_effects = false, -- enable damage mechanism
|
||||
@ -155,7 +155,9 @@ dofile(MP .. "control_doors.lua") -- if you want open/close doors/trapdoors wi
|
||||
-- also walk through trapdoors, steel doors/trapdoors are made impervious to dig through,
|
||||
-- removal by repeated punches
|
||||
dofile(MP .. "control_lights.lua") -- adds ability to toggle light for other light blocks
|
||||
dofile(MP .. "space.lua") -- change global physics
|
||||
if basic_machines.settings.space_start then
|
||||
dofile(MP .. "space.lua") -- change global physics (skybox, gravity, damage mechanism...)
|
||||
end
|
||||
|
||||
local S = basic_machines.S
|
||||
|
||||
|
2
mod.conf
2
mod.conf
@ -1,4 +1,4 @@
|
||||
name = basic_machines
|
||||
description = lightweight automation mod
|
||||
depends = default
|
||||
optional_depends = basic_protect, boneworld, baldcypress, bamboo, birch, bucket, cacaotree, cherrytree, chestnuttree, clementinetree, ebony, gravelsieve, hollytree, i3, jacaranda, larch, lemontree, mahogany, maple, oak, palm, plumtree, pomegranate, sequoia, willow, darkage, doors, es, extra_doors, farming, flowers, gloopblocks, mesecons, moreblocks, moreores, player_monoids, signs_lib, unifieddyes, unified_inventory, x_farming, xdecor, xpanes
|
||||
optional_depends = basic_protect, beerchat, boneworld, baldcypress, bamboo, birch, bucket, cacaotree, cherrytree, chestnuttree, clementinetree, ebony, gravelsieve, hollytree, i3, jacaranda, larch, lemontree, mahogany, maple, oak, palm, plumtree, pomegranate, sequoia, willow, darkage, doors, es, extra_doors, farming, flowers, gloopblocks, mesecons, moreblocks, moreores, player_monoids, signs_lib, unifieddyes, unified_inventory, x_farming, xdecor, xpanes
|
53
mover.lua
53
mover.lua
@ -674,9 +674,10 @@ minetest.register_node("basic_machines:mover", {
|
||||
local fuel = meta:get_float("fuel")
|
||||
|
||||
if upgrade == -1 then
|
||||
node1 = minetest.get_node(pos1); node1_name = node1.name
|
||||
if node1_name == "ignore" then return end -- nothing to move
|
||||
if not object then
|
||||
node1 = minetest.get_node(pos1); node1_name = node1.name
|
||||
if node1_name == "air" or node1_name == "ignore" then return end -- nothing to move
|
||||
if node1_name == "air" then return end -- nothing to move
|
||||
if not inventory then
|
||||
source_chest = mover.chests[node1_name] or false
|
||||
end
|
||||
@ -697,7 +698,7 @@ minetest.register_node("basic_machines:mover", {
|
||||
end
|
||||
else
|
||||
node1 = minetest.get_node(pos1); node1_name = node1.name
|
||||
if node1_name == "air" or node1_name == "ignore" then return end -- nothing to move
|
||||
if not object and node1_name == "air" or node1_name == "ignore" then return end -- nothing to move
|
||||
if inventory then -- taking items from chests/inventory move
|
||||
fuel_cost = mover.hardness[prefer] or 1
|
||||
else
|
||||
@ -787,11 +788,10 @@ minetest.register_node("basic_machines:mover", {
|
||||
end
|
||||
local radius = math.min(vector.distance(pos1, vector_add(pos, {x = x1, y = y1, z = z1})), max_range) -- distance source1-source2
|
||||
local elevator = meta:get_int("elevator"); if elevator == 1 and radius == 0 then radius = 1 end -- for compatibility
|
||||
local teleport_any = false
|
||||
local teleport_any
|
||||
|
||||
if mover.chests[minetest.get_node(pos2).name] and elevator == 0 then -- put objects in target chest
|
||||
local inv = minetest.get_meta(pos2):get_inventory()
|
||||
local mucca
|
||||
local inv, mucca
|
||||
|
||||
for _, obj in ipairs(minetest.get_objects_inside_radius(pos1, radius)) do
|
||||
if not obj:is_player() then
|
||||
@ -802,8 +802,11 @@ minetest.register_node("basic_machines:mover", {
|
||||
if not lua_entity.protected then -- check if mob (mobs_redo) protected
|
||||
-- put item in chest
|
||||
local stack = ItemStack(lua_entity.itemstring)
|
||||
if not stack:is_empty() and inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack); teleport_any = true
|
||||
if not stack:is_empty() then
|
||||
inv = inv or minetest.get_meta(pos2):get_inventory()
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack); teleport_any = true
|
||||
end
|
||||
end
|
||||
obj:remove()
|
||||
end
|
||||
@ -814,22 +817,25 @@ minetest.register_node("basic_machines:mover", {
|
||||
((lua_entity.nametag and lua_entity.nametag ~= "") and lua_entity.nametag or "Cow")
|
||||
meta:set_string("infotext", S("@1 already milked!", mucca:gsub(", Cow", "") ~= "" and
|
||||
mucca:sub(3):gsub("Cow", S("Cow")) or S("Cows")))
|
||||
elseif inv:contains_item("main", "bucket:bucket_empty") then
|
||||
inv:remove_item("main", "bucket:bucket_empty")
|
||||
if inv:room_for_item("main", "mobs:bucket_milk") then
|
||||
inv:add_item("main", "mobs:bucket_milk")
|
||||
else
|
||||
minetest.add_item(obj:get_pos(), {name = "mobs:bucket_milk"})
|
||||
else
|
||||
inv = inv or minetest.get_meta(pos2):get_inventory()
|
||||
if inv:contains_item("main", "bucket:bucket_empty") then
|
||||
inv:remove_item("main", "bucket:bucket_empty")
|
||||
if inv:room_for_item("main", "mobs:bucket_milk") then
|
||||
inv:add_item("main", "mobs:bucket_milk")
|
||||
else
|
||||
minetest.add_item(obj:get_pos(), {name = "mobs:bucket_milk"})
|
||||
end
|
||||
lua_entity.gotten = true; teleport_any = true
|
||||
end
|
||||
lua_entity.gotten = true; teleport_any = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
local times, velocityv = tonumber(prefer) or 0, nil
|
||||
else -- move objects to another location
|
||||
local times, velocityv = tonumber(prefer) or 0
|
||||
if times ~= 0 then
|
||||
if times == 99 then
|
||||
velocityv = {x = 0, y = 0, z = 0}
|
||||
@ -842,13 +848,12 @@ minetest.register_node("basic_machines:mover", {
|
||||
end
|
||||
end
|
||||
|
||||
-- move objects to another location
|
||||
for _, obj in ipairs(minetest.get_objects_inside_radius(pos1, radius)) do
|
||||
if obj:is_player() then
|
||||
if not minetest.is_protected(obj:get_pos(), owner) and
|
||||
(prefer == "" or obj:get_player_name() == prefer)
|
||||
then -- move player only from owners land
|
||||
obj:move_to(pos2, false); teleport_any = true
|
||||
obj:set_pos(pos2); teleport_any = true
|
||||
end
|
||||
else
|
||||
local lua_entity = obj:get_luaentity()
|
||||
@ -1087,8 +1092,8 @@ minetest.register_node("basic_machines:mover", {
|
||||
|
||||
for _, pos3 in ipairs(positions) do
|
||||
minetest.set_node(pos3, {name = "air"})
|
||||
check_for_falling(pos3)
|
||||
end
|
||||
check_for_falling(pos1)
|
||||
|
||||
local count, stack_max, stacks = #positions, ItemStack(node1_name):get_stack_max(), {}
|
||||
|
||||
@ -1161,15 +1166,15 @@ minetest.register_node("basic_machines:mover", {
|
||||
for _, item in ipairs(drops.items) do
|
||||
if itemlists_dropped >= max_items then break end
|
||||
if math.random(1, item.rarity or 1) == 1 then
|
||||
local inherit_color, palette_index = item.inherit_color, nil
|
||||
local inherit_color, palette_index = item.inherit_color
|
||||
if inherit_color then
|
||||
palette_index = minetest.strip_param2_color(node1.param2, def.paramtype2)
|
||||
end
|
||||
for _, add_item in ipairs(item.items) do -- pick all items from list
|
||||
for _, drop_item in ipairs(item.items) do -- pick all items from list
|
||||
if inherit_color and palette_index then
|
||||
add_item = itemstring_to_stack(add_item, palette_index)
|
||||
drop_item = itemstring_to_stack(drop_item, palette_index)
|
||||
end
|
||||
inv:add_item("main", add_item)
|
||||
inv:add_item("main", drop_item)
|
||||
end
|
||||
itemlists_dropped = itemlists_dropped + 1
|
||||
end
|
||||
|
10
protect.lua
10
protect.lua
@ -29,7 +29,7 @@ function minetest.is_protected(pos, digger)
|
||||
return is_protected
|
||||
end
|
||||
|
||||
minetest.register_on_chat_message(function(name, message)
|
||||
local function distributor(name, message)
|
||||
local player = minetest.get_player_by_name(name); if not player then return end
|
||||
local pos, r = player:get_pos(), 20
|
||||
local p = {x = round(pos.x / r + 0.5) * r, y = round(pos.y / r + 0.5) * r + 1, z = round(pos.z / r + 0.5) * r}
|
||||
@ -47,4 +47,10 @@ minetest.register_on_chat_message(function(name, message)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
if minetest.global_exists("beerchat") then
|
||||
beerchat.register_on_chat_message(distributor)
|
||||
else
|
||||
minetest.register_on_chat_message(distributor)
|
||||
end
|
22
space.lua
22
space.lua
@ -7,7 +7,7 @@ local use_player_monoids = minetest.global_exists("player_monoids")
|
||||
local use_basic_protect = minetest.global_exists("basic_protect")
|
||||
|
||||
minetest.register_on_punchplayer(function(player, hitter, time_from_last_punch, tool_capabilities, dir, damage)
|
||||
if player:get_pos().y >= space_start then return end
|
||||
if player:get_pos().y > space_start then return end
|
||||
-- bring gravity closer to normal with each punch
|
||||
if player:get_physics_override().gravity < 1 then
|
||||
player:set_physics_override({gravity = 1})
|
||||
@ -34,15 +34,9 @@ local function toggle_visibility(player, b)
|
||||
player:set_stars({visible = b})
|
||||
end
|
||||
|
||||
local function adjust_enviro(player) -- adjust players physics/skybox
|
||||
if not player then return end
|
||||
local pos = player:get_pos()
|
||||
local inspace = 0
|
||||
local physics
|
||||
|
||||
if pos.y > space_start then -- is player in space or not ?
|
||||
inspace = 1
|
||||
physics = {speed = 1, jump = 0.5, gravity = 0.1} -- value set for extreme test space spawn
|
||||
local function adjust_enviro(inspace, player) -- adjust players physics/skybox
|
||||
if inspace == 1 then -- is player in space or not ?
|
||||
local physics = {speed = 1, jump = 0.5, gravity = 0.1} -- value set for extreme test space spawn
|
||||
if use_player_monoids then
|
||||
player_monoids.speed:add_change(player, physics.speed,
|
||||
"basic_machines:physics")
|
||||
@ -58,7 +52,7 @@ local function adjust_enviro(player) -- adjust players physics/skybox
|
||||
player:set_sky({base_color = 0x000000, type = sky["type"], textures = sky["tex"], clouds = false})
|
||||
toggle_visibility(player, false)
|
||||
else
|
||||
physics = {speed = 1, jump = 1, gravity = 1}
|
||||
local physics = {speed = 1, jump = 1, gravity = 1}
|
||||
if use_player_monoids then
|
||||
player_monoids.speed:add_change(player, physics.speed,
|
||||
"basic_machines:physics")
|
||||
@ -101,7 +95,7 @@ minetest.register_globalstep(function(dtime)
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local pos = player:get_pos()
|
||||
local name = player:get_player_name()
|
||||
local inspace = 0
|
||||
local inspace
|
||||
|
||||
if pos.y > space_start then
|
||||
inspace = 1
|
||||
@ -116,11 +110,13 @@ minetest.register_globalstep(function(dtime)
|
||||
minetest.log("action", "Exclusion zone alert: " .. name .. " at " .. pos_to_string(pos))
|
||||
player:set_pos(spawn_pos)
|
||||
end
|
||||
else
|
||||
inspace = 0
|
||||
end
|
||||
|
||||
-- only adjust player environment ONLY if change occurred (earth->space or space->earth!)
|
||||
if inspace ~= space[name] then
|
||||
space[name] = adjust_enviro(player)
|
||||
space[name] = adjust_enviro(inspace, player)
|
||||
end
|
||||
|
||||
if space_effects and inspace == 1 then -- special space code
|
||||
|
Loading…
x
Reference in New Issue
Block a user