remove skyblock add farming tweak item_drop

master
Brett O'Donnell 2012-09-20 15:05:38 +09:30
parent 2e26cbbb08
commit 5bfb49bf8f
199 changed files with 1226 additions and 3056 deletions

View File

@ -1,5 +1,5 @@
----------------------------------
SEABLOCK FOR MINETEST
CORNERNOTE'S GAME FOR MINETEST
----------------------------------
@ -15,12 +15,10 @@ Description
----------------------------------
Build a world starting from a small island in the sea.
This game has many mods installed for a fun and interesting gaming experience.
To view the items and craft recipies, please visit the SeaBlock Game Wiki:
http://cornernote.net/minetest/seablock/wiki
To view the items and craft recipies, please visit the Game Wiki:
http://cornernote.net/minetest/cornernote_game/wiki
@ -29,8 +27,8 @@ Install Instructions
----------------------------------
1) rename cornernote-minetest-seablock_game-* to seablock_game
2) move seablock_game into /minetest/games/
1) rename cornernote-minetest-cornernote_game-* to cornernote_game
2) move cornernote_game into /minetest/games/
@ -67,6 +65,7 @@ Mods and Addons
From minetest_game
----------
bucket
creative
default
dye
fire
@ -124,7 +123,6 @@ xdoors2 - http://minetest.net/forum/viewtopic.php?id=2757
Environment mods
----------
skyblock - http://minetest.net/forum/viewtopic.php?id=2799
animatedfluids - http://minetest.net/forum/viewtopic.php?id=2420
animatedtorches - http://minetest.net/forum/viewtopic.php?id=2132
bones - http://minetest.net/forum/viewtopic.php?id=2206
@ -136,7 +134,7 @@ smooth - unknown
worldtime - http://minetest.net/forum/viewtopic.php?id=2205
Inventory Mods
Inventory mods
----------
bags - http://minetest.net/forum/viewtopic.php?id=3081
home_gui - http://minetest.net/forum/viewtopic.php?id=3101
@ -148,6 +146,7 @@ Nature mods
----------
bushes - http://minetest.net/forum/viewtopic.php?id=729
conifers - http://minetest.net/forum/viewtopic.php?id=1453
farming - http://minetest.net/forum/viewtopic.php?id=2787
flowers - http://minetest.net/forum/viewtopic.php?id=2624
growing_trees - http://minetest.net/forum/viewtopic.php?id=978
irontrees - http://minetest.net/forum/viewtopic.php?id=729

View File

@ -1,2 +1,2 @@
name = SeaBlock
name = cornernote

View File

