lava boats

brainiacbob
Member
 
Posts: 45
Joined: Wed Apr 24, 2013 16:23

lava boats

by brainiacbob » Sun Aug 04, 2013 21:50

Hello All. I am currently using PilzAdam's boat mod (https://forum.minetest.net/viewtopic.php?id=4016).
It works great but i have a problem. i want to use the boat on lava not just water. not only will it not let me place it on lava but i think it would probably just burn up if i place it there. is there a way to make it so i can boat in lava and water.

Thanks ;)
 

User avatar
ak399g
Member
 
Posts: 160
Joined: Tue Jul 30, 2013 02:36
In-game: SAFR

by ak399g » Sun Aug 04, 2013 21:52

I don't think a wooden boat would actually float on lava. Perhaps, however, a steel or bronze boat could be added to the mod?
aka SAFR
 

brainiacbob
Member
 
Posts: 45
Joined: Wed Apr 24, 2013 16:23

by brainiacbob » Sun Aug 04, 2013 23:00

ak399g wrote:I don't think a wooden boat would actually float on lava. Perhaps, however, a steel or bronze boat could be added to the mod?


Anyone Know how to do that???
 

Exilyth
Member
 
Posts: 73
Joined: Sun Jul 28, 2013 18:46
Location: Earth

by Exilyth » Mon Aug 05, 2013 11:14

ak399g wrote:I don't think a wooden boat would actually float on lava. Perhaps, however, a steel or bronze boat could be added to the mod?


Imho, an obsidian boat would make more sense.
I'm running 0.4.13 stable with [technic][carts][farming_plus][biome_lib][unified_inventory] and a few other mods.
 

dip
New member
 
Posts: 8
Joined: Sun Nov 25, 2012 01:19

by dip » Mon Aug 05, 2013 11:29

Exilyth wrote:Imho, an obsidian boat would make more sense.

Imho, an obsidian boat would be a good thing to sink in lava.
 

brainiacbob
Member
 
Posts: 45
Joined: Wed Apr 24, 2013 16:23

by brainiacbob » Mon Aug 05, 2013 19:59

anyone willing to mod the boat mod for me to support either steel obsidian or bronze boats that will drive and float on lava
 

nolan
Member
 
Posts: 298
Joined: Tue Jun 25, 2013 04:52
Location: ohio

by nolan » Mon Aug 05, 2013 21:50

ak399g wrote:I don't think a wooden boat would actually float on lava. Perhaps, however, a steel or bronze boat could be added to the mod?

if you rode in a boat over lava, even metal kind like steel or bronze the broat would get warm and ur butt would be hot right? :P
Last edited by nolan on Mon Aug 05, 2013 21:50, edited 1 time in total.
Minecraft Came Out For The Ps3
 

User avatar
Jordach
Member
 
Posts: 4523
Joined: Mon Oct 03, 2011 17:58
Location: Blender Scene
GitHub: Jordach
IRC: Jordach
In-game: Jordach

by Jordach » Mon Aug 05, 2013 22:19

nolan wrote:
ak399g wrote:I don't think a wooden boat would actually float on lava. Perhaps, however, a steel or bronze boat could be added to the mod?

if you rode in a boat over lava, even metal kind like steel or bronze the broat would get warm and ur butt would be hot right? :P
I already thought of that: some sort of water cooling might work. Dunno really.
viewtopic.php?f=10&t=19056 Solar Plains Dev Server
 

tinoesroho
Member
 
Posts: 570
Joined: Fri Feb 17, 2012 21:55
Location: Canada

by tinoesroho » Tue Aug 06, 2013 18:35

Oh, lawd. Easy-peasy:
1. Open /boats/init.lua in Wordpad
2. Remove {flammable=1}
3. ???
4. Profit!
---
That said, if you want an Obisidian boat, just copy the code, change the recipe, and then use GIMP on the texture. :-)
We are what we create.

I tinker and occasionally make (lousy) mods. Currently building an MMO subgame and updating mods. Pirate Party of Canada member. Sporadic author. 21 years old.

My github:
https://github.com/tinoesroho/
 

User avatar
PilzAdam
Member
 
Posts: 4026
Joined: Fri Jul 20, 2012 16:19
Location: Germany
GitHub: PilzAdam
IRC: PilzAdam

by PilzAdam » Tue Aug 06, 2013 19:12

tinoesroho wrote:Oh, lawd. Easy-peasy:
1. Open /boats/init.lua in Wordpad
2. Remove {flammable=1}
3. ???
4. Profit!
---
That said, if you want an Obisidian boat, just copy the code, change the recipe, and then use GIMP on the texture. :-)

That is complete nonsense.
 

brainiacbob
Member
 
Posts: 45
Joined: Wed Apr 24, 2013 16:23

by brainiacbob » Thu Aug 08, 2013 14:56

tinoesroho wrote:Oh, lawd. Easy-peasy:
1. Open /boats/init.lua in Wordpad
2. Remove {flammable=1}
3. ???
4. Profit!
---
That said, if you want an Obisidian boat, just copy the code, change the recipe, and then use GIMP on the texture. :-)


