remove skyblock add farming tweak item_drop
17
README.txt
|
@ -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
|
||||
|
|
|
@ -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(),
|
||||
|
|
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 19 KiB |
|
@ -1 +1,2 @@
|
|||
default
|
||||
mesecons
|
|
@ -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
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
})
|
|
@ -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
|
|
@ -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
|
||||
})
|
|
@ -1,3 +1,3 @@
|
|||
default
|
||||
bucket
|
||||
fire
|
||||
wool
|
|
@ -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"}
|
||||
}
|
||||
})
|
|
@ -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")
|
|
@ -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
|
||||
})
|
|
@ -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
|
||||
})
|
|
@ -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,
|
||||
})]]
|
After Width: | Height: | Size: 918 B |
After Width: | Height: | Size: 511 B |
After Width: | Height: | Size: 317 B |
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 428 B |
After Width: | Height: | Size: 359 B |
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 280 B |
After Width: | Height: | Size: 344 B |
After Width: | Height: | Size: 338 B |
After Width: | Height: | Size: 333 B |
After Width: | Height: | Size: 325 B |
After Width: | Height: | Size: 600 B |
After Width: | Height: | Size: 600 B |
After Width: | Height: | Size: 289 B |
After Width: | Height: | Size: 378 B |
After Width: | Height: | Size: 622 B |
After Width: | Height: | Size: 632 B |
After Width: | Height: | Size: 312 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 623 B |
After Width: | Height: | Size: 634 B |
After Width: | Height: | Size: 641 B |
After Width: | Height: | Size: 613 B |
After Width: | Height: | Size: 639 B |
After Width: | Height: | Size: 947 B |
After Width: | Height: | Size: 880 B |
After Width: | Height: | Size: 867 B |
After Width: | Height: | Size: 367 B |
After Width: | Height: | Size: 591 B |
After Width: | Height: | Size: 536 B |
After Width: | Height: | Size: 540 B |
After Width: | Height: | Size: 534 B |
After Width: | Height: | Size: 500 B |
After Width: | Height: | Size: 597 B |
After Width: | Height: | Size: 286 B |
|
@ -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
|
||||
})
|
|
@ -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
|
||||
})
|
|
@ -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 =)
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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'
|
|
@ -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()))
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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")
|
|
@ -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"},
|
||||
}
|
||||
})
|
||||
|
|
@ -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)
|
|
@ -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)
|
Before Width: | Height: | Size: 275 KiB |
Before Width: | Height: | Size: 352 KiB |
Before Width: | Height: | Size: 283 KiB |
Before Width: | Height: | Size: 147 KiB |
|
@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 400 B |
Before Width: | Height: | Size: 477 B |
Before Width: | Height: | Size: 424 B |
Before Width: | Height: | Size: 543 B |
Before Width: | Height: | Size: 377 B |
Before Width: | Height: | Size: 701 B |
Before Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 229 B |
Before Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 260 B |
Before Width: | Height: | Size: 202 B |
Before Width: | Height: | Size: 192 B |
Before Width: | Height: | Size: 360 B |
Before Width: | Height: | Size: 372 B |
Before Width: | Height: | Size: 530 B |
Before Width: | Height: | Size: 224 B |
Before Width: | Height: | Size: 407 B |
Before Width: | Height: | Size: 301 B |