From 2379b938283cd3dc93a3ebf1e902a751f5649e82 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 29 May 2021 19:38:01 +0200 Subject: [PATCH] update --- mods/3d_armor/3d_armor/api.lua | 8 +- mods/3d_armor/3d_armor_ui/init.lua | 2 +- mods/3d_armor/settingtypes.txt | 3 + mods/advtrains/advtrains/trainlogic.lua | 11 +++ mods/carts/cart_entity.lua | 10 +-- mods/carts/functions.lua | 6 +- mods/doors/init.lua | 5 +- mods/farming/crops/soy.lua | 15 +++- mods/mobs_redo/api.lua | 13 +--- mods/signs_lib/api.lua | 73 ++++++++++++++++-- mods/skinsdb/meta/character_2034.txt | 3 + mods/skinsdb/meta/character_2035.txt | 3 + mods/skinsdb/meta/character_2036.txt | 3 + mods/skinsdb/meta/character_2037.txt | 3 + mods/skinsdb/textures/character_2034.png | Bin 0 -> 2308 bytes mods/skinsdb/textures/character_2035.png | Bin 0 -> 1359 bytes mods/skinsdb/textures/character_2036.png | Bin 0 -> 1366 bytes mods/skinsdb/textures/character_2037.png | Bin 0 -> 1952 bytes .../locale/tubelib_addons3.de.tr | 2 +- mods/tubelib2/README.md | 1 + mods/tubelib2/internal1.lua | 4 + mods/tubelib2/tube_api.lua | 8 +- mods/unified_inventory/internal.lua | 2 +- 23 files changed, 144 insertions(+), 31 deletions(-) create mode 100644 mods/skinsdb/meta/character_2034.txt create mode 100644 mods/skinsdb/meta/character_2035.txt create mode 100644 mods/skinsdb/meta/character_2036.txt create mode 100644 mods/skinsdb/meta/character_2037.txt create mode 100644 mods/skinsdb/textures/character_2034.png create mode 100644 mods/skinsdb/textures/character_2035.png create mode 100644 mods/skinsdb/textures/character_2036.png create mode 100644 mods/skinsdb/textures/character_2037.png 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 0000000000000000000000000000000000000000..d6e99de8c1f0362ecc10cdf8a439f3a2d32aa3f5 GIT binary patch literal 2308 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%0Ac{xlfP*!=OKseV=QqRMbr5w2gn}Jc*?^xfmw{g zSDuf>G)_YbtrLKBNjV@%-a*sfbMZiuBzvG^Y?GA^ah{}NkxavIdTs_GpN0HA0A>K- zJVg*sKb)MTTtMN23PlSnClqp){*^;69}yXZc%eR~ALRtnmZNwF=^Q|-qP%K@jL z5Ku*sF)xtcTdCgx9Eo*s6rxvy#ETzu2mW+pvw= zu8h~IhT*-R+_aS4w3XkunKB*_FdPmr9S<)Y4mu+eE*uUp9S-Bbqv5=t-?^L6uaw-g zlmGw!Ha6?xzM$Z{oZz~g;JcmNvXacDhTgZA-?*CGvyxCpMky*TI4C2M9UX8N7j_sJ zNe>TM5)w%`FlH4MksTd@8X9yL7o#B|f*KlY78Yh^W*#0RfqQyrR7ss6Adej#f_i#h z6BB3^6`h-#TS-4A9vfUgH)9kOToV(Ubz{@DfwGl#U=tJRE;}y(0004WQchC$3t za0^9o;`slc?%oN(7^gGsOurGwozVVnckdILmP$8FYb}@ms6fmjsHB|}wOP5$Z0a}; z#o_$#TFxYwD%>a%x5z6MUR(uuHe3|KQL6yAq_3~9Z}95JpL}}x@@Jo)|D7oS0{~+e z0ZhJ*Dpapr-Q2u(z4jph#v@?`U?HHsQMhsQ>gE?;-u(9f;uq=#UdUCy`udx1zx)28 z5*m$vDuK9uk*}4=jUR5^y8h!&D*&nhA8z6$*CilhtJ%DLyH?v?0eGy@VBYF6)_Lm= zgc^E|7mGZn8-%!bTD;D=+its@tC}I{6fj>>o0iKkXoeM-zH7AtoVu0M! zladJ_fq^Z-oJ=##(t{n&^lrX?)G!efDg3_jz;s#f$Cc^Ics1yv9wpuIqKz%-YTnz!s;V zGN4*6U#)?Dsl9A=yUmv{0af!k0*43(Nq$w%gR^H~M`!bd`@2Dt(YY=0{ z;z1-u@d!Qi1p2^R{2xF(0*1q0Z-{`wV4x5KFUEeyBUr;tnZ9(Pa%KkTBOnqX_5c8V z%HZk2*aoAg0FV%|svkY2oU{x${v*N+hC>O!wApwJFN`W-H2PD7qd2usrVMZlQh?rY za&&wgOMo{XD?l9M{!GEBGfm~32Mnbqkp#p5u*ZL~Sj|HL*~eJoG>WG4PXjCn;o%!0ADB!gd!Q3+6HNvj%q z0YI}^1~>zqM7`5@z3AjjDT-iF9!PTvmjKuhwTIH#2`EBiM>vDfqbNE8fHaawi&_}z YZ{El+|5Ebz2LJ#707*qoM6N<$g8d0>NB{r; literal 0 HcmV?d00001 diff --git a/mods/skinsdb/textures/character_2037.png b/mods/skinsdb/textures/character_2037.png new file mode 100644 index 0000000000000000000000000000000000000000..77c59ac2e9be62fad63f7fbb84b6e264aba57276 GIT binary patch literal 1952 zcmV;R2VeM!P)27NF&+<86B9BX z4>BGQRTC349}qMj5I7zZSrimBAP`y<6g40aH6Rf+ArUqq5j-CgHz5&S6%}6<6*nRg zHzE=)Bpo;+5;!9gFC`s0BN9I$6gndkV-^-UBojI$6FMXmJ0uf3Bot>C7ds^sXcree zB@;X)6hk8wJSG%8CKWv<6g?&tY#11A7#Kb$6+R~xMkN+MC>B5{7ChZd65{O#p0KJ6&B}r&0iLUOsVP zKXhO|bYekjYHEURNO^a6czAe{d{Kpkg@%QNot>Sfqo}8+r_7~>tgNinrGKxjveu@2 z)~0~gr-9d}e%Gji*Qtissf5_7gxIQu*s6!vtB2XFhtRK-+OCP(u8iBSinzAC+pvw> zv5woZkKD13+p>|{vXb1gkleD8+_RC~vy$AilijnD+_aP2w3NHMyWO;u-L#e6wUynq zmfg0N-nN(Cx0l|xnBKUV-?*9IxSHR&n%}vb-@2RNx}4yWBpyIxv;=iHdzoO&7qt(u}*3Pun&b8Ljwcpsq-`T|9*~RGN)#&8a=;hVv z=I!w95$I9}00001bW%=J06^y0W&i*L#z{m$R2Ug;!Rw11 z7qZz5U z@-hd%o}y?V7*ku!mBj^&5qnyF8z}sZtt`XyCKpm%Vk(m@dO3Q6hnD)?DtPzwvV_2! zxRyb;T4^lNv6vc4^%Bo_u2}Hu6BVy_S>)(4$+LmAlGJ6jekb&E$G=T=qN01Veuh_e zN%~1gF(A=t(ew)2aISWWKTz}=YRN=dH+7j1h}6rowWbhtm(||omz2GRS`MO0S7(U? z*$YIS>YM3N?)mmZ1K1~aT;rsFxC=^`h}_*z?JNga^Y;sU?lwF#KZeW&0It1et%NGWCYMqoaZLa-w+!2A(7G7p$w z2SSLZH`EkbaTiLz1!bJKd*(uInWW}#IHYYZ{ z!qJnF!48f-z>06(iTOXx?3|hA|1?7?gsG6Ji>%VMLIaTrxrICxtYeJiZjR+)lpo`6 zW_Hf(P(>vu!O5Y#iGGtBU86>x>b{=jQj35)%>=;xAeZJQEYXV~xdN zk6O%0^E*L_d-=Ts20Op?1+|?On)&@1p#vZAl`|Ie*}n2B+nQ}-F_5o{Y)&4>u@c|zt36}`h&!0VbQR^m4gnZ9@?a7X7?`8I&4B_XqTUez*7G!Bm zNKEJ}hJJbieefgrj=%m9LhR}Lo-Zbro3m`$@*PF=V`f<;rVSQj69N(fV=FHnZm@jW zd_A4Vyr_Ols9$=>nytSPl(@{Ha41i0XN7M1g!o}hon=BlydmCN+uQs|^{a2TTBNgZ z`iHyuVD1@Bj?OJ%X)$Hah;AD!#wJ)2tg&TT9>CCj{>xKObE5rE{*^pRywCa`5>ILr z8tF+!v@57V;qY zj}1+X35l&eROm3G=w@!6=p;W753)jRn*vv%ui!jWoPYh$oQLvW3YDm mhVY1D37ybO(^NmjivI!&lP2?{=BM`n0000