Its not just that they catch on fire but that it wont let me place them on lava
 

User avatar
Excalibur Zero
Member
 
Posts: 142
Joined: Tue Apr 02, 2013 19:45
Location: United States
GitHub: ExcaliburZero

by Excalibur Zero » Thu Aug 08, 2013 15:13

I don't know for sure how to modify the mod to get it to work in lava. But from my understanding it would be by doing something like this.

Modify the "init.lua" file at this section (at the beginning):

Code: Select all
local function is_water(pos)
    local nn = minetest.env:get_node(pos).name
    return minetest.get_item_group(nn, "water") ~= 0 <------THIS LINE
end


It would be modified to something like this:

Code: Select all
local function is_water(pos)
    local nn = minetest.env:get_node(pos).name
    return minetest.get_item_group(nn, "lava") ~= 0
end


That way it would be able to be placed on lava instead of water. Well, that what I think it would do, since I haven't tried it out and I don't know the code that well.

------------------
Edit:

I tried modifying the code, and I got it so there is a second boat which can go on lava instead of water. It has the texture of Obsidian, but the icon for it is still wood (since this is just a modification of the code).

Just replace all of the text in "init.lua" with this:

Code: Select all
--
-- Helper functions
--

local function is_water(pos)
    local nn = minetest.env:get_node(pos).name
    return minetest.get_item_group(nn, "water") ~= 0
end

local function get_sign(i)
    if i == 0 then
        return 0
    else
        return i/math.abs(i)
    end
end

local function get_velocity(v, yaw, y)
    local x = math.cos(yaw)*v
    local z = math.sin(yaw)*v
    return {x=x, y=y, z=z}
end

local function get_v(v)
    return math.sqrt(v.x^2+v.z^2)
end

--
-- Cart entity
--

local boat = {
    physical = true,
    collisionbox = {-0.6,-0.4,-0.6, 0.6,0.3,0.6},
    visual = "mesh",
    mesh = "boat.x",
    textures = {"default_wood.png"},
   
    driver = nil,
    v = 0,
}

function boat:on_rightclick(clicker)
    if not clicker or not clicker:is_player() then
        return
    end
    if self.driver and clicker == self.driver then
        self.driver = nil
        clicker:set_detach()
    elseif not self.driver then
        self.driver = clicker
        clicker:set_attach(self.object, "", {x=0,y=5,z=0}, {x=0,y=0,z=0})
        self.object:setyaw(clicker:get_look_yaw())
    end
end

function boat:on_activate(staticdata, dtime_s)
    self.object:set_armor_groups({immortal=1})
    if staticdata then
        self.v = tonumber(staticdata)
    end
end

function boat:get_staticdata()
    return tostring(v)
end

function boat:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
    self.object:remove()
    if puncher and puncher:is_player() then
        puncher:get_inventory():add_item("main", "boats:boat")
    end
end

function boat:on_step(dtime)
    self.v = get_v(self.object:getvelocity())*get_sign(self.v)
    if self.driver then
        local ctrl = self.driver:get_player_control()
        if ctrl.up then
            self.v = self.v+0.1
        end
        if ctrl.down then
            self.v = self.v-0.08
        end
        if ctrl.left then
            self.object:setyaw(self.object:getyaw()+math.pi/120+dtime*math.pi/120)
        end
        if ctrl.right then
            self.object:setyaw(self.object:getyaw()-math.pi/120-dtime*math.pi/120)
        end
    end
    local s = get_sign(self.v)
    self.v = self.v - 0.02*s
    if s ~= get_sign(self.v) then
        self.object:setvelocity({x=0, y=0, z=0})
        self.v = 0
        return
    end
    if math.abs(self.v) > 4.5 then
        self.v = 4.5*get_sign(self.v)
    end
   
    local p = self.object:getpos()
    p.y = p.y-0.5
    if not is_water(p) then
        if minetest.registered_nodes[minetest.env:get_node(p).name].walkable then
            self.v = 0
        end
        self.object:setacceleration({x=0, y=-10, z=0})
        self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y))
    else
        p.y = p.y+1
        if is_water(p) then
            self.object:setacceleration({x=0, y=3, z=0})
            local y = self.object:getvelocity().y
            if y > 2 then
                y = 2
            end
            if y < 0 then
                self.object:setacceleration({x=0, y=10, z=0})
            end
            self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), y))
        else
            self.object:setacceleration({x=0, y=0, z=0})
            if math.abs(self.object:getvelocity().y) < 1 then
                local pos = self.object:getpos()
                pos.y = math.floor(pos.y)+0.5
                self.object:setpos(pos)
                self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), 0))
            else
                self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y))
            end
        end
    end
end

minetest.register_entity("boats:boat", boat)


minetest.register_craftitem("boats:boat", {
    description = "Boat",
    inventory_image = "boat_inventory.png",
    wield_image = "boat_wield.png",
    wield_scale = {x=2, y=2, z=1},
    liquids_pointable = true,
   
    on_place = function(itemstack, placer, pointed_thing)
        if pointed_thing.type ~= "node" then
            return
        end
        if not is_water(pointed_thing.under) then
            return
        end
        pointed_thing.under.y = pointed_thing.under.y+0.5
        minetest.env:add_entity(pointed_thing.under, "boats:boat")
        itemstack:take_item()
        return itemstack
    end,
})