@ -26,7 +26,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " checker",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -37,7 +37,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " stone square",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -48,7 +48,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " stone",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -59,7 +59,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " cross",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -70,7 +70,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " wood",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
@ -81,7 +81,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " decorative block",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -92,7 +92,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " large checker",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -103,7 +103,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " large wooden checker",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
@ -114,7 +114,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " wooden checker",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3},
sounds = default.node_sound_wood_defaults(),
@ -125,7 +125,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " corners",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
@ -136,7 +136,7 @@ for _, colour in ipairs(DYES) do
minetest.register_node('blox:' .. name, {
description = colour .. " cobble",
tiles = { 'blox_' .. name .. '.png' },
inventory_image = 'blox_' .. name .. '.png',
--inventory_image = 'blox_' .. name .. '.png',
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1 +1,2 @@
default
mesecons

View File

@ -90,13 +90,17 @@ minetest.register_globalstep(function(dtime)
for i,item in ipairs(item_timer) do
if item ~= nil then
if item:get_luaentity().timer == nil then
item:get_luaentity().timer = 0
end
item:get_luaentity().timer = item:get_luaentity().timer + dtime
if item:get_luaentity().timer > 1 then
item:get_luaentity().collect = true
if item:get_luaentity() == nil then
table.remove(item_timer, i)
else
if item:get_luaentity().timer == nil then
item:get_luaentity().timer = 0
end
item:get_luaentity().timer = item:get_luaentity().timer + dtime
if item:get_luaentity().timer > 1 then
item:get_luaentity().collect = true
table.remove(item_timer, i)
end
end
end
end

View File

@ -0,0 +1,46 @@
===FARMING MOD for MINETEST-C55===
by PilzAdam
Introduction:
This mod adds farming to Minetest.
How to install:
Unzip the archive an place it in minetest-base-directory/mods/minetest/
if you have a windows client or a linux run-in-place client. If you have
a linux system-wide instalation place it in ~/.minetest/mods/minetest/.
If you want to install this mod only in one world create the folder
worldmods/ in your worlddirectory.
For further information or help see:
http://wiki.minetest.com/wiki/Installing_Mods
How to use the mod:
Craft a wood/stone/steel hoe:
material material
stick
stick
Dig dirt with it and turn it to soil. Water the soil and plant the seeds
you get by digging dirt with the hoe. Wait until the seeds are seasoned
and harvest them. When harvesting you will get the product and new seeds.
For further information or help see:
http://minetest.net/forum/viewtopic.php?id=2787
License:
Sourcecode: WTFPL (see below)
Graphics: WTFPL (see below)
See also:
http://minetest.net/
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

View File

@ -0,0 +1,22 @@
minetest.register_abm({
nodenames = {"default:cactus"},
interval = 50,
chance = 20,
action = function(pos, node)
pos.y = pos.y-1
local name = minetest.env:get_node(pos).name
if name == "default:desert_sand" or name == "default:sand" then
pos.y = pos.y+1
local height = 0
while minetest.env:get_node(pos).name == "default:cactus" do
height = height+1
pos.y = pos.y+1
end
if height < 4 then
if minetest.env:get_node(pos).name == "air" then
minetest.env:set_node(pos, node)
end
end
end
end
})

View File

@ -0,0 +1,17 @@
Version 3:
- make pumpkins with face not craftable but created by punching with a sword
- change groups of pumpkins to more wood like
- add big pumpkin
- add scarecrow
- make bread non stackable
- make saplings plantable everywhere (they still grow only with light and wet soil)
- add weed
- add fuel attributes to nearly everything
- add pumpkin bread
Version 2:
- soil dont turn to dirt when walking over it
- fix hoe bug
- rename corn to wheat
- new textures for harvested wheat
- make cotton drop strings when harvested
- add rubber

View File

@ -0,0 +1,90 @@
minetest.register_craftitem("farming:cotton_seed", {
description = "Cotton Seeds",
inventory_image = "farming_cotton_seed.png",
on_place = function(itemstack, placer, pointed_thing)
local above = minetest.env:get_node(pointed_thing.above)
if above.name == "air" then
above.name = "farming:cotton_1"
minetest.env:set_node(pointed_thing.above, above)
itemstack:take_item(1)
return itemstack
end
end
})
minetest.register_node("farming:cotton_1", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
drop = "",
tiles = {"farming_cotton_1.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.5+6/16, 0.5}
},
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("farming:cotton_2", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
drop = "",
tiles = {"farming_cotton_2.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.5+12/16, 0.5}
},
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("farming:cotton", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
tiles = {"farming_cotton.png"},
drop = {
max_items = 6,
items = {
{ items = {'farming:cotton_seed'} },
{ items = {'farming:cotton_seed'}, rarity = 2},
{ items = {'farming:cotton_seed'}, rarity = 5},
{ items = {'farming:string'} },
{ items = {'farming:string'}, rarity = 2 },
{ items = {'farming:string'}, rarity = 5 }
}
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
farming:add_plant("farming:cotton", {"farming:cotton_1", "farming:cotton_2"}, 50, 20)
minetest.register_craftitem("farming:string", {
description = "String",
inventory_image = "farming_string.png",
})
minetest.register_craft({
output = "wool:white",
recipe = {{"farming:string"}}
})
-- ========= FUEL =========
minetest.register_craft({
type = "fuel",
recipe = "farming:cotton_seed",
burntime = 1
})
minetest.register_craft({
type = "fuel",
recipe = "farming:string",
burntime = 1
})

View File

@ -1,3 +1,3 @@
default
bucket
fire
wool

View File

@ -0,0 +1,83 @@
local function create_soil(pos, inv, p)
if pos == nil then
return false
end
local node = minetest.env:get_node(pos)
local name = node.name
local above = minetest.env:get_node({x=pos.x, y=pos.y+1, z=pos.z})
if name == "default:dirt" or name == "default:dirt_with_grass" then
if above.name == "air" then
node.name = "farming:soil"
minetest.env:set_node(pos, node)
if inv and p and name == "default:dirt_with_grass" then
for name,rarity in pairs(farming.seeds) do
if math.random(1, rarity-p) == 1 then
inv:add_item("main", ItemStack(name))
end
end
end
return true
end
end
return false
end
minetest.register_tool("farming:hoe_wood", {
description = "Wood Hoe",
inventory_image = "farming_hoe_wood.png",
on_use = function(itemstack, user, pointed_thing)
if create_soil(pointed_thing.under, user:get_inventory(), 0) then
itemstack:add_wear(65535/30)
return itemstack
end
end
})
minetest.register_craft({
output = "farming:hoe_wood",
recipe = {
{"default:wood", "default:wood"},
{"", "default:stick"},
{"", "default:stick"}
}
})
minetest.register_tool("farming:hoe_stone", {
description = "Stone Hoe",
inventory_image = "farming_hoe_stone.png",
on_use = function(itemstack, user, pointed_thing)
if create_soil(pointed_thing.under, user:get_inventory(), 5) then
itemstack:add_wear(65535/50)
return itemstack
end
end
})
minetest.register_craft({
output = "farming:hoe_stone",
recipe = {
{"default:cobble", "default:cobble"},
{"", "default:stick"},
{"", "default:stick"}
}
})
minetest.register_tool("farming:hoe_steel", {
description = "Steel Hoe",
inventory_image = "farming_hoe_steel.png",
on_use = function(itemstack, user, pointed_thing)
if create_soil(pointed_thing.under, user:get_inventory(), 10) then
itemstack:add_wear(65535/80)
return itemstack
end
end
})
minetest.register_craft({
output = "farming:hoe_steel",
recipe = {
{"default:steel_ingot", "default:steel_ingot"},
{"", "default:stick"},
{"", "default:stick"}
}
})

View File

@ -0,0 +1,211 @@
farming = {}
function farming:add_plant(full_grown, names, interval, chance)
minetest.register_abm({
nodenames = names,
interval = interval,
chance = chance,
action = function(pos, node)
pos.y = pos.y-1
if minetest.env:get_node(pos).name ~= "farming:soil_wet" then
return
end
pos.y = pos.y+1
if not minetest.env:get_node_light(pos) then
return
end
if minetest.env:get_node_light(pos) < 8 then
return
end
local step = nil
for i,name in ipairs(names) do
if name == node.name then
step = i
break
end
end
if step == nil then
return
end
local new_node = {name=names[step+1]}
if new_node.name == nil then
new_node.name = full_grown
end
minetest.env:set_node(pos, new_node)
end
} )
end
function farming:generate_tree(pos, trunk, leaves, underground, replacements)
pos.y = pos.y-1
local nodename = minetest.env:get_node(pos).name
local ret = true
for _,name in ipairs(underground) do
if nodename == name then
ret = false
break
end
end
pos.y = pos.y+1
if not minetest.env:get_node_light(pos) then
return
end
if ret or minetest.env:get_node_light(pos) < 8 then
return
end
node = {name = ""}
for dy=1,4 do
pos.y = pos.y+dy
if minetest.env:get_node(pos).name ~= "air" then
return
end
pos.y = pos.y-dy
end
node.name = trunk
for dy=0,4 do
pos.y = pos.y+dy
minetest.env:set_node(pos, node)
pos.y = pos.y-dy
end
if not replacements then
replacements = {}
end
node.name = leaves
pos.y = pos.y+3
for dx=-2,2 do
for dz=-2,2 do
for dy=0,3 do
pos.x = pos.x+dx
pos.y = pos.y+dy
pos.z = pos.z+dz
if dx == 0 and dz == 0 and dy==3 then
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
minetest.env:set_node(pos, node)
for name,rarity in pairs(replacements) do
if math.random(1, rarity) == 1 then
minetest.env:set_node(pos, {name=name})
end
end
end
elseif dx == 0 and dz == 0 and dy==4 then
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
minetest.env:set_node(pos, node)
for name,rarity in pairs(replacements) do
if math.random(1, rarity) == 1 then
minetest.env:set_node(pos, {name=name})
end
end
end
elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
if minetest.env:get_node(pos).name == "air" then
minetest.env:set_node(pos, node)
for name,rarity in pairs(replacements) do
if math.random(1, rarity) == 1 then
minetest.env:set_node(pos, {name=name})
end
end
end
else
if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
minetest.env:set_node(pos, node)
for name,rarity in pairs(replacements) do
if math.random(1, rarity) == 1 then
minetest.env:set_node(pos, {name=name})
end
end
end
end
end
pos.x = pos.x-dx
pos.y = pos.y-dy
pos.z = pos.z-dz
end
end
end
end
farming.seeds = {
["farming:wheat_seed"]=20,
["farming:cotton_seed"]=30,
["farming:pumpkin_seed"]=60,
["farming:strawberry_seed"]=30,
["farming:rhubarb_seed"]=30,
["farming:potatoe_seed"]=30,
["farming:tomato_seed"]=30,
["farming:orange_seed"]=30,
["farming:carrot_seed"]=30,
}
-- ========= ALIASES FOR FARMING MOD BY SAPIER =========
-- hoes
minetest.register_alias("farming:wood_hoe", "farming:hoe_wood")
minetest.register_alias("farming:cobble_hoe", "farming:hoe_stone")
minetest.register_alias("farming:steel_hoe", "farming:hoe_steel")
minetest.register_alias("farming:mese_hoe", "farming:hoe_steel")
-- wheat -> wheat
minetest.register_alias("farming:wheat_node", "farming:wheat")
--minetest.register_alias("farming:wheat", "farming_wheat_harvested") cant do this
minetest.register_alias("farming:wheat_straw", "farming:wheat")
minetest.register_alias("farming:seed_wheat", "farming:wheat_seed")
for lvl = 1, 6, 1 do
minetest.register_entity(":farming:wheat_lvl"..lvl, {
on_activate = function(self, staticdata)
minetest.env:set_node(self.object:getpos(), {name="farming:wheat_1"})
end
})
end
-- rye -> wheat
minetest.register_alias("farming:rhy_node", "farming:wheat")
minetest.register_alias("farming:rhy", "farming:wheat_harvested")
minetest.register_alias("farming:rhy_straw", "farming:wheat")
minetest.register_alias("farming:seed_rhy", "farming:wheat_seed")
for lvl = 1, 6, 1 do
minetest.register_entity(":farming:rhy_lvl"..lvl, {
on_activate = function(self, staticdata)
minetest.env:set_node(self.object:getpos(), {name="farming:wheat_1"})
end
})
end
-- corn -> wheat
minetest.register_alias("farming:corn_node", "farming:wheat")
minetest.register_alias("farming:corn", "farming:wheat_harvested")
minetest.register_alias("farming:corn_straw", "farming:wheat")
minetest.register_alias("farming:seed_corn", "farming:wheat_seed")
for lvl = 1, 6, 1 do
minetest.register_entity(":farming:corn_lvl"..lvl, {
on_activate = function(self, staticdata)
minetest.env:set_node(self.object:getpos(), {name="farming:wheat_1"})
end
})
end
-- ========= SOIL =========
dofile(minetest.get_modpath("farming").."/soil.lua")
-- ========= HOES =========
dofile(minetest.get_modpath("farming").."/hoes.lua")
-- ========= CORN =========
dofile(minetest.get_modpath("farming").."/wheat.lua")
-- ========= COTTON =========
dofile(minetest.get_modpath("farming").."/cotton.lua")
-- ========= WEED =========
dofile(minetest.get_modpath("farming").."/weed.lua")
-- ========= PAPYRUS =========
dofile(minetest.get_modpath("farming").."/papyrus.lua")
-- ========= CACTUS =========
dofile(minetest.get_modpath("farming").."/cactus.lua")

View File

@ -0,0 +1,25 @@
minetest.register_abm({
nodenames = {"default:papyrus"},
interval = 50,
chance = 20,
action = function(pos, node)
pos.y = pos.y-1
local name = minetest.env:get_node(pos).name
if name == "default:dirt" or name == "default:dirt_with_grass" then
if minetest.env:find_node_near(pos, 3, {"default:water_source", "default:water_flowing"}) == nil then
return
end
pos.y = pos.y+1
local height = 0
while minetest.env:get_node(pos).name == "default:papyrus" do
height = height+1
pos.y = pos.y+1
end
if height < 4 then
if minetest.env:get_node(pos).name == "air" then
minetest.env:set_node(pos, node)
end
end
end
end
})

View File

@ -0,0 +1,446 @@
minetest.register_craftitem("farming:pumpkin_seed", {
description = "Pumpkin Seed",
inventory_image = "farming_pumpkin_seed.png",
on_place = function(itemstack, placer, pointed_thing)
local above = minetest.env:get_node(pointed_thing.above)
if above.name == "air" then
above.name = "farming:pumpkin_1"
minetest.env:set_node(pointed_thing.above, above)
itemstack:take_item(1)
return itemstack
end
end
})
minetest.register_node("farming:pumpkin_1", {
paramtype = "light",
drawtype = "nodebox",
drop = "",
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"},
node_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2}
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2}
},
},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("farming:pumpkin_2", {
paramtype = "light",
drawtype = "nodebox",
drop = "",
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"},
node_box = {
type = "fixed",
fixed = {
{-0.35, -0.5, -0.35, 0.35, 0.2, 0.35}
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.35, -0.5, -0.35, 0.35, 0.2, 0.35}
},
},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("farming:pumpkin", {
description = "Pumpkin",
paramtype2 = "facedir",
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png"},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2},
sounds = default.node_sound_wood_defaults(),
on_punch = function(pos, node, puncher)
local tool = puncher:get_wielded_item():get_name()
if tool and tool == "default:sword_wood" or tool == "default:sword_stone" or tool == "default:sword_steel" then
node.name = "farming:pumpkin_face"
minetest.env:set_node(pos, node)
puncher:get_inventory():add_item("main", ItemStack("farming:pumpkin_seed"))
if math.random(1, 5) == 1 then
puncher:get_inventory():add_item("main", ItemStack("farming:pumpkin_seed"))
end
end
end
})
farming:add_plant("farming:pumpkin", {"farming:pumpkin_1", "farming:pumpkin_2"}, 80, 20)
minetest.register_node("farming:pumpkin_face", {
description = "Pumpkin",
paramtype2 = "facedir",
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face.png"},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_node("farming:pumpkin_face_light", {
description = "Pumpkin",
paramtype2 = "facedir",
light_source = LIGHT_MAX-2,
tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face_light.png"},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2},
sounds = default.node_sound_wood_defaults(),
})
minetest.register_craft({
type = "shapeless",
output = "farming:pumpkin_face_light",
recipe = {"farming:pumpkin_face", "default:torch"}
})
-- ========= BIG PUMPKIN =========
minetest.register_node("farming:big_pumpkin", {
description = "Big Pumpkin",
paramtype2 = "facedir",
tiles = {"farming_pumpkin_big_side.png"},
selection_box = {
type = "fixed",
fixed = {
{-1, -0.5, -1, 1, 1.5, 1}
}
},
groups = {choppy=1, oddly_breakable_by_hand=1, flammable=2},
sounds = default.node_sound_wood_defaults(),
after_place_node = function(pos, placer)
for dx=-1,1 do
for dy=0,1 do
for dz=-1,1 do
pos.x = pos.x+dx
pos.y = pos.y+dy
pos.z = pos.z+dz
if dx ~= 0 or dy ~= 0 or dz ~= 0 then
if minetest.env:get_node(pos).name ~= "air" then
pos.x = pos.x-dx
pos.y = pos.y-dy
pos.z = pos.z-dz
minetest.env:remove_node(pos)
minetest.after(0.1, function(placer)
local inv = placer:get_inventory()
local index = placer:get_wield_index()
inv:set_stack("main", index, ItemStack("farming:big_pumpkin"))
end, placer)
return
end
end
pos.x = pos.x-dx
pos.y = pos.y-dy
pos.z = pos.z-dz
end
end
end
for dy=0,1 do
pos.y = pos.y+dy
pos.z = pos.z+1
minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=2})
pos.x = pos.x-1
minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=2})
pos.x = pos.x+1
pos.z = pos.z-2
minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=4})
pos.x = pos.x+1
minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=4})
pos.z = pos.z+1
minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=3})
pos.z = pos.z+1
minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=3})
pos.z = pos.z-1
pos.x = pos.x-2
minetest.env:set_node(pos, {name="farming:big_pumpkin_side", param2=1})
pos.z = pos.z-1
minetest.env:set_node(pos, {name="farming:big_pumpkin_corner", param2=1})
pos.z = pos.z+1
pos.x = pos.x+1
pos.y = pos.y-dy
end
pos.y = pos.y+1
minetest.env:set_node(pos, {name="farming:big_pumpkin_top"})
end,
after_destruct = function(pos, oldnode)
for dx=-1,1 do
for dy=0,1 do
for dz=-1,1 do
pos.x = pos.x+dx
pos.y = pos.y+dy
pos.z = pos.z+dz
local name = minetest.env:get_node(pos).name
if string.find(name, "farming:big_pumpkin") then
minetest.env:remove_node(pos)
end
pos.x = pos.x-dx
pos.y = pos.y-dy
pos.z = pos.z-dz
end
end
end
end
})
minetest.register_node("farming:big_pumpkin_side", {
paramtype = "light",
paramtype2 = "facedir",
tiles = {"farming_pumpkin_big_top_side.png", "farming_pumpkin_big_side.png"},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0, 0.5, 0.5, 0.5}
}
},
selection_box = {
type = "fixed",
fixed = {
{0, 0, 0, 0, 0, 0}
}
},
groups = {not_in_creative_inventory=1},
})
minetest.register_node("farming:big_pumpkin_corner", {
paramtype = "light",
paramtype2 = "facedir",
tiles = {"farming_pumpkin_big_top_corner.png", "farming_pumpkin_big_side.png"},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, 0, 0, 0.5, 0.5}
}
},
selection_box = {
type = "fixed",
fixed = {
{0, 0, 0, 0, 0, 0}
}
},
groups = {not_in_creative_inventory=1},
})
minetest.register_node("farming:big_pumpkin_top", {
paramtype = "light",
tiles = {"farming_pumpkin_big_top.png"},
selection_box = {
type = "fixed",
fixed = {
{0, 0, 0, 0, 0, 0}
}
},
groups = {not_in_creative_inventory=1},
})
minetest.register_craft({
type = "shapeless",
output = "farming:big_pumpkin",
recipe = {"bucket:bucket_water", "farming:pumpkin"},
replacements = {
{"bucket:bucket_water", "bucket:bucket_empty"}
}
})
-- ========= SCARECROW =========
local box1 = {
{-1, -8, -1, 1, 8, 1},
}
local box2 = {
{-1, -8, -1, 1, 8, 1},
{-12, -8, -1, 12, -7, 1},
{-5, -2, -5, 5, 8, 5}
}
for j,list in ipairs(box1) do
for i,int in ipairs(list) do
list[i] = int/16
end
box1[j] = list
end
for j,list in ipairs(box2) do
for i,int in ipairs(list) do
list[i] = int/16
end
box2[j] = list
end
minetest.register_node("farming:scarecrow", {
description = "Scarecrow",
paramtype = "light",
paramtype2 = "facedir",
tiles = {"farming_scarecrow_top.png", "farming_scarecrow_top.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_front.png"},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = box2
},
selection_box = {
type = "fixed",
fixed = {
{-12/16, -1.5, -0.5, 12/16, 0.5, 0.5}
}
},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2},
after_place_node = function(pos, placer)
local node = minetest.env:get_node(pos)
local param2 = node.param2
pos.y = pos.y+1
if minetest.env:get_node(pos).name ~= "air" then
pos.y = pos.y-1
minetest.env:remove_node(pos)
minetest.after(0.1, function(placer)
local inv = placer:get_inventory()
local index = placer:get_wield_index()
inv:set_stack("main", index, ItemStack("farming:scarecrow"))
end, placer)
return
end
minetest.env:set_node(pos, node)
pos.y = pos.y-1
node.name = "farming:scarecrow_bottom"
minetest.env:set_node(pos, node)
end,
after_destruct = function(pos, oldnode)
pos.y = pos.y-1
if minetest.env:get_node(pos).name == "farming:scarecrow_bottom" then
minetest.env:remove_node(pos)
end
end
})
minetest.register_node("farming:scarecrow_bottom", {
paramtype = "light",
paramtype2 = "facedir",
tiles = {"default_wood.png"},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = box1
},
groups = {not_in_creative_inventory=1},
selection_box = {
type = "fixed",
fixed = {
{0, 0, 0, 0, 0, 0}
}
}
})
minetest.register_craft({
output = "farming:scarecrow",
recipe = {
{"", "farming:pumpkin_face", "",},
{"default:stick", "default:stick", "default:stick",},
{"", "default:stick", "",}
}
})
minetest.register_node("farming:scarecrow_light", {
description = "Scarecrow",
paramtype = "light",
paramtype2 = "facedir",
light_source = LIGHT_MAX-2,
tiles = {"farming_scarecrow_top.png", "farming_scarecrow_top.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_side.png", "farming_scarecrow_front_light.png"},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = box2
},
selection_box = {
type = "fixed",
fixed = {
{-12/16, -1.5, -0.5, 12/16, 0.5, 0.5}
}
},
groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2},
after_place_node = function(pos, placer)
local node = minetest.env:get_node(pos)
local param2 = node.param2
pos.y = pos.y+1
if minetest.env:get_node(pos).name ~= "air" then
pos.y = pos.y-1
minetest.env:remove_node(pos)
minetest.after(0.1, function(placer)
local inv = placer:get_inventory()
local index = placer:get_wield_index()
inv:set_stack("main", index, ItemStack("farming:scarecrow_light"))
end, placer)
return
end
minetest.env:set_node(pos, node)
pos.y = pos.y-1
node.name = "farming:scarecrow_bottom"
minetest.env:set_node(pos, node)
end,
after_destruct = function(pos, oldnode)
pos.y = pos.y-1
if minetest.env:get_node(pos).name == "farming:scarecrow_bottom" then
minetest.env:remove_node(pos)
end
end
})
minetest.register_craft({
output = "farming:scarecrow_light",
recipe = {
{"", "farming:pumpkin_face_light", "",},
{"default:stick", "default:stick", "default:stick",},
{"", "default:stick", "",}
}
})
-- ========= FUEL =========
minetest.register_craft({
type = "fuel",
recipe = "farming:pumpkin_seed",
burntime = 1
})
minetest.register_craft({
type = "fuel",
recipe = "farming:pumpkin",
burntime = 5
})
minetest.register_craft({
type = "fuel",
recipe = "farming:pumpkin_face",
burntime = 5
})
minetest.register_craft({
type = "fuel",
recipe = "farming:pumpkin_face_light",
burntime = 7
})
minetest.register_craft({
type = "fuel",
recipe = "farming:big_pumpkin",
burntime = 10
})
minetest.register_craft({
type = "fuel",
recipe = "farming:scarecrow",
burntime = 5
})
minetest.register_craft({
type = "fuel",
recipe = "farming:scarecrow_light",
burntime = 5
})

View File

