lava boats

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

lava boats

by brainiacbob » Post

Hello All. I am currently using PilzAdam's boat mod (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
Contact:

by ak399g » Post

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 » Post

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 » Post

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 » Post

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 » Post

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 » Post

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

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

by Jordach » Post

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.

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

by tinoesroho » Post

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
GitHub: PilzAdam
IRC: PilzAdam
Location: Germany

by PilzAdam » Post

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 » Post

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
GitHub: ExcaliburZero
Location: United States
Contact:

by Excalibur Zero » Post

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.

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest