357 lines
11 KiB
Lua
357 lines
11 KiB
Lua
-------Bouncy wool---------
|
|
|
|
local glass_itemstring = "default:glass"
|
|
local obsidian_itemstring = "default:obsidian"
|
|
if why.mcl then
|
|
glass_itemstring = "mcl_core:glass"
|
|
obsidian_itemstring = "mcl_core:obsidian"
|
|
end
|
|
|
|
local wool_list = why.get_group_items({"wool"})
|
|
|
|
for i, itemstring in ipairs(wool_list.wool) do
|
|
local groups = minetest.registered_nodes[itemstring].groups
|
|
groups.bouncy = 95
|
|
minetest.override_item(itemstring, {groups = groups})
|
|
end -- Intentionally not making it prevent fall damage :D
|
|
|
|
if why.mcl then
|
|
-------Sunnier sunflowers-------
|
|
minetest.override_item("mcl_flowers:sunflower_top", {
|
|
light_source = 14
|
|
})
|
|
-------Blue Feathers--------
|
|
minetest.register_craftitem("small_why_things:blue_feather", {
|
|
description = "Blue Feather",
|
|
wield_image = "mcl_mobitems_feather.png^[multiply:#0044ff",
|
|
inventory_image = "mcl_mobitems_feather.png^[multiply:#0044ff",
|
|
})
|
|
minetest.register_craft({
|
|
output = "small_why_things:blue_feather",
|
|
type = "shapeless",
|
|
recipe = {"mcl_mobitems:feather", "mcl_dye:blue"}
|
|
})
|
|
minetest.register_craft({
|
|
output = "small_why_things:blue_feather",
|
|
type = "shapeless",
|
|
recipe = {"mcl_mobitems:feather", "mcl_dye:lightblue"}
|
|
})
|
|
end
|
|
|
|
-------Craftable barriers-------
|
|
minetest.register_node("small_why_things:craftable_barrier", {
|
|
description = "Craftable Barrier",
|
|
drawtype = "airlike",
|
|
paramtype = "light",
|
|
inventory_image = "small_why_things_craftable_barrier.png^[colorize:#FFFF00:127",
|
|
wield_image = "small_why_things_craftable_barrier.png^[colorize:#FFFF00:127",
|
|
tiles = {"blank.png"},
|
|
sunlight_propagates = true,
|
|
is_ground_content = false,
|
|
groups = {not_solid = 1, cracky = 1, pickaxey = 1},
|
|
_mcl_blast_resistance = 1200,
|
|
_mcl_hardness = 50,
|
|
after_place_node = function(pos, player, itemstack, pointed_thing)
|
|
if player == nil then
|
|
return
|
|
end
|
|
minetest.add_particle({
|
|
pos = pos,
|
|
expirationtime = 1,
|
|
size = 8,
|
|
texture = "small_why_things_craftable_barrier.png^[colorize:#FFFF00:127",
|
|
glow = 14,
|
|
playername = player:get_player_name()
|
|
})
|
|
end,
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "small_why_things:craftable_barrier 17",
|
|
recipe = {
|
|
{glass_itemstring, glass_itemstring, glass_itemstring},
|
|
{glass_itemstring, obsidian_itemstring, glass_itemstring},
|
|
{glass_itemstring, glass_itemstring, glass_itemstring}
|
|
}
|
|
})
|
|
|
|
minetest.register_globalstep(function() --I wish there was a way to unregister the MineClone function.
|
|
for _,player in pairs(minetest.get_connected_players()) do
|
|
local wi = player:get_wielded_item():get_name()
|
|
if wi == "mcl_core:barrier" or wi == "mcl_core:realm_barrier"
|
|
or wi == "small_why_things:craftable_barrier"
|
|
or minetest.get_item_group(wi, "light_block") ~= 0 then
|
|
local pos = vector.round(player:get_pos())
|
|
local r = 8
|
|
local vm = minetest.get_voxel_manip()
|
|
local emin, emax = vm:read_from_map({x=pos.x-r, y=pos.y-r, z=pos.z-r}, {x=pos.x+r, y=pos.y+r, z=pos.z+r})
|
|
local area = VoxelArea:new{
|
|
MinEdge = emin,
|
|
MaxEdge = emax,
|
|
}
|
|
local data = vm:get_data()
|
|
for x=pos.x-r, pos.x+r do
|
|
for y=pos.y-r, pos.y+r do
|
|
for z=pos.z-r, pos.z+r do
|
|
local vi = area:indexp({x=x, y=y, z=z})
|
|
local nodename = minetest.get_name_from_content_id(data[vi])
|
|
local light_block_group = minetest.get_item_group(nodename, "light_block")
|
|
|
|
local tex
|
|
if nodename == "mcl_core:barrier" then
|
|
tex = "small_why_things_craftable_barrier.png"
|
|
elseif nodename == "small_why_things:craftable_barrier" then
|
|
tex = "small_why_things_craftable_barrier.png^[colorize:#FFFF00:127"
|
|
elseif nodename == "mcl_core:realm_barrier" then
|
|
tex = "small_why_things_craftable_barrier.png^[colorize:#FF00FF:127"
|
|
elseif light_block_group ~= 0 then
|
|
tex = "mcl_core_light_" .. (light_block_group - 1) .. ".png"
|
|
end
|
|
if tex then
|
|
minetest.add_particle({
|
|
pos = {x=x, y=y, z=z},
|
|
expirationtime = 1,
|
|
size = 8,
|
|
texture = tex,
|
|
glow = 14,
|
|
playername = player:get_player_name()
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
if why.mcl then
|
|
function mcl_core.grow_cactus(pos, node)
|
|
pos.y = pos.y-1
|
|
local name = minetest.get_node(pos).name
|
|
if minetest.get_item_group(name, "sand") ~= 0 then
|
|
pos.y = pos.y+1
|
|
local height = 0
|
|
while minetest.get_node(pos).name == "mcl_core:cactus" --[[and height < 4]] do
|
|
height = height+1
|
|
pos.y = pos.y+1
|
|
end
|
|
if minetest.get_node(pos).name == "air" then
|
|
minetest.set_node(pos, {name="mcl_core:cactus"})
|
|
end
|
|
end
|
|
end
|
|
function mcl_core.grow_reeds(pos, node)
|
|
pos.y = pos.y-1
|
|
local name = minetest.get_node(pos).name
|
|
if minetest.get_item_group(name, "soil_sugarcane") ~= 0 then
|
|
if minetest.find_node_near(pos, 1, {"group:water"}) == nil
|
|
and minetest.find_node_near(pos, 1, {"group:frosted_ice"}) == nil then
|
|
return
|
|
end
|
|
pos.y = pos.y+1
|
|
local height = 0
|
|
while minetest.get_node(pos).name == "mcl_core:reeds" --[[and height < 3]] do
|
|
height = height+1
|
|
pos.y = pos.y+1
|
|
end
|
|
if minetest.get_node(pos).name == "air" then
|
|
minetest.set_node(pos, {name="mcl_core:reeds"})
|
|
end
|
|
end
|
|
end
|
|
if mcl_bamboo then
|
|
function mcl_bamboo.grow(pos)
|
|
local bottom = mcl_util.traverse_tower(pos,-1)
|
|
local top, _ = mcl_util.traverse_tower(bottom,1)
|
|
local node = minetest.get_node(pos)
|
|
if minetest.get_node(vector.offset(top,0,1,0)).name ~= "air" then return end
|
|
minetest.set_node(vector.offset(top,0,1,0),node)
|
|
end
|
|
end
|
|
minetest.override_item("mcl_core:reeds", {climbable = true})
|
|
else
|
|
function default.grow_cactus(pos, node)
|
|
if node.param2 >= 4 then
|
|
return
|
|
end
|
|
pos.y = pos.y - 1
|
|
if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then
|
|
return
|
|
end
|
|
pos.y = pos.y + 1
|
|
local height = 0
|
|
while node.name == "default:cactus" do
|
|
height = height + 1
|
|
pos.y = pos.y + 1
|
|
node = minetest.get_node(pos)
|
|
end
|
|
if node.name ~= "air" then
|
|
return
|
|
end
|
|
if minetest.get_node_light(pos) < 13 then
|
|
return
|
|
end
|
|
minetest.set_node(pos, {name = "default:cactus"})
|
|
return true
|
|
end
|
|
|
|
function default.grow_papyrus(pos, node)
|
|
pos.y = pos.y - 1
|
|
local name = minetest.get_node(pos).name
|
|
if name ~= "default:dirt" and
|
|
name ~= "default:dirt_with_grass" and
|
|
name ~= "default:dirt_with_dry_grass" and
|
|
name ~= "default:dirt_with_rainforest_litter" and
|
|
name ~= "default:dry_dirt" and
|
|
name ~= "default:dry_dirt_with_dry_grass" then
|
|
return
|
|
end
|
|
if not minetest.find_node_near(pos, 3, {"group:water"}) then
|
|
return
|
|
end
|
|
pos.y = pos.y + 1
|
|
local height = 0
|
|
while node.name == "default:papyrus" do
|
|
height = height + 1
|
|
pos.y = pos.y + 1
|
|
node = minetest.get_node(pos)
|
|
end
|
|
if node.name ~= "air" then
|
|
return
|
|
end
|
|
if minetest.get_node_light(pos) < 13 then
|
|
return
|
|
end
|
|
minetest.set_node(pos, {name = "default:papyrus"})
|
|
return true
|
|
end
|
|
|
|
minetest.override_item("default:papyrus", {climbable = true})
|
|
end
|
|
|
|
local bucket_itemstring = (why.mcl and "mcl_buckets:bucket_empty") or "bucket:bucket_empty"
|
|
|
|
---------------------NEW ACHIEVEMENTS-----------------------
|
|
if awards then
|
|
awards.register_achievement("why:bucket", {
|
|
title = "A sense of calm and ease",
|
|
description = "Create a bucket to be your companion in this stressful world",
|
|
icon = "bucket.png",
|
|
trigger = {
|
|
type = "craft",
|
|
item = bucket_itemstring,
|
|
target = 1
|
|
},
|
|
type = "Advancement",
|
|
group = "Why",
|
|
})
|
|
if why.mcl then
|
|
awards.register_achievement("why:cocoa", {
|
|
title = "Tastes terrible.",
|
|
description = "Eat cocoa beans by themselves",
|
|
icon = "mcl_cocoas_cocoa_beans.png",
|
|
trigger = {
|
|
type = "eat",
|
|
item = "mcl_cocoas:cocoa_beans",
|
|
target = 1
|
|
},
|
|
type = "Advancement",
|
|
group = "Why",
|
|
})
|
|
local old_cocoa_function = minetest.registered_items["mcl_cocoas:cocoa_beans"].on_place
|
|
local eat_function = minetest.item_eat(1)
|
|
minetest.override_item("mcl_cocoas:cocoa_beans", {
|
|
groups = {craftitem = 1, compostability = 65, food = 1, eatable = 1},
|
|
_mcl_saturation = 0,
|
|
on_secondary_use = eat_function,
|
|
on_place = function(itemstack, player, pointed_thing)
|
|
local result = old_cocoa_function(itemstack, player, pointed_thing)
|
|
if result == itemstack or result == nil then
|
|
return eat_function(itemstack, player, pointed_thing)
|
|
else
|
|
return result
|
|
end
|
|
end,
|
|
})
|
|
if not why.mcla then
|
|
awards.register_achievement("why:larry", {
|
|
title = "Briny Larry",
|
|
description = "Collect a sea pickle",
|
|
icon = "mcl_ocean_sea_pickle_item.png",
|
|
type = "Advancement",
|
|
group = "Why",
|
|
})
|
|
end
|
|
awards.register_achievement("why:n", {
|
|
title = "n",
|
|
description = "Throw an egg",
|
|
icon = "mobs_chicken_egg.png",
|
|
type = "Advancement",
|
|
group = "Why",
|
|
})
|
|
awards.register_achievement("why:looks_nice", {
|
|
title = "Looks nice, but why is it an achievement?",
|
|
description = "Place light blue terracotta next to cherry leaves (or vice versa)",
|
|
icon = "hardened_clay_stained_light_blue.png",
|
|
type = "Advancement",
|
|
group = "Why",
|
|
})
|
|
awards.register_achievement("why:clear", {
|
|
title = "Clearly invisible",
|
|
description = "Craft light gray stained glass panes.",
|
|
icon = "blank.png",
|
|
trigger = {
|
|
type = "craft",
|
|
item = "xpanes:pane_silver_flat",
|
|
target = 1
|
|
},
|
|
type = "Advancement",
|
|
group = "Why",
|
|
})
|
|
local old_egg_function = minetest.registered_items["mcl_throwing:egg"].on_use
|
|
minetest.override_item("mcl_throwing:egg", {
|
|
on_use = function(itemstack, player, pointed_thing)
|
|
awards.unlock(player:get_player_name(), "why:n")
|
|
return old_egg_function(itemstack, player, pointed_thing)
|
|
end
|
|
})
|
|
local check_nodes = { --not necessary but easier
|
|
{x=-1,y=0,z=0},
|
|
{x=1,y=0,z=0},
|
|
{x=0,y=-1,z=0},
|
|
{x=0,y=1,z=0},
|
|
{x=0,y=0,z=-1},
|
|
{x=0,y=0,z=1},
|
|
}
|
|
local cherry_leaves = why.mcla and "mcl_trees:leaves_cherry_blossom" or "mcl_cherry_blossom:cherryleaves"
|
|
local function check_looks_nice(pos)
|
|
local target
|
|
local node = minetest.get_node(pos)
|
|
if node.name == cherry_leaves then
|
|
target = "mcl_colorblocks:hardened_clay_light_blue"
|
|
elseif node.name == "mcl_colorblocks:hardened_clay_light_blue" then
|
|
target = cherry_leaves
|
|
else
|
|
return
|
|
end
|
|
for _, rel_pos in ipairs(check_nodes) do
|
|
local new_pos = vector.add(pos, rel_pos)
|
|
if minetest.get_node(new_pos).name == target then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
for _, node in ipairs({"mcl_cherry_blossom:cherryleaves", "mcl_colorblocks:hardened_clay_light_blue"}) do
|
|
minetest.override_item(node, {
|
|
after_place_node = function(pos, player, itemstack, pointed_thing)
|
|
if check_looks_nice(pos) then
|
|
awards.unlock(player:get_player_name(), "why:looks_nice")
|
|
end
|
|
end
|
|
})
|
|
end
|
|
if not why.mcla then -- mcl_item_entity is LOCAL in MCLA........
|
|
mcl_item_entity.register_pickup_achievement("mcl_ocean:sea_pickle_1_dead_brain_coral_block", "why:larry")
|
|
end
|
|
end
|
|
end |