From 8f4388c4c827cce1d20930ceab05bd1a0b419273 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 17:42:43 +1000 Subject: [PATCH 01/67] elytra less sensitive to landing, allows entering flight without as much downward velocity --- mods/PLAYER/mcl_playerplus/init.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index c3876269c..2c44a88d5 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -259,12 +259,17 @@ minetest.register_globalstep(function(dtime) player_vel_yaws[name] = player_vel_yaw local fly_pos = player:get_pos() - local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.5, z = fly_pos.z}).name + local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.05, z = fly_pos.z}).name local elytra = mcl_playerplus.elytra[player] + local function get_overall_velocity(vector) + local v = sqrt(vector.x^2 + vector.y^2 + vector.z^2) + return 0 + end + elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and not player:get_attach() - and (elytra.active or control.jump and player_velocity.y < -6) + and (elytra.active or (control.jump and player_velocity.y < -1)) and (fly_node == "air" or fly_node == "ignore") if elytra.active then @@ -629,7 +634,7 @@ minetest.register_on_joinplayer(function(player) swimDistance = 0, jump_cooldown = -1, -- Cooldown timer for jumping, we need this to prevent the jump exhaustion to increase rapidly } - mcl_playerplus.elytra[player] = {active = false, rocketing = 0} + mcl_playerplus.elytra[player] = {active = false, rocketing = 0, speed = 0} end) -- clear when player leaves From 696cc150b4b8dca04ef10d055ddc005ac12ce50e Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 20:12:53 +1000 Subject: [PATCH 02/67] broke elytra --- mods/PLAYER/mcl_playerplus/init.lua | 36 ++++++++++++++++++----------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 2c44a88d5..902eb12cc 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -263,8 +263,16 @@ minetest.register_globalstep(function(dtime) local elytra = mcl_playerplus.elytra[player] local function get_overall_velocity(vector) - local v = sqrt(vector.x^2 + vector.y^2 + vector.z^2) - return 0 + local v = math.sqrt(vector.x^2 + vector.y^2 + vector.z^2) + return v + end + + local function clamp(num, min, max) + return math.min(max, math.max(num, min)) + end + + if not elytra.active then + elytra.speed = 10 end elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" @@ -274,18 +282,18 @@ minetest.register_globalstep(function(dtime) if elytra.active then mcl_player.player_set_animation(player, "fly") - if player_velocity.y < -1.5 then - player:add_velocity({x=0, y=0.17, z=0}) - end - if math.abs(player_velocity.x) + math.abs(player_velocity.z) < 20 then - local dir = minetest.yaw_to_dir(player:get_look_horizontal()) - if degrees(player:get_look_vertical()) * -.01 < .1 then - look_pitch = degrees(player:get_look_vertical()) * -.01 - else - look_pitch = .1 - end - player:add_velocity({x=dir.x, y=look_pitch, z=dir.z}) - end + local max_speed = 10000 + local direction = player:get_look_dir() + -- local vel = player:get_velocity() + local speed_mult = clamp(elytra.speed - direction.y * dtime, -max_speed, max_speed) + elytra.speed = speed_mult + vel = direction + vel = vector.multiply(vel, speed_mult*100) + vel = { + x = clamp(vel.x, -max_speed, max_speed), + y = clamp(vel.y, -max_speed, max_speed), + z = clamp(vel.z, -max_speed, max_speed)} + player:set_velocity(vel) playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) if elytra.rocketing > 0 then From 177cf231b6b9a9b042a0d8b0c73f5d10b0ee1462 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 20:34:56 +1000 Subject: [PATCH 03/67] make elytra better again --- mods/PLAYER/mcl_playerplus/init.lua | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 902eb12cc..8a9771e46 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -282,18 +282,27 @@ minetest.register_globalstep(function(dtime) if elytra.active then mcl_player.player_set_animation(player, "fly") - local max_speed = 10000 + local slowdown_mult = 0.7 -- amount of vel to take + local max_speed = 1000 local direction = player:get_look_dir() - -- local vel = player:get_velocity() - local speed_mult = clamp(elytra.speed - direction.y * dtime, -max_speed, max_speed) + local v = player:get_velocity() + local speed_mult = clamp(elytra.speed - direction.y * 30 * dtime, -max_speed, max_speed) + speed_mult = speed_mult - slowdown_mult * speed_mult * dtime -- slow down + speed_mult = math.max(speed_mult, -1) elytra.speed = speed_mult vel = direction - vel = vector.multiply(vel, speed_mult*100) - vel = { - x = clamp(vel.x, -max_speed, max_speed), - y = clamp(vel.y, -max_speed, max_speed), - z = clamp(vel.z, -max_speed, max_speed)} - player:set_velocity(vel) + vel = vector.multiply(vel, speed_mult) + -- vel = { + -- x = clamp(vel.x, -max_speed, max_speed), + -- y = clamp(vel.y, -max_speed, max_speed), + -- z = clamp(vel.z, -max_speed, max_speed)} + + -- slow the player down so less spongy movement by applying half the inverse vel + -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken + v = vector.multiply(v, -0.3) + player:add_velocity(v) + vel.y = vel.y - (100 / math.max(speed_mult, 1)) * dtime + player:add_velocity(vel) playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) if elytra.rocketing > 0 then From 832b0afdd63ffc090ada94dcba67a8c4e41647eb Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 20:51:08 +1000 Subject: [PATCH 04/67] more reasonable values --- mods/PLAYER/mcl_playerplus/init.lua | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 8a9771e46..f786d696d 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -282,26 +282,29 @@ minetest.register_globalstep(function(dtime) if elytra.active then mcl_player.player_set_animation(player, "fly") - local slowdown_mult = 0.7 -- amount of vel to take - local max_speed = 1000 + local slowdown_mult = 0.2 -- amount of vel to take + local speedup_mult = 10 -- amount of speed to add based on look dir + local max_speed = 60 local direction = player:get_look_dir() local v = player:get_velocity() - local speed_mult = clamp(elytra.speed - direction.y * 30 * dtime, -max_speed, max_speed) + local direction_mult = clamp(direction.y*2, -0.5, 0.5) + local speed_mult = clamp(elytra.speed - direction_mult * speedup_mult * dtime, -max_speed, max_speed) speed_mult = speed_mult - slowdown_mult * speed_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) + speed_mult = math.min(speed_mult, max_speed) elytra.speed = speed_mult vel = direction vel = vector.multiply(vel, speed_mult) - -- vel = { - -- x = clamp(vel.x, -max_speed, max_speed), - -- y = clamp(vel.y, -max_speed, max_speed), - -- z = clamp(vel.z, -max_speed, max_speed)} + vel = { + x = clamp(vel.x, -max_speed, max_speed), + y = clamp(vel.y, -max_speed, max_speed), + z = clamp(vel.z, -max_speed, max_speed)} -- slow the player down so less spongy movement by applying half the inverse vel -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken v = vector.multiply(v, -0.3) player:add_velocity(v) - vel.y = vel.y - (100 / math.max(speed_mult, 1)) * dtime + vel.y = vel.y - (100 / math.max(speed_mult, 2)) * dtime player:add_velocity(vel) playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) From 20b229a9b9a5daf6e12ce441d83a409a2d82dc55 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 20:53:35 +1000 Subject: [PATCH 05/67] pitching up too far can make player fall fast --- mods/PLAYER/mcl_playerplus/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index f786d696d..1b938aaa1 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -304,7 +304,7 @@ minetest.register_globalstep(function(dtime) -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken v = vector.multiply(v, -0.3) player:add_velocity(v) - vel.y = vel.y - (100 / math.max(speed_mult, 2)) * dtime + vel.y = vel.y - (300 / math.max(speed_mult, 1)) * dtime player:add_velocity(vel) playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) From 9e1b0184c57d251c17b1863584f3808a01d93a2c Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 22:15:36 +1000 Subject: [PATCH 06/67] fireworks function, slight balancing, removed debug starting speed --- mods/PLAYER/mcl_playerplus/init.lua | 49 ++++++++++++++++------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 1b938aaa1..bf5143271 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -266,13 +266,17 @@ minetest.register_globalstep(function(dtime) local v = math.sqrt(vector.x^2 + vector.y^2 + vector.z^2) return v end + local function anglediff(a1, a2) + local a = a1 - a2 + return math.abs((a + math.pi) % (math.pi*2) - math.pi) + end local function clamp(num, min, max) return math.min(max, math.max(num, min)) end if not elytra.active then - elytra.speed = 10 + elytra.speed = 2 end elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" @@ -282,36 +286,26 @@ minetest.register_globalstep(function(dtime) if elytra.active then mcl_player.player_set_animation(player, "fly") - local slowdown_mult = 0.2 -- amount of vel to take + local slowdown_mult = 0.2 -- amount of vel to take per sec local speedup_mult = 10 -- amount of speed to add based on look dir - local max_speed = 60 + local max_speed = 120 local direction = player:get_look_dir() local v = player:get_velocity() - local direction_mult = clamp(direction.y*2, -0.5, 0.5) - local speed_mult = clamp(elytra.speed - direction_mult * speedup_mult * dtime, -max_speed, max_speed) + local direction_mult = clamp(-direction.y*2, -0.5, 0.5) + local speed_mult = clamp(elytra.speed + direction_mult * speedup_mult * dtime, -max_speed, max_speed) speed_mult = speed_mult - slowdown_mult * speed_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) elytra.speed = speed_mult vel = direction - vel = vector.multiply(vel, speed_mult) - vel = { - x = clamp(vel.x, -max_speed, max_speed), - y = clamp(vel.y, -max_speed, max_speed), - z = clamp(vel.z, -max_speed, max_speed)} - -- slow the player down so less spongy movement by applying half the inverse vel - -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken - v = vector.multiply(v, -0.3) - player:add_velocity(v) - vel.y = vel.y - (300 / math.max(speed_mult, 1)) * dtime - player:add_velocity(vel) playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) - if elytra.rocketing > 0 then elytra.rocketing = elytra.rocketing - dtime if vector.length(player_velocity) < 40 then - player:add_velocity(vector.multiply(player:get_look_dir(), 4)) + -- player:add_velocity(vector.multiply(player:get_look_dir(), 4)) + speed_mult = 30 + elytra.speed = speed_mult add_particle({ pos = fly_pos, velocity = {x = 0, y = 0, z = 0}, @@ -324,10 +318,23 @@ minetest.register_globalstep(function(dtime) glow = 5, }) end + else + elytra.rocketing = 0 + playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") end - else - elytra.rocketing = 0 - playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") + + vel = vector.multiply(vel, speed_mult) + vel = { + x = clamp(vel.x, -max_speed, max_speed), + y = clamp(vel.y, -max_speed, max_speed), + z = clamp(vel.z, -max_speed, max_speed)} + + -- slow the player down so less spongy movement by applying half the inverse vel + -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken + v = vector.multiply(v, -0.4) + player:add_velocity(v) + vel.y = vel.y - (200 / math.max(speed_mult+1, 1)) * dtime + player:add_velocity(vel) end if wielded_def and wielded_def._mcl_toollike_wield then From cd622783368ad4a9c803a221301a0a03d0ce20b1 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 23:01:27 +1000 Subject: [PATCH 07/67] improved code quality --- mods/PLAYER/mcl_playerplus/init.lua | 38 +++++++++++++++++------------ 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index bf5143271..c6c83dd9a 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -3,6 +3,7 @@ mcl_playerplus = { } local player_velocity_old = {x=0, y=0, z=0} +local player_position_old = {x=0, y=0, z=0} local get_connected_players = minetest.get_connected_players local dir_to_yaw = minetest.dir_to_yaw local get_item_group = minetest.get_item_group @@ -286,18 +287,20 @@ minetest.register_globalstep(function(dtime) if elytra.active then mcl_player.player_set_animation(player, "fly") - local slowdown_mult = 0.2 -- amount of vel to take per sec - local speedup_mult = 10 -- amount of speed to add based on look dir + local slowdown_mult = 1 -- amount of vel to take per sec + local fall_speed = 40 -- amount to fall down per sec in nodes + local speedup_mult = 15 -- amount of speed to add based on look dir local max_speed = 120 local direction = player:get_look_dir() - local v = player:get_velocity() + local player_vel = player:get_velocity() local direction_mult = clamp(-direction.y*2, -0.5, 0.5) - local speed_mult = clamp(elytra.speed + direction_mult * speedup_mult * dtime, -max_speed, max_speed) - speed_mult = speed_mult - slowdown_mult * speed_mult * dtime -- slow down + + local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime + speed_mult = speed_mult - slowdown_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) - elytra.speed = speed_mult - vel = direction + elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it + new_vel = direction -- use the facing direction as a base playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) if elytra.rocketing > 0 then @@ -323,18 +326,20 @@ minetest.register_globalstep(function(dtime) playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") end - vel = vector.multiply(vel, speed_mult) - vel = { - x = clamp(vel.x, -max_speed, max_speed), - y = clamp(vel.y, -max_speed, max_speed), - z = clamp(vel.z, -max_speed, max_speed)} + new_vel = vector.multiply(new_vel, speed_mult) + new_vel = { + x = clamp(new_vel.x, -max_speed, max_speed), + y = clamp(new_vel.y, -max_speed, max_speed), + z = clamp(new_vel.z, -max_speed, max_speed)} -- slow the player down so less spongy movement by applying half the inverse vel -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken - v = vector.multiply(v, -0.4) - player:add_velocity(v) - vel.y = vel.y - (200 / math.max(speed_mult+1, 1)) * dtime - player:add_velocity(vel) + -- this is far from ideal, but there's no good way to set_velocity on the player + player_vel = vector.multiply(player_vel, -0.4) + player:add_velocity(player_vel) + new_vel.y = new_vel.y - (400 / math.max(speed_mult, 2)) * dtime + new_vel.y = new_vel.y - fall_speed * dtime + player:add_velocity(new_vel) end if wielded_def and wielded_def._mcl_toollike_wield then @@ -350,6 +355,7 @@ minetest.register_globalstep(function(dtime) end player_velocity_old = player:get_velocity() or player:get_player_velocity() + player_position_old = player:get_pos() -- controls right and left arms pitch when shooting a bow or blocking From 368ffda75be1a66b8259d3db38e83d5a3066b1b6 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 1 Aug 2022 23:45:41 +1000 Subject: [PATCH 08/67] can only fly when pressed jump and cannot hold jump to enter fly mode, set speed to player velocity when entered fly mode --- mods/PLAYER/mcl_playerplus/init.lua | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index c6c83dd9a..94ebef52d 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -4,6 +4,7 @@ mcl_playerplus = { local player_velocity_old = {x=0, y=0, z=0} local player_position_old = {x=0, y=0, z=0} +local is_pressing_jump = false local get_connected_players = minetest.get_connected_players local dir_to_yaw = minetest.dir_to_yaw local get_item_group = minetest.get_item_group @@ -280,15 +281,21 @@ minetest.register_globalstep(function(dtime) elytra.speed = 2 end + local is_just_jumped = control.jump and not is_pressing_jump + is_pressing_jump = control.jump + if is_just_jumped and not elytra.active then + elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 20) + end + elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and not player:get_attach() - and (elytra.active or (control.jump and player_velocity.y < -1)) + and (elytra.active or (is_just_jumped and player_velocity.y < -0)) and (fly_node == "air" or fly_node == "ignore") if elytra.active then mcl_player.player_set_animation(player, "fly") local slowdown_mult = 1 -- amount of vel to take per sec - local fall_speed = 40 -- amount to fall down per sec in nodes + local fall_speed = 10 -- amount to fall down per sec in nodes local speedup_mult = 15 -- amount of speed to add based on look dir local max_speed = 120 local direction = player:get_look_dir() @@ -299,6 +306,7 @@ minetest.register_globalstep(function(dtime) speed_mult = speed_mult - slowdown_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) + elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it new_vel = direction -- use the facing direction as a base @@ -337,7 +345,7 @@ minetest.register_globalstep(function(dtime) -- this is far from ideal, but there's no good way to set_velocity on the player player_vel = vector.multiply(player_vel, -0.4) player:add_velocity(player_vel) - new_vel.y = new_vel.y - (400 / math.max(speed_mult, 2)) * dtime + new_vel.y = new_vel.y - (200 / math.max(speed_mult, 2)) * dtime new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) end From 2b5e3b5123505b943395ddf7cd2f6d2ca8a7f73a Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 00:14:24 +1000 Subject: [PATCH 09/67] code quality: combine add_velocity calls into one --- mods/PLAYER/mcl_playerplus/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 94ebef52d..726d05151 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -344,7 +344,8 @@ minetest.register_globalstep(function(dtime) -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken -- this is far from ideal, but there's no good way to set_velocity on the player player_vel = vector.multiply(player_vel, -0.4) - player:add_velocity(player_vel) + new_vel = vector.add(new_vel, player_vel) + new_vel.y = new_vel.y - (200 / math.max(speed_mult, 2)) * dtime new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) From 8378ca92e22ba92a562bf2fc8286141b8c7dd636 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 08:20:08 +1000 Subject: [PATCH 10/67] turning slows the player down in fly mode --- mods/PLAYER/mcl_playerplus/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 726d05151..b950aba91 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -300,12 +300,14 @@ minetest.register_globalstep(function(dtime) local max_speed = 120 local direction = player:get_look_dir() local player_vel = player:get_velocity() + local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) local direction_mult = clamp(-direction.y*2, -0.5, 0.5) local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) + speed_mult = speed_mult - (speed_mult * turn_amount / (math.pi*3)) elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it new_vel = direction -- use the facing direction as a base From 5fd66d1850b92545ddacbf404b74211c8c03755e Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 18:12:15 +1000 Subject: [PATCH 11/67] can pitch up without losing too much speed --- mods/PLAYER/mcl_playerplus/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index b950aba91..2b3e1555b 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -296,12 +296,13 @@ minetest.register_globalstep(function(dtime) mcl_player.player_set_animation(player, "fly") local slowdown_mult = 1 -- amount of vel to take per sec local fall_speed = 10 -- amount to fall down per sec in nodes - local speedup_mult = 15 -- amount of speed to add based on look dir + local speedup_mult = 10 -- amount of speed to add based on look dir local max_speed = 120 local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) - local direction_mult = clamp(-direction.y*2, -0.5, 0.5) + local direction_mult = clamp(-direction.y + 0, -1, 1) + if direction_mult < 0 then direction_mult = -(direction_mult^2) + direction_mult/2 end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down From 1468acf6d419822dfdea51016a59374eff405c0a Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 18:26:00 +1000 Subject: [PATCH 12/67] move player up to give clearance when start flying --- mods/PLAYER/mcl_playerplus/init.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 2b3e1555b..3448d9fa1 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -281,7 +281,7 @@ minetest.register_globalstep(function(dtime) elytra.speed = 2 end - local is_just_jumped = control.jump and not is_pressing_jump + local is_just_jumped = control.jump and not is_pressing_jump and not elytra.active is_pressing_jump = control.jump if is_just_jumped and not elytra.active then elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 20) @@ -293,6 +293,9 @@ minetest.register_globalstep(function(dtime) and (fly_node == "air" or fly_node == "ignore") if elytra.active then + if is_just_jumped then -- move the player up when they start flying to give some clearance + player:set_pos(vector.offset(player:get_pos(), 0, 0.8, 0)) + end mcl_player.player_set_animation(player, "fly") local slowdown_mult = 1 -- amount of vel to take per sec local fall_speed = 10 -- amount to fall down per sec in nodes From 0f6a51a03159a832b130ae0df82f33127fcd4ab2 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 18:39:15 +1000 Subject: [PATCH 13/67] remove unused file scope variables --- mods/PLAYER/mcl_playerplus/init.lua | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 3448d9fa1..7257290b9 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -2,8 +2,6 @@ mcl_playerplus = { elytra = {}, } -local player_velocity_old = {x=0, y=0, z=0} -local player_position_old = {x=0, y=0, z=0} local is_pressing_jump = false local get_connected_players = minetest.get_connected_players local dir_to_yaw = minetest.dir_to_yaw @@ -369,10 +367,6 @@ minetest.register_globalstep(function(dtime) set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,4.9,1.8), vector.new(135,0,90)) end - player_velocity_old = player:get_velocity() or player:get_player_velocity() - player_position_old = player:get_pos() - - -- controls right and left arms pitch when shooting a bow or blocking if mcl_shields.is_blocking(player) == 2 then set_bone_position_conditional(player, "Arm_Right_Pitch_Control", vector.new(-3, 5.785, 0), vector.new(20, -20, 0)) From c80012a14fe4bb5bdf25def688feda3e31969ce4 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 21:23:05 +1000 Subject: [PATCH 14/67] fix gravity not being reset when died after rocketing --- mods/PLAYER/mcl_playerplus/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 7257290b9..b46414646 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -333,9 +333,6 @@ minetest.register_globalstep(function(dtime) glow = 5, }) end - else - elytra.rocketing = 0 - playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") end new_vel = vector.multiply(new_vel, speed_mult) @@ -353,6 +350,9 @@ minetest.register_globalstep(function(dtime) new_vel.y = new_vel.y - (200 / math.max(speed_mult, 2)) * dtime new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) + else + elytra.rocketing = 0 + playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") end if wielded_def and wielded_def._mcl_toollike_wield then From 5c085bd28f2fca9df138a73e270748f859c9d781 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 22:06:19 +1000 Subject: [PATCH 15/67] prevent player gaining infinite momentum by spamming jump while running, added dtime dependent velocity --- mods/PLAYER/mcl_playerplus/init.lua | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index b46414646..e6d000b0c 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -284,6 +284,11 @@ minetest.register_globalstep(function(dtime) if is_just_jumped and not elytra.active then elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 20) end + -- don't let player get too fast by spamming jump + local block_below = minetest.get_node(vector.offset(player:get_velocity(), 0, -0.7, 0)).name + if minetest.registered_nodes[block_below].walkable then + elytra.speed = clamp(elytra.speed, -1, 5) + end elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and not player:get_attach() @@ -298,18 +303,20 @@ minetest.register_globalstep(function(dtime) local slowdown_mult = 1 -- amount of vel to take per sec local fall_speed = 10 -- amount to fall down per sec in nodes local speedup_mult = 10 -- amount of speed to add based on look dir - local max_speed = 120 + local max_speed = 300 local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) local direction_mult = clamp(-direction.y + 0, -1, 1) - if direction_mult < 0 then direction_mult = -(direction_mult^2) + direction_mult/2 end + if direction_mult < 0 then direction_mult = -(direction_mult^2) end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) - speed_mult = speed_mult - (speed_mult * turn_amount / (math.pi*3)) + if turn_amount > 0.1 then + speed_mult = speed_mult - (speed_mult * turn_amount / (math.pi*3)) + end elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it new_vel = direction -- use the facing direction as a base @@ -335,7 +342,7 @@ minetest.register_globalstep(function(dtime) end end - new_vel = vector.multiply(new_vel, speed_mult) + new_vel = vector.multiply(new_vel, speed_mult * dtime * 30) new_vel = { x = clamp(new_vel.x, -max_speed, max_speed), y = clamp(new_vel.y, -max_speed, max_speed), @@ -344,7 +351,7 @@ minetest.register_globalstep(function(dtime) -- slow the player down so less spongy movement by applying half the inverse vel -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken -- this is far from ideal, but there's no good way to set_velocity on the player - player_vel = vector.multiply(player_vel, -0.4) + player_vel = vector.multiply(player_vel, -0.4 * dtime * 30) new_vel = vector.add(new_vel, player_vel) new_vel.y = new_vel.y - (200 / math.max(speed_mult, 2)) * dtime From 32a57133ac648a5266bd5659b3dbb5bab1aecfec Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 22:47:51 +1000 Subject: [PATCH 16/67] use dtime --- mods/PLAYER/mcl_playerplus/init.lua | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index e6d000b0c..e09c463f7 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -314,8 +314,8 @@ minetest.register_globalstep(function(dtime) speed_mult = speed_mult - slowdown_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) - if turn_amount > 0.1 then - speed_mult = speed_mult - (speed_mult * turn_amount / (math.pi*3)) + if turn_amount > 0.3 then + speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*3))) end elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it @@ -342,11 +342,12 @@ minetest.register_globalstep(function(dtime) end end - new_vel = vector.multiply(new_vel, speed_mult * dtime * 30) + new_vel = vector.multiply(new_vel, speed_mult) new_vel = { x = clamp(new_vel.x, -max_speed, max_speed), y = clamp(new_vel.y, -max_speed, max_speed), z = clamp(new_vel.z, -max_speed, max_speed)} + new_vel = vector.multiply(new_vel, dtime * 30) -- slow the player down so less spongy movement by applying half the inverse vel -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken @@ -697,6 +698,9 @@ end) -- Don't change HP if the player falls in the water or through End Portal: mcl_damage.register_modifier(function(obj, damage, reason) if reason.type == "fall" then + if minetest.is_creative_enabled(obj:get_player_name()) then + return 0 + end local pos = obj:get_pos() local node = minetest.get_node(pos) local velocity = obj:get_velocity() or obj:get_player_velocity() or {x=0,y=-10,z=0} From 12af0e7de8fbba8a4174b3a32fae969cbb799099 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 23:42:04 +1000 Subject: [PATCH 17/67] semi-working on 0.3 server step --- mods/PLAYER/mcl_playerplus/init.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index e09c463f7..84a1af04f 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -300,15 +300,15 @@ minetest.register_globalstep(function(dtime) player:set_pos(vector.offset(player:get_pos(), 0, 0.8, 0)) end mcl_player.player_set_animation(player, "fly") - local slowdown_mult = 1 -- amount of vel to take per sec - local fall_speed = 10 -- amount to fall down per sec in nodes + local slowdown_mult = 0.2 -- amount of vel to take per sec + local fall_speed = 20 -- amount to fall down per sec in nodes local speedup_mult = 10 -- amount of speed to add based on look dir - local max_speed = 300 + local max_speed = 100 local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) - local direction_mult = clamp(-direction.y + 0, -1, 1) - if direction_mult < 0 then direction_mult = -(direction_mult^2) end + local direction_mult = clamp(-direction.y + 0, -0.8, 1) + if direction_mult < 0 then direction_mult = -(direction_mult^2) / 2 end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down @@ -326,7 +326,7 @@ minetest.register_globalstep(function(dtime) elytra.rocketing = elytra.rocketing - dtime if vector.length(player_velocity) < 40 then -- player:add_velocity(vector.multiply(player:get_look_dir(), 4)) - speed_mult = 30 + speed_mult = 10 elytra.speed = speed_mult add_particle({ pos = fly_pos, @@ -347,15 +347,15 @@ minetest.register_globalstep(function(dtime) x = clamp(new_vel.x, -max_speed, max_speed), y = clamp(new_vel.y, -max_speed, max_speed), z = clamp(new_vel.z, -max_speed, max_speed)} - new_vel = vector.multiply(new_vel, dtime * 30) + -- new_vel = vector.multiply(new_vel, dtime * 30) -- slow the player down so less spongy movement by applying half the inverse vel -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken -- this is far from ideal, but there's no good way to set_velocity on the player - player_vel = vector.multiply(player_vel, -0.4 * dtime * 30) + player_vel = vector.multiply(player_vel, -0.1) new_vel = vector.add(new_vel, player_vel) - new_vel.y = new_vel.y - (200 / math.max(speed_mult, 2)) * dtime + new_vel.y = new_vel.y - (100 / math.max(speed_mult, 1)) * dtime new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) else From aa93ce4b3a2e4673484078e1b50b2a9ba5153144 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 23:45:20 +1000 Subject: [PATCH 18/67] tweaked slowdown on pitch up --- mods/PLAYER/mcl_playerplus/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 84a1af04f..f5998760b 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -307,7 +307,7 @@ minetest.register_globalstep(function(dtime) local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) - local direction_mult = clamp(-direction.y + 0, -0.8, 1) + local direction_mult = clamp(-direction.y - 0.2, -0.8, 1) if direction_mult < 0 then direction_mult = -(direction_mult^2) / 2 end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime From 845e43c1439073c90e65dab8cdbc3ad475afb38e Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Tue, 2 Aug 2022 23:51:21 +1000 Subject: [PATCH 19/67] tweaked several things --- mods/PLAYER/mcl_playerplus/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index f5998760b..19b8c7839 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -302,7 +302,7 @@ minetest.register_globalstep(function(dtime) mcl_player.player_set_animation(player, "fly") local slowdown_mult = 0.2 -- amount of vel to take per sec local fall_speed = 20 -- amount to fall down per sec in nodes - local speedup_mult = 10 -- amount of speed to add based on look dir + local speedup_mult = 5 -- amount of speed to add based on look dir local max_speed = 100 local direction = player:get_look_dir() local player_vel = player:get_velocity() @@ -355,7 +355,7 @@ minetest.register_globalstep(function(dtime) player_vel = vector.multiply(player_vel, -0.1) new_vel = vector.add(new_vel, player_vel) - new_vel.y = new_vel.y - (100 / math.max(speed_mult, 1)) * dtime + new_vel.y = new_vel.y - (200 / math.max(speed_mult*10, 2)) * dtime new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) else From ece79cad8a69c49d24d9c03978241810554c35eb Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Wed, 3 Aug 2022 00:08:30 +1000 Subject: [PATCH 20/67] prevent player from getting hyperspeed while flying from ground --- mods/PLAYER/mcl_playerplus/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 19b8c7839..cf8eafc2e 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -282,7 +282,7 @@ minetest.register_globalstep(function(dtime) local is_just_jumped = control.jump and not is_pressing_jump and not elytra.active is_pressing_jump = control.jump if is_just_jumped and not elytra.active then - elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 20) + elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 2) end -- don't let player get too fast by spamming jump local block_below = minetest.get_node(vector.offset(player:get_velocity(), 0, -0.7, 0)).name @@ -353,9 +353,10 @@ minetest.register_globalstep(function(dtime) -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken -- this is far from ideal, but there's no good way to set_velocity on the player player_vel = vector.multiply(player_vel, -0.1) + if speed_mult < 1 then player_vel.y = player_vel.y * 0.1 end new_vel = vector.add(new_vel, player_vel) - new_vel.y = new_vel.y - (200 / math.max(speed_mult*10, 2)) * dtime + new_vel.y = new_vel.y + clamp(speed_mult * dtime * 10, -10, 0) new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) else From b7a5a74ccf349f869f3f2d643efea0b03a31635a Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Wed, 3 Aug 2022 00:14:31 +1000 Subject: [PATCH 21/67] less pitch up slowdown --- mods/PLAYER/mcl_playerplus/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index cf8eafc2e..ae346b75e 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -308,7 +308,7 @@ minetest.register_globalstep(function(dtime) local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) local direction_mult = clamp(-direction.y - 0.2, -0.8, 1) - if direction_mult < 0 then direction_mult = -(direction_mult^2) / 2 end + if direction_mult < 0 then direction_mult = -(direction_mult^2) / 4 end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down From 4df51bac7291adb533a85a5440781cffda6a0add Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Wed, 3 Aug 2022 01:03:28 +1000 Subject: [PATCH 22/67] code quality, minor tweaks --- mods/PLAYER/mcl_playerplus/init.lua | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index ae346b75e..1c7c44532 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -302,13 +302,13 @@ minetest.register_globalstep(function(dtime) mcl_player.player_set_animation(player, "fly") local slowdown_mult = 0.2 -- amount of vel to take per sec local fall_speed = 20 -- amount to fall down per sec in nodes - local speedup_mult = 5 -- amount of speed to add based on look dir + local speedup_mult = 7 -- amount of speed to add based on look dir local max_speed = 100 local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) local direction_mult = clamp(-direction.y - 0.2, -0.8, 1) - if direction_mult < 0 then direction_mult = -(direction_mult^2) / 4 end + if direction_mult < 0 then direction_mult = -(direction_mult^2) / 2 end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down @@ -318,16 +318,12 @@ minetest.register_globalstep(function(dtime) speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*3))) end - elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it - new_vel = direction -- use the facing direction as a base - playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) if elytra.rocketing > 0 then elytra.rocketing = elytra.rocketing - dtime if vector.length(player_velocity) < 40 then -- player:add_velocity(vector.multiply(player:get_look_dir(), 4)) speed_mult = 10 - elytra.speed = speed_mult add_particle({ pos = fly_pos, velocity = {x = 0, y = 0, z = 0}, @@ -342,21 +338,19 @@ minetest.register_globalstep(function(dtime) end end + elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it + + local new_vel = direction -- use the facing direction as a base new_vel = vector.multiply(new_vel, speed_mult) - new_vel = { - x = clamp(new_vel.x, -max_speed, max_speed), - y = clamp(new_vel.y, -max_speed, max_speed), - z = clamp(new_vel.z, -max_speed, max_speed)} - -- new_vel = vector.multiply(new_vel, dtime * 30) -- slow the player down so less spongy movement by applying half the inverse vel - -- NOTE: do not set this higher than about 0.7 or the game will get the wrong vel and it will be broken + -- NOTE: do not set this higher than about 0.2 or the game will get the wrong vel and it will be broken -- this is far from ideal, but there's no good way to set_velocity on the player player_vel = vector.multiply(player_vel, -0.1) if speed_mult < 1 then player_vel.y = player_vel.y * 0.1 end new_vel = vector.add(new_vel, player_vel) - new_vel.y = new_vel.y + clamp(speed_mult * dtime * 10, -10, 0) + -- new_vel.y = new_vel.y + clamp(speed_mult * dtime * 10, -10, 0) new_vel.y = new_vel.y - fall_speed * dtime player:add_velocity(new_vel) else From 3c0992e58dfb5ab1e42807c93bb835c22aa4e976 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Wed, 3 Aug 2022 18:41:51 +1000 Subject: [PATCH 23/67] tweaks --- mods/PLAYER/mcl_playerplus/init.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 1c7c44532..48504f22b 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -300,15 +300,15 @@ minetest.register_globalstep(function(dtime) player:set_pos(vector.offset(player:get_pos(), 0, 0.8, 0)) end mcl_player.player_set_animation(player, "fly") - local slowdown_mult = 0.2 -- amount of vel to take per sec - local fall_speed = 20 -- amount to fall down per sec in nodes + local slowdown_mult = 0 -- amount of vel to take per sec + local fall_speed = 40 -- amount to fall down per sec in nodes local speedup_mult = 7 -- amount of speed to add based on look dir local max_speed = 100 local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) - local direction_mult = clamp(-direction.y - 0.2, -0.8, 1) - if direction_mult < 0 then direction_mult = -(direction_mult^2) / 2 end + local direction_mult = clamp(-direction.y - 0.1, -0.8, 1) + if direction_mult < 0 then direction_mult = -((direction_mult*2)^2) / 6 end local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime speed_mult = speed_mult - slowdown_mult * dtime -- slow down @@ -347,7 +347,7 @@ minetest.register_globalstep(function(dtime) -- NOTE: do not set this higher than about 0.2 or the game will get the wrong vel and it will be broken -- this is far from ideal, but there's no good way to set_velocity on the player player_vel = vector.multiply(player_vel, -0.1) - if speed_mult < 1 then player_vel.y = player_vel.y * 0.1 end + -- if speed_mult < 1 then player_vel.y = player_vel.y * 0.1 end new_vel = vector.add(new_vel, player_vel) -- new_vel.y = new_vel.y + clamp(speed_mult * dtime * 10, -10, 0) From cd6da88b3791ac6d7dfee3f0aababc8dfd21fa43 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Fri, 5 Aug 2022 14:43:48 +1000 Subject: [PATCH 24/67] tweaks again --- mods/PLAYER/mcl_playerplus/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 48504f22b..1a6bafb5c 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -301,7 +301,7 @@ minetest.register_globalstep(function(dtime) end mcl_player.player_set_animation(player, "fly") local slowdown_mult = 0 -- amount of vel to take per sec - local fall_speed = 40 -- amount to fall down per sec in nodes + local fall_speed = 20 -- amount to fall down per sec in nodes local speedup_mult = 7 -- amount of speed to add based on look dir local max_speed = 100 local direction = player:get_look_dir() @@ -315,10 +315,10 @@ minetest.register_globalstep(function(dtime) speed_mult = math.max(speed_mult, -1) speed_mult = math.min(speed_mult, max_speed) if turn_amount > 0.3 then - speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*3))) + speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*8))) end - playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.1) + playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.01) if elytra.rocketing > 0 then elytra.rocketing = elytra.rocketing - dtime if vector.length(player_velocity) < 40 then From 1263c43b5d83e21d4b14637c236447f6fcd80cba Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sat, 6 Aug 2022 14:38:42 +1000 Subject: [PATCH 25/67] elytra and other non-combat armour don't take durability damage when the player is attacked --- mods/ITEMS/mcl_armor/damage.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_armor/damage.lua b/mods/ITEMS/mcl_armor/damage.lua index ed616397d..ad0db64bf 100644 --- a/mods/ITEMS/mcl_armor/damage.lua +++ b/mods/ITEMS/mcl_armor/damage.lua @@ -33,7 +33,7 @@ mcl_damage.register_modifier(function(obj, damage, reason) local itemname = itemstack:get_name() local enchantments = mcl_enchanting.get_enchantments(itemstack) - if not flags.bypasses_armor then + if not flags.bypasses_armor and minetest.get_item_group(itemname, "non_combat_armor") == 0 then points = points + minetest.get_item_group(itemname, "mcl_armor_points") toughness = toughness + minetest.get_item_group(itemname, "mcl_armor_toughness") From 509fadfebb90c5f0b8571cc20d732f3a425c1f54 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 7 Aug 2022 00:38:20 +1000 Subject: [PATCH 26/67] fix is_pressing_jump being global --- mods/PLAYER/mcl_playerplus/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 1a6bafb5c..fb630c9e7 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -1,8 +1,8 @@ mcl_playerplus = { elytra = {}, + is_pressing_jump = {}, } -local is_pressing_jump = false local get_connected_players = minetest.get_connected_players local dir_to_yaw = minetest.dir_to_yaw local get_item_group = minetest.get_item_group @@ -279,8 +279,8 @@ minetest.register_globalstep(function(dtime) elytra.speed = 2 end - local is_just_jumped = control.jump and not is_pressing_jump and not elytra.active - is_pressing_jump = control.jump + local is_just_jumped = control.jump and not mcl_playerplus.is_pressing_jump[name] and not elytra.active + mcl_playerplus.is_pressing_jump[name] = control.jump if is_just_jumped and not elytra.active then elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 2) end From 02c92dc6f85ba463a01140618afc3d1fcb1ace07 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 7 Aug 2022 01:05:39 +1000 Subject: [PATCH 27/67] fix getting wrong node --- mods/PLAYER/mcl_playerplus/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index fb630c9e7..d662c4fb8 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -285,7 +285,7 @@ minetest.register_globalstep(function(dtime) elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 2) end -- don't let player get too fast by spamming jump - local block_below = minetest.get_node(vector.offset(player:get_velocity(), 0, -0.7, 0)).name + local block_below = minetest.get_node(vector.offset(player:get_pos(), 0, -0.7, 0)).name if minetest.registered_nodes[block_below].walkable then elytra.speed = clamp(elytra.speed, -1, 5) end From 5a8216ba43f85c06cc78c736e1a718147e83f905 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Sun, 7 Aug 2022 23:12:57 +1000 Subject: [PATCH 28/67] moved functions and constants out of global step (oops) --- mods/PLAYER/mcl_playerplus/init.lua | 43 +++++++++++++++-------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index d662c4fb8..d1fa68591 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -214,6 +214,24 @@ local function set_bone_position_conditional(player,b,p,r) --bone,position,rotat player:set_bone_position(b,p,r) end +local function get_overall_velocity(vector) + local v = math.sqrt(vector.x^2 + vector.y^2 + vector.z^2) + return v +end +local function anglediff(a1, a2) + local a = a1 - a2 + return math.abs((a + math.pi) % (math.pi*2) - math.pi) +end +local function clamp(num, min, max) + return math.min(max, math.max(num, min)) +end + +local elytra_vars = { + slowdown_mult = 0, -- amount of vel to take per sec + fall_speed = 20, -- amount to fall down per sec in nodes + speedup_mult = 7, -- amount of speed to add based on look dir + max_speed = 100, -- max amount to multiply against look direction when flying +} minetest.register_globalstep(function(dtime) @@ -262,19 +280,6 @@ minetest.register_globalstep(function(dtime) local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.05, z = fly_pos.z}).name local elytra = mcl_playerplus.elytra[player] - local function get_overall_velocity(vector) - local v = math.sqrt(vector.x^2 + vector.y^2 + vector.z^2) - return v - end - local function anglediff(a1, a2) - local a = a1 - a2 - return math.abs((a + math.pi) % (math.pi*2) - math.pi) - end - - local function clamp(num, min, max) - return math.min(max, math.max(num, min)) - end - if not elytra.active then elytra.speed = 2 end @@ -300,20 +305,16 @@ minetest.register_globalstep(function(dtime) player:set_pos(vector.offset(player:get_pos(), 0, 0.8, 0)) end mcl_player.player_set_animation(player, "fly") - local slowdown_mult = 0 -- amount of vel to take per sec - local fall_speed = 20 -- amount to fall down per sec in nodes - local speedup_mult = 7 -- amount of speed to add based on look dir - local max_speed = 100 local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) local direction_mult = clamp(-direction.y - 0.1, -0.8, 1) if direction_mult < 0 then direction_mult = -((direction_mult*2)^2) / 6 end - local speed_mult = elytra.speed + direction_mult * speedup_mult * dtime - speed_mult = speed_mult - slowdown_mult * dtime -- slow down + local speed_mult = elytra.speed + direction_mult * elytra_vars.speedup_mult * dtime + speed_mult = speed_mult - elytra_vars.slowdown_mult * dtime -- slow down speed_mult = math.max(speed_mult, -1) - speed_mult = math.min(speed_mult, max_speed) + speed_mult = math.min(speed_mult, elytra_vars.max_speed) if turn_amount > 0.3 then speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*8))) end @@ -351,7 +352,7 @@ minetest.register_globalstep(function(dtime) new_vel = vector.add(new_vel, player_vel) -- new_vel.y = new_vel.y + clamp(speed_mult * dtime * 10, -10, 0) - new_vel.y = new_vel.y - fall_speed * dtime + new_vel.y = new_vel.y - elytra_vars.fall_speed * dtime player:add_velocity(new_vel) else elytra.rocketing = 0 From 9fdcfcd89864572f7ee20fbe6d949da9f8d901d3 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 8 Aug 2022 00:05:00 +1000 Subject: [PATCH 29/67] significanltly more accurate values, much slower, more reliable physics, more comments --- mods/PLAYER/mcl_playerplus/init.lua | 35 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index d1fa68591..8ea73f17c 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -227,10 +227,12 @@ local function clamp(num, min, max) end local elytra_vars = { - slowdown_mult = 0, -- amount of vel to take per sec - fall_speed = 20, -- amount to fall down per sec in nodes - speedup_mult = 7, -- amount of speed to add based on look dir - max_speed = 100, -- max amount to multiply against look direction when flying + slowdown_mult = 0.05, -- amount of vel to take per sec + fall_speed = 1, -- amount of vel to fall down per sec + speedup_mult = 3, -- amount of speed to add based on look dir + max_speed = 30, -- max amount to multiply against look direction when flying + pitch_penalty = 0.8, -- if pitching up, slow down at this rate as a multiplier + rocket_speed = 5, } @@ -308,23 +310,22 @@ minetest.register_globalstep(function(dtime) local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) - local direction_mult = clamp(-direction.y - 0.1, -0.8, 1) - if direction_mult < 0 then direction_mult = -((direction_mult*2)^2) / 6 end + local direction_mult = clamp(-(direction.y), -1, 1) + if direction_mult < 0 then direction_mult = direction_mult * elytra_vars.pitch_penalty end local speed_mult = elytra.speed + direction_mult * elytra_vars.speedup_mult * dtime speed_mult = speed_mult - elytra_vars.slowdown_mult * dtime -- slow down - speed_mult = math.max(speed_mult, -1) - speed_mult = math.min(speed_mult, elytra_vars.max_speed) - if turn_amount > 0.3 then + speed_mult = clamp(speed_mult, -elytra_vars.max_speed, elytra_vars.max_speed) + if turn_amount > 0.3 and math.abs(direction.y) < 0.98 then -- don't do this if looking straight up / down speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*8))) end - playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", 0.01) + playerphysics.add_physics_factor(player, "gravity", "mcl_playerplus:elytra", elytra_vars.fall_speed) if elytra.rocketing > 0 then elytra.rocketing = elytra.rocketing - dtime if vector.length(player_velocity) < 40 then -- player:add_velocity(vector.multiply(player:get_look_dir(), 4)) - speed_mult = 10 + speed_mult = elytra_vars.rocket_speed add_particle({ pos = fly_pos, velocity = {x = 0, y = 0, z = 0}, @@ -341,20 +342,18 @@ minetest.register_globalstep(function(dtime) elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it - local new_vel = direction -- use the facing direction as a base - new_vel = vector.multiply(new_vel, speed_mult) + local new_vel = vector.multiply(direction, speed_mult) -- use the look dir and speed as a mult + -- new_vel.y = new_vel.y - elytra_vars.fall_speed * dtime -- make the player fall a set amount - -- slow the player down so less spongy movement by applying half the inverse vel + -- slow the player down so less spongy movement by applying some of the inverse velocity -- NOTE: do not set this higher than about 0.2 or the game will get the wrong vel and it will be broken - -- this is far from ideal, but there's no good way to set_velocity on the player + -- this is far from ideal, but there's no good way to set_velocity or slow down the player player_vel = vector.multiply(player_vel, -0.1) -- if speed_mult < 1 then player_vel.y = player_vel.y * 0.1 end new_vel = vector.add(new_vel, player_vel) - -- new_vel.y = new_vel.y + clamp(speed_mult * dtime * 10, -10, 0) - new_vel.y = new_vel.y - elytra_vars.fall_speed * dtime player:add_velocity(new_vel) - else + else -- reset things when you stop flying with elytra elytra.rocketing = 0 playerphysics.remove_physics_factor(player, "gravity", "mcl_playerplus:elytra") end From 99eca2ceb92b0d6966e147f3f6c7d5d517ca769b Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 8 Aug 2022 02:05:03 +1000 Subject: [PATCH 30/67] player will not be upside down when flying or swimming --- mods/PLAYER/mcl_playerplus/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 8ea73f17c..6efca4856 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -406,7 +406,7 @@ minetest.register_globalstep(function(dtime) -- sets eye height, and nametag color accordingly set_properties_conditional(player,{collisionbox = {-0.35,0,-0.35,0.35,0.8,0.35}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when flying - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) + set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new((75-degrees(dir_to_pitch(player_velocity))) , -player_vel_yaw + yaw, 0)) elseif parent then local parent_yaw = degrees(parent:get_yaw()) set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) @@ -422,11 +422,11 @@ minetest.register_globalstep(function(dtime) elseif get_item_group(mcl_playerinfo[name].node_head, "water") ~= 0 and is_sprinting(name) == true then -- set head pitch and yaw when swimming is_swimming = true - set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity)),player_vel_yaw - yaw,0)) + set_bone_position_conditional(player,"Head_Control", vector.new(0,6.3,0), vector.new(pitch-degrees(dir_to_pitch(player_velocity))+20,player_vel_yaw - yaw,0)) -- sets eye height, and nametag color accordingly set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) + set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new((75-degrees(dir_to_pitch(player_velocity))) , -player_vel_yaw + yaw, 0)) elseif get_item_group(mcl_playerinfo[name].node_head, "opaque") == 0 and get_item_group(mcl_playerinfo[name].node_head_top, "opaque") == 0 then -- sets eye height, and nametag color accordingly From 45c93e034076d10a87df2250d7915af8c4a45cef Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 8 Aug 2022 10:50:06 +1000 Subject: [PATCH 31/67] accurater physics, can't spam jump to gain speed on flat ground (needs work to allow mc like boosting) --- mods/PLAYER/mcl_playerplus/init.lua | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 6efca4856..4075b9372 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -228,10 +228,10 @@ end local elytra_vars = { slowdown_mult = 0.05, -- amount of vel to take per sec - fall_speed = 1, -- amount of vel to fall down per sec - speedup_mult = 3, -- amount of speed to add based on look dir + fall_speed = 0.3, -- amount of vel to fall down per sec + speedup_mult = 2, -- amount of speed to add based on look dir max_speed = 30, -- max amount to multiply against look direction when flying - pitch_penalty = 0.8, -- if pitching up, slow down at this rate as a multiplier + pitch_penalty = 1.3, -- if pitching up, slow down at this rate as a multiplier rocket_speed = 5, } @@ -289,12 +289,14 @@ minetest.register_globalstep(function(dtime) local is_just_jumped = control.jump and not mcl_playerplus.is_pressing_jump[name] and not elytra.active mcl_playerplus.is_pressing_jump[name] = control.jump if is_just_jumped and not elytra.active then - elytra.speed = clamp(get_overall_velocity(player:get_velocity()) - 1, 0, 2) - end - -- don't let player get too fast by spamming jump - local block_below = minetest.get_node(vector.offset(player:get_pos(), 0, -0.7, 0)).name - if minetest.registered_nodes[block_below].walkable then - elytra.speed = clamp(elytra.speed, -1, 5) + elytra.speed = clamp(get_overall_velocity(player:get_velocity()), 1, 5) + -- don't let player get too fast by spamming jump + local block_below = minetest.get_node(vector.offset(fly_pos, 0, -0.9, 0)).name + local block_below2 = minetest.get_node(vector.offset(fly_pos, 0, -1.9, 0)).name + if minetest.registered_nodes[block_below].walkable + or minetest.registered_nodes[block_below2].walkable then + elytra.speed = 1.5 + end end elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" @@ -310,7 +312,7 @@ minetest.register_globalstep(function(dtime) local direction = player:get_look_dir() local player_vel = player:get_velocity() local turn_amount = anglediff(minetest.dir_to_yaw(direction), minetest.dir_to_yaw(player_vel)) - local direction_mult = clamp(-(direction.y), -1, 1) + local direction_mult = clamp(-(direction.y+0.1), -1, 1) if direction_mult < 0 then direction_mult = direction_mult * elytra_vars.pitch_penalty end local speed_mult = elytra.speed + direction_mult * elytra_vars.speedup_mult * dtime From dd9c8b3f48e5a687c5b7bb5a6c95c35c0a9ab4b6 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Mon, 8 Aug 2022 11:50:23 +1000 Subject: [PATCH 32/67] more accurate physics again, prevent slow servers having slower flight --- mods/PLAYER/mcl_playerplus/init.lua | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 4075b9372..5bd369d2b 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -227,12 +227,12 @@ local function clamp(num, min, max) end local elytra_vars = { - slowdown_mult = 0.05, -- amount of vel to take per sec - fall_speed = 0.3, -- amount of vel to fall down per sec - speedup_mult = 2, -- amount of speed to add based on look dir - max_speed = 30, -- max amount to multiply against look direction when flying + slowdown_mult = 0.0, -- amount of vel to take per sec + fall_speed = 0.2, -- amount of vel to fall down per sec + speedup_mult = 4, -- amount of speed to add based on look dir + max_speed = 6, -- max amount to multiply against look direction when flying pitch_penalty = 1.3, -- if pitching up, slow down at this rate as a multiplier - rocket_speed = 5, + rocket_speed = 5.5, } @@ -316,7 +316,7 @@ minetest.register_globalstep(function(dtime) if direction_mult < 0 then direction_mult = direction_mult * elytra_vars.pitch_penalty end local speed_mult = elytra.speed + direction_mult * elytra_vars.speedup_mult * dtime - speed_mult = speed_mult - elytra_vars.slowdown_mult * dtime -- slow down + speed_mult = speed_mult - elytra_vars.slowdown_mult * clamp(dtime, 0.09, 0.2) -- slow down but don't overdo it speed_mult = clamp(speed_mult, -elytra_vars.max_speed, elytra_vars.max_speed) if turn_amount > 0.3 and math.abs(direction.y) < 0.98 then -- don't do this if looking straight up / down speed_mult = speed_mult - (speed_mult * (turn_amount / (math.pi*8))) @@ -344,7 +344,7 @@ minetest.register_globalstep(function(dtime) elytra.speed = speed_mult -- set the speed so you can keep track of it and add to it - local new_vel = vector.multiply(direction, speed_mult) -- use the look dir and speed as a mult + local new_vel = vector.multiply(direction, speed_mult * dtime * 30) -- use the look dir and speed as a mult -- new_vel.y = new_vel.y - elytra_vars.fall_speed * dtime -- make the player fall a set amount -- slow the player down so less spongy movement by applying some of the inverse velocity From 76839961c60008d29b99c21e5e79e9a34119ed2f Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Mon, 8 Aug 2022 20:12:44 -0400 Subject: [PATCH 33/67] Adds fire and lava collision to boats --- mods/ENTITIES/mcl_boats/init.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mods/ENTITIES/mcl_boats/init.lua b/mods/ENTITIES/mcl_boats/init.lua index 087cd7eae..1f1d85274 100644 --- a/mods/ENTITIES/mcl_boats/init.lua +++ b/mods/ENTITIES/mcl_boats/init.lua @@ -24,6 +24,10 @@ local function is_ice(pos) return is_group(pos, "ice") end +local function is_fire(pos) + return is_group(pos, "set_on_fire") +end + local function get_sign(i) if i == 0 then return 0 @@ -216,6 +220,13 @@ function boat.on_step(self, dtime, moveresult) on_water = false if not in_water and is_ice(waterp) then on_ice = true + elseif is_fire({x=p.x, y=p.y-boat_y_offset, z=p.z}) then + if self.object:get_hp() <= 0 then + boat.on_death(self, nil) + self.object:remove() + return + end + self.object:set_hp(self.object:get_hp()-1) else v_slowdown = 0.04 v_factor = 0.5 From b8af222538411204ef6bfd54941561d1797879a0 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Mon, 8 Aug 2022 20:26:31 -0400 Subject: [PATCH 34/67] Fixed remaining get_sky calls --- mods/ENVIRONMENT/mcl_weather/rain.lua | 2 +- mods/ENVIRONMENT/mcl_weather/skycolor.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index 2cf95022e..83b5359ba 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -91,7 +91,7 @@ end function mcl_weather.rain.add_player(player) if mcl_weather.players[player:get_player_name()] == nil then local player_meta = {} - player_meta.origin_sky = {player:get_sky()} + player_meta.origin_sky = {player:get_sky(true)} mcl_weather.players[player:get_player_name()] = player_meta update_sound[player:get_player_name()]=true end diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index b70702b4c..f98ee18c0 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -246,7 +246,7 @@ mcl_weather.skycolor = { get_current_bg_color = function() local players = mcl_weather.skycolor.utils.get_players(nil) if players[1] then - return players[1]:get_sky() + return players[1]:get_sky(true).sky_color end return nil end From 5da6f6812fc3efa7fa878c739d0cc56d1a31c26c Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Tue, 9 Aug 2022 12:23:44 -0400 Subject: [PATCH 35/67] faster boat death --- mods/ENTITIES/mcl_boats/init.lua | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/mods/ENTITIES/mcl_boats/init.lua b/mods/ENTITIES/mcl_boats/init.lua index f750e80eb..0b2d67730 100644 --- a/mods/ENTITIES/mcl_boats/init.lua +++ b/mods/ENTITIES/mcl_boats/init.lua @@ -223,12 +223,9 @@ function boat.on_step(self, dtime, moveresult) if not in_water and is_ice(waterp) then on_ice = true elseif is_fire({x=p.x, y=p.y-boat_y_offset, z=p.z}) then - if self.object:get_hp() <= 0 then - boat.on_death(self, nil) - self.object:remove() - return - end - self.object:set_hp(self.object:get_hp()-1) + boat.on_death(self, nil) + self.object:remove() + return else v_slowdown = 0.04 v_factor = 0.5 From 25491b3882edccb80ad67fbdf328a2f8ecfdabf5 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Wed, 10 Aug 2022 13:24:08 +1000 Subject: [PATCH 36/67] prevent player from gaining too much speed by pitching down and spamming jump --- mods/PLAYER/mcl_playerplus/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 5bd369d2b..5d6d23dec 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -283,7 +283,7 @@ minetest.register_globalstep(function(dtime) local elytra = mcl_playerplus.elytra[player] if not elytra.active then - elytra.speed = 2 + elytra.speed = 0 end local is_just_jumped = control.jump and not mcl_playerplus.is_pressing_jump[name] and not elytra.active @@ -295,7 +295,7 @@ minetest.register_globalstep(function(dtime) local block_below2 = minetest.get_node(vector.offset(fly_pos, 0, -1.9, 0)).name if minetest.registered_nodes[block_below].walkable or minetest.registered_nodes[block_below2].walkable then - elytra.speed = 1.5 + elytra.speed = 1 end end From 9603ee606cae66a9818abb183818c610798c9845 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 9 Aug 2022 01:32:48 +0200 Subject: [PATCH 37/67] fix at mod loadtime warning in mcl_info --- mods/HUD/mcl_info/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/HUD/mcl_info/init.lua b/mods/HUD/mcl_info/init.lua index 5331a9bd6..71f8d8ad0 100644 --- a/mods/HUD/mcl_info/init.lua +++ b/mods/HUD/mcl_info/init.lua @@ -106,7 +106,7 @@ local function info() end after(refresh_interval, info) end -info() +minetest.after(0,info) minetest.register_on_leaveplayer(function(p) local name = p:get_player_name() From 701aee323857a52b87a01ec7e4cddf0c566af72c Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 9 Aug 2022 01:34:43 +0200 Subject: [PATCH 38/67] Add modname to beacons mod.conf --- mods/ITEMS/mcl_beacons/mod.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ITEMS/mcl_beacons/mod.conf b/mods/ITEMS/mcl_beacons/mod.conf index 139a264b3..a8b7a467a 100644 --- a/mods/ITEMS/mcl_beacons/mod.conf +++ b/mods/ITEMS/mcl_beacons/mod.conf @@ -1,2 +1,3 @@ +name = mcl_beacons author=chmodsayshello depends=mcl_formspec, mcl_init, mcl_wip, mesecons_mvps, mcl_core, mcl_sounds, awards, mcl_achievements, mcl_mobitems, mcl_nether From e8baa1ae00acf1d4952dfd2b455d430e60f28841 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 9 Aug 2022 01:35:57 +0200 Subject: [PATCH 39/67] Fix undeclared var warning in mcl_weather --- mods/ENVIRONMENT/mcl_weather/rain.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ENVIRONMENT/mcl_weather/rain.lua b/mods/ENVIRONMENT/mcl_weather/rain.lua index 83b5359ba..7dcc48637 100644 --- a/mods/ENVIRONMENT/mcl_weather/rain.lua +++ b/mods/ENVIRONMENT/mcl_weather/rain.lua @@ -2,6 +2,7 @@ local PARTICLES_COUNT_RAIN = tonumber(minetest.settings:get("mcl_weather_rain_pa local PARTICLES_COUNT_THUNDER = tonumber(minetest.settings:get("mcl_weather_thunder_particles")) or 900 local get_connected_players = minetest.get_connected_players +local mgname = minetest.get_mapgen_setting("mg_name") mcl_weather.rain = { -- max rain particles created at time From 34ecb782a855af100c775e03adbffd309e4d16fd Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 9 Aug 2022 21:47:11 +0200 Subject: [PATCH 40/67] Fix dispenser and dropper crashing in 5.4 --- mods/ITEMS/REDSTONE/mcl_dispensers/init.lua | 4 ++-- mods/ITEMS/REDSTONE/mcl_droppers/init.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua b/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua index 94f0fcd8d..dce69f26a 100644 --- a/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua +++ b/mods/ITEMS/REDSTONE/mcl_dispensers/init.lua @@ -261,7 +261,7 @@ local dispenserdef = { local item_entity = minetest.add_item(droppos, dropitem) local drop_vel = vector.subtract(droppos, pos) local speed = 3 - item_entity:set_velocity(drop_vel * speed) + item_entity:set_velocity(vector.multiply(drop_vel,speed)) end else stack:take_item() @@ -278,7 +278,7 @@ local dispenserdef = { local item_entity = minetest.add_item(droppos, dropitem) local drop_vel = vector.subtract(droppos, pos) local speed = 3 - item_entity:set_velocity(drop_vel * speed) + item_entity:set_velocity(vector.multiply(drop_vel,speed)) stack:take_item() inv:set_stack("main", stack_id, stack) end diff --git a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua b/mods/ITEMS/REDSTONE/mcl_droppers/init.lua index 6dac4495f..b9c46d6b8 100644 --- a/mods/ITEMS/REDSTONE/mcl_droppers/init.lua +++ b/mods/ITEMS/REDSTONE/mcl_droppers/init.lua @@ -143,7 +143,7 @@ local dropperdef = { local item_entity = minetest.add_item(droppos, dropitem) local drop_vel = vector.subtract(droppos, pos) local speed = 3 - item_entity:set_velocity(drop_vel * speed) + item_entity:set_velocity(vector.multiply(drop_vel,speed)) stack:take_item() inv:set_stack("main", stack_id, stack) end From 3ff9ed4419a06611fd2fac21f7782b98c7db131c Mon Sep 17 00:00:00 2001 From: iliekprogrammar Date: Sun, 7 Aug 2022 17:45:39 +0800 Subject: [PATCH 41/67] [heads] refactor and trivial renames --- mods/ITEMS/mcl_heads/init.lua | 353 +++++++++++++++++++++------------- 1 file changed, 214 insertions(+), 139 deletions(-) diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index c14079393..14f79bfa9 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -1,5 +1,6 @@ local S = minetest.get_translator(minetest.get_current_modname()) +local minetest = minetest local mod_doc = minetest.get_modpath("doc") local mod_screwdriver = minetest.get_modpath("screwdriver") @@ -8,159 +9,233 @@ if minetest.get_modpath("mcl_armor") then equip_armor = mcl_armor.equip_on_use end --- Heads system +mcl_heads = {} -local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) - local on_rotate_floor, on_rotate_wall - if mod_screwdriver then - on_rotate_floor = function(pos, node, user, mode, new_param2) - if mode == screwdriver.ROTATE_AXIS then - node.name = node.name .. "_wall" - node.param2 = minetest.dir_to_wallmounted(minetest.facedir_to_dir(node.param2)) - minetest.set_node(pos, node) - return true - end - end - on_rotate_wall = function(pos, node, user, mode, new_param2) - if mode == screwdriver.ROTATE_AXIS then - node.name = string.sub(node.name, 1, string.len(node.name)-5) - node.param2 = minetest.dir_to_facedir(minetest.wallmounted_to_dir(node.param2)) - minetest.set_node(pos, node) - return true - end +-- box of head nodes +mcl_heads.FLOOR_BOX = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, } + +-- floor head node nodedef template ------------------------------------------------------------------------------------ + +--- node definition template for floor mod heads +mcl_heads.deftemplate_floor = { + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = mcl_heads.FLOOR_BOX, + }, + groups = { + handy = 1, + armor = 1, + armor_head = 1, + non_combat_armor = 1, + non_combat_armor_head = 1, + head = 1, + deco_block = 1, + dig_by_piston = 1, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + paramtype2 = "facedir", + stack_max = 64, + sunlight_propagates = true, + sounds = mcl_sounds.node_sound_defaults{ + footstep = {name="default_hard_footstep", gain=0.3}, + }, + is_ground_content = false, + + _mcl_armor_element = "head", + _mcl_blast_resistance = 1, + _mcl_hardness = 1, + + on_secondary_use = equip_armor, +} + +function mcl_heads.deftemplate_floor.on_rotate(pos, node, user, mode, new_param2) + if mode == screwdriver.ROTATE_AXIS then + node.name = node.name .. "_wall" + node.param2 = minetest.dir_to_wallmounted(minetest.facedir_to_dir(node.param2)) + minetest.set_node(pos, node) + return true + end +end + +function mcl_heads.deftemplate_floor.on_place(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + + local under = pointed_thing.under + local node = minetest.get_node(under) + local def = minetest.registered_nodes[node.name] + if not def then return itemstack end + + -- Allow pointed node's on_rightclick callback to override place. + if placer and not placer:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(under, node, placer, itemstack) or itemstack end end - minetest.register_node("mcl_heads:"..name, { - description = desc, - _doc_items_longdesc = longdesc, - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "fixed", - fixed = { - { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, - }, - }, - groups = {handy = 1, armor = 1, armor_head = 1, non_combat_armor = 1, non_combat_armor_head = 1, head = 1, deco_block = 1, dig_by_piston = 1}, + local above = pointed_thing.above + local dir = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z} + local wdir = minetest.dir_to_wallmounted(dir) + + -- place floor mob head + if wdir == 0 or wdir == 1 then + return minetest.item_place(itemstack, placer, pointed_thing) + end + + -- place wall mob head + local itemstring = itemstack:get_name() + local placestack = ItemStack(itemstack) + placestack:set_name(itemstring .."_wall") + itemstack = minetest.item_place(placestack, placer, pointed_thing, wdir) + itemstack:set_name(itemstring) + return itemstack +end + +-- wall head node nodedef template ------------------------------------------------------------------------------------- + +--- node definition template for wall mod heads +mcl_heads.deftemplate_wall = { + drawtype = "nodebox", + node_box = { + type = "wallmounted", + wall_bottom = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, + wall_top = { -0.25, 0.0, -0.25, 0.25, 0.5, 0.25, }, + wall_side = { -0.5, -0.25, -0.25, 0.0, 0.25, 0.25, }, + }, + groups = { + handy = 1, + head = 1, + deco_block = 1, + dig_by_piston = 1, + not_in_creative_inventory = 1, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + paramtype2 = "wallmounted", + stack_max = 64, + sunlight_propagates = true, + sounds = mcl_sounds.node_sound_defaults{ + footstep = {name="default_hard_footstep", gain=0.3}, + }, + is_ground_content = false, + + _doc_items_create_entry = false, + _mcl_blast_resistance = 1, + _mcl_hardness = 1, +} + +function mcl_heads.deftemplate_wall.on_rotate(pos, node, user, mode, new_param2) + if mode == screwdriver.ROTATE_AXIS then + node.name = string.sub(node.name, 1, string.len(node.name)-5) + node.param2 = minetest.dir_to_facedir(minetest.wallmounted_to_dir(node.param2)) + minetest.set_node(pos, node) + return true + end +end + +-- API functions ------------------------------------------------------------------------------------------------------- + +--- @class HeadDef +--- @field name string identifier for node +--- @field texture string texture filename for node +--- @field description string translated description +--- @field longdesc string translated doc description +--- @field armor_texture string texture filename for armor +--- @field range_mob string name of mob affected by range reduction +--- @field range_factor number factor of range reduction + +--- registers a head +--- @param head_def HeadDef head node definition +function mcl_heads.register_head(head_def) + local name = "mcl_heads:" ..head_def.name + + -- register the floor head node + minetest.register_node(name, table.update(table.copy(mcl_heads.deftemplate_floor), { + description = head_def.description, + _doc_items_longdesc = head_def.longdesc, + -- The head textures are based off the textures of an actual mob. tiles = { -- Note: bottom texture is overlaid over top texture to get rid of possible transparency. -- This is required for skeleton skull and wither skeleton skull. - "[combine:16x16:-4,4="..texture, -- top - "([combine:16x16:-4,4="..texture..")^([combine:16x16:-12,4="..texture..")", -- bottom - "[combine:16x16:-12,0="..texture, -- left - "[combine:16x16:4,0="..texture, -- right - "[combine:16x16:-20,0="..texture, -- back - "[combine:16x16:-4,0="..texture, -- front + "[combine:16x16:-4,4=" ..head_def.texture, -- top + "([combine:16x16:-4,4=" ..head_def.texture..")^([combine:16x16:-12,4="..head_def.texture..")", -- bottom + "[combine:16x16:-12,0=" ..head_def.texture, -- left + "[combine:16x16:4,0=" ..head_def.texture, -- right + "[combine:16x16:-20,0=" ..head_def.texture, -- back + "[combine:16x16:-4,0=" ..head_def.texture, -- front }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - stack_max = 64, - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = true, - selection_box = { - type = "fixed", - fixed = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, - }, - sounds = mcl_sounds.node_sound_defaults({ - footstep = {name="default_hard_footstep", gain=0.3} - }), - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - -- no interaction possible with entities, for now. - return itemstack - end - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if not def then return itemstack end + _mcl_armor_mob_range_mob = head_def.range_mob, + _mcl_armor_mob_range_factor = head_def.range_factor, + _mcl_armor_texture = head_def.armor_texture + })) - -- Call on_rightclick if the pointed node defines it - if placer and not placer:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(under, node, placer, itemstack) or itemstack - end - end - - local above = pointed_thing.above - local diff = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z} - local wdir = minetest.dir_to_wallmounted(diff) - - local itemstring = itemstack:get_name() - local fakestack = ItemStack(itemstack) - --local idef = fakestack:get_definition() - local retval - if wdir == 0 or wdir == 1 then - return minetest.item_place(itemstack, placer, pointed_thing) - else - retval = fakestack:set_name("mcl_heads:"..name.."_wall") - end - if not retval then - return itemstack - end - itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) - itemstack:set_name(itemstring) - return itemstack - end, - on_secondary_use = equip_armor, - - on_rotate = on_rotate_floor, - - _mcl_armor_mob_range_mob = rangemob, - _mcl_armor_mob_range_factor = rangefactor, - _mcl_armor_element = "head", - _mcl_armor_texture = "mcl_heads_" .. name .. ".png", - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - }) - - minetest.register_node("mcl_heads:"..name.."_wall", { - _doc_items_create_entry = false, - drawtype = "nodebox", - is_ground_content = false, - node_box = { - type = "wallmounted", - wall_bottom = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, }, - wall_top = { -0.25, 0.0, -0.25, 0.25, 0.5, 0.25, }, - wall_side = { -0.5, -0.25, -0.25, 0.0, 0.25, 0.25, }, - }, - groups = {handy=1, head=1, deco_block=1, dig_by_piston=1, not_in_creative_inventory=1}, + -- register the wall head node + minetest.register_node(name .."_wall", table.update(table.copy(mcl_heads.deftemplate_wall), { -- The head textures are based off the textures of an actual mob. tiles = { - { name = "[combine:16x16:-4,-4="..texture, align_style = "world" }, -- front - { name = "[combine:16x16:-20,-4="..texture, align_style = "world" }, -- back - { name = "[combine:16x16:-8,-4="..texture, align_style = "world" }, -- left - { name = "[combine:16x16:0,-4="..texture, align_style = "world" }, -- right - { name = "([combine:16x16:-4,0="..texture..")^[transformR180", align_style = "node" }, -- top - { name = "([combine:16x16:-4,8="..texture..")^([combine:16x16:-12,8="..texture..")", align_style = "node" }, -- bottom + { name = "[combine:16x16:-4,-4=" ..head_def.texture, align_style = "world" }, -- front + { name = "[combine:16x16:-20,-4="..head_def.texture, align_style = "world" }, -- back + { name = "[combine:16x16:-8,-4=" ..head_def.texture, align_style = "world" }, -- left + { name = "[combine:16x16:0,-4=" ..head_def.texture, align_style = "world" }, -- right + { name = "([combine:16x16:-4,0=" ..head_def.texture ..")^[transformR180", align_style = "node" }, -- top + -- Note: bottom texture is overlaid over top texture to get rid of possible transparency. + -- This is required for skeleton skull and wither skeleton skull. + { name = "([combine:16x16:-4,8=" ..head_def.texture ..")^([combine:16x16:-12,8=" ..head_def.texture..")", align_style = "node" }, -- bottom }, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - stack_max = 64, - paramtype2 = "wallmounted", - sunlight_propagates = true, - walkable = true, - sounds = mcl_sounds.node_sound_defaults({ - footstep = {name="default_hard_footstep", gain=0.3} - }), - drop = "mcl_heads:"..name, - on_rotate = on_rotate_wall, - _mcl_blast_resistance = 1, - _mcl_hardness = 1, - }) - - if mod_doc then - doc.add_entry_alias("nodes", "mcl_heads:" .. name, "nodes", "mcl_heads:" .. name .. "_wall") - end + drop = name, + })) end --- Add heads -addhead("zombie", "mcl_heads_zombie_node.png", S("Zombie Head"), S("A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%."), "mobs_mc:zombie", 0.5) -addhead("creeper", "mcl_heads_creeper_node.png", S("Creeper Head"), S("A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%."), "mobs_mc:creeper", 0.5) +-- initial heads ------------------------------------------------------------------------------------------------------- + +mcl_heads.register_head{ + name = "zombie", + texture = "mcl_heads_zombie_node.png", + description = S("Zombie Head"), + longdesc = S("A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%."), + armor_texture = "mcl_heads_zombie.png", + range_mob = "mobs_mc:zombie", + range_factor = 0.5, +} + +mcl_heads.register_head{ + name = "creeper", + texture = "mcl_heads_creeper_node.png", + description = S("Creeper Head"), + longdesc = S("A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%."), + armor_texture = "mcl_heads_creeper.png", + range_mob = "mobs_mc:creeper", + range_factor = 0.5, +} + -- Original Minecraft name: “Head” -addhead("steve", "mcl_heads_steve_node.png", S("Human Head"), S("A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection.")) -addhead("skeleton", "mcl_heads_skeleton_node.png", S("Skeleton Skull"), S("A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%."), "mobs_mc:skeleton", 0.5) -addhead("wither_skeleton", "mcl_heads_wither_skeleton_node.png", S("Wither Skeleton Skull"), S("A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection.")) +mcl_heads.register_head{ + name = "steve", + texture = "mcl_heads_steve_node.png", + description = S("Human Head"), + longdesc = S("A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection."), + armor_texture = "mcl_heads_steve.png", +} + +mcl_heads.register_head{ + name = "skeleton", + texture = "mcl_heads_skeleton_node.png", + description = S("Skeleton Skull"), + longdesc = S("A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%."), + armor_texture = "mcl_heads_skeleton.png", + range_mob = "mobs_mc:skeleton", + range_factor = 0.5, +} + +mcl_heads.register_head{ + name = "wither_skeleton", + texture = "mcl_heads_wither_skeleton_node.png", + description = S("Wither Skeleton Skull"), + longdesc = S("A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection."), + armor_texture = "mcl_heads_wither_skeleton.png", +} From 44d234dd2c6c211649fae753d999990359753a8f Mon Sep 17 00:00:00 2001 From: iliekprogrammar Date: Thu, 11 Aug 2022 17:12:18 +0800 Subject: [PATCH 42/67] [heads] implement 16 directional head node --- mods/ITEMS/mcl_heads/init.lua | 74 +++++++++++++++++-- .../mcl_heads/models/mcl_heads_floor22_5.obj | 42 +++++++++++ .../mcl_heads/models/mcl_heads_floor45.obj | 42 +++++++++++ .../mcl_heads/models/mcl_heads_floor67_5.obj | 42 +++++++++++ 4 files changed, 192 insertions(+), 8 deletions(-) create mode 100644 mods/ITEMS/mcl_heads/models/mcl_heads_floor22_5.obj create mode 100644 mods/ITEMS/mcl_heads/models/mcl_heads_floor45.obj create mode 100644 mods/ITEMS/mcl_heads/models/mcl_heads_floor67_5.obj diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index 14f79bfa9..25f1b9d2f 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -11,6 +11,9 @@ end mcl_heads = {} +-- rotations of head nodes within a quadrant (0° ≤ θ ≤ 90°) +mcl_heads.FLOOR_DEGREES = { [0]='', '22_5', '45', '67_5', } + -- box of head nodes mcl_heads.FLOOR_BOX = { -0.25, -0.5, -0.25, 0.25, 0.0, 0.25, } @@ -50,6 +53,38 @@ mcl_heads.deftemplate_floor = { on_secondary_use = equip_armor, } +mcl_heads.deftemplate_floor_angled = { + drawtype = "mesh", + selection_box = { + type = "fixed", + fixed = mcl_heads.FLOOR_BOX, + }, + collision_box = { + type = "fixed", + fixed = mcl_heads.FLOOR_BOX, + }, + groups = { + handy = 1, + head = 1, + deco_block = 1, + dig_by_piston = 1, + not_in_creative_inventory = 1, + }, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + paramtype2 = "facedir", + stack_max = 64, + sunlight_propagates = true, + sounds = mcl_sounds.node_sound_defaults{ + footstep = {name="default_hard_footstep", gain=0.3}, + }, + is_ground_content = false, + + _doc_items_create_entry = false, + _mcl_blast_resistance = 1, + _mcl_hardness = 1, +} + function mcl_heads.deftemplate_floor.on_rotate(pos, node, user, mode, new_param2) if mode == screwdriver.ROTATE_AXIS then node.name = node.name .. "_wall" @@ -80,16 +115,30 @@ function mcl_heads.deftemplate_floor.on_place(itemstack, placer, pointed_thing) local dir = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z} local wdir = minetest.dir_to_wallmounted(dir) - -- place floor mob head - if wdir == 0 or wdir == 1 then - return minetest.item_place(itemstack, placer, pointed_thing) - end - - -- place wall mob head local itemstring = itemstack:get_name() local placestack = ItemStack(itemstack) - placestack:set_name(itemstring .."_wall") - itemstack = minetest.item_place(placestack, placer, pointed_thing, wdir) + + -- place wall head node (elsewhere) + if wdir ~= 0 and wdir ~= 1 then + placestack:set_name(itemstring .."_wall") + itemstack = minetest.item_place(placestack, placer, pointed_thing, wdir) + -- place floor head node (floor and ceiling) + else + local fdir = minetest.dir_to_facedir(dir) + + -- determine the head node rotation based on player's yaw (in cw direction from North/Z+) + local yaw = math.pi*2 - placer:get_look_horizontal() + + local rotation_level = math.min(math.max(math.round((yaw / (math.pi*2)) * 16), 0), 15) + placestack:set_name(itemstring ..mcl_heads.FLOOR_DEGREES[rotation_level % 4]) + + -- determine the head node face direction based on rotation level + fdir = math.floor(rotation_level / 4) + + itemstack = minetest.item_place(placestack, placer, pointed_thing, fdir) + end + + -- restore item from angled and wall head nodes itemstack:set_name(itemstring) return itemstack end @@ -174,6 +223,15 @@ function mcl_heads.register_head(head_def) _mcl_armor_texture = head_def.armor_texture })) + -- register the angled floor head nodes + for i, d in ipairs(mcl_heads.FLOOR_DEGREES) do + minetest.register_node(name ..d, table.update(table.copy(mcl_heads.deftemplate_floor_angled), { + mesh = "mcl_heads_floor" ..d ..".obj", + tiles = { head_def.armor_texture }, + drop = name, + })) + end + -- register the wall head node minetest.register_node(name .."_wall", table.update(table.copy(mcl_heads.deftemplate_wall), { -- The head textures are based off the textures of an actual mob. diff --git a/mods/ITEMS/mcl_heads/models/mcl_heads_floor22_5.obj b/mods/ITEMS/mcl_heads/models/mcl_heads_floor22_5.obj new file mode 100644 index 000000000..8e48015fc --- /dev/null +++ b/mods/ITEMS/mcl_heads/models/mcl_heads_floor22_5.obj @@ -0,0 +1,42 @@ +# Blender v2.93.9 OBJ File: 'mcl_heads_floor_0.blend' +# www.blender.org +mtllib mcl_heads_floor22_5.mtl +o Cube.001 +v -0.326641 -0.500000 0.135299 +v -0.326641 0.000000 0.135299 +v -0.135299 -0.500000 -0.326641 +v -0.135299 0.000000 -0.326641 +v 0.135299 -0.500000 0.326641 +v 0.135299 0.000000 0.326641 +v 0.326641 -0.500000 -0.135299 +v 0.326641 0.000000 -0.135299 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 0.500000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.500000 0.750000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.750000 +vt 0.750000 1.000000 +vt 0.625000 1.000000 +vn -0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl Material.001 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/4/2 4/3/2 8/5/2 7/6/2 +f 7/6/3 8/5/3 6/7/3 5/8/3 +f 5/9/4 6/10/4 2/2/4 1/1/4 +f 3/11/5 7/12/5 5/13/5 1/14/5 +f 8/5/6 4/3/6 2/15/6 6/16/6 diff --git a/mods/ITEMS/mcl_heads/models/mcl_heads_floor45.obj b/mods/ITEMS/mcl_heads/models/mcl_heads_floor45.obj new file mode 100644 index 000000000..6300d4484 --- /dev/null +++ b/mods/ITEMS/mcl_heads/models/mcl_heads_floor45.obj @@ -0,0 +1,42 @@ +# Blender v2.93.9 OBJ File: 'mcl_heads_floor_0.blend' +# www.blender.org +mtllib mcl_heads_floor45.mtl +o Cube.002 +v -0.353553 -0.500000 0.000000 +v -0.353553 0.000000 0.000000 +v 0.000000 -0.500000 -0.353553 +v 0.000000 0.000000 -0.353553 +v 0.000000 -0.500000 0.353553 +v 0.000000 0.000000 0.353553 +v 0.353553 -0.500000 0.000000 +v 0.353553 0.000000 0.000000 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 0.500000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.500000 0.750000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.750000 +vt 0.750000 1.000000 +vt 0.625000 1.000000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl Material.002 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/4/2 4/3/2 8/5/2 7/6/2 +f 7/6/3 8/5/3 6/7/3 5/8/3 +f 5/9/4 6/10/4 2/2/4 1/1/4 +f 3/11/5 7/12/5 5/13/5 1/14/5 +f 8/5/6 4/3/6 2/15/6 6/16/6 diff --git a/mods/ITEMS/mcl_heads/models/mcl_heads_floor67_5.obj b/mods/ITEMS/mcl_heads/models/mcl_heads_floor67_5.obj new file mode 100644 index 000000000..0fe5567e3 --- /dev/null +++ b/mods/ITEMS/mcl_heads/models/mcl_heads_floor67_5.obj @@ -0,0 +1,42 @@ +# Blender v2.93.9 OBJ File: 'mcl_heads_floor_0.blend' +# www.blender.org +mtllib mcl_heads_floor67_5.mtl +o Cube.003 +v -0.326641 -0.500000 -0.135299 +v -0.326641 0.000000 -0.135299 +v 0.135299 -0.500000 -0.326641 +v 0.135299 0.000000 -0.326641 +v -0.135299 -0.500000 0.326641 +v -0.135299 0.000000 0.326641 +v 0.326641 -0.500000 0.135299 +v 0.326641 0.000000 0.135299 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 0.750000 0.750000 +vt 0.750000 0.500000 +vt 0.625000 0.750000 +vt 0.625000 0.500000 +vt 0.500000 0.750000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 1.000000 0.750000 +vt 0.875000 0.750000 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.750000 +vt 0.750000 1.000000 +vt 0.625000 1.000000 +vn -0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl Material.003 +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/4/2 4/3/2 8/5/2 7/6/2 +f 7/6/3 8/5/3 6/7/3 5/8/3 +f 5/9/4 6/10/4 2/2/4 1/1/4 +f 3/11/5 7/12/5 5/13/5 1/14/5 +f 8/5/6 4/3/6 2/15/6 6/16/6 From 29d221eed58664c4877e0af1cc5791946b485eb0 Mon Sep 17 00:00:00 2001 From: iliekprogrammar Date: Thu, 11 Aug 2022 17:15:39 +0800 Subject: [PATCH 43/67] [heads] remove unnecessarily duplicative textures these textures are unnecessary to texture the head nodes. we can reuse the available armor texture for both the headgear/helmet and the nodes. --- mods/ITEMS/mcl_heads/init.lua | 48 ++++++++---------- .../textures/mcl_heads_creeper_node.png | Bin 676 -> 0 bytes .../textures/mcl_heads_skeleton_node.png | Bin 432 -> 0 bytes .../textures/mcl_heads_steve_node.png | Bin 1852 -> 0 bytes .../mcl_heads_wither_skeleton_node.png | Bin 432 -> 0 bytes .../textures/mcl_heads_zombie_node.png | Bin 1112 -> 0 bytes 6 files changed, 22 insertions(+), 26 deletions(-) delete mode 100644 mods/ITEMS/mcl_heads/textures/mcl_heads_creeper_node.png delete mode 100644 mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton_node.png delete mode 100644 mods/ITEMS/mcl_heads/textures/mcl_heads_steve_node.png delete mode 100644 mods/ITEMS/mcl_heads/textures/mcl_heads_wither_skeleton_node.png delete mode 100644 mods/ITEMS/mcl_heads/textures/mcl_heads_zombie_node.png diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index 25f1b9d2f..a971d7b91 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -189,10 +189,9 @@ end --- @class HeadDef --- @field name string identifier for node ---- @field texture string texture filename for node +--- @field texture string armor texture for node --- @field description string translated description --- @field longdesc string translated doc description ---- @field armor_texture string texture filename for armor --- @field range_mob string name of mob affected by range reduction --- @field range_factor number factor of range reduction @@ -210,24 +209,25 @@ function mcl_heads.register_head(head_def) tiles = { -- Note: bottom texture is overlaid over top texture to get rid of possible transparency. -- This is required for skeleton skull and wither skeleton skull. - "[combine:16x16:-4,4=" ..head_def.texture, -- top - "([combine:16x16:-4,4=" ..head_def.texture..")^([combine:16x16:-12,4="..head_def.texture..")", -- bottom - "[combine:16x16:-12,0=" ..head_def.texture, -- left - "[combine:16x16:4,0=" ..head_def.texture, -- right - "[combine:16x16:-20,0=" ..head_def.texture, -- back - "[combine:16x16:-4,0=" ..head_def.texture, -- front + -- Note: -x coords go right per-pixel, -y coords go down per-pixel + "[combine:16x16:-36,4=" ..head_def.texture, -- top + "([combine:16x16:-36,4=" ..head_def.texture..")^([combine:16x16:-44,4="..head_def.texture..")", -- bottom + "[combine:16x16:-28,0=" ..head_def.texture, -- left + "[combine:16x16:-44,0=" ..head_def.texture, -- right + "[combine:16x16:-52,0=" ..head_def.texture, -- back + "[combine:16x16:-36,0=" ..head_def.texture, -- front }, _mcl_armor_mob_range_mob = head_def.range_mob, _mcl_armor_mob_range_factor = head_def.range_factor, - _mcl_armor_texture = head_def.armor_texture + _mcl_armor_texture = head_def.texture })) -- register the angled floor head nodes for i, d in ipairs(mcl_heads.FLOOR_DEGREES) do minetest.register_node(name ..d, table.update(table.copy(mcl_heads.deftemplate_floor_angled), { mesh = "mcl_heads_floor" ..d ..".obj", - tiles = { head_def.armor_texture }, + tiles = { head_def.texture }, drop = name, })) end @@ -235,15 +235,16 @@ function mcl_heads.register_head(head_def) -- register the wall head node minetest.register_node(name .."_wall", table.update(table.copy(mcl_heads.deftemplate_wall), { -- The head textures are based off the textures of an actual mob. + -- Note: -x coords go right per-pixel, -y coords go down per-pixel tiles = { - { name = "[combine:16x16:-4,-4=" ..head_def.texture, align_style = "world" }, -- front - { name = "[combine:16x16:-20,-4="..head_def.texture, align_style = "world" }, -- back - { name = "[combine:16x16:-8,-4=" ..head_def.texture, align_style = "world" }, -- left - { name = "[combine:16x16:0,-4=" ..head_def.texture, align_style = "world" }, -- right - { name = "([combine:16x16:-4,0=" ..head_def.texture ..")^[transformR180", align_style = "node" }, -- top + { name = "[combine:16x16:-36,-4=" ..head_def.texture, align_style = "world" }, -- front + { name = "[combine:16x16:-52,-4="..head_def.texture, align_style = "world" }, -- back + { name = "[combine:16x16:-40,-4=" ..head_def.texture, align_style = "world" }, -- right + { name = "[combine:16x16:-32,-4=" ..head_def.texture, align_style = "world" }, -- left + { name = "([combine:16x16:-36,0=" ..head_def.texture ..")^[transformR180", align_style = "node" }, -- top -- Note: bottom texture is overlaid over top texture to get rid of possible transparency. -- This is required for skeleton skull and wither skeleton skull. - { name = "([combine:16x16:-4,8=" ..head_def.texture ..")^([combine:16x16:-12,8=" ..head_def.texture..")", align_style = "node" }, -- bottom + { name = "([combine:16x16:-36,0=" ..head_def.texture ..")^([combine:16x16:-44,8=" ..head_def.texture..")", align_style = "node" }, -- bottom }, drop = name, })) @@ -253,20 +254,18 @@ end mcl_heads.register_head{ name = "zombie", - texture = "mcl_heads_zombie_node.png", + texture = "mcl_heads_zombie.png", description = S("Zombie Head"), longdesc = S("A zombie head is a small decorative block which resembles the head of a zombie. It can also be worn as a helmet, which reduces the detection range of zombies by 50%."), - armor_texture = "mcl_heads_zombie.png", range_mob = "mobs_mc:zombie", range_factor = 0.5, } mcl_heads.register_head{ name = "creeper", - texture = "mcl_heads_creeper_node.png", + texture = "mcl_heads_creeper.png", description = S("Creeper Head"), longdesc = S("A creeper head is a small decorative block which resembles the head of a creeper. It can also be worn as a helmet, which reduces the detection range of creepers by 50%."), - armor_texture = "mcl_heads_creeper.png", range_mob = "mobs_mc:creeper", range_factor = 0.5, } @@ -274,26 +273,23 @@ mcl_heads.register_head{ -- Original Minecraft name: “Head” mcl_heads.register_head{ name = "steve", - texture = "mcl_heads_steve_node.png", + texture = "mcl_heads_steve.png", description = S("Human Head"), longdesc = S("A human head is a small decorative block which resembles the head of a human (i.e. a player character). It can also be worn as a helmet for fun, but does not offer any protection."), - armor_texture = "mcl_heads_steve.png", } mcl_heads.register_head{ name = "skeleton", - texture = "mcl_heads_skeleton_node.png", + texture = "mcl_heads_skeleton.png", description = S("Skeleton Skull"), longdesc = S("A skeleton skull is a small decorative block which resembles the skull of a skeleton. It can also be worn as a helmet, which reduces the detection range of skeletons by 50%."), - armor_texture = "mcl_heads_skeleton.png", range_mob = "mobs_mc:skeleton", range_factor = 0.5, } mcl_heads.register_head{ name = "wither_skeleton", - texture = "mcl_heads_wither_skeleton_node.png", + texture = "mcl_heads_wither_skeleton.png", description = S("Wither Skeleton Skull"), longdesc = S("A wither skeleton skull is a small decorative block which resembles the skull of a wither skeleton. It can also be worn as a helmet for fun, but does not offer any protection."), - armor_texture = "mcl_heads_wither_skeleton.png", } diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_creeper_node.png deleted file mode 100644 index 99b432ac67db7900cdbf4ad0075288fc59381168..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)-`Z<|gO2k=b4ojZ{2kvo1$J@UYc88LTiDHF~+Rm6Mu)TyY) z)R98Q*dPn_-@rrTf3D`-AS1co>B0Mm-}Vfd=lD;shQj@r z=MP=K%+%+sOqzF4(1Q0sBlbzNR~_(}zx;9zR2k=Df%Q8Wu}9MAZS;pe~+|*}NsHN*0S20Cu^Tfnz`KKSvxyq6ppYQpH`&%FbSA)AI&P#j{ zEpT7M!uLGe{&dgj#vN!-3ss8UX$mJz*JQ9Xz3A08w_{U-L#z%-ldW1XNd=Aa+;G!+ zY^6SGuusaj1;+XaQ=pkHuZ<8zP@yF?5DS#qYVr3js4GSLmU6IB={i%m6L^=M0E4(X ztqq}ZU6;plw-PE-qB;T2PT<&QnFd|{)4*V;PXs zW{(&H*w76z*mOpEpa`yi2KIRB0^3G205+WS9(WoJUQFM;vB^5TJ+`k2tb1Tmi=c8% zpV5~w3}1%65j^&Q{9j5;_^N10000< KMNUMnLSTaNDmEqn diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton_node.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_skeleton_node.png deleted file mode 100644 index 0af86cd6a5e79a56e21ea9fb18cc64e40cc99731..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)J${R5dg`bu`y)-C>?L6Z|>8%S`W(g^ikPBD@yH8E*mntaAu zcznz}1{I2thXU5v#kha}?&~+K5epVD{}i@B_kY5|3RMzVFX;-2*hBHW0lC2STmMVr zKWsL9I+itc6*MJd;SkHb)N>5@jH;x82s% zY!-&87AznHm}Cy#Ny{cUw?-+P`FPHr{SV?mvoMBdq0XXU4yB|URd0YO_m99_C)6JJ z%eHGm;qcZbv`h;m9!N4xSQ2L1gtxha7CQTy4doCh5IbXCdn?d5_mTK}d$EL1lsvZ= anE3-#<3ZF1Q5;kN0000bbSMJ~EDEo$_TqK^Ox z8bCex;P%oMNP7v;A~~dh+f#wUMu7lD^DycbP+KcSYQ*xzZDYxjNkvQ1B$wRfl7wZm z2WnTl%N0dcX)MiUzsKx{o%!bfpPBWsg*=j!ng>S)xRtqs`zeKkeE-xl9pC@vTNixn zV(HsTK?(Xb@VRK1224q9iFN>zr2;w�taCojsSmVH z=sP$vKq{5MsMaVJHyFHBsiGTo0A4x$MbDRiaQ^qGdX2UFO=5SOj=iHtA4XB~Em8~% zRt*t}h*ZioQmI6XLvreag}|-M9oE)AzEr7l=;0JXD2QCG@oXwZ`cR6X=#AxHd}oTK zd4#$}>$nb$79!<+BT5F3z5A4)O5sF2O9^73<&oIm%HMV4mRyHn_{ zBf)HDl~Sc@k(Mlr43F%iqP9N%;-5d_bIB-TTmsOR{&4Qwym9Go0Ic0@QmRzZ%2mn*jp@^qynboM;t=yZyCdcomEDmAe)q~(n?fXF zUd*sJ^5tw`e49w@3ECSGvPJsJV(W;=>S`v|I^2wXeRtEm3*Vgi8IF$6B3`? zTtKRoo=HbYy989{cZe%dlTnnFxS!1AZl3&^sF9RjMRJ0P%? z7AAAR-+ihh0!}m~5`G`o)isCyV6fK;Yljno-1q^KS8umFz{UZa!NlDE z;q`y|w)`O?iDAc$xaYDgIt;h(o5q;qx?yntc$yPUiDFT681JQTH{Q@27?b#V zfVyE=ykhE@=h(*yzt1st@BiO_iLKP`u~NI&ssv{h>V`q$Yfm%vP>iXEVx;2%#|_){ zJz;cejJjbUT+4SP+HT0WYYvD?8#itro407c{iqbCta{^hFxU&%^5g`8qTt>k-HRiyz7pa;1x$y%m{d<9) zD@&x~fvyO#o3)M+U}s)83!8I0nYr}`>2=`R?u6@?7pPAd1db#fWaid4jjtO9hFW5qySZdA*vnF({@JBLcd6_cXF(lyI?$`Ga68!4Q8k@nQQJ{L z_3qrwjzrRTA+k@aXdG3uzl{9Tt*>z^|qrjFE42HUQz%600DGTPE!Ct=GbNc00BTrL_t(| z0i}>J${R5dg`bu`y)-C>?L6Z|>8%S`W(g^ikPBD@yH8E*mntaAu zcznz}1{I2thXU5v#kha}?&~+K5epVD{}i@B_kY5|3RMzVFX;-2*hBHW0lC2STmMVr zKWsL9I+itc6*MJd;SkHb)N>5@jH;x82s% zY!-&87AznHm}Cy#Ny{cUw?-+P`FPHr{SV?mvoMBdq0XXU4yB|URd0YO_m99_C)6JJ z%eHGm;qcZbv`h;m9!N4xSQ2L1gtxha7CQTy4doCh5IbXCdn?d5_mTK}d$EL1lsvZ= anE3-#<3ZF1Q5;kN0000`LiLigq;2_Oo?wY4$Ae^wd}JpE6l5GSYwA)QF`^tQ=+= zS+qwiUS#jK%D%KDZS9)WHLKm*TJ1_p4C7*_wMMU;RkUD2YI{YHuG=glztyI}J1V*p z+GgbjN9`-FJf&vc+`p*YKJHjj%|)5)Z27V>iP+fUG`E?p*+6Ien`sx!%&v;_Y|01* zisU7WSp$9ORubeF%mDNc7ytzr{sR%|0H{&iGAM+Bf$6cQi(^OyW6k77zC{KCF4oMO z)YnD^p;{R`iVv+lUna?Z>th%4k=$yoNck(tMO8k58^!FP3Y(hOyTTmCY(`?1Yn z2uhGJj`8{Ic_z54MBumb8wJ)Y?cG1WxX*be(kQp!{Ym*I!Tl_6Sod+>QEk}9AU>a! zWx?y+4sCOeuV-plB-x;GLFlN(jvqT*L>05PbLnvTIPCcG-gMg2J#o{rH->LNYdD*M zc{8^Gx03Gbr7`DDi?aPuz3^#iSqk^PuiW)A6i``n)^KL*ii2E79Qal=xeM}FUwk&Bg6rP=>eC@V-K8Q|m~4khn~(T2@w9%`Lg8J>$A^N%yz#PxDfrt?aH)% zre)i|y!>;|U_0ZgrVmH|Gl}iJm(Iw4ycZ&mALlbAI{x<*ofQN3@jh_fsUXOE+UvHK#A1E(82 zCH&MBwH;5S*jX|U~ZV9ez$ILgY_%D9+K;Xr~}!@rrGlO-H>GTu0_f{}wEYs1Ekjki+s@*X{M zVAQ$QzL{}GgATKZs3Wgac{xA7zyI@z84OEb3NWZ#7Lh(?cYX&bzj(U(xvX Date: Thu, 11 Aug 2022 17:34:20 +0800 Subject: [PATCH 44/67] [heads] optimize textures `optipng -strip all -o7 -zm9` --- .../mcl_heads/textures/mcl_heads_steve.png | Bin 970 -> 382 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png b/mods/ITEMS/mcl_heads/textures/mcl_heads_steve.png index 361795a52b7b2e15923bea8f1a5b76bc2f60e9cd..471a8b3c82f753601954ecb79e11ff9c28499000 100644 GIT binary patch delta 366 zcmV-!0g?X72mS((8Gi!+005OkjW) zJ}gv0FkVbKmsv=oXI7|eRkC_xwtQf}iEhV`a?YH9+pm!S|Nnex_>lkr00DGTPE!Ct z=GbNc008hwL_t&-8STMaQUXB`MZr_I3kM;B{clu>vAb`n0e?RJX80#F*hx8ZLQft+wK!Eun_6oiT#24{HJkI8ic*ICRAbur}F_8Qtb~2Da3JE25$zHR1t7!xX zbC+z86cEE$W$~tfveW4{HIfb4YJ!Vpfra4`aF|3ZxjERNh7VE7;9CtxbuqJzWMmf` zGPx|Hr`D@JZD`C19HWeR<(qkWdV0G11jM>|RXv=xo&W#< M07*qoM6N<$g8#gmK>z>% delta 959 zcmV;w13>)#0?G%F8Gi-<005$$euMx300v@9M??Vs0RI60puMM)00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-^q5dsPl66y}8000A5NkltHiDx!}}I!(>~%-}2pkckkWz-uJ%u-o+SjPM*lMr?dhO z^d}q~a~Xk;-=95H{=+Z7jUDzpG3XA+WdtNKgQm7o)e&}@ov~JTk>zywUN$dw$!*o0 zBk7Mb1f+5C4#_~9>k73k8 z=j<8Y%MmXlHVAb-ml2TVG^y0<`#WVnIdQ=bf^gRNmv;wL+g6{=18v7aCv^`vZ8-R=R@AQ=YWbp=;8?e)ABRAV! z&!(p*F^pO#DP~e(4aa8RRmG$DH}L8 z4@(9=8h=J8Qz{!_kDwd%(82$$9DCR6>*fBJ!6~f}E^P7gc`lrpqoP+Sl?^6}Dsn;L z+VTolmu`{GD`fKuSC?*aZFvQ`pfFKXDU}T>dX)=j=2*OZK1`N-VSliM4qOtf=v7SH z3zL?jh>UBa*j8upOFyk~>O>YXp9A2*MwNS;e}D4*r{}P(PSor-Lk&#Z1HDQj8N+e| ze6PEbD2j;h1z2vtv3?sL|EG1O)oQaaKZk9)#Nsi&ySqm7X_MdoHdwvCfo7H1ux+k? zv&_=%yG)Tg(Xuv_b&0FWO^g~?4f>Royk-Z-5hnQRj{c6fC5bYD6 Date: Sun, 7 Aug 2022 00:44:02 +0200 Subject: [PATCH 45/67] make ruined portals rarer --- mods/MAPGEN/mcl_structures/ruined_portal.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_structures/ruined_portal.lua b/mods/MAPGEN/mcl_structures/ruined_portal.lua index 002195f76..618cc407b 100644 --- a/mods/MAPGEN/mcl_structures/ruined_portal.lua +++ b/mods/MAPGEN/mcl_structures/ruined_portal.lua @@ -16,7 +16,7 @@ local def = { flags = "place_center_x, place_center_z, all_floors", solid_ground = true, make_foundation = true, - chunk_probability = 400, + chunk_probability = 800, y_max = mcl_vars.mg_overworld_max, y_min = 1, sidelen = 10, From cef559c57304ae9b5294916f3111a22bae3dcb5c Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 7 Aug 2022 01:03:54 +0200 Subject: [PATCH 46/67] Fix ruined portals y offset --- mods/MAPGEN/mcl_structures/ruined_portal.lua | 2 +- .../mcl_structures_ruined_portal_1.mts | Bin 524 -> 537 bytes .../mcl_structures_ruined_portal_2.mts | Bin 521 -> 563 bytes .../mcl_structures_ruined_portal_99.mts | Bin 521 -> 555 bytes 4 files changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_structures/ruined_portal.lua b/mods/MAPGEN/mcl_structures/ruined_portal.lua index 618cc407b..00d2d682c 100644 --- a/mods/MAPGEN/mcl_structures/ruined_portal.lua +++ b/mods/MAPGEN/mcl_structures/ruined_portal.lua @@ -20,7 +20,7 @@ local def = { y_max = mcl_vars.mg_overworld_max, y_min = 1, sidelen = 10, - y_offset = -4, + y_offset = -5, filenames = { modpath.."/schematics/mcl_structures_ruined_portal_1.mts", modpath.."/schematics/mcl_structures_ruined_portal_2.mts", diff --git a/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_1.mts b/mods/MAPGEN/mcl_structures/schematics/mcl_structures_ruined_portal_1.mts index ae37576dc259184903dd7af589154b8c066aeeda..55a6f2ae306ebb6575b0e82769f9c91cf5b160c9 100644 GIT binary patch delta 347 zcmV-h0i^zn1epX4O;l4&00aOB01W^Me~}DGk!wE|6>Vc|Ut@1_WjbtOc41#;Y;SjI zZfB9HNq^my?G}O{42GGrwEvZt%dLm<;a);T4C^#bhcg@R9tKXO4jGv-TXRh86dQ>d zxEc1q5RG2D;?>wYxu2!J1ZwMD19zi3$lrlVsn_q|q{yQ%`_Y(s`O!?wt;yGZpl(Rb z(Z4ZS+M__NB5GUfnVKq4_l6p)O^aTd+EV%(GJjHHt!q%f*BWh$ngX>Yw?;79lA<~m4@hkmWYdcjC)>a!ctW7zpW2}?*8FYSzWFo)Z%o=Ro!#Wa3 zdoeKy+!E;!sPSo#mXd|k33$MbSdv8fhl=M{d~j*)kYeAue>c|(d1}amy63LT3?!F? t)F{@sX}8g&xJ!CakF5}9Rg0RLg_vWZrD$Q#9PwO=(l1QWx)%%=Rg>b-sLKEV delta 334 zcmV-U0kQs>1dId>O;l4&00aOB01N;Lkqt-|6>Vc|Ut@1_WjbtOc41#;Y;SjIZfB8H zK#{9Rf4!FN7J?uQhBu~S|0^%oTMqFjh*T#!@NAZI+AHcJ+DR2?kx>hm+GsA|M9<2HGBpW9ZIq+QFm|Yo`{kSQ#zQv8EV(8qy6}JMi$0ZSh16-DdHro)v39$Qs{~PuRtd zf04CKZOjSOdafCAM@OyQ$F*LwZr#|r4K3d&`y z4x_~&$B%=cLS#zXvP$K4zeUIhj1yRUs@5fHZAL5of#-+lmqg_*Tg~pMnalMWryepm zrDvr@*-S!FvwLUn*A->MIVGz>qK)PxNp74I&pqK(g`9jI)a)HJSk8E&$DEEU%scvj z@jT@XdB%m$B=W7Cj@5~-2cFCG=I7HfhX1(Udoto*TJKzZm4AKzGzO0{#T+X=xw8?$ ztsQ5L8R1+LtR3~1lX&{3dQUPtb(m%u`i{2Y95tA#nCG8JvyEyJud5x;E_Br{zn-FljYn&gdVF0^$`p3*Wsm}_ z1WZ2^cfwk!cf+Kg(wTjbdTvE0BU*nZP|Y>wV{Q-mDMv-gpw!5E0i2D!S=Rw~uS4xYy0JYBVi!ohkgCJ@*?m7qwD&Z(N$umK{x8|k4*%c#VFFfb zoQA)zohF0Q0G_i~0?-_&}s zm3L|<9<#lYtYi6f#m`j-^q9hyOY+Pyo8KsWrQ+~G(4Zt^-iQmDZFdbFX&4N5Ax64^ycf1iux$G`0LN-&YK%=^*-i6+0pCo&zD|3Z@E-P z+IHt>tv%89=fsQ;NgCa-dTp!zvBdZ7yp+;g2AEha`{yb%uvQpvA2&1CypS8VqREvk!UY-BTd=I1B HZAEPWe!{39 From f1c70fe19da3f1d0a48b92aecb6a91dc91b54cf3 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 7 Aug 2022 01:30:49 +0200 Subject: [PATCH 47/67] grass border for water lake --- mods/MAPGEN/mcl_terrain_features/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 18f242e36..052f99c8d 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -205,7 +205,7 @@ mcl_structures.register_structure("water_lake",{ y_max = mcl_vars.mg_overworld_max, y_min = minetest.get_mapgen_setting("water_level"), place_func = function(pos,def,pr) - return makelake(pos,5,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt","group:grass_block"},nil,pr) + return makelake(pos,5,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt","group:grass_block"},"mcl_core:dirt_with_grass",pr) end }) From 4f96b38fa3a96668da35b5ba4ed0de54811e4603 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 1 Aug 2022 01:43:23 +0200 Subject: [PATCH 48/67] Make foundations less cubic --- mods/MAPGEN/mcl_structures/api.lua | 90 ++++++++++++++++++++++-------- 1 file changed, 68 insertions(+), 22 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index af08caf07..6850255b3 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -38,6 +38,73 @@ function mcl_structures.find_highest_y(pp) return y end +local function smooth_cube(nn,pos,plane,amnt) + local r = {} + local amnt = amnt or 9 + table.sort(nn,function(a, b) + if false or plane then + return vector.distance(vector.new(pos.x,0,pos.z), vector.new(a.x,0,a.z)) < vector.distance(vector.new(pos.x,0,pos.z), vector.new(b.x,0,b.z)) + else + return vector.distance(pos, a) < vector.distance(pos, b) + end + end) + for i=1,math.max(1,#nn-amnt) do table.insert(r,nn[i]) end + return r +end + +local function get_foundation_nodes(ground_p1,ground_p2,pos,sidelen) + local replace = {"air","group:liquid","mcl_core:snow","group:tree","group:leaves","group:plant"} + local nn = smooth_cube(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-30,0),replace),vector.offset(pos,0,-30,0),true,sidelen * 64) + local stone = {} + local filler = {} + local top = {} + local dust = {} + for l,v in pairs(nn) do + if v.y == ground_p1.y - 1 then + table.insert(filler,v) + table.insert(top,vector.offset(v,0,1,0)) + table.insert(dust,vector.offset(v,0,2,0)) + elseif v.y < ground_p1.y -1 and v.y > ground_p2.y -4 then table.insert(filler,v) + elseif v.y < ground_p2.y - 3 and v.y > ground_p2.y -5 then + if math.random(3) == 1 then + table.insert(filler,v) + else + table.insert(stone,v) + end + else + table.insert(stone,v) + end + end + return stone,filler,top,dust +end + +local function foundation(ground_p1,ground_p2,pos,sidelen) + local stone,filler,top,dust = get_foundation_nodes(ground_p1,ground_p2,pos,sidelen) + local node_stone = "mcl_core:stone" + local node_filler = "mcl_core:dirt" + local node_top = "mcl_core:dirt_with_grass" or minetest.get_node(ground_p1).name + local node_dust = nil + + if minetest.get_mapgen_setting("mg_name") ~= "v6" then + local b = minetest.registered_biomes[minetest.get_biome_name(minetest.get_biome_data(pos).biome)] + --minetest.log(dump(b.node_top)) + if b then + if b.node_top then node_top = b.node_top end + if b.node_filler then node_filler = b.node_filler end + if b.node_stone then node_stone = b.node_stone end + if b.node_dust then node_dust = b.node_dust end + end + end + + minetest.bulk_set_node(top,{name=node_top}) + + if node_dust then + minetest.bulk_set_node(dust,{name=node_dust}) + end + minetest.bulk_set_node(filler,{name=node_filler}) + minetest.bulk_set_node(stone,{name=node_stone}) +end + function mcl_structures.place_structure(pos, def, pr, blockseed) if not def then return end local logging = not def.terrain_feature @@ -55,28 +122,7 @@ function mcl_structures.place_structure(pos, def, pr, blockseed) local solid = minetest.find_nodes_in_area(ground_p1,ground_p2,{"group:solid"}) if #solid < ( def.sidelen * def.sidelen ) then if def.make_foundation then - local node_stone = "mcl_core:stone" - local node_filler = "mcl_core:dirt" - local node_top = "mcl_core:dirt_with_grass" or minetest.get_node(ground_p1).name - local node_dust = nil - - if minetest.get_mapgen_setting("mg_name") ~= "v6" then - local b = minetest.registered_biomes[minetest.get_biome_name(minetest.get_biome_data(pos).biome)] - --minetest.log(dump(b.node_top)) - if b then - if b.node_top then node_top = b.node_top end - if b.node_filler then node_filler = b.node_filler end - if b.node_stone then node_stone = b.node_stone end - if b.node_dust then node_dust = b.node_dust end - end - end - local replace = {"air","group:liquid","mcl_core:snow","group:tree","group:leaves"} - minetest.bulk_set_node(minetest.find_nodes_in_area(ground_p1,ground_p2,replace),{name=node_top}) - if node_dust then - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,1,0),vector.offset(ground_p2,0,1,0),{"air"}),{name=node_dust}) - end - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-4,0),replace),{name=node_filler}) - minetest.bulk_set_node(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-5,0),vector.offset(ground_p2,0,-30,0),replace),{name=node_stone}) + foundation(vector.offset(pos,-def.sidelen/2 - 3,-1,-def.sidelen/2 - 3),vector.offset(pos,def.sidelen/2 + 3,-1,def.sidelen/2 + 3),pos,def.sidelen) else if logging then minetest.log("warning","[mcl_structures] "..def.name.." at "..minetest.pos_to_string(pp).." not placed. No solid ground.") From b7f26e2ddca9b7e88c89210332a4b41e8d589505 Mon Sep 17 00:00:00 2001 From: cora Date: Tue, 9 Aug 2022 19:28:30 +0200 Subject: [PATCH 49/67] Add setting to selectively disable strucutres --- mods/MAPGEN/mcl_structures/api.lua | 8 ++++++++ settingtypes.txt | 3 +++ 2 files changed, 11 insertions(+) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index 6850255b3..c883c4d7a 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -1,5 +1,12 @@ mcl_structures.registered_structures = {} +local disabled_structures = minetest.settings:get("mcl_disabled_structures") +if disabled_structures then disabled_structures = disabled_structures:split(",") +else disabled_structures = {} end + +function mcl_structures.is_disabled(structname) + if table.indexof(disabled_structures,structname) ~= -1 then return true end +end function mcl_structures.fill_chests(p1,p2,loot,pr) for it,lt in pairs(loot) do @@ -168,6 +175,7 @@ function mcl_structures.place_structure(pos, def, pr, blockseed) end function mcl_structures.register_structure(name,def,nospawn) --nospawn means it will be placed by another (non-nospawn) structure that contains it's structblock i.e. it will not be placed by mapgen directly + if mcl_structures.is_disabled(name) then return end local structblock = "mcl_structures:structblock_"..name local flags = "place_center_x, place_center_z, force_placement" local y_offset = 0 diff --git a/settingtypes.txt b/settingtypes.txt index 35db8bde7..7c8bc651e 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -39,6 +39,9 @@ mcl_doTileDrops (Blocks have drops) bool true # If enabled, TNT explosions destroy blocks. mcl_tnt_griefing (TNT destroys blocks) bool true +# Comma separated list of disabled structure names +mcl_disabled_structures (Disabled structures) string + [Players] # If enabled, players respawn at the bed they last lay on instead of normal # spawn. From 0bcbea4ce3de2a826a14707724645393795aef50 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 10 Aug 2022 13:52:19 +0200 Subject: [PATCH 50/67] Add lots of water lakes to mangrove swamps --- mods/MAPGEN/mcl_terrain_features/init.lua | 25 +++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/mods/MAPGEN/mcl_terrain_features/init.lua b/mods/MAPGEN/mcl_terrain_features/init.lua index 052f99c8d..eab33e78e 100644 --- a/mods/MAPGEN/mcl_terrain_features/init.lua +++ b/mods/MAPGEN/mcl_terrain_features/init.lua @@ -29,7 +29,7 @@ local function airtower(pos,tbl,h) end end -local function makelake(pos,size,liquid,placein,border,pr) +local function makelake(pos,size,liquid,placein,border,pr,noair) local node_under = minetest.get_node(vector.offset(pos,0,-1,0)) local p1 = vector.offset(pos,-size,-1,-size) local p2 = vector.offset(pos,size,-1,size) @@ -70,7 +70,7 @@ local function makelake(pos,size,liquid,placein,border,pr) end if border == nil or border == "mcl_core:dirt" then border = "mcl_core:dirt_with_grass" end end - if an.name ~= liquid then + if not noair and an.name ~= liquid then table.insert(br,pp) if un.name ~= liquid then airtower(pp,air,55) @@ -209,6 +209,27 @@ mcl_structures.register_structure("water_lake",{ end }) +mcl_structures.register_structure("water_lake_mangrove_swamp",{ + place_on = {"mcl_mud:mud"}, + biomes = { "MangroveSwamp" }, + terrain_feature = true, + noise_params = { + offset = 0, + scale = 0.0032, + spread = {x = 250, y = 250, z = 250}, + seed = 6343241353, + octaves = 3, + persist = 0.001, + flags = "absvalue", + }, + flags = "place_center_x, place_center_z, force_placement", + y_max = mcl_vars.mg_overworld_max, + y_min = minetest.get_mapgen_setting("water_level"), + place_func = function(pos,def,pr) + return makelake(pos,3,"mcl_core:water_source",{"group:material_stone", "group:sand", "group:dirt","group:grass_block","mcl_mud:mud"},"mcl_mud:mud",pr,true) + end +}) + local pool_adjacents = { vector.new(1,0,0), vector.new(-1,0,0), From 79ce9f89d34ea20121d1e2063ce7d94be6fbbb1d Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 10 Aug 2022 15:14:51 +0200 Subject: [PATCH 51/67] More adaptive foundation height --- mods/MAPGEN/mcl_structures/api.lua | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/mods/MAPGEN/mcl_structures/api.lua b/mods/MAPGEN/mcl_structures/api.lua index c883c4d7a..e57d4f6be 100644 --- a/mods/MAPGEN/mcl_structures/api.lua +++ b/mods/MAPGEN/mcl_structures/api.lua @@ -59,9 +59,24 @@ local function smooth_cube(nn,pos,plane,amnt) return r end -local function get_foundation_nodes(ground_p1,ground_p2,pos,sidelen) - local replace = {"air","group:liquid","mcl_core:snow","group:tree","group:leaves","group:plant"} - local nn = smooth_cube(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-30,0),replace),vector.offset(pos,0,-30,0),true,sidelen * 64) +local function find_ground(pos,nn,gn) + local r = 0 + for _,v in pairs(nn) do + local p=vector.new(v) + repeat + local n = minetest.get_node(p).name + p = vector.offset(p,0,-1,0) + until not n or n == "mcl_core:bedrock" or n == "ignore" or n == gn + --minetest.log(tostring(pos.y - p.y)) + if pos.y - p.y > r then r = pos.y - p.y end + end + return r +end + +local function get_foundation_nodes(ground_p1,ground_p2,pos,sidelen,node_stone) + local replace = {"air","group:liquid","mcl_core:snow","group:tree","group:leaves","group:plant","grass_block","group:dirt"} + local depth = find_ground(pos,minetest.find_nodes_in_area(ground_p1,ground_p2,replace),node_stone) + local nn = smooth_cube(minetest.find_nodes_in_area(vector.offset(ground_p1,0,-1,0),vector.offset(ground_p2,0,-depth,0),replace),vector.offset(pos,0,-depth,0),true,sidelen * 64) local stone = {} local filler = {} local top = {} @@ -86,7 +101,6 @@ local function get_foundation_nodes(ground_p1,ground_p2,pos,sidelen) end local function foundation(ground_p1,ground_p2,pos,sidelen) - local stone,filler,top,dust = get_foundation_nodes(ground_p1,ground_p2,pos,sidelen) local node_stone = "mcl_core:stone" local node_filler = "mcl_core:dirt" local node_top = "mcl_core:dirt_with_grass" or minetest.get_node(ground_p1).name @@ -103,7 +117,8 @@ local function foundation(ground_p1,ground_p2,pos,sidelen) end end - minetest.bulk_set_node(top,{name=node_top}) + local stone,filler,top,dust = get_foundation_nodes(ground_p1,ground_p2,pos,sidelen,node_stone) + minetest.bulk_set_node(top,{name=node_top},node_stone) if node_dust then minetest.bulk_set_node(dust,{name=node_dust}) From 6101de8d68e186664eddf70418b8b5960cae8d87 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 10 Aug 2022 20:00:30 +0200 Subject: [PATCH 52/67] Fix parrot punch spam --- mods/ENTITIES/mobs_mc/parrot.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index 80a5b9318..9ee03ac58 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -118,7 +118,7 @@ end mcl_mobs:register_mob("mobs_mc:parrot", { description = S("Parrot"), - type = "npc", + type = "passive", spawn_class = "passive", pathfinding = 1, hp_min = 6, From 374e30b4a55bfaac152f153b15b5ae1905eafe36 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 10 Aug 2022 20:05:25 +0200 Subject: [PATCH 53/67] stay on players shoulder in when flying in creative --- mods/ENTITIES/mobs_mc/parrot.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/parrot.lua b/mods/ENTITIES/mobs_mc/parrot.lua index 9ee03ac58..d4b6c12e6 100644 --- a/mods/ENTITIES/mobs_mc/parrot.lua +++ b/mods/ENTITIES/mobs_mc/parrot.lua @@ -92,7 +92,8 @@ local function check_perch(self,dtime) local n1 = minetest.get_node(vector.offset(p:get_pos(),0,-0.6,0)).name local n2 = minetest.get_node(vector.offset(p:get_pos(),0,0,0)).name local n3 = minetest.get_node(vector.offset(p:get_pos(),0,1,0)).name - if n1 == "air" or minetest.get_item_group(n2,"water") > 0 or minetest.get_item_group(n2,"lava") > 0 then + if ( n1 == "air" or minetest.get_item_group(n2,"water") > 0 or minetest.get_item_group(n2,"lava") > 0) and + not minetest.is_creative_enabled(p:get_player_name()) then o:set_detach() self.detach_timer = 0 return From f0837bdee62453b78806f3e440e0af315e407e99 Mon Sep 17 00:00:00 2001 From: opfromthestart Date: Mon, 8 Aug 2022 14:17:30 -0400 Subject: [PATCH 54/67] Swimming collides with ice properly --- mods/PLAYER/mcl_playerplus/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index c3876269c..7ca56eb17 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -377,8 +377,8 @@ minetest.register_globalstep(function(dtime) set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) - elseif get_item_group(mcl_playerinfo[name].node_head, "opaque") == 0 - and get_item_group(mcl_playerinfo[name].node_head_top, "opaque") == 0 then + elseif get_item_group(mcl_playerinfo[name].node_head, "solid") == 0 + and get_item_group(mcl_playerinfo[name].node_head_top, "solid") == 0 then -- sets eye height, and nametag color accordingly is_swimming = false set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) From 97472becfc4288efabfcd74d9b49c771faf6a3f2 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Fri, 12 Aug 2022 02:26:22 +1000 Subject: [PATCH 55/67] I'm over it. --- mods/PLAYER/mcl_playerplus/init.lua | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 5d6d23dec..4975f9eab 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -229,7 +229,7 @@ end local elytra_vars = { slowdown_mult = 0.0, -- amount of vel to take per sec fall_speed = 0.2, -- amount of vel to fall down per sec - speedup_mult = 4, -- amount of speed to add based on look dir + speedup_mult = 2, -- amount of speed to add based on look dir max_speed = 6, -- max amount to multiply against look direction when flying pitch_penalty = 1.3, -- if pitching up, slow down at this rate as a multiplier rocket_speed = 5.5, @@ -279,7 +279,7 @@ minetest.register_globalstep(function(dtime) player_vel_yaws[name] = player_vel_yaw local fly_pos = player:get_pos() - local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.05, z = fly_pos.z}).name + local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.1, z = fly_pos.z}).name local elytra = mcl_playerplus.elytra[player] if not elytra.active then @@ -289,7 +289,7 @@ minetest.register_globalstep(function(dtime) local is_just_jumped = control.jump and not mcl_playerplus.is_pressing_jump[name] and not elytra.active mcl_playerplus.is_pressing_jump[name] = control.jump if is_just_jumped and not elytra.active then - elytra.speed = clamp(get_overall_velocity(player:get_velocity()), 1, 5) + elytra.speed = clamp(get_overall_velocity(player:get_velocity()), 1, 3) -- don't let player get too fast by spamming jump local block_below = minetest.get_node(vector.offset(fly_pos, 0, -0.9, 0)).name local block_below2 = minetest.get_node(vector.offset(fly_pos, 0, -1.9, 0)).name @@ -302,7 +302,7 @@ minetest.register_globalstep(function(dtime) elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" and not player:get_attach() and (elytra.active or (is_just_jumped and player_velocity.y < -0)) - and (fly_node == "air" or fly_node == "ignore") + and ((not minetest.registered_nodes[fly_node].walkable) or fly_node == "ignore") if elytra.active then if is_just_jumped then -- move the player up when they start flying to give some clearance @@ -315,7 +315,11 @@ minetest.register_globalstep(function(dtime) local direction_mult = clamp(-(direction.y+0.1), -1, 1) if direction_mult < 0 then direction_mult = direction_mult * elytra_vars.pitch_penalty end - local speed_mult = elytra.speed + direction_mult * elytra_vars.speedup_mult * dtime + local speed_mult = elytra.speed + local block_below = minetest.get_node(vector.offset(fly_pos, 0, -0.9, 0)).name + if (not minetest.registered_nodes[block_below].walkable) and (player_vel.y ~= 0) then + speed_mult = speed_mult + direction_mult * elytra_vars.speedup_mult * dtime + end speed_mult = speed_mult - elytra_vars.slowdown_mult * clamp(dtime, 0.09, 0.2) -- slow down but don't overdo it speed_mult = clamp(speed_mult, -elytra_vars.max_speed, elytra_vars.max_speed) if turn_amount > 0.3 and math.abs(direction.y) < 0.98 then -- don't do this if looking straight up / down From 6cab000b2a60d03d033ace76a96b689fa5a975bc Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Fri, 12 Aug 2022 12:57:21 +1000 Subject: [PATCH 56/67] fix merge conflict --- mods/PLAYER/mcl_playerplus/init.lua | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 0d24b9a86..d8217ece8 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -432,15 +432,9 @@ minetest.register_globalstep(function(dtime) -- sets eye height, and nametag color accordingly set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,0.8,0.312}, eye_height = 0.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) -- control body bone when swimming -<<<<<<< HEAD set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new((75-degrees(dir_to_pitch(player_velocity))) , -player_vel_yaw + yaw, 0)) - elseif get_item_group(mcl_playerinfo[name].node_head, "opaque") == 0 - and get_item_group(mcl_playerinfo[name].node_head_top, "opaque") == 0 then -======= - set_bone_position_conditional(player,"Body_Control", vector.new(0,6.3,0), vector.new(degrees(dir_to_pitch(player_velocity)) - 90,-player_vel_yaw + yaw + 180,0)) elseif get_item_group(mcl_playerinfo[name].node_head, "solid") == 0 and get_item_group(mcl_playerinfo[name].node_head_top, "solid") == 0 then ->>>>>>> master -- sets eye height, and nametag color accordingly is_swimming = false set_properties_conditional(player,{collisionbox = {-0.312,0,-0.312,0.312,1.8,0.312}, eye_height = 1.5, nametag_color = { r = 225, b = 225, a = 225, g = 225 }}) From 307140b9a462f895210e1f1329ae16376b1e4e7b Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Fri, 12 Aug 2022 13:03:11 +1000 Subject: [PATCH 57/67] still over it --- mods/PLAYER/mcl_playerplus/init.lua | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index d8217ece8..8756846ce 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -289,14 +289,8 @@ minetest.register_globalstep(function(dtime) local is_just_jumped = control.jump and not mcl_playerplus.is_pressing_jump[name] and not elytra.active mcl_playerplus.is_pressing_jump[name] = control.jump if is_just_jumped and not elytra.active then - elytra.speed = clamp(get_overall_velocity(player:get_velocity()), 1, 3) - -- don't let player get too fast by spamming jump - local block_below = minetest.get_node(vector.offset(fly_pos, 0, -0.9, 0)).name - local block_below2 = minetest.get_node(vector.offset(fly_pos, 0, -1.9, 0)).name - if minetest.registered_nodes[block_below].walkable - or minetest.registered_nodes[block_below2].walkable then - elytra.speed = 1 - end + local direction = player:get_look_dir() + elytra.speed = 1 - (direction.y/2 + 0.5) end elytra.active = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra" From 16c9a83a964165af9c4a351811d4106badd5efa5 Mon Sep 17 00:00:00 2001 From: Sumyjkl Date: Fri, 12 Aug 2022 21:46:17 +1000 Subject: [PATCH 58/67] fix items floating into the air under rare circumstances --- mods/ENTITIES/mcl_item_entity/init.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index 5a82ca1fd..ccf1d2dca 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -847,8 +847,7 @@ minetest.register_entity(":__builtin:item", { elseif self._flowing == true and not is_in_water and not is_floating then -- Disable flowing physics if not on/in flowing liquid self._flowing = false - local pos = self.object:get_pos() - disable_physics(self.object, self, false, false) + disable_physics(self.object, self, true) return end From 7482f84929f777ee87535f2244c982edb9e5ff1b Mon Sep 17 00:00:00 2001 From: iliekprogrammar Date: Sat, 13 Aug 2022 00:13:12 +0800 Subject: [PATCH 59/67] [heads] heads may now be placed on ceilings, upside down --- mods/ITEMS/mcl_heads/init.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index a971d7b91..69c26b97d 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -122,18 +122,20 @@ function mcl_heads.deftemplate_floor.on_place(itemstack, placer, pointed_thing) if wdir ~= 0 and wdir ~= 1 then placestack:set_name(itemstring .."_wall") itemstack = minetest.item_place(placestack, placer, pointed_thing, wdir) + -- place floor head node (floor and ceiling) else local fdir = minetest.dir_to_facedir(dir) -- determine the head node rotation based on player's yaw (in cw direction from North/Z+) - local yaw = math.pi*2 - placer:get_look_horizontal() + local yaw = placer:get_look_horizontal() + yaw = wdir == 1 and math.pi*2 - yaw or yaw local rotation_level = math.min(math.max(math.round((yaw / (math.pi*2)) * 16), 0), 15) placestack:set_name(itemstring ..mcl_heads.FLOOR_DEGREES[rotation_level % 4]) -- determine the head node face direction based on rotation level - fdir = math.floor(rotation_level / 4) + fdir = math.floor(rotation_level / 4) + (wdir == 1 and 0 or 20) itemstack = minetest.item_place(placestack, placer, pointed_thing, fdir) end From 442fefebf2b5b22daf9aca460d80830d97982a87 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 12 Aug 2022 15:11:17 +0200 Subject: [PATCH 60/67] Waving water --- mods/ITEMS/mcl_core/nodes_liquid.lua | 2 ++ mods/ITEMS/mclx_core/init.lua | 2 ++ 2 files changed, 4 insertions(+) diff --git a/mods/ITEMS/mcl_core/nodes_liquid.lua b/mods/ITEMS/mcl_core/nodes_liquid.lua index 0e0f71a11..68ae4a829 100644 --- a/mods/ITEMS/mcl_core/nodes_liquid.lua +++ b/mods/ITEMS/mcl_core/nodes_liquid.lua @@ -49,6 +49,7 @@ minetest.register_node("mcl_core:water_flowing", { liquid_alternative_source = "mcl_core:water_source", liquid_viscosity = WATER_VISC, liquid_range = 7, + waving = 3, post_effect_color = {a=209, r=0x03, g=0x3C, b=0x5C}, groups = { water=3, liquid=3, puts_out_fire=1, not_in_creative_inventory=1, freezes=1, melt_around=1, dig_by_piston=1}, _mcl_blast_resistance = 100, @@ -67,6 +68,7 @@ S("• When flowing water touches flowing lava either from above or horizontally S("• When water is directly below lava, the water turns into stone."), _doc_items_hidden = false, drawtype = "liquid", + waving = 3, tiles = { {name="default_water_source_animated.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}} }, diff --git a/mods/ITEMS/mclx_core/init.lua b/mods/ITEMS/mclx_core/init.lua index 4bb40184a..9c46442c5 100644 --- a/mods/ITEMS/mclx_core/init.lua +++ b/mods/ITEMS/mclx_core/init.lua @@ -5,6 +5,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) local source = table.copy(minetest.registered_nodes["mcl_core:water_source"]) source.description = S("River Water Source") source.liquid_range = 2 +source.waving = 3 source.liquid_alternative_flowing = "mclx_core:river_water_flowing" source.liquid_alternative_source = "mclx_core:river_water_source" source.liquid_renewable = false @@ -28,6 +29,7 @@ source.special_tiles = { local flowing = table.copy(minetest.registered_nodes["mcl_core:water_flowing"]) flowing.description = S("Flowing River Water") flowing.liquid_range = 2 +flowing.waving = 3 flowing.liquid_alternative_flowing = "mclx_core:river_water_flowing" flowing.liquid_alternative_source = "mclx_core:river_water_source" flowing.liquid_renewable = false From 7be8ab2c1c8e5659c03a60d9f6c94793b2abd10d Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 12 Aug 2022 15:11:49 +0200 Subject: [PATCH 61/67] Send shadows to client if server supports it --- mods/ENVIRONMENT/mcl_weather/skycolor.lua | 5 +++++ settingtypes.txt | 3 +++ 2 files changed, 8 insertions(+) diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index f98ee18c0..a4108598f 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -276,6 +276,11 @@ minetest.register_globalstep(function(dtime) end) local function initsky(player) + + if player.set_lighting then + player:set_lighting({ shadows = { intensity = tonumber(minetest.settings:get("mcl_default_shadow_intensity") or 0.33) } }) + end + if (mcl_weather.skycolor.active) then mcl_weather.skycolor.force_update = true end diff --git a/settingtypes.txt b/settingtypes.txt index 7c8bc651e..a883905c6 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -115,6 +115,9 @@ animated_chests (Animated chests) bool true # The maximum number of boss bars to simultaniously display on the screen max_bossbars (Maximum Boss bars) int 5 +# Default intensity of shadows (default: 0.33) +mcl_default_shadow_intensity (Default shadow intensity) float 0.33 0.0 1.0 + [Experimental] # Whether ice is translucent. If disabled, ice is fully opaque. # From 68d5a81b1cb8a9d2af26de2ead25023e85e9e862 Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 12 Aug 2022 15:41:53 +0200 Subject: [PATCH 62/67] Villager sounds -> mono --- .../mobs_mc/sounds/mobs_mc_villager.1.ogg | Bin 14734 -> 6084 bytes .../mobs_mc/sounds/mobs_mc_villager.2.ogg | Bin 14564 -> 6262 bytes .../mobs_mc/sounds/mobs_mc_villager.3.ogg | Bin 14773 -> 6084 bytes .../mobs_mc/sounds/mobs_mc_villager.4.ogg | Bin 10341 -> 7543 bytes .../mobs_mc/sounds/mobs_mc_villager.5.ogg | Bin 14731 -> 6131 bytes .../mobs_mc/sounds/mobs_mc_villager.6.ogg | Bin 11187 -> 8127 bytes .../mobs_mc/sounds/mobs_mc_villager.7.ogg | Bin 11068 -> 8132 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.1.ogg index 9c56b0f65bc367e060329fee2843eb9ccc5c9753..beae2bf1f2af65eb93b46b1f63f344314eba8880 100644 GIT binary patch literal 6084 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 literal 14734 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 Fe*pY9T<8D* diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.2.ogg index bafc77b7eab6f58d17dbd56ddc2f4c1da53d86db..39939308cc9c253c81a7a29545a07aa5faac914c 100644 GIT binary patch literal 6262 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 GtNwq~bd>4< literal 14564 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 UIiTF5NDu4XGg^yWOgjMn4}xYWG5`Po literal 14773 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 ZUU0tu;-eYfb3&=*j_1BOjmEXW{|EX3(7*ry diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.4.ogg index 5c9ee492ba4d2315ab820b8149dcb5b73cfc62f6..a1c5c24ddd9bd7a9ac0281173d64fab3a7e1753a 100644 GIT binary patch literal 7543 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 literal 10341 zcmeHscUaR&x9}to2z3)oVhE@qfItXJBp_f5B}i2gNDPT3gdzcKAa>nIGlU`_vh;<} zLI9U2SXZS5J4!WT0ekQ3ik15dxclz+e)qZed!GAz|J`|pVdk7ObAEH$oS7_NyEX*C z!H;5{d043F-mr}Ehs}g-*^nRw1Boi}wOlp;C;$XjcE$&y{p@NBs%*Cx75Hj;D#whXf(#WtB8%GdS3{&lVgb+w zVq3kO>PLRDy>4sqHaQ8EZlYzb^+a7MbIeVz^TX_j^>wXvaqD~StdT}x2x#Mg?rV{T zVQCtn#3CIJHT%pH&Rf)%CFqmomC5?^&J$At=RK`Cu+06bygJAInQiMePXmY6e*Zw~ z5GUf$X`NNO5_{bqm;Gq;Cig*vzQt3=G!o^B)GRNtt1C)?mYUiY5s0B}f~9#FKPBdp z()>!F)$(@~<}~L%Cq_tU5F085hb#m)O7^t*#E4*(fBN1fx++s>1OW>1%X%o2>j_UC1}(R0G(>C+GKtKk_O9RAi;S>;-c$`LDwNs zXe9Dqm%Wqr0&T>iJi0JejC9HkpA?H2S{7f0^fH{{1QAH89uP~emAt>=W?b^HvH?>% z(2)^ZYICBYsB}_;@x7+^Azj*CELK$(Un@!M^)oD~o$75jDb;Om=!amYkIRgEOv52M zQGbbU!woJpH|$!;Bl!so)XOL+wP`yMIGZ+xJVdfu*PW_FH`e?v+z%haZJbMoZQ zi2$UcCaw6dX3~_Wthgp$O1@}&X{NQJDJ;tW}FcH5(h#6xbr zakXv3Jp0-LmcL!?lt)2IB}V3Y=$KAANqSMjMZ0>)EB>jtH&$2CGy48fuf8>Bnpi`% zZ=OSl(;{{#d&QP@VZS8ZJeIafoiuuV_vrQPHPh4o-LU@l8~`~@>ZDH=2(zf?%2Jkj z>P;#5FVES8IhSXCAXT) z5_RKf6#v-nu%ka5X3A|wuP6P(b2KhOa?82zo3H&Z&#AP{x#yZ=>6dR6mOp!Y;o6Ln zhT@8+4Kn?I^PCuIeUY?YB7H2$vCSwHWt1pR$l@;^dVcc1t$%yY(gZ80LY~7&u=P#G{tWK1YuxTrfE(OsI>Rd z=+hR_r!l66|FafiL}O}0^~W+0qrOmBAMFP(h)cT@gHD4^lK*-6Pk1q%Vaxx)i%tuo zhX(!6IsNYn|0{w2RsxWT!;GOnoM)AVJzVSx1N-jN^ND_MXyS;lHw(8B0;i2}aSMMc z(H;29JD>yh9c|mpg+JBl<`a3fO#O)BG0wVU+ARc%8W!KP$ya}9Er`MMn z3tu>pD(a+#EB^D369XWI=>jpBc9H(~H&y$Z0N|P*83yGSzWGrwAdU*F&;=krYWvLp ze3}1u=)W<9iERPcC*$HanqPwFM1;}vDF%Wt5Tvz@K*zu|#Bj~mnbE9qy0)}PYk)$4 zv5lBZ{WRtS*TPzn?EEH5z<_sN6qE#IkZ4dBUGaE(o!-^=(7tV@G7%g)ULdg}G-7v& z@uwIE$DH>EL@UsK*R}BBcA2dd%AXV$H&HIV_hw>(LfET*xz8pdfu~%I`7$p`#^G+V3XoXIVO)C|OXD1KYUjk49b>m=En9i7HbQns}$J$|l z*p76+AU}*W3p)M=U>0ZYVBU;Xitt^#6Hl`PcpB|7TCl zi)(J<0DNzn7CkIA+o{Q_9Gjyvop9I$AoU=vdq}8HtP1k|{jr`|ZnoA33whFJPYD%S zTQkUur{b=<=~mSg@T7J}??DQJV9-{0D-A4a3wW6hNAacc7LeBBAXtQxe;WjYwh~A2 zKLNp%Dtufv!?u*K!NxT^+dWJSP!91Tn%ZVpXXR^PO>M)Z0@l19ObFB~NpvKZ zKIR=T=^URK;s6oHLAGESncdLCgA7M6Dl6Mzs35Ty0qBcd0o@w!VPne1g;(oMpDCVH z%n9fY37KAx#=_F^TYpuB;eOy(vUN zK15gh0|7CD*8hQk7(vTS&44~7n z4)oBb7IsuO5A-B@0T>6smnD`+Vjj7=FI-Ib^!D-f4_p=ug*VvbNk|7UBy#G)sTm`Y zQ!gF##gp@a=A}b(ES81EzcpL<`rCx@gxLgcf&jH<6DAXO6R-)b?;l^kGsiv+x&Lk< zxnX-nHEDP3%8I4d&Q}wOba+G-%ogVBuP-&RNPl?ehy!7Ul(_qI_xCklzpE(S_eHx` z075iv(}@T|8Igi?Dmi|OYP1Z6+vOeBz#p_#43$W-V#|X$evv-$b`9n@B+8(Mgi91e zLq!LAUQzlO3bWDnICP^BIOF1s;_!tyb>(cFA~rTSX(UG5qYZ)17AKQjI;UOz^^BsD zEGJY`Wh76ok%RxaaJ0cTo*{zS)hfKw5-k$1+3dC#mL9RwAC&k<3z8TL2~lRr(K<@u?`q4ayyW}$IH$N2f4c_#jAd~6;Or)TYtr&w0C zZdhhhVIT?7t8rA~4J1@2C&-q>*}?-?>VohtVaJj!T;vW-VO%a3&xyCFV`I&lOof%4 z_y%E7VO<(2*;dN6)aNi8>qK%kwzMfjT%g#n_tRis-Re=gBOvSa0b$%abVssUjv(Vn zYH=;Wan|?ct>4z2O-q9*8BFb)?&Y6x?ROFyHkXl(oN|IQu#b?%oL#D}>F%oEh^OR!BUtW=(}*7i*5SB?teL z=-ZzsyO-ZH*pJBCo2GZiIrKdG&ZoP_&W2N?eGVT>KfK*9Kow)5|OGC#|aAXYLcfJahi&U4dZl# z$yLeNK5`7kUMlqNKK=VjhoB)IpaT?>mQ3QdDN52#8_+EUDO~XC3kT^DI_jH$C+*zu z{BQFOa(@f0{k@?|N|Z6_2!Wj_g(lk&NR3Bz_iKluX22yx;n3Kq*i>7r5H-}XpAS2z zI^|)#serz)SrW4usRrp-Wxj-+?I6c7(C9u3T(-=Xgueh_Fukh@^%F+V`DPixr;EQ_ zzrRNI7-rIh0Lx$t!5!z;0y6T&&gQpg$L~fs?z*}ENL-8^8>RlpyZ`gsu5*I%qq82v zcAWnHDu-o`?%CyDV`ACgU<|jrY$vpWg%e@G(IHm3BJ;FeY{Xj2I(FmH7RPuKY*#A{ zt*nJU*}GY2A(T`pi0NE`rR>(X9Z$cV#yd)Mw6!Tjd5=P7VVPMmzoGsCS@@jBt5zsT zg1hl>l7fT9rjW@5`{CdaG)CK_1E`7I6h>Pc+=XbVn>{)bm(j#+kt}0-Xa(O{ijky# z)d2+6Z-c??#&ntR3QowAsd;?pHBtPz{&Tw3UD#0pHiDmt%@$(KVBX%}Cqf12OV0+^ zGZ&ao;%UQLzizdO5*{{LCRtW^=PTEWX7li0Of4^7&MflvEkQ*eoH-JkVxMU~QKO;K{gj(UELL z<=UI4dty+i_zo8tw;t!=43|qt?!gGdL}oP0#+mr?7)%?@*w;)pdHQisxvtB?H!K~m zlnCP-c+CelB=Q1Q=%i-jg+o$&C2pA7WO{6QR2K%fD=N zoTq<{Z_c`L_uH#yck6e%;!P1xW{AJ9cB3l_it}Uj1988EK(1pVfSG6q!hxVoDkdnl zAnO{qftf{h87g|SP7yxcximi9z^tXU?_@SfMvfIH1%!YhZfIi+<*1jlU|R5Ii6Yj! z178QH=}VLj$;KXtR-v~CiqF_A1ll$5cB!)zVX6P^n;%53rJ7C_GtaC)^=;T0N+pd&{f zYl9gQMz_9%qf{i@lIe#-t0{pC;=6g7v8bwJG*Eu%wWXLr_m0!HhMA`)`u+Uy6Zq~L z*%o~|_w%JM9|Q8TtrXk$dvW514I0k={_|PP4PRNw)`6KfbVmLxgVj(rS{3>SwxbuA zY=yz<7i=V(Xuk*rz}rx%92tpFhjkBgP^b`Wydi&QrmE%Ge4{~a3NAC-$fr*dOO;o4 z$YffAvZ4Kc61=G2j+8$~mC>{fXUJA$}abfTKn! z54T?rdHdx}-dEn_PZ*0u1se~A>Akf+vwGX_2YmD%mmEZ`x%WKn+)j^1)d{RPrKlRw zz(UsxWr!OG?w#+OJ$rT!Q2yN{YaZ|h!5pj0~G;v!4wCycJn+F>mwyVK(sLvVe(|KXZj zxC*#cqS%_hPiUk7IFKHmLD?6xSzn4kH;O|5hTFtoGZ2Wrz0O))WT^$7RF@<1g``nE?$hyi#Or1pjs|v$2End_~hN}wb-@fXr&<2NOpohH}Sw>omsiY z6Sc+|G^4e0M1i$>A7l@cEZkSzuqDhhfX47>6|Q( zED)zT1Z6CqC+d9Qh*rv_aGd=xLAx0n+N6J;+MYbBH+cE_X%LEG2J+>CY!VNW48`Nt z(wD(mG1v}ndoE(#gC&;2EB#V=GNG>J>B3)Hu7{zp3@sU!A-<`L^?tlKnHky)*XL!X zJSYc_tQF}-%YpHjH2`})Mc#4}x!;{X>(U0rk)nx*2R2=;d73)9i*mN1SNMIdM8=vg zA(-;X^$R4muC56JSf_6w#YNQ(;JT1wfw*S2GdD#VuA2QEC*=uMll87sfurs9LMqZ3i29;?woE(tgvI)8M)9$pwq&XAhc0KN9 zIZ4Oxwb1MqKYhsDeV8r;XPE$3`-fSLB;5M=e2H+=7 zT`>Twx2KLRSm^QDddZ%KW$*&>e$=jgHoj*coSQr3C+@$}dc;T#S;#{=KEw^Rz%eg1 zPmlE{W|J;bq6b-sSYV@Wz$0-x`CTm`&Vg-grIUk8iA%AZXFKfRFxao)c+|%@D->KM zx+A73hJjWRk=y2KW3#F5hBEH@cb`0Ys}feP2pPwGWv_nfuH8Wx;x+3i$MSjanIr5o z2Vt{7?;qnuH($P<`^VkX-~G)O(+mh(+V%Du>B|K}C`V-vLc9IYpMUC|eBLwgnpjy$ zl}e=YT){<$IF?w3>K4FA6)wgXtX%f)maf4z?5UvEh1P9CZhTE_O2nt7AeX zqtu`8SKsX_n`0gQ0Y|{z+j@C)JZ9XnJ|H9P^aeT0`*yOgNq-?(mB%IP!gO(hN0_C; zRJ68sARc-%>#me^NS%cnNVtLaSP74UYfLgQV;gq2(uPiA?bD4zF+&2QWSM@9v)IR; zl-`y4e21#C(xWW~t&G^*)%o=>JieOgpb&VVjIfAq4o&XP?&dYeY^2thjs@->oC#00 zpQX>~#%B+cY4wDq{Ezz$lAq20O1M990V&K(cHn5Q>veF+IBz-fjIt~L%!$|VcS$n% zFi`00JCvbv^VTTE3PH0EyS;4>92{@U)s_b) z4b#GIYEed4KL}6Vupmb-b;a_M-CMIwTwdQl@QY5oaAycM6R+fA%B82{#OjWNLCrIC zK;5Y}beO=T-5q>A&VO-ElmUVPSR7+@cLSpA!7uqM)@H8N$+r61EI#m+_3l~x+so@d z1m+p#uAGsmo%tFV|I z%i}SX(H1&|3Tc|e83QSl(S$a$r1Duiq2x(L8kVxV>m$qi_*)}yuRn8j#tPJanE-~eqF-OZ3g1}ke z%m`{x)~W@TI7zLMP#UD}mqOP8wl^id)o)0;*Oo{1X_6?2@-#aE_Xx&IJJq6TI=iny zE3Q=|g$#)O!0xlGyp`v;B(EMii>em%YUG<}} zk-LwcEM8kPJ~Od!yg#?Pt1R!{&dXu<0=#mJzqr8~%*|QmtfCp+Ma3D##l_G(JZ{hj zC8zr_|5af={Y2tB&YhJ0AS z2&Rguu@3Rzxh$65EU3n|tv4_;3>kFnkT#?vX2*t$)U2R3ZD;hgDq#xZ=BUfMw!`oH zvlXxBb_?nDwm9t2S1d7u9TAbO;I)6|^+xfT@01*Z{fqNar%081SX!B4vUD9o8MFDr z(28TU)_3DEHRirn_W~w%_-}h7P_@q7zi-9xr(L{*rT(kkvTrgI_o$<8-AQ2%YuS@cUv{Nj~QI$n*9 z<&xSPiny2e78Ms27ekN0fXrE7$mh2m6BH>pL$fKWPK8JvsVb?><~Rg(MTZ&%8U(gU z1?m`iQISre>_gF)Z6{iPt1RC=@~r&#m=%M^#|aj>=HlnSsez9!5?T8F=JK6Pz(zDn z)U($-x?R$hf%XRAntp%QlbtOm&J*(cj_?Lga^5TZ@xnV<0YucfDz#PJH-nG<=>wPc zKSnPdSnx-WC_C~t@H}3!3jbMDzWFZc4M}J2oBpe+J#?74D_9*pn6STL_6I_2)n)m^ znIS>XoCiD8{Nj!68dz?Q%Ayo4CryElA3Cm>&e_@(M1PrasxJF1> z2}?8|BZ)j`eZF-5XTP~svtkJ~eidl#zNgjiEwjd_#jIYuHdC6Lvoh%-{LR9s@&g}_ zZ5Uk_mT+g{d;If_^p~<-C%$%m^4Zdl{cYaQ=K~#yzg)^X6O)(p^|MtBTpOH;8jQ~v zy0>{t)rc0~=Sm^hVcFX0ibXB2jg5^P%+U*6Q42JWWlm0102~7YwD?lz0jX#RUK-dG z&gC7u(c0Iq6R(#(5~J#8HQAClq2A4W3APb;)KS?I9QvlBu|~qG>5NKMc&HLvv}UhN zs$J=R?jRZ)TK(*rK$ZH04C~c};k6q{3T~6?WQ(m?s_mY3yNF#ym*0~thTh?5H=FL9 z*s%D{?9yAUg(=<_+RZloR{ZBO(@p0xzO^mKeOPgA$HzXCYpa4?_qLMphwkslT_Rc4 z>N-aIh|tZ&h)uxE=y=&uN!?1TZC01n-uqEOCw$+WkFtVd6^o^ZTHxwx5;0rjdPK-D z)!Y{j>9BNFvK)^~myC3FwqoMy*nFO{HjOJSDdec&0d4L5n1Pewx9JFMmv$(#RcHwa zmi-Us7(e|mf!rB3gCs#@N)QfBb;fLOW;53NS``Dir1Uwz$^FF?Gt4=>M5!n^B zH6uqt^h!qAe-d)$Ec`i7JN{+I7eqTe37!LA9KG<*5B{BbeolkW>}qmM_wPQPzcI4k zux*Ea!}LFruUM!&AP2mGc7jo-IXY>AFILHGIY!{{yIR$}BDhd=;ED^kO=yR68R_(~ zSESoXMBzhHw!OQvLZV<|Efq3yZDPfPn`IUW#SS=og%6to5`JA`5IA<~)Tu@`Y1;Q! z?hSMJ#~zivXG1^6^`2RO>BHh_q{laJ_OH41I1p@g+Ilp$@beJw>;gt36MDenK3+Zh z+Skuzdath*zp-vAr#~p$aH%=>#0~b*^{21?`YC_A!4dYS%NOF4T;?BJAC>r=V^ewp F{0E)bG4}uf diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.5.ogg index acb236445e2b530640a1c98a54c81d20a9a3672a..5b436af59048757f4272df7c85ed0fb78608b452 100644 GIT binary patch literal 6131 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 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.6.ogg index 1ef7a522744a727da6082e2a3a1f2bf36fc77604..50c4fa99acec57c264f2b7d2641d3999f1d835f4 100644 GIT binary patch literal 8127 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 H6axGov~EX* literal 11187 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 diff --git a/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.7.ogg b/mods/ENTITIES/mobs_mc/sounds/mobs_mc_villager.7.ogg index c2743fbcc640651eedc1529bbed4e3c209552fc1..8054e13491705122a5522437a55fca5f19b496c6 100644 GIT binary patch literal 8132 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 Nd6_Gg$<{*g{{YOPP`&^F literal 11068 zcmeHtcT|%}+xLVTstF_^AYkYr1|>jPKy*V1hAIgJLjWbANVOrX-B1kyEP#j<7eWyt zQ6dBtcNLHzh#*K2u`D($h-=wZS=)OD+X=Do%5XUzjw|s%v^KLT=!gM<~IXt zHf#t23gBBhA9tB1uO>}S&%lgfX`8lk<5T1W1P4u6zgqWS6q$XQCdus*JQT2rNy~2Y*ap}=g$J? z5RC>v3Gnc02WqCh69%0(V66^pt#XbJa5{lg70{=g)w+JSjM`Y=TA#Ra(Aom76{-v^ z98hQ`*(ip*;POp!uu!qzaBHv0iHfc2godgNb-P|%rk~xj+M)oLXALz6T%O}whuk%6 zT5tIHk;X!zPW`MBu{&kZ`ANmMLT!E>IOtp4RrI3~?r{0^eCztstX#S}44bccL!|4HhwZ6B!TwArrADkxi@BMWdNXZLXlZuXxjmuhvco2_Bi?6o zusPrIhdsZ%m*@GV<6xl5%(>*Dwb0Z+_`q4Hn3dC{0HWn8!KoFRS{K%M*T*KDiZ5@A zJK2`pe}>q9MsuD8z#tZRs){eG|G#oaaS+;Yx}tlvi)_>?`&g_|0$8pGJ_I9RLc+P`1Ue57Gw1W@IaQZOY1< zDgHMhRme5+Kd1D0e}NWaQW;y4z=PW#;>@ds2ThBuhI?o(NP-yn)sJvxLuGFVoVCjy zS2d!_M>=zZ%dO5gmX^<3FlkW#A!JMItH)$j$A-#M2E8@Q>K1A{bjnr5jW-~g{*wyr z9(@kP7k{Hnwec1U8XG!PHr;R@1=Vtk%dMp6gBRxe<`#|XDh4~9??WSUC(9Ght3^Py zx#)_Q18Q>GKi!7{*^M)S?WxSb?Kz;rMVZu_6d7+js9jV=>b0≦!)j)0i2^(6_4F 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⪼8)D-TJ`->@>Uw(8fCdv}Jn*&O4Gn>9R&mbhvv@|5CwbLtc zT+Cv#3`9_)uRYtkD#uzl*1!*`QQ&9q{K3jO=+~DCVyXK5Nwr6Jz1JP#%{V^kRk?WK zk1wAdXUG%)Uo=b*VVkj(it<5m*jbmmFMI|soRp3ewj4R&hvv_;U7I_@W6{w}I&?nG zLNkqDeRBQBOBYUs;7Egg+2OG#H{KP6UGYwtXixpBZ+GjCdh_|;wK^{TaqIK$WBy*> T_m77=o*i6O^uzS|W#GR6*1vMu From 3620db7c1498b3de39d19960fd95408902cf606a Mon Sep 17 00:00:00 2001 From: cora Date: Fri, 12 Aug 2022 15:42:08 +0200 Subject: [PATCH 63/67] Add objectref to villager sound_play for pos sound --- mods/ENTITIES/mobs_mc/villager.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index a62db7158..f1caee61d 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -816,7 +816,7 @@ local function show_trade_formspec(playername, trader, tradenum) .."listring[current_player;main]" .."listring["..tradeinv..";input]" .."listring[current_player;main]" - minetest.sound_play("mobs_mc_villager_trade", {to_player = playername}, true) + minetest.sound_play("mobs_mc_villager_trade", {to_player = playername,object=trader.object}, true) minetest.show_formspec(playername, tradeinv_name, formspec) end @@ -878,13 +878,13 @@ local function update_offer(inv, player, sound) (trade.locked == false)) then inv:set_stack("output", 1, inv:get_stack("offered", 1)) if sound then - minetest.sound_play("mobs_mc_villager_accept", {to_player = name}, true) + minetest.sound_play("mobs_mc_villager_accept", {to_player = name,object=trader.object}, true) end return true else inv:set_stack("output", 1, ItemStack("")) if sound then - minetest.sound_play("mobs_mc_villager_deny", {to_player = name}, true) + minetest.sound_play("mobs_mc_villager_deny", {to_player = name,object=trader.object}, true) end return false end @@ -1084,7 +1084,8 @@ local trade_inventory = { if not wanted2:is_empty() then inv:remove_item("input", inv:get_stack("wanted", 2)) end - minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name()}, true) + local trader = player_trading_with[name] + minetest.sound_play("mobs_mc_villager_accept", {to_player = player:get_player_name(),object=trader.object}, true) end update_offer(inv, player, true) end, @@ -1194,10 +1195,11 @@ local trade_inventory = { elseif listname == "input" then update_offer(inv, player, false) end + local trader = player_trading_with[name] if accept then - minetest.sound_play("mobs_mc_villager_accept", {to_player = name}, true) + minetest.sound_play("mobs_mc_villager_accept", {to_player = name,object=trader.object}, true) else - minetest.sound_play("mobs_mc_villager_deny", {to_player = name}, true) + minetest.sound_play("mobs_mc_villager_deny", {to_player = name,object=trader.object}, true) end end, } From e8f39deede2064f09c838cf5dfb2aff54fd948c1 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 13 Aug 2022 04:55:10 +0200 Subject: [PATCH 64/67] Update credits --- CREDITS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CREDITS.md b/CREDITS.md index c2c59b504..db81b59fb 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -31,6 +31,7 @@ * chmodsayshello * PrarieWind * RandomLegoBrick +* SumianVoice ## Contributors * Laurent Rocher @@ -79,6 +80,8 @@ * MrRar * Lazerbeak12345 * mrminer +* Thunder1035 +* opfromthestart ## MineClone5 * kay27 From 2290968ce94d5dbb0afe8b6d40a33785f87ac3e2 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 13 Aug 2022 04:55:20 +0200 Subject: [PATCH 65/67] Set version to 0.78 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 01719a7a7..97b631e6d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils. Developed by many people. Not developed or endorsed by Mojang AB. -Version: 0.78 (in development) +Version: 0.78 ### Gameplay You start in a randomly-generated world made entirely of cubes. You can explore From 3cfa8a848b43409965b91dec34a9b9f4b70d36c5 Mon Sep 17 00:00:00 2001 From: cora Date: Sat, 13 Aug 2022 05:13:36 +0200 Subject: [PATCH 66/67] Set version to 0.79 indev --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 97b631e6d..65eadbcc5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ An unofficial Minecraft-like game for Minetest. Forked from MineClone by davedevils. Developed by many people. Not developed or endorsed by Mojang AB. -Version: 0.78 +Version: 0.79 (in development) ### Gameplay You start in a randomly-generated world made entirely of cubes. You can explore From 21324aa0a5bbbd9d22e17d84c6896140e3cd200d Mon Sep 17 00:00:00 2001 From: chmodsayshello Date: Sat, 13 Aug 2022 09:50:08 +0000 Subject: [PATCH 67/67] variable in mcl_beacons gets reinitalized for no reason --- mods/ITEMS/mcl_beacons/init.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/mods/ITEMS/mcl_beacons/init.lua b/mods/ITEMS/mcl_beacons/init.lua index c484c949d..4614d5ce1 100644 --- a/mods/ITEMS/mcl_beacons/init.lua +++ b/mods/ITEMS/mcl_beacons/init.lua @@ -344,9 +344,6 @@ minetest.register_node("mcl_beacons:beacon", { mesecon.register_mvps_stopper("mcl_beacons:beacon") mcl_wip.register_wip_item("mcl_beacons:beacon") -beacon_blocklist = {"mcl_core:diamondblock","mcl_core:ironblock","mcl_core:goldblock","mcl_core:emeraldblock","mcl_nether:netheriteblock"}--this is supposed to be a global, don't change that! -beacon_fuellist ={"mcl_core:diamond","mcl_core:emerald","mcl_core:iron_ingot","mcl_core:gold_ingot","mcl_nether:netherite_ingot"} - function register_beaconblock (itemstring)--API function for other mods table.insert(beacon_blocklist, itemstring) end