various things, protect: add beerchat support

This commit is contained in:
waxtatect 2023-01-28 19:18:50 +01:00
parent dfa3498650
commit 419ed8df07
6 changed files with 52 additions and 43 deletions

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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