Compare commits

..

4 commits
main ... main

Author SHA1 Message Date
a654e706db Poke poke 2024-12-13 11:06:03 -08:00
161f3f21e4 Split up registry.lua into smaller files, as it is getting big 2024-12-13 10:25:59 -08:00
090f81b833 Tap tap 2024-12-13 10:18:25 -08:00
f5877a23cf Blah. 2024-12-12 23:59:48 -08:00
423 changed files with 4116 additions and 1097 deletions

View file

@ -7,7 +7,7 @@
-- local S = minetest.get_translator("default")
-- -- Definitions made by this mod that other mods can use too
-- default = {}
default = {}
-- default.LIGHT_MAX = 14
-- default.get_translator = S

View file

@ -1,12 +1,95 @@
---------------------------------------------------------------------------
-- Voxelis - Voxel survival sandbox for Luanti
-- Copyright (C) 2024 Mad Star Studio LLC
--
-- 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.
--
-- You should have received a copy of the GNU General Public License along
-- with this program; if not, see <http://www.gnu.org/licenses/>.
---------------------------------------------------------------------------
-- -- Minetest Game mod: default
-- -- See README.txt for licensing and other information.
-- -- The API documentation in here was moved into game_api.txt
-- -- Load support for MT game translation.
-- local S = minetest.get_translator("default")
-- -- Definitions made by this mod that other mods can use too
--default = {}
-- default.LIGHT_MAX = 14
-- default.get_translator = S
-- -- Check for engine features required by MTG
-- -- This provides clear error behaviour when MTG is newer than the installed engine
-- -- and avoids obscure, hard to debug runtime errors.
-- -- This section should be updated before release and older checks can be dropped
-- -- when newer ones are introduced.
-- if ItemStack("").add_wear_by_uses == nil then
-- error("\nThis version of Minetest Game is incompatible with your engine version "..
-- "(which is too old). You should download a version of Minetest Game that "..
-- "matches the installed engine version.\n")
-- end
-- -- GUI related stuff
-- minetest.register_on_joinplayer(function(player)
-- -- Set formspec prepend
-- local formspec = [[
-- bgcolor[#080808BB;true]
-- listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]]
-- local name = player:get_player_name()
-- local info = minetest.get_player_information(name)
-- if info.formspec_version > 1 then
-- formspec = formspec .. "background9[5,5;1,1;gui_formbg.png;true;10]"
-- else
-- formspec = formspec .. "background[5,5;1,1;gui_formbg.png;true]"
-- end
-- player:set_formspec_prepend(formspec)
-- -- Set hotbar textures
-- player:hud_set_hotbar_image("gui_hotbar.png")
-- player:hud_set_hotbar_selected_image("gui_hotbar_selected.png")
-- end)
-- function default.get_hotbar_bg(x,y)
-- local out = ""
-- for i=0,7,1 do
-- out = out .."image["..x+i..","..y..";1,1;gui_hb_bg.png]"
-- end
-- return out
-- end
-- default.gui_survival_form = "size[8,8.5]"..
-- "list[current_player;main;0,4.25;8,1;]"..
-- "list[current_player;main;0,5.5;8,3;8]"..
-- "list[current_player;craft;1.75,0.5;3,3;]"..
-- "list[current_player;craftpreview;5.75,1.5;1,1;]"..
-- "image[4.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
-- "listring[current_player;main]"..
-- "listring[current_player;craft]"..
-- default.get_hotbar_bg(0,4.25)
-- -- Load files
-- local default_path = minetest.get_modpath("default")
--dofile(default_path.."/functions.lua")
-- dofile(default_path.."/trees.lua")
-- dofile(default_path.."/nodes.lua")
-- dofile(default_path.."/chests.lua")
-- dofile(default_path.."/furnace.lua")
-- dofile(default_path.."/torch.lua")
-- dofile(default_path.."/tools.lua")
-- dofile(default_path.."/item_entity.lua")
-- dofile(default_path.."/craftitems.lua")
-- dofile(default_path.."/crafting.lua")
-- dofile(default_path.."/mapgen.lua")
-- dofile(default_path.."/aliases.lua")
-- dofile(default_path.."/legacy.lua")
-- -- Smoke test that is run via ./util/test/run.sh
-- if minetest.settings:get_bool("minetest_game_smoke_test") then
-- minetest.after(0, function()
-- minetest.emerge_area(vector.new(0, 0, 0), vector.new(32, 32, 32))
-- local pos = vector.new(9, 9, 9)
-- local function check()
-- if minetest.get_node(pos).name ~= "ignore" then
-- minetest.request_shutdown()
-- return
-- end
-- minetest.after(0, check)
-- end
-- check()
-- end)
-- end

View file

@ -12,36 +12,56 @@
---------------------------------------------------------------------------
vox_colors = {
-- Whites and Grays
WHITE = "#FFFFFF",
CREAM = "#FFFDD0",
LIGHTGREY = "#D3D3D3",
SILVER = "#C0C0C0",
GREY = "#808080",
DARK_GRAY = "#A9A9A9",
BLACK = "#000000",
-- Reds
PINK = "#FF69B4",
FLAMINGO = "#FC8EAC",
RED = "#FF0000",
CRIMSON = "#DC143C",
DARK_RED = "#8B0000",
YELLOW = "#FFFF00",
MAROON = "#800000",
-- Oranges and Yellows
PEACH = "#FFDAB9",
GOLD = "#FFD700",
YELLOW = "#FFFF00",
ORANGE = "#FFA500",
PUMPKIN = "#FF7518",
CREAM = "#FFFDD0",
TAN = "#D2B48C",
BROWN = "#A52A2A",
DARK_BROWN = "#8B4513",
LIME = "#00FF00",
-- Greens
LIGHT_GREEN = "#90EE90",
MINT = "#98FF98",
LIME = "#00FF00",
GREEN = "#008000",
EMERALD = "#50C878",
OLIVE = "#808000",
DARK_GREEN = "#006400",
-- Blues
LIGHT_BLUE = "#ADD8E6",
CYAN = "#00FFFF",
TURQUOISE = "#40E0D0",
TEAL = "#008080",
CYAN = "#00FFFF",
BLUE = "#0000FF",
NAVY = "#000080",
MAGENTA = "#FF00FF",
VIOLET = "#EE82EE",
PURPLE = "#800080",
INDIGO = "#4B0082",
PINK = "#FF69B4",
FLAMINGO = "#FC8EAC",
-- Purples
LAVENDER = "#E6E6FA",
VIOLET = "#EE82EE",
MAGENTA = "#FF00FF",
PURPLE = "#800080",
}
vox_colors.bg_brightness = 0.8;

View file

@ -178,8 +178,8 @@ minetest.register_craftitem("vox_coloring:cleaning_solvent", {
minetest.register_craft({
output = "vox_coloring:cleaning_solvent",
recipe = {
{"vox_main:soap", "bucket:water_bucket", "vox_main:salt"},
{"vox_main:ash", "", ""},
{"vox_core:soap", "bucket:water_bucket", "vox_core:salt"},
{"vox_core:ash", "", ""},
},
replacements = {{"bucket:water_bucket", "bucket:bucket"}},
})

View file

@ -0,0 +1,836 @@
--
-- Sounds
--
function vox_core.node_sound_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "", gain = 1.0}
tbl.dug = tbl.dug or
{name = "default_dug_node", gain = 0.25}
tbl.place = tbl.place or
{name = "default_place_node_hard", gain = 1.0}
return tbl
end
function vox_core.node_sound_stone_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_hard_footstep", gain = 0.2}
tbl.dug = tbl.dug or
{name = "default_hard_footstep", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_dirt_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_dirt_footstep", gain = 0.25}
tbl.dig = tbl.dig or
{name = "default_dig_crumbly", gain = 0.4}
tbl.dug = tbl.dug or
{name = "default_dirt_footstep", gain = 1.0}
tbl.place = tbl.place or
{name = "default_place_node", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_sand_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_sand_footstep", gain = 0.05}
tbl.dug = tbl.dug or
{name = "default_sand_footstep", gain = 0.15}
tbl.place = tbl.place or
{name = "default_place_node", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_gravel_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_gravel_footstep", gain = 0.25}
tbl.dig = tbl.dig or
{name = "default_gravel_dig", gain = 0.35}
tbl.dug = tbl.dug or
{name = "default_gravel_dug", gain = 1.0}
tbl.place = tbl.place or
{name = "default_place_node", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_wood_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_wood_footstep", gain = 0.15}
tbl.dig = tbl.dig or
{name = "default_dig_choppy", gain = 0.4}
tbl.dug = tbl.dug or
{name = "default_wood_footstep", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_leaves_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_grass_footstep", gain = 0.45}
tbl.dug = tbl.dug or
{name = "default_grass_footstep", gain = 0.7}
tbl.place = tbl.place or
{name = "default_place_node", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_glass_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_glass_footstep", gain = 0.3}
tbl.dig = tbl.dig or
{name = "default_glass_footstep", gain = 0.5}
tbl.dug = tbl.dug or
{name = "default_break_glass", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_ice_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_ice_footstep", gain = 0.15}
tbl.dig = tbl.dig or
{name = "default_ice_dig", gain = 0.5}
tbl.dug = tbl.dug or
{name = "default_ice_dug", gain = 0.5}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_metal_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_metal_footstep", gain = 0.2}
tbl.dig = tbl.dig or
{name = "default_dig_metal", gain = 0.5}
tbl.dug = tbl.dug or
{name = "default_dug_metal", gain = 0.5}
tbl.place = tbl.place or
{name = "default_place_node_metal", gain = 0.5}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_water_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_water_footstep", gain = 0.2}
vox_core.node_sound_defaults(tbl)
return tbl
end
function vox_core.node_sound_snow_defaults(tbl)
tbl = tbl or {}
tbl.footstep = tbl.footstep or
{name = "default_snow_footstep", gain = 0.2}
tbl.dig = tbl.dig or
{name = "default_snow_footstep", gain = 0.3}
tbl.dug = tbl.dug or
{name = "default_snow_footstep", gain = 0.3}
tbl.place = tbl.place or
{name = "default_place_node", gain = 1.0}
vox_core.node_sound_defaults(tbl)
return tbl
end
--
-- Lavacooling
--
vox_core.cool_lava = function(pos, node)
if node.name == "vox_core:lava_source" then
minetest.set_node(pos, {name = "vox_core:obsidian"})
else -- Lava flowing
minetest.set_node(pos, {name = "vox_core:stone"})
end
minetest.sound_play("default_cool_lava",
{pos = pos, max_hear_distance = 16, gain = 0.2}, true)
end
if minetest.settings:get_bool("enable_lavacooling") ~= false then
minetest.register_abm({
label = "Lava cooling",
nodenames = {"vox_core:lava_source", "vox_core:lava_flowing"},
neighbors = {"group:cools_lava", "group:water"},
interval = 2,
chance = 2,
catch_up = false,
action = function(...)
vox_core.cool_lava(...)
end,
})
end
--
-- Optimized helper to put all items in an inventory into a drops list
--
function vox_core.get_inventory_drops(pos, inventory, drops)
local inv = minetest.get_meta(pos):get_inventory()
local n = #drops
for i = 1, inv:get_size(inventory) do
local stack = inv:get_stack(inventory, i)
if stack:get_count() > 0 then
drops[n+1] = stack:to_table()
n = n + 1
end
end
end
--
-- Papyrus and cactus growing
--
-- Wrapping the functions in ABM action is necessary to make overriding them possible
function vox_core.grow_cactus(pos, node)
if node.param2 >= 4 then
return
end
pos.y = pos.y - 1
if minetest.get_item_group(minetest.get_node(pos).name, "sand") == 0 then
return
end
pos.y = pos.y + 1
local height = 0
while node.name == "vox_core:cactus" and height < 4 do
height = height + 1
pos.y = pos.y + 1
node = minetest.get_node(pos)
end
if height == 4 or node.name ~= "air" then
return
end
if minetest.get_node_light(pos) < 13 then
return
end
minetest.set_node(pos, {name = "vox_core:cactus"})
return true
end
function vox_core.grow_papyrus(pos, node)
pos.y = pos.y - 1
local name = minetest.get_node(pos).name
if name ~= "vox_core:dirt" and
name ~= "vox_core:dirt_with_grass" and
name ~= "vox_core:dirt_with_dry_grass" and
name ~= "vox_core:dirt_with_rainforest_litter" and
name ~= "vox_core:dry_dirt" and
name ~= "vox_core:dry_dirt_with_dry_grass" then
return
end
if not minetest.find_node_near(pos, 3, {"group:water"}) then
return
end
pos.y = pos.y + 1
local height = 0
while node.name == "vox_core:papyrus" and height < 4 do
height = height + 1
pos.y = pos.y + 1
node = minetest.get_node(pos)
end
if height == 4 or node.name ~= "air" then
return
end
if minetest.get_node_light(pos) < 13 then
return
end
minetest.set_node(pos, {name = "vox_core:papyrus"})
return true
end
minetest.register_abm({
label = "Grow cactus",
nodenames = {"vox_core:cactus"},
neighbors = {"group:sand"},
interval = 12,
chance = 83,
action = function(...)
vox_core.grow_cactus(...)
end
})
minetest.register_abm({
label = "Grow papyrus",
nodenames = {"vox_core:papyrus"},
-- Grows on the dirt and surface dirt nodes of the biomes papyrus appears in,
-- including the old savanna nodes.
-- 'vox_core:dirt_with_grass' is here only because it was allowed before.
neighbors = {
"vox_core:dirt",
"vox_core:dirt_with_grass",
"vox_core:dirt_with_dry_grass",
"vox_core:dirt_with_rainforest_litter",
"vox_core:dry_dirt",
"vox_core:dry_dirt_with_dry_grass",
},
interval = 14,
chance = 71,
action = function(...)
vox_core.grow_papyrus(...)
end
})
--
-- Dig upwards
--
local in_dig_up = false
function vox_core.dig_up(pos, node, digger, max_height)
if in_dig_up then return end -- Do not recurse
if digger == nil then return end
max_height = max_height or 100
in_dig_up = true
for y = 1, max_height do
local up_pos = vector.offset(pos, 0, y, 0)
local up_node = minetest.get_node(up_pos)
if up_node.name ~= node.name then
break
end
if not minetest.node_dig(up_pos, up_node, digger) then
break
end
end
in_dig_up = false
end
-- errors are hard to handle, instead we rely on resetting this value the next step
minetest.register_globalstep(function()
in_dig_up = false
end)
--
-- Fence registration helper
--
local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
function vox_core.register_fence(name, def)
local fence_texture = "default_fence_overlay.png^" .. def.texture ..
"^default_fence_overlay.png^[makealpha:255,126,126"
-- Allow almost everything to be overridden
local default_fields = {
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
-- connect_top =
-- connect_bottom =
connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/8 },
{-1/16, -5/16, -1/2, 1/16, -3/16, -1/8 }},
connect_left = {{-1/2, 3/16, -1/16, -1/8, 5/16, 1/16},
{-1/2, -5/16, -1/16, -1/8, -3/16, 1/16}},
connect_back = {{-1/16, 3/16, 1/8, 1/16, 5/16, 1/2 },
{-1/16, -5/16, 1/8, 1/16, -3/16, 1/2 }},
connect_right = {{ 1/8, 3/16, -1/16, 1/2, 5/16, 1/16},
{ 1/8, -5/16, -1/16, 1/2, -3/16, 1/16}}
},
collision_box = {
type = "connected",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
-- connect_top =
-- connect_bottom =
connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
},
connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"},
inventory_image = fence_texture,
wield_image = fence_texture,
tiles = {def.texture},
sunlight_propagates = true,
is_ground_content = false,
groups = {},
}
for k, v in pairs(default_fields) do
if def[k] == nil then
def[k] = v
end
end
-- Always add to the fence group, even if no group provided
def.groups.fence = 1
local material = def.material
def.texture = nil
def.material = nil
minetest.register_node(name, def)
-- Register crafting recipe, trim away starting colon if any
if not material then return end
name = string.gsub(name, "^:", "")
minetest.register_craft({
output = name .. " 4",
recipe = {
{ material, 'group:stick', material },
{ material, 'group:stick', material },
}
})
end
--
-- Fence rail registration helper
--
function vox_core.register_fence_rail(name, def)
local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture ..
"^default_fence_rail_overlay.png^[makealpha:255,126,126"
-- Allow almost everything to be overridden
local default_fields = {
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "connected",
fixed = {{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16},
{-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}},
-- connect_top =
-- connect_bottom =
connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16},
{-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}},
connect_left = {{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16},
{-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}},
connect_back = {{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2 },
{-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }},
connect_right = {{ 1/16, 3/16, -1/16, 1/2, 5/16, 1/16},
{ 1/16, -5/16, -1/16, 1/2, -3/16, 1/16}}
},
collision_box = {
type = "connected",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
-- connect_top =
-- connect_bottom =
connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
},
connects_to = {"group:fence", "group:wall"},
inventory_image = fence_rail_texture,
wield_image = fence_rail_texture,
tiles = {def.texture},
sunlight_propagates = true,
is_ground_content = false,
groups = {},
}
for k, v in pairs(default_fields) do
if def[k] == nil then
def[k] = v
end
end
-- Always add to the fence group, even if no group provided
def.groups.fence = 1
local material = def.material
def.texture = nil
def.material = nil
minetest.register_node(name, def)
-- Register crafting recipe, trim away starting colon if any
if not material then return end
name = string.gsub(name, "^:", "")
minetest.register_craft({
output = name .. " 16",
recipe = {
{ material, material },
{ "", ""},
{ material, material },
}
})
end
--
-- Mese post registration helper
--
function vox_core.register_mesepost(name, def)
local post_texture = def.texture .. "^default_mese_post_light_side.png^[makealpha:0,0,0"
local post_texture_dark = def.texture .. "^default_mese_post_light_side_dark.png^[makealpha:0,0,0"
-- Allow almost everything to be overridden
local default_fields = {
wield_image = post_texture,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-2 / 16, -8 / 16, -2 / 16, 2 / 16, 8 / 16, 2 / 16},
},
},
paramtype = "light",
tiles = {def.texture, def.texture, post_texture_dark, post_texture_dark, post_texture, post_texture},
use_texture_alpha = "opaque",
light_source = vox_core.LIGHT_MAX,
sunlight_propagates = true,
is_ground_content = false,
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
sounds = vox_core.node_sound_wood_defaults(),
}
for k, v in pairs(default_fields) do
if def[k] == nil then
def[k] = v
end
end
local material = def.material
def.texture = nil
def.material = nil
minetest.register_node(name, def)
-- Register crafting recipe, trim away starting colon if any
if not material then return end
name = string.gsub(name, "^:", "")
minetest.register_craft({
output = name .. " 4",
recipe = {
{'', 'vox_core:glass', ''},
{'vox_core:mese_crystal', 'vox_core:mese_crystal', 'vox_core:mese_crystal'},
{'', material, ''},
}
})
end
--
-- Leafdecay
--
-- Prevent decay of placed leaves
vox_core.after_place_leaves = function(pos, placer, itemstack, pointed_thing)
if placer and placer:is_player() then
local node = minetest.get_node(pos)
node.param2 = 1
minetest.set_node(pos, node)
end
end
-- Leafdecay
local function leafdecay_after_destruct(pos, oldnode, def)
for _, v in pairs(minetest.find_nodes_in_area(vector.subtract(pos, def.radius),
vector.add(pos, def.radius), def.leaves)) do
local node = minetest.get_node(v)
local timer = minetest.get_node_timer(v)
if node.param2 ~= 1 and not timer:is_started() then
timer:start(math.random(20, 120) / 10)
end
end
end
local movement_gravity = tonumber(
minetest.settings:get("movement_gravity")) or 9.81
local function leafdecay_on_timer(pos, def)
if minetest.find_node_near(pos, def.radius, def.trunks) then
return false
end
local node = minetest.get_node(pos)
local drops = minetest.get_node_drops(node.name)
for _, item in ipairs(drops) do
local is_leaf
for _, v in pairs(def.leaves) do
if v == item then
is_leaf = true
end
end
if minetest.get_item_group(item, "leafdecay_drop") ~= 0 or
not is_leaf then
minetest.add_item({
x = pos.x - 0.5 + math.random(),
y = pos.y - 0.5 + math.random(),
z = pos.z - 0.5 + math.random(),
}, item)
end
end
minetest.remove_node(pos)
minetest.check_for_falling(pos)
-- spawn a few particles for the removed node
minetest.add_particlespawner({
amount = 8,
time = 0.001,
minpos = vector.subtract(pos, {x=0.5, y=0.5, z=0.5}),
maxpos = vector.add(pos, {x=0.5, y=0.5, z=0.5}),
minvel = vector.new(-0.5, -1, -0.5),
maxvel = vector.new(0.5, 0, 0.5),
minacc = vector.new(0, -movement_gravity, 0),
maxacc = vector.new(0, -movement_gravity, 0),
minsize = 0,
maxsize = 0,
node = node,
})
end
function vox_core.register_leafdecay(def)
assert(def.leaves)
assert(def.trunks)
assert(def.radius)
for _, v in pairs(def.trunks) do
minetest.override_item(v, {
after_destruct = function(pos, oldnode)
leafdecay_after_destruct(pos, oldnode, def)
end,
})
end
for _, v in pairs(def.leaves) do
minetest.override_item(v, {
on_timer = function(pos)
leafdecay_on_timer(pos, def)
end,
})
end
end
--
-- Convert vox_core:dirt to something that fits the environment
--
minetest.register_abm({
label = "Grass spread",
nodenames = {"vox_core:dirt"},
neighbors = {
"air",
"group:grass",
"group:dry_grass",
"vox_core:snow",
},
interval = 6,
chance = 50,
catch_up = false,
action = function(pos, node)
-- Check for darkness: night, shadow or under a light-blocking node
-- Returns if ignore above
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
if (minetest.get_node_light(above) or 0) < 13 then
return
end
-- Look for spreading dirt-type neighbours
local p2 = minetest.find_node_near(pos, 1, "group:spreading_dirt_type")
if p2 then
local n3 = minetest.get_node(p2)
minetest.set_node(pos, {name = n3.name})
return
end
-- Else, any seeding nodes on top?
local name = minetest.get_node(above).name
-- Snow check is cheapest, so comes first
if name == "vox_core:snow" then
minetest.set_node(pos, {name = "vox_core:dirt_with_snow"})
elseif minetest.get_item_group(name, "grass") ~= 0 then
minetest.set_node(pos, {name = "vox_core:dirt_with_grass"})
elseif minetest.get_item_group(name, "dry_grass") ~= 0 then
minetest.set_node(pos, {name = "vox_core:dirt_with_dry_grass"})
end
end
})
--
-- Grass and dry grass removed in darkness
--
minetest.register_abm({
label = "Grass covered",
nodenames = {"group:spreading_dirt_type", "vox_core:dry_dirt_with_dry_grass"},
interval = 8,
chance = 50,
catch_up = false,
action = function(pos, node)
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
local name = minetest.get_node(above).name
local nodedef = minetest.registered_nodes[name]
if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or
nodedef.paramtype == "light") and
nodedef.liquidtype == "none") then
if node.name == "vox_core:dry_dirt_with_dry_grass" then
minetest.set_node(pos, {name = "vox_core:dry_dirt"})
else
minetest.set_node(pos, {name = "vox_core:dirt"})
end
end
end
})
--
-- Moss growth on cobble near water
--
local moss_correspondences = {
["vox_core:cobble"] = "vox_core:mossycobble",
["vox_structural:slab_cobble"] = "vox_structural:slab_mossycobble",
["vox_structural:stair_cobble"] = "vox_structural:stair_mossycobble",
["vox_structural:stair_inner_cobble"] = "vox_structural:stair_inner_mossycobble",
["vox_structural:stair_outer_cobble"] = "vox_structural:stair_outer_mossycobble",
["vox_structural:cobble"] = "vox_structural:mossycobble",
}
minetest.register_abm({
label = "Moss growth",
nodenames = {"vox_core:cobble", "vox_structural:slab_cobble", "vox_structural:stair_cobble",
"vox_structural:stair_inner_cobble", "vox_structural:stair_outer_cobble",
"vox_structural:cobble"},
neighbors = {"group:water"},
interval = 16,
chance = 200,
catch_up = false,
action = function(pos, node)
node.name = moss_correspondences[node.name]
if node.name then
minetest.set_node(pos, node)
end
end
})
--
-- Register a craft to copy the metadata of items
--
function vox_core.register_craft_metadata_copy(ingredient, result)
minetest.register_craft({
type = "shapeless",
output = result,
recipe = {ingredient, result}
})
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if itemstack:get_name() ~= result then
return
end
local original
local index
for i = 1, #old_craft_grid do
if old_craft_grid[i]:get_name() == result then
original = old_craft_grid[i]
index = i
end
end
if not original then
return
end
local copymeta = original:get_meta():to_table()
itemstack:get_meta():from_table(copymeta)
-- put the book with metadata back in the craft grid
craft_inv:set_stack("craft", index, original)
end)
end
--
-- Log API / helpers
--
local log_non_player_actions = minetest.settings:get_bool("log_non_player_actions", false)
local is_pos = function(v)
return type(v) == "table" and
type(v.x) == "number" and type(v.y) == "number" and type(v.z) == "number"
end
function vox_core.log_player_action(player, ...)
local msg = player:get_player_name()
if player.is_fake_player or not player:is_player() then
if not log_non_player_actions then
return
end
msg = msg .. "(" .. (type(player.is_fake_player) == "string"
and player.is_fake_player or "*") .. ")"
end
for _, v in ipairs({...}) do
-- translate pos
local part = is_pos(v) and minetest.pos_to_string(v) or v
-- no leading spaces before punctuation marks
msg = msg .. (string.match(part, "^[;,.]") and "" or " ") .. part
end
minetest.log("action", msg)
end
local nop = function() end
function vox_core.set_inventory_action_loggers(def, name)
local on_move = def.on_metadata_inventory_move or nop
def.on_metadata_inventory_move = function(pos, from_list, from_index,
to_list, to_index, count, player)
vox_core.log_player_action(player, "moves stuff in", name, "at", pos)
return on_move(pos, from_list, from_index, to_list, to_index, count, player)
end
local on_put = def.on_metadata_inventory_put or nop
def.on_metadata_inventory_put = function(pos, listname, index, stack, player)
vox_core.log_player_action(player, "moves", stack:get_name(), stack:get_count(), "to", name, "at", pos)
return on_put(pos, listname, index, stack, player)
end
local on_take = def.on_metadata_inventory_take or nop
def.on_metadata_inventory_take = function(pos, listname, index, stack, player)
vox_core.log_player_action(player, "takes", stack:get_name(), stack:get_count(), "from", name, "at", pos)
return on_take(pos, listname, index, stack, player)
end
end
--
-- NOTICE: This method is not an official part of the API yet.
-- This method may change in future.
--
function vox_core.can_interact_with_node(player, pos)
if player and player:is_player() then
if minetest.check_player_privs(player, "protection_bypass") then
return true
end
else
return false
end
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
if not owner or owner == "" or owner == player:get_player_name() then
return true
end
-- Is player wielding the right key?
local item = player:get_wielded_item()
if minetest.get_item_group(item:get_name(), "key") == 1 then
local key_meta = item:get_meta()
if key_meta:get_string("secret") == "" then
local key_oldmeta = item:get_meta():get_string("")
if key_oldmeta == "" or not minetest.parse_json(key_oldmeta) then
return false
end
key_meta:set_string("secret", minetest.parse_json(key_oldmeta).secret)
item:set_metadata("")
end
return meta:get_string("key_lock_secret") == key_meta:get_string("secret")
end
return false
end

