Griefing by Lava...

User avatar
TenPlus1
Member
 
Posts: 1874
Joined: Mon Jul 29, 2013 13:38
GitHub: tenplus1

Griefing by Lava...

by TenPlus1 » Sun Nov 03, 2013 19:09

Hi server owners, are you tired of griefers dumping a bucket of lava over everything you hold dear (and your fellow users), well there's a solution to this problem for MineTest 0.4.7 and above...

In the MODS directory Create a folder called "bucket" and then create a blank file called "init.lua" and paste the following code into it, then just enable the new bucket mod and hey presto, no more lava buckets for angry users to rain down onto your world...


Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
Code: Select all
-- Minetest 0.4 mod: bucket
-- See README.txt for licensing and other information.

local LIQUID_MAX = 8  --The number of water levels when liquid_finite is enabled

minetest.register_alias("bucket", "bucket:bucket_empty")
minetest.register_alias("bucket_water", "bucket:bucket_water")
-- minetest.register_alias("bucket_lava", "bucket:bucket_lava")

minetest.register_craft({
        output = 'bucket:bucket_empty 1',
        recipe = {
                {'default:steel_ingot', '', 'default:steel_ingot'},
                {'', 'default:steel_ingot', ''},
        }
})

bucket = {}
bucket.liquids = {}

-- Register a new liquid
--   source = name of the source node
--   flowing = name of the flowing node
--   itemname = name of the new bucket item (or nil if liquid is not takeable)
--   inventory_image = texture of the new bucket item (ignored if itemname == nil)
-- This function can be called from any mod (that depends on bucket).
function bucket.register_liquid(source, flowing, itemname, inventory_image, name)
        bucket.liquids[source] = {
                source = source,
                flowing = flowing,
                itemname = itemname,
        }
        bucket.liquids[flowing] = bucket.liquids[source]

        if itemname ~= nil then
                minetest.register_craftitem(itemname, {
                        description = name,
                        inventory_image = inventory_image,
                        stack_max = 1,
                        liquids_pointable = true,
                        groups = {not_in_creative_inventory=1},
                        on_place = function(itemstack, user, pointed_thing)
                                -- Must be pointing to node
                                if pointed_thing.type ~= "node" then
                                        return
                                end
                               
                                -- Call on_rightclick if the pointed node defines it
                                if user and not user:get_player_control().sneak then
                                        local n = minetest.get_node(pointed_thing.under)
                                        local nn = n.name
                                        if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then
                                                return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, n, user, itemstack) or itemstack
                                        end
                                end

                                local place_liquid = function(pos, node, source, flowing, fullness)
                                        if math.floor(fullness/128) == 1 or (not minetest.setting_getbool("liquid_finite")) then
                                                minetest.add_node(pos, {name=source, param2=fullness})
                                                return
                                        elseif node.name == flowing then
                                                fullness = fullness + node.param2
                                        elseif node.name == source then
                                                fullness = LIQUID_MAX
                                        end

                                        if fullness >= LIQUID_MAX then
                                                minetest.add_node(pos, {name=source, param2=LIQUID_MAX})
                                        else
                                                minetest.add_node(pos, {name=flowing, param2=fullness})
                                        end
                                end

                                -- Check if pointing to a buildable node
                                local node = minetest.get_node(pointed_thing.under)
                                local fullness = tonumber(itemstack:get_metadata())
                                if not fullness then fullness = LIQUID_MAX end

                                if minetest.registered_nodes[node.name].buildable_to then
                                        -- buildable; replace the node
                                        place_liquid(pointed_thing.under, node, source, flowing, fullness)
                                else
                                        -- not buildable to; place the liquid above
                                        -- check if the node above can be replaced
                                        local node = minetest.get_node(pointed_thing.above)
                                        if minetest.registered_nodes[node.name].buildable_to then
                                                place_liquid(pointed_thing.above, node, source, flowing, fullness)
                                        else
                                                -- do not remove the bucket with the liquid
                                                return
                                        end
                                end
                                return {name="bucket:bucket_empty"}
                        end
                })
        end
end

minetest.register_craftitem("bucket:bucket_empty", {
        description = "Empty Bucket",
        inventory_image = "bucket.png",
        stack_max = 1,
        liquids_pointable = true,
        on_use = function(itemstack, user, pointed_thing)
                -- Must be pointing to node
                if pointed_thing.type ~= "node" then
                        return
                end
                -- Check if pointing to a liquid source
                node = minetest.get_node(pointed_thing.under)
                liquiddef = bucket.liquids[node.name]
                if liquiddef ~= nil and liquiddef.itemname ~= nil and (node.name == liquiddef.source or
                        (node.name == liquiddef.flowing and minetest.setting_getbool("liquid_finite"))) then

                        minetest.add_node(pointed_thing.under, {name="air"})

                        if node.name == liquiddef.source then node.param2 = LIQUID_MAX end
                        return ItemStack({name = liquiddef.itemname, metadata = tostring(node.param2)})
                end
        end,
})

bucket.register_liquid(
        "default:water_source",
        "default:water_flowing",
        "bucket:bucket_water",
        "bucket_water.png",
        "Water Bucket"
)

-- bucket.register_liquid(
--        "default:lava_source",
--        "default:lava_flowing",
--       "bucket:bucket_lava",
--        "bucket_lava.png",
--        "Lava Bucket"
-- )

-- minetest.register_craft({
--        type = "fuel",
--        recipe = "bucket:bucket_lava",
--        burntime = 60,
--        replacements = {{"bucket:bucket_lava", "bucket:bucket_empty"}},
-- })
 

Return to WIP Mods

Who is online

Users browsing this forum: No registered users and 8 guests

cron