@ -0,0 +1,45 @@
minetest.register_node("farming:soil", {
tiles = {"farming_soil.png", "default_dirt.png", "default_dirt.png", "default_dirt.png", "default_dirt.png", "default_dirt.png"},
drop = "default:dirt",
groups = {crumbly=3, not_in_creative_inventory=1},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
}),
})
minetest.register_node("farming:soil_wet", {
tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png", "farming_soil_wet_side.png"},
drop = "default:dirt",
groups = {crumbly=3, not_in_creative_inventory=1},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
}),
})
minetest.register_abm({
nodenames = {"farming:soil"},
interval = 15,
chance = 3,
action = function(pos, node)
if minetest.env:find_node_near(pos, 4, {"default:water_source", "default:water_flowing"}) then
node.name = "farming:soil_wet"
minetest.env:set_node(pos, node)
end
end,
})
-- ========= EXPERIMENTAL =========
-- This will turn soil to dirt when walking over it
--[[minetest.register_abm({
nodenames = {"farming:soil", "farming:soil_wet"},
interval = 2,
chance = 2,
action = function(pos, node)
pos.y = pos.y+1
if #(minetest.env:get_objects_inside_radius(pos, 0.8)) > 0 then
pos.y = pos.y-1
node.name = "default:dirt"
minetest.env:set_node(pos, node)
end
end,
})]]

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

View File

@ -0,0 +1,39 @@
minetest.register_node("farming:weed", {
description = "Weed",
paramtype = "light",
walkable = false,
drawtype = "plantlike",
tiles = {"farming_weed.png"},
inventory_image = "farming_weed.png",
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.5+4/16, 0.5}
},
},
groups = {snappy=3, flammable=2},
sounds = default.node_sound_leaves_defaults()
})
minetest.register_abm({
nodenames = {"farming:soil_wet", "farming:soil"},
interval = 50,
chance = 10,
action = function(pos, node)
if minetest.env:find_node_near(pos, 4, {"farming:scarecrow", "farming:scarecrow_light"}) ~= nil then
return
end
pos.y = pos.y+1
if minetest.env:get_node(pos).name == "air" then
node.name = "farming:weed"
minetest.env:set_node(pos, node)
end
end
})
-- ========= FUEL =========
minetest.register_craft({
type = "fuel",
recipe = "farming:weed",
burntime = 1
})

View File

@ -0,0 +1,169 @@
minetest.register_craftitem("farming:wheat_seed", {
description = "Wheat Seeds",
inventory_image = "farming_wheat_seed.png",
on_place = function(itemstack, placer, pointed_thing)
local above = minetest.env:get_node(pointed_thing.above)
if above.name == "air" then
above.name = "farming:wheat_1"
minetest.env:set_node(pointed_thing.above, above)
itemstack:take_item(1)
return itemstack
end
end
})
minetest.register_node("farming:wheat_1", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
drop = "",
tiles = {"farming_wheat_1.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.5+4/16, 0.5}
},
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("farming:wheat_2", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
drop = "",
tiles = {"farming_wheat_2.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.5+7/16, 0.5}
},
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("farming:wheat_3", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
drop = "",
tiles = {"farming_wheat_3.png"},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.5+13/16, 0.5}
},
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
minetest.register_node("farming:wheat", {
paramtype = "light",
walkable = false,
drawtype = "plantlike",
tiles = {"farming_wheat.png"},
drop = {
max_items = 4,
items = {
{ items = {'farming:wheat_seed'} },
{ items = {'farming:wheat_seed'}, rarity = 2},
{ items = {'farming:wheat_seed'}, rarity = 5},
{ items = {'farming:wheat_harvested'} }
}
},
groups = {snappy=3, flammable=2, not_in_creative_inventory=1},
sounds = default.node_sound_leaves_defaults(),
})
farming:add_plant("farming:wheat", {"farming:wheat_1", "farming:wheat_2", "farming:wheat_3"}, 50, 20)
minetest.register_craftitem("farming:wheat_harvested", {
description = "Harvested Wheat",
inventory_image = "farming_wheat_harvested.png",
})
minetest.register_craft({
output = "farming:flour",
recipe = {
{"farming:wheat_harvested", }
}
})
minetest.register_craftitem("farming:flour", {
description = "Flour",
inventory_image = "farming_flour.png",
})
minetest.register_craft({
output = "farming:cake_mix",
type = "shapeless",
recipe = {"farming:flour", "farming:flour", "farming:flour", "farming:flour", "bucket:bucket_water"},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}}
})
minetest.register_craftitem("farming:cake_mix", {
description = "Cake Mix",
inventory_image = "farming_cake_mix.png",
})
minetest.register_craft({
type = "cooking",
output = "farming:bread",
recipe = "farming:cake_mix",
cooktime = 10
})
minetest.register_craftitem("farming:bread", {
description = "Bread",
inventory_image = "farming_bread.png",
stack_max = 1,
on_use = minetest.item_eat(10)
})
minetest.register_craftitem("farming:pumpkin_bread", {
description = "Pumpkin Bread",
inventory_image = "farming_bread_pumpkin.png",
stack_max = 1,
on_use = minetest.item_eat(20)
})
minetest.register_craftitem("farming:pumpkin_cake_mix", {
description = "Pumpkin Cake Mix",
inventory_image = "farming_cake_mix_pumpkin.png",
})
minetest.register_craft({
output = "farming:pumpkin_cake_mix",
type = "shapeless",
recipe = {"farming:cake_mix", "farming:pumpkin"}
})
minetest.register_craft({
type = "cooking",
output = "farming:pumpkin_bread",
recipe = "farming:pumpkin_cake_mix",
cooktime = 10
})
minetest.register_alias("farming:corn_seed", "farming:wheat_seed")
minetest.register_alias("farming:corn_1", "farming:wheat_1")
minetest.register_alias("farming:corn_2", "farming:wheat_2")
minetest.register_alias("farming:corn_3", "farming:wheat_3")
minetest.register_alias("farming:corn", "farming:wheat")
minetest.register_alias("farming:corn_harvested", "farming:wheat_harvested")
-- ========= FUEL =========
minetest.register_craft({
type = "fuel",
recipe = "farming:wheat_seed",
burntime = 1
})
minetest.register_craft({
type = "fuel",
recipe = "farming:wheat_harvested",
burntime = 2
})

View File

@ -1,206 +0,0 @@
----------------------------------
SKYBLOCK FOR MINETEST
----------------------------------
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
----------------------------------
DESCRIPTION
----------------------------------
Build a world starting from a small island in the sky. This Minetest mod is intended to be used as a minimal game that allows the player to craft and use all the default items in Minetest in a fun and challenging way.
* WARNING * - this mod will disable all map generation in any world the mod is active!
Because of this, some things have to be different:
- death results in losing all your items
- falling below skyblock.WORLD_BOTTOM results in death
- flowing lava and water collide to make stone
- crafts to allow access to all items
- prevent chopping down trees with bare hands
- abms to control spawning and growing nodes
----------------------------------
INSTALL INSTRUCTIONS
----------------------------------
1) rename cornernote-minetest-skyblock-* to skyblock
2.a) as a mod
move skyblock into /minetest/mods/minetest/
OR
2.b) as a game mode
copy /minetest/games/minetest_game to /minetest/games/skyblock_game
move skyblock into /minetest/games/skyblock_game/mods/
----------------------------------
PLAYING INSTRUCTIONS
----------------------------------
-- Level Achievement Block --
Punch (short left click) to refresh your achievements.
Dig (long left click) to respawn at a new location with new items.
Open (right click) to view current achievements.
-- Death Hurts --
If you fall below skyblock.WORLD_BOTTOM you will restart at a new spawn point.
-- Stone Generator --
Create stone done by placing lava and water next to each other with air between. Stone nodes will appear between them.
-- Infinite Water --
If you want to create more water simply place your 2 water sources so they touch diagonally. Now when you take one with the bucket, it will be replaced.
-- Crafting --
To learn all of the crafts you can visit the SkyBlock GameWiki:
http://cornernote.net/minetest/skyblock/wiki/crafts.php
----------------------------------
LEVELS AND MISSIONS
----------------------------------
There are 3 levels included. You can also make your own levels using the achievements api.
-- LEVEL 1 - Welcome Traveller
Complete the tasks to the right to receive great rewards! If you wasted the required items you can dig this node to restart.
1) grow a Tree
2) dig a Tree
3) craft and place a Chest
4) collect the Lave Source under your Spawn
5) build a Stone Generator and dig 20 Cobble
6) craft and place a Furnace
7) dig 4 Coal Lumps
8) extend your Island with 100 Dirt
9) dig 100 Stone with a Mese Pickaxe
10) create an Infinite Water Source
-- LEVEL 2 - A View From Above
Wow, look at that view... of... nothing. You should get to work extending this island. Perhaps you could build some structures too?
1) extend your Island with 200 Dirt
2) build a structure using 200 Wood
3) build a structure using 200 Brick
4) add at least 200 Glass windows
5) make a desert with 200 Sand
6) also include 200 Desert Sand
7) build a tower with 200 Stone
8) make a path with 200 Cobblestone
9) also use 200 Mossy Cobblestone
10) decorate your area with 75 Steel Blocks
-- LEVEL 3 - Does This Keep Going?
If you like this planet, then stray not from your mission traveller, for the end is near.
1) dig 20 Papyrus
2) place 20 Papyrus in a nice garden
3) dig 15 Cactus
4) place 15 Cactus in another gargen
5) place 30 fences around your gardens
6) add 20 ladders to your structures
7) decorate your house with 5 Bookshelves
8) place 10 Signs to help other travellers
9) place 50 Torches to help you see at night
10) dig 500 Stone for your next project...
----------------------------------
OCEAN MODE
----------------------------------
Inside config.lua you can set skyblock.MODE to either water or lava to create an endless ocean around your starting island.
----------------------------------
MULTIPLAYER SUPPORT
----------------------------------
Although the default settings will work, you may want to consider the starting positions.
Each player is given a unique spawn position in an outwards spriral.
If skyblock.WORLD_WIDTH=5 then players will be assigned in the following positions:
(looking down)
x+5| 21 22 23 24 25
|
x+4| 20 07 08 09 10
|
x+3| 19 06 01 02 11
|
x+2| 18 05 04 03 12
| <-- The distance between the players is
x+1| 17 16 15 14 13 defined by skyblock.START_GAP.
+--------------------
z+1 z+2 z+3 z+4 z+5
Note:
Your world will be limited to skyblock.WORLD_WIDTH*skyblock.WORLD_WIDTH players.
----------------------------------
OTHER OPTIONS
----------------------------------
Have a peek inside the config.lua to see other things you can change.
----------------------------------
License
----------------------------------
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
----------------------------------
Credits
----------------------------------
Thank you to the minetest community who has shared their code
and knowledge with me.
Special thanks in this mod to:
PilzAdam - code to make a tree came from his farming mod
RealBadAngel - help in IRC to make the spiral
anyone else who i borrowed code from =)

View File

@ -1,158 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
ACHIEVEMENT FUNCTIONS
]]--
-- local variable to save players achievements
local players_achievements = table.load(skyblock.FILENAME..".achievements")
if players_achievements == nil then
players_achievements = {}
end
--
-- PUBLIC FUNCTIONS
--
achievements = {}
-- reset
achievements.reset = function(player_name)
skyblock.log("achievements.reset() for "..player_name)
players_achievements[player_name] = {}
table.save(players_achievements, skyblock.FILENAME..".achievements")
end
-- update achievements
achievements.update = function(level,player_name)
local pos = levels[level].get_pos(player_name)
skyblock.log("achievements.update() level "..level.." for "..player_name.." at "..dump(pos))
if pos==nil then return pos end
local meta = minetest.env:get_meta(pos)
local formspec,infotext = levels[level].update(player_name,pos)
meta:set_string("formspec", formspec)
meta:set_string("infotext", infotext)
end
-- get achievement
achievements.get = function(level,player_name,achievement)
if players_achievements[player_name] == nil then
players_achievements[player_name] = {}
end
if players_achievements[player_name][level] == nil then
players_achievements[player_name][level] = {}
end
if players_achievements[player_name][level][achievement] == nil then
players_achievements[player_name][level][achievement] = 0
if achievement=="level" then
players_achievements[player_name][level][achievement] = 1
end
end
skyblock.log("achievements.get() for level "..level.." "..player_name.." achievement "..achievement.." is "..players_achievements[player_name][level][achievement])
return players_achievements[player_name][level][achievement]
end
-- give reward
achievements.give_reward = function(level,player_name,item_name)
skyblock.log("achievements.give_reward() for "..player_name.." item "..item_name)
minetest.env:get_meta(levels[level].get_pos(player_name)):get_inventory():add_item("rewards", item_name)
end
-- set achievement
achievements.add = function(level,player_name,achievement)
skyblock.log("achievements.add() for level "..level.." player "..player_name.." achievement "..achievement)
local player_achievement = achievements.get(level,player_name,achievement)
players_achievements[player_name][level][achievement] = player_achievement + 1
if level==0 or achievement=="level" then
table.save(players_achievements, skyblock.FILENAME..".achievements")
return
end
local update = levels[level].reward_achievement(player_name,achievement)
-- update
if update then
achievements.update(level,player_name)
minetest.chat_send_player(player_name, "You earned the achievement '"..achievement.."'")
minetest.chat_send_all(player_name.." was awarded the achievement '"..achievement.."'")
end
table.save(players_achievements, skyblock.FILENAME..".achievements")
end
-- track digging achievements
achievements.on_dignode = function(pos, oldnode, digger)
local player_name = digger:get_player_name()
local level = achievements.get(0, player_name, "level")
skyblock.log("achievements.on_dignode() for "..player_name.." on level "..level.." at "..dump(pos))
levels[level].on_dignode(pos, oldnode, digger)
end
-- track placing achievements
achievements.on_placenode = function(pos, newnode, placer, oldnode)
local player_name = placer:get_player_name()
local level = achievements.get(0, player_name, "level")
skyblock.log("achievements.on_placenode() for "..player_name.." on level "..level.." at "..dump(pos))
levels[level].on_placenode(pos, newnode, placer, oldnode)
end
-- bucket achievements
achievements.bucket_on_use = function(itemstack, user, pointed_thing)
local player_name = user:get_player_name()
local level = achievements.get(0, player_name, "level")
skyblock.log("achievements.bucket_on_use() for "..player_name.." on level "..level)
levels[level].bucket_on_use(player_name, pointed_thing)
end
-- bucket achievements
achievements.bucket_water_on_use = function(itemstack, user, pointed_thing)
local player_name = user:get_player_name()
local level = achievements.get(0, player_name, "level")
skyblock.log("achievements.bucket_water_on_use() for "..player_name.." on level "..level)
levels[level].bucket_water_on_use(player_name, pointed_thing)
end
-- bucket achievements
achievements.bucket_lava_on_use = function(itemstack, user, pointed_thing)
local player_name = user:get_player_name()
local level = achievements.get(0, player_name, "level")
skyblock.log("achievements.bucket_lava_on_use() for "..player_name.." on level "..level)
levels[level].bucket_lava_on_use(player_name, pointed_thing)
end
-- handle digging the level block
achievements.level_on_dig = function(level, pos, node, digger)
if level ~= 1 then
return
end
local player_name = digger:get_player_name()
local spawn = skyblock.get_spawn(player_name)
skyblock.log("achievements.level_on_dig() for "..player_name)
-- setup trigger for new spawn
skyblock.spawn_diggers[player_name] = true
-- kill them
digger:set_hp(0)
end
-- handle level block punch
achievements.level_on_punch = function(level, pos, node, puncher)
local player_name = puncher:get_player_name()
skyblock.log("achievements.level_on_punch() by "..player_name)
achievements.update(level, player_name)
end