View file

@ -0,0 +1,232 @@
-- Gems: Diamond, Emerald, Ruby, Sapphire, Topaz, Amethyst, Opal, Onyx, Garnet, Peridot, Aquamarine, Citrine, Tourmaline, Zircon, Tanzanite, Spinel, Lapis Lazuli, Malachite, Azurite, Turquoise, Amber, Moonstone, Sunstone, Bloodstone, Agate, Jasper, Chalcedony, Chrysoprase, Carnelian, Sardonyx, Heliotrope, Alexandrite, Tiger's Eye, Serpentine, Rhodonite
core.register_node("vox_core:diamond_ore", {
description = "Diamond Ore",
tiles = {"vox_diamond_ore.png"},
groups = {cracky = 2}
})
core.register_alias("diamond_ore", "vox_core:diamond_ore")
core.register_alias("default:stone_with_diamond", "vox_core:diamond_ore")
core.register_node("vox_core:emerald_ore", {
description = "Emerald Ore",
tiles = {"vox_emerald_ore.png"},
groups = {cracky = 2}
})
core.register_alias("emerald_ore", "vox_core:emerald_ore")
core.register_alias("default:stone_with_emerald", "vox_core:emerald_ore")
core.register_node("vox_core:ruby_ore", {
description = "Ruby Ore",
tiles = {"vox_ruby_ore.png"},
groups = {cracky = 2}
})
core.register_alias("ruby_ore", "vox_core:ruby_ore")
core.register_alias("default:stone_with_ruby", "vox_core:ruby_ore")
core.register_node("vox_core:sapphire_ore", {
description = "Sapphire Ore",
tiles = {"vox_sapphire_ore.png"},
groups = {cracky = 2}
})
core.register_alias("sapphire_ore", "vox_core:sapphire_ore")
core.register_alias("default:stone_with_sapphire", "vox_core:sapphire_ore")
core.register_node("vox_core:topaz_ore", {
description = "Topaz Ore",
tiles = {"vox_topaz_ore.png"},
groups = {cracky = 2}
})
core.register_alias("topaz_ore", "vox_core:topaz_ore")
core.register_alias("default:stone_with_topaz", "vox_core:topaz_ore")
core.register_node("vox_core:amethyst_ore", {
description = "Amethyst Ore",
tiles = {"vox_amethyst_ore.png"},
groups = {cracky = 2}
})
core.register_alias("amethyst_ore", "vox_core:amethyst_ore")
core.register_alias("default:stone_with_amethyst", "vox_core:amethyst_ore")
core.register_node("vox_core:opal_ore", {
description = "Opal Ore",
tiles = {"vox_opal_ore.png"},
groups = {cracky = 2}
})
core.register_alias("opal_ore", "vox_core:opal_ore")
core.register_alias("default:stone_with_opal", "vox_core:opal_ore")
core.register_node("vox_core:onyx_ore", {
description = "Onyx Ore",
tiles = {"vox_onyx_ore.png"},
groups = {cracky = 2}
})
core.register_alias("onyx_ore", "vox_core:onyx_ore")
core.register_alias("default:stone_with_onyx", "vox_core:onyx_ore")
core.register_node("vox_core:garnet_ore", {
description = "Garnet Ore",
tiles = {"vox_garnet_ore.png"},
groups = {cracky = 2}
})
core.register_alias("garnet_ore", "vox_core:garnet_ore")
core.register_alias("default:stone_with_garnet", "vox_core:garnet_ore")
core.register_node("vox_core:peridot_ore", {
description = "Peridot Ore",
tiles = {"vox_peridot_ore.png"},
groups = {cracky = 2}
})
core.register_alias("peridot_ore", "vox_core:peridot_ore")
core.register_alias("default:stone_with_peridot", "vox_core:peridot_ore")
core.register_node("vox_core:aquamarine_ore", {
description = "Aquamarine Ore",
tiles = {"vox_aquamarine_ore.png"},
groups = {cracky = 2}
})
core.register_alias("aquamarine_ore", "vox_core:aquamarine_ore")
core.register_alias("default:stone_with_aquamarine", "vox_core:aquamarine_ore")
core.register_node("vox_core:citrine_ore", {
description = "Citrine Ore",
tiles = {"vox_citrine_ore.png"},
groups = {cracky = 2}
})
core.register_alias("citrine_ore", "vox_core:citrine_ore")
core.register_alias("default:stone_with_citrine", "vox_core:citrine_ore")
core.register_node("vox_core:tourmaline_ore", {
description = "Tourmaline Ore",
tiles = {"vox_tourmaline_ore.png"},
groups = {cracky = 2}
})
core.register_alias("tourmaline_ore", "vox_core:tourmaline_ore")
core.register_alias("default:stone_with_tourmaline", "vox_core:tourmaline_ore")
core.register_node("vox_core:zircon_ore", {
description = "Zircon Ore",
tiles = {"vox_zircon_ore.png"},
groups = {cracky = 2}
})
core.register_alias("zircon_ore", "vox_core:zircon_ore")
core.register_alias("default:stone_with_zircon", "vox_core:zircon_ore")
core.register_node("vox_core:tanzanite_ore", {
description = "Tanzanite Ore",
tiles = {"vox_tanzanite_ore.png"},
groups = {cracky = 2}
})
core.register_alias("tanzanite_ore", "vox_core:tanzanite_ore")
core.register_alias("default:stone_with_tanzanite", "vox_core:tanzanite_ore")
core.register_node("vox_core:spinel_ore", {
description = "Spinel Ore",
tiles = {"vox_spinel_ore.png"},
groups = {cracky = 2}
})
core.register_alias("spinel_ore", "vox_core:spinel_ore")
core.register_alias("default:stone_with_spinel", "vox_core:spinel_ore")
core.register_node("vox_core:lapis_lazuli_ore", {
description = "Lapis Lazuli Ore",
tiles = {"vox_lapis_lazuli_ore.png"},
groups = {cracky = 2}
})
core.register_alias("lapis_lazuli_ore", "vox_core:lapis_lazuli_ore")
core.register_alias("default:stone_with_lapis_lazuli", "vox_core:lapis_lazuli_ore")
core.register_node("vox_core:malachite_ore", {
description = "Malachite Ore",
tiles = {"vox_malachite_ore.png"},
groups = {cracky = 2}
})
core.register_alias("malachite_ore", "vox_core:malachite_ore")
core.register_alias("default:stone_with_malachite", "vox_core:malachite_ore")
core.register_node("vox_core:azurite_ore", {
description = "Azurite Ore",
tiles = {"vox_azurite_ore.png"},
groups = {cracky = 2}
})
core.register_alias("azurite_ore", "vox_core:azurite_ore")
core.register_alias("default:stone_with_azurite", "vox_core:azurite_ore")
core.register_node("vox_core:turquoise_ore", {
description = "Turquoise Ore",
tiles = {"vox_turquoise_ore.png"},
groups = {cracky = 2}
})
core.register_alias("turquoise_ore", "vox_core:turquoise_ore")
core.register_alias("default:stone_with_turquoise", "vox_core:turquoise_ore")
core.register_node("vox_core:amber_ore", {
description = "Amber Ore",
tiles = {"vox_amber_ore.png"},
groups = {cracky = 2}
})
core.register_alias("amber_ore", "vox_core:amber_ore")
core.register_alias("default:stone_with_amber", "vox_core:amber_ore")
core.register_node("vox_core:moonstone_ore", {
description = "Moonstone Ore",
tiles = {"vox_moonstone_ore.png"},
groups = {cracky = 2}
})
core.register_alias("moonstone_ore", "vox_core:moonstone_ore")
core.register_alias("default:stone_with_moonstone", "vox_core:moonstone_ore")
core.register_node("vox_core:sunstone_ore", {
description = "Sunstone Ore",
tiles = {"vox_sunstone_ore.png"},
groups = {cracky = 2}
})
core.register_alias("sunstone_ore", "vox_core:sunstone_ore")
core.register_alias("default:stone_with_sunstone", "vox_core:sunstone_ore")
core.register_node("vox_core:bloodstone_ore", {
description = "Bloodstone Ore",
tiles = {"vox_bloodstone_ore.png"},
groups = {cracky = 2}
})
core.register_alias("bloodstone_ore", "vox_core:bloodstone_ore")
core.register_alias("default:stone_with_bloodstone", "vox_core:bloodstone_ore")
core.register_node("vox_core:agate_ore", {
description = "Agate Ore",
tiles = {"vox_agate_ore.png"},
groups = {cracky = 2}
})
core.register_alias("agate_ore", "vox_core:agate_ore")
core.register_alias("default:stone_with_agate", "vox_core:agate_ore")
core.register_node("vox_core:jasper_ore", {
description = "Jasper Ore",
tiles = {"vox_jasper_ore.png"},
groups = {cracky = 2}
})
core.register_alias("jasper_ore", "vox_core:jasper_ore")
core.register_alias("default:stone_with_jasper", "vox_core:jasper_ore")
core.register_node("vox_core:chalcedony_ore", {
description = "Chalcedony Ore",
tiles = {"vox_chalcedony_ore.png"},
groups = {cracky = 2}
})
core.register_alias("chalcedony_ore", "vox_core:chalcedony_ore")
core.register_alias("default:stone_with_chalcedony", "vox_core:chalcedony_ore")
core.register_node("vox_core:chrysoprase_ore", {
description = "Chrysoprase Ore",
tiles = {"vox_chrysoprase_ore.png"},
groups = {cracky = 2}
})
core.register_alias("chrysoprase_ore", "vox_core:chrysoprase_ore")
core.register_alias("default:stone_with_chrysoprase", "vox_core:chrysoprase_ore")
core.register_node("vox_core:carnelian_ore", {
description = "Carnelian Ore",
tiles = {"vox_carnelian_ore.png"},
groups = {cracky = 2}
})
core.register_alias("carnelian_ore", "vox_core:carnelian_ore")
core.register_alias("default:stone_with_carnelian", "vox_core:carnelian_ore")

