707 lines
22 KiB
Lua
707 lines
22 KiB
Lua
minetest.register_item(":", { -- Hand
|
|
type = "none",
|
|
wield_image = "CRT.png",
|
|
wield_scale = {x=.3,y=2,z=2.5},
|
|
range = 5,
|
|
tool_capabilities = {
|
|
max_drop_level = 0,
|
|
full_punch_interval = 0.4,
|
|
groupcaps = {
|
|
choppy = {times = {[1] = 2, [2] = 1.5, [3] = 1.3}, uses = 20, maxlevel = 1},
|
|
crumbly = {times = {[1] = 1.0, [2] = 0.9, [3] = 0.8}, uses = 20, maxlevel = 1},
|
|
cracky = {times = {[1] = 1.0, [2] = 0.7, [3] = 0.5}, uses = 20, maxlevel = 1},
|
|
flower = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
},
|
|
damage_groups = {fleshy = 0.5, snappy = 1, cracky=1},
|
|
}
|
|
})
|
|
|
|
local function explode(pos, radius)
|
|
local objects = minetest.get_objects_inside_radius(pos, radius)
|
|
for _, obj in pairs(objects) do
|
|
local obj_pos = obj:get_pos()
|
|
local dir = vector.normalize(vector.subtract(obj_pos, pos))
|
|
obj:set_velocity(vector.multiply(dir, 10))
|
|
obj:punch(obj, 1.0, {
|
|
full_punch_interval = 1.0,
|
|
damage_groups = {fleshy = 4},
|
|
})
|
|
end
|
|
|
|
for x = -radius, radius do
|
|
for y = -radius, radius do
|
|
for z = -radius, radius do
|
|
local p = {x = pos.x + x, y = pos.y + y, z = pos.z + z}
|
|
local d = vector.distance(pos, p)
|
|
if d <= radius then
|
|
minetest.remove_node(p)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
minetest.register_craftitem("amogus_items:amogus", {
|
|
description = "Mini Amogus friend",
|
|
inventory_image = "amogus_item.png",
|
|
|
|
--on_use = function(itemstack, user)
|
|
-- minetest.sound_play("amogus_sound", {
|
|
-- pos = user:get_pos(),
|
|
-- gain = 1.0,
|
|
-- max_hear_distance = 5
|
|
-- })
|
|
--end,
|
|
|
|
--on_place = function(itemstack, placer, pointed_thing)
|
|
-- local pos = pointed_thing.above
|
|
-- local dir = placer:get_look_dir()
|
|
-- local yaw = math.atan(dir.x/dir.z)
|
|
-- if dir.z > 0 then
|
|
-- yaw = yaw + math.pi
|
|
-- end
|
|
-- minetest.add_entity(pos, "amogus_entities:amogus", yaw)
|
|
--end
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.above
|
|
minetest.add_entity(pos, "amogus_entities:mini_crewmate")
|
|
--minetest.sound_play("amogus_sound", {
|
|
-- pos = pos,
|
|
-- gain = 1.0,
|
|
-- max_hear_distance = 5
|
|
--})
|
|
amogus_general.play_random_sound(
|
|
"amogus_sound",
|
|
pos,
|
|
1.0, -- gain
|
|
5, -- max_hear_distance
|
|
2.0 -- pitch
|
|
)
|
|
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
end
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:sprite", {
|
|
description = "Zprite - Soda",
|
|
inventory_image = "sprite.png",
|
|
on_use = minetest.item_eat(10),
|
|
})
|
|
minetest.register_craftitem("amogus_items:coke", {
|
|
description = "Cock Cola - Soda",
|
|
inventory_image = "coke.png",
|
|
on_use = minetest.item_eat(2),
|
|
})
|
|
minetest.register_craftitem("amogus_items:fanta", {
|
|
description = "Funta - Soda",
|
|
inventory_image = "fanta.png",
|
|
on_use = minetest.item_eat(2),
|
|
})
|
|
minetest.register_craftitem("amogus_items:tomato", {
|
|
description = "Tomato",
|
|
inventory_image = "tomato.png",
|
|
on_use = minetest.item_eat(2),
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:water", {
|
|
description = "Water",
|
|
inventory_image = "water_bottle.png",
|
|
on_use = minetest.item_eat(8),
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:lightsaber_blue", {
|
|
description = "Blue Lightsaber",
|
|
inventory_image = "lightsaber_blue.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.1,
|
|
max_drop_level=3,
|
|
groupcaps={
|
|
snappy={times={[1]=0.1, [2]=0.1, [3]=0.1}, uses=0, maxlevel=3},
|
|
},
|
|
damage_groups = {fleshy=1.01},
|
|
},
|
|
--sound = {breaks = "amogus_sound"},
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:lightsaber_red", {
|
|
description = "Red Lightsaber",
|
|
inventory_image = "lightsaber_red.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.1,
|
|
max_drop_level=3,
|
|
groupcaps={
|
|
snappy={times={[1]=0.1, [2]=0.1, [3]=0.1}, uses=0, maxlevel=3},
|
|
},
|
|
damage_groups = {fleshy=1.01},
|
|
},
|
|
|
|
--sound = {breaks = "amogus_sound"},
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:lightsaber_green", {
|
|
description = "Green Lightsaber",
|
|
inventory_image = "lightsaber_green.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.1,
|
|
max_drop_level=3,
|
|
groupcaps={
|
|
snappy={times={[1]=0.1, [2]=0.1, [3]=0.1}, uses=0, maxlevel=3},
|
|
},
|
|
damage_groups = {fleshy=1.01},
|
|
},
|
|
--sound = {breaks = "amogus_sound"},
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:gold_ingot", {
|
|
description = "Gold Ingot",
|
|
inventory_image = "gold_ingot.png",
|
|
})minetest.register_craftitem("amogus_items:rock", {
|
|
description = "Rock",
|
|
inventory_image = "rocks.png",
|
|
})
|
|
minetest.register_craftitem("amogus_items:sussium_ingot", {
|
|
description = "Sussium Ingot",
|
|
inventory_image = "sussium_ingot.png",
|
|
})
|
|
|
|
--add theese items goldenpickaxe, stonepickaxe and allow them slowly break nodes and destroy it after 30 uses
|
|
minetest.register_tool("amogus_items:goldenplumba", {
|
|
description = "Golden Plumba",
|
|
inventory_image = "goldenplumba.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.1,
|
|
max_drop_level = 3,
|
|
groupcaps = {
|
|
unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
snappy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
choppy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
},
|
|
damage_groups = {fleshy = 2},
|
|
},
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
minetest.node_dig(pointed_thing.under, minetest.get_node(pointed_thing.under), user)
|
|
end
|
|
itemstack:add_wear(65535/10)
|
|
return itemstack
|
|
end,
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:susplumba", {
|
|
description = "Sus Plumba",
|
|
inventory_image = "plumba.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 0.1,
|
|
max_drop_level = 3,
|
|
groupcaps = {
|
|
unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
snappy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
choppy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 10, maxlevel=3},
|
|
},
|
|
damage_groups = {fleshy = 2},
|
|
},
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
minetest.node_dig(pointed_thing.under, minetest.get_node(pointed_thing.under), user)
|
|
end
|
|
itemstack:add_wear(65535/40)
|
|
return itemstack
|
|
end,
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:stonepickaxe", {
|
|
description = "Stone Pickaxe",
|
|
inventory_image = "stone_pick.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
stone={times={[1]=2.5, [2]=1.0, [3]=0.50}, uses=30, maxlevel=1},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
minetest.register_tool("amogus_items:goldenpickaxe", {
|
|
description = "Golden Pickaxe",
|
|
inventory_image = "golden_pick.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
stone={times={[1]=1.3, [2]=0.60, [3]=0.40}, uses=30, maxlevel=1},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
minetest.register_tool("amogus_items:sussiumpickaxe", {
|
|
description = "Sussium Pickaxe",
|
|
inventory_image = "sussium_pickaxe.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
stone={times={[0.5]=2.0,[1]=0.85, [2]=0.40, [3]=0.20}, uses=30, maxlevel=1},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
minetest.register_tool("amogus_items:goldenaxe", {
|
|
description = "Golden Axe",
|
|
inventory_image = "goldenaxe.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
choppy={times={[1]=2.50, [2]=1.40, [3]=0.45}, uses=30, maxlevel=2},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
groups = {flammable = 2}
|
|
})
|
|
minetest.register_tool("amogus_items:stoneaxe", {
|
|
description = "Stone Axe",
|
|
inventory_image = "stone_axe.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
choppy={times={[1]=2.50, [2]=1.40, [3]=0.80}, uses=30, maxlevel=2},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
groups = {flammable = 2}
|
|
})
|
|
minetest.register_tool("amogus_items:sussiumaxe", {
|
|
description = "Sussium Axe",
|
|
inventory_image = "sussium_axe.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
choppy={times={[1]=0.90, [2]=0.80, [3]=0.35}, uses=30, maxlevel=2},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
|
|
groups = {flammable = 2}
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:stoneshovel", {
|
|
description = "stone shovel",
|
|
inventory_image = "stone_shovel.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
crumbly={times={[1]=1.5, [2]=1.0, [3]=0.9}, uses=30, maxlevel=2},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
groups = {flammable = 2}
|
|
})
|
|
|
|
|
|
minetest.register_tool("amogus_items:goldenshovel", {
|
|
description = "golden shovel",
|
|
inventory_image = "golden_shovel.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
crumbly={times={[1]=1.0, [2]=0.8, [3]=0.6}, uses=30, maxlevel=2},
|
|
},
|
|
-- damage_groups = {fleshy=1.0},
|
|
},
|
|
groups = {flammable = 2}
|
|
})
|
|
minetest.register_tool("amogus_items:sussiumshovel", {
|
|
description = "sussium shovel",
|
|
inventory_image = "sussium_shovel.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
crumbly={times={[1]=0.8, [2]=0.6, [3]=0.35}, uses=30, maxlevel=2},
|
|
},
|
|
--damage_groups = {fleshy=1.0},
|
|
},
|
|
groups = {flammable = 2}
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:obsussian_hammer", {
|
|
description = "obsussian hammer",
|
|
inventory_image = "obsusian_hammer.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level=1,
|
|
groupcaps={
|
|
choppy={times={[1]=0.90, [2]=0.40, [3]=0.06}, uses=30, maxlevel=2},
|
|
crumbly={times={[1]=0.90, [2]=0.40, [3]=0.06}, uses=30, maxlevel=2},
|
|
stone={times={[0.5]=1.4,[1]=0.90, [2]=0.40, [3]=0.06}, uses=30, maxlevel=1},
|
|
crumbly={times={[1]=0.90, [2]=0.40, [3]=0.06}, uses=30, maxlevel=2},
|
|
},
|
|
damage_groups = {fleshy=1.0},
|
|
},
|
|
|
|
groups = {flammable = 2}
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:pcb", {
|
|
description = "PCB",
|
|
inventory_image = "PCB.png",
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:capacitor", {
|
|
description = "Capacitor",
|
|
inventory_image = "capacitor.png",
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:sugar", {
|
|
description = "Sugar",
|
|
inventory_image = "sugar.png",
|
|
on_use = minetest.item_eat(20),
|
|
})
|
|
|
|
minetest.register_craftitem("amogus_items:iron_ingot", {
|
|
description = "Iron Ingot",
|
|
inventory_image = "iron_ingot.png",
|
|
})
|
|
|
|
minetest.register_tool("amogus_items:dynamite", {
|
|
description = "dynamite",
|
|
inventory_image = "dynamite.png",
|
|
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.above
|
|
minetest.add_entity(pos, "amogus_items:dynamite_entity")
|
|
-- remove one item from the itemstack
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
end
|
|
})
|
|
|
|
minetest.register_entity("amogus_items:dynamite_entity", {
|
|
physical = true,
|
|
collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5},
|
|
visual = "sprite",
|
|
textures = {"dynamite.png"},
|
|
on_step = function(self, dtime)
|
|
local pos = self.object:get_pos()
|
|
explode(pos,5)
|
|
minetest.add_particlespawner({
|
|
amount = 2900,
|
|
time = 0.5,
|
|
-- create 15 block radius of particles
|
|
minpos = {x=pos.x-5, y=pos.y-5, z=pos.z-5},
|
|
maxpos = {x=pos.x+5, y=pos.y+5, z=pos.z+5},
|
|
minvel = {x=-2, y=-2, z=-2},
|
|
maxvel = {x=2, y=2, z=2},
|
|
minacc = {x=0, y=-10, z=0},
|
|
maxacc = {x=0, y=-10, z=0},
|
|
minexptime = 1,
|
|
maxexptime = 3,
|
|
minsize = 1,
|
|
maxsize = 2,
|
|
texture = "capacitor.png",
|
|
})
|
|
self.object:remove()
|
|
end
|
|
})
|
|
|
|
|
|
-- below is modified code from bucket mod from minetest_game. (Minetest 0.4 mod: bucket)
|
|
-- original is licensed under:
|
|
-- GNU Lesser General Public License, version 2.1
|
|
-- Copyright (C) 2011-2016 Kahrl <kahrl@gmx.net>
|
|
-- Copyright (C) 2011-2016 celeron55, Perttu Ahola <celeron55@gmail.com>
|
|
-- Copyright (C) 2011-2016 Various Minetest developers and contributors
|
|
|
|
minetest.register_alias("empty_bucket", "amogus_items:empty_bucket")
|
|
minetest.register_alias("water_bucket", "amogus_items:water_bucket")
|
|
|
|
minetest.register_craft({
|
|
output = "bucket:empty_bucket 1",
|
|
recipe = {
|
|
{"amogus_items:iron_ingot", "", "amogus_items:iron_ingot"},
|
|
{"", "amogus_items:iron_ingot", ""},
|
|
}
|
|
})
|
|
|
|
bucket = {}
|
|
bucket.liquids = {}
|
|
|
|
local function check_protection(pos, name, text)
|
|
if minetest.is_protected(pos, name) then
|
|
minetest.log("action", (name ~= "" and name or "A mod")
|
|
.. " tried to " .. text
|
|
.. " at protected position "
|
|
.. minetest.pos_to_string(pos)
|
|
.. " with a bucket")
|
|
minetest.record_protection_violation(pos, name)
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
-- 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)
|
|
-- name = text description of the bucket item
|
|
-- groups = (optional) groups of the bucket item, for example {water_bucket = 1}
|
|
-- force_renew = (optional) bool. Force the liquid source to renew if it has a
|
|
-- source neighbour, even if defined as 'liquid_renewable = false'.
|
|
-- Needed to avoid creating holes in sloping rivers.
|
|
-- This function can be called from any mod (that depends on bucket).
|
|
function bucket.register_liquid(source, flowing, itemname, inventory_image, name,
|
|
groups, force_renew)
|
|
bucket.liquids[source] = {
|
|
source = source,
|
|
flowing = flowing,
|
|
itemname = itemname,
|
|
force_renew = force_renew,
|
|
}
|
|
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 = groups,
|
|
|
|
on_place = function(itemstack, user, pointed_thing)
|
|
-- Must be pointing to node
|
|
if pointed_thing.type ~= "node" then
|
|
return
|
|
end
|
|
|
|
local node = minetest.get_node_or_nil(pointed_thing.under)
|
|
local ndef = node and minetest.registered_nodes[node.name]
|
|
|
|
-- Call on_rightclick if the pointed node defines it
|
|
if ndef and ndef.on_rightclick and
|
|
not (user and user:is_player() and
|
|
user:get_player_control().sneak) then
|
|
return ndef.on_rightclick(
|
|
pointed_thing.under,
|
|
node, user,
|
|
itemstack)
|
|
end
|
|
|
|
local lpos
|
|
|
|
-- Check if pointing to a buildable node
|
|
if ndef and ndef.buildable_to then
|
|
-- buildable; replace the node
|
|
lpos = pointed_thing.under
|
|
else
|
|
-- not buildable to; place the liquid above
|
|
-- check if the node above can be replaced
|
|
|
|
lpos = pointed_thing.above
|
|
node = minetest.get_node_or_nil(lpos)
|
|
local above_ndef = node and minetest.registered_nodes[node.name]
|
|
|
|
if not above_ndef or not above_ndef.buildable_to then
|
|
-- do not remove the bucket with the liquid
|
|
return itemstack
|
|
end
|
|
end
|
|
|
|
if check_protection(lpos, user
|
|
and user:get_player_name()
|
|
or "", "place "..source) then
|
|
return
|
|
end
|
|
|
|
minetest.set_node(lpos, {name = source})
|
|
return ItemStack("amogus_items:empty_bucket")
|
|
end
|
|
})
|
|
end
|
|
end
|
|
|
|
-- random prefixes for names
|
|
local bucket_names_prefixes = {
|
|
"Sussy",
|
|
"Sussy wussy",
|
|
"Sus",
|
|
"Imposterous",
|
|
"This is",
|
|
"I wonder what is the",
|
|
"You probably need",
|
|
"Big",
|
|
"Cursed",
|
|
"I want that",
|
|
"Very funny",
|
|
"Suspicious",
|
|
"SuspicioususUSSuS",
|
|
"SuspiciousususSuSuSsSSuS",
|
|
"AAAAA!! IT'S AGAIN THAT",
|
|
"Fantastick",
|
|
"I don't know what is that",
|
|
"This is propably the longest item name you will ever see and btw this item is called",
|
|
"I like",
|
|
"Whatever that is, I've got my own",
|
|
"A",
|
|
"Wonderful",
|
|
"Respectful",
|
|
"Amogus shaped",
|
|
"Impostor shaped",
|
|
"Imposter shaped",
|
|
"Sussy shaped"
|
|
}
|
|
|
|
-- random name
|
|
local empty_bucket_names = {
|
|
"Bmpty Eucket",
|
|
"Bupty Emcket",
|
|
"Emptt Buckey",
|
|
"Emckty Bupet"
|
|
}
|
|
|
|
|
|
minetest.register_craftitem("amogus_items:empty_bucket", {
|
|
-- random name
|
|
--description = (empty_bucket_names[math.random(1, #empty_bucket_names)]),
|
|
description = (bucket_names_prefixes[math.random(1, #bucket_names_prefixes)] .. " " .. empty_bucket_names[math.random(1, #empty_bucket_names)]),
|
|
inventory_image = "empty_bucket.png",
|
|
groups = {tool = 1},
|
|
liquids_pointable = true,
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "object" then
|
|
pointed_thing.ref:punch(user, 1.0, { full_punch_interval=1.0 }, nil)
|
|
return user:get_wielded_item()
|
|
elseif pointed_thing.type ~= "node" then
|
|
-- do nothing if it's neither object nor node
|
|
return
|
|
end
|
|
-- Check if pointing to a liquid source
|
|
local node = minetest.get_node(pointed_thing.under)
|
|
local liquiddef = bucket.liquids[node.name]
|
|
local item_count = user:get_wielded_item():get_count()
|
|
|
|
if liquiddef ~= nil
|
|
and liquiddef.itemname ~= nil
|
|
and node.name == liquiddef.source then
|
|
if check_protection(pointed_thing.under,
|
|
user:get_player_name(),
|
|
"take ".. node.name) then
|
|
return
|
|
end
|
|
|
|
-- default set to return filled bucket
|
|
local giving_back = liquiddef.itemname
|
|
|
|
-- check if holding more than 1 empty bucket
|
|
if item_count > 1 then
|
|
|
|
-- if space in inventory add filled bucked, otherwise drop as item
|
|
local inv = user:get_inventory()
|
|
if inv:room_for_item("main", {name=liquiddef.itemname}) then
|
|
inv:add_item("main", liquiddef.itemname)
|
|
else
|
|
local pos = user:get_pos()
|
|
pos.y = math.floor(pos.y + 0.5)
|
|
minetest.add_item(pos, liquiddef.itemname)
|
|
end
|
|
|
|
-- set to return empty buckets minus 1
|
|
giving_back = "amogus_items:empty_bucket "..tostring(item_count-1)
|
|
|
|
end
|
|
|
|
-- force_renew requires a source neighbour
|
|
local source_neighbor = false
|
|
if liquiddef.force_renew then
|
|
source_neighbor =
|
|
minetest.find_node_near(pointed_thing.under, 1, liquiddef.source)
|
|
end
|
|
if not (source_neighbor and liquiddef.force_renew) then
|
|
minetest.add_node(pointed_thing.under, {name = "air"})
|
|
end
|
|
|
|
return ItemStack(giving_back)
|
|
else
|
|
-- non-liquid nodes will have their on_punch triggered
|
|
local node_def = minetest.registered_nodes[node.name]
|
|
if node_def then
|
|
node_def.on_punch(pointed_thing.under, node, user, pointed_thing)
|
|
end
|
|
return user:get_wielded_item()
|
|
end
|
|
end,
|
|
})
|
|
|
|
|
|
-- random name
|
|
local water_bucket_names = {
|
|
"Bater Wucket",
|
|
"Buter Wacket",
|
|
"Watet Bucker",
|
|
"Wacker Butet"
|
|
}
|
|
|
|
|
|
bucket.register_liquid(
|
|
"amogus_blocks:water_source",
|
|
"amogus_blocks:water_flowing",
|
|
"amogus_items:water_bucket",
|
|
"water_bucket.png",
|
|
-- random name
|
|
(bucket_names_prefixes[math.random(1, #bucket_names_prefixes)] .. " " .. water_bucket_names[math.random(1, #water_bucket_names)]),
|
|
{tool = 1, water_bucket = 1}
|
|
)
|
|
|
|
minetest.register_tool("amogus_items:obsusian_shovel", {
|
|
description = "Obsidian Shovel",
|
|
inventory_image = "obsusian_shovel.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
crumbly = {times = {[1] = 0.80, [2] = 0.40, [3] = 0.20}, uses = 30, maxlevel = 3},
|
|
},
|
|
damage_groups = {fleshy = 1.6},
|
|
},
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|
|
|
|
|
|
minetest.register_tool("amogus_items:obsusian_sword", {
|
|
description = "Obsidian Sword",
|
|
inventory_image = "obsusian_sword.png",
|
|
tool_capabilities = {
|
|
full_punch_interval = 1.0,
|
|
max_drop_level = 1,
|
|
groupcaps = {
|
|
snappy = {times = {[2] = 0.70, [3] = 0.30}, uses = 30, maxlevel = 3},
|
|
},
|
|
damage_groups = {fleshy = 4},
|
|
},
|
|
sound = {breaks = "default_tool_breaks"},
|
|
})
|