View File

@ -1,625 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
API FUNCTIONS
]]--
-- local variables
local last_start_id = 0
local start_positions = {}
local spawned_players = {}
local spawnpos = {}
--
-- PUBLIC FUNCTIONS
--
-- log
skyblock.log = function(message)
if not skyblock.DEBUG then
return
end
minetest.log("action", "[SkyBlock] "..message)
end
-- give inventory
skyblock.give_inventory = function(player)
skyblock.log("give_inventory() to "..player:get_player_name())
player:get_inventory():add_item('main', 'default:stick')
player:get_inventory():add_item('main', 'default:leaves 6')
end
-- check inventory (needs to match the given items above)
skyblock.check_inventory = function(player)
skyblock.log("check_inventory() for "..player:get_player_name())
local inv = player:get_inventory()
local stack
stack = inv:get_stack('main', 1)
if stack:get_name() ~= 'default:stick' or stack:get_count() ~= 1 then
return false
end
stack = inv:get_stack('main', 2)
if stack:get_name() ~= 'default:leaves' or stack:get_count() ~= 6 then
return false
end
for i=3,inv:get_size("main") do
stack = inv:get_stack('main', i)
if stack:get_name() ~= "" then
return false
end
end
for i=1,inv:get_size("craft") do
stack = inv:get_stack('craft', i)
if stack:get_name() ~= "" then
return false
end
end
return true
end
-- empty inventory
skyblock.empty_inventory = function(player)
skyblock.log("empty_inventory() from "..player:get_player_name())
local inv = player:get_inventory()
if not inv:is_empty("main") then
for i=1,inv:get_size("main") do
inv:set_stack("main", i, nil)
end
end
if not inv:is_empty("craft") then
for i=1,inv:get_size("craft") do
inv:set_stack("craft", i, nil)
end
end
end
-- check if a player has a spawn position assigned, if so return it
skyblock.has_spawn = function(player_name)
local spawn = spawnpos[player_name]
skyblock.log("has_spawn() for "..player_name.." is "..dump(spawn))
if spawn then
return spawn
end
end
-- get players spawn position
skyblock.get_spawn = function(player_name)
local spawn = spawnpos[player_name]
if spawn and minetest.env:get_node(spawn).name == "skyblock:level_1" then
skyblock.log("get_spawn() for "..player_name.." is "..dump(spawn))
return spawn
end
skyblock.log("get_spawn() for "..player_name.." is unknown")
end
-- set players spawn position
skyblock.set_spawn = function(player_name, pos)
skyblock.log("set_spawn() for "..player_name.." at "..dump(pos))
spawnpos[player_name] = pos
-- save the spawn data from the table to the file
local output = io.open(skyblock.FILENAME..".spawn", "w")
for i, v in pairs(spawnpos) do
if v ~= nil then
output:write(v.x.." "..v.y.." "..v.z.." "..i.."\n")
end
end
io.close(output)
end
-- get next spawn position
skyblock.get_next_spawn = function()
skyblock.log("get_next_spawn()")
last_start_id = last_start_id+1
local output = io.open(skyblock.FILENAME..".last_start_id", "w")
output:write(last_start_id)
io.close(output)
local spawn = start_positions[last_start_id]
if spawn == nil then
print("MAJOR ERROR - no spawn position at id="..last_start_id)
end
return spawn
end
-- handle player spawn setup
skyblock.spawn_player = function(player)
local player_name = player:get_player_name()
skyblock.log("spawn_player() "..player_name)
-- find the player spawn point
local spawn = skyblock.has_spawn(player_name)
if spawn == nil then
spawn = skyblock.get_next_spawn()
skyblock.set_spawn(player_name,spawn)
end
-- already has a spawn, teleport and return true
if minetest.env:get_node(spawn).name == "skyblock:level_1" then
player:setpos({x=spawn.x,y=spawn.y+skyblock.SPAWN_HEIGHT,z=spawn.z})
player:set_hp(20)
return true
end
-- add the start block and teleport the player
skyblock.make_spawn_blocks(spawn,player_name)
player:setpos({x=spawn.x,y=spawn.y+skyblock.SPAWN_HEIGHT,z=spawn.z})
player:set_hp(20)
end
-- on_respawn
skyblock.spawn_diggers = {}
skyblock.on_respawnplayer = function(player)
local player_name = player:get_player_name()
local spawn = skyblock.get_spawn(player_name)
skyblock.log("on_respawnplayer() for "..player_name)
-- empty inventory
skyblock.empty_inventory(player)
-- reset achievements
if achievements ~= nil then
achievements.reset(player_name)
end
-- give them a new position
if skyblock.spawn_diggers[player_name] ~= nil then
if skyblock.spawn_diggers[player_name] ~= nil then skyblock.spawn_diggers[player_name] = nil end
-- give inventory
skyblock.give_inventory(player)
-- unset old spawn position
spawned_players[player_name] = nil
skyblock.set_spawn(player_name, nil)
skyblock.set_spawn(player_name.."_DEAD", spawn)
end
-- set new spawn point and respawn
skyblock.spawn_player(player)
return true
end
-- globalstep for positioning
local spawn_timer = 0
skyblock.globalstep = function(dtime)
spawn_timer = spawn_timer + dtime
for k,player in ipairs(minetest.get_connected_players()) do
local player_name = player:get_player_name()
-- player has not spawned yet
if spawned_players[player_name] == nil then
-- handle new player spawn setup (no more than once per interval)
if spawn_timer > skyblock.SPAWN_THROTLE then
skyblock.log("globalstep() new spawn for "..player_name.." (not spawned)")
if skyblock.get_spawn(player:get_player_name()) or skyblock.spawn_player(player) then
spawned_players[player:get_player_name()] = true
end
end
-- player is spawned
else
local pos = player:getpos()
-- only check once per throttle time
if spawn_timer > skyblock.SPAWN_THROTLE then
-- hit the bottom, kill them (no more than once per interval)
if pos.y < skyblock.WORLD_BOTTOM then
if skyblock.check_inventory(player) then
skyblock.log("globalstep() "..player_name.." has fallen too far, but dont kill them... yet =)")
local spawn = skyblock.has_spawn(player:get_player_name())
if spawn then
skyblock.make_spawn_blocks(spawn,player:get_player_name())
skyblock.spawn_player(player)
end
else
skyblock.log("globalstep() "..player_name.." has fallen too far at "..dump(pos).."... kill them now")
player:set_hp(0)
end
end
-- check for cheaters
--[[
local privs = minetest.get_player_privs(player_name)
local cheat=false
if privs["fly"] then privs["fly"] = false cheat=true end
if privs["give"] then privs["give"] = false cheat=true end
if privs["teleport"] then privs["teleport"] = false cheat=true end
if privs["bring"] then privs["bring"] = false cheat=true end
if privs["settime"] then privs["settime"] = false cheat=true end
if privs["rollback"] then privs["rollback"] = false cheat=true end
if privs["server"] then privs["server"] = false cheat=true end
if privs["privs"] then privs["privs"] = false cheat=true end
if privs["ban"] then privs["ban"] = false cheat=true end
if cheat then
minetest.chat_send_player(player_name, "CHEATING IS NOT ALLOWED!")
minetest.chat_send_all(player_name.." was CHEATING! (but we stopped that)")
minetest.set_player_privs(player_name, privs)
minetest.auth_reload() -- does not seem to save =(
end
]]--
end
-- walking on dirt_with_grass, change to dirt_with_grass_footsteps
local np = {x=pos.x,y=pos.y-1,z=pos.z}
if (minetest.env:get_node(np).name == "default:dirt_with_grass") then
minetest.env:add_node(np, {name="default:dirt_with_grass_footsteps"})
end
end
end
-- reset the spawn_timer
if spawn_timer > skyblock.SPAWN_THROTLE then
spawn_timer = 0
end
end
-- prevent lava bucket too far from spawn
skyblock.bucket_lava_on_use = function(itemstack, user, pointed_thing)
-- Must be pointing to node
if pointed_thing.type ~= "node" then
return
end
-- Check if pointing to a liquid
n = minetest.env:get_node(pointed_thing.under)
if bucket.liquids[n.name] == nil then
-- Not a liquid
-- begin anti-grief change
local player_name = user:get_player_name()
local spawn = skyblock.has_spawn(player_name)
local range = skyblock.START_GAP/3 -- how far from spawn you can use lava
local pos = pointed_thing.under
if spawn==nil or (pos.x-spawn.x > range or pos.x-spawn.x < range*-1) or (pos.y-spawn.y > range/2 or pos.y-spawn.y < range*-1/2) or (pos.z-spawn.z > range or pos.z-spawn.z < range*-1) then
minetest.chat_send_player(player_name, "Cannot use bucket so far from your home.")
return
end
-- end anti-grief change
minetest.env:add_node(pointed_thing.above, {name="default:lava_source"})
elseif n.name ~= "default:lava_source" then
-- It's a liquid
minetest.env:add_node(pointed_thing.under, {name="default:lava_source"})
end
-- begin track bucket achievements
achievements.bucket_lava_on_use(itemstack, user, pointed_thing)
-- end track bucket achievements
return {name="bucket:bucket_empty"}
end
-- handle bucket_water usage
skyblock.bucket_water_on_use = function(itemstack, user, pointed_thing)
-- Must be pointing to node
if pointed_thing.type ~= "node" then
return
end
-- Check if pointing to a liquid
n = minetest.env:get_node(pointed_thing.under)
if bucket.liquids[n.name] == nil then
-- Not a liquid
-- begin anti-grief change
local player_name = user:get_player_name()
local spawn = skyblock.has_spawn(player_name)
local range = skyblock.START_GAP/3 -- how far from spawn you can use water
local pos = pointed_thing.under
if spawn==nil or (pos.x-spawn.x > range or pos.x-spawn.x < range*-1) or (pos.y-spawn.y > range/2 or pos.y-spawn.y < range*-1/2) or (pos.z-spawn.z > range or pos.z-spawn.z < range*-1) then
minetest.chat_send_player(player_name, "Cannot use bucket so far from your home.")
return
end
-- end anti-grief change
minetest.env:add_node(pointed_thing.above, {name="default:water_source"})
elseif n.name ~= "default:water_source" then
-- It's a liquid
minetest.env:add_node(pointed_thing.under, {name="default:water_source"})
end
-- begin track bucket achievements
achievements.bucket_water_on_use(itemstack, user, pointed_thing)
-- end track bucket achievements
return {name="bucket:bucket_empty"}
end
-- handle bucket usage
skyblock.bucket_on_use = function(itemstack, user, pointed_thing)
-- Must be pointing to node
if pointed_thing.type ~= "node" then
return
end
-- Check if pointing to a liquid source
n = minetest.env:get_node(pointed_thing.under)
liquiddef = bucket.liquids[n.name]
if liquiddef ~= nil and liquiddef.source == n.name and liquiddef.itemname ~= nil then
-- begin track bucket achievements
achievements.bucket_on_use(itemstack, user, pointed_thing)
-- end track bucket achievements
minetest.env:add_node(pointed_thing.under, {name="air"})
return {name=liquiddef.itemname}
end
end
-- build spawn block
skyblock.make_spawn_blocks = function(pos, player_name)
skyblock.log("make_spawn_blocks() at "..dump(pos).." for "..player_name)
levels[1].make_start_blocks(pos, player_name)
end
-- make a tree (based on rubber tree in farming by PilzAdam)
skyblock.generate_tree = function(pos)
skyblock.log("generate_tree() at "..dump(pos))
-- check if we have space to make a tree
for dy=1,4 do
pos.y = pos.y+dy
if minetest.env:get_node(pos).name ~= "air" then
return
end
pos.y = pos.y-dy
end
local node = {name = ""}
-- check if we should make an apple tree
local is_apple_tree, is_jungle_tree = false, false
if math.random(0, 8) == 0 then
is_apple_tree = true
else
if math.random(0, 8) == 0 then
is_jungle_tree = true
end
end
-- add the tree
if is_jungle_tree then
node.name = "default:jungletree"
else
node.name = "default:tree"
end
for dy=0,4 do
pos.y = pos.y+dy
minetest.env:set_node(pos, node)
pos.y = pos.y-dy
end
-- add leaves all around the tree
pos.y = pos.y+3
for dx=-2,2 do
for dz=-2,2 do
for dy=0,3 do
pos.x = pos.x+dx
pos.y = pos.y+dy
pos.z = pos.z+dz
-- check if we should add leaves or an apple
if is_apple_tree and math.random(0, 6) == 0 then
node.name = "default:apple"
else
node.name = "default:leaves"
end
-- add the leaves
if dx == 0 and dz == 0 and dy==3 then
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
minetest.env:set_node(pos, node)
end
elseif dx == 0 and dz == 0 and dy==4 then
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
minetest.env:set_node(pos, node)
end
elseif math.abs(dx) ~= 2 and math.abs(dz) ~= 2 then
if minetest.env:get_node(pos).name == "air" then
minetest.env:set_node(pos, node)
end
else
if math.abs(dx) ~= 2 or math.abs(dz) ~= 2 then
if minetest.env:get_node(pos).name == "air" and math.random(1, 5) <= 4 then
minetest.env:set_node(pos, node)
end
end
end
pos.x = pos.x-dx
pos.y = pos.y-dy
pos.z = pos.z-dz
end
end
end
end
-- hollow sphere (based on sphere in multinode by mauvebic)
skyblock.make_sphere = function(pos,radius,nodename,hollow)
pos.x = math.floor(pos.x+0.5)
pos.y = math.floor(pos.y+0.5)
pos.z = math.floor(pos.z+0.5)
for x=-radius,radius do
for y=-radius,radius do
for z=-radius,radius do
if hollow ~= nil then
if x*x+y*y+z*z >= (radius-hollow) * (radius-hollow) + (radius-hollow) and x*x+y*y+z*z <= radius * radius + radius then
minetest.env:add_node({x=pos.x+x,y=pos.y+y,z=pos.z+z},{name=nodename})
end
else
if x*x+y*y+z*z <= radius * radius + radius then
minetest.env:add_node({x=pos.x+x,y=pos.y+y,z=pos.z+z},{name=nodename})
end
end
end
end
end
end
--
-- LOCAL FUNCTIONS
--
-- spiral matrix
-- http://rosettacode.org/wiki/Spiral_matrix#Lua
av, sn = math.abs, function(s) return s~=0 and s/av(s) or 0 end
local function sindex(y, x) -- returns the value at (x, y) in a spiral that starts at 1 and goes outwards
if y == -x and y >= x then return (2*y+1)^2 end
local l = math.max(av(y), av(x))
return (2*l-1)^2+4*l+2*l*sn(x+y)+sn(y^2-x^2)*(l-(av(y)==l and sn(y)*x or sn(x)*y)) -- OH GOD WHAT
end
local function spiralt(side)
local ret, id, start, stop = {}, 0, math.floor((-side+1)/2), math.floor((side-1)/2)
for i = 1, side do
for j = 1, side do
local id = side^2 - sindex(stop - i + 1,start + j - 1)
ret[id] = {x=i,z=j}
end
end
return ret
end
-- reverse ipairs
function ripairs(t)
local function ripairs_it(t,i)
i=i-1
local v=t[i]
if v==nil then return v end
return i,v
end
return ripairs_it, t, #t+1
end
--
-- INIT FUNCTIONS
--
-- load the spawn data from disk
local load_spawn = function()
local input = io.open(skyblock.FILENAME..".spawn", "r")
if input then
while true do
local x = input:read("*n")
if x == nil then
break
end
local y = input:read("*n")
local z = input:read("*n")
local name = input:read("*l")
spawnpos[name:sub(2)] = {x = x, y = y, z = z}
end
io.close(input)
else
spawnpos = {}
end
end
load_spawn() -- run it now
-- load the start positions from disk
local load_start_positions = function()
local input = io.open(skyblock.FILENAME..".start_positions", "r")
-- create start_positions file if needed
if not input then
local output = io.open(skyblock.FILENAME..".start_positions", "w")
local pos
for i,v in ripairs(spiralt(skyblock.WORLD_WIDTH)) do -- get positions using spiral
pos = {x=v.x*skyblock.START_GAP, y=skyblock.START_HEIGHT, z=v.z*skyblock.START_GAP}
output:write(pos.x.." "..pos.y.." "..pos.z.."\n")
end
io.close(output)
input = io.open(skyblock.FILENAME..".start_positions", "r")
end
-- read start positions
while true do
local x = input:read("*n")
if x == nil then
break
end
local y = input:read("*n")
local z = input:read("*n")
table.insert(start_positions,{x = x, y = y, z = z})
end
io.close(input)
end
load_start_positions() -- run it now
-- load the last start position from disk
local load_last_start_id = function()
local input = io.open(skyblock.FILENAME..".last_start_id", "r")
-- create last_start_id file if needed
if not input then
local output = io.open(skyblock.FILENAME..".last_start_id", "w")
output:write(last_start_id)
io.close(output)
input = io.open(skyblock.FILENAME..".last_start_id", "r")
end
-- read last start id
last_start_id = input:read("*n")
if last_start_id == nil then
last_start_id = 0
end
io.close(input)
end
load_last_start_id() -- run it now
-- registered
skyblock.registered = function(case,name)
local params = {}
local list
if case == "item" then list = minetest.registered_items end
if case == "node" then list = minetest.registered_nodes end
if case == "craftitem" then list = minetest.registered_craftitems end
if case == "tool" then list = minetest.registered_tools end
if case == "entity" then list = minetest.registered_entities end
if list then
for k,v in pairs(list[name]) do
params[k] = v
end
end
return params
end

View File

@ -1,133 +0,0 @@
--[[
Save Table to File
Load Table from File
v 1.0
Lua 5.2 compatible
Only Saves Tables, Numbers and Strings
Insides Table References are saved
Does not save Userdata, Metatables, Functions and indices of these
----------------------------------------------------
table.save( table , filename )
on failure: returns an error msg
----------------------------------------------------
table.load( filename or stringtable )
Loads a table that has been saved via the table.save function
on success: returns a previously saved table
on failure: returns as second argument an error msg
----------------------------------------------------
Licensed under the same terms as Lua itself.
]]--
do
-- declare local variables
--// exportstring( string )
--// returns a "Lua" portable version of the string
local function exportstring( s )
return string.format("%q", s)
end
--// The Save Function
function table.save( tbl,filename )
local charS,charE = " ","\n"
local file,err = io.open( filename, "wb" )
if err then return err end
-- initiate variables for save procedure
local tables,lookup = { tbl },{ [tbl] = 1 }
file:write( "return {"..charE )
for idx,t in ipairs( tables ) do
file:write( "-- Table: {"..idx.."}"..charE )
file:write( "{"..charE )
local thandled = {}
for i,v in ipairs( t ) do
thandled[i] = true
local stype = type( v )
-- only handle value
if stype == "table" then
if not lookup[v] then
table.insert( tables, v )
lookup[v] = #tables
end
file:write( charS.."{"..lookup[v].."},"..charE )
elseif stype == "string" then
file:write( charS..exportstring( v )..","..charE )
elseif stype == "number" then
file:write( charS..tostring( v )..","..charE )
end
end
for i,v in pairs( t ) do
-- escape handled values
if (not thandled[i]) then
local str = ""
local stype = type( i )
-- handle index
if stype == "table" then
if not lookup[i] then
table.insert( tables,i )
lookup[i] = #tables
end
str = charS.."[{"..lookup[i].."}]="
elseif stype == "string" then
str = charS.."["..exportstring( i ).."]="
elseif stype == "number" then
str = charS.."["..tostring( i ).."]="
end
if str ~= "" then
stype = type( v )
-- handle value
if stype == "table" then
if not lookup[v] then
table.insert( tables,v )
lookup[v] = #tables
end
file:write( str.."{"..lookup[v].."},"..charE )
elseif stype == "string" then
file:write( str..exportstring( v )..","..charE )
elseif stype == "number" then
file:write( str..tostring( v )..","..charE )
end
end
end
end
file:write( "},"..charE )
end
file:write( "}" )
file:close()
end
--// The Load Function
function table.load( sfile )
local ftables,err = loadfile( sfile )
if err then return _,err end
local tables = ftables()
for idx = 1,#tables do
local tolinki = {}
for i,v in pairs( tables[idx] ) do
if type( v ) == "table" then
tables[idx][i] = tables[v[1]]
end
if type( i ) == "table" and tables[i[1]] then
table.insert( tolinki,{ i,tables[i[1]] } )
end
end
-- link indices
for _,v in ipairs( tolinki ) do
tables[idx][v[2]],tables[idx][v[1]] = tables[idx][v[1]],nil
end
end
return tables[1]
end
-- close do
end
-- ChillCode

View File

@ -1,42 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
USER CONFIG
]]--
-- How far apart to set players start positions
skyblock.START_GAP = 64
-- Game mode (which block is the ocean in the void) - air | water | lava
skyblock.MODE = "air"
-- Level selection (which level files to use)
skyblock.LEVEL = "default"
-- The Y position the spawn nodes will appear
skyblock.START_HEIGHT = 4
-- How many players will be in 1 row
-- skyblock.WORLD_WIDTH * skyblock.WORLD_WIDTH = total players
skyblock.WORLD_WIDTH = 100
-- How far down (in nodes) before a player dies and is respawned
skyblock.WORLD_BOTTOM = -32
-- Delay between skyblock respawn checks
skyblock.SPAWN_THROTLE = 2
-- Nodes above the spawn node where players are spawned
skyblock.SPAWN_HEIGHT = 4
-- Debug mode
skyblock.DEBUG = 1
-- File path and prefix for data files
skyblock.FILENAME = minetest.get_worldpath()..'/skyblock'

