1
0
mirror of https://github.com/HybridDog/connected_chests.git synced 2025-06-28 14:26:09 +02:00

7 Commits

Author SHA1 Message Date
044a91fcd5 Do not crash with tenplus1's hopper mod
There are multiple hopper mods and not all of them support the set_extra_container_info function,
so the mod crashes now if it is used together with an incompatible hopper mod.

To prevent the crash, execute the code for hopper compatibility if hopper and hopper.set_extra_container_info exist and not if a mod named hopper is installed.
2024-08-25 09:48:03 +02:00
71a8a57ff1 Fix luacheck linting
luacheck currently fails because of missing globals and exceeding line length.

To fix this, I add vector and hopper to the globals, add more line breaks in the code and remove outdated comments.
2024-08-17 11:05:08 +02:00
12b8325896 Add hopper mod support 2024-08-17 10:22:35 +02:00
0e4ef74b52 Add russian translation 2024-05-22 20:13:25 +02:00
8a46cd1054 Tweak Esperanto translation 2024-05-20 11:04:50 +02:00
afb999dbbd Add Esperanto translation 2023-12-16 12:28:11 +01:00
5a5f472d61 Add translation support
Edit by HybridDog:
The description of the chest should be specfied in the second argument (the table) passed to `connected_chests.register_chest`.
2023-12-16 12:25:14 +01:00
6 changed files with 106 additions and 17 deletions

View File

@ -1,2 +1,2 @@
read_globals = {"minetest", "table", "default", "pipeworks"}
read_globals = {"minetest", "table", "vector", "default", "hopper", "pipeworks"}
globals = {"connected_chests"}

110
init.lua
View File

