ThePython 387aa1f45e v7.0
2024-01-13 15:45:15 -08:00

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