View File

@ -1,35 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
MAIN LOADER
]]--
-- expose functions to other modules
skyblock = {}
-- load config
dofile(minetest.get_modpath("skyblock").."/config.lua")
-- load apis
dofile(minetest.get_modpath("skyblock").."/api_table_save.lua")
dofile(minetest.get_modpath("skyblock").."/api_achievements.lua")
dofile(minetest.get_modpath("skyblock").."/api_skyblock.lua")
-- load levels
dofile(minetest.get_modpath("skyblock").."/levels/"..skyblock.LEVEL.."/init.lua")
-- register entities
dofile(minetest.get_modpath("skyblock").."/register_alias.lua")
dofile(minetest.get_modpath("skyblock").."/register_node.lua")
dofile(minetest.get_modpath("skyblock").."/register_craft.lua")
dofile(minetest.get_modpath("skyblock").."/register_abm.lua")
dofile(minetest.get_modpath("skyblock").."/register_misc.lua")
-- log that we started
minetest.log("action", "[MOD]"..minetest.get_current_modname().." -- loaded from "..minetest.get_modpath(minetest.get_current_modname()))

View File

@ -1,50 +0,0 @@
--[[
SkyBlock for MineTest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
LEVEL LOADER
]]--
--
-- Level Files
--
levels = {}
dofile(minetest.get_modpath("skyblock").."/levels/default/level_1.lua")
dofile(minetest.get_modpath("skyblock").."/levels/default/level_2.lua")
dofile(minetest.get_modpath("skyblock").."/levels/default/level_3.lua")
dofile(minetest.get_modpath("skyblock").."/levels/default/level_4.lua")
--
-- Level Nodes
--
for level=1,4 do
minetest.register_node("skyblock:level_"..level, {
description = "Level "..level,
tiles = {"skyblock_"..level..".png"},
is_ground_content = true,
paramtype = "light",
light_propagates = true,
sunlight_propagates = true,
light_source = 15,
groups = {crumbly=2,cracky=2},
on_punch = function(pos, node, puncher)
achievements.level_on_punch(level, pos, node, puncher)
end,
on_dig = function(pos, node, digger)
achievements.level_on_dig(level, pos, node, digger)
end,
on_construct = function(pos)
minetest.env:get_meta(pos):get_inventory():set_size("rewards", 2*2)
end,
})
end

View File

