diff --git a/mods/3d_armor/3d_armor/api.lua b/mods/3d_armor/3d_armor/api.lua index dbca4f9d..8e07c648 100644 --- a/mods/3d_armor/3d_armor/api.lua +++ b/mods/3d_armor/3d_armor/api.lua @@ -200,6 +200,10 @@ armor.update_player_visuals = function(self, player) self:run_callbacks("on_update", player) end + +-- armor is not visible on player model if enabled +local transparent_armor = minetest.settings:get_bool("armor_transparent", false) + armor.set_player_armor = function(self, player) local name, armor_inv = self:get_valid_player(player, "[set_player_armor]") if not name then @@ -258,7 +262,9 @@ armor.set_player_armor = function(self, player) tex = tex:gsub(".png$", "") local prev = def.preview or tex.."_preview" prev = prev:gsub(".png$", "") - texture = texture.."^"..tex..".png" + if not transparent_armor then + texture = texture.."^"..tex..".png" + end preview = preview.."^"..prev..".png" state = state + stack:get_wear() count = count + 1 diff --git a/mods/3d_armor/3d_armor_ui/init.lua b/mods/3d_armor/3d_armor_ui/init.lua index 397a6318..28193e73 100644 --- a/mods/3d_armor/3d_armor_ui/init.lua +++ b/mods/3d_armor/3d_armor_ui/init.lua @@ -49,7 +49,7 @@ unified_inventory.register_page("armor", { "listring[current_player;main]".. "listring[detached:"..name.."_armor;armor]" if armor.config.fire_protect then - formspec = formspec.."label[5.0,"..(fy + 1.0)..";".. + formspec = formspec.."label[6.0,"..(fy + 1.0)..";".. F(S("Fire"))..": "..armor.def[name].fire.."]" end if has_technic then diff --git a/mods/3d_armor/settingtypes.txt b/mods/3d_armor/settingtypes.txt index fdc2857b..4195ddd0 100644 --- a/mods/3d_armor/settingtypes.txt +++ b/mods/3d_armor/settingtypes.txt @@ -58,6 +58,9 @@ armor_punch_damage (Enable damage effects) bool true # Enable migration of old armor inventories. armor_migrate_old_inventory (Migrate old armor inventories) bool true +# Don't show armor on character model. +armor_transparent (Transparent armor) bool false + [shields] diff --git a/mods/advtrains/advtrains/trainlogic.lua b/mods/advtrains/advtrains/trainlogic.lua index d83d89fc..187e5bae 100644 --- a/mods/advtrains/advtrains/trainlogic.lua +++ b/mods/advtrains/advtrains/trainlogic.lua @@ -1106,6 +1106,17 @@ function advtrains.split_train_at_index(train, index) local newtrain=advtrains.trains[newtrain_id] newtrain.velocity=train.velocity + -- copy various properties from the old to the new train + newtrain.door_open = train.door_open + newtrain.text_outside = train.text_outside + newtrain.text_inside = train.text_inside + newtrain.line = train.line + newtrain.routingcode = train.routingcode + newtrain.speed_restriction = train.speed_restriction + newtrain.is_shunt = train.is_shunt + newtrain.points_split = advtrains.merge_tables(train.points_split) + newtrain.autocouple = train.autocouple + return newtrain_id -- return new train ID, so new train can be manipulated end diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua index 8f107f2e..c5742736 100644 --- a/mods/carts/cart_entity.lua +++ b/mods/carts/cart_entity.lua @@ -35,15 +35,10 @@ function cart_entity:on_rightclick(clicker) end local player_name = clicker:get_player_name() if self.driver and player_name == self.driver then - self.driver = nil carts:manage_attachment(clicker, nil) elseif not self.driver then - self.driver = player_name carts:manage_attachment(clicker, self.object) - - -- player_api does not update the animation - -- when the player is attached, reset to default animation - player_api.set_animation(clicker, "stand") + self.driver = player_name end end @@ -73,8 +68,9 @@ end -- 0.5.x and later: When the driver leaves function cart_entity:on_detach_child(child) if child and child:get_player_name() == self.driver then - self.driver = nil + -- Clean up eye height carts:manage_attachment(child, nil) + self.driver = nil end end diff --git a/mods/carts/functions.lua b/mods/carts/functions.lua index a54b5948..36b7e129 100644 --- a/mods/carts/functions.lua +++ b/mods/carts/functions.lua @@ -12,7 +12,7 @@ function carts:manage_attachment(player, obj) end local status = obj ~= nil local player_name = player:get_player_name() - if player_api.player_attached[player_name] == status then + if obj and player:get_attach() == obj then return end player_api.player_attached[player_name] = status @@ -20,6 +20,10 @@ function carts:manage_attachment(player, obj) if status then player:set_attach(obj, "", {x=0, y=-4.5, z=0}, {x=0, y=0, z=0}) player:set_eye_offset({x=0, y=-4, z=0},{x=0, y=-4, z=0}) + + -- player_api does not update the animation + -- when the player is attached, reset to default animation + player_api.set_animation(player, "stand") else player:set_detach() player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) diff --git a/mods/doors/init.lua b/mods/doors/init.lua index 7b0af7b9..756693fa 100644 --- a/mods/doors/init.lua +++ b/mods/doors/init.lua @@ -853,6 +853,7 @@ minetest.register_tool("doors:key", { -- flip protected to normal if player_name == prot then + infotext = " " owner = "" prot = "" ok = 1 @@ -865,13 +866,13 @@ minetest.register_tool("doors:key", { meta:set_string("doors_owner", owner) meta:set_string("doors_protected", prot) - if not minetest.setting_getbool("creative_mode") then + if not minetest.settings:get_bool("creative_mode") then itemstack:add_wear(65535 / 50) end end return itemstack - end, + end }) minetest.register_craft({ diff --git a/mods/farming/crops/soy.lua b/mods/farming/crops/soy.lua index 053557dc..eec33f3e 100644 --- a/mods/farming/crops/soy.lua +++ b/mods/farming/crops/soy.lua @@ -42,15 +42,26 @@ minetest.register_node("farming:soy_sauce", { sounds = default.node_sound_glass_defaults() }) +-- river water availability check +local bucket_water + +if minetest.get_mapgen_setting("mgname") == "valleys" +or minetest.get_modpath("ethereal") then + bucket_water = "bucket:bucket_river_water" +else + bucket_water = "bucket:bucket_water" +end + +-- soy sauce recipe minetest.register_craft( { output = "farming:soy_sauce", recipe = { {"group:food_soy", "group:food_salt", "group:food_soy"}, {"", "group:food_juicer", ""}, - {"", "bucket:bucket_river_water", "vessels:glass_bottle"} + {"", bucket_water, "vessels:glass_bottle"} }, replacements = { - {"bucket:bucket_river_water", "bucket:bucket_empty"}, + {bucket_water, "bucket:bucket_empty"}, {"group:food_juicer", "farming:juicer"} } }) diff --git a/mods/mobs_redo/api.lua b/mods/mobs_redo/api.lua index c9da05ca..e0d757d1 100644 --- a/mods/mobs_redo/api.lua +++ b/mods/mobs_redo/api.lua @@ -8,7 +8,7 @@ local use_cmi = minetest.global_exists("cmi") mobs = { mod = "redo", - version = "20210515", + version = "20210527", intllib = S, invis = minetest.global_exists("invisibility") and invisibility or {} } @@ -2917,14 +2917,9 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) -- only play hit sound and show blood effects if damage is 1 or over if damage >= 1 then - local snd - - -- weapon sounds - if weapon_def.sounds then - snd = weapon_def.sounds[random(#weapon_def.sounds)] - else - snd = "default_punch" - end + -- select tool use sound if found, or fallback to default + local snd = weapon_def.sound and weapon_def.sound.use + or "default_punch" minetest.sound_play(snd, {object = self.object, max_hear_distance = 8}, true) diff --git a/mods/signs_lib/api.lua b/mods/signs_lib/api.lua index e3a6df1a..8a602089 100644 --- a/mods/signs_lib/api.lua +++ b/mods/signs_lib/api.lua @@ -4,6 +4,8 @@ local S = signs_lib.gettext local function get_sign_formspec() end +signs_lib.glow_item = "basic_materials:energy_crystal_simple" + signs_lib.lbm_restore_nodes = {} signs_lib.old_fenceposts = {} signs_lib.old_fenceposts_replacement_signs = {} @@ -180,7 +182,7 @@ function signs_lib.delete_objects(pos) end end -function signs_lib.spawn_entity(pos, texture) +function signs_lib.spawn_entity(pos, texture, glow) local node = minetest.get_node(pos) local def = minetest.registered_items[node.name] if not def or not def.entity_info then return end @@ -229,6 +231,10 @@ function signs_lib.spawn_entity(pos, texture) end end + if glow ~= "" then + obj:set_properties( {glow = tonumber(glow * 5)} ) + end + if yaw then obj:set_rotation({x = pitch, y = yaw, z=0}) @@ -247,14 +253,15 @@ function signs_lib.spawn_entity(pos, texture) end end -function signs_lib.set_obj_text(pos, text) +function signs_lib.set_obj_text(pos, text, glow) local split = signs_lib.split_lines_and_words local text_ansi = Utf8ToAnsi(text) local n = minetest.registered_nodes[minetest.get_node(pos).name] signs_lib.delete_objects(pos) -- only create sign entity for actual text if text_ansi and text_ansi ~= "" then - signs_lib.spawn_entity(pos, signs_lib.make_sign_texture(split(text_ansi), pos) ) + signs_lib.spawn_entity(pos, + signs_lib.make_sign_texture(split(text_ansi), pos), glow) end end @@ -707,6 +714,12 @@ function signs_lib.rightclick_sign(pos, node, player, itemstack, pointed_thing) end function signs_lib.destruct_sign(pos) + local meta = minetest.get_meta(pos) + local glow = meta:get_string("glow") + if glow ~= "" and not minetest.is_creative_enabled("") then + local num = tonumber(glow) + minetest.add_item(pos, ItemStack(signs_lib.glow_item .. " " .. num)) + end signs_lib.delete_objects(pos) end @@ -720,6 +733,30 @@ local function make_infotext(text) return table.concat(lines2, "\n") end +function signs_lib.glow(pos, node, puncher) + local name = puncher:get_player_name() + if minetest.is_protected(pos, name) then + return + end + local tool = puncher:get_wielded_item() + if tool:get_name() == signs_lib.glow_item then + local meta = minetest.get_meta(pos) + local glow = tonumber(meta:get_string("glow")) + if not glow then + glow = 1 + elseif glow < 3 then + glow = glow + 1 + else + return -- already at brightest level + end + if not minetest.is_creative_enabled(name) then + tool:take_item() + puncher:set_wielded_item(tool) + end + meta:set_string("glow", glow) + end +end + function signs_lib.update_sign(pos, fields) local meta = minetest.get_meta(pos) @@ -737,7 +774,9 @@ function signs_lib.update_sign(pos, fields) meta:set_string("text", text) meta:set_string("infotext", ownstr..make_infotext(text).." ") - signs_lib.set_obj_text(pos, text) + + local glow = meta:get_string("glow") + signs_lib.set_obj_text(pos, text, glow) end function signs_lib.can_modify(pos, player) @@ -902,6 +941,23 @@ function signs_lib.register_fence_with_sign() minetest.log("warning", "[signs_lib] ".."Attempt to call no longer used function signs_lib.register_fence_with_sign()") end +local use_glow = function(pos, node, puncher, pointed_thing) + if puncher then -- if e.g. a machine tries to punch; only a real person should change the lighting + signs_lib.glow(pos, node, puncher) + end + return signs_lib.update_sign(pos) +end + +local glow_drops = function(pos, oldnode, oldmetadata, digger) + if minetest.is_creative_enabled(digger:get_player_name()) then + return + end + local glow = oldmetadata and oldmetadata.fields and oldmetadata.fields.glow + if glow then + minetest.add_item(pos, ItemStack(signs_lib.glow_item .. " " .. glow)) + end +end + function signs_lib.register_sign(name, raw_def) local def = table.copy(raw_def) @@ -917,9 +973,16 @@ function signs_lib.register_sign(name, raw_def) def.after_place_node = raw_def.after_place_node or signs_lib.after_place_node if raw_def.entity_info then + + if def.allow_glow ~= false then + def.on_punch = raw_def.on_punch or use_glow + def.after_dig_node = raw_def.after_dig_node or glow_drops + else + def.on_punch = raw_def.on_punch or signs_lib.update_sign + end + def.on_rightclick = raw_def.on_rightclick or signs_lib.rightclick_sign def.on_destruct = raw_def.on_destruct or signs_lib.destruct_sign - def.on_punch = raw_def.on_punch or signs_lib.update_sign def.number_of_lines = raw_def.number_of_lines or signs_lib.standard_lines def.horiz_scaling = raw_def.horiz_scaling or signs_lib.standard_hscale def.vert_scaling = raw_def.vert_scaling or signs_lib.standard_vscale diff --git a/mods/skinsdb/meta/character_2034.txt b/mods/skinsdb/meta/character_2034.txt new file mode 100644 index 00000000..47fdfc10 --- /dev/null +++ b/mods/skinsdb/meta/character_2034.txt @@ -0,0 +1,3 @@ +Petra Ral +ne4eburek +CC BY-SA 3.0 diff --git a/mods/skinsdb/meta/character_2035.txt b/mods/skinsdb/meta/character_2035.txt new file mode 100644 index 00000000..ad183005 --- /dev/null +++ b/mods/skinsdb/meta/character_2035.txt @@ -0,0 +1,3 @@ +character_CTF_blue_knight +Sam_0 +CC BY 3.0 diff --git a/mods/skinsdb/meta/character_2036.txt b/mods/skinsdb/meta/character_2036.txt new file mode 100644 index 00000000..658dd047 --- /dev/null +++ b/mods/skinsdb/meta/character_2036.txt @@ -0,0 +1,3 @@ +character_CTF_red_knight +Sam_0 +CC BY 4.0 diff --git a/mods/skinsdb/meta/character_2037.txt b/mods/skinsdb/meta/character_2037.txt new file mode 100644 index 00000000..35083da8 --- /dev/null +++ b/mods/skinsdb/meta/character_2037.txt @@ -0,0 +1,3 @@ +character_CTF_red_medic +Sam_0 +CC BY 4.0 diff --git a/mods/skinsdb/textures/character_2034.png b/mods/skinsdb/textures/character_2034.png new file mode 100644 index 00000000..d6e99de8 Binary files /dev/null and b/mods/skinsdb/textures/character_2034.png differ diff --git a/mods/skinsdb/textures/character_2035.png b/mods/skinsdb/textures/character_2035.png new file mode 100644 index 00000000..c10f97db Binary files /dev/null and b/mods/skinsdb/textures/character_2035.png differ diff --git a/mods/skinsdb/textures/character_2036.png b/mods/skinsdb/textures/character_2036.png new file mode 100644 index 00000000..11d4561d Binary files /dev/null and b/mods/skinsdb/textures/character_2036.png differ diff --git a/mods/skinsdb/textures/character_2037.png b/mods/skinsdb/textures/character_2037.png new file mode 100644 index 00000000..77c59ac2 Binary files /dev/null and b/mods/skinsdb/textures/character_2037.png differ diff --git a/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr b/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr index 8395bc53..ccd8084b 100644 --- a/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr +++ b/mods/techpack/tubelib_addons3/locale/tubelib_addons3.de.tr @@ -21,7 +21,7 @@ HighPerf Pusher=HighPerf Schieber ### pushing_chest.lua ### -HighPerf Pushing Chest=HighPerf Shiebende Kiste +HighPerf Pushing Chest=HighPerf Schiebende Kiste ### teleporter.lua ### diff --git a/mods/tubelib2/README.md b/mods/tubelib2/README.md index e7c9c2c4..8403a595 100644 --- a/mods/tubelib2/README.md +++ b/mods/tubelib2/README.md @@ -88,5 +88,6 @@ Textures: CC0 - 2020-02-02 v1.8 * 'special nodes' as alternative to 'secondary nodes' introduced - 2020-05-31 v1.9 * Generator function 'get_tube_line' added, storage improvements - 2021-01-23 v2.0 * Add functions for easy & fast 'valid side' checking (PR #8) +- 2021-05-24 v2.1 * Add API functions 'register_on_tube_update2' diff --git a/mods/tubelib2/internal1.lua b/mods/tubelib2/internal1.lua index d4eeda0f..daa2d2b5 100644 --- a/mods/tubelib2/internal1.lua +++ b/mods/tubelib2/internal1.lua @@ -102,8 +102,12 @@ function Tube:update_secondary_node(pos1, dir1, pos2, dir2) local node,_ = self:get_secondary_node(pos1) if node then local ndef = minetest.registered_nodes[node.name] or {} + -- New functions if ndef.tubelib2_on_update2 then ndef.tubelib2_on_update2(pos1, dir1, self, node) + elseif self.clbk_update_secondary_node2 then + self.clbk_update_secondary_node2(pos1, dir1, self, node) + -- Legacy functions elseif ndef.tubelib2_on_update then ndef.tubelib2_on_update(node, pos1, dir1, pos2, Turn180Deg[dir2]) elseif self.clbk_update_secondary_node then diff --git a/mods/tubelib2/tube_api.lua b/mods/tubelib2/tube_api.lua index e9996e45..b7789b42 100644 --- a/mods/tubelib2/tube_api.lua +++ b/mods/tubelib2/tube_api.lua @@ -13,7 +13,7 @@ ]]-- -- Version for compatibility checks, see readme.md/history -tubelib2.version = 2.0 +tubelib2.version = 2.1 -- for lazy programmers local S = function(pos) if pos then return minetest.pos_to_string(pos) end end @@ -320,6 +320,12 @@ function Tube:register_on_tube_update(update_secondary_node) self.clbk_update_secondary_node = update_secondary_node end +-- Called for each connected node when the tube connection has been changed. +-- func(pos1, out_dir, self, node) +function Tube:register_on_tube_update2(update_secondary_node2) + self.clbk_update_secondary_node2 = update_secondary_node2 +end + function Tube:get_pos(pos, dir) return vector.add(pos, Dir6dToVector[dir or 0]) end diff --git a/mods/unified_inventory/internal.lua b/mods/unified_inventory/internal.lua index 6113300d..f4d8b442 100644 --- a/mods/unified_inventory/internal.lua +++ b/mods/unified_inventory/internal.lua @@ -54,7 +54,7 @@ function ui.get_formspec(player, page) if not pagedef then return "" -- Invalid page name end - + local formspec = { "formspec_version[4]", "size["..ui_peruser.formw..","..ui_peruser.formh.."]",