From 5bb9a312898e884dda2bc21408bb64d5842754d5 Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Wed, 11 Feb 2026 19:51:35 +0100 Subject: [PATCH 1/7] Remove useless/outdated pages in docs/, keep it only for licenses, for now --- docs/areas.txt | 5 - docs/for server owners/anticheat.txt | 9 -- docs/for server owners/clearobjects.txt | 6 - docs/for server owners/corrupted machine.txt | 10 -- docs/for server owners/monitoring.txt | 13 -- docs/for server owners/recomended mods.txt | 1 - docs/for server owners/skinsdb.txt | 1 - docs/quests.md | 33 ----- mods/machine_ui_api/README.md | 16 ++ mods/machine_ui_api/convert_font.sh | 9 ++ mods/machine_ui_api/font_rendering.lua | 38 +++++ mods/machine_ui_api/init.lua | 13 ++ mods/machine_ui_api/machine_hover_render.lua | 139 ++++++++++++++++++ .../textures/FONT_TMP_REMOVE.png | Bin 0 -> 18115 bytes 14 files changed, 215 insertions(+), 78 deletions(-) delete mode 100644 docs/areas.txt delete mode 100644 docs/for server owners/anticheat.txt delete mode 100644 docs/for server owners/clearobjects.txt delete mode 100644 docs/for server owners/corrupted machine.txt delete mode 100644 docs/for server owners/monitoring.txt delete mode 100644 docs/for server owners/recomended mods.txt delete mode 100644 docs/for server owners/skinsdb.txt delete mode 100644 docs/quests.md create mode 100644 mods/machine_ui_api/README.md create mode 100644 mods/machine_ui_api/convert_font.sh create mode 100644 mods/machine_ui_api/font_rendering.lua create mode 100644 mods/machine_ui_api/init.lua create mode 100644 mods/machine_ui_api/machine_hover_render.lua create mode 100644 mods/machine_ui_api/textures/FONT_TMP_REMOVE.png diff --git a/docs/areas.txt b/docs/areas.txt deleted file mode 100644 index 35a6f92c..00000000 --- a/docs/areas.txt +++ /dev/null @@ -1,5 +0,0 @@ -Areas have been slightly modified -as of this writing, core.is_protected is 10x faster than in vanilla areas, see https://github.com/minetest-mods/areas/issues/86, so don't be afraid to use it -Also i've added the PvP controlling system from blocky survival, see pvp.lua. -And regular players cannot make areas without the areasprotector to help them. -Besides that, that should be it... \ No newline at end of file diff --git a/docs/for server owners/anticheat.txt b/docs/for server owners/anticheat.txt deleted file mode 100644 index f7d05ad5..00000000 --- a/docs/for server owners/anticheat.txt +++ /dev/null @@ -1,9 +0,0 @@ -Disable it. - - -No seriously, it partially breaks jetpacks and fully breaks player attraction. - -EDIT: After a major incident - -Don't disable it all -Disable only the movement anticheat \ No newline at end of file diff --git a/docs/for server owners/clearobjects.txt b/docs/for server owners/clearobjects.txt deleted file mode 100644 index a1c363b4..00000000 --- a/docs/for server owners/clearobjects.txt +++ /dev/null @@ -1,6 +0,0 @@ -DO NOT RUN /clearobjects - -IT WILL MESS UP ALL GRAVITATIONAL ATTRACTORS/REPULSORS, making them need to be replaced or moved. -IT WILL **NOT** HELP WITH LAG - -oh hey there is also /clearitems \ No newline at end of file diff --git a/docs/for server owners/corrupted machine.txt b/docs/for server owners/corrupted machine.txt deleted file mode 100644 index 0b195cb4..00000000 --- a/docs/for server owners/corrupted machine.txt +++ /dev/null @@ -1,10 +0,0 @@ -So, i define a corrupted machine as a machine that has its metadata and inventory lists wiped for any reason -If you can create a corrupted machine, that's a serious bug and you should report it (duh) -These machines usually also crash the server - - -How to get rid of corrupted machines: -- Attempt to identify where they are, if they crash the server, they usually crash only when players get near it -- Use `/toggle_power false` to disable switching stations, so they can't crash the server -- Just remove them -- Enable machines by doing `/toggle_power true` \ No newline at end of file diff --git a/docs/for server owners/monitoring.txt b/docs/for server owners/monitoring.txt deleted file mode 100644 index 642fc708..00000000 --- a/docs/for server owners/monitoring.txt +++ /dev/null @@ -1,13 +0,0 @@ -Skyblock zero is compatible with -https://github.com/minetest-monitoring/monitoring -https://github.com/minetest-monitoring/auth_cache -https://github.com/minetest-monitoring/metadata_cache -https://github.com/minetest-monitoring/monitoring_drawers - - -Extra monitoring support: -I've adde these metrics: -sbz_switching_station_lag -sbz_switching_station_count - -Though, i don't know how to display them nicely, but you can do /metric sbz_switching_station_count \ No newline at end of file diff --git a/docs/for server owners/recomended mods.txt b/docs/for server owners/recomended mods.txt deleted file mode 100644 index 358dbe32..00000000 --- a/docs/for server owners/recomended mods.txt +++ /dev/null @@ -1 +0,0 @@ -The teleport request mod - zander told me to un-bundle it from sbz diff --git a/docs/for server owners/skinsdb.txt b/docs/for server owners/skinsdb.txt deleted file mode 100644 index e595a1c7..00000000 --- a/docs/for server owners/skinsdb.txt +++ /dev/null @@ -1 +0,0 @@ -Ok so, if you choose to use skinsDB, epidermis won't be avaliable. \ No newline at end of file diff --git a/docs/quests.md b/docs/quests.md deleted file mode 100644 index 5e7513ec..00000000 --- a/docs/quests.md +++ /dev/null @@ -1,33 +0,0 @@ -# these are messy docs, check the src if something is missing - -global object 'quests' stores all quests - -a quest is -# QuestDef or sumn -{ - type = "quest"/"text"/"secret", - title = "Quest Name", - text = "Instructions or text here.", - requires = {"Other Quests Name"} -} -text is needed even if type isnt text - -requires will hide the text but now the title, until the list of required quests is completed -secret quests will not appear at all until theyre completed - -if you omit requires / provide an empty list the quest will be available from the beginning - -# some methods - -unlock_achievement(player_name, quest_name) -Marks the quest as completed. - -revoke_achievement(player_name, quest_name) -Removes the completion from the quest, should generally not be used. - -is_achievement_unlocked(player_name, quest_name) -Checks if the quest has been completed. - -is_quest_available(player_name, quest_name) -Checks if the required quests for the specified quest have been completed. - diff --git a/mods/machine_ui_api/README.md b/mods/machine_ui_api/README.md new file mode 100644 index 00000000..d87803e8 --- /dev/null +++ b/mods/machine_ui_api/README.md @@ -0,0 +1,16 @@ +# Machine UI api + +### What is it +A library that displays an amount of items in an inventory for nodes. + +(It doesn't have anything to do with `sbz_ui`.) + +It's mainly for skyblock zero but you can use it freely in other mods, I encourage you to! + +### License +This mod's code is licensed under the MIT license. All the other files are licensed under CC BY 4.0. + +### Media licenses in detail +- `README.md` - CC BY 4.0 by frogTheSecond +- `mod.conf` - CC BY 4.0 by frogTheSecond + diff --git a/mods/machine_ui_api/convert_font.sh b/mods/machine_ui_api/convert_font.sh new file mode 100644 index 00000000..92c561be --- /dev/null +++ b/mods/machine_ui_api/convert_font.sh @@ -0,0 +1,9 @@ +# I used this script for another mod, it's my script so i am confident i can use it +# https://github.com/TheEt1234/minetest-virt/blob/master/textures/convert.sh +str=$(lua -e "for i=32,255 do io.write(string.char(i) .. '\n') end") + +for file in *.ttf; do + echo "${str}" | magick -background "rgba(0,0,0,0)" -fill white -font ${file} -pointsize 25 -gravity center label:@- ${file}.png & +done + +echo "Done!" diff --git a/mods/machine_ui_api/font_rendering.lua b/mods/machine_ui_api/font_rendering.lua new file mode 100644 index 00000000..80c48378 --- /dev/null +++ b/mods/machine_ui_api/font_rendering.lua @@ -0,0 +1,38 @@ +-- surprisingly easy if its just ascii + +local byte_space = string.byte(' ') +local amount_of_chars_supported = 256 - byte_space + +machine_ui_api.font = {} + +machine_ui_api.font.render_char = function(font, char) + local byte = string.byte(char) + return ('%s^[sheet:1x%s:0,%s'):format(font, amount_of_chars_supported - 1, byte - byte_space) +end + +machine_ui_api.font.render = function(font, character_size_w, character_size_h, text) + local text_split = text:split('\n') + + local text_height, text_width = #text_split, 0 + for _, line in ipairs(text_split) do + text_width = math.max(text_width, #line) + end + + local image = {} + table.insert(image, ('[combine:%sx%s'):format(character_size_w * text_width, character_size_h * text_height)) + + for y, line in ipairs(text_split) do + for x = 1, #line do + local char = line:sub(x, x) + table.insert( + image, + (':%s,%s=%s'):format( + (x - 1) * character_size_w, + (y - 1) * character_size_h, + machine_ui_api.escape(machine_ui_api.font.render_char(font, char)) + ) + ) + end + end + return { image = table.concat(image), width = text_width, height = text_height } +end diff --git a/mods/machine_ui_api/init.lua b/mods/machine_ui_api/init.lua new file mode 100644 index 00000000..fd2a7fcf --- /dev/null +++ b/mods/machine_ui_api/init.lua @@ -0,0 +1,13 @@ +local mp = core.get_modpath('machine_ui_api') + +machine_ui_api = {} +function machine_ui_api.escape(x) + return x:gsub('.', { + ['\\'] = '\\\\', + ['^'] = '\\^', + [':'] = '\\:', + }) +end + +dofile(mp .. '/font_rendering.lua') +dofile(mp .. '/machine_hover_render.lua') diff --git a/mods/machine_ui_api/machine_hover_render.lua b/mods/machine_ui_api/machine_hover_render.lua new file mode 100644 index 00000000..8d48a706 --- /dev/null +++ b/mods/machine_ui_api/machine_hover_render.lua @@ -0,0 +1,139 @@ +-- very inspired by mindustry +local max_items = 6 +local max_items_in_one_row = 3 +local thickness = 0.001 +local size = 0.5 + +---@return string +local function get_tile(tiles, indx) + local tile = tiles[indx] + if type(tile) == 'string' then return tile end + if type(tile) == 'table' then + if tile.name then return tile.name end + if tile[1] then return tile[1] end + if indx ~= 1 then + return get_tile(tiles, 1) + else + return 'blank.png' + end + end + if type(tile) == 'nil' then + if indx == 1 then return 'blank.png' end + return get_tile(tiles, 1) + end + return tile +end + +---@return string +local function get_inventory_image(stack) + local def = (stack:get_definition() or {}) + if def.inventory_image and def.inventory_image ~= '' then return def.inventory_image end + + if def.tiles then + return core.inventorycube(get_tile(def.tiles, 1), get_tile(def.tiles, 2), get_tile(def.tiles, 3)) + end + + return 'blank.png' +end + +machine_ui_api.render_inventory_hover = function(font, character_size_w, character_size_h, lists) + local items = {} + + lists = table.copy(lists) + local listkeys = {} + for k, _ in pairs(lists) do + listkeys[#listkeys + 1] = k + end + table.sort(listkeys) + + for _, listkey in ipairs(listkeys) do + for _, item in ipairs(lists[listkey]) do + if not item:is_empty() then table.insert(items, item) end + end + end + + local organised_items = {} + local row = 0 + for i = 1, #items do + if (i - 1) % max_items_in_one_row == 0 then row = row + 1 end + if i > max_items then break end + organised_items[row] = organised_items[row] or {} + table.insert(organised_items[row], items[i]) + end + + local image = {} + + for y, row in ipairs(organised_items) do + for x, item in ipairs(row) do + local count = item:get_count() + local item_image = get_inventory_image(item) + local count_image = machine_ui_api.font.render(font, character_size_w, character_size_h, tostring(count)) + + table.insert(image, { + x = (x - 1) * size, + y = (y - 1) * size, + z = -0.01, + size = { x = size, y = size, z = thickness }, + image = 'blank.png^[invert:rgba^[colorize:#1D2021:255', + }) + + table.insert(image, { + x = (x - 1) * size, + y = (y - 1) * size, + size = { x = size, y = size, z = thickness }, + image = item_image, + }) + + table.insert(image, { + x = (((x - 1) - 0.3) + (count_image.width >= 3 and ((count_image.width - 2) * 0.2) or 0)) * size, + y = ((y - 1) - 0.3) * size, + z = thickness, + size = { + x = (0.5 / 2) * count_image.width * size, + y = (1 / 2) * count_image.height * size, + z = thickness, + }, + image = count_image.image, + }) + end + end + + return image +end + +local default_font = 'FONT_TMP_REMOVE.png' +local default_font_w, default_font_h = 16, 32 +function machine_ui_api.inventory_hover(pos) + local meta = core.get_meta(pos) + local inv = meta:get_inventory() + local lists = inv:get_lists() + local imgs = machine_ui_api.render_inventory_hover(default_font, default_font_w, default_font_h, lists) + + for _, img in ipairs(imgs) do + local ipos = vector.add(pos, vector.new(img.x, img.y, (img.z or 0) + 0.56)) + core.add_entity(ipos, 'machine_ui_api:machine_hover_visual'):set_properties { + visual_size = img.size, + textures = { + img.image, + img.image, + img.image, + img.image, + img.image, + img.image, + }, + } + end +end + +core.register_entity('machine_ui_api:machine_hover_visual', { + initial_properties = { + hp_max = 10, + light_source = 14, + visual = 'cube', + static_save = false, + physical = false, + pointable = false, + }, +}) + +-- //lua render_image_TEST(pos, machine_ui_api.render_inventory_hover('FONT_TMP_REMOVE.png', 16, 32, {{ItemStack('sbz_resources:matter_blob 9'), ItemStack('sbz_resources:antimatter_dust 99'), ItemStack('sbz_resources:matter_dust 999')},{ItemStack('pipeworks:tube_1')}})) diff --git a/mods/machine_ui_api/textures/FONT_TMP_REMOVE.png b/mods/machine_ui_api/textures/FONT_TMP_REMOVE.png new file mode 100644 index 0000000000000000000000000000000000000000..b06cdda8db90ec2143a338fcdf6c387ae817c6b0 GIT binary patch literal 18115 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 DGMbmJ literal 0 HcmV?d00001 From bbab91182ff86ffc33884145316888bf817c6133 Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Thu, 12 Feb 2026 10:41:32 +0100 Subject: [PATCH 2/7] Add a setting that toggles the welcome message --- mods/machine_ui_api/README.md | 16 -- mods/machine_ui_api/convert_font.sh | 9 -- mods/machine_ui_api/font_rendering.lua | 38 ----- mods/machine_ui_api/init.lua | 13 -- mods/machine_ui_api/machine_hover_render.lua | 139 ------------------ .../textures/FONT_TMP_REMOVE.png | Bin 18115 -> 0 bytes mods/sbz_base/init.lua | 15 +- mods/sbz_resources/nodes.lua | 2 +- mods/stubes | 2 +- settingtypes.txt | 2 + 10 files changed, 15 insertions(+), 221 deletions(-) delete mode 100644 mods/machine_ui_api/README.md delete mode 100644 mods/machine_ui_api/convert_font.sh delete mode 100644 mods/machine_ui_api/font_rendering.lua delete mode 100644 mods/machine_ui_api/init.lua delete mode 100644 mods/machine_ui_api/machine_hover_render.lua delete mode 100644 mods/machine_ui_api/textures/FONT_TMP_REMOVE.png diff --git a/mods/machine_ui_api/README.md b/mods/machine_ui_api/README.md deleted file mode 100644 index d87803e8..00000000 --- a/mods/machine_ui_api/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Machine UI api - -### What is it -A library that displays an amount of items in an inventory for nodes. - -(It doesn't have anything to do with `sbz_ui`.) - -It's mainly for skyblock zero but you can use it freely in other mods, I encourage you to! - -### License -This mod's code is licensed under the MIT license. All the other files are licensed under CC BY 4.0. - -### Media licenses in detail -- `README.md` - CC BY 4.0 by frogTheSecond -- `mod.conf` - CC BY 4.0 by frogTheSecond - diff --git a/mods/machine_ui_api/convert_font.sh b/mods/machine_ui_api/convert_font.sh deleted file mode 100644 index 92c561be..00000000 --- a/mods/machine_ui_api/convert_font.sh +++ /dev/null @@ -1,9 +0,0 @@ -# I used this script for another mod, it's my script so i am confident i can use it -# https://github.com/TheEt1234/minetest-virt/blob/master/textures/convert.sh -str=$(lua -e "for i=32,255 do io.write(string.char(i) .. '\n') end") - -for file in *.ttf; do - echo "${str}" | magick -background "rgba(0,0,0,0)" -fill white -font ${file} -pointsize 25 -gravity center label:@- ${file}.png & -done - -echo "Done!" diff --git a/mods/machine_ui_api/font_rendering.lua b/mods/machine_ui_api/font_rendering.lua deleted file mode 100644 index 80c48378..00000000 --- a/mods/machine_ui_api/font_rendering.lua +++ /dev/null @@ -1,38 +0,0 @@ --- surprisingly easy if its just ascii - -local byte_space = string.byte(' ') -local amount_of_chars_supported = 256 - byte_space - -machine_ui_api.font = {} - -machine_ui_api.font.render_char = function(font, char) - local byte = string.byte(char) - return ('%s^[sheet:1x%s:0,%s'):format(font, amount_of_chars_supported - 1, byte - byte_space) -end - -machine_ui_api.font.render = function(font, character_size_w, character_size_h, text) - local text_split = text:split('\n') - - local text_height, text_width = #text_split, 0 - for _, line in ipairs(text_split) do - text_width = math.max(text_width, #line) - end - - local image = {} - table.insert(image, ('[combine:%sx%s'):format(character_size_w * text_width, character_size_h * text_height)) - - for y, line in ipairs(text_split) do - for x = 1, #line do - local char = line:sub(x, x) - table.insert( - image, - (':%s,%s=%s'):format( - (x - 1) * character_size_w, - (y - 1) * character_size_h, - machine_ui_api.escape(machine_ui_api.font.render_char(font, char)) - ) - ) - end - end - return { image = table.concat(image), width = text_width, height = text_height } -end diff --git a/mods/machine_ui_api/init.lua b/mods/machine_ui_api/init.lua deleted file mode 100644 index fd2a7fcf..00000000 --- a/mods/machine_ui_api/init.lua +++ /dev/null @@ -1,13 +0,0 @@ -local mp = core.get_modpath('machine_ui_api') - -machine_ui_api = {} -function machine_ui_api.escape(x) - return x:gsub('.', { - ['\\'] = '\\\\', - ['^'] = '\\^', - [':'] = '\\:', - }) -end - -dofile(mp .. '/font_rendering.lua') -dofile(mp .. '/machine_hover_render.lua') diff --git a/mods/machine_ui_api/machine_hover_render.lua b/mods/machine_ui_api/machine_hover_render.lua deleted file mode 100644 index 8d48a706..00000000 --- a/mods/machine_ui_api/machine_hover_render.lua +++ /dev/null @@ -1,139 +0,0 @@ --- very inspired by mindustry -local max_items = 6 -local max_items_in_one_row = 3 -local thickness = 0.001 -local size = 0.5 - ----@return string -local function get_tile(tiles, indx) - local tile = tiles[indx] - if type(tile) == 'string' then return tile end - if type(tile) == 'table' then - if tile.name then return tile.name end - if tile[1] then return tile[1] end - if indx ~= 1 then - return get_tile(tiles, 1) - else - return 'blank.png' - end - end - if type(tile) == 'nil' then - if indx == 1 then return 'blank.png' end - return get_tile(tiles, 1) - end - return tile -end - ----@return string -local function get_inventory_image(stack) - local def = (stack:get_definition() or {}) - if def.inventory_image and def.inventory_image ~= '' then return def.inventory_image end - - if def.tiles then - return core.inventorycube(get_tile(def.tiles, 1), get_tile(def.tiles, 2), get_tile(def.tiles, 3)) - end - - return 'blank.png' -end - -machine_ui_api.render_inventory_hover = function(font, character_size_w, character_size_h, lists) - local items = {} - - lists = table.copy(lists) - local listkeys = {} - for k, _ in pairs(lists) do - listkeys[#listkeys + 1] = k - end - table.sort(listkeys) - - for _, listkey in ipairs(listkeys) do - for _, item in ipairs(lists[listkey]) do - if not item:is_empty() then table.insert(items, item) end - end - end - - local organised_items = {} - local row = 0 - for i = 1, #items do - if (i - 1) % max_items_in_one_row == 0 then row = row + 1 end - if i > max_items then break end - organised_items[row] = organised_items[row] or {} - table.insert(organised_items[row], items[i]) - end - - local image = {} - - for y, row in ipairs(organised_items) do - for x, item in ipairs(row) do - local count = item:get_count() - local item_image = get_inventory_image(item) - local count_image = machine_ui_api.font.render(font, character_size_w, character_size_h, tostring(count)) - - table.insert(image, { - x = (x - 1) * size, - y = (y - 1) * size, - z = -0.01, - size = { x = size, y = size, z = thickness }, - image = 'blank.png^[invert:rgba^[colorize:#1D2021:255', - }) - - table.insert(image, { - x = (x - 1) * size, - y = (y - 1) * size, - size = { x = size, y = size, z = thickness }, - image = item_image, - }) - - table.insert(image, { - x = (((x - 1) - 0.3) + (count_image.width >= 3 and ((count_image.width - 2) * 0.2) or 0)) * size, - y = ((y - 1) - 0.3) * size, - z = thickness, - size = { - x = (0.5 / 2) * count_image.width * size, - y = (1 / 2) * count_image.height * size, - z = thickness, - }, - image = count_image.image, - }) - end - end - - return image -end - -local default_font = 'FONT_TMP_REMOVE.png' -local default_font_w, default_font_h = 16, 32 -function machine_ui_api.inventory_hover(pos) - local meta = core.get_meta(pos) - local inv = meta:get_inventory() - local lists = inv:get_lists() - local imgs = machine_ui_api.render_inventory_hover(default_font, default_font_w, default_font_h, lists) - - for _, img in ipairs(imgs) do - local ipos = vector.add(pos, vector.new(img.x, img.y, (img.z or 0) + 0.56)) - core.add_entity(ipos, 'machine_ui_api:machine_hover_visual'):set_properties { - visual_size = img.size, - textures = { - img.image, - img.image, - img.image, - img.image, - img.image, - img.image, - }, - } - end -end - -core.register_entity('machine_ui_api:machine_hover_visual', { - initial_properties = { - hp_max = 10, - light_source = 14, - visual = 'cube', - static_save = false, - physical = false, - pointable = false, - }, -}) - --- //lua render_image_TEST(pos, machine_ui_api.render_inventory_hover('FONT_TMP_REMOVE.png', 16, 32, {{ItemStack('sbz_resources:matter_blob 9'), ItemStack('sbz_resources:antimatter_dust 99'), ItemStack('sbz_resources:matter_dust 999')},{ItemStack('pipeworks:tube_1')}})) diff --git a/mods/machine_ui_api/textures/FONT_TMP_REMOVE.png b/mods/machine_ui_api/textures/FONT_TMP_REMOVE.png deleted file mode 100644 index b06cdda8db90ec2143a338fcdf6c387ae817c6b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18115 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 DGMbmJ diff --git a/mods/sbz_base/init.lua b/mods/sbz_base/init.lua index 0e6d0c14..e2984b40 100644 --- a/mods/sbz_base/init.lua +++ b/mods/sbz_base/init.lua @@ -19,6 +19,7 @@ sbz_api = { accelerated_habitats = false, debug = core.settings:get_bool('sbz_debug', false), logic_gate_linking_range = 15, + welcome_messages = core.settings:get_bool('sbz_welcome_message', true), } if sbz_api.server_optimizations == 'auto' then @@ -265,10 +266,16 @@ core.register_chatcommand('bgm_volume', { core.register_on_joinplayer(function(player) local player_name = player:get_player_name() -- send welcome messages - core.chat_send_player(player_name, sbz_api.get_simple_version_string()) - core.chat_send_player(player_name, '‼ reminder: If you fall off, use /core to teleport back to the core.') - core.chat_send_player(player_name, '‼ reminder: If lose your Quest Book, use /qb to get it back.') - core.chat_send_player(player_name, '!! If you have any suggestions/bug reports to Skyblock Zero, see /community') + + if sbz_api.welcome_messages then + core.chat_send_player(player_name, sbz_api.get_simple_version_string()) + core.chat_send_player(player_name, '‼ reminder: If you fall off, use /core to teleport back to the core.') + core.chat_send_player(player_name, '‼ reminder: If lose your Quest Book, use /qb to get it back.') + core.chat_send_player( + player_name, + '!! If you have any suggestions/bug reports to Skyblock Zero, see /community' + ) + end -- play bgm playRandomBGM(player) diff --git a/mods/sbz_resources/nodes.lua b/mods/sbz_resources/nodes.lua index 35bbe828..53228b89 100644 --- a/mods/sbz_resources/nodes.lua +++ b/mods/sbz_resources/nodes.lua @@ -507,7 +507,7 @@ minetest.register_node( unifieddyes.def { description = 'Bricks', tiles = { 'bricks.png' }, - drawtype = 'color', + paramtype2 = 'color', groups = { matter = 1, charged = 1, diff --git a/mods/stubes b/mods/stubes index 72738846..b0c0a974 160000 --- a/mods/stubes +++ b/mods/stubes @@ -1 +1 @@ -Subproject commit 7273884663cc12cd52b32b9bf6cecc4c72885716 +Subproject commit b0c0a9748b90700c7ef98ad4e035118b8af4a202 diff --git a/settingtypes.txt b/settingtypes.txt index f78b332d..067559b3 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -14,3 +14,5 @@ sbz_debug (Debug Logging) bool false # If enabled, it may cause some features behave in an unexpected way. # If not neabled, this may cause performance issues on large worlds or on servers. sbz_switching_station_unload (Automatically unload switching stations) enum default default,always,never + +sbz_welcome_message (Enable the welcome message) bool true From d5f491419e6ab8212a9a91e14aeb1a951af06171 Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Thu, 12 Feb 2026 10:45:35 +0100 Subject: [PATCH 3/7] Make sbz use codeberg.org/skyblock_zero/stubes instead --- .gitmodules | 2 +- mods/stubes | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index b0dec20e..6be76b95 100644 --- a/.gitmodules +++ b/.gitmodules @@ -36,7 +36,7 @@ url = https://github.com/fluxionary/minetest-futil [submodule "mods/stubes"] path = mods/stubes - url = https://github.com/TheEt1234/luanti-stubes + url = https://codeberg.org/skyblock_zero/stubes [submodule "mods/extended_placement"] path = mods/extended_placement url = https://github.com/gamefreq0/extended_placement diff --git a/mods/stubes b/mods/stubes index b0c0a974..bea543f5 160000 --- a/mods/stubes +++ b/mods/stubes @@ -1 +1 @@ -Subproject commit b0c0a9748b90700c7ef98ad4e035118b8af4a202 +Subproject commit bea543f57c62d0a5246e8ca85b8835a1039fec2e From 4617eab810a9d9500be1a0edeae9a1a65ff17805 Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Sat, 14 Feb 2026 14:36:09 +0100 Subject: [PATCH 4/7] Fix questbook crash --- CHANGELOG.md | 10 ++++++++++ mods/sbz_progression/questbook.lua | 27 ++++++++++++++++++++------- mods/stubes | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc84d9db..6e736f55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +# Release 42 +- Added a setting that toggles the welcome message +- Seperated submodule contributions from sbz contributions in credits, so that people that have nothing to do with sbz don't get confused +- Added wormholes +- Fix crash with questbooks in node breakers +- Stubes (still hidden): + - Moved to codeberg + - Added the ability to put items and take away items by a player + - (Hopefully) fixed a crash + # Release 40 - Development resumed again! - We are still looking for contributors, if you enjoy SBZ and want to contribute, please do so! diff --git a/mods/sbz_progression/questbook.lua b/mods/sbz_progression/questbook.lua index dbc8a91c..3f6c8a82 100644 --- a/mods/sbz_progression/questbook.lua +++ b/mods/sbz_progression/questbook.lua @@ -87,8 +87,8 @@ end -- Function to create the formspec local function get_questbook_formspec(selected_quest_index, player_name, quests_to_show, search_text) local player_ref = core.get_player_by_name(player_name) - sbz_api.ui.set_player(player_ref) if not player_ref then return '' end + sbz_api.ui.set_player(player_ref) local selected_quest = quests_to_show[selected_quest_index] local quest_count = #quests -- we subtract uncompletable quests from this later, like infotexts @@ -143,9 +143,9 @@ local function get_questbook_formspec(selected_quest_index, player_name, quests_ ins(pal.bright_purple) -- just for the credits quest - if (quest.istoplevel) then + if quest.istoplevel then ins '0' - else + else ins(default_indent) end @@ -156,9 +156,9 @@ local function get_questbook_formspec(selected_quest_index, player_name, quests_ ins(pal.bright_purple) -- just for the credits quest - if (quest.istoplevel) then + if quest.istoplevel then ins '0' - else + else ins(default_indent) end @@ -192,7 +192,20 @@ local function get_questbook_formspec(selected_quest_index, player_name, quests_ tooltip[font_add;Makes font larger] tooltip[font_sub;Makes font smaller] ]]):format( - sbz_api.ui.hypertext(0.3, 0.25, 5.6, 0.5, '', "Quest List (✓ " .. completed_count .. " / ► " ..available_count.." / ✕ " .. (quest_count - completed_count) .. ")"), + sbz_api.ui.hypertext( + 0.3, + 0.25, + 5.6, + 0.5, + '', + 'Quest List (✓ ' + .. completed_count + .. ' / ► ' + .. available_count + .. ' / ✕ ' + .. (quest_count - completed_count) + .. ')' + ), sbz_api.ui.box_shadow(0.2, 0.7, 5.6, 11.3, 2), table_style, quest_list, @@ -271,7 +284,7 @@ local function get_questbook_formspec(selected_quest_index, player_name, quests_ end if available_count == 1 and (quest_count - completed_count) == 1 then - unlock_achievement(player_name, "Credits") + unlock_achievement(player_name, 'Credits') -- okay let me explain -- this will be called only once diff --git a/mods/stubes b/mods/stubes index bea543f5..b483973d 160000 --- a/mods/stubes +++ b/mods/stubes @@ -1 +1 @@ -Subproject commit bea543f57c62d0a5246e8ca85b8835a1039fec2e +Subproject commit b483973dd0074d05a2fab6d56612790c49b7fc1e From adc6d1ce9be252760c32f8610e0bb7b920dded93 Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Sat, 14 Feb 2026 17:17:37 +0100 Subject: [PATCH 5/7] Update stubes --- mods/stubes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/stubes b/mods/stubes index b483973d..4e846447 160000 --- a/mods/stubes +++ b/mods/stubes @@ -1 +1 @@ -Subproject commit b483973dd0074d05a2fab6d56612790c49b7fc1e +Subproject commit 4e846447bed6097e1feb349b927908fba8ca7361 From 26c6864929502a3d7d76bb49ba4974bd2c1ba068 Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Mon, 16 Feb 2026 18:59:10 +0100 Subject: [PATCH 6/7] Fix bug with wielders --- mods/sbz_pipeworks/wielder.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mods/sbz_pipeworks/wielder.lua b/mods/sbz_pipeworks/wielder.lua index d5d7d194..3c175722 100644 --- a/mods/sbz_pipeworks/wielder.lua +++ b/mods/sbz_pipeworks/wielder.lua @@ -136,17 +136,14 @@ function pipeworks.register_wielder(def) if def.eject_drops then inv:set_size('main', 32) end set_wielder_formspec(def, meta) end, - on_place = function(itemstack, placer, pointed_thing) - -- Use default placement - return minetest.item_place(itemstack, placer, pointed_thing) - end, after_place_node = function(pos, placer, itemstack, pointed_thing) -- Update the pipe network connections pipeworks.scan_for_tube_objects(pos) - if not placer or not pointed_thing or pointed_thing.type ~= 'node' then return end + if not placer then return end minetest.get_meta(pos):set_string('owner', placer:get_player_name()) + if not pointed_thing or pointed_thing.type ~= 'node' then return end -- Rotate to face the clicked block local dir = vector.subtract(pointed_thing.above, pointed_thing.under) @@ -154,7 +151,7 @@ function pipeworks.register_wielder(def) local node = minetest.get_node(pos) node.param2 = param2 - minetest.set_node(pos, node) + minetest.swap_node(pos, node) end, after_dig_node = function(pos, oldnode, oldmetadata, digger) local digger_inv = digger:get_inventory() From 7328ed3338f8ce48038445532392d72306374a4c Mon Sep 17 00:00:00 2001 From: TheEt1234 Date: Tue, 17 Feb 2026 12:05:33 +0100 Subject: [PATCH 7/7] Improve code for filter injector placement --- mods/sbz_pipeworks/filter_injector.lua | 41 +++++++++----------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/mods/sbz_pipeworks/filter_injector.lua b/mods/sbz_pipeworks/filter_injector.lua index c6c0b635..0fc270d4 100644 --- a/mods/sbz_pipeworks/filter_injector.lua +++ b/mods/sbz_pipeworks/filter_injector.lua @@ -60,29 +60,15 @@ minetest.register_node('pipeworks:automatic_filter_injector', { set_filter_formspec(meta) end, after_place_node = function(pos, placer, itemstack, pointed_thing) - minetest.get_meta(pos):set_string('owner', placer:get_player_name()) - - if placer and pointed_thing and pointed_thing.type == "node" then - -- Face away from the clicked block - local dir = vector.subtract(pointed_thing.above, pointed_thing.under) - dir = vector.multiply(dir, -1) - - -- Get base param2 from direction - local param2 = minetest.dir_to_facedir(dir, true) - - -- Manual correction offset for facing direction - local CORRECTION_OFFSET = 1 - param2 = (param2 + CORRECTION_OFFSET) % 24 - - local node = minetest.get_node(pos) - node.param2 = param2 - minetest.swap_node(pos, node) - else - local node = minetest.get_node(pos) - node.param2 = node.param2 + 1 - minetest.swap_node(pos, node) + core.get_meta(pos):set_string('owner', placer:get_player_name()) + + if pointed_thing and pointed_thing.above then + local face = vector.subtract(pointed_thing.above, pointed_thing.under) + face = -face + local node = core.get_node(pos) + node.param2 = core.dir_to_facedir(face, true) + 1 + core.swap_node(pos, node) end - pipeworks.after_place(pos) end, after_dig_node = pipeworks.after_dig, @@ -410,10 +396,10 @@ minetest.register_node('pipeworks:automatic_filter_injector', { }) do - local MB = "sbz_resources:matter_blob" - local RA = "sbz_resources:robotic_arm" - local RC = "sbz_resources:retaining_circuit" - local T1 = "pipeworks:tube_1" + local MB = 'sbz_resources:matter_blob' + local RA = 'sbz_resources:robotic_arm' + local RC = 'sbz_resources:retaining_circuit' + local T1 = 'pipeworks:tube_1' minetest.register_craft { output = 'pipeworks:automatic_filter_injector 4', recipe = { @@ -422,4 +408,5 @@ do { MB, MB, MB }, }, } -end \ No newline at end of file +end +