@ -1,366 +0,0 @@
--[[
SkyBlock for MineTest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
LEVEL 1 FUNCTIONS
]]--
--
-- PUBLIC FUNCTIONS
--
local level = 1
levels[level] = {}
-- get pos
levels[level].get_pos = function(player_name)
skyblock.log("level["..level.."].get_pos() for "..player_name)
return skyblock.has_spawn(player_name)
end
-- make start blocks
levels[level].make_start_blocks = function(pos, player_name)
skyblock.log("level["..level.."].make_start_blocks() for "..player_name)
-- level 0 - spawn and dirt
minetest.env:add_node(pos, {name="skyblock:level_1"})
--achievements.update(level,player_name)
for x=-1,1 do
for z=-1,1 do
if x~=0 or z~=0 then
minetest.env:add_node({x=pos.x+x,y=pos.y,z=pos.z+z}, {name="default:dirt"})
end
end
end
-- level -1 - lava_source and dirt
for x=-1,1 do
for z=-1,1 do
if x==0 and z==0 then
minetest.env:add_node({x=pos.x,y=pos.y-1,z=pos.z}, {name="default:lava_source"})
else
minetest.env:add_node({x=pos.x+x,y=pos.y-1,z=pos.z+z}, {name="default:dirt"})
end
end
end
-- level -2 - dirt
for x=-1,1 do
for z=-1,1 do
minetest.env:add_node({x=pos.x+x,y=pos.y-2,z=pos.z+z}, {name="default:dirt"})
end
end
-- level -2 -- ocean
if skyblock.MODE == "water" or skyblock.MODE == "lava" then
local node_name = "default:water_source"
if skyblock.MODE == "lava" then
node_name = "default:lava_source"
end
minetest.env:add_node({x=pos.x-5,y=pos.y-2,z=pos.z-5}, {name=node_name})
minetest.env:add_node({x=pos.x-5,y=pos.y-2,z=pos.z+5}, {name=node_name})
minetest.env:add_node({x=pos.x+5,y=pos.y-2,z=pos.z-5}, {name=node_name})
minetest.env:add_node({x=pos.x+5,y=pos.y-2,z=pos.z+5}, {name=node_name})
end
end
-- update achievements
levels[level].update = function(player_name,pos)
local formspec = ""
local total = 10
local count = 0
formspec = formspec
.."size[15,10;]"
.."label[0,0;LEVEL "..level.." FOR: ".. player_name .."]"
.."label[13.4,0; rewards]"
.."list[current_name;rewards;13,0.5;2,2;]"
.."list[current_player;main;0,6;8,4;]"
.."label[0,1; --== Welcome Traveller ==--]"
.."label[0,1.5; Complete the tasks to the right to receive]"
.."label[0,2.0; great rewards! If you wasted the required]"
.."label[0,2.5; items you can dig this node to restart.]"
.."label[0,3; --== About The Level "..level.." Block ==--]"
.."label[0,3.5; * SHORT LEFT CLICK]"
.."label[0.4,4; = PUNCH - refresh achievements]"
.."label[0,4.5; * LONG LEFT CLICK]"
.."label[0.4,5; = DIG - restart in a new spawn location]"
-- place_sapling
formspec = formspec.."label[8,0; 1) grow a Tree]"
if achievements.get(level,player_name,"place_sapling") >= 1 then
formspec = formspec .. "label[8.3,0.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,0.4; not done]"
end
-- dig_tree
formspec = formspec.."label[8,1; 2) dig a Tree]"
if achievements.get(level,player_name,"dig_tree") >= 5 then
formspec = formspec .. "label[8.3,1.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,1.4; not done]"
end
-- place chest
formspec = formspec.."label[8,2; 3) craft and place a Chest]"
if achievements.get(level,player_name,"place_chest") >= 1 then
formspec = formspec .. "label[8.3,2.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,2.4; not done]"
end
-- collect lava under spawn node
formspec = formspec.."label[8,3; 4) collect the Lava Source under your Spawn]"
if achievements.get(level,player_name,"collect_spawn_lava") >= 1 then
formspec = formspec .. "label[8.3,3.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,3.4; not done]"
end
-- dig stone
formspec = formspec.."label[8,4; 5) build a Stone Generator and dig 20 Cobble]"
if achievements.get(level,player_name,"dig_stone") >= 20 then
formspec = formspec .. "label[8.3,4.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,4.4; not done]"
end
-- place furnace
formspec = formspec.."label[8,5; 6) craft and place a Furnace]"
if achievements.get(level,player_name,"place_furnace") >= 1 then
formspec = formspec .. "label[8.3,5.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,5.4; not done]"
end
-- dig 4 coal lumps
formspec = formspec.."label[8,6; 7) dig 4 Coal Lumps]"
if achievements.get(level,player_name,"dig_stone_with_coal") >= 2 then
formspec = formspec .. "label[8.3,6.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,6.4; not done]"
end
-- place 100 dirt
formspec = formspec.."label[8,7; 8) extend your Island with 100 Dirt]"
if achievements.get(level,player_name,"place_dirt") >= 100 then
formspec = formspec .. "label[8.3,7.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,7.4; not done]"
end
-- dig stone with mese pickaxe
formspec = formspec.."label[8,8; 9) dig 100 Stone with a Mese Pickaxe]"
if achievements.get(level,player_name,"dig_stone_with_mese_pickaxe") >= 100 then
formspec = formspec .. "label[8.3,8.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,8.4; not done]"
end
-- place both water in diagonal
formspec = formspec.."label[8,9; 10) create an Infinite Water Source]"
if achievements.get(level,player_name,"place_water_infinite") >= 1 then
formspec = formspec .. "label[8.3,9.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,9.4; not done]"
end
-- next level
if count==total and achievements.get(0,player_name,"level")==level then
levels[level+1].make_start_blocks(player_name)
achievements.add(0,player_name,"level")
end
if achievements.get(0,player_name,"level") > level then
local pos = levels[level+1].get_pos(player_name)
if pos and minetest.env:get_node(pos).name ~= "skyblock:level_2" then
levels[level+1].make_start_blocks(player_name)
end
end
local infotext = "LEVEL "..level.." for ".. player_name ..": ".. count .." of "..total
return formspec, infotext
end
-- reward_achievement
levels[level].reward_achievement = function(player_name,achievement)
local achievement_count = achievements.get(level,player_name,achievement)
-- place_sapling
if achievement == "place_sapling" and achievement_count == 1 then
achievements.give_reward(level,player_name,"default:tree")
return true
end
-- dig_tree
if achievement == "dig_tree" and achievement_count == 5 then
achievements.give_reward(level,player_name,"default:mese")
return true
end
-- place_chest
if achievement == "place_chest" and achievement_count == 1 then
achievements.give_reward(level,player_name,"bucket:bucket_empty")
return true
end
-- collect_spawn_lava
if achievement == "collect_spawn_lava" and achievement_count == 1 then
achievements.give_reward(level,player_name,"default:water_source")
return true
end
-- dig_stone
if achievement == "dig_stone" and achievement_count == 20 then
achievements.give_reward(level,player_name,"default:mese")
return true
end
-- place_furnace
if achievement == "place_furnace" and achievement_count == 1 then
achievements.give_reward(level,player_name,"default:coal_lump")
return true
end
-- dig_stone_with_coal
if achievement == "dig_stone_with_coal" and achievement_count == 2 then
achievements.give_reward(level,player_name,"default:iron_lump")
return true
end
-- place_dirt
if achievement == "place_dirt" and achievement_count == 100 then
achievements.give_reward(level,player_name,"default:mese")
return true
end
-- dig_stone_with_mese_pickaxe
if achievement == "dig_stone_with_mese_pickaxe" and achievement_count == 100 then
achievements.give_reward(level,player_name,"default:water_source")
return true
end
-- place_water_infinite
if achievement == "place_water_infinite" and achievement_count == 1 then
--achievements.give_reward(level,player_name,"default:lava_source")
return true
end
end
-- track digging achievements
levels[level].on_dignode = function(pos, oldnode, digger)
local player_name = digger:get_player_name()
-- dig_stone
if oldnode.name == "default:stone" then
-- with mese pickaxe
if digger:get_wielded_item():get_name() == "default:pick_mese" then
achievements.add(level,player_name,"dig_stone_with_mese_pickaxe")
return
end
achievements.add(level,player_name,"dig_stone")
return
end
-- dig_stone_with_coal
if oldnode.name == "default:stone_with_coal" then
achievements.add(level,player_name,"dig_stone_with_coal")
return
end
-- dig_tree
if oldnode.name == "default:tree" then
achievements.add(level,player_name,"dig_tree")
return
end
end
-- track placing achievements
levels[level].on_placenode = function(pos, newnode, placer, oldnode)
local player_name = placer:get_player_name()
-- place_sapling
if newnode.name == "default:sapling" then
achievements.add(level,player_name,"place_sapling")
return
end
-- place_dirt
if newnode.name == "default:dirt" then
achievements.add(level,player_name,"place_dirt")
return
end
-- place_chest
if newnode.name == "default:chest" then
achievements.add(level,player_name,"place_chest")
return
end
-- place_furnace
if newnode.name == "default:furnace" then
achievements.add(level,player_name,"place_furnace")
return
end
end
-- track bucket achievements
levels[level].bucket_on_use = function(player_name, pointed_thing)
-- collect_spawn_lava
n = minetest.env:get_node(pointed_thing.under)
if n.name == "default:lava_source" then
local spawn = skyblock.has_spawn(player_name)
if spawn~=nil and pointed_thing.under.x==spawn.x and pointed_thing.under.y==spawn.y-1 and pointed_thing.under.z==spawn.z then
achievements.add(level,player_name,"collect_spawn_lava")
end
end
end
-- track bucket achievements
levels[level].bucket_water_on_use = function(player_name, pointed_thing)
-- place_water_infinite
local pos = pointed_thing.under
if minetest.env:get_node({x=pos.x-1,y=pos.y,z=pos.z-1}).name=="default:water_source"
or minetest.env:get_node({x=pos.x-1,y=pos.y,z=pos.z+1}).name=="default:water_source"
or minetest.env:get_node({x=pos.x+1,y=pos.y,z=pos.z-1}).name=="default:water_source"
or minetest.env:get_node({x=pos.x+1,y=pos.y,z=pos.z+1}).name=="default:water_source" then
achievements.add(level,player_name,"place_water_infinite")
return
end
end
-- track bucket achievements
levels[level].bucket_lava_on_use = function(player_name, pointed_thing)
end

View File

@ -1,317 +0,0 @@
--[[
SkyBlock for MineTest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
LEVEL 2 FUNCTIONS
]]--
--
-- PUBLIC FUNCTIONS
--
local level = 2
levels[level] = {}
-- get pos
levels[level].get_pos = function(player_name)
skyblock.log("level["..level.."].get_pos() for "..player_name)
local pos = skyblock.get_spawn(player_name)
if pos==nil then return pos end
return {x=pos.x,y=pos.y+15,z=pos.z}
end
-- make start blocks
levels[level].make_start_blocks = function(player_name)
skyblock.log("level["..level.."].make_start_blocks() for "..player_name)
local pos = levels[level].get_pos(player_name)
if pos==nil then return end
-- sphere
local radius = 3
local hollow = 1
skyblock.make_sphere({x=pos.x,y=pos.y-radius,z=pos.z},radius,"default:dirt",hollow)
minetest.env:add_node({x=pos.x,y=pos.y-1,z=pos.z}, {name="default:lava_source"})
-- level 2
minetest.env:add_node(pos, {name="skyblock:level_2"})
achievements.update(level,player_name)
end
-- update achievements
levels[level].update = function(player_name,pos)
local formspec = ""
local total = 10
local count = 0
formspec = formspec
.."size[15,10;]"
.."label[0,0;LEVEL "..level.." FOR: ".. player_name .."]"
.."label[13.4,0; rewards]"
.."list[current_name;rewards;13,0.5;2,2;]"
.."list[current_player;main;0,6;8,4;]"
.."label[0,1; --== A View From Above ==--]"
.."label[0,1.5; Wow, look at that view... of... nothing.]"
.."label[0,2.0; You should get to work extending this]"
.."label[0,2.5; island. Perhaps you could build some]"
.."label[0,3.0; structures too?]"
.."label[0,4; --== About The Level "..level.." Block ==--]"
.."label[0,4.5; * SHORT LEFT CLICK]"
.."label[0.4,5; = PUNCH to refresh achievements]"
-- place 200 dirt
formspec = formspec.."label[8,0; 1) extend your Island with 200 Dirt]"
if achievements.get(level,player_name,"place_dirt") >= 200 then
formspec = formspec .. "label[8.3,0.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,0.4; not done]"
end
-- place 50 wood
formspec = formspec.."label[8,1; 2) build a structure using 200 Wood]"
if achievements.get(level,player_name,"place_wood") >= 200 then
formspec = formspec .. "label[8.3,1.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,1.4; not done]"
end
-- place 50 brick
formspec = formspec.."label[8,2; 3) build a structure using 200 Brick]"
if achievements.get(level,player_name,"place_brick") >= 200 then
formspec = formspec .. "label[8.3,2.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,2.4; not done]"
end
-- place 12 glass
formspec = formspec.."label[8,3; 4) add at least 200 Glass windows]"
if achievements.get(level,player_name,"place_glass") >= 200 then
formspec = formspec .. "label[8.3,3.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,3.4; not done]"
end
-- place 40 sand
formspec = formspec.."label[8,4; 5) make a desert with 200 Sand]"
if achievements.get(level,player_name,"place_sand") >= 200 then
formspec = formspec .. "label[8.3,4.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,4.4; not done]"
end
-- place 30 desert_sand
formspec = formspec.."label[8,5; 6) also include 200 Desert Sand]"
if achievements.get(level,player_name,"place_desert_sand") >= 200 then
formspec = formspec .. "label[8.3,5.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,5.4; not done]"
end
-- place 50 stone
formspec = formspec.."label[8,6; 7) build a tower with 200 Stone]"
if achievements.get(level,player_name,"place_stone") >= 200 then
formspec = formspec .. "label[8.3,6.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,6.4; not done]"
end
-- place 40 cobble
formspec = formspec.."label[8,7; 8) make a path with 200 Cobblestone]"
if achievements.get(level,player_name,"place_cobble") >= 200 then
formspec = formspec .. "label[8.3,7.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,7.4; not done]"
end
-- place 30 mossycobble
formspec = formspec.."label[8,8; 9) also use 200 Mossy Cobblestone]"
if achievements.get(level,player_name,"place_mossycobble") >= 200 then
formspec = formspec .. "label[8.3,8.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,8.4; not done]"
end
-- place 20 steelblock
formspec = formspec.."label[8,9; 10) decorate your area with 75 Steel Blocks]"
if achievements.get(level,player_name,"place_steelblock") >= 75 then
formspec = formspec .. "label[8.3,9.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,9.4; not done]"
end
-- next level
if count==total and achievements.get(0,player_name,"level")==level then
levels[level+1].make_start_blocks(player_name)
achievements.add(0,player_name,"level")
end
if achievements.get(0,player_name,"level") > level then
local pos = levels[level+1].get_pos(player_name)
if pos and minetest.env:get_node(pos).name ~= "skyblock:level_3" then
levels[level+1].make_start_blocks(player_name)
end
end
local infotext = "LEVEL "..level.." for ".. player_name ..": ".. count .." of "..total
return formspec, infotext
end
-- reward_achievement
levels[level].reward_achievement = function(player_name,achievement)
local achievement_count = achievements.get(level,player_name,achievement)
-- place_dirt
if achievement == "place_dirt" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:wood "..math.random(50,99))
return true
end
-- place_wood
if achievement == "place_wood" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:brick "..math.random(50,99))
return true
end
-- place_brick
if achievement == "place_brick" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:glass "..math.random(50,99))
return true
end
-- place_glass
if achievement == "place_glass" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:sand "..math.random(50,99))
return true
end
-- place_sand
if achievement == "place_sand" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:desert_sand "..math.random(50,99))
return true
end
-- place_desert_sand
if achievement == "place_desert_sand" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:stone "..math.random(50,99))
return true
end
-- place_stone
if achievement == "place_stone" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:cobble "..math.random(50,99))
return true
end
-- place_cobble
if achievement == "place_cobble" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:mossycobble "..math.random(50,99))
return true
end
-- place_mossycobble
if achievement == "place_mossycobble" and achievement_count == 200 then
achievements.give_reward(level,player_name,"default:steelblock "..math.random(50,69))
return true
end
-- place_steelblock
if achievement == "place_steelblock" and achievement_count == 75 then
achievements.give_reward(level,player_name,"default:mese "..math.random(5,15))
return true
end
end
-- track placing achievements
levels[level].on_placenode = function(pos, newnode, placer, oldnode)
local player_name = placer:get_player_name()
-- place_dirt
if newnode.name == "default:dirt" then
achievements.add(level,player_name,"place_dirt")
return
end
-- place_wood
if newnode.name == "default:wood" then
achievements.add(level,player_name,"place_wood")
return
end
-- place_brick
if newnode.name == "default:brick" then
achievements.add(level,player_name,"place_brick")
return
end
-- place_glass
if newnode.name == "default:glass" then
achievements.add(level,player_name,"place_glass")
return
end
-- place_sand
if newnode.name == "default:sand" then
achievements.add(level,player_name,"place_sand")
return
end
-- place_desert_sand
if newnode.name == "default:desert_sand" then
achievements.add(level,player_name,"place_desert_sand")
return
end
-- place_stone
if newnode.name == "default:stone" then
achievements.add(level,player_name,"place_stone")
return
end
-- place_cobble
if newnode.name == "default:cobble" then
achievements.add(level,player_name,"place_cobble")
return
end
-- place_mossycobble
if newnode.name == "default:mossycobble" then
achievements.add(level,player_name,"place_mossycobble")
return
end
-- place_steelblock
if newnode.name == "default:steelblock" then
achievements.add(level,player_name,"place_steelblock")
return
end
end
-- not used
levels[level].on_dignode = function(pos, oldnode, digger) end
levels[level].bucket_on_use = function(player_name, pointed_thing) end
levels[level].bucket_water_on_use = function(player_name, pointed_thing) end
levels[level].bucket_lava_on_use = function(player_name, pointed_thing) end