@ -1,3 +1,6 @@
-- for translation
local S = minetest.get_translator("connected_chests")
-- param_tab maps the x and z offset to a param2 value
local param_tab = {
["-1 0"] = 0,
@ -136,6 +139,8 @@ end
connected_chests = {chestdata = chestdata}
--[[
connected_chests.register_chest(<original_node>, {
description = <string>, -- The name of the connected chest as shown to the
-- player, i.e. the node metadata infotext
get_formspec = function(metatable, pos)
return <formspec_of_big>
end,
@ -156,6 +161,13 @@ function connected_chests.register_chest(fromname, data)
data.left = name_left
data.right = name_right
local description = data.description
if not description then
minetest.log("deprecated",
"Missing connected chest description for " .. fromname)
description = "Big " .. minetest.registered_nodes[fromname].description
end
-- executed when connecting the chest
data.on_connect = function(pu, pa, par, metatable)
minetest.add_node(pu, {name=name_left, param2=par})
@ -164,7 +176,7 @@ function connected_chests.register_chest(fromname, data)
if not data.add_open_chest then
metatable.fields.formspec = data.get_formspec(metatable, pu)
end
metatable.fields.infotext = "Big " .. metatable.fields.infotext
metatable.fields.infotext = description
local meta = minetest.get_meta(pu)
meta:from_table(metatable)
local inv = meta:get_inventory()
@ -215,7 +227,7 @@ function connected_chests.register_chest(fromname, data)
local inside_texture
chest.description = "Big " .. chest.description
chest.description = description
chest.groups = table.copy(chest.groups)
chest.groups.not_in_creative_inventory = 1
chest.legacy_facedir_simple = nil
@ -365,14 +377,6 @@ function connected_chests.register_chest(fromname, data)
end
end
--~ def_opened.tiles[1] = "default_mese.png" -- top, passt
--~ def_opened.tiles[2] = "default_wood.png" -- bottom
--~ def_opened.tiles[3] = "default_stone.png" -- right and left side or so
--~ def_opened.tiles[4] = "default_obsidian.png" -- back side
--~ def_opened.tiles[5] = "default_cobble.png" -- front side
--~ def_opened.tiles[6] = "default_leaves.png" -- inside
-- fix right side, somehow
def_opened.tiles[4] = def_opened.tiles[3]
def_opened.tiles[4].name = def_opened.tiles[4].name .. "^[transformFX"
@ -515,6 +519,7 @@ end)
local chest_lid_obstructed = default.chest
and default.chest.chest_lid_obstructed
connected_chests.register_chest("default:chest", {
description = S("Big Chest"),
add_open_chest = true,
on_rightclick = function(pos, _, player)
minetest.sound_play("default_chest_open",
@ -556,6 +561,7 @@ connected_chests.register_chest("default:chest", {
})
connected_chests.register_chest("default:chest_locked", {
description = S("Big Locked Chest"),
lock = true,
add_open_chest = true,
on_rightclick = function(pos, _, player)
@ -618,7 +624,8 @@ if not chest_lid_obstructed then
(def.drawtype == "airlike" or
def.drawtype == "signlike" or
def.drawtype == "torchlike" or
(def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then
(def.drawtype == "nodebox"
and def.paramtype2 == "wallmounted")) then
return false
end
return true
@ -631,7 +638,80 @@ minetest.register_alias("connected_chests:chest_left",
"default:chest_connected_left")
minetest.register_alias("connected_chests:chest_right",
"default:chest_connected_right")
minetest.register_alias("connected_chests:chest_left_locked", "default:chest_locked_connected_left")
minetest.register_alias("connected_chests:chest_right_locked", "default:chest_locked_connected_right")
minetest.register_alias("connected_chests:chest_locked_left", "default:chest_locked_connected_left")
minetest.register_alias("connected_chests:chest_locked_right", "default:chest_locked_connected_right")
minetest.register_alias("connected_chests:chest_left_locked",
"default:chest_locked_connected_left")
minetest.register_alias("connected_chests:chest_right_locked",
"default:chest_locked_connected_right")
minetest.register_alias("connected_chests:chest_locked_left",
"default:chest_locked_connected_left")
minetest.register_alias("connected_chests:chest_locked_right",
"default:chest_locked_connected_right")
if minetest.global_exists("hopper") and hopper.set_extra_container_info then
local function get_inventory(chest_right_pos)
local node_right = minetest.get_node(chest_right_pos)
if node_right.param2 > 3 then
-- The right connected chest node has an invalid param2 value
-- Cannot determine the inventory
return
end
local x, z = unpack(param_tab2[node_right.param2])
local chest_left_pos = {x=chest_right_pos.x+x, y=chest_right_pos.y,
z=chest_right_pos.z+z}
local node_left = minetest.get_node(chest_left_pos)
if node_left.name ~= "default:chest_connected_left"
and node_left.name ~= "default:chest_connected_left_open" then
minetest.log("error","The left chest is not a chest: " ..
node_left.name .. " at " .. vector.to_string(chest_left_pos))
return
end
if node_left.param2 ~= node_right.param2 then
minetest.log("error", "The chests are pointing in different " ..
"directions: node_left.param2:" .. node_left.param2 ..
", node_right.param2:" .. node_right.param2)
return
end
return minetest.get_meta(chest_left_pos):get_inventory()
end
hopper:add_container({
{"top", "default:chest_connected_left", "main"},
{"bottom", "default:chest_connected_left", "main"},
{"side", "default:chest_connected_left", "main"},
{"top", "default:chest_connected_right", "main",
get_inventory = get_inventory},
{"bottom", "default:chest_connected_right", "main",
get_inventory = get_inventory},
{"side", "default:chest_connected_right", "main",
get_inventory = get_inventory},
{"top", "default:chest_connected_left_open", "main"},
{"bottom", "default:chest_connected_left_open", "main"},
{"side", "default:chest_connected_left_open", "main"},
{"top", "default:chest_connected_right_open", "main",
get_inventory = get_inventory},
{"bottom", "default:chest_connected_right_open", "main",
get_inventory = get_inventory},
{"side", "default:chest_connected_right_open", "main",
get_inventory = get_inventory},
})
local function set_hopper_param2(hopper_pos, chest_left_pos)
local param2_by_offset = {
[vector.new(-1, 0, 0):to_string()] = 0,
[vector.new( 0, 0, 1):to_string()] = 1,
[vector.new( 1, 0, 0):to_string()] = 2,
[vector.new( 0, 0,-1):to_string()] = 3,
}
local hopper_param2 = param2_by_offset[
(chest_left_pos - hopper_pos):to_string()]
if hopper_param2 then
return hopper_param2
end
local x, z = unpack(
param_tab2[minetest.get_node(chest_left_pos).param2])
local chest_right_pos = {x=chest_left_pos.x-x, y=chest_left_pos.y,
z=chest_left_pos.z-z}
return param2_by_offset[(chest_right_pos - hopper_pos):to_string()]
end
hopper:set_extra_container_info({
{"default:chest_connected_left", set_hopper_param2 = set_hopper_param2},
})
end

View File

@ -0,0 +1,3 @@
# textdomain: connected_chests
Big Chest=Kestego
Big Locked Chest=Ŝlosita kestego

View File

@ -0,0 +1,3 @@
# textdomain: connected_chests
Big Chest=Большой сундук
Big Locked Chest=Большой запертый сундук

3
locale/template.txt Normal file
View File

@ -0,0 +1,3 @@
# textdomain: connected_chests
Big Chest=
Big Locked Chest=

View File

@ -1,3 +1,3 @@
name = connected_chests
depends = default
optional_depends = pipeworks,technic
optional_depends = pipeworks,technic,hopper