SussyCraft/mods/amogus_items/init.lua
Kacper Kostka e281b06031 n
2023-02-05 16:37:48 +01:00

680 lines
22 KiB
Lua

minetest.register_item(":", { -- Hand
type = "none",
wield_image = "coke.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 = 1, 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 = "Sprite",
inventory_image = "sprite.png",
on_use = minetest.item_eat(10),
})
minetest.register_craftitem("amogus_items:coke", {
description = "Coke",
inventory_image = "coke.png",
on_use = minetest.item_eat(10),
})
minetest.register_craftitem("amogus_items:fanta", {
description = "Fanta",
inventory_image = "fanta.png",
on_use = minetest.item_eat(10),
})
minetest.register_craftitem("amogus_items:tomato", {
description = "Tomato",
inventory_image = "tomato.png",
on_use = minetest.item_eat(10),
})
minetest.register_craftitem("amogus_items:water", {
inventory_image = "water.png",
on_use = minetest.item_eat(10),
})
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=10},
},
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=10},
},
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=10},
},
sound = {breaks = "amogus_sound"},
})
-- add theese items : goldenpickaxe, wooden plank, gold_ingot, sussium_ingot
minetest.register_craftitem("amogus_items:wooden_plank", {
description = "Wooden Plank",
inventory_image = "wooden_plank.png",
})
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 = 10},
},
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 = 10},
},
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=2},
},
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=2},
},
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=2},
},
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=4},
},
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=4},
},
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=4},
},
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=4},
},
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=4},
},
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=4},
},
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=4},
},
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",
})
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}
)
-- end of modifed code from bucket mod from minetest_game