View File

@ -1,320 +0,0 @@
--[[
SkyBlock for MineTest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
LEVEL 3 FUNCTIONS
]]--
--
-- PUBLIC FUNCTIONS
--
local level = 3
levels[level] = {}
-- get pos
levels[level].get_pos = function(player_name)
skyblock.log("level["..level.."].get_pos() for "..player_name)
local pos = skyblock.get_spawn(player_name)
if pos==nil then return pos end
return {x=pos.x,y=pos.y+40,z=pos.z}
end
-- make start blocks
levels[level].make_start_blocks = function(player_name)
skyblock.log("level["..level.."].make_start_blocks() for "..player_name)
local pos = levels[level].get_pos(player_name)
if pos==nil then return end
-- sphere
local radius = 5
local hollow = 1
skyblock.make_sphere({x=pos.x,y=pos.y-radius,z=pos.z},radius,"default:dirt",hollow)
-- level 3
minetest.env:add_node(pos, {name="skyblock:level_3"})
achievements.update(level,player_name)
end
-- update achievements
levels[level].update = function(player_name,pos)
local formspec = ""
local total = 10
local count = 0
formspec = formspec
.."size[15,10;]"
.."label[0,0;LEVEL "..level.." FOR: ".. player_name .."]"
.."label[13.4,0; rewards]"
.."list[current_name;rewards;13,0.5;2,2;]"
.."list[current_player;main;0,6;8,4;]"
.."label[0,1; --== Does This Keep Going? ==--]"
.."label[0,1.5; If you like this planet, then stray not]"
.."label[0,2.0; from your mission traveller, for the end]"
.."label[0,2.5; is near.]"
.."label[0,4; --== About The Level "..level.." Block ==--]"
.."label[0,4.5; * SHORT LEFT CLICK]"
.."label[0.4,5; = PUNCH to refresh achievements]"
-- dig 20 papyrus
formspec = formspec.."label[8,0; 1) dig 20 Papyrus]"
if achievements.get(level,player_name,"dig_papyrus") >= 20 then
formspec = formspec .. "label[8.3,0.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,0.4; not done]"
end
-- place 20 papyrus
formspec = formspec.."label[8,1; 2) place 20 Papyrus in a nice garden]"
if achievements.get(level,player_name,"place_papyrus") >= 20 then
formspec = formspec .. "label[8.3,1.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,1.4; not done]"
end
-- dig 15 cactus
formspec = formspec.."label[8,2; 3) dig 15 Cactus]"
if achievements.get(level,player_name,"dig_cactus") >= 15 then
formspec = formspec .. "label[8.3,2.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,2.4; not done]"
end
-- place 15 cactus
formspec = formspec.."label[8,3; 4) place 15 Cactus in another gargen]"
if achievements.get(level,player_name,"place_cactus") >= 15 then
formspec = formspec .. "label[8.3,3.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,3.4; not done]"
end
-- place 30 fences
formspec = formspec.."label[8,4; 5) place 30 fences around your gardens]"
if achievements.get(level,player_name,"place_fence") >= 30 then
formspec = formspec .. "label[8.3,4.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,4.4; not done]"
end
-- place 20 ladders
formspec = formspec.."label[8,5; 6) add 20 ladders to your structures]"
if achievements.get(level,player_name,"place_ladder") >= 20 then
formspec = formspec .. "label[8.3,5.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,5.4; not done]"
end
-- place 5 bookshelves
formspec = formspec.."label[8,6; 7) decorate your house with 5 Bookshelves]"
if achievements.get(level,player_name,"place_bookshelf") >= 5 then
formspec = formspec .. "label[8.3,6.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,6.4; not done]"
end
-- place 10 signs
formspec = formspec.."label[8,7; 8) place 10 Signs to help other travellers]"
if achievements.get(level,player_name,"place_sign_wall") >= 10 then
formspec = formspec .. "label[8.3,7.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,7.4; not done]"
end
-- place 50 torches
formspec = formspec.."label[8,8; 9) place 50 Torches to help you see at night]"
if achievements.get(level,player_name,"place_torch") >= 50 then
formspec = formspec .. "label[8.3,8.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,8.4; not done]"
end
-- dig 500 stone
formspec = formspec.."label[8,9; 10) dig 500 Stone for your next project...]"
if achievements.get(level,player_name,"dig_stone") >= 500 then
formspec = formspec .. "label[8.3,9.4; COMPLETE!]"
count = count + 1
else
formspec = formspec .. "label[8.3,9.4; not done]"
end
-- next level
if count==total and achievements.get(0,player_name,"level")==level then
levels[level+1].make_start_blocks(player_name)
achievements.add(0,player_name,"level")
end
if achievements.get(0,player_name,"level") > level then
local pos = levels[level+1].get_pos(player_name)
if pos and minetest.env:get_node(pos).name ~= "skyblock:level_4" then
levels[level+1].make_start_blocks(player_name)
end
end
local infotext = "LEVEL "..level.." for ".. player_name ..": ".. count .." of "..total
return formspec, infotext
end
-- reward_achievement
levels[level].reward_achievement = function(player_name,achievement)
local achievement_count = achievements.get(level,player_name,achievement)
-- dig_papyrus
if achievement == "dig_papyrus" and achievement_count == 20 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_papyrus
if achievement == "place_papyrus" and achievement_count == 20 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- dig_cactus
if achievement == "dig_cactus" and achievement_count == 15 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_cactus
if achievement == "place_cactus" and achievement_count == 15 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_fence
if achievement == "place_fence" and achievement_count == 30 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_ladder
if achievement == "place_ladder" and achievement_count == 20 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_bookshelf
if achievement == "place_bookshelf" and achievement_count == 5 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_sign_wall
if achievement == "place_sign_wall" and achievement_count == 10 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- place_torch
if achievement == "place_torch" and achievement_count == 50 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
-- dig_stone
if achievement == "dig_stone" and achievement_count == 500 then
achievements.give_reward(level,player_name,"default:mese "..math.random(1, 5))
return true
end
end
-- track placing achievements
levels[level].on_placenode = function(pos, newnode, placer, oldnode)
local player_name = placer:get_player_name()
-- place_papyrus
if newnode.name == "default:papyrus" then
achievements.add(level,player_name,"place_papyrus")
return
end
-- place_cactus
if newnode.name == "default:cactus" then
achievements.add(level,player_name,"place_cactus")
return
end
-- place_fence
if newnode.name == "default:fence" then
achievements.add(level,player_name,"place_fence")
return
end
-- place_ladder
if newnode.name == "default:ladder" then
achievements.add(level,player_name,"place_ladder")
return
end
-- place_bookshelf
if newnode.name == "default:bookshelf" then
achievements.add(level,player_name,"place_bookshelf")
return
end
-- place_sign_wall
if newnode.name == "default:sign_wall" then
achievements.add(level,player_name,"place_sign_wall")
return
end
-- place_torch
if newnode.name == "default:torch" then
achievements.add(level,player_name,"place_torch")
return
end
end
-- track digging achievements
levels[level].on_dignode = function(pos, oldnode, digger)
local player_name = digger:get_player_name()
-- dig_papyrus
if oldnode.name == "default:papyrus" then
achievements.add(level,player_name,"dig_papyrus")
return
end
-- dig_cactus
if oldnode.name == "default:cactus" then
achievements.add(level,player_name,"dig_cactus")
return
end
-- dig_stone
if oldnode.name == "default:stone" then
achievements.add(level,player_name,"dig_stone")
return
end
end
-- not used
levels[level].bucket_on_use = function(player_name, pointed_thing) end
levels[level].bucket_water_on_use = function(player_name, pointed_thing) end
levels[level].bucket_lava_on_use = function(player_name, pointed_thing) end

View File

@ -1,73 +0,0 @@
--[[
SkyBlock for MineTest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
LEVEL 4 FUNCTIONS
]]--
--
-- PUBLIC FUNCTIONS
--
local level = 4
levels[level] = {}
-- get pos
levels[level].get_pos = function(player_name)
skyblock.log("level["..level.."].get_pos() for "..player_name)
local pos = skyblock.get_spawn(player_name)
if pos==nil then return pos end
return {x=pos.x,y=pos.y+80,z=pos.z}
end
-- make start blocks
levels[level].make_start_blocks = function(player_name)
skyblock.log("level["..level.."].make_start_blocks() for "..player_name)
local pos = levels[level].get_pos(player_name)
if pos==nil then return end
-- sphere
local radius = 10
local hollow = 1
skyblock.make_sphere({x=pos.x,y=pos.y-radius,z=pos.z},radius,"default:dirt",hollow)
-- level 4
minetest.env:add_node(pos, {name="skyblock:level_4"})
end
-- update achievements
levels[level].update = function(player_name,pos)
local formspec = ""
local total = 0
local count = 0
formspec = formspec
.."size[6,4;]"
.."label[0,0;LEVEL "..level.." FOR: ".. player_name .."]"
.."label[0,1; --== THE END ==--]"
.."label[0,1.5; I hope you enjoyed your journey, and you]"
.."label[0,2.0; are welcome to stay and keep building]"
.."label[0,2.5; your new sky world.]"
local infotext = "THE END! for ".. player_name .." ... or is it ..."
return formspec, infotext
end
-- not used
levels[level].reward_achievement = function(player_name,achievement) end
levels[level].on_placenode = function(pos, newnode, placer, oldnode) end
levels[level].on_dignode = function(pos, oldnode, digger) end
levels[level].bucket_on_use = function(player_name, pointed_thing) end
levels[level].bucket_water_on_use = function(player_name, pointed_thing) end
levels[level].bucket_lava_on_use = function(player_name, pointed_thing) end

View File

