From 40033e68793c2d7f75826cd7ab123119de91e3ae Mon Sep 17 00:00:00 2001 From: Skivling Date: Sun, 5 May 2024 10:05:39 +1200 Subject: [PATCH 1/7] RePixture crafting --- crafts.lua | 79 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/crafts.lua b/crafts.lua index 8e24852..669fc7c 100644 --- a/crafts.lua +++ b/crafts.lua @@ -17,20 +17,52 @@ minetest.register_craftitem("sum_airship:hull", { }) - local w = "group:wool" - if not minetest.get_modpath("farming") then w = "default:paper" end - local b = "boats:boat" - local m = "default:steel_ingot" - local s = "farming:string" - if minetest.get_modpath("mcl_boats") - and minetest.get_modpath("mcl_wool") - and minetest.get_modpath("mcl_core") - and minetest.get_modpath("mcl_mobitems") then - w = "group:wool" - b = "group:boat" - m = "mcl_core:iron_ingot" - s = "mcl_mobitems:string" - end +local w = "group:wool" +if not minetest.get_modpath("farming") then w = "default:paper" end +local b = "boats:boat" +local m = "default:steel_ingot" +local s = "farming:string" +if minetest.get_modpath("mcl_boats") +and minetest.get_modpath("mcl_wool") +and minetest.get_modpath("mcl_core") +and minetest.get_modpath("mcl_mobitems") then + w = "group:wool" + b = "group:boat" + m = "mcl_core:iron_ingot" + s = "mcl_mobitems:string" +end +local rp_fuzzy = minetest.get_modpath("rp_farming") or minetest.get_modpath("rp_mobs_mobs") +if rp_fuzzy and minetest.get_modpath("rp_default") then + w = "group:fuzzy" -- cotton bale or wool bundle + b = "group:boat" + m = "rp_default:ingot_steel" + s = "rp_default:fiber" +end + +if minetest.get_modpath("rp_crafting") then + crafting.register_craft({ + output = "sum_airship:canvas_roll", + items = { + w.." 9" + } + }) + crafting.register_craft({ + output = "sum_airship:hull", + items = { + b.." 3", + m.." 3" + } + }) + crafting.register_craft({ + output = "sum_airship:boat", + items = { + "sum_airship:canvas_roll 3", + s.." 8", + m, + "sum_airship:hull", + } + }) +else minetest.register_craft({ output = "sum_airship:canvas_roll", recipe = { @@ -46,13 +78,12 @@ minetest.register_craftitem("sum_airship:hull", { {m, m, m}, }, }) - - -minetest.register_craft({ - output = "sum_airship:boat", - recipe = { - {"sum_airship:canvas_roll","sum_airship:canvas_roll","sum_airship:canvas_roll",}, - {s, m, s,}, - {s, "sum_airship:hull", s,}, - }, -}) + minetest.register_craft({ + output = "sum_airship:boat", + recipe = { + {"sum_airship:canvas_roll","sum_airship:canvas_roll","sum_airship:canvas_roll",}, + {s, m, s,}, + {s, "sum_airship:hull", s,}, + }, + }) +end \ No newline at end of file From 942dde70f87c9a0075a76d2abfd4349bc27c79eb Mon Sep 17 00:00:00 2001 From: Skivling Date: Sun, 5 May 2024 10:06:04 +1200 Subject: [PATCH 2/7] Add title, description and RP optional_depends --- mod.conf | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mod.conf b/mod.conf index 78c897a..7096e65 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,5 @@ name = sum_airship +title = Airship (sum) author = Sumi -description = airship -optional_depends = default, mcl_core, mcl_wool, mcl_mobitems, mcl_player \ No newline at end of file +description = Adds a simple airship to Minetest Game, MineClone (VoxeLibre) and RePixture. +optional_depends = default, mcl_core, mcl_wool, mcl_mobitems, mcl_player, rp_crafting, rp_default \ No newline at end of file From 19f85c8a89d01acf65aa5497232a17cae2e67078 Mon Sep 17 00:00:00 2001 From: Skivling Date: Sun, 12 May 2024 11:53:02 +1200 Subject: [PATCH 3/7] Update README and add GIFs for each game's crafting recipes --- README.md | 45 +++++++++++++++++++---- airship crafting.gif => crafting_mcl.gif | Bin crafting_mtg.gif | Bin 0 -> 18400 bytes crafting_rp.gif | Bin 0 -> 10483 bytes 4 files changed, 37 insertions(+), 8 deletions(-) rename airship crafting.gif => crafting_mcl.gif (100%) create mode 100644 crafting_mtg.gif create mode 100644 crafting_rp.gif diff --git a/README.md b/README.md index 835d193..a8036ff 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,48 @@ +[![ContentDB](https://content.minetest.net/packages/Sumianvoice/sum_airship/shields/downloads/)] + # sum_airship -Mod for minetest -[ContentDB](https://content.minetest.net/packages/Sumianvoice/sum_airship/) +Mod for [Minetest](https://minetest.net). You can download it from the in-game content manager, or [ContentDB](https://content.minetest.net/packages/Sumianvoice/sum_airship/). +This mod adds an airship to Minetest. It should work in most games, but only Minetest Game, MineClone (VoxeLibre) and RePixture are supported for crafting recipes. Games based on those may still have crafting if they use the same items. Other games are not because I don't know what each game calls each item or node. Although, it shouldn't crash no matter what game you use, this is only for crafting recipes. +**Controls:** Flies like a boat, WASD, jump and aux1 (sprint) for up and down. Shift to dismount. Does not require fuel but will go faster when given any type of coal. -This adds an airship to minetest_game or mcl2. Not tested on any other games. If it uses default:steel_ingot or mcl_core:iron_ingot for example, then it should work. It should not crash no matter what game you use though, this is only for the crafting recipes. The dependency on MTG or MCL2 is only for crafting, otherwise the ship it self can still be used just not crafted (because I don't know what your game calls each item / node etc) +### Crafting -Flies like a boat, WSAD, jump and aux1 (sprint) for up and down. Shift to dismount. Does not require fuel but will go faster when given any type of coal. -### Crafting (mcl) +#### MineClone (VoxeLibre) -Craftable with wool > canvas and boats > hull. All items: wool: 27, string: 4, wood: 15, iron_ingot: 4 +All items: wool: 27, string: 4, wood: 15, iron_ingot: 4 +9 Wool -> Canvas +3 Boats & 3 Iron Ingots -> Hull +3 Canvas, 1 Hull, 4 String & 1 Iron ingot -> Airship + +##### MineClone Crafting GIF: + +![airship%20crafting.gif](crafting_mcl.gif) + +#### Minetest Game + +All items: wool: 27, string: 4, wood: 15, iron_ingot: 4 +9 Wool -> Canvas +3 Boats & 3 Iron Ingots -> Hull +3 Canvas, 1 Hull, 4 String & 1 Iron ingot -> Airship + +##### Minetest Game Crafting GIF: + +airship%20crafting.gif + +#### RePixture + +All items: wool: 27, fiber: 8, wood: varies depending on boat type, steel_ingot: 4 +9 group:fuzzy (wool or cotton bale) -> Canvas +3 Boats & 3 Steel Ingots -> Hull +3 Canvas, 1 Hull, 8 Fiber, 1 Steel Ingot -> Airship + +##### RePicture Crafting GIF: + +![airship%20crafting.gif](crafting_rp.gif) -#### Crafting Guide GIF: -![airship%20crafting.gif](airship%20crafting.gif) ### Air Currents This optionally uses [sum_air_currents](https://content.minetest.net/packages/Sumianvoice/sum_air_currents/) to apply force based on the weather. Both this mod and the air currents mod are in development so expect changes made regularly. diff --git a/airship crafting.gif b/crafting_mcl.gif similarity index 100% rename from airship crafting.gif rename to crafting_mcl.gif diff --git a/crafting_mtg.gif b/crafting_mtg.gif new file mode 100644 index 0000000000000000000000000000000000000000..58a2a892fd5f4c9358c3be8e8c1e6476ee9a2160 GIT binary patch literal 18400 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 literal 0 HcmV?d00001 diff --git a/crafting_rp.gif b/crafting_rp.gif new file mode 100644 index 0000000000000000000000000000000000000000..7ac9a71bdba83a427906d16c026706da9f1f1b4e GIT binary patch literal 10483 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 literal 0 HcmV?d00001 From 55fefd12c908edbb45a9eb179e7bf703fc2abc29 Mon Sep 17 00:00:00 2001 From: Sumi Date: Fri, 11 Apr 2025 13:45:10 +1000 Subject: [PATCH 4/7] fix readme --- README.md | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index a8036ff..9b8e1d2 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,23 @@ -[![ContentDB](https://content.minetest.net/packages/Sumianvoice/sum_airship/shields/downloads/)] +[![ContentDB](https://content.luanti.org/packages/Sumianvoice/sum_airship/shields/downloads/)] # sum_airship -Mod for [Minetest](https://minetest.net). You can download it from the in-game content manager, or [ContentDB](https://content.minetest.net/packages/Sumianvoice/sum_airship/). +Mod for [Luanti](https://luanti.org). You can download it from the in-game content manager, or [ContentDB](https://content.luanti.org/packages/Sumianvoice/sum_airship/). -This mod adds an airship to Minetest. It should work in most games, but only Minetest Game, MineClone (VoxeLibre) and RePixture are supported for crafting recipes. Games based on those may still have crafting if they use the same items. Other games are not because I don't know what each game calls each item or node. Although, it shouldn't crash no matter what game you use, this is only for crafting recipes. +This mod adds an airship to Minetest. It should work in most games, but only Minetest Game, MineClone (VoxeLibre) and RePixture are supported for crafting recipes. Games based on those may still have crafting if they use the same items. Other games are not because the mod doesn't know what each game calls each item or node. Although, it shouldn't crash no matter what game you use, this is only for crafting recipes. **Controls:** Flies like a boat, WASD, jump and aux1 (sprint) for up and down. Shift to dismount. Does not require fuel but will go faster when given any type of coal. ### Crafting -#### MineClone (VoxeLibre) +#### MineClon\* (VoxeLibre) All items: wool: 27, string: 4, wood: 15, iron_ingot: 4 9 Wool -> Canvas 3 Boats & 3 Iron Ingots -> Hull 3 Canvas, 1 Hull, 4 String & 1 Iron ingot -> Airship -##### MineClone Crafting GIF: - -![airship%20crafting.gif](crafting_mcl.gif) +![MCL crafting.gif](crafting_mcl.gif) #### Minetest Game @@ -28,9 +26,7 @@ All items: wool: 27, string: 4, wood: 15, iron_ingot: 4 3 Boats & 3 Iron Ingots -> Hull 3 Canvas, 1 Hull, 4 String & 1 Iron ingot -> Airship -##### Minetest Game Crafting GIF: - -airship%20crafting.gif +![MTG crafting.gif](crafting_mtg.gif) #### RePixture @@ -39,10 +35,8 @@ All items: wool: 27, fiber: 8, wood: varies depending on boat type, steel_ingot: 3 Boats & 3 Steel Ingots -> Hull 3 Canvas, 1 Hull, 8 Fiber, 1 Steel Ingot -> Airship -##### RePicture Crafting GIF: - -![airship%20crafting.gif](crafting_rp.gif) +![RePixture crafting.gif](crafting_rp.gif) ### Air Currents -This optionally uses [sum_air_currents](https://content.minetest.net/packages/Sumianvoice/sum_air_currents/) to apply force based on the weather. Both this mod and the air currents mod are in development so expect changes made regularly. +This optionally uses [sum_air_currents](https://content.luanti.org/packages/Sumianvoice/sum_air_currents/) to apply force based on the weather. From 29f7f2b2c5cbc0fd8ed7274193b7fc2ccb2e52fa Mon Sep 17 00:00:00 2001 From: Sumi Date: Fri, 11 Apr 2025 13:48:40 +1000 Subject: [PATCH 5/7] compartmentalised crafting recipes --- crafting_mcl.lua | 28 ++++++++++++++++++ crafting_mtg.lua | 29 ++++++++++++++++++ crafting_rp.lua | 23 +++++++++++++++ crafts.lua | 76 +++++++----------------------------------------- 4 files changed, 90 insertions(+), 66 deletions(-) create mode 100644 crafting_mcl.lua create mode 100644 crafting_mtg.lua create mode 100644 crafting_rp.lua diff --git a/crafting_mcl.lua b/crafting_mcl.lua new file mode 100644 index 0000000..3df41b4 --- /dev/null +++ b/crafting_mcl.lua @@ -0,0 +1,28 @@ + +local w = "group:wool" +local b = "group:boat" +local m = "mcl_core:iron_ingot" +local s = "mcl_mobitems:string" +minetest.register_craft({ + output = "sum_airship:canvas_roll", + recipe = { + {w, w, w}, + {w, w, w}, + {w, w, w}, + }, +}) +minetest.register_craft({ + output = "sum_airship:hull", + recipe = { + {b, b, b}, + {m, m, m}, + }, +}) +minetest.register_craft({ + output = "sum_airship:boat", + recipe = { + {"sum_airship:canvas_roll","sum_airship:canvas_roll","sum_airship:canvas_roll",}, + {s, m, s,}, + {s, "sum_airship:hull", s,}, + }, +}) \ No newline at end of file diff --git a/crafting_mtg.lua b/crafting_mtg.lua new file mode 100644 index 0000000..2661801 --- /dev/null +++ b/crafting_mtg.lua @@ -0,0 +1,29 @@ + +local w = "group:wool" +if not minetest.get_modpath("farming") then w = "default:paper" end +local b = "boats:boat" +local m = "default:steel_ingot" +local s = "farming:string" +minetest.register_craft({ + output = "sum_airship:canvas_roll", + recipe = { + {w, w, w}, + {w, w, w}, + {w, w, w}, + }, +}) +minetest.register_craft({ + output = "sum_airship:hull", + recipe = { + {b, b, b}, + {m, m, m}, + }, +}) +minetest.register_craft({ + output = "sum_airship:boat", + recipe = { + {"sum_airship:canvas_roll","sum_airship:canvas_roll","sum_airship:canvas_roll",}, + {s, m, s,}, + {s, "sum_airship:hull", s,}, + }, +}) \ No newline at end of file diff --git a/crafting_rp.lua b/crafting_rp.lua new file mode 100644 index 0000000..04b607a --- /dev/null +++ b/crafting_rp.lua @@ -0,0 +1,23 @@ + +crafting.register_craft({ + output = "sum_airship:canvas_roll", + items = { + "group:fuzzy 9" + } +}) +crafting.register_craft({ + output = "sum_airship:hull", + items = { + "group:boat 3", + "rp_default:ingot_steel 3" + } +}) +crafting.register_craft({ + output = "sum_airship:boat", + items = { + "sum_airship:canvas_roll 3", + "rp_default:ingot_steel 8", + "rp_default:ingot_steel", + "sum_airship:hull", + } +}) \ No newline at end of file diff --git a/crafts.lua b/crafts.lua index 669fc7c..f17d4ce 100644 --- a/crafts.lua +++ b/crafts.lua @@ -1,3 +1,5 @@ +local mod_name = minetest.get_current_modname() +local mod_path = minetest.get_modpath(mod_name) local S = minetest.get_translator(minetest.get_current_modname()) @@ -16,74 +18,16 @@ minetest.register_craftitem("sum_airship:hull", { groups = { craftitem = 1 }, }) - -local w = "group:wool" -if not minetest.get_modpath("farming") then w = "default:paper" end -local b = "boats:boat" -local m = "default:steel_ingot" -local s = "farming:string" if minetest.get_modpath("mcl_boats") and minetest.get_modpath("mcl_wool") and minetest.get_modpath("mcl_core") and minetest.get_modpath("mcl_mobitems") then - w = "group:wool" - b = "group:boat" - m = "mcl_core:iron_ingot" - s = "mcl_mobitems:string" + dofile(mod_path .. "/crafting_mcl.lua") +elseif (minetest.get_modpath("rp_farming") +or minetest.get_modpath("rp_mobs_mobs")) +and minetest.get_modpath("rp_default") +and minetest.get_modpath("rp_crafting") then + dofile(mod_path .. "/crafting_rp.lua") +elseif minetest.get_modpath("default") then + dofile(mod_path .. "/crafting_mtg.lua") end -local rp_fuzzy = minetest.get_modpath("rp_farming") or minetest.get_modpath("rp_mobs_mobs") -if rp_fuzzy and minetest.get_modpath("rp_default") then - w = "group:fuzzy" -- cotton bale or wool bundle - b = "group:boat" - m = "rp_default:ingot_steel" - s = "rp_default:fiber" -end - -if minetest.get_modpath("rp_crafting") then - crafting.register_craft({ - output = "sum_airship:canvas_roll", - items = { - w.." 9" - } - }) - crafting.register_craft({ - output = "sum_airship:hull", - items = { - b.." 3", - m.." 3" - } - }) - crafting.register_craft({ - output = "sum_airship:boat", - items = { - "sum_airship:canvas_roll 3", - s.." 8", - m, - "sum_airship:hull", - } - }) -else - minetest.register_craft({ - output = "sum_airship:canvas_roll", - recipe = { - {w, w, w}, - {w, w, w}, - {w, w, w}, - }, - }) - minetest.register_craft({ - output = "sum_airship:hull", - recipe = { - {b, b, b}, - {m, m, m}, - }, - }) - minetest.register_craft({ - output = "sum_airship:boat", - recipe = { - {"sum_airship:canvas_roll","sum_airship:canvas_roll","sum_airship:canvas_roll",}, - {s, m, s,}, - {s, "sum_airship:hull", s,}, - }, - }) -end \ No newline at end of file From 86642b96ea73ff89865bb57b0d5ddd78126ce353 Mon Sep 17 00:00:00 2001 From: Sumi Date: Fri, 11 Apr 2025 14:04:50 +1000 Subject: [PATCH 6/7] fix indentation inconsistency, remove unnecessary code, fix initial properties --- balloon.lua | 253 ++++++++++++++++++++++++++-------------------------- 1 file changed, 128 insertions(+), 125 deletions(-) diff --git a/balloon.lua b/balloon.lua index 1400571..77d87e6 100644 --- a/balloon.lua +++ b/balloon.lua @@ -2,23 +2,25 @@ local mod_name = minetest.get_current_modname() local mod_path = minetest.get_modpath(mod_name) local me = { - lift = 4, - speed = 4, - fuel_time = 10, - speed_mult = 4, - i = {}, + lift = 4, + speed = 4, + fuel_time = 10, + speed_mult = 4, + i = {}, } local ship = { - physical = true, - pointable = true, - collisionbox = {-0.6, -0.2, -0.6, 0.6, 0.3, 0.6}, - selectionbox = {-0.7, -0.35, -0.7, 0.7, 0.3, 0.7}, - hp_max = 3, - visual = "mesh", - backface_culling = false, - mesh = "sum_airship.b3d", - textures = {"sum_airship_texture.png"}, + initial_properties = { + physical = true, + pointable = true, + collisionbox = {-0.9, -0.0, -0.9, 0.9, 0.9, 0.9}, + selectionbox = {-0.7, -0.0, -0.7, 0.7, 0.9, 0.7}, + hp_max = 3, + visual = "mesh", + backface_culling = true, + mesh = "sum_airship.b3d", + textures = {"sum_airship_texture.png"}, + }, _animations = { idle = {x= 10, y= 90}, fly = {x= 91, y= 170}, @@ -26,8 +28,8 @@ local ship = { }, _driver = nil, _removed = false, - _flags = {}, - _itemstring = "sum_airship:boat", + _flags = {}, + _itemstring = "sum_airship:boat", _passenger = nil, _vel = 0, _regen_timer = 0, @@ -88,7 +90,7 @@ function me.sound_countdown(self, dtime) end function me.update_sound(self, dtime, forward) - me.sound_countdown(self, dtime) + me.sound_countdown(self, dtime) local is_thrust = (forward ~= 0) and self._driver @@ -128,15 +130,17 @@ function ship.on_activate(self, staticdata, dtime_s) self._vel = data.v self._itemstring = data.itemstring self._fuel = data.fuel - if data._driver then - self._driver = minetest.get_player_by_name((data._driver)) - else - self._driver = nil - end - self._flags = data._flags - if self._driver then me.detach(self) end + self._flags = data._flags end - self.object:set_animation(ship._animations.idle, 24) + self.object:set_armor_groups({ + pierce=100, + slash=100, + blunt=100, + magic=100, + poison=100, + fleshy=100, + }) + self.object:set_animation(ship._animations.idle, 24) self._sounds = { -- workaround for copy vs reference issue engine = { handle = nil, @@ -156,41 +160,39 @@ end function ship.get_staticdata(self) return minetest.serialize({ itemstring = self._itemstring, - _driver = ((self._driver and self._driver:is_player()) - and self._driver:get_player_name()) or nil, - _flags = self._flags, + _flags = self._flags, v = self._vel, fuel = self._fuel, }) end function me.attach(self, player) - if not (player and player:is_player()) then - return false - end + if not (player and player:is_player()) then + return false + end self._driver = player - self._driver:set_attach(self.object, "", - {x = 0, y = -3.0, z = 0}, {x = 0, y = 0, z = 0}) - self._driver:set_look_horizontal(self.object:get_yaw()) + self._driver:set_attach(self.object, "", + {x = 0, y = -0.0, z = -2}, {x = 0, y = 0, z = 0}) + self._driver:set_look_horizontal(self.object:get_yaw()) end function me.detach(self) - if not self._driver then return false end - self._driver:set_detach() - self._driver = nil - return true + if not self._driver then return false end + self._driver:set_detach() + self._driver = nil + return true end function ship.on_death(self, killer) if killer and killer:is_player() - and not minetest.is_creative_enabled(killer:get_player_name()) then + and not minetest.is_creative_enabled(killer:get_player_name()) then local inv = killer:get_inventory() inv:add_item("main", self._itemstring) else minetest.add_item(self.object:get_pos(), self._itemstring) end - me.detach(self) + me.detach(self) self._driver = nil end @@ -198,7 +200,7 @@ function ship.on_rightclick(self, clicker) local item = clicker:get_wielded_item() local item_name = item:get_name() if clicker and (item and item_name) - and (string.find(item_name, ":coal") + and (string.find(item_name, ":coal") or string.find(item_name, ":charcoal")) then if not minetest.is_creative_enabled(clicker:get_player_name()) then item:take_item() @@ -260,16 +262,16 @@ function me.get_balloon_collide(self) for _, check in pairs(balloon_nodes) do local n = minetest.get_node(vector.add(check.p, o)) if n and minetest.registered_nodes[n.name] - and minetest.registered_nodes[n.name].walkable then + and (minetest.registered_nodes[n.name] or {}).walkable then force = vector.add(force, check.dir) end end return force end -me.chimney_dist = -1.0 +me.chimney_dist = -0.8 me.chimney_yaw = 0.13 -me.chimney_height = 0.9 +me.chimney_height = 1.5 function me.get_chimney_pos(self) local p = self.object:get_pos() local yaw = self.object:get_yaw() @@ -281,50 +283,50 @@ function me.get_chimney_pos(self) end function ship.on_step(self, dtime, moveresult) - local exit = false - local pi = nil - -- allow to exit - if self._driver and self._driver:is_player() then - local name = self._driver:get_player_name() - pi = self._driver:get_player_control() - exit = pi.sneak - end - if exit then - me.detach(self) - return false - end + local exit = false + local pi = nil + -- allow to exit + if self._driver and self._driver:is_player() then + local name = self._driver:get_player_name() + pi = self._driver:get_player_control() + exit = pi.sneak + end + if exit then + me.detach(self) + return false + end - local climb = 0 - local right = 0 - local forward = 0 - local v = self.object:get_velocity() - local p = self.object:get_pos() - local node_below = minetest.get_node(vector.offset(p, 0, -0.8, 0)).name - local is_on_floor = minetest.registered_nodes[node_below].walkable + local climb = 0 + local right = 0 + local forward = 0 + local v = self.object:get_velocity() + local p = self.object:get_pos() + local node_below = minetest.get_node(vector.offset(p, 0, -0.8, 0)).name + local is_on_floor = (minetest.registered_nodes[node_below] or {}).walkable local in_water = minetest.get_item_group(minetest.get_node(p).name, "liquid") ~= 0 local on_water = (minetest.get_item_group(minetest.get_node(vector.offset(p, 0, -0.2, 0)).name, "liquid") ~= 0 and not in_water) - local speedboost = 1 - if self._fuel > 0 then - self._fuel = self._fuel - dtime - speedboost = 3 - end + local speedboost = 1 + if self._fuel > 0 then + self._fuel = self._fuel - dtime + speedboost = 3 + end - if pi then - if pi.up then forward = 1 - elseif pi.down then forward = -1 end - if pi.jump then climb = 1 - elseif pi.aux1 then climb = -1 end - if pi.right then right = 1 - elseif pi.left then right = -1 end + if pi then + if pi.up then forward = 1 + elseif pi.down then forward = -1 end + if pi.jump then climb = 1 + elseif pi.aux1 then climb = -1 end + if pi.right then right = 1 + elseif pi.left then right = -1 end - local yaw = self.object:get_yaw() - local dir = minetest.yaw_to_dir(yaw) - self.object:set_yaw(yaw - right * dtime) - local added_vel = vector.multiply(dir, forward * dtime * me.speed * speedboost) - added_vel.y = added_vel.y + (climb * dtime * me.lift) - v = vector.add(v, added_vel) - end + local yaw = self.object:get_yaw() + local dir = minetest.yaw_to_dir(yaw) + self.object:set_yaw(yaw - right * dtime) + local added_vel = vector.multiply(dir, forward * dtime * me.speed * speedboost) + added_vel.y = added_vel.y + (climb * dtime * me.lift) + v = vector.add(v, added_vel) + end if self._driver then local collide_force = me.get_balloon_collide(self) @@ -335,32 +337,32 @@ function ship.on_step(self, dtime, moveresult) v = vector.add(v, collide_force) end - if not self._driver then - v.y = v.y - dtime - end + if not self._driver then + v.y = v.y - dtime + end - if sum_air_currents ~= nil then + if minetest.get_modpath("sum_air_currents") then if self._driver or not is_on_floor then - local wind_vel = sum_air_currents.get_wind(p) - wind_vel = vector.multiply(wind_vel, dtime) + local wind_vel = sum_air_currents.get_wind(p) + wind_vel = vector.multiply(wind_vel, dtime) v = vector.add(wind_vel, v) end end - if in_water then - v.y = 1 - elseif on_water and not self._driver then - v.y = 0 - end + if in_water then + v.y = 1 + elseif on_water and not self._driver then + v.y = 0 + end - if (not self._driver) and is_on_floor then - v.x = v.x * 0.8 - v.y = v.y * 0.95 - v.z = v.z * 0.8 - else - v.x = v.x * (0.98) - v.y = v.y * (0.98) - v.z = v.z * (0.98) - end + if (not self._driver) and is_on_floor then + v.x = v.x * 0.8 + v.y = v.y * 0.95 + v.z = v.z * 0.8 + else + v.x = v.x * (0.98) + v.y = v.y * (0.98) + v.z = v.z * (0.98) + end local wind_vel = vector.new(0,0,0) if minetest.get_modpath("sum_air_currents") ~= nil then @@ -371,7 +373,7 @@ function ship.on_step(self, dtime, moveresult) end - self.object:set_velocity(v) + self.object:set_velocity(v) me.update_sound(self, dtime, forward) @@ -407,31 +409,32 @@ minetest.register_entity("sum_airship:boat", ship) minetest.register_craftitem("sum_airship:boat", { description = "Airship", - inventory_image = "sum_airship.png", - groups = { vehicle = 1, airship = 1, transport = 1}, - on_place = function(itemstack, placer, pointed_thing) - if pointed_thing.type ~= "node" then - return itemstack - end - local node = minetest.get_node(pointed_thing.under) - 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(pointed_thing.under, node, placer, itemstack) or itemstack - end - end - local pos = vector.offset(pointed_thing.above, 0, 0.5, 0) - local self = minetest.add_entity(pos, "sum_airship:boat"):get_luaentity() - if not minetest.is_creative_enabled(placer:get_player_name()) then - itemstack:take_item() - end - return itemstack - end, + inventory_image = "sum_airship.png", + groups = { vehicle = 1, airship = 1, transport = 1}, + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + local node = minetest.get_node(pointed_thing.under) + if placer and not placer:get_player_control().sneak then + local def = minetest.registered_nodes[node.name] + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + local pos = vector.offset(pointed_thing.above, 0, 0, 0) + local self = minetest.add_entity(pos, "sum_airship:boat"):get_luaentity() + if not minetest.is_creative_enabled(placer:get_player_name()) then + itemstack:take_item() + end + return itemstack + end, }) -- Support SilverSandstone's subtitles mod: if minetest.get_modpath("subtitles") then - subtitles.register_description('sum_airship_lip_trill', 'Engine purring'); - subtitles.register_description('sum_airship_lip_trill_end', 'Engine sputtering'); - subtitles.register_description('sum_airship_fire', 'Engine stoked'); + subtitles.register_description('sum_airship_lip_trill', 'Engine purring'); + subtitles.register_description('sum_airship_lip_trill_end', 'Engine sputtering'); + subtitles.register_description('sum_airship_fire', 'Engine stoked'); end From 6381b7051ecb817da1e604af7b04855b4094c8d8 Mon Sep 17 00:00:00 2001 From: Sumi Date: Fri, 11 Apr 2025 14:09:58 +1000 Subject: [PATCH 7/7] fix collisionbox --- balloon.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/balloon.lua b/balloon.lua index 77d87e6..65e3593 100644 --- a/balloon.lua +++ b/balloon.lua @@ -13,8 +13,8 @@ local ship = { initial_properties = { physical = true, pointable = true, - collisionbox = {-0.9, -0.0, -0.9, 0.9, 0.9, 0.9}, - selectionbox = {-0.7, -0.0, -0.7, 0.7, 0.9, 0.7}, + collisionbox = {-0.6, -0.2, -0.6, 0.6, 0.4, 0.6}, + selectionbox = {-0.7, -0.35, -0.7, 0.7, 0.4, 0.7}, hp_max = 3, visual = "mesh", backface_culling = true,