123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- local S = lucky_block.intllib
- -- custom function (punches player with 5 damage)
- local function punchy(pos, player)
- player:punch(player, 1.0, {
- full_punch_interval = 1.0,
- damage_groups = {fleshy = 5}
- }, nil)
- minetest.sound_play("player_damage", {pos = pos, gain = 1.0}, true)
- minetest.chat_send_player(player:get_player_name(),
- lucky_block.green .. S("Stop hitting yourself!"))
- end
- -- custom function (pint sized player) and potion with recipe
- local function pint(pos, player)
- player:set_properties({
- visual_size = {x = 0.5, y = 0.5},
- collisionbox = {-0.15, 0.0, -0.15, 0.15, .85, 0.15},
- eye_height = 0.73,
- stepheight = 0.3
- })
- minetest.chat_send_player(player:get_player_name(),
- lucky_block.green .. S("Pint Sized Player!"))
- minetest.sound_play(lucky_block.snd_pop2, {pos = pos, gain = 1.0}, true)
- minetest.after (180, function(player, pos) -- 3 minutes
- if player and player:is_player() then
- player:set_properties({
- visual_size = {x = 1.0, y = 1.0},
- collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
- eye_height = 1.47,
- stepheight = 0.6
- })
- minetest.sound_play(lucky_block.snd_pop2, {
- pos = player:get_pos(), gain = 1.0}, true)
- end
- end, player)
- end
- -- pint sized potion item
- minetest.register_craftitem("lucky_block:pint_sized_potion", {
- description = S("Pint Sized Potion (DRINK ME)"),
- inventory_image = "lucky_pint_sized_potion.png",
- groups = {vessel = 1},
- on_use = function(itemstack, user, pointed_thing)
- itemstack:take_item()
- local pos = user:get_pos()
- local inv = user:get_inventory()
- local item = "vessels:glass_bottle"
- if inv:room_for_item("main", {name = item}) then
- inv:add_item("main", item)
- else
- minetest.add_item(pos, {name = item})
- end
- pint(pos, user)
- return itemstack
- end
- })
- -- pint sized potion recipe (default)
- if lucky_block.mod_def then
- minetest.register_craft({
- output = "lucky_block:pint_sized_potion",
- recipe = {
- {"default:bush_sapling", "flowers:tulip", "default:acacia_bush_sapling"},
- {"dye:blue", "default:apple", "dye:cyan"},
- {"", "vessels:glass_bottle", ""}
- }
- })
- end
- -- custom function (slender player) and potion with recipe
- local function slender(pos, player)
- player:set_properties({
- visual_size = {x = 1.0, y = 1.5},
- collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7 + .85, 0.3},
- eye_height = 1.47 + 0.73,
- stepheight = 0.9
- })
- minetest.chat_send_player(player:get_player_name(),
- lucky_block.green .. S("Slender Player!"))
- minetest.sound_play(lucky_block.snd_pop2, {pos = pos, gain = 1.0}, true)
- minetest.after (180, function(player, pos) -- 3 minutes
- if player and player:is_player() then
- player:set_properties({
- visual_size = {x = 1.0, y = 1.0},
- collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
- eye_height = 1.47,
- stepheight = 0.6
- })
- minetest.sound_play(lucky_block.snd_pop2, {
- pos = player:get_pos(), gain = 1.0}, true)
- end
- end, player)
- end
- -- slender player potion item
- minetest.register_craftitem("lucky_block:slender_player_potion", {
- description = S("Slender Player Potion (DRINK ME)"),
- inventory_image = "lucky_slender_potion.png",
- groups = {vessel = 1},
- on_use = function(itemstack, user, pointed_thing)
- itemstack:take_item()
- local pos = user:get_pos()
- local inv = user:get_inventory()
- local item = "vessels:glass_bottle"
- if inv:room_for_item("main", {name = item}) then
- inv:add_item("main", item)
- else
- minetest.add_item(pos, {name = item})
- end
- slender(pos, user)
- return itemstack
- end
- })
- -- slender player potion recipe
- if lucky_block.mod_def then
- minetest.register_craft({
- output = "lucky_block:slender_player_potion",
- recipe = {
- {"default:bush_sapling", "flowers:rose", "default:pine_bush_sapling"},
- {"dye:red", "default:apple", "dye:orange"},
- {"", "vessels:glass_bottle", ""}
- }
- })
- end
- -- lightning staff
- minetest.register_tool("lucky_block:lightning_staff", {
- description = S("Lightning Staff"),
- inventory_image = "lucky_lightning_staff.png",
- range = 10,
- groups = {not_in_creative_inventory = 1},
- on_use = function(itemstack, user, pointed_thing)
- local pos = user:get_pos()
- if pointed_thing.type == "object" then
- pos = pointed_thing.ref:get_pos()
- elseif pointed_thing.type == "node" then
- pos = pointed_thing.above
- end
- if not pos then return end
- local bnod = pos and minetest.get_node_or_nil(pos)
- local bref = bnod and minetest.registered_items[bnod.name]
- if bref and bref.buildable_to == true then
- minetest.set_node(pos, {name = "fire:basic_flame"})
- end
- local radius = 4
- local objs = minetest.get_objects_inside_radius(pos, radius)
- local obj_pos, dist
- -- add temp entity to cause damage
- local tmp_ent = minetest.add_entity(pos, "lucky_block:temp")
- for n = 1, #objs do
- obj_pos = objs[n]:get_pos()
- dist = vector.distance(pos, obj_pos)
- if dist < 1 then dist = 1 end
- local damage = math.floor((4 / dist) * radius)
- local ent = objs[n]:get_luaentity()
- -- if you blast yourself then delay hurt for bones mod if dead
- if objs[n] == user then
- minetest.after(0.1, function()
- objs[n]:punch(tmp_ent, 1.0, {
- full_punch_interval = 1.0,
- damage_groups = {fleshy = damage, fire = 1}
- }, pos)
- end)
- else
- objs[n]:punch(tmp_ent, 1.0, {
- full_punch_interval = 1.0,
- damage_groups = {fleshy = damage, fire = 1}
- }, pos)
- end
- end
- minetest.add_particle({
- pos = {x = pos.x, y = pos.y + 4, z = pos.z},
- velocity = {x = 0, y = 0, z = 0},
- acceleration = {x = 0, y = 0, z = 0},
- expirationtime = 1.0,
- collisiondetection = false,
- texture = "lucky_lightning.png",
- size = 100,
- glow = 15
- })
- minetest.sound_play("lightning", {
- pos = pos, gain = 1.0, max_hear_distance = 25}, true)
- itemstack:add_wear(65535 / 50) -- 50 uses
- return itemstack
- end
- })
- -- custom function (drop player inventory and replace with items and show msg)
- local function dropsy(pos, player, def)
- local player_inv = player:get_inventory()
- pos = player:get_pos() or pos
- for i = 1, player_inv:get_size("main") do
- local obj = minetest.add_item(pos, player_inv:get_stack("main", i))
- if obj then
- obj:set_velocity({
- x = math.random(-10, 10) / 9,
- y = 5,
- z = math.random(-10, 10) / 9
- })
- end
- player_inv:set_stack("main", i, def.item)
- end
- minetest.chat_send_player(player:get_player_name(), lucky_block.green .. S(def.msg))
- end
- local tex = lucky_block.mod_mcl and "default_glass.png" or "default_obsidian_glass.png^[brighten"
- -- void mirror block (place to see through solid walls)
- minetest.register_node("lucky_block:void_mirror", {
- description = S("Void Mirror (Place to see through solid walls during daytime)"),
- drawtype = "normal",
- tiles = {tex},
- use_texture_alpha = "clip",
- groups = {handy = 1, snappy = 3, not_in_creative_inventory = 1},
- sounds = lucky_block.snd_glass,
- _mcl_hardness = 0.6
- })
- -- Troll item drop
- local function fake_items(pos, player, def)
- for n = 1, 25 do
- minetest.add_particle({
- time = 15,
- pos = {
- x = pos.x + math.random(-20, 20) / 10,
- y = pos.y,
- z = pos.z + math.random(-20, 20) / 10
- },
- velocity = {x = 0, y = 2, z = 0},
- acceleration = {x = 0, y = -10, z = 0},
- expirationtime = 4,
- maxsize = 4,
- texture = def.tex,
- glow = 2,
- size = 5,
- collisiondetection = true,
- vertical = true
- })
- end
- minetest.chat_send_player(player:get_player_name(),
- lucky_block.green .. S("Wow! So many faux " .. def.txt .. "!"))
- end
- -- Void Pick (disable for mineclone since it has silk touch tools)
- if not lucky_block.mod_mcl then
- local old_handle_node_drops = minetest.handle_node_drops
- function minetest.handle_node_drops(pos, drops, digger)
- -- are we holding Crystal Shovel?
- if not digger
- or digger:get_wielded_item():get_name() ~= "lucky_block:pick_void" then
- return old_handle_node_drops(pos, drops, digger)
- end
- local nn = minetest.get_node(pos).name
- if nn == "default:furnace_active"
- or nn:find("xpanes:")
- or nn:find("door")
- or minetest.get_item_group(nn, "cracky") == 0
- or minetest.get_item_group(nn, "no_silktouch") == 1 then
- return old_handle_node_drops(pos, drops, digger)
- end
- return old_handle_node_drops(pos, {ItemStack(nn)}, digger)
- end
- minetest.register_tool("lucky_block:pick_void", {
- description = "Void pick (Silk Touch)",
- inventory_image = "lucky_void_pick.png",
- wield_image = "lucky_void_pick.png^[transformR90",
- tool_capabilities = {
- full_punch_interval = 1.2,
- max_drop_level = 3,
- groupcaps = {
- cracky = {
- times = {[1] = 2.4, [2] = 1.2, [3] = 0.60},
- uses = 20,
- maxlevel = 3
- }
- },
- damage_groups = {fleshy = 5},
- },
- groups = {pickaxe = 1, not_in_creative_inventory = 1},
- sound = {breaks = "default_tool_breaks"}
- })
- end
- -- add custom functions and special drops
- lucky_block:add_blocks({
- {"cus", pint},
- {"cus", punchy},
- {"cus", slender},
- {"dro", {"lucky_block:pint_sized_potion"}, 1},
- {"dro", {"lucky_block:slender_player_potion"}, 1},
- {"dro", {"lucky_block:void_mirror"}}
- })
- -- custom items for default mod
- if lucky_block.mod_def then
- lucky_block:add_blocks({
- {"cus", dropsy, {item = "default:dry_shrub", msg = "Dry shrub takeover!"} },
- {"cus", fake_items, {tex = "default_diamond.png", txt = "diamonds"} },
- {"cus", fake_items, {tex = "default_gold_ingot.png", txt = "ingots"} },
- {"cus", fake_items, {tex = "default_mese_crystal.png", txt = "crystals"} },
- {"nod", "default:chest", 0, {
- {name = "lucky_block:pick_void", max = 1, chance = 7},
- {name = "default:stone_with_coal", max = 5},
- {name = "default:stone_with_iron", max = 5},
- {name = "default:stone_with_copper", max = 5},
- {name = "default:stone_with_mese", max = 5},
- {name = "default:stone_with_gold", max = 5},
- {name = "default:stone_with_diamond", max = 5}
- }},
- {"nod", "default:chest", 0, {
- {name = "default:stick", max = 10},
- {name = "default:acacia_bush_stem", max = 10},
- {name = "default:bush_stem", max = 10},
- {name = "default:pine_bush_stem", max = 10},
- {name = "default:grass_1", max = 10},
- {name = "default:dry_grass_1", max = 10},
- {name = "lucky_block:lightning_staff", max = 1, chance = 10}
- }}
- })
- end
|