@ -1,236 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
REGISTER ABM
]]--
-- sapling grows to tree
minetest.register_abm({
nodenames = "default:sapling",
interval = 30,
chance = 10,
action = function(pos)
skyblock.generate_tree(pos)
end
})
-- junglegrass and dry_shrub spawns on sand, desert_sand and dirt_with_grass
minetest.register_abm({
nodenames = {"default:sand", "default:desert_sand", "default:dirt_with_grass"},
interval = 300,
chance = 100,
action = function(pos, node)
skyblock.log("consider spawn junglegrass or dry_shrub at "..dump(pos).." on "..minetest.env:get_node(pos).name)
pos.y = pos.y+1
if minetest.env:get_node(pos).name == "air" and minetest.env:find_node_near(pos, 4, {"default:dry_shrub","default:junglegrass"})==nil then
if math.random(1,5) > 2 then
skyblock.log("spawn dry_shrub at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node(pos, {name="default:dry_shrub"})
else
skyblock.log("spawn junglegrass at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node(pos, {name="default:junglegrass"})
end
end
end
})
-- papyrus spawns on dirt_with_grass next to water_source
minetest.register_abm({
nodenames = {"default:dirt_with_grass"},
neighbors = {"default:water_source"},
interval = 300,
chance = 100,
action = function(pos, node)
skyblock.log("consider spawn papyrus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
-- check for space
for i=1,2 do
if minetest.env:get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then
return
end
end
-- spawn
skyblock.log("spawn papyrus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name="default:papyrus"})
end
})
-- papyrus grows upto 3 in height
minetest.register_abm({
nodenames = {"default:papyrus"},
interval = 100,
chance = 50,
action = function(pos, node)
skyblock.log("consider grow papyrus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
-- check for space
for i=1,2 do
if minetest.env:get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then
return
end
end
-- check height
if minetest.env:get_node({x = pos.x, y = pos.y - 3, z = pos.z}).name == "default:papyrus" then
return
end
-- grow
skyblock.log("grow papyrus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name="default:papyrus"})
end
})
-- cactus spawns on sand and desert_sand
minetest.register_abm({
nodenames = {"default:sand", "default:desert_sand"},
interval = 300,
chance = 150,
action = function(pos, node)
skyblock.log("consider spawn cactus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
-- check for space
for i=1,2 do
if minetest.env:get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then
return
end
end
-- check for nearby
if minetest.env:find_node_near(pos, 6, {"default:cactus"}) ~= nil then
return
end
-- spawn
skyblock.log("spawn cactus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name="default:cactus"})
end
})
-- cactus grows upto 4 in height
minetest.register_abm({
nodenames = {"default:cactus"},
interval = 200,
chance = 50,
action = function(pos, node)
skyblock.log("consider grow cactus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
-- check for space
for i=1,2 do
if minetest.env:get_node({x = pos.x, y = pos.y + i, z = pos.z}).name ~= "air" then
return
end
end
-- check height
if minetest.env:get_node({x = pos.x, y = pos.y - 4, z = pos.z}).name == "default:cactus" then
return
end
-- grow
skyblock.log("grow cactus at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node({x = pos.x, y = pos.y + 1, z = pos.z}, {name="default:cactus"})
end
})
-- dirt turns to dirt_with_grass if below air
minetest.register_abm({
nodenames = {"default:dirt"},
neighbors = {"air"},
interval = 50,
chance = 100,
action = function(pos)
skyblock.log("consider grow dirt_with_grass at "..dump(pos).." on "..minetest.env:get_node(pos).name)
if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
skyblock.log("grow dirt_with_grass at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(pos, {name="default:dirt_with_grass"})
end
end
})
-- dirt_with_grass turns to dirt if not below air
minetest.register_abm({
nodenames = {"default:dirt_with_grass"},
interval = 50,
chance = 300,
action = function(pos)
skyblock.log("consider grow dirt at "..dump(pos).." on "..minetest.env:get_node(pos).name)
if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
skyblock.log("grow dirt at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(pos, {name="default:dirt"})
end
end
})
-- dirt_with_grass_footsteps turns to dirt_with_grass
minetest.register_abm({
nodenames = {"default:dirt_with_grass_footsteps"},
interval = 5,
chance = 10,
action = function(pos)
skyblock.log("consider grow dirt or dirt_with_grass at "..dump(pos).." on "..minetest.env:get_node(pos).name)
if minetest.env:get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
skyblock.log("grow dirt_with_grass at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(pos, {name="default:dirt_with_grass"})
else
skyblock.log("grow dirt at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(pos, {name="default:dirt"})
end
end
})
-- lava_flowing next to water_source will turn to stone
minetest.register_abm({
nodenames = {"default:lava_flowing"},
neighbors = {"default:water_source"},
interval = 2,
chance = 1,
action = function(pos)
skyblock.log("create stone at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(pos, {name="default:stone"})
end,
})
-- lava_source next to water_flowing will turn the water_flowing to stone
-- lava_source next to water_source will turn the lava_source to stone
minetest.register_abm({
nodenames = {"default:lava_source"},
neighbors = {"default:water_source", "default:water_flowing"},
interval = 2,
chance = 1,
action = function(pos)
skyblock.log("consider create stone at "..dump(pos).." on "..minetest.env:get_node(pos).name)
local waterpos = minetest.env:find_node_near(pos,1,{"default:water_flowing"})
if waterpos==nil then
skyblock.log("create stone at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(pos, {name="default:stone"})
else
while waterpos ~=nil do
skyblock.log("create stone at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:add_node(waterpos, {name="default:stone"})
waterpos = minetest.env:find_node_near(pos,1,{"default:water_flowing"})
end
end
end,
})
-- water or lava at sealevel
if skyblock.MODE == "water" or skyblock.MODE == "lava" then
local node_name = "default:water_flowing"
local node_replace = "default:water_source"
if skyblock.MODE == "lava" then
node_name = "default:lava_flowing"
node_replace = "default:lava_source"
end
minetest.register_abm({
nodenames = {node_name},
neighbors = {"air"},
interval = 2,
chance = 10,
action = function(pos, node)
skyblock.log("consider create "..node_replace.." at "..dump(pos).." on "..minetest.env:get_node(pos).name)
if pos.y <= 2 then
skyblock.log("create "..node_replace.." at "..dump(pos).." on "..minetest.env:get_node(pos).name)
minetest.env:set_node(pos, {name=node_replace})
end
end
})
end

View File

@ -1,32 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
REGISTER ALIAS
]]--
minetest.register_alias("mapgen_air", "air")
minetest.register_alias("mapgen_stone", "air")
minetest.register_alias("mapgen_tree", "air")
minetest.register_alias("mapgen_leaves", "air")
minetest.register_alias("mapgen_apple", "air")
minetest.register_alias("mapgen_water_source", "air")
minetest.register_alias("mapgen_dirt", "air")
minetest.register_alias("mapgen_sand", "air")
minetest.register_alias("mapgen_gravel", "air")
minetest.register_alias("mapgen_clay", "air")
minetest.register_alias("mapgen_lava_source", "air")
minetest.register_alias("mapgen_cobble", "air")
minetest.register_alias("mapgen_mossycobble", "air")
minetest.register_alias("mapgen_dirt_with_grass", "air")
minetest.register_alias("mapgen_junglegrass", "air")
minetest.register_alias("mapgen_stone_with_coal", "air")
minetest.register_alias("mapgen_stone_with_iron", "air")
minetest.register_alias("mapgen_mese", "air")
minetest.register_alias("mapgen_desert_sand", "air")
minetest.register_alias("mapgen_desert_stone", "air")

View File

@ -1,155 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
REGISTER CRAFT
]]--
-- tool repair buff (20% bonus)
minetest.register_craft({
type = "toolrepair",
additional_wear = -0.20,
})
-- desert_stone
minetest.register_craft({
output = "default:desert_stone",
recipe = {
{"default:desert_sand", "default:desert_sand"},
{"default:desert_sand", "default:desert_sand"},
}
})
-- mossycobble
minetest.register_craft({
output = "default:mossycobble",
recipe = {
{"default:junglegrass"},
{"default:cobble"},
}
})
-- stone_with_coal
minetest.register_craft({
output = "default:stone_with_coal 2",
recipe = {
{"default:coal_lump"},
{"default:stone"},
}
})
-- stone_with_iron
minetest.register_craft({
output = "default:stone_with_iron 2",
recipe = {
{"default:iron_lump"},
{"default:stone"},
}
})
-- gravel
minetest.register_craft({
output = "default:gravel 4",
recipe = {
{"default:cobble"},
}
})
-- dirt
minetest.register_craft({
output = "default:dirt 2",
recipe = {
{"default:gravel"},
}
})
-- clay_lump
minetest.register_craft({
output = "default:clay_lump 4",
recipe = {
{"default:dirt"},
}
})
-- scorched_stuff
minetest.register_craft({
type = "cooking",
output = "default:scorched_stuff 4",
recipe = "default:dry_shrub",
})
-- dirt_with_grass
minetest.register_craft({
output = "default:dirt_with_grass",
recipe = {
{"default:junglegrass"},
{"default:dirt"},
}
})
-- locked_chest from chest
minetest.register_craft({
output = "default:chest_locked",
recipe = {
{"default:steel_ingot"},
{"default:chest"},
}
})
-- sapling from leaves and sticks
minetest.register_craft({
output = "default:sapling",
recipe = {
{"default:leaves", "default:leaves", "default:leaves"},
{"default:leaves", "default:leaves", "default:leaves"},
{"", "default:stick", ""},
}
})
-- recycle ignots from block
minetest.register_craft({
output = "default:steel_ingot 9",
recipe = {
{"default:steelblock"},
}
})
-- recycle sand from sandstone
minetest.register_craft({
output = "default:sand 4",
recipe = {
{"default:sandstone"},
}
})
-- recycle desert_sand from desert_stone
minetest.register_craft({
output = "default:desert_sand 4",
recipe = {
{"default:desert_stone"},
}
})
-- jungletree turns to wood
minetest.register_craft({
output = "default:wood 4",
recipe = {
{"default:jungletree"},
}
})
-- mese
minetest.register_craft({
output = "default:mese",
recipe = {
{"default:steelblock", "default:steelblock"},
{"default:steelblock", "default:steelblock"},
}
})

View File

@ -1,42 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
REGISTER MISC
]]--
-- handle new player
minetest.register_on_newplayer(function(player)
skyblock.give_inventory(player)
end)
-- handle respawn player
minetest.register_on_respawnplayer(function(player)
return skyblock.on_respawnplayer(player)
end)
-- track global node digging
minetest.register_on_dignode(function(pos, oldnode, digger)
achievements.on_dignode(pos, oldnode, digger)
end)
-- track global node placing
minetest.register_on_placenode(function(pos, newnode, placer, oldnode)
achievements.on_placenode(pos, newnode, placer, oldnode)
end)
-- register the game after the server starts
minetest.after(5, function()
-- handle globalstep
minetest.register_globalstep(function(dtime)
return skyblock.globalstep(dtime)
end)
end)

View File

@ -1,67 +0,0 @@
--[[
SkyBlock for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-skyblock
License: GPLv3
REGISTER NODES
]]--
--
-- Override Default Nodes
--
local entity
-- stone
entity = skyblock.registered("node","default:stone")
entity.drop = {
max_items = 1,
items = {
{items = {"default:desert_stone"}, rarity = 20},
{items = {"default:sandstone"}, rarity = 10},
{items = {"default:cobble"}}
}
}
minetest.register_node(":default:stone", entity)
-- trees
entity = skyblock.registered("node","default:tree")
entity.groups = {tree=1,snappy=1,choppy=2,flammable=2}
minetest.register_node(":default:tree", entity)
-- leaves
entity = skyblock.registered("node","default:leaves")
entity.drop = "default:leaves"
entity.groups = {oddly_breakable_by_hand=1, snappy=3, leafdecay=3, flammable=2}
entity.climbable = true
minetest.register_node(":default:leaves", entity)
-- sapling
entity = skyblock.registered("node","default:sapling")
entity.after_place_node = skyblock.generate_tree
minetest.register_node(":default:sapling", entity)
-- sandstone
entity = skyblock.registered("node","default:sandstone")
entity.drop = "default:sandstone"
minetest.register_node(":default:sandstone", entity)
-- bucket_empty
entity = skyblock.registered("craftitem","bucket:bucket_empty")
entity.on_use = skyblock.bucket_on_use
minetest.register_craftitem(":bucket:bucket_empty", entity)
-- bucket_water
entity = skyblock.registered("craftitem","bucket:bucket_water")
entity.on_use = skyblock.bucket_water_on_use
minetest.register_craftitem(":bucket:bucket_water", entity)
-- bucket_lava
entity = skyblock.registered("craftitem","bucket:bucket_lava")
entity.on_use = skyblock.bucket_lava_on_use
minetest.register_craftitem(":bucket:bucket_lava", entity)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

View File

@ -1,122 +0,0 @@
----------
[32x] Tronic Texture Pack
- images created by Bistromatic - http://evilmousestudios.com/tronic/
- minetest port by cHyper - http://minetest.net/forum/viewtopic.php?id=3036
----------
crack_anylength.png
default_bookshelf.png
default_brick.png
default_cactus_side.png
default_cactus_top.png
default_chest_front.png
default_chest_lock.png
default_chest_side.png
default_chest_top.png
default_clay.png
default_cobble.png
default_desert_sand.png
default_desert_stone.png
default_dirt.png
default_dry_shrub.png
default_fence.png
default_furnace_bottom.png
default_furnace_fire_bg.png
default_furnace_fire_fg.png
default_furnace_front.png
default_furnace_front_active.png
default_furnace_side.png
default_furnace_top.png
default_grass.png
default_grass_side.png
default_gravel.png
default_ladder.png
default_lava.png
default_lava_source_animated.png
default_lava_flowing_animated.png
default_leaves.png
default_mineral_coal.png
default_mineral_iron.png
default_mossycobble.png
default_papyrus.png
default_sandstone.png
default_sapling.png
default_stone.png
default_tnt_bottom.png
default_tnt_side.png
default_tnt_top.png
default_tree.png
default_tree_top.png
default_wood.png
fire_basic_flame.png
----------
faithful-minetest-pack-04-120726
- images created by Vattic - http://www.minecraftforum.net/topic/72747-faithful-32x32-pack-updategravel-planks-mods-132/
- minetest port by Calinou - http://minetest.net/forum/viewtopic.php?id=2264
----------
bucket.png
bucket_lava.png
bucket_water.png
default_apple.png
default_clay_brick.png
default_clay_lump.png
default_coal_lump.png
default_iron_lump.png
default_glass.png
default_rail.png
default_rail_crossing.png
default_rail_curved.png
default_rail_t_junction.png
default_sand.png
default_scorched_stuff.png
default_sign_wall.png
default_steel_block.png
default_steel_ingot.png
default_stick.png
default_mese.png
default_tool_mesepick.png
default_tool_steelaxe.png
default_tool_steelpick.png
default_tool_steelshovel.png
default_tool_steelsword.png
default_tool_stoneaxe.png
default_tool_stonepick.png
default_tool_stoneshovel.png
default_tool_stonesword.png
default_tool_woodaxe.png
default_tool_woodpick.png
default_tool_woodshovel.png
default_tool_woodsword.png
default_torch.png
default_torch_on_ceiling.png
default_torch_on_floor.png
default_water.png
door_wood.png
door_wood_a.png
door_wood_a_r.png
door_wood_b.png
door_wood_b_r.png
fire_basic_flame.png
player.png
player_back.png
smoke_puff.png
----------
Cisoun's Texture Pack 9.0
- images by Cisoun - http://minetest.net/forum/viewtopic.php?id=16
----------
unknown_block.png
unknown_item.png
unknown_object.png
----------
Others
----------
menubg.png - http://www.patterncooler.com/editor

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

Some files were not shown because too many files have changed in this diff Show More