minetest.register_craft({
    output = "boats:boat",
    recipe = {
        {"", "", ""},
        {"group:wood", "", "group:wood"},
        {"group:wood", "group:wood", "group:wood"},
    },
})

--
-- Helper functions
--

local function is_lava(pos)
    local nn = minetest.env:get_node(pos).name
    return minetest.get_item_group(nn, "lava") ~= 0
end

--
-- Cart entity
--

local lavaboat = {
    physical = true,
    collisionbox = {-0.6,-0.4,-0.6, 0.6,0.3,0.6},
    visual = "mesh",
    mesh = "boat.x",
    textures = {"default_obsidian.png"},
   
    driver = nil,
    v = 0,
}

function lavaboat:on_rightclick(clicker)
    if not clicker or not clicker:is_player() then
        return
    end
    if self.driver and clicker == self.driver then
        self.driver = nil
        clicker:set_detach()
    elseif not self.driver then
        self.driver = clicker
        clicker:set_attach(self.object, "", {x=0,y=5,z=0}, {x=0,y=0,z=0})
        self.object:setyaw(clicker:get_look_yaw())
    end
end

function lavaboat:on_activate(staticdata, dtime_s)
    self.object:set_armor_groups({immortal=1})
    if staticdata then
        self.v = tonumber(staticdata)
    end
end

function lavaboat:get_staticdata()
    return tostring(v)
end

function lavaboat:on_punch(puncher, time_from_last_punch, tool_capabilities, direction)
    self.object:remove()
    if puncher and puncher:is_player() then
        puncher:get_inventory():add_item("main", "boats:lavaboat")
    end
end

function lavaboat:on_step(dtime)
    self.v = get_v(self.object:getvelocity())*get_sign(self.v)
    if self.driver then
        local ctrl = self.driver:get_player_control()
        if ctrl.up then
            self.v = self.v+0.1
        end
        if ctrl.down then
            self.v = self.v-0.08
        end
        if ctrl.left then
            self.object:setyaw(self.object:getyaw()+math.pi/120+dtime*math.pi/120)
        end
        if ctrl.right then
            self.object:setyaw(self.object:getyaw()-math.pi/120-dtime*math.pi/120)
        end
    end
    local s = get_sign(self.v)
    self.v = self.v - 0.02*s
    if s ~= get_sign(self.v) then
        self.object:setvelocity({x=0, y=0, z=0})
        self.v = 0
        return
    end
    if math.abs(self.v) > 4.5 then
        self.v = 4.5*get_sign(self.v)
    end
   
    local p = self.object:getpos()
    p.y = p.y-0.5
    if not is_lava(p) then
        if minetest.registered_nodes[minetest.env:get_node(p).name].walkable then
            self.v = 0
        end
        self.object:setacceleration({x=0, y=-10, z=0})
        self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y))
    else
        p.y = p.y+1
        if is_lava(p) then
            self.object:setacceleration({x=0, y=3, z=0})
            local y = self.object:getvelocity().y
            if y > 2 then
                y = 2
            end
            if y < 0 then
                self.object:setacceleration({x=0, y=10, z=0})
            end
            self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), y))
        else
            self.object:setacceleration({x=0, y=0, z=0})
            if math.abs(self.object:getvelocity().y) < 1 then
                local pos = self.object:getpos()
                pos.y = math.floor(pos.y)+0.5
                self.object:setpos(pos)
                self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), 0))
            else
                self.object:setvelocity(get_velocity(self.v, self.object:getyaw(), self.object:getvelocity().y))
            end
        end
    end
end

minetest.register_entity("boats:lavaboat", lavaboat)


minetest.register_craftitem("boats:lavaboat", {
    description = "Lava Boat",
    inventory_image = "boat_inventory.png",
    wield_image = "boat_wield.png",
    wield_scale = {x=2, y=2, z=1},
    liquids_pointable = true,
   
    on_place = function(itemstack, placer, pointed_thing)
        if pointed_thing.type ~= "node" then
            return
        end
        if not is_lava(pointed_thing.under) then
            return
        end
        pointed_thing.under.y = pointed_thing.under.y+0.5
        minetest.env:add_entity(pointed_thing.under, "boats:lavaboat")
        itemstack:take_item()
        return itemstack
    end,
})

minetest.register_craft({
    output = "boats:lavaboat",
    recipe = {
        {"", "", ""},
        {"group:wood", "default:obsidian", "group:wood"},
        {"group:wood", "group:wood", "group:wood"},
    },
})


The crafting recipe for the Lava Boat is the same as the regular boat, but it has an Obsidian node in the middle.
Last edited by Excalibur Zero on Thu Aug 08, 2013 15:37, edited 1 time in total.
 


Return to Feature Discussion



Who is online

Users browsing this forum: texmex and 1 guest