View file

@ -11,33 +11,45 @@
-- with this program; if not, see <http://www.gnu.org/licenses/>.
---------------------------------------------------------------------------
vox_core = {}
-- Load from minerals.lua
dofile(core.get_modpath("vox_main").."/minerals.lua")
dofile(core.get_modpath("vox_core").."/minerals.lua")
-- Load from ores.lua
dofile(core.get_modpath("vox_main").."/ores.lua")
dofile(core.get_modpath("vox_core").."/ores.lua")
-- Load from gems.lua
dofile(core.get_modpath("vox_main").."/gems.lua")
dofile(core.get_modpath("vox_core").."/gems.lua")
-- Load from liquids.lua
dofile(core.get_modpath("vox_main").."/liquids.lua")
dofile(core.get_modpath("vox_core").."/liquids.lua")
-- Load from trees.lua
dofile(core.get_modpath("vox_core").."/trees.lua")
-- Load from plants.lua
dofile(core.get_modpath("vox_core").."/plants.lua")
-- Load from ocean.lua
dofile(core.get_modpath("vox_main").."/ocean.lua")
dofile(core.get_modpath("vox_core").."/ocean.lua")
-- Load from sky_island.lua
dofile(core.get_modpath("vox_main").."/sky_island.lua")
dofile(core.get_modpath("vox_core").."/sky_island.lua")
-- Load from mobdrops.lua
dofile(minetest.get_modpath("vox_main").."/mobdrops.lua")
dofile(minetest.get_modpath("vox_core").."/mobdrops.lua")
-- Load from mats.lua
dofile(minetest.get_modpath("vox_main").."/mats.lua")
dofile(minetest.get_modpath("vox_core").."/mats.lua")
-- Load from functions.lua
-- This is copy/paste from 'default' mod and we're using it temporarily(?)
--dofile(minetest.get_modpath("vox_core").."/functions.lua")
-- Glowing Moss
core.register_node("vox_main:glowing_moss", {
core.register_node("vox_core:glowing_moss", {
description = "Glowing Moss",
tiles = {"vox_glowing_moss.png"},
light_source = 8,
groups = {crumbly = 1}
})
core.register_alias("glowing_moss", "vox_main:glowing_moss")
core.register_alias("glowing_moss", "vox_core:glowing_moss")
-- ---------------------------- Dyeable Nodes -------------------------- --

View file

@ -0,0 +1,794 @@
-- -------------------------------------------------------------------------- --
-- Liquids --
-- -------------------------------------------------------------------------- --
-- Water
minetest.register_node("vox_core:water_source", {
description = ("Water Source"),
drawtype = "liquid",
waving = 3,
tiles = {
{
name = "default_water_source_animated.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0,
},
},
{
name = "default_water_source_animated.png",
backface_culling = true,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0,
},
},
},
use_texture_alpha = "blend",
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_flowing = "vox_core:water_flowing",
liquid_alternative_source = "vox_core:water_source",
liquid_viscosity = 1,
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
groups = {water = 3, liquid = 3, cools_lava = 1},
})
-- Flowing Water
minetest.register_node("vox_core:water_flowing", {
description = ("Flowing Water"),
drawtype = "flowingliquid",
waving = 3,
tiles = {"default_water.png"},
special_tiles = {
{
name = "default_water_flowing_animated.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.5,
},
},
{
name = "default_water_flowing_animated.png",
backface_culling = true,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.5,
},
},
},
use_texture_alpha = "blend",
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:water_flowing",
liquid_alternative_source = "vox_core:water_source",
liquid_viscosity = 1,
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
groups = {water = 3, liquid = 3, not_in_creative_inventory = 1, cools_lava = 1},
})
-- River Water
core.register_node("vox_core:river_water_source", {
description = "River Water Source",
drawtype = "liquid",
tiles = {
{
name = "default_river_water_source_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
special_tiles = {
{
name = "default_river_water_source_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_flowing = "vox_core:river_water_flowing",
liquid_alternative_source = "vox_core:river_water_source",
liquid_viscosity = 1,
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
groups = {water = 3, liquid = 3, puts_out_fire = 1}
})
-- Flowing River Water
core.register_node("vox_core:river_water_flowing", {
description = "Flowing River Water",
drawtype = "flowingliquid",
tiles = {"default_river_water_flowing_animated.png"},
special_tiles = {
{
name = "default_river_water_flowing_animated.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:river_water_flowing",
liquid_alternative_source = "vox_core:river_water_source",
liquid_viscosity = 1,
post_effect_color = {a = 103, r = 30, g = 60, b = 90},
groups = {water = 3, liquid = 3, puts_out_fire = 1}
})
-- Lava
core.register_node("vox_core:lava_source", {
description = "Lava Source",
drawtype = "liquid",
tiles = {
{
name = "default_lava_source_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
special_tiles = {
{
name = "default_lava_source_animated.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:lava_flowing",
liquid_alternative_source = "vox_core:lava_source",
liquid_viscosity = 7,
post_effect_color = {a = 240, r = 255, g = 64, b = 0},
groups = {lava = 3, liquid = 3, hot = 3, igniter = 1}
})
-- Flowing Lava
core.register_node("vox_core:lava_flowing", {
description = "Flowing Lava",
drawtype = "flowingliquid",
tiles = {"default_lava_flowing_animated.png"},
special_tiles = {
{
name = "default_lava_flowing_animated.png",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:lava_flowing",
liquid_alternative_source = "vox_core:lava_source",
liquid_viscosity = 7,
post_effect_color = {a = 240, r = 255, g = 64, b = 0},
groups = {lava = 3, liquid = 3, hot = 3, igniter = 1}
})
-- Oil
core.register_node("vox_core:oil_source", {
description = "Oil Source",
drawtype = "liquid",
tiles = {
{
name = "default_water_source_animated.png^[colorize:black:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:black:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:oil_flowing",
liquid_alternative_source = "vox_core:oil_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 0, b = 0},
groups = {oil = 3, liquid = 3, igniter = 1}
})
-- Flowing Oil
core.register_node("vox_core:oil_flowing", {
description = "Flowing Oil",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:black:200"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:black:200",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:oil_flowing",
liquid_alternative_source = "vox_core:oil_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 0, b = 0},
groups = {oil = 3, liquid = 3, igniter = 1}
})
-- Acid
core.register_node("vox_core:acid_source", {
description = "Acid Source",
drawtype = "liquid",
tiles = {
{
name = "default_water_source_animated.png^[colorize:green:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:green:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:acid_flowing",
liquid_alternative_source = "vox_core:acid_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {acid = 3, liquid = 3, igniter = 1}
})
-- Flowing Acid
core.register_node("vox_core:acid_flowing", {
description = "Flowing Acid",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:green:200"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:green:200",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:acid_flowing",
liquid_alternative_source = "vox_core:acid_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {acid = 3, liquid = 3, igniter = 1}
})
-- Slime
core.register_node("vox_core:slime_source", {
description = "Slime Source",
drawtype = "liquid",
tiles = {
{
name = "default_water_source_animated.png^[colorize:lime:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:lime:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:slime_flowing",
liquid_alternative_source = "vox_core:slime_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {slime = 3, liquid = 3, igniter = 1}
})
-- Flowing Slime
core.register_node("vox_core:slime_flowing", {
description = "Flowing Slime",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:lime:200"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:lime:200",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:slime_flowing",
liquid_alternative_source = "vox_core:slime_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {slime = 3, liquid = 3, igniter = 1}
})
-- Sewage
core.register_node("vox_core:sewage_source", {
description = "Sewage Source",
drawtype = "liquid",
tiles = {
{
name = "default_water_source_animated.png^[colorize:brown:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:brown:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:sewage_flowing",
liquid_alternative_source = "vox_core:sewage_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {sewage = 3, liquid = 3, igniter = 1}
})
-- Flowing Sewage
core.register_node("vox_core:sewage_flowing", {
description = "Flowing Sewage",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:#4B5320:150"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:#4B5320:150",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:sewage_flowing",
liquid_alternative_source = "vox_core:sewage_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {sewage = 3, liquid = 3, igniter = 1}
})
-- Tar
core.register_node("vox_core:tar_source", {
description = "Tar Source",
drawtype = "liquid",
tiles = {"default_water_source_animated.png^[colorize:#2F4F4F:200"},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:#2F4F4F:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:tar_flowing",
liquid_alternative_source = "vox_core:tar_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 0, b = 0},
groups = {tar = 3, liquid = 3, igniter = 1}
})
-- Flowing Tar
core.register_node("vox_core:tar_flowing", {
description = "Flowing Tar",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:#2F4F4F:200"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:#2F4F4F:200",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:tar_flowing",
liquid_alternative_source = "vox_core:tar_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 0, b = 0},
groups = {tar = 3, liquid = 3, igniter = 1}
})
-- Oil
core.register_node("vox_core:oil_source", {
description = "Oil Source",
drawtype = "liquid",
tiles = {"default_water_source_animated.png^[colorize:#000000:200"},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:#000000:200",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:oil_flowing",
liquid_alternative_source = "vox_core:oil_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 0, b = 0},
groups = {oil = 3, liquid = 3, igniter = 1}
})
-- Flowing Oil
core.register_node("vox_core:oil_flowing", {
description = "Flowing Oil",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:#000000:200"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:#000000:200",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:oil_flowing",
liquid_alternative_source = "vox_core:oil_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 0, b = 0},
groups = {oil = 3, liquid = 3, igniter = 1}
})
-- Acid
core.register_node("vox_core:acid_source", {
description = "Acid Source",
drawtype = "liquid",
tiles = {"default_water_source_animated.png^[colorize:#00FF00:150"},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:#00FF00:150",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:acid_flowing",
liquid_alternative_source = "vox_core:acid_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {acid = 3, liquid = 3, igniter = 1}
})
-- Flowing Acid
core.register_node("vox_core:acid_flowing", {
description = "Flowing Acid",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:#00FF00:150"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:#00FF00:150",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:acid_flowing",
liquid_alternative_source = "vox_core:acid_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {acid = 3, liquid = 3, igniter = 1}
})
-- Slime
core.register_node("vox_core:slime_source", {
description = "Slime Source",
drawtype = "liquid",
tiles = {"default_water_source_animated.png^[colorize:#00FF00:100"},
special_tiles = {
{
name = "default_water_source_animated.png^[colorize:#00FF00:100",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0
}
}
},
alpha = 160,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "source",
liquid_alternative_flowing = "vox_core:slime_flowing",
liquid_alternative_source = "vox_core:slime_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {slime = 3, liquid = 3, igniter = 1}
})
-- Flowing Slime
core.register_node("vox_core:slime_flowing", {
description = "Flowing Slime",
drawtype = "flowingliquid",
tiles = {"default_water_flowing_animated.png^[colorize:#00FF00:100"},
special_tiles = {
{
name = "default_water_flowing_animated.png^[colorize:#00FF00:100",
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.8
}
}
},
alpha = 160,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
drop = "",
liquidtype = "flowing",
liquid_alternative_flowing = "vox_core:slime_flowing",
liquid_alternative_source = "vox_core:slime_source",
liquid_viscosity = 1,
post_effect_color = {a = 240, r = 0, g = 255, b = 0},
groups = {slime = 3, liquid = 3, igniter = 1}
})

View file

@ -1,37 +1,37 @@
-- Ash
minetest.register_craftitem("vox_main:ash", {
minetest.register_craftitem("vox_core:ash", {
description = "Ash",
inventory_image = "ash.png",
groups = {crumbly = 3},
})
-- Salt
minetest.register_craftitem("vox_main:salt", {
minetest.register_craftitem("vox_core:salt", {
description = "Salt",
inventory_image = "salt.png",
})
-- Lye
minetest.register_craftitem("vox_main:lye", {
minetest.register_craftitem("vox_core:lye", {
description = "Lye",
inventory_image = "lye.png",
})
minetest.register_craft({
output = "vox_main:lye",
output = "vox_core:lye",
recipe = {
{"vox_main:ash", "bucket:water_bucket"},
{"vox_core:ash", "bucket:water_bucket"},
},
replacements = {{"bucket:water_bucket", "bucket:bucket"}},
})
-- Soap
minetest.register_craftitem("vox_main:soap", {
minetest.register_craftitem("vox_core:soap", {
description = "Soap",
inventory_image = "soap.png",
})
minetest.register_craft({
output = "vox_main:soap",
output = "vox_core:soap",
recipe = {
{"vox_mobdrops:fat", "vox_main:lye", "vox_main:salt"},
{"vox_mobdrops:fat", "vox_core:lye", "vox_core:salt"},
},
})

View file

@ -0,0 +1,574 @@
--[[
These are temporarily using Minetest Game assets for the time being.
Stone
-----
(1. Material 2. Cobble variant 3. Brick variant 4. Modified forms)
default:stone
default:cobble
default:stonebrick
default:stone_block
default:mossycobble
default:desert_stone
default:desert_cobble
default:desert_stonebrick
default:desert_stone_block
default:sandstone
default:sandstonebrick
default:sandstone_block
default:desert_sandstone
default:desert_sandstone_brick
default:desert_sandstone_block
default:silver_sandstone
default:silver_sandstone_brick
default:silver_sandstone_block
default:obsidian
default:obsidianbrick
default:obsidian_block
Soft / Non-Stone
----------------
(1. Material 2. Modified forms)
default:dirt
default:dirt_with_grass
default:dirt_with_grass_footsteps
default:dirt_with_dry_grass
default:dirt_with_snow
default:dirt_with_rainforest_litter
default:dirt_with_coniferous_litter
default:dry_dirt
default:dry_dirt_with_dry_grass
default:permafrost
default:permafrost_with_stones
default:permafrost_with_moss
default:sand
default:desert_sand
default:silver_sand
default:gravel
default:clay
default:snow
default:snowblock
default:ice
default:cave_ice
]] --
-- Bedrock
core.register_node("vox_core:bedrock", {
description = "Bedrock",
tiles = {"default_bedrock.png"},
groups = {cracky = 1}
})
core.register_alias("bedrock", "vox_core:bedrock")
core.register_alias("default:bedrock", "vox_core:bedrock")
-- Dirt
core.register_node("vox_core:dirt", {
description = "Dirt",
tiles = {"vox_dirt.png"},
groups = {crumbly = 3, soil = 1},
--sounds = node_sound_dirt_defaults(),
})
core.register_alias("dirt", "vox_core:dirt")
core.register_alias("default:dirt", "vox_core:dirt")
-- Dirt with Grass
core.register_node("vox_core:dirt_with_grass", {
description = "Dirt with Grass",
tiles = {"default_grass.png", "vox_dirt.png",
{name = "vox_dirt.png^default_grass_side.png",
tileable_vertical = false}},
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
drop = "vox_core:dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_grass_footstep", gain = 0.25},
--}),
})
core.register_node("vox_core:dirt_with_grass_footsteps", {
description = "Dirt with Grass and Footsteps",
tiles = {"default_grass.png^default_footprint.png", "vox_dirt.png",
{name = "vox_dirt.png^default_grass_side.png",
tileable_vertical = false}},
groups = {crumbly = 3, soil = 1, not_in_creative_inventory = 1},
drop = "vox_core:dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_grass_footstep", gain = 0.25},
--}),
})
core.register_node("vox_core:dirt_with_dry_grass", {
description = "Dirt with Savanna Grass",
tiles = {"default_dry_grass.png",
"vox_dirt.png",
{name = "vox_dirt.png^default_dry_grass_side.png",
tileable_vertical = false}},
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
drop = "vox_core:dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_grass_footstep", gain = 0.4},
--}),
})
core.register_node("vox_core:dirt_with_snow", {
description = "Dirt with Snow",
tiles = {"default_snow.png", "vox_dirt.png",
{name = "vox_dirt.png^default_snow_side.png",
tileable_vertical = false}},
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1, snowy = 1},
drop = "vox_core:dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_snow_footstep", gain = 0.2},
--}),
})
core.register_node("vox_core:dirt_with_rainforest_litter", {
description = "Dirt with Rainforest Litter",
tiles = {
"default_rainforest_litter.png",
"vox_dirt.png",
{name = "vox_dirt.png^default_rainforest_litter_side.png",
tileable_vertical = false}
},
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
drop = "vox_core:dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_grass_footstep", gain = 0.4},
--}),
})
core.register_node("vox_core:dirt_with_coniferous_litter", {
description = "Dirt with Coniferous Litter",
tiles = {
"default_coniferous_litter.png",
"vox_dirt.png",
{name = "vox_dirt.png^default_coniferous_litter_side.png",
tileable_vertical = false}
},
groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1},
drop = "vox_core:dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_grass_footstep", gain = 0.4},
--}),
})
core.register_node("vox_core:dry_dirt", {
description = "Savanna Dirt",
tiles = {"default_dry_dirt.png"},
groups = {crumbly = 3, soil = 1},
--sounds = vox_core.node_sound_dirt_defaults(),
})
core.register_node("vox_core:dry_dirt_with_dry_grass", {
description = "Savanna Dirt with Savanna Grass",
tiles = {"default_dry_grass.png", "default_dry_dirt.png",
{name = "default_dry_dirt.png^default_dry_grass_side.png",
tileable_vertical = false}},
groups = {crumbly = 3, soil = 1},
drop = "vox_core:dry_dirt",
--sounds = vox_core.node_sound_dirt_defaults({
-- footstep = {name = "default_grass_footstep", gain = 0.4},
--}),
})
-- Snow
core.register_node("vox_core:snow", {
description = "Snow",
tiles = {"default_snow.png"},
groups = {crumbly = 3}
})
core.register_alias("snow", "vox_core:snow")
core.register_alias("default:snow", "vox_core:snow")
-- Packed Snow
core.register_node("vox_core:packed_snow", {
description = "Packed Snow",
tiles = {"vox_packed_snow.png"},
groups = {crumbly = 2}
})
core.register_alias("packed_snow", "vox_core:packed_snow")
-- Ice
core.register_node("vox_core:ice", {
description = "Ice",
tiles = {"default_ice.png"},
groups = {crumbly = 3}
})
core.register_alias("ice", "vox_core:ice")
core.register_alias("default:ice", "vox_core:ice")
-- Permafrost
core.register_node("vox_core:permafrost", {
description = "Permafrost",
tiles = {"vox_permafrost.png"},
groups = {cracky = 3},
--sounds = vox_core.node_sound_dirt_defaults(),
})
core.register_alias("permafrost", "vox_core:permafrost")
-- Stone
core.register_node("vox_core:stone", {
description = "Stone",
tiles = {"default_stone.png"},
groups = {cracky = 3, stone = 1},
drop = "vox_core:cobble",
legacy_mineral = true,
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("stone", "vox_core:stone")
core.register_alias("mapgen_stone", "vox_core:stone")
-- core.register_alias("default:stone", "vox_core:stone")
-- Cobblestone
core.register_node("vox_core:cobblestone", {
description = "Cobblestone",
tiles = {"default_cobble.png"},
is_ground_content = false,
groups = {cracky = 3, stone = 2},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("cobblestone", "vox_core:cobblestone")
core.register_alias("default:cobble", "vox_core:cobblestone")
-- Mossy Cobble
core.register_node("vox_core:mossycobble", {
description = "Mossy Cobble",
tiles = {"default_mossycobble.png"},
is_ground_content = false,
groups = {cracky = 3, stone = 1},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("mossycobble", "vox_core:mossycobble")
core.register_alias("default:mossycobble", "vox_core:mossycobble")
-- Stone Block
core.register_node("vox_core:stone_block", {
description = "Stone Block",
tiles = {"default_stone_block.png"},
groups = {cracky = 2, stone = 1},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("stone_block", "vox_core:stone_block")
core.register_alias("default:stone_block", "vox_core:stone_block")
-- Stone Brick
core.register_node("vox_core:stone_brick", {
description = "Stone Brick",
tiles = {"default_stone_brick.png"},
groups = {cracky = 2, stone = 1},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("stone_brick", "vox_core:stone_brick")
core.register_alias("default:stonebrick", "vox_core:stone_brick")
-- Bluestone
core.register_node("vox_core:bluestone", {
description = "Bluestone",
tiles = {"vox_bluestone.png"},
groups = {cracky = 2}
})
core.register_alias("bluestone", "vox_core:bluestone")
-- Sand
-- (I don't like sand. It's coarse and rough and irritating and it gets everywhere.)
core.register_node("vox_core:sand", {
description = "Sand",
tiles = {"default_sand.png"},
groups = {crumbly = 3, falling_node = 1, sand = 1},
--sounds = vox_core.node_sound_sand_defaults(),
})
core.register_alias("sand", "vox_core:sand")
core.register_alias("default:sand", "vox_core:sand")
-- Desert Stone
core.register_node("vox_core:desert_stone", {
description = "Desert Stone",
tiles = {"default_desert_stone.png"},
groups = {cracky = 2}
})
core.register_alias("desert_stone", "vox_core:desert_stone")
core.register_alias("default:desert_stone", "vox_core:desert_stone")
-- Desert Sand
core.register_node("vox_core:desert_sand", {
description = "Desert Sand",
tiles = {"default_desert_sand.png"},
groups = {crumbly = 3}
})
core.register_alias("desert_sand", "vox_core:desert_sand")
core.register_alias("default:desert_sand", "vox_core:desert_sand")
-- Sulfur Crust
core.register_node("vox_core:sulfur_crust", {
description = "Sulfur Crust",
tiles = {"vox_sulfur_crust.png"},
groups = {crumbly = 3}
})
core.register_alias("sulfur_crust", "vox_core:sulfur_crust")
-- Ash
core.register_node("vox_core:ash_block", {
description = "Ash Block",
tiles = {"vox_ash_block.png"},
groups = {crumbly = 3},
drop = "vox_mats:ash", -- Drops ash when broken
})
-- Gravel
core.register_node("vox_core:gravel", {
description = "Gravel",
tiles = {"default_gravel.png"},
groups = {crumbly = 2, falling_node = 1},
--sounds = vox_core.node_sound_gravel_defaults(),
drop = {
max_items = 1,
items = {
{items = {"vox:main:flint"}, rarity = 16},
{items = {"vox:main:gravel"}}
}
}
})
core.register_alias("gravel", "vox_core:gravel")
core.register_alias("default:gravel", "vox_core:gravel")
-- Sandstone
core.register_node("vox_core:sandstone", {
description = "Sandstone",
tiles = {"vox_sandstone.png"},
groups = {crumbly = 1, cracky = 3},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("sandstone", "vox_core:sandstone")
core.register_alias("default:sandstone", "vox_core:sandstone")
-- Sandstone Brick
core.register_node("vox_core:sandstone_brick", {
description = "Sandstone Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_sandstone_brick.png"},
is_ground_content = false,
groups = {cracky = 2},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("sandstone_brick", "vox_core:sandstone_brick")
core.register_alias("default:sandstonebrick", "vox_core:sandstone_brick")
-- Sandstone Block
core.register_node("vox_core:sandstone_block", {
description = "Sandstone Block",
tiles = {"default_sandstone_block.png"},
is_ground_content = false,
groups = {cracky = 2},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("sandstone_block", "vox_core:sandstone_block")
core.register_alias("default:sandstone_block", "vox_core:sandstone_block")
-- Desert Sandstone
core.register_node("vox_core:desert_sandstone", {
description = "Desert Sandstone",
tiles = {"default_desert_sandstone.png"},
groups = {crumbly = 1, cracky = 3},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("desert_sandstone", "vox_core:desert_sandstone")
core.register_alias("default:desert_sandstone", "vox_core:desert_sandstone")
-- Desert Sandstone Brick
core.register_node("vox_core:desert_sandstone_brick", {
description = "Desert Sandstone Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_desert_sandstone_brick.png"},
is_ground_content = false,
groups = {cracky = 2},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("desert_sandstone_brick", "vox_core:desert_sandstone_brick")
core.register_alias("default:desert_sandstone_brick", "vox_core:desert_sandstone_brick")
-- Desert Sandstone Block
core.register_node("vox_core:desert_sandstone_block", {
description = "Desert Sandstone Block",
tiles = {"default_desert_sandstone_block.png"},
is_ground_content = false,
groups = {cracky = 2},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("desert_sandstone_block", "vox_core:desert_sandstone_block")
core.register_alias("default:desert_sandstone_block", "vox_core:desert_sandstone_block")
-- Silver Sandstone
core.register_node("vox_core:silver_sandstone", {
description = "Silver Sandstone",
tiles = {"default_silver_sandstone.png"},
groups = {crumbly = 1, cracky = 3},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("silver_sandstone", "vox_core:silver_sandstone")
core.register_alias("default:silver_sandstone", "vox_core:silver_sandstone")
-- Silver Sandstone Brick
core.register_node("vox_core:silver_sandstone_brick", {
description = "Silver Sandstone Brick",
tiles = {"default_silver_sandstone_brick.png"},
is_ground_content = false,
groups = {cracky = 2},
--sounds = vox_core.node_sound_stone_defaults(),
})
core.register_alias("silver_sandstone_brick", "vox_core:silver_sandstone_brick")
core.register_alias("default:silver_sandstone_brick", "vox_core:silver_sandstone_brick")
-- Clay
core.register_node("vox_core:clay", {
description = "Clay",
tiles = {"default_clay.png"},
groups = {crumbly = 3}
})
core.register_alias("clay", "vox_core:clay")
core.register_alias("default:clay", "vox_core:clay")
-- Hardened Clay
core.register_node("vox_core:hardened_clay", {
description = "Hardened Clay",
tiles = {"vox_hardened_clay.png"},
groups = {cracky = 2}
})
core.register_alias("hardened_clay", "vox_core:hardened_clay")
core.register_alias("default:hardened_clay", "vox_core:hardened_clay")
-- Mud
core.register_node("vox_core:mud", {
description = "Mud",
tiles = {"vox_mud.png"},
groups = {crumbly = 3}
})
core.register_alias("mud", "vox_core:mud")
-- Salt Crystal
core.register_node("vox_core:salt_crystal", {
description = "Salt Crystal",
tiles = {"vox_salt_crystal.png"},
groups = {cracky = 2}
})
core.register_alias("salt_crystal", "vox_core:salt_crystal")
-- Volcanic Rock
core.register_node("vox_core:volcanic_rock", {
description = "Volcanic Rock",
tiles = {"vox_volcanic_rock.png"},
groups = {cracky = 3}
})
core.register_alias("volcanic_rock", "vox_core:volcanic_rock")
-- EVEN MORE ROCKS!!!
-- Granite
core.register_node("vox_core:granite", {
description = "Granite",
tiles = {"vox_granite.png"},
groups = {cracky = 2}
})
core.register_alias("granite", "vox_core:granite")
core.register_alias("default:granite", "vox_core:granite")
-- Diorite
core.register_node("vox_core:diorite", {
description = "Diorite",
tiles = {"vox_diorite.png"},
groups = {cracky = 2}
})
core.register_alias("diorite", "vox_core:diorite")
core.register_alias("default:diorite", "vox_core:diorite")
-- Andesite
core.register_node("vox_core:andesite", {
description = "Andesite",
tiles = {"vox_andesite.png"},
groups = {cracky = 2}
})
core.register_alias("andesite", "vox_core:andesite")
core.register_alias("default:andesite", "vox_core:andesite")
-- Basalt
core.register_node("vox_core:basalt", {
description = "Basalt",
tiles = {"vox_basalt.png"},
groups = {cracky = 2}
})
core.register_alias("basalt", "vox_core:basalt")
core.register_alias("default:basalt", "vox_core:basalt")
-- Obsidian
core.register_node("vox_core:obsidian", {
description = "Obsidian",
tiles = {"default_obsidian.png"},
--sounds = vox_core.node_sound_stone_defaults(),
groups = {cracky = 1, level = 2},
})
core.register_alias("obsidian", "vox_core:obsidian")
core.register_alias("default:obsidian", "vox_core:obsidian")
-- Obsidian Brick
core.register_node("vox_core:obsidian_brick", {
description = "Obsidian Brick",
paramtype2 = "facedir",
place_param2 = 0,
tiles = {"default_obsidian_brick.png"},
is_ground_content = false,
--sounds = vox_core.node_sound_stone_defaults(),
groups = {cracky = 1, level = 2},
})
core.register_alias("obsidian_brick", "vox_core:obsidian_brick")
core.register_alias("default:obsidianbrick", "vox_core:obsidian_brick")
-- Obsidian Block
core.register_node("vox_core:obsidian_block", {
description = "Obsidian Block",
tiles = {"default_obsidian_block.png"},
is_ground_content = false,
--sounds = vox_core.node_sound_stone_defaults(),
groups = {cracky = 1, level = 2},
})
core.register_alias("obsidian_block", "vox_core:obsidian_block")
core.register_alias("default:obsidian_block", "vox_core:obsidian_block")
-- Marble
core.register_node("vox_core:marble", {
description = "Marble",
tiles = {"vox_marble.png"},
groups = {cracky = 2}
})
core.register_alias("marble", "vox_core:marble")
core.register_alias("default:marble", "vox_core:marble")
-- Chalk
core.register_node("vox_core:chalk", {
description = "Chalk",
tiles = {"vox_chalk.png"},
groups = {cracky = 2}
})
core.register_alias("chalk", "vox_core:chalk")
core.register_alias("default:chalk", "vox_core:chalk")
-- Limestone
core.register_node("vox_core:limestone", {
description = "Limestone",
tiles = {"vox_limestone.png"},
groups = {cracky = 2}
})
core.register_alias("limestone", "vox_core:limestone")
core.register_alias("default:limestone", "vox_core:limestone")

View file

@ -1,13 +1,13 @@
-- We'll register drops from mobs here, but what mobs drop elsewhere.
-- Fat
minetest.register_craftitem("vox_main:fat", {
minetest.register_craftitem("vox_core:fat", {
description = "Fat",
inventory_image = "fat.png",
})
-- Leather
minetest.register_craftitem("vox_main:leather", {
minetest.register_craftitem("vox_core:leather", {
description = "Leather",
inventory_image = "leather.png",
})

View file

@ -1,3 +1,3 @@
name = vox_main
name = vox_core
description = Voxelis - Main : Core content
depends = vox_colors

View file

@ -0,0 +1,7 @@
core.register_node("vox_core:coral_red", {
description = "Red Coral",
tiles = {"vox_coral_red.png"},
groups = {crumbly = 1}
})
core.register_alias("coral_red", "vox_core:coral_red")

View file

@ -0,0 +1,153 @@
-- -------------------------------------------------------------------------- --
-- Ores --
-- -------------------------------------------------------------------------- --
-- Fuel: Coal, Uranium, Peat
core.register_node("vox_core:coal_ore", {
description = "Coal Ore",
tiles = {"vox_coal_ore.png"},
groups = {cracky = 2}
})
core.register_alias("coal_ore", "vox_core:coal_ore")
core.register_alias("default:stone_with_coal", "vox_core:coal_ore")
core.register_node("vox_core:uranium_ore", {
description = "Uranium Ore",
tiles = {"vox_uranium_ore.png"},
groups = {cracky = 2}
})
core.register_alias("uranium_ore", "vox_core:uranium_ore")
core.register_alias("default:stone_with_uranium", "vox_core:uranium_ore")
core.register_node("vox_core:peat", {
description = "Peat",
tiles = {"vox_peat.png"},
groups = {crumbly = 2, flammable = 1}
})
core.register_alias("peat", "vox_core:peat")
-- Bone
core.register_node("vox_core:bone_ore", {
description = "Bone Ore",
tiles = {"vox_bone_ore.png"},
groups = {cracky = 2}
})
core.register_alias("bone_ore", "vox_core:bone_ore")
core.register_alias("default:stone_with_bone", "vox_core:bone_ore")
-- Sulfur
core.register_node("vox_core:sulfur_ore", {
description = "Sulfur Ore",
tiles = {"vox_sulfur_ore.png"},
groups = {cracky = 2}
})
core.register_alias("sulfur_ore", "vox_core:sulfur_ore")
core.register_alias("default:stone_with_sulfur", "vox_core:sulfur_ore")
-- Salt
core.register_node("vox_core:salt_ore", {
description = "Salt Ore",
tiles = {"vox_salt_ore.png"},
groups = {crumbly = 2},
drop = "vox_mats:salt"
})
core.register_alias("salt_ore", "vox_core:salt_ore")
core.register_alias("default:stone_with_salt", "vox_core:salt_ore")
-- Metals: Copper, Tin, Iron, Gold, Silver, Platinum, Lead, Zinc, Nickel, Cobalt, Titanium, Tungsten
core.register_node("vox_core:copper_ore", {
description = "Copper Ore",
tiles = {"vox_copper_ore.png"},
groups = {cracky = 2}
})
core.register_alias("copper_ore", "vox_core:copper_ore")
core.register_alias("default:stone_with_copper", "vox_core:copper_ore")
core.register_node("vox_core:tin_ore", {
description = "Tin Ore",
tiles = {"vox_tin_ore.png"},
groups = {cracky = 2}
})
core.register_alias("tin_ore", "vox_core:tin_ore")
core.register_alias("default:stone_with_tin", "vox_core:tin_ore")
core.register_node("vox_core:iron_ore", {
description = "Iron Ore",
tiles = {"vox_iron_ore.png"},
groups = {cracky = 2}
})
core.register_alias("iron_ore", "vox_core:iron_ore")
core.register_alias("default:stone_with_iron", "vox_core:iron_ore")
core.register_node("vox_core:gold_ore", {
description = "Gold Ore",
tiles = {"vox_gold_ore.png"},
groups = {cracky = 2}
})
core.register_alias("gold_ore", "vox_core:gold_ore")
core.register_alias("default:stone_with_gold", "vox_core:gold_ore")
core.register_node("vox_core:silver_ore", {
description = "Silver Ore",
tiles = {"vox_silver_ore.png"},
groups = {cracky = 2}
})
core.register_alias("silver_ore", "vox_core:silver_ore")
core.register_alias("default:stone_with_silver", "vox_core:silver_ore")
core.register_node("vox_core:platinum_ore", {
description = "Platinum Ore",
tiles = {"vox_platinum_ore.png"},
groups = {cracky = 2}
})
core.register_alias("platinum_ore", "vox_core:platinum_ore")
core.register_alias("default:stone_with_platinum", "vox_core:platinum_ore")
core.register_node("vox_core:lead_ore", {
description = "Lead Ore",
tiles = {"vox_lead_ore.png"},
groups = {cracky = 2}
})
core.register_alias("lead_ore", "vox_core:lead_ore")
core.register_alias("default:stone_with_lead", "vox_core:lead_ore")
core.register_node("vox_core:zinc_ore", {
description = "Zinc Ore",
tiles = {"vox_zinc_ore.png"},
groups = {cracky = 2}
})
core.register_alias("zinc_ore", "vox_core:zinc_ore")
core.register_alias("default:stone_with_zinc", "vox_core:zinc_ore")
core.register_node("vox_core:nickel_ore", {
description = "Nickel Ore",
tiles = {"vox_nickel_ore.png"},
groups = {cracky = 2}
})
core.register_alias("nickel_ore", "vox_core:nickel_ore")
core.register_alias("default:stone_with_nickel", "vox_core:nickel_ore")
core.register_node("vox_core:cobalt_ore", {
description = "Cobalt Ore",
tiles = {"vox_cobalt_ore.png"},
groups = {cracky = 2}
})
core.register_alias("cobalt_ore", "vox_core:cobalt_ore")
core.register_alias("default:stone_with_cobalt", "vox_core:cobalt_ore")
core.register_node("vox_core:titanium_ore", {
description = "Titanium Ore",
tiles = {"vox_titanium_ore.png"},
groups = {cracky = 2}
})
core.register_alias("titanium_ore", "vox_core:titanium_ore")
core.register_alias("default:stone_with_titanium", "vox_core:titanium_ore")
core.register_node("vox_core:tungsten_ore", {
description = "Tungsten Ore",
tiles = {"vox_tungsten_ore.png"},
groups = {cracky = 2}
})
core.register_alias("tungsten_ore", "vox_core:tungsten_ore")
core.register_alias("default:stone_with_tungsten", "vox_core:tungsten_ore")

View file

@ -0,0 +1,203 @@
-- plants.lua
-- Register Cactus
minetest.register_node("vox_core:cactus", {
description = "Cactus",
tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
paramtype2 = "facedir",
groups = {choppy = 3},
--sounds = default.node_sound_wood_defaults(),
on_place = minetest.rotate_node,
})
-- Register Large Cactus Seedling
minetest.register_node("vox_core:large_cactus_seedling", {
description = "Large Cactus Seedling",
drawtype = "plantlike",
tiles = {"default_large_cactus_seedling.png"},
inventory_image = "default_large_cactus_seedling.png",
wield_image = "default_large_cactus_seedling.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
},
groups = {choppy = 3, dig_immediate = 3, attached_node = 1},
-- sounds = default.node_sound_wood_defaults(),
on_place = function(itemstack, placer, pointed_thing)
return itemstack
end,
on_construct = function(pos)
minetest.get_node_timer(pos):start(math.random(1859, 3719))
end,
on_timer = function(pos)
default.grow_large_cactus(pos)
end,
})
-- Register Papyrus
minetest.register_node("vox_core:papyrus", {
description = "Papyrus",
drawtype = "plantlike",
tiles = {"default_papyrus.png"},
inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
},
groups = {snappy = 3, flammable = 2},
--sounds = default.node_sound_leaves_defaults(),
after_dig_node = function(pos, node, metadata, digger)
default.dig_up(pos, node, digger)
end,
})
-- Register Dry Shrub
minetest.register_node("vox_core:dry_shrub", {
description = "Dry Shrub",
drawtype = "plantlike",
waving = 1,
tiles = {"default_dry_shrub.png"},
inventory_image = "default_dry_shrub.png",
wield_image = "default_dry_shrub.png",
paramtype = "light",
paramtype2 = "meshoptions",
place_param2 = 4,
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, attached_node = 1},
--sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 4 / 16, 6 / 16},
},
})
-- Register Jungle Grass
minetest.register_node("vox_core:junglegrass", {
description = "Jungle Grass",
drawtype = "plantlike",
waving = 1,
visual_scale = 1.69,
tiles = {"default_junglegrass.png"},
inventory_image = "default_junglegrass.png",
wield_image = "default_junglegrass.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, junglegrass = 1, flammable = 1},
--sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.5, 6 / 16},
},
})
-- Register Grass
for i = 1, 5 do
minetest.register_node("vox_core:grass_" .. i, {
description = "Grass",
drawtype = "plantlike",
waving = 1,
tiles = {"default_grass_" .. i .. ".png"},
inventory_image = "default_grass_" .. math.min(i + 2, 5) .. ".png",
wield_image = "default_grass_" .. math.min(i + 2, 5) .. ".png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flora = 1, attached_node = 1, grass = 1, normal_grass = 1, flammable = 1},
--sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -5 / 16 + (i - 1) * 2 / 16, 6 / 16},
},
on_place = function(itemstack, placer, pointed_thing)
return itemstack
end,
})
end
-- Register Dry Grass
for i = 1, 5 do
minetest.register_node("vox_core:dry_grass_" .. i, {
description = "Savanna Grass",
drawtype = "plantlike",
waving = 1,
tiles = {"default_dry_grass_" .. i .. ".png"},
inventory_image = "default_dry_grass_" .. math.min(i + 2, 5) .. ".png",
wield_image = "default_dry_grass_" .. math.min(i + 2, 5) .. ".png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, flora = 1, attached_node = 1, grass = 1, dry_grass = 1},
--sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -3 / 16 + (i - 1) * 2 / 16, 6 / 16},
},
on_place = function(itemstack, placer, pointed_thing)
return itemstack
end,
})
end
-- Register Fern
for i = 1, 3 do
minetest.register_node("vox_core:fern_" .. i, {
description = "Fern",
drawtype = "plantlike",
waving = 1,
tiles = {"default_fern_" .. i .. ".png"},
inventory_image = "default_fern_" .. i .. ".png",
wield_image = "default_fern_" .. i .. ".png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, flora = 1, grass = 1, fern = 1, attached_node = 1},
--sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25 + (i - 1) * 0.25, 6 / 16},
},
on_place = function(itemstack, placer, pointed_thing)
return itemstack
end,
})
end
-- Register Marram Grass
for i = 1, 3 do
minetest.register_node("vox_core:marram_grass_" .. i, {
description = "Marram Grass",
drawtype = "plantlike",
waving = 1,
tiles = {"default_marram_grass_" .. i .. ".png"},
inventory_image = "default_marram_grass_" .. i .. ".png",
wield_image = "default_marram_grass_" .. i .. ".png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
buildable_to = true,
groups = {snappy = 3, flammable = 3, flora = 1, grass = 1, marram_grass = 1, attached_node = 1},
--sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, -0.25 + (i - 1) * 0.25, 6 / 16},
},
on_place = function(itemstack, placer, pointed_thing)
return itemstack
end,
})
end

View file

@ -2,9 +2,9 @@
-- Cloud Block - Only pegasus can walk on it :)
-- Players may stand on it, but sink partway through. If multiple blocks are
-- stacked, you fall to the lowest block and still don't fall through.
core.register_node("vox_main:cloud", {
core.register_node("vox_core:cloud", {
description = "Cloud",
tiles = {"vox_cloud.png"},
groups = {crumbly = 1}
})
core.register_alias("cloud", "vox_main:cloud")
core.register_alias("cloud", "vox_core:cloud")

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