Compare commits
67 Commits
master
...
production
Author | SHA1 | Date |
---|---|---|
kay27 | 804ef9de7c | |
kay27 | 42fe0441de | |
kay27 | a9ea0e8037 | |
kay27 | 81d890d431 | |
kay27 | 2d525a45da | |
kay27 | aa6a9c9afb | |
kay27 | 5a55f50024 | |
kay27 | 43c35f359c | |
kay27 | e69c78b94c | |
kay27 | 10545dc01c | |
kay27 | d2ef621604 | |
kay27 | cd4cd3f7c7 | |
kay27 | b095966562 | |
kay27 | 1f7aeeb977 | |
kay27 | d437029942 | |
kay27 | 5589056bba | |
kay27 | af91d60200 | |
kay27 | f5d3619d36 | |
kay27 | 1b6af6af77 | |
kay27 | fe52c54f35 | |
kay27 | 230e3b0bc3 | |
kay27 | 6368cc195e | |
kay27 | 07c5fb7399 | |
kay27 | e00becde00 | |
kay27 | c8e92b8ff0 | |
kay27 | 421c0ce29f | |
kay27 | a2974f2afe | |
kay27 | 732d3aa8af | |
kay27 | d634f2ad65 | |
kay27 | 5ad0bd21e5 | |
kay27 | 44cb0e563c | |
kay27 | 7f70e2e613 | |
kay27 | b04c4610b5 | |
cora | bf5533799d | |
kay27 | 148ecdf29f | |
kay27 | e8d26c9caf | |
kay27 | 1a65812bea | |
kay27 | 2ed90375dc | |
kay27 | 4c59094ac5 | |
kay27 | e4c90a95ef | |
kay27 | eebf756f16 | |
kay27 | d17c103dfe | |
kay27 | 7a5d632449 | |
kay27 | 697d8396dd | |
kay27 | 24dec437e5 | |
kay27 | 8ee20a2d18 | |
kay27 | a2f464c67f | |
kay27 | c917cd2e46 | |
kay27 | d14cdceaa3 | |
kay27 | 61c87c7e1a | |
kay27 | 07603a8642 | |
kay27 | f2898a0d1c | |
kay27 | 6dc05a2b69 | |
kay27 | 6fe6885fdb | |
kay27 | fda5aa1395 | |
kay27 | 8e66734736 | |
kay27 | 2d43b359a3 | |
kay27 | 2ae4b31da2 | |
kay27 | a8d94e35ce | |
kay27 | 98ddf778cf | |
kay27 | 0096100228 | |
kay27 | ce7a4fec3d | |
kay27 | 28f17b1004 | |
kay27 | e291853c01 | |
kay27 | da9fa916e8 | |
kay27 | 8079d3bc9d | |
kay27 | 786fd43173 |
|
@ -0,0 +1,125 @@
|
||||||
|
mcl_compatibility = mcl_compatibility or {}
|
||||||
|
mcl_vars = mcl_vars or {}
|
||||||
|
|
||||||
|
local modname = minetest.get_current_modname()
|
||||||
|
local modpath = minetest.get_modpath(modname)
|
||||||
|
|
||||||
|
local math = math
|
||||||
|
local math_ceil = math.ceil
|
||||||
|
local math_floor = math.floor
|
||||||
|
local math_abs = math.abs
|
||||||
|
local minetest_get_node = minetest.get_node
|
||||||
|
|
||||||
|
if not bit then
|
||||||
|
bit = {}
|
||||||
|
function bit.bxor(a, b)
|
||||||
|
-- fake! mock! speedify for now! TODO: make proper xor bitwise
|
||||||
|
return math_ceil(math_abs(math_floor(a/0.14) * b * 1.001 + b))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function math.round(x)
|
||||||
|
if x >= 0 then
|
||||||
|
return math_floor(x + 0.5)
|
||||||
|
end
|
||||||
|
return math_ceil(x - 0.5)
|
||||||
|
end
|
||||||
|
|
||||||
|
dofile(modpath .. "/vector.lua")
|
||||||
|
|
||||||
|
mcl_compatibility.sort_nodes = function(nodes)
|
||||||
|
local nodes = nodes
|
||||||
|
if not nodes then return {} end
|
||||||
|
for _, pos in pairs(nodes) do
|
||||||
|
if not pos.x or not pos.y or not pos.z then
|
||||||
|
return nodes
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local new_nodes = {}
|
||||||
|
for _, pos in pairs(nodes) do
|
||||||
|
local node = minetest_get_node(pos)
|
||||||
|
local name = node.name
|
||||||
|
local ref = new_nodes[name]
|
||||||
|
if not ref then
|
||||||
|
new_nodes[name] = { pos }
|
||||||
|
else
|
||||||
|
ref[#ref + 1] = pos
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return new_nodes
|
||||||
|
end
|
||||||
|
|
||||||
|
local sort_nodes = mcl_compatibility.sort_nodes
|
||||||
|
|
||||||
|
local minetest_find_nodes_in_area = minetest.find_nodes_in_area
|
||||||
|
minetest.find_nodes_in_area = function(pos1, pos2, nodenames, grouped)
|
||||||
|
if not grouped then
|
||||||
|
return minetest_find_nodes_in_area(pos1, pos2, nodenames)
|
||||||
|
end
|
||||||
|
local nodes, num = minetest_find_nodes_in_area(pos1, pos2, nodenames, grouped)
|
||||||
|
if not nodes or next(nodes) == nil then
|
||||||
|
return nodes, num
|
||||||
|
end
|
||||||
|
return sort_nodes(nodes)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_vars.pos_to_block(pos)
|
||||||
|
return mcl_mapgen and mcl_mapgen.pos_to_block(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_vars.pos_to_chunk(pos)
|
||||||
|
return mcl_mapgen and mcl_mapgen.pos_to_chunk(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_vars.get_chunk_number(pos)
|
||||||
|
return mcl_mapgen and get_chunk_number(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_vars.is_generated(pos)
|
||||||
|
local node = minetest_get_node(pos)
|
||||||
|
if not node then return false end
|
||||||
|
if node.name == "ignore" then return false end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function mcl_vars.get_node(p, force, us_timeout)
|
||||||
|
if not p or not p.x or not p.y or not p.z then return {name="error"} end
|
||||||
|
local node = minetest_get_node(p)
|
||||||
|
if node.name ~= "ignore" then return node end
|
||||||
|
minetest.get_voxel_manip():read_from_map(p, p)
|
||||||
|
return minetest_get_node(pos)
|
||||||
|
end
|
||||||
|
|
||||||
|
mcl_vars.mg_overworld_min = -62
|
||||||
|
mcl_vars.mg_overworld_max_official = 198
|
||||||
|
mcl_vars.mg_bedrock_overworld_min = -62
|
||||||
|
mcl_vars.mg_bedrock_overworld_max = -58
|
||||||
|
mcl_vars.mg_lava_overworld_max = -52
|
||||||
|
mcl_vars.mg_lava = true
|
||||||
|
mcl_vars.mg_bedrock_is_rough = true
|
||||||
|
mcl_vars.mg_overworld_max = 30927
|
||||||
|
mcl_vars.mg_nether_min = -29067
|
||||||
|
mcl_vars.mg_nether_max = -28939
|
||||||
|
mcl_vars.mg_bedrock_nether_bottom_min = -29067
|
||||||
|
mcl_vars.mg_bedrock_nether_top_max = -29063
|
||||||
|
mcl_vars.mg_end_min = -27073
|
||||||
|
mcl_vars.mg_end_max_official = -26817
|
||||||
|
mcl_vars.mg_end_max = -2062
|
||||||
|
mcl_vars.mg_end_platform_pos = { x = 100, y = -26999, z = 0 }
|
||||||
|
mcl_vars.mg_realm_barrier_overworld_end_max = -2062
|
||||||
|
mcl_vars.mg_realm_barrier_overworld_end_min = -2073
|
||||||
|
mcl_vars.mg_dungeons = true
|
||||||
|
|
||||||
|
if not minetest.register_on_authplayer then
|
||||||
|
minetest.register_on_authplayer = function(callback_function)
|
||||||
|
minetest.register_on_prejoinplayer(function(name, ip)
|
||||||
|
callback_function(name, ip, true)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not minetest.colorspec_to_colorstring then
|
||||||
|
minetest.colorspec_to_colorstring = function(colorspec)
|
||||||
|
return '#334455'
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,3 @@
|
||||||
|
name = mcl_compatibility
|
||||||
|
author = kay27, minetest devs
|
||||||
|
description = Makes MineClone 5 run in old versions of Minetest and be compatible with mods using old MineClone APIs
|
|
@ -0,0 +1,362 @@
|
||||||
|
--[[
|
||||||
|
Vector helpers
|
||||||
|
Note: The vector.*-functions must be able to accept old vectors that had no metatables
|
||||||
|
]]
|
||||||
|
|
||||||
|
-- localize functions
|
||||||
|
local setmetatable = setmetatable
|
||||||
|
|
||||||
|
vector = {}
|
||||||
|
|
||||||
|
local metatable = {}
|
||||||
|
vector.metatable = metatable
|
||||||
|
|
||||||
|
local xyz = {"x", "y", "z"}
|
||||||
|
|
||||||
|
-- only called when rawget(v, key) returns nil
|
||||||
|
function metatable.__index(v, key)
|
||||||
|
return rawget(v, xyz[key]) or vector[key]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- only called when rawget(v, key) returns nil
|
||||||
|
function metatable.__newindex(v, key, value)
|
||||||
|
rawset(v, xyz[key] or key, value)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- constructors
|
||||||
|
|
||||||
|
local function fast_new(x, y, z)
|
||||||
|
return setmetatable({x = x, y = y, z = z}, metatable)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.new(a, b, c)
|
||||||
|
if a and b and c then
|
||||||
|
return fast_new(a, b, c)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- deprecated, use vector.copy and vector.zero directly
|
||||||
|
if type(a) == "table" then
|
||||||
|
return vector.copy(a)
|
||||||
|
else
|
||||||
|
assert(not a, "Invalid arguments for vector.new()")
|
||||||
|
return vector.zero()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.zero()
|
||||||
|
return fast_new(0, 0, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.copy(v)
|
||||||
|
assert(v.x and v.y and v.z, "Invalid vector passed to vector.copy()")
|
||||||
|
return fast_new(v.x, v.y, v.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.from_string(s, init)
|
||||||
|
local x, y, z, np = string.match(s, "^%s*%(%s*([^%s,]+)%s*[,%s]%s*([^%s,]+)%s*[,%s]" ..
|
||||||
|
"%s*([^%s,]+)%s*[,%s]?%s*%)()", init)
|
||||||
|
x = tonumber(x)
|
||||||
|
y = tonumber(y)
|
||||||
|
z = tonumber(z)
|
||||||
|
if not (x and y and z) then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return fast_new(x, y, z), np
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.to_string(v)
|
||||||
|
return string.format("(%g, %g, %g)", v.x, v.y, v.z)
|
||||||
|
end
|
||||||
|
metatable.__tostring = vector.to_string
|
||||||
|
|
||||||
|
function vector.equals(a, b)
|
||||||
|
return a.x == b.x and
|
||||||
|
a.y == b.y and
|
||||||
|
a.z == b.z
|
||||||
|
end
|
||||||
|
metatable.__eq = vector.equals
|
||||||
|
|
||||||
|
-- unary operations
|
||||||
|
|
||||||
|
function vector.length(v)
|
||||||
|
return math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
|
||||||
|
end
|
||||||
|
-- Note: we can not use __len because it is already used for primitive table length
|
||||||
|
|
||||||
|
function vector.normalize(v)
|
||||||
|
local len = vector.length(v)
|
||||||
|
if len == 0 then
|
||||||
|
return fast_new(0, 0, 0)
|
||||||
|
else
|
||||||
|
return vector.divide(v, len)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.floor(v)
|
||||||
|
return vector.apply(v, math.floor)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.round(v)
|
||||||
|
return fast_new(
|
||||||
|
math.round(v.x),
|
||||||
|
math.round(v.y),
|
||||||
|
math.round(v.z)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.apply(v, func)
|
||||||
|
return fast_new(
|
||||||
|
func(v.x),
|
||||||
|
func(v.y),
|
||||||
|
func(v.z)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.distance(a, b)
|
||||||
|
local x = a.x - b.x
|
||||||
|
local y = a.y - b.y
|
||||||
|
local z = a.z - b.z
|
||||||
|
return math.sqrt(x * x + y * y + z * z)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.direction(pos1, pos2)
|
||||||
|
return vector.subtract(pos2, pos1):normalize()
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.angle(a, b)
|
||||||
|
local dotp = vector.dot(a, b)
|
||||||
|
local cp = vector.cross(a, b)
|
||||||
|
local crossplen = vector.length(cp)
|
||||||
|
return math.atan2(crossplen, dotp)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.dot(a, b)
|
||||||
|
return a.x * b.x + a.y * b.y + a.z * b.z
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.cross(a, b)
|
||||||
|
return fast_new(
|
||||||
|
a.y * b.z - a.z * b.y,
|
||||||
|
a.z * b.x - a.x * b.z,
|
||||||
|
a.x * b.y - a.y * b.x
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function metatable.__unm(v)
|
||||||
|
return fast_new(-v.x, -v.y, -v.z)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- add, sub, mul, div operations
|
||||||
|
|
||||||
|
function vector.add(a, b)
|
||||||
|
if type(b) == "table" then
|
||||||
|
return fast_new(
|
||||||
|
a.x + b.x,
|
||||||
|
a.y + b.y,
|
||||||
|
a.z + b.z
|
||||||
|
)
|
||||||
|
else
|
||||||
|
return fast_new(
|
||||||
|
a.x + b,
|
||||||
|
a.y + b,
|
||||||
|
a.z + b
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function metatable.__add(a, b)
|
||||||
|
return fast_new(
|
||||||
|
a.x + b.x,
|
||||||
|
a.y + b.y,
|
||||||
|
a.z + b.z
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.subtract(a, b)
|
||||||
|
if type(b) == "table" then
|
||||||
|
return fast_new(
|
||||||
|
a.x - b.x,
|
||||||
|
a.y - b.y,
|
||||||
|
a.z - b.z
|
||||||
|
)
|
||||||
|
else
|
||||||
|
return fast_new(
|
||||||
|
a.x - b,
|
||||||
|
a.y - b,
|
||||||
|
a.z - b
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function metatable.__sub(a, b)
|
||||||
|
return fast_new(
|
||||||
|
a.x - b.x,
|
||||||
|
a.y - b.y,
|
||||||
|
a.z - b.z
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.multiply(a, b)
|
||||||
|
if type(b) == "table" then
|
||||||
|
return fast_new(
|
||||||
|
a.x * b.x,
|
||||||
|
a.y * b.y,
|
||||||
|
a.z * b.z
|
||||||
|
)
|
||||||
|
else
|
||||||
|
return fast_new(
|
||||||
|
a.x * b,
|
||||||
|
a.y * b,
|
||||||
|
a.z * b
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function metatable.__mul(a, b)
|
||||||
|
if type(a) == "table" then
|
||||||
|
return fast_new(
|
||||||
|
a.x * b,
|
||||||
|
a.y * b,
|
||||||
|
a.z * b
|
||||||
|
)
|
||||||
|
else
|
||||||
|
return fast_new(
|
||||||
|
a * b.x,
|
||||||
|
a * b.y,
|
||||||
|
a * b.z
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.divide(a, b)
|
||||||
|
if type(b) == "table" then
|
||||||
|
return fast_new(
|
||||||
|
a.x / b.x,
|
||||||
|
a.y / b.y,
|
||||||
|
a.z / b.z
|
||||||
|
)
|
||||||
|
else
|
||||||
|
return fast_new(
|
||||||
|
a.x / b,
|
||||||
|
a.y / b,
|
||||||
|
a.z / b
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function metatable.__div(a, b)
|
||||||
|
-- scalar/vector makes no sense
|
||||||
|
return fast_new(
|
||||||
|
a.x / b,
|
||||||
|
a.y / b,
|
||||||
|
a.z / b
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- misc stuff
|
||||||
|
|
||||||
|
function vector.offset(v, x, y, z)
|
||||||
|
return fast_new(
|
||||||
|
v.x + x,
|
||||||
|
v.y + y,
|
||||||
|
v.z + z
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.sort(a, b)
|
||||||
|
return fast_new(math.min(a.x, b.x), math.min(a.y, b.y), math.min(a.z, b.z)),
|
||||||
|
fast_new(math.max(a.x, b.x), math.max(a.y, b.y), math.max(a.z, b.z))
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.check(v)
|
||||||
|
return getmetatable(v) == metatable
|
||||||
|
end
|
||||||
|
|
||||||
|
local function sin(x)
|
||||||
|
if x % math.pi == 0 then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return math.sin(x)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function cos(x)
|
||||||
|
if x % math.pi == math.pi / 2 then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return math.cos(x)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.rotate_around_axis(v, axis, angle)
|
||||||
|
local cosangle = cos(angle)
|
||||||
|
local sinangle = sin(angle)
|
||||||
|
axis = vector.normalize(axis)
|
||||||
|
-- https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
|
||||||
|
local dot_axis = vector.multiply(axis, vector.dot(axis, v))
|
||||||
|
local cross = vector.cross(v, axis)
|
||||||
|
return vector.new(
|
||||||
|
cross.x * sinangle + (v.x - dot_axis.x) * cosangle + dot_axis.x,
|
||||||
|
cross.y * sinangle + (v.y - dot_axis.y) * cosangle + dot_axis.y,
|
||||||
|
cross.z * sinangle + (v.z - dot_axis.z) * cosangle + dot_axis.z
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.rotate(v, rot)
|
||||||
|
local sinpitch = sin(-rot.x)
|
||||||
|
local sinyaw = sin(-rot.y)
|
||||||
|
local sinroll = sin(-rot.z)
|
||||||
|
local cospitch = cos(rot.x)
|
||||||
|
local cosyaw = cos(rot.y)
|
||||||
|
local cosroll = math.cos(rot.z)
|
||||||
|
-- Rotation matrix that applies yaw, pitch and roll
|
||||||
|
local matrix = {
|
||||||
|
{
|
||||||
|
sinyaw * sinpitch * sinroll + cosyaw * cosroll,
|
||||||
|
sinyaw * sinpitch * cosroll - cosyaw * sinroll,
|
||||||
|
sinyaw * cospitch,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cospitch * sinroll,
|
||||||
|
cospitch * cosroll,
|
||||||
|
-sinpitch,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cosyaw * sinpitch * sinroll - sinyaw * cosroll,
|
||||||
|
cosyaw * sinpitch * cosroll + sinyaw * sinroll,
|
||||||
|
cosyaw * cospitch,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
-- Compute matrix multiplication: `matrix` * `v`
|
||||||
|
return vector.new(
|
||||||
|
matrix[1][1] * v.x + matrix[1][2] * v.y + matrix[1][3] * v.z,
|
||||||
|
matrix[2][1] * v.x + matrix[2][2] * v.y + matrix[2][3] * v.z,
|
||||||
|
matrix[3][1] * v.x + matrix[3][2] * v.y + matrix[3][3] * v.z
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
function vector.dir_to_rotation(forward, up)
|
||||||
|
forward = vector.normalize(forward)
|
||||||
|
local rot = vector.new(math.asin(forward.y), -math.atan2(forward.x, forward.z), 0)
|
||||||
|
if not up then
|
||||||
|
return rot
|
||||||
|
end
|
||||||
|
assert(vector.dot(forward, up) < 0.000001,
|
||||||
|
"Invalid vectors passed to vector.dir_to_rotation().")
|
||||||
|
up = vector.normalize(up)
|
||||||
|
-- Calculate vector pointing up with roll = 0, just based on forward vector.
|
||||||
|
local forwup = vector.rotate(vector.new(0, 1, 0), rot)
|
||||||
|
-- 'forwup' and 'up' are now in a plane with 'forward' as normal.
|
||||||
|
-- The angle between them is the absolute of the roll value we're looking for.
|
||||||
|
rot.z = vector.angle(forwup, up)
|
||||||
|
|
||||||
|
-- Since vector.angle never returns a negative value or a value greater
|
||||||
|
-- than math.pi, rot.z has to be inverted sometimes.
|
||||||
|
-- To determine wether this is the case, we rotate the up vector back around
|
||||||
|
-- the forward vector and check if it worked out.
|
||||||
|
local back = vector.rotate_around_axis(up, forward, -rot.z)
|
||||||
|
|
||||||
|
-- We don't use vector.equals for this because of floating point imprecision.
|
||||||
|
if (back.x - forwup.x) * (back.x - forwup.x) +
|
||||||
|
(back.y - forwup.y) * (back.y - forwup.y) +
|
||||||
|
(back.z - forwup.z) * (back.z - forwup.z) > 0.0000001 then
|
||||||
|
rot.z = -rot.z
|
||||||
|
end
|
||||||
|
return rot
|
||||||
|
end
|
|
@ -0,0 +1 @@
|
||||||
|
-- moved to mcl_compatibility
|
|
@ -1,5 +1,5 @@
|
||||||
-- Some global variables (don't overwrite them!)
|
-- Some global variables (don't overwrite them!)
|
||||||
mcl_vars = {}
|
mcl_vars = mcl_vars or {}
|
||||||
|
|
||||||
mcl_vars.redstone_tick = 0.1
|
mcl_vars.redstone_tick = 0.1
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
name = mcl_init
|
name = mcl_init
|
||||||
|
depends = mcl_compatibility
|
||||||
author = Wuzzy
|
author = Wuzzy
|
||||||
description = Initialization mod of MineClone 2. Defines some common shared variables and sets up initial default settings which have to be set at the beginning.
|
description = Initialization mod of MineClone 2. Defines some common shared variables and sets up initial default settings which have to be set at the beginning.
|
||||||
|
|
|
@ -394,17 +394,7 @@ minetest.register_on_generated(function(minp, maxp, chunkseed)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local register_on_generated_old = minetest.register_on_generated
|
minetest.register_on_generated = mcl_mapgen.register_chunk_generator
|
||||||
minetest.register_on_generated = function(...)
|
|
||||||
minetest.log("warning", "minetest.register_on_generated() is being called by the mod '"
|
|
||||||
.. minetest.get_current_modname() .. "'. MineClone5's map generation system avoids using "
|
|
||||||
.. "this callback to work around engine map generation issues. If possible please read "
|
|
||||||
.. "mods/CORE/mcl_mapgen/API.md and update " .. minetest.get_current_modname()
|
|
||||||
.. " to use the method described from there. MineClone5 makes no promises that "
|
|
||||||
.. "mapgen mods will be fully compatible with it, please test your server and use at "
|
|
||||||
.. "your own risk.")
|
|
||||||
return register_on_generated_old(...)
|
|
||||||
end
|
|
||||||
|
|
||||||
function mcl_mapgen.get_far_node(p)
|
function mcl_mapgen.get_far_node(p)
|
||||||
local p = p
|
local p = p
|
||||||
|
@ -450,21 +440,6 @@ function mcl_mapgen.get_chunk_number(pos) -- unsigned int
|
||||||
c.x + k_positive
|
c.x + k_positive
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Components of this game should register functions here to update their internal
|
|
||||||
-- state when external mods modify mapgen settings that they care about.
|
|
||||||
local settings_changed_callbacks = {}
|
|
||||||
function mcl_mapgen.register_on_settings_changed(callback)
|
|
||||||
table.insert(settings_changed_callbacks, callback)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- this is to be called by external mods after modifying these settings
|
|
||||||
-- to notify Mineclone that it needs to update local copies and whatever's based on them.
|
|
||||||
function mcl_mapgen.on_settings_changed()
|
|
||||||
for _, callback in pairs(settings_changed_callbacks) do
|
|
||||||
callback()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mcl_mapgen.minecraft_height_limit = 256
|
mcl_mapgen.minecraft_height_limit = 256
|
||||||
|
|
||||||
mcl_mapgen.bedrock_is_rough = normal
|
mcl_mapgen.bedrock_is_rough = normal
|
||||||
|
|
|
@ -148,6 +148,7 @@ function mcl_time.get_irl_seconds_passed_at_pos_or_nil(pos)
|
||||||
if last_time <= 0 then return end
|
if last_time <= 0 then return end
|
||||||
local delta_time = seconds_irl_public - last_time
|
local delta_time = seconds_irl_public - last_time
|
||||||
if delta_time <= 0 then return end
|
if delta_time <= 0 then return end
|
||||||
|
meta:set_int(meta_name, seconds_irl_public)
|
||||||
return delta_time
|
return delta_time
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,18 +2,11 @@ mcl_worlds = {}
|
||||||
|
|
||||||
local get_connected_players = minetest.get_connected_players
|
local get_connected_players = minetest.get_connected_players
|
||||||
|
|
||||||
local min1, min2, min3
|
|
||||||
local max1, max2, max3
|
|
||||||
local get_local_settings = function()
|
|
||||||
min1, min2, min3 = mcl_mapgen.overworld.min, mcl_mapgen.end_.min, mcl_mapgen.nether.min
|
|
||||||
max1, max2, max3 = mcl_mapgen.overworld.max, mcl_mapgen.end_.max, mcl_mapgen.nether.max+128
|
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
-- For a given position, returns a 2-tuple:
|
-- For a given position, returns a 2-tuple:
|
||||||
-- 1st return value: true if pos is in void
|
-- 1st return value: true if pos is in void
|
||||||
-- 2nd return value: true if it is in the deadly part of the void
|
-- 2nd return value: true if it is in the deadly part of the void
|
||||||
|
local min1, min2, min3 = mcl_mapgen.overworld.min, mcl_mapgen.end_.min, mcl_mapgen.nether.min
|
||||||
|
local max1, max2, max3 = mcl_mapgen.overworld.max, mcl_mapgen.end_.max, mcl_mapgen.nether.max+128
|
||||||
function mcl_worlds.is_in_void(pos)
|
function mcl_worlds.is_in_void(pos)
|
||||||
local y = pos.y
|
local y = pos.y
|
||||||
local void = not ((y < max1 and y > min1) or (y < max2 and y > min2) or (y < max3 and y > min3))
|
local void = not ((y < max1 and y > min1) or (y < max2 and y > min2) or (y < max3 and y > min3))
|
||||||
|
|
|
@ -11,6 +11,7 @@ function mcl_burning.is_affected_by_rain(obj)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mcl_burning.get_collisionbox(obj, smaller, storage)
|
function mcl_burning.get_collisionbox(obj, smaller, storage)
|
||||||
|
if not storage then return end
|
||||||
local cache = storage.collisionbox_cache
|
local cache = storage.collisionbox_cache
|
||||||
if cache then
|
if cache then
|
||||||
local box = cache[smaller and 2 or 1]
|
local box = cache[smaller and 2 or 1]
|
||||||
|
@ -29,6 +30,7 @@ end
|
||||||
function mcl_burning.get_touching_nodes(obj, nodenames, storage)
|
function mcl_burning.get_touching_nodes(obj, nodenames, storage)
|
||||||
local pos = obj:get_pos()
|
local pos = obj:get_pos()
|
||||||
local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage)
|
local minp, maxp = mcl_burning.get_collisionbox(obj, true, storage)
|
||||||
|
if not minp or not maxp then return {} end
|
||||||
local nodes = minetest.find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames)
|
local nodes = minetest.find_nodes_in_area(vector.add(pos, minp), vector.add(pos, maxp), nodenames)
|
||||||
return nodes
|
return nodes
|
||||||
end
|
end
|
||||||
|
|
|
@ -115,7 +115,9 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
local pos = player:get_pos()
|
local pos = player:get_pos()
|
||||||
|
|
||||||
if tick == true and pool[name] > 0 then
|
local pool_name = pool[name]
|
||||||
|
|
||||||
|
if tick == true and pool_name and pool_name > 0 then
|
||||||
minetest.sound_play("item_drop_pickup", {
|
minetest.sound_play("item_drop_pickup", {
|
||||||
pos = pos,
|
pos = pos,
|
||||||
gain = 0.7,
|
gain = 0.7,
|
||||||
|
|
|
@ -417,7 +417,7 @@ function mobs:register_mob(name, def)
|
||||||
|
|
||||||
--on_breed = def.on_breed,
|
--on_breed = def.on_breed,
|
||||||
|
|
||||||
on_grown = def.on_grown,
|
--on_grown = def.on_grown,
|
||||||
|
|
||||||
--on_detach_child = mob_detach_child,
|
--on_detach_child = mob_detach_child,
|
||||||
|
|
||||||
|
|
|
@ -185,9 +185,15 @@ mobs.punch_attack = function(self)
|
||||||
|
|
||||||
dir = vector_multiply(dir,3)
|
dir = vector_multiply(dir,3)
|
||||||
|
|
||||||
if self.attacking:get_velocity().y <= 1 then
|
local attacking = self.attacking
|
||||||
|
if attacking then
|
||||||
|
local attacking_velocity = attacking:get_velocity() or attacking:get_player_velocity()
|
||||||
|
if attacking_velocity then
|
||||||
|
if attacking_velocity.y <= 1 then
|
||||||
dir.y = 5
|
dir.y = 5
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
self.attacking:add_velocity(dir)
|
self.attacking:add_velocity(dir)
|
||||||
end
|
end
|
||||||
|
|
|
@ -151,7 +151,6 @@ mobs.baby_grow_up = function(self)
|
||||||
self.collisionbox = self.backup_collisionbox
|
self.collisionbox = self.backup_collisionbox
|
||||||
self.selectionbox = self.backup_selectionbox
|
self.selectionbox = self.backup_selectionbox
|
||||||
self.object:set_properties(self)
|
self.object:set_properties(self)
|
||||||
if self.on_grown then self.on_grown(self) end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--makes the baby grow up faster with diminishing returns
|
--makes the baby grow up faster with diminishing returns
|
||||||
|
|
|
@ -99,7 +99,8 @@ mobs.death_logic = function(self, dtime)
|
||||||
self.death_animation_timer = self.death_animation_timer + dtime
|
self.death_animation_timer = self.death_animation_timer + dtime
|
||||||
|
|
||||||
--get all attached entities and sort through them
|
--get all attached entities and sort through them
|
||||||
local attached_entities = self.object:get_children()
|
-- TODO: support 5.1.1
|
||||||
|
local attached_entities = self.object.get_children and self.object:get_children() or {}
|
||||||
if #attached_entities > 0 then
|
if #attached_entities > 0 then
|
||||||
for _,entity in pairs(attached_entities) do
|
for _,entity in pairs(attached_entities) do
|
||||||
--kick the player off
|
--kick the player off
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
local math = math
|
local math = math
|
||||||
local vector = vector
|
local vector = vector
|
||||||
local debug_head = minetest.settings:get_bool("mcl_debug_head_code", false)
|
|
||||||
|
|
||||||
--converts yaw to degrees
|
--converts yaw to degrees
|
||||||
local degrees = function(yaw)
|
local degrees = function(yaw)
|
||||||
|
@ -8,7 +7,7 @@ local degrees = function(yaw)
|
||||||
end
|
end
|
||||||
|
|
||||||
mobs.do_head_logic = function(self, dtime, player)
|
mobs.do_head_logic = function(self, dtime, player)
|
||||||
if not self.has_head == true then return end
|
|
||||||
local player = player or minetest.get_player_by_name("singleplayer")
|
local player = player or minetest.get_player_by_name("singleplayer")
|
||||||
|
|
||||||
local look_at = player:get_pos()
|
local look_at = player:get_pos()
|
||||||
|
@ -26,7 +25,6 @@ mobs.do_head_logic = function(self, dtime, player)
|
||||||
|
|
||||||
pos = vector.add(pos, head_offset)
|
pos = vector.add(pos, head_offset)
|
||||||
|
|
||||||
if debug_head then
|
|
||||||
minetest.add_particle({
|
minetest.add_particle({
|
||||||
pos = pos,
|
pos = pos,
|
||||||
velocity = {x=0, y=0, z=0},
|
velocity = {x=0, y=0, z=0},
|
||||||
|
@ -35,7 +33,7 @@ mobs.do_head_logic = function(self, dtime, player)
|
||||||
size = 1,
|
size = 1,
|
||||||
texture = "default_dirt.png",
|
texture = "default_dirt.png",
|
||||||
})
|
})
|
||||||
end
|
|
||||||
local bone_pos = vector.new(0,0,0)
|
local bone_pos = vector.new(0,0,0)
|
||||||
|
|
||||||
--(horizontal)
|
--(horizontal)
|
||||||
|
|
|
@ -185,7 +185,8 @@ mobs.mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
||||||
|
|
||||||
--if player is falling multiply damage by 1.5
|
--if player is falling multiply damage by 1.5
|
||||||
--critical hit
|
--critical hit
|
||||||
if hitter:get_velocity().y < 0 then
|
local hitter_velocity = hitter:get_velocity() or hitter:get_player_velocity() or vector.new(0, 0, 0)
|
||||||
|
if hitter_velocity.y < 0 then
|
||||||
damage = damage * 1.5
|
damage = damage * 1.5
|
||||||
mobs.critical_effect(self)
|
mobs.critical_effect(self)
|
||||||
end
|
end
|
||||||
|
@ -207,7 +208,9 @@ mobs.mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
||||||
self.pause_timer = 0.4
|
self.pause_timer = 0.4
|
||||||
|
|
||||||
--don't do knockback from a rider
|
--don't do knockback from a rider
|
||||||
for _,obj in pairs(self.object:get_children()) do
|
local object_children = self.object.get_children and self.object:get_children()
|
||||||
|
-- TODO: support 5.1.1
|
||||||
|
for _,obj in pairs(object_children or {}) do
|
||||||
if obj == hitter then
|
if obj == hitter then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
|
@ -82,16 +82,16 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
|
|
||||||
--head code
|
--head code
|
||||||
has_head = true,
|
has_head = true,
|
||||||
head_bone = "head",
|
head_bone = {"hea1", "hea2",},
|
||||||
|
|
||||||
swap_y_with_x = false,
|
swap_y_with_x = false,
|
||||||
reverse_head_yaw = false,
|
reverse_head_yaw = false,
|
||||||
|
|
||||||
head_bone_pos_y = 0,
|
head_bone_pos_y = 3.6,
|
||||||
head_bone_pos_z = 0,
|
head_bone_pos_z = -0.6,
|
||||||
|
|
||||||
head_height_offset = 1.2,
|
head_height_offset = 1.0525,
|
||||||
head_direction_offset = 0,
|
head_direction_offset = 0.5,
|
||||||
head_pitch_modifier = 0,
|
head_pitch_modifier = 0,
|
||||||
--end head code
|
--end head code
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
},
|
},
|
||||||
animation = {
|
animation = {
|
||||||
speed_normal = 25, run_speed = 65,
|
speed_normal = 25, run_speed = 65,
|
||||||
stand_start = 0, stand_end = 0,
|
stand_start = 40, stand_end = 80,
|
||||||
walk_start = 0, walk_end = 40,
|
walk_start = 0, walk_end = 40,
|
||||||
run_start = 0, run_end = 40,
|
run_start = 0, run_end = 40,
|
||||||
},
|
},
|
||||||
|
@ -330,24 +330,6 @@ mobs:register_mob("mobs_mc:sheep", {
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
on_spawn = function(self)
|
|
||||||
if self.baby then
|
|
||||||
self.animation = table.copy(self.animation)
|
|
||||||
self.animation.stand_start = 81
|
|
||||||
self.animation.stand_end = 81
|
|
||||||
self.animation.walk_start = 81
|
|
||||||
self.animation.walk_end = 121
|
|
||||||
self.animation.run_start = 81
|
|
||||||
self.animation.run_end = 121
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end,
|
|
||||||
on_grown = function(self)
|
|
||||||
self.animation = nil
|
|
||||||
local anim = self.current_animation
|
|
||||||
self.current_animation = nil -- Mobs Redo does nothing otherwise
|
|
||||||
mobs.set_mob_animation(self, anim)
|
|
||||||
end
|
|
||||||
})
|
})
|
||||||
mobs:spawn_specific(
|
mobs:spawn_specific(
|
||||||
"mobs_mc:sheep",
|
"mobs_mc:sheep",
|
||||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.6 KiB |
|
@ -229,7 +229,6 @@ mobs_mc.override.spawn = {
|
||||||
}
|
}
|
||||||
|
|
||||||
-- This table contains important spawn height references for the mob spawn height.
|
-- This table contains important spawn height references for the mob spawn height.
|
||||||
local get_local_settings = function()
|
|
||||||
mobs_mc.override.spawn_height = {
|
mobs_mc.override.spawn_height = {
|
||||||
water = tonumber(minetest.settings:get("water_level")) or 0, -- Water level in the Overworld
|
water = tonumber(minetest.settings:get("water_level")) or 0, -- Water level in the Overworld
|
||||||
|
|
||||||
|
@ -245,7 +244,4 @@ local get_local_settings = function()
|
||||||
end_min = mcl_mapgen.end_.min,
|
end_min = mcl_mapgen.end_.min,
|
||||||
end_max = mcl_mapgen.end_.max,
|
end_max = mcl_mapgen.end_.max,
|
||||||
}
|
}
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
|
|
|
@ -53,10 +53,18 @@ minetest.register_globalstep(function(dtime)
|
||||||
local moon_arg = {texture = get_moon_texture()}
|
local moon_arg = {texture = get_moon_texture()}
|
||||||
local players = minetest.get_connected_players()
|
local players = minetest.get_connected_players()
|
||||||
for p=1, #players do
|
for p=1, #players do
|
||||||
|
if players[p].set_moon then
|
||||||
players[p]:set_moon(moon_arg)
|
players[p]:set_moon(moon_arg)
|
||||||
|
else
|
||||||
|
-- TODO: use old sky api
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
if player.set_moon then
|
||||||
player:set_moon({texture = get_moon_texture(), scale=3.75})
|
player:set_moon({texture = get_moon_texture(), scale=3.75})
|
||||||
|
else
|
||||||
|
-- TODO: use old sky api
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -1,6 +1,46 @@
|
||||||
local mods_loaded = false
|
local mods_loaded = false
|
||||||
local NIGHT_VISION_RATIO = 0.45
|
local NIGHT_VISION_RATIO = 0.45
|
||||||
|
|
||||||
|
local function set_sky(player, def)
|
||||||
|
if player.set_sun then
|
||||||
|
-- new api
|
||||||
|
player:set_sky(def)
|
||||||
|
else
|
||||||
|
-- TODO
|
||||||
|
-- old api
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_sun(player, def)
|
||||||
|
if player.set_sun then
|
||||||
|
-- new api
|
||||||
|
player:set_sun(def)
|
||||||
|
else
|
||||||
|
-- TODO
|
||||||
|
-- old api
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_moon(player, def)
|
||||||
|
if player.set_sun then
|
||||||
|
-- new api
|
||||||
|
player:set_moon(def)
|
||||||
|
else
|
||||||
|
-- TODO
|
||||||
|
-- old api
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_stars(player, def)
|
||||||
|
if player.set_sun then
|
||||||
|
-- new api
|
||||||
|
player:set_stars(def)
|
||||||
|
else
|
||||||
|
-- TODO
|
||||||
|
-- old api
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
mcl_weather.skycolor = {
|
mcl_weather.skycolor = {
|
||||||
-- Should be activated before do any effect.
|
-- Should be activated before do any effect.
|
||||||
active = true,
|
active = true,
|
||||||
|
@ -83,7 +123,7 @@ mcl_weather.skycolor = {
|
||||||
if dim == "overworld" then
|
if dim == "overworld" then
|
||||||
if (mcl_weather.state == "none") then
|
if (mcl_weather.state == "none") then
|
||||||
-- Clear weather
|
-- Clear weather
|
||||||
player:set_sky({
|
set_sky(player, {
|
||||||
type = "regular",
|
type = "regular",
|
||||||
sky_color = {
|
sky_color = {
|
||||||
day_sky = "#92B9FF",
|
day_sky = "#92B9FF",
|
||||||
|
@ -95,16 +135,17 @@ mcl_weather.skycolor = {
|
||||||
},
|
},
|
||||||
clouds = true,
|
clouds = true,
|
||||||
})
|
})
|
||||||
player:set_sun({visible = true, sunrise_visible = true})
|
set_sun(player, {visible = true, sunrise_visible = true})
|
||||||
player:set_moon({visible = true})
|
set_moon(player, {visible = true})
|
||||||
player:set_stars({visible = true})
|
set_stars(player, {visible = true})
|
||||||
mcl_weather.skycolor.override_day_night_ratio(player, nil)
|
mcl_weather.skycolor.override_day_night_ratio(player, nil)
|
||||||
else
|
else
|
||||||
-- Weather skies
|
-- Weather skies
|
||||||
local day_color = mcl_weather.skycolor.get_sky_layer_color(0.5)
|
local day_color = mcl_weather.skycolor.get_sky_layer_color(0.5)
|
||||||
local dawn_color = mcl_weather.skycolor.get_sky_layer_color(0.75)
|
local dawn_color = mcl_weather.skycolor.get_sky_layer_color(0.75)
|
||||||
local night_color = mcl_weather.skycolor.get_sky_layer_color(0)
|
local night_color = mcl_weather.skycolor.get_sky_layer_color(0)
|
||||||
player:set_sky({ type = "regular",
|
set_sky(player, {
|
||||||
|
type = "regular",
|
||||||
sky_color = {
|
sky_color = {
|
||||||
day_sky = day_color,
|
day_sky = day_color,
|
||||||
day_horizon = day_color,
|
day_horizon = day_color,
|
||||||
|
@ -115,9 +156,9 @@ mcl_weather.skycolor = {
|
||||||
},
|
},
|
||||||
clouds = true,
|
clouds = true,
|
||||||
})
|
})
|
||||||
player:set_sun({visible = false, sunrise_visible = false})
|
set_sun(player, {visible = false, sunrise_visible = false})
|
||||||
player:set_moon({visible = false})
|
set_moon(player, {visible = false})
|
||||||
player:set_stars({visible = false})
|
set_stars(player, {visible = false})
|
||||||
|
|
||||||
local lf = mcl_weather.get_current_light_factor()
|
local lf = mcl_weather.get_current_light_factor()
|
||||||
if mcl_weather.skycolor.current_layer_name() == "lightning" then
|
if mcl_weather.skycolor.current_layer_name() == "lightning" then
|
||||||
|
@ -136,32 +177,35 @@ mcl_weather.skycolor = {
|
||||||
end
|
end
|
||||||
elseif dim == "end" then
|
elseif dim == "end" then
|
||||||
local t = "mcl_playerplus_end_sky.png"
|
local t = "mcl_playerplus_end_sky.png"
|
||||||
player:set_sky({ type = "skybox",
|
set_sky(player, {
|
||||||
|
type = "skybox",
|
||||||
base_color = "#000000",
|
base_color = "#000000",
|
||||||
textures = {t,t,t,t,t,t},
|
textures = {t,t,t,t,t,t},
|
||||||
clouds = false,
|
clouds = false,
|
||||||
})
|
})
|
||||||
player:set_sun({visible = false , sunrise_visible = false})
|
set_sun(player, {visible = false , sunrise_visible = false})
|
||||||
player:set_moon({visible = false})
|
set_moon(player, {visible = false})
|
||||||
player:set_stars({visible = false})
|
set_stars(player, {visible = false})
|
||||||
mcl_weather.skycolor.override_day_night_ratio(player, 0.5)
|
mcl_weather.skycolor.override_day_night_ratio(player, 0.5)
|
||||||
elseif dim == "nether" then
|
elseif dim == "nether" then
|
||||||
player:set_sky({ type = "plain",
|
set_sky(player, {
|
||||||
|
type = "plain",
|
||||||
base_color = "#300808",
|
base_color = "#300808",
|
||||||
clouds = false,
|
clouds = false,
|
||||||
})
|
})
|
||||||
player:set_sun({visible = false , sunrise_visible = false})
|
set_sun(player, {visible = false , sunrise_visible = false})
|
||||||
player:set_moon({visible = false})
|
set_moon(player, {visible = false})
|
||||||
player:set_stars({visible = false})
|
set_stars(player, {visible = false})
|
||||||
mcl_weather.skycolor.override_day_night_ratio(player, nil)
|
mcl_weather.skycolor.override_day_night_ratio(player, nil)
|
||||||
elseif dim == "void" then
|
elseif dim == "void" then
|
||||||
player:set_sky({ type = "plain",
|
set_sky(player, {
|
||||||
|
type = "plain",
|
||||||
base_color = "#000000",
|
base_color = "#000000",
|
||||||
clouds = false,
|
clouds = false,
|
||||||
})
|
})
|
||||||
player:set_sun({visible = false, sunrise_visible = false})
|
set_sun(player, {visible = false, sunrise_visible = false})
|
||||||
player:set_moon({visible = false})
|
set_moon(player, {visible = false})
|
||||||
player:set_stars({visible = false})
|
set_stars(player, {visible = false})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name = doc
|
name = doc
|
||||||
author = Wuzzy
|
author = Wuzzy
|
||||||
description = A simple in-game documentation system which enables mods to add help entries based on templates.
|
description = A simple in-game documentation system which enables mods to add help entries based on templates.
|
||||||
optional_depends = unified_inventory, sfinv_buttons, central_message, inventory_plus
|
optional_depends = unified_inventory, sfinv_buttons, central_message, inventory_plus, mcl_compatibility
|
||||||
|
|
|
@ -1080,10 +1080,10 @@ if progressive_mode then
|
||||||
if not awaiting_connection_player_names[name] then
|
if not awaiting_connection_player_names[name] then
|
||||||
local data = player_data[name]
|
local data = player_data[name]
|
||||||
local inv_items = get_inv_items(player)
|
local inv_items = get_inv_items(player)
|
||||||
local diff = table_diff(inv_items, data.inv_items)
|
local diff = table_diff(inv_items, data.inv_items or {})
|
||||||
|
|
||||||
if #diff > 0 then
|
if #diff > 0 then
|
||||||
data.inv_items = table_merge(diff, data.inv_items)
|
data.inv_items = table_merge(diff, data.inv_items or {})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -234,20 +234,6 @@ awards.register_achievement("mcl:fishyBusiness", {
|
||||||
icon = "mcl_fishing_fishing_rod.png",
|
icon = "mcl_fishing_fishing_rod.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
--Triggered in mcl_beacons
|
|
||||||
awards.register_achievement("mcl:beacon", {
|
|
||||||
title = S("Bring Home the Beacon"),
|
|
||||||
description = S("Use a beacon."),
|
|
||||||
icon = "beacon_achievement_icon.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
awards.register_achievement("mcl:maxed_beacon", {
|
|
||||||
title = S("Beaconator"),
|
|
||||||
description = S("Use a fully powered beacon."),
|
|
||||||
icon = "beacon_achievement_icon.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
-- Armor Advancements
|
-- Armor Advancements
|
||||||
--[[awards.register_achievement("mcl:suitUp", {
|
--[[awards.register_achievement("mcl:suitUp", {
|
||||||
title = S("Suit Up"),
|
title = S("Suit Up"),
|
||||||
|
|
|
@ -47,7 +47,3 @@ Use a crafting table to craft a wooden hoe from wooden planks and sticks.=Benutz
|
||||||
Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Benutzen Sie eine Werkbank, um eine Holzspitzhacke aus Holzplanken und Stöcken zu fertigen.
|
Use a crafting table to craft a wooden pickaxe from wooden planks and sticks.=Benutzen Sie eine Werkbank, um eine Holzspitzhacke aus Holzplanken und Stöcken zu fertigen.
|
||||||
Use obsidian and a fire starter to construct a Nether portal.=Benutzen Sie Obsidian und ein Feuerzeug, um ein Netherportal zu errichten.
|
Use obsidian and a fire starter to construct a Nether portal.=Benutzen Sie Obsidian und ein Feuerzeug, um ein Netherportal zu errichten.
|
||||||
Use wheat to craft a bread.=Benutzen Sie Weizen, um ein Brot zu machen.
|
Use wheat to craft a bread.=Benutzen Sie Weizen, um ein Brot zu machen.
|
||||||
Bring Home the Beacon=Den Nachbarn heimleuchten
|
|
||||||
Use a beacon.=Benutzen Sie ein Leuchtfeuer.
|
|
||||||
Beaconator=Leuchtturmwärter
|
|
||||||
Use a fully powered beacon.=Benutzen Sie ein vollständiges Leuchtfeuer.
|
|
|
@ -75,7 +75,3 @@ What A Deal!=
|
||||||
Successfully trade with a Villager.=
|
Successfully trade with a Villager.=
|
||||||
Tactical Fishing=
|
Tactical Fishing=
|
||||||
Catch a fish... without a fishing rod=
|
Catch a fish... without a fishing rod=
|
||||||
Bring Home the Beacon=
|
|
||||||
Use a beacon.=
|
|
||||||
Beaconator=
|
|
||||||
Use a fully powered beacon.=
|
|
|
@ -124,12 +124,12 @@ minetest.register_globalstep(function(dtime)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local bars = mcl_bossbars.bars[name]
|
local bars = mcl_bossbars.bars[name]
|
||||||
local huds = mcl_bossbars.huds[name]
|
local huds = mcl_bossbars.huds[name]
|
||||||
table.sort(bars, function(a, b) return a.priority < b.priority end)
|
table.sort(bars or {}, function(a, b) return a.priority < b.priority end)
|
||||||
local huds_new = {}
|
local huds_new = {}
|
||||||
local bars_new = {}
|
local bars_new = {}
|
||||||
local i = 0
|
local i = 0
|
||||||
|
|
||||||
while #huds > 0 or #bars > 0 do
|
while huds and bars and (#huds > 0 or #bars > 0) do
|
||||||
local bar = table.remove(bars, 1)
|
local bar = table.remove(bars, 1)
|
||||||
local hud = table.remove(huds, 1)
|
local hud = table.remove(huds, 1)
|
||||||
|
|
||||||
|
|
|
@ -12,17 +12,9 @@ local floor = math.floor
|
||||||
local minetest_get_gametime = minetest.get_gametime
|
local minetest_get_gametime = minetest.get_gametime
|
||||||
local get_voxel_manip = minetest.get_voxel_manip
|
local get_voxel_manip = minetest.get_voxel_manip
|
||||||
|
|
||||||
local min1, min2, min3
|
local min1, min2, min3 = mcl_mapgen.overworld.min, mcl_mapgen.end_.min, mcl_mapgen.nether.min
|
||||||
local max1, max2, max3
|
local max1, max2, max3 = mcl_mapgen.overworld.max, mcl_mapgen.end_.max, mcl_mapgen.nether.max + 128
|
||||||
local CS
|
local CS = mcl_mapgen.CS_NODES
|
||||||
|
|
||||||
local get_local_settings = function()
|
|
||||||
min1, min2, min3 = mcl_mapgen.overworld.min, mcl_mapgen.end_.min, mcl_mapgen.nether.min
|
|
||||||
max1, max2, max3 = mcl_mapgen.overworld.max, mcl_mapgen.end_.max, mcl_mapgen.nether.max+128
|
|
||||||
CS = mcl_mapgen.CS_NODES
|
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
local modname = minetest.get_current_modname()
|
||||||
local modpath = minetest.get_modpath(modname)
|
local modpath = minetest.get_modpath(modname)
|
||||||
|
|
|
@ -34,7 +34,7 @@ minetest.register_on_mods_loaded(function()
|
||||||
for name,def in pairs(minetest.registered_items) do
|
for name,def in pairs(minetest.registered_items) do
|
||||||
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then
|
if (not def.groups.not_in_creative_inventory or def.groups.not_in_creative_inventory == 0) and def.description and def.description ~= "" then
|
||||||
local function is_redstone(def)
|
local function is_redstone(def)
|
||||||
return def.mesecons or def.groups.mesecon or def.groups.mesecon_conductor_craftable or def.groups.mesecon_effector_off
|
return def.mesecons or def.groups.mesecon or def.groups.mesecon_conductor_craftable or def.groups.mesecon_effecor_off
|
||||||
end
|
end
|
||||||
local function is_tool(def)
|
local function is_tool(def)
|
||||||
return def.groups.tool or (def.tool_capabilities and def.tool_capabilities.damage_groups == nil)
|
return def.groups.tool or (def.tool_capabilities and def.tool_capabilities.damage_groups == nil)
|
||||||
|
|
|
@ -1,402 +0,0 @@
|
||||||
local S = minetest.get_translator(minetest.get_current_modname())
|
|
||||||
--[[
|
|
||||||
there are strings in meta, which are being used to see which effect will be given to the player(s)
|
|
||||||
Valid strings:
|
|
||||||
swiftness
|
|
||||||
leaping
|
|
||||||
strenght
|
|
||||||
regeneration
|
|
||||||
]]--
|
|
||||||
|
|
||||||
mcl_beacons = {
|
|
||||||
blocks ={"mcl_core:diamondblock","mcl_core:ironblock","mcl_core:goldblock","mcl_core:emeraldblock","mcl_nether:netheriteblock"},
|
|
||||||
fuel = {"mcl_core:diamond","mcl_core:emerald","mcl_core:iron_ingot","mcl_core:gold_ingot","mcl_nether:netherite_ingot"}
|
|
||||||
}
|
|
||||||
local beacon_blocklist = mcl_beacons.blocks
|
|
||||||
local beacon_fuellist = mcl_beacons.fuel
|
|
||||||
|
|
||||||
local pallete_order = {
|
|
||||||
glass_cyan = 1,
|
|
||||||
pane_cyan_flat = 1,
|
|
||||||
pane_cyan = 1,
|
|
||||||
|
|
||||||
glass_white = 2,
|
|
||||||
pane_white_flat = 2,
|
|
||||||
pane_white = 2,
|
|
||||||
|
|
||||||
glass_brown = 3,
|
|
||||||
pane_brown_flat = 3,
|
|
||||||
pane_brown = 3,
|
|
||||||
|
|
||||||
glass_blue = 4,
|
|
||||||
pane_blue_flat = 4,
|
|
||||||
pane_blue = 4,
|
|
||||||
|
|
||||||
glass_light_blue = 5,
|
|
||||||
pane_light_blue_flat = 5,
|
|
||||||
pane_light_blue = 5,
|
|
||||||
|
|
||||||
glass_pink = 6,
|
|
||||||
pane_pink_flat = 6,
|
|
||||||
pane_pink = 6,
|
|
||||||
|
|
||||||
glass_purple = 7,
|
|
||||||
pane_purple_flat = 7,
|
|
||||||
pane_purple = 7,
|
|
||||||
|
|
||||||
glass_red = 8,
|
|
||||||
pane_red_flat = 8,
|
|
||||||
pane_red = 8,
|
|
||||||
|
|
||||||
glass_silver = 9,
|
|
||||||
pane_silver_flat = 9,
|
|
||||||
pane_silver = 9,
|
|
||||||
|
|
||||||
glass_gray = 10,
|
|
||||||
pane_gray_flat = 10,
|
|
||||||
pane_gray = 10,
|
|
||||||
|
|
||||||
glass_lime = 11,
|
|
||||||
pane_lime_flat = 11,
|
|
||||||
pane_lime = 11,
|
|
||||||
|
|
||||||
glass_green = 12,
|
|
||||||
pane_green_flat = 12,
|
|
||||||
pane_green = 12,
|
|
||||||
|
|
||||||
glass_orange = 13,
|
|
||||||
pane_orange_flat = 13,
|
|
||||||
pane_orange = 13,
|
|
||||||
|
|
||||||
glass_yellow = 14,
|
|
||||||
pane_yellow_flat = 14,
|
|
||||||
pane_yellow = 14,
|
|
||||||
|
|
||||||
glass_black = 15,
|
|
||||||
pane_black_flat = 15,
|
|
||||||
pane_black = 15,
|
|
||||||
|
|
||||||
glass_magenta = 16,
|
|
||||||
pane_magenta_flat = 16,
|
|
||||||
pane_magenta = 16
|
|
||||||
}
|
|
||||||
|
|
||||||
local function get_beacon_beam(glass_nodename)
|
|
||||||
if glass_nodename == "air" then return 0 end
|
|
||||||
local glass_string = glass_nodename:split(':')[2]
|
|
||||||
if not pallete_order[glass_string] then return 0 end
|
|
||||||
return pallete_order[glass_string]
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node("mcl_beacons:beacon_beam", {
|
|
||||||
tiles = {"^[colorize:#b8bab9"},
|
|
||||||
drawtype = "nodebox",
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-0.1250, -0.5000, -0.1250, 0.1250, 0.5000, 0.1250}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
pointable= false,
|
|
||||||
light_source = 14,
|
|
||||||
walkable = false,
|
|
||||||
groups = {not_in_creative_inventory=1},
|
|
||||||
_mcl_blast_resistance = 1200,
|
|
||||||
paramtype2 = "color",
|
|
||||||
palette = "beacon_beam_palette.png",
|
|
||||||
palette_index = 0,
|
|
||||||
buildable_to = true,
|
|
||||||
})
|
|
||||||
|
|
||||||
mesecon.register_mvps_stopper("mcl_beacons:beacon_beam")
|
|
||||||
|
|
||||||
local formspec_string=
|
|
||||||
"size[11,14]"..
|
|
||||||
|
|
||||||
"label[4.5,0.5;"..minetest.formspec_escape(S("Beacon:")).."]"..
|
|
||||||
"label[0.5,1;"..minetest.formspec_escape(S("Primary Power:")).."]"..
|
|
||||||
"label[0.5,8.25;"..minetest.formspec_escape( S("Inventory:")).."]"..
|
|
||||||
|
|
||||||
"image[1,1.5;1,1;custom_beacom_symbol_4.png]"..
|
|
||||||
"image[1,3;1,1;custom_beacom_symbol_3.png]"..
|
|
||||||
"image[1,4.5;1,1;custom_beacom_symbol_2.png]"..
|
|
||||||
"image[1,6;1,1;custom_beacom_symbol_1.png]"..
|
|
||||||
|
|
||||||
"image_button[5.2,1.5;1,1;mcl_potions_effect_swift.png;swiftness;]"..
|
|
||||||
"image_button[5.2,3;1,1;mcl_potions_effect_leaping.png;leaping;]"..
|
|
||||||
"image_button[5.2,4.5;1,1;mcl_potions_effect_strong.png;strenght;]"..
|
|
||||||
"image_button[5.2,6;1,1;mcl_potions_effect_regenerating.png;regeneration;]"..
|
|
||||||
|
|
||||||
"item_image[1,7;1,1;mcl_core:diamond]"..
|
|
||||||
"item_image[2.2,7;1,1;mcl_core:emerald]"..
|
|
||||||
"item_image[3.4,7;1,1;mcl_core:iron_ingot]"..
|
|
||||||
"item_image[4.6,7;1,1;mcl_core:gold_ingot]"..
|
|
||||||
"item_image[5.8,7;1,1;mcl_nether:netherite_ingot]"..
|
|
||||||
|
|
||||||
mcl_formspec.get_itemslot_bg(7.2,7,1,1)..
|
|
||||||
"list[context;input;7.2,7;1,1;]"..
|
|
||||||
mcl_formspec.get_itemslot_bg(1,9,9,3)..
|
|
||||||
"list[current_player;main;1,9;9,3;9]"..
|
|
||||||
mcl_formspec.get_itemslot_bg(1,12.5,9,1)..
|
|
||||||
"list[current_player;main;1,12.5;9,1;]"
|
|
||||||
|
|
||||||
local function remove_beacon_beam(pos)
|
|
||||||
for y=pos.y, pos.y+301 do
|
|
||||||
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
|
||||||
if node.name ~= "air" and node.name ~= "mcl_core:bedrock" and node.name ~= "mcl_core:void" then
|
|
||||||
if node.name == "ignore" then
|
|
||||||
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
|
|
||||||
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
|
||||||
end
|
|
||||||
|
|
||||||
if node.name == "mcl_beacons:beacon_beam" then
|
|
||||||
minetest.remove_node({x=pos.x,y=y,z=pos.z})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function beacon_blockcheck(pos)
|
|
||||||
for y_offset = 1,4 do
|
|
||||||
local block_y = pos.y - y_offset
|
|
||||||
for block_x = (pos.x-y_offset),(pos.x+y_offset) do
|
|
||||||
for block_z = (pos.z-y_offset),(pos.z+y_offset) do
|
|
||||||
local valid_block = false --boolean which stores if block is valid or not
|
|
||||||
for _, beacon_block in pairs(beacon_blocklist) do
|
|
||||||
if beacon_block == minetest.get_node({x=block_x,y=block_y,z=block_z}).name and not valid_block then --is the block in the pyramid a valid beacon block
|
|
||||||
valid_block =true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not valid_block then
|
|
||||||
return y_offset -1 --the last layer is complete, this one is missing or incomplete
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if y_offset == 4 then --all checks are done, beacon is maxed
|
|
||||||
return y_offset
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function effect_player(effect,pos,power_level, effect_level,player)
|
|
||||||
local distance = vector.distance(player:get_pos(), pos)
|
|
||||||
if distance > (power_level+1)*10 then return end
|
|
||||||
if effect == "swiftness" then
|
|
||||||
mcl_potions.swiftness_func(player,effect_level,16)
|
|
||||||
elseif effect == "leaping" then
|
|
||||||
mcl_potions.leaping_func(player, effect_level, 16)
|
|
||||||
elseif effect == "strenght" then
|
|
||||||
mcl_potions.strength_func(player, effect_level, 16)
|
|
||||||
elseif effect == "regeneration" then
|
|
||||||
mcl_potions.regeneration_func(player, effect_level, 16)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function globalstep_function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local power_level = beacon_blockcheck(pos)
|
|
||||||
local effect_string = meta:get_string("effect")
|
|
||||||
if meta:get_int("effect_level") == 2 and power_level < 4 then
|
|
||||||
return
|
|
||||||
else
|
|
||||||
local obstructed = false
|
|
||||||
for y=pos.y+1, pos.y+100 do
|
|
||||||
|
|
||||||
local nodename = minetest.get_node({x=pos.x,y=y, z = pos.z}).name
|
|
||||||
if nodename ~= "mcl_core:bedrock" and nodename ~= "air" and nodename ~= "mcl_core:void" and nodename ~= "ignore" then --ignore means not loaded, let's just assume that's air
|
|
||||||
if nodename ~="mcl_beacons:beacon_beam" then
|
|
||||||
if minetest.get_item_group(nodename,"glass") == 0 and minetest.get_item_group(nodename,"material_glass") == 0 then
|
|
||||||
obstructed = true
|
|
||||||
remove_beacon_beam(pos)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if obstructed then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
effect_player(effect_string,pos,power_level,meta:get_int("effect_level"),player)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_node("mcl_beacons:beacon", {
|
|
||||||
description = S"Beacon",
|
|
||||||
drawtype = "mesh",
|
|
||||||
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
||||||
mesh = "mcl_beacon.b3d",
|
|
||||||
tiles = {"beacon_UV.png"},
|
|
||||||
use_texture_alpha = "clip",
|
|
||||||
on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("input", 1)
|
|
||||||
local form = formspec_string
|
|
||||||
meta:set_string("formspec", form)
|
|
||||||
end,
|
|
||||||
on_destruct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local input = meta:get_inventory():get_stack("input",1)
|
|
||||||
if not input:is_empty() then
|
|
||||||
local p = {x=pos.x+math.random(0, 10)/10-0.5, y=pos.y, z=pos.z+math.random(0, 10)/10-0.5} --from mcl_anvils
|
|
||||||
minetest.add_item(p, input)
|
|
||||||
end
|
|
||||||
remove_beacon_beam(pos)
|
|
||||||
end,
|
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
|
||||||
if fields.swiftness or fields.regeneration or fields.leaping or fields.strenght then
|
|
||||||
local sender_name = sender:get_player_name()
|
|
||||||
local power_level = beacon_blockcheck(pos)
|
|
||||||
if minetest.is_protected(pos, sender_name) then
|
|
||||||
minetest.record_protection_violation(pos, sender_name)
|
|
||||||
return
|
|
||||||
elseif power_level == 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local input = inv:get_stack("input",1)
|
|
||||||
|
|
||||||
if input:is_empty() then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local valid_item = false
|
|
||||||
|
|
||||||
for _, item in ipairs(beacon_fuellist) do
|
|
||||||
if input:get_name() == item then
|
|
||||||
valid_item = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not valid_item then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local successful = false
|
|
||||||
if fields.swiftness then
|
|
||||||
if power_level == 4 then
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",2)
|
|
||||||
else
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",1)
|
|
||||||
end
|
|
||||||
minetest.get_meta(pos):set_string("effect","swiftness")
|
|
||||||
successful = true
|
|
||||||
elseif fields.leaping and power_level >= 2 then
|
|
||||||
if power_level == 4 then
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",2)
|
|
||||||
else
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",1)
|
|
||||||
end
|
|
||||||
minetest.get_meta(pos):set_string("effect","leaping")
|
|
||||||
successful = true
|
|
||||||
elseif fields.strenght and power_level >= 3 then
|
|
||||||
if power_level == 4 then
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",2)
|
|
||||||
else
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",1)
|
|
||||||
end
|
|
||||||
minetest.get_meta(pos):set_string("effect","strenght")
|
|
||||||
successful = true
|
|
||||||
elseif fields.regeneration and power_level == 4 then
|
|
||||||
minetest.get_meta(pos):set_int("effect_level",2)
|
|
||||||
minetest.get_meta(pos):set_string("effect","regeneration")
|
|
||||||
successful = true
|
|
||||||
end
|
|
||||||
if successful then
|
|
||||||
if power_level == 4 then
|
|
||||||
awards.unlock(sender:get_player_name(),"mcl:maxed_beacon")
|
|
||||||
end
|
|
||||||
awards.unlock(sender:get_player_name(),"mcl:beacon")
|
|
||||||
input:take_item()
|
|
||||||
inv:set_stack("input",1,input)
|
|
||||||
|
|
||||||
local beam_palette_index = 0
|
|
||||||
remove_beacon_beam(pos)
|
|
||||||
for y = pos.y +1, pos.y + 201 do
|
|
||||||
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
|
||||||
if node.name == ignore then
|
|
||||||
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
|
|
||||||
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
if minetest.get_item_group(node.name, "glass") ~= 0 or minetest.get_item_group(node.name,"material_glass") ~= 0 then
|
|
||||||
beam_palette_index = get_beacon_beam(node.name)
|
|
||||||
end
|
|
||||||
|
|
||||||
if node.name == "air" then
|
|
||||||
minetest.set_node({x=pos.x,y=y,z=pos.z},{name="mcl_beacons:beacon_beam",param2=beam_palette_index})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
globalstep_function(pos,sender)--call it once outside the globalstep so the player gets the effect right after selecting it
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
light_source = 14,
|
|
||||||
groups = {handy=1},
|
|
||||||
drop = "mcl_beacons:beacon",
|
|
||||||
sounds = mcl_sounds.node_sound_glass_defaults(),
|
|
||||||
_mcl_hardness = 3,
|
|
||||||
})
|
|
||||||
|
|
||||||
mesecon.register_mvps_stopper("mcl_beacons:beacon")
|
|
||||||
mcl_wip.register_wip_item("mcl_beacons:beacon")
|
|
||||||
|
|
||||||
function register_beaconblock (itemstring)--API function for other mods
|
|
||||||
table.insert(beacon_blocklist, itemstring)
|
|
||||||
end
|
|
||||||
|
|
||||||
function register_beaconfuel(itemstring)
|
|
||||||
table.insert(beacon_fuellist, itemstring)
|
|
||||||
end
|
|
||||||
|
|
||||||
local timer = 0
|
|
||||||
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
timer = timer + dtime
|
|
||||||
if timer >= 3 then
|
|
||||||
for _, player in ipairs(minetest.get_connected_players()) do
|
|
||||||
local player_pos = player:get_pos()
|
|
||||||
local pos_list = minetest.find_nodes_in_area({x=player_pos.x-50, y=player_pos.y-50, z=player_pos.z-50}, {x=player_pos.x+50, y=player_pos.y+50, z=player_pos.z+50},"mcl_beacons:beacon")
|
|
||||||
for _, pos in ipairs(pos_list) do
|
|
||||||
globalstep_function(pos,player)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
timer = 0
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_abm{
|
|
||||||
label="update beacon beam",
|
|
||||||
nodenames = {"mcl_beacons:beacon_beam"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos)
|
|
||||||
local node_below = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
|
||||||
local node_above = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
|
||||||
local node_current = minetest.get_node(pos)
|
|
||||||
|
|
||||||
if node_below.name == "air" then
|
|
||||||
if minetest.get_node({x=pos.x,y=pos.y-2,z=pos.z}).name == "mcl_beacons:beacon" then
|
|
||||||
minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="mcl_beacons:beacon_beam",param2=0})
|
|
||||||
end
|
|
||||||
remove_beacon_beam(pos)
|
|
||||||
elseif node_above.name == "air" or (node_above.name == "mcl_beacons:beacon_beam" and node_above.param2 ~= node_current.param2) then
|
|
||||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="mcl_beacons:beacon_beam",param2=node_current.param2})
|
|
||||||
elseif minetest.get_item_group(node_above.name, "glass") ~= 0 or minetest.get_item_group(node_above.name,"material_glass") ~= 0 then
|
|
||||||
minetest.set_node({x=pos.x,y=pos.y+2,z=pos.z},{name="mcl_beacons:beacon_beam",param2=get_beacon_beam(node_above.name)})
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "mcl_beacons:beacon",
|
|
||||||
recipe = {
|
|
||||||
{"mcl_core:glass", "mcl_core:glass", "mcl_core:glass"},
|
|
||||||
{"mcl_core:glass", "mcl_mobitems:nether_star", "mcl_core:glass"},
|
|
||||||
{"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}
|
|
||||||
}
|
|
||||||
})
|
|
|
@ -1,5 +0,0 @@
|
||||||
# textdomain: mcl_beacons
|
|
||||||
Beacon=Leuchtfeuer
|
|
||||||
Beacon:=Leuchtfeuer:
|
|
||||||
Primary Power:=Primäre Kraft:
|
|
||||||
Inventory:=Inventar:
|
|
|
@ -1,5 +0,0 @@
|
||||||
# textdomain: mcl_beacons
|
|
||||||
Beacon=
|
|
||||||
Beacon:=
|
|
||||||
Primary Power:=
|
|
||||||
Inventory:=
|
|
|
@ -1,2 +0,0 @@
|
||||||
author=chmodsayshello
|
|
||||||
depends=mcl_formspec, mcl_init, mcl_wip, mesecons_mvps, mcl_core, mcl_sounds, awards, mcl_achievements, mcl_mobitems, mcl_nether
|
|
Before Width: | Height: | Size: 1014 B |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 624 B |
Before Width: | Height: | Size: 635 B |
Before Width: | Height: | Size: 635 B |
Before Width: | Height: | Size: 641 B |
Before Width: | Height: | Size: 635 B |
|
@ -251,7 +251,7 @@ mcl_stairs.register_stair_and_slab_simple("blackstone", "mcl_blackstone:blacksto
|
||||||
mcl_stairs.register_stair_and_slab_simple("blackstone_polished", "mcl_blackstone:blackstone_polished", S("Polished Blackstone Stair"), S("Polished Blackstone Slab"), S("Polished Double Blackstone Slab"))
|
mcl_stairs.register_stair_and_slab_simple("blackstone_polished", "mcl_blackstone:blackstone_polished", S("Polished Blackstone Stair"), S("Polished Blackstone Slab"), S("Polished Double Blackstone Slab"))
|
||||||
|
|
||||||
|
|
||||||
mcl_stairs.register_stair_and_slab_simple("blackstone_chiseled_polished", "mcl_blackstone:blackstone_chiseled_polished", S("Chiseled Polished Blackstone Stair"), S("Chiseled Polished Blackstone Slab"), S("Double Polished Chiseled Blackstone Slab"))
|
mcl_stairs.register_stair_and_slab_simple("blackstone_chiseled_polished", "mcl_blackstone:blackstone_chiseled_polished", S("Polished Chiseled Blackstone Stair"), S("Chiseled Polished Blackstone Slab"), S("Double Polished Chiseled Blackstone Slab"))
|
||||||
|
|
||||||
|
|
||||||
mcl_stairs.register_stair_and_slab_simple("blackstone_brick_polished", "mcl_blackstone:blackstone_brick_polished", S("Polished Blackstone Brick Stair"), S("Polished Blackstone Brick Slab"), S("Double Polished Blackstone Brick Slab"))
|
mcl_stairs.register_stair_and_slab_simple("blackstone_brick_polished", "mcl_blackstone:blackstone_brick_polished", S("Polished Blackstone Brick Stair"), S("Polished Blackstone Brick Slab"), S("Double Polished Blackstone Brick Slab"))
|
||||||
|
|
|
@ -510,8 +510,8 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_alias("mcl_furnaces:blast_furnace", "mcl_blast_furnace:blast_furnace")
|
minetest.register_alias("mcl_blast_furnace:blast_furnace", "mcl_furnaces:blast_furnace")
|
||||||
minetest.register_alias("mcl_furnaces:blast_furnace_active", "mcl_blast_furnace:blast_furnace_active")
|
minetest.register_alias("mcl_blast_furnace:blast_furnace_active", "mcl_furnaces:blast_furnace_active")
|
||||||
|
|
||||||
-- Add entry alias for the Help
|
-- Add entry alias for the Help
|
||||||
if minetest.get_modpath("doc") then
|
if minetest.get_modpath("doc") then
|
||||||
|
|
|
@ -507,6 +507,7 @@ function ARROW_ENTITY.on_activate(self, staticdata, dtime_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_on_respawnplayer(function(player)
|
minetest.register_on_respawnplayer(function(player)
|
||||||
|
if not player.get_children then return end
|
||||||
for _, obj in pairs(player:get_children()) do
|
for _, obj in pairs(player:get_children()) do
|
||||||
local ent = obj:get_luaentity()
|
local ent = obj:get_luaentity()
|
||||||
if ent and ent.name and string.find(ent.name, "mcl_bows:arrow_entity") then
|
if ent and ent.name and string.find(ent.name, "mcl_bows:arrow_entity") then
|
||||||
|
|
|
@ -91,7 +91,7 @@ minetest.register_craftitem("mcl_farming:potato_item", {
|
||||||
_doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."),
|
_doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."),
|
||||||
_doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."),
|
_doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."),
|
||||||
inventory_image = "farming_potato.png",
|
inventory_image = "farming_potato.png",
|
||||||
groups = { food = 2, eatable = 1, compostability=65, smoker_cookable=1 },
|
groups = { food = 2, eatable = 1, compostability=65 },
|
||||||
_mcl_saturation = 0.6,
|
_mcl_saturation = 0.6,
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
on_secondary_use = minetest.item_eat(1),
|
on_secondary_use = minetest.item_eat(1),
|
||||||
|
|
|
@ -20,7 +20,7 @@ end
|
||||||
-- Warped fungus
|
-- Warped fungus
|
||||||
-- Crimson fungus
|
-- Crimson fungus
|
||||||
-- Nether woods
|
-- Nether woods
|
||||||
-- Functions
|
-- Functions and Biomes
|
||||||
|
|
||||||
-- WARNING: The most comments are in german. Please Translate with an translater if you don't speak good german
|
-- WARNING: The most comments are in german. Please Translate with an translater if you don't speak good german
|
||||||
|
|
||||||
|
@ -834,3 +834,108 @@ function generate_crimson_tree(pos)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--[[
|
||||||
|
FIXME: Biomes are to rare
|
||||||
|
FIXME: Decoration don't do generate
|
||||||
|
WARNING: Outdatet, the biomes gernerate now different, with Ores
|
||||||
|
-- biomes in test!
|
||||||
|
minetest.register_biome({
|
||||||
|
name = "WarpedForest",
|
||||||
|
node_filler = "mcl_nether:netherrack",
|
||||||
|
node_stone = "mcl_nether:netherrack",
|
||||||
|
node_top = "mcl_mushroom:warped_nylium",
|
||||||
|
node_water = "air",
|
||||||
|
node_river_water = "air",
|
||||||
|
y_min = -29065,
|
||||||
|
y_max = -28940,
|
||||||
|
heat_point = 100,
|
||||||
|
humidity_point = 0,
|
||||||
|
_mcl_biome_type = "hot",
|
||||||
|
_mcl_palette_index = 19,
|
||||||
|
})
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"mcl_mushroom:warped_nylium"},
|
||||||
|
sidelen = 16,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.01,
|
||||||
|
scale = 0.0022,
|
||||||
|
spread = {x = 250, y = 250, z = 250},
|
||||||
|
seed = 2,
|
||||||
|
octaves = 3,
|
||||||
|
persist = 0.66
|
||||||
|
},
|
||||||
|
biomes = {"WarpedForest"},
|
||||||
|
y_min = -29065,
|
||||||
|
y_max = -28940 + 80,
|
||||||
|
decoration = "mcl_mushroom:warped_fungus",
|
||||||
|
})
|
||||||
|
]]
|
||||||
|
minetest.register_ore({
|
||||||
|
ore_type = "sheet",
|
||||||
|
ore = "mcl_mushroom:warped_checknode",
|
||||||
|
-- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally
|
||||||
|
-- in v6, but instead set with the on_generated function in mcl_mapgen_core.
|
||||||
|
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
|
||||||
|
clust_scarcity = 14 * 14 * 14,
|
||||||
|
clust_size = 10,
|
||||||
|
y_min = -29065,
|
||||||
|
y_max = -28940,
|
||||||
|
noise_threshold = 0.0,
|
||||||
|
noise_params = {
|
||||||
|
offset = 0.5,
|
||||||
|
scale = 0.1,
|
||||||
|
spread = {x = 8, y = 8, z = 8},
|
||||||
|
seed = 4996,
|
||||||
|
octaves = 1,
|
||||||
|
persist = 0.0
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_ore({
|
||||||
|
ore_type = "sheet",
|
||||||
|
ore = "mcl_mushroom:crimson_checknode",
|
||||||
|
-- Note: Stone is included only for v6 mapgen support. Netherrack is not generated naturally
|
||||||
|
-- in v6, but instead set with the on_generated function in mcl_mapgen_core.
|
||||||
|
wherein = {"mcl_nether:netherrack", "mcl_core:stone"},
|
||||||
|
clust_scarcity = 10 * 10 * 10,
|
||||||
|
clust_size = 10,
|
||||||
|
y_min = -29065,
|
||||||
|
y_max = -28940,
|
||||||
|
noise_threshold = 0.0,
|
||||||
|
noise_params = {
|
||||||
|
offset = 1,
|
||||||
|
scale = 0.5,
|
||||||
|
spread = {x = 12, y = 12, z = 12},
|
||||||
|
seed = 12948,
|
||||||
|
octaves = 1,
|
||||||
|
persist = 0.0
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"mcl_mushroom:warped_nylium"},
|
||||||
|
sidelen = 16,
|
||||||
|
fill_ratio = 0.1,
|
||||||
|
biomes = {"Nether"},
|
||||||
|
y_max = -28940,
|
||||||
|
y_min = -29065,
|
||||||
|
decoration = "mcl_mushroom:warped_fungus",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_decoration({
|
||||||
|
deco_type = "simple",
|
||||||
|
place_on = {"mcl_mushroom:crimson_nylium"},
|
||||||
|
sidelen = 16,
|
||||||
|
fill_ratio = 0.1,
|
||||||
|
biomes = {"Nether"},
|
||||||
|
y_max = -28940,
|
||||||
|
y_min = -29065,
|
||||||
|
decoration = "mcl_mushroom:crimson_fungus",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
|
@ -27,34 +27,8 @@ local DELAY = 3 -- seconds before teleporting in Nether portal in Survival mo
|
||||||
local DISTANCE_MAX = 128
|
local DISTANCE_MAX = 128
|
||||||
local PORTAL = "mcl_portals:portal"
|
local PORTAL = "mcl_portals:portal"
|
||||||
local OBSIDIAN = "mcl_core:obsidian"
|
local OBSIDIAN = "mcl_core:obsidian"
|
||||||
local O_Y_MIN, O_Y_MAX
|
local O_Y_MIN, O_Y_MAX = max(mcl_mapgen.overworld.min, -31), min(mcl_mapgen.overworld.max, 2048)
|
||||||
local N_Y_MIN, N_Y_MAX
|
local N_Y_MIN, N_Y_MAX = mcl_mapgen.nether.bedrock_bottom_min, mcl_mapgen.nether.bedrock_top_min - H_MIN
|
||||||
|
|
||||||
local overworld_lava_max
|
|
||||||
local nether_lava_max
|
|
||||||
local overworld_min
|
|
||||||
local limits
|
|
||||||
|
|
||||||
local get_local_settings = function()
|
|
||||||
O_Y_MIN, O_Y_MAX = max(mcl_mapgen.overworld.min, -31), min(mcl_mapgen.overworld.max, 2048)
|
|
||||||
N_Y_MIN, N_Y_MAX = mcl_mapgen.nether.bedrock_bottom_min, mcl_mapgen.nether.bedrock_top_min - H_MIN
|
|
||||||
overworld_min = mcl_mapgen.overworld.min
|
|
||||||
overworld_lava_max = mcl_mapgen.overworld.lava_max
|
|
||||||
nether_lava_max = mcl_mapgen.nether.lava_max
|
|
||||||
|
|
||||||
limits = {
|
|
||||||
nether = {
|
|
||||||
pmin = {x=LIM_MIN, y = N_Y_MIN, z = LIM_MIN},
|
|
||||||
pmax = {x=LIM_MAX, y = N_Y_MAX, z = LIM_MAX},
|
|
||||||
},
|
|
||||||
overworld = {
|
|
||||||
pmin = {x=LIM_MIN, y = O_Y_MIN, z = LIM_MIN},
|
|
||||||
pmax = {x=LIM_MAX, y = O_Y_MAX, z = LIM_MAX},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
-- Alpha and particles
|
-- Alpha and particles
|
||||||
local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none"
|
local node_particles_allowed = minetest.settings:get("mcl_node_particles") or "none"
|
||||||
|
@ -105,6 +79,17 @@ local get_us_time = minetest.get_us_time
|
||||||
|
|
||||||
local dimension_to_teleport = { nether = "overworld", overworld = "nether" }
|
local dimension_to_teleport = { nether = "overworld", overworld = "nether" }
|
||||||
|
|
||||||
|
local limits = {
|
||||||
|
nether = {
|
||||||
|
pmin = {x=LIM_MIN, y = N_Y_MIN, z = LIM_MIN},
|
||||||
|
pmax = {x=LIM_MAX, y = N_Y_MAX, z = LIM_MAX},
|
||||||
|
},
|
||||||
|
overworld = {
|
||||||
|
pmin = {x=LIM_MIN, y = O_Y_MIN, z = LIM_MIN},
|
||||||
|
pmax = {x=LIM_MAX, y = O_Y_MAX, z = LIM_MAX},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
-- This function registers exits from Nether portals.
|
-- This function registers exits from Nether portals.
|
||||||
-- Incoming verification performed: two nodes must be portal nodes, and an obsidian below them.
|
-- Incoming verification performed: two nodes must be portal nodes, and an obsidian below them.
|
||||||
-- If the verification passes - position adds to the table and saves to mod storage on exit.
|
-- If the verification passes - position adds to the table and saves to mod storage on exit.
|
||||||
|
@ -179,7 +164,7 @@ local function find_exit(p, dx, dy, dz)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- This function searches Nether portal nodes within distance specified and checks the node
|
-- This functon searches Nether portal nodes whitin distance specified and checks the node
|
||||||
local function find_exit_with_check(p, dx, dy, dz)
|
local function find_exit_with_check(p, dx, dy, dz)
|
||||||
while true do
|
while true do
|
||||||
local pos = find_exit(p, dx, dy, dz)
|
local pos = find_exit(p, dx, dy, dz)
|
||||||
|
@ -196,7 +181,7 @@ local function find_exit_with_check(p, dx, dy, dz)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Ping-Pong the coordinate for Fast Traveling, https://git.minetest.land/Wuzzy/MineClone2/issues/795#issuecomment-11058
|
-- Ping-Pong the coordinate for Fast Travelling, https://git.minetest.land/Wuzzy/MineClone2/issues/795#issuecomment-11058
|
||||||
local function ping_pong(x, m, l1, l2)
|
local function ping_pong(x, m, l1, l2)
|
||||||
if x < 0 then
|
if x < 0 then
|
||||||
return l1 + abs(((x*m+l1) % (l1*4)) - (l1*2)), floor(x*m/l1/2) + ((ceil(x*m/l1)+1)%2) * ((x*m)%l1)/l1
|
return l1 + abs(((x*m+l1) % (l1*4)) - (l1*2)), floor(x*m/l1/2) + ((ceil(x*m/l1)+1)%2) * ((x*m)%l1)/l1
|
||||||
|
@ -436,9 +421,9 @@ end
|
||||||
|
|
||||||
local function get_lava_level(pos, pos1, pos2)
|
local function get_lava_level(pos, pos1, pos2)
|
||||||
if pos.y > -1000 then
|
if pos.y > -1000 then
|
||||||
return max(min(overworld_lava_max, pos2.y-1), pos1.y+1)
|
return max(min(mcl_mapgen.overworld.lava_max, pos2.y-1), pos1.y+1)
|
||||||
end
|
end
|
||||||
return max(min(nether_lava_max, pos2.y-1), pos1.y+1)
|
return max(min(mcl_mapgen.nether.lava_max, pos2.y-1), pos1.y+1)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function ecb_scan_area_2(blockpos, action, calls_remaining, param)
|
local function ecb_scan_area_2(blockpos, action, calls_remaining, param)
|
||||||
|
@ -761,7 +746,7 @@ minetest.register_abm({
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if lower_node_name == OBSIDIAN and pos.y >= overworld_min and random(1, 750) == 19 then
|
if lower_node_name == OBSIDIAN and pos.y >= mcl_mapgen.overworld.min and random(1, 750) == 19 then
|
||||||
local pigman_obj = minetest.add_entity(pos, "mobs_mc:pigman")
|
local pigman_obj = minetest.add_entity(pos, "mobs_mc:pigman")
|
||||||
if pigman_obj then
|
if pigman_obj then
|
||||||
teleport_cooloff(pigman_obj)
|
teleport_cooloff(pigman_obj)
|
||||||
|
|
|
@ -509,8 +509,8 @@ minetest.register_craft({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_alias("mcl_furnaces:smoker", "mcl_smoker:smoker")
|
minetest.register_alias("mcl_smoker:smoker", "mcl_furnaces:smoker")
|
||||||
minetest.register_alias("mcl_furnaces:smoker_active", "mcl_smoker:smoker_active")
|
minetest.register_alias("mcl_smoker:smoker_active", "mcl_furnaces:smoker_active")
|
||||||
|
|
||||||
-- Add entry alias for the Help
|
-- Add entry alias for the Help
|
||||||
if minetest.get_modpath("doc") then
|
if minetest.get_modpath("doc") then
|
||||||
|
|
|
@ -8,8 +8,6 @@ local generate_fallen_logs = minetest.settings:get_bool("mcl_generate_fallen_log
|
||||||
local mod_mcl_structures = minetest.get_modpath("mcl_structures")
|
local mod_mcl_structures = minetest.get_modpath("mcl_structures")
|
||||||
local mod_mcl_core = minetest.get_modpath("mcl_core")
|
local mod_mcl_core = minetest.get_modpath("mcl_core")
|
||||||
local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms")
|
local mod_mcl_mushrooms = minetest.get_modpath("mcl_mushrooms")
|
||||||
local mod_mcl_mushroom = minetest.get_modpath("mcl_mushroom")
|
|
||||||
local mod_mcl_blackstone = minetest.get_modpath("mcl_blackstone")
|
|
||||||
|
|
||||||
-- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves
|
-- Jungle bush schematic. In PC/Java Edition it's Jungle Wood + Oak Leaves
|
||||||
local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts"
|
local jungle_bush_schematic = mod_mcl_core.."/schematics/mcl_core_jungle_bush_oak_leaves.mts"
|
||||||
|
@ -1484,12 +1482,6 @@ end
|
||||||
|
|
||||||
-- Register biomes of non-Overworld biomes
|
-- Register biomes of non-Overworld biomes
|
||||||
local function register_dimension_biomes()
|
local function register_dimension_biomes()
|
||||||
--mcl2 schematic compat
|
|
||||||
minetest.register_alias("mcl_crimson:warped_wart_block", "mcl_mushroom:warped_wart_block")
|
|
||||||
minetest.register_alias("mcl_crimson:warped_hyphae", "mcl_mushroom:warped_hyphae")
|
|
||||||
minetest.register_alias("mcl_crimson:shroomlight", "mcl_mushroom:shroomlight")
|
|
||||||
minetest.register_alias("mcl_crimson:crimson_hyphae", "mcl_mushroom:crimson_hyphae")
|
|
||||||
|
|
||||||
--[[ REALMS ]]
|
--[[ REALMS ]]
|
||||||
|
|
||||||
--[[ THE NETHER ]]
|
--[[ THE NETHER ]]
|
||||||
|
@ -1501,7 +1493,8 @@ local function register_dimension_biomes()
|
||||||
node_river_water = "air",
|
node_river_water = "air",
|
||||||
node_cave_liquid = "air",
|
node_cave_liquid = "air",
|
||||||
y_min = mcl_mapgen.nether.min,
|
y_min = mcl_mapgen.nether.min,
|
||||||
|
-- FIXME: For some reason the Nether stops generating early if this constant is not added.
|
||||||
|
-- Figure out why.
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
y_max = mcl_mapgen.nether.max + 80,
|
||||||
heat_point = 100,
|
heat_point = 100,
|
||||||
humidity_point = 0,
|
humidity_point = 0,
|
||||||
|
@ -1509,176 +1502,6 @@ local function register_dimension_biomes()
|
||||||
_mcl_palette_index = 17,
|
_mcl_palette_index = 17,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 10,
|
|
||||||
biomes = { "Nether" },
|
|
||||||
y_min = -31000,
|
|
||||||
y_max = mcl_mapgen.nether.max,
|
|
||||||
decoration = "mcl_nether:netherrack",
|
|
||||||
flags = "all_floors",
|
|
||||||
param2 = 0,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_biome({
|
|
||||||
name = "SoulsandValley",
|
|
||||||
node_filler = "mcl_nether:netherrack",
|
|
||||||
node_stone = "mcl_nether:netherrack",
|
|
||||||
node_top = "mcl_blackstone:soul_soil",
|
|
||||||
node_water = "air",
|
|
||||||
node_river_water = "air",
|
|
||||||
node_cave_liquid = "air",
|
|
||||||
y_min = mcl_mapgen.nether.min,
|
|
||||||
|
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
|
||||||
heat_point = 77,
|
|
||||||
humidity_point = 33,
|
|
||||||
_mcl_biome_type = "hot",
|
|
||||||
_mcl_palette_index = 17,
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 10,
|
|
||||||
biomes = { "SoulsandValley" },
|
|
||||||
y_min = -31000,
|
|
||||||
y_max = mcl_mapgen.nether.max,
|
|
||||||
decoration = "mcl_blackstone:soul_soil",
|
|
||||||
flags = "all_floors, all_ceilings",
|
|
||||||
param2 = 0,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_ore({
|
|
||||||
ore_type = "blob",
|
|
||||||
ore = "mcl_nether:soul_sand",
|
|
||||||
wherein = { "mcl_nether:netherrack", "mcl_blackstone:soul_soil" },
|
|
||||||
clust_scarcity = 100,
|
|
||||||
clust_num_ores = 225,
|
|
||||||
clust_size = 15,
|
|
||||||
biomes = { "SoulsandValley" },
|
|
||||||
y_min = mcl_mapgen.nether.min,
|
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
|
||||||
noise_params = {
|
|
||||||
offset = 0,
|
|
||||||
scale = 1,
|
|
||||||
spread = { x = 250, y = 250, z = 250 },
|
|
||||||
seed = 12345,
|
|
||||||
octaves = 3,
|
|
||||||
persist = 0.6,
|
|
||||||
lacunarity = 2,
|
|
||||||
flags = "defaults",
|
|
||||||
}
|
|
||||||
})
|
|
||||||
minetest.register_biome({
|
|
||||||
name = "CrimsonForest",
|
|
||||||
node_filler = "mcl_nether:netherrack",
|
|
||||||
node_stone = "mcl_nether:netherrack",
|
|
||||||
node_top = "mcl_mushroom:crimson_nylium",
|
|
||||||
node_water = "air",
|
|
||||||
node_river_water = "air",
|
|
||||||
node_cave_liquid = "air",
|
|
||||||
y_min = mcl_mapgen.nether.min,
|
|
||||||
|
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
|
||||||
heat_point = 60,
|
|
||||||
humidity_point = 47,
|
|
||||||
_mcl_biome_type = "hot",
|
|
||||||
_mcl_palette_index = 17,
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 10,
|
|
||||||
biomes = { "CrimsonForest" },
|
|
||||||
y_min = -31000,
|
|
||||||
y_max = mcl_mapgen.nether.max,
|
|
||||||
decoration = "mcl_mushroom:crimson_nylium",
|
|
||||||
flags = "all_floors",
|
|
||||||
param2 = 0,
|
|
||||||
})
|
|
||||||
minetest.register_biome({
|
|
||||||
name = "WarpedForest",
|
|
||||||
node_filler = "mcl_nether:netherrack",
|
|
||||||
node_stone = "mcl_nether:netherrack",
|
|
||||||
node_top = "mcl_mushroom:warped_nylium",
|
|
||||||
node_water = "air",
|
|
||||||
node_river_water = "air",
|
|
||||||
node_cave_liquid = "air",
|
|
||||||
y_min = mcl_mapgen.nether.min,
|
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
|
||||||
heat_point = 37,
|
|
||||||
humidity_point = 70,
|
|
||||||
_mcl_biome_type = "hot",
|
|
||||||
_mcl_palette_index = 17,
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 10,
|
|
||||||
biomes = { "WarpedForest" },
|
|
||||||
y_min = -31000,
|
|
||||||
y_max = mcl_mapgen.nether.max,
|
|
||||||
decoration = "mcl_mushroom:warped_nylium",
|
|
||||||
flags = "all_floors",
|
|
||||||
param2 = 0,
|
|
||||||
})
|
|
||||||
minetest.register_biome({
|
|
||||||
name = "BasaltDelta",
|
|
||||||
node_filler = "mcl_nether:netherrack",
|
|
||||||
node_stone = "mcl_nether:netherrack",
|
|
||||||
node_top = "mcl_blackstone:basalt",
|
|
||||||
node_water = "air",
|
|
||||||
node_river_water = "air",
|
|
||||||
node_cave_liquid = "air",
|
|
||||||
y_min = mcl_mapgen.nether.min,
|
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
|
||||||
heat_point = 27,
|
|
||||||
humidity_point = 80,
|
|
||||||
_mcl_biome_type = "hot",
|
|
||||||
_mcl_palette_index = 17,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_ore({
|
|
||||||
ore_type = "blob",
|
|
||||||
ore = "mcl_blackstone:blackstone",
|
|
||||||
wherein = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_core:gravel","mcl_nether:soul_sand"},
|
|
||||||
clust_scarcity = 100,
|
|
||||||
clust_num_ores = 400,
|
|
||||||
clust_size = 20,
|
|
||||||
biomes = { "BasaltDelta" },
|
|
||||||
y_min = mcl_mapgen.nether.min,
|
|
||||||
y_max = mcl_mapgen.nether.max + 80,
|
|
||||||
noise_params = {
|
|
||||||
offset = 0,
|
|
||||||
scale = 1,
|
|
||||||
spread = { x = 250, y = 250, z = 250 },
|
|
||||||
seed = 12345,
|
|
||||||
octaves = 3,
|
|
||||||
persist = 0.6,
|
|
||||||
lacunarity = 2,
|
|
||||||
flags = "defaults",
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack","mcl_nether:glowstone","mcl_blackstone:nether_gold","mcl_nether:quartz_ore","mcl_core:gravel","mcl_nether:soul_sand","mcl_blackstone:blackstone"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 10,
|
|
||||||
biomes = { "BasaltDelta" },
|
|
||||||
y_min = -31000,
|
|
||||||
y_max = mcl_mapgen.nether.max,
|
|
||||||
decoration = "mcl_blackstone:basalt",
|
|
||||||
flags = "all_floors",
|
|
||||||
param2 = 0,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
--[[ THE END ]]
|
--[[ THE END ]]
|
||||||
minetest.register_biome({
|
minetest.register_biome({
|
||||||
name = "End",
|
name = "End",
|
||||||
|
@ -4115,331 +3938,7 @@ local chorus_noise_params = {
|
||||||
|
|
||||||
local function register_dimension_decorations()
|
local function register_dimension_decorations()
|
||||||
--[[ NETHER ]]
|
--[[ NETHER ]]
|
||||||
--NETHER WASTES (Nether)
|
-- TODO: Nether
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack","mcl_nether:magma"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.04,
|
|
||||||
biomes = {"Nether"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_fire:eternal_fire",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.013,
|
|
||||||
biomes = {"Nether"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_mushrooms:mushroom_brown",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:netherrack"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.012,
|
|
||||||
biomes = {"Nether"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_mushrooms:mushroom_red",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_nether:soul_sand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.0032,
|
|
||||||
biomes = {"Nether","SoulsandValley"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_nether:nether_wart",
|
|
||||||
})
|
|
||||||
|
|
||||||
-- WARPED FOREST
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_mushroom:warped_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.02,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 10,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_mushroom:warped_fungus",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
name = "mcl_biomes:warped_tree1",
|
|
||||||
place_on = {"mcl_mushroom:warped_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.007,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 15,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_mushroom.."/schematics/warped_fungus_1.mts",
|
|
||||||
size = {x = 5, y = 11, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
name = "mcl_biomes:warped_tree2",
|
|
||||||
place_on = {"mcl_mushroom:warped_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.005,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 10,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_mushroom.."/schematics/warped_fungus_2.mts",
|
|
||||||
size = {x = 5, y = 6, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
name = "mcl_biomes:warped_tree3",
|
|
||||||
place_on = {"mcl_mushroom:warped_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.03,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 14,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_mushroom.."/schematics/warped_fungus_3.mts",
|
|
||||||
size = {x = 5, y = 12, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_mushroom:warped_nylium","mcl_mushroom:twisting_vines"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.012,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
height = 2,
|
|
||||||
height_max = 8,
|
|
||||||
decoration = "mcl_mushroom:twisting_vines",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_mushroom:warped_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.0812,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
max_height = 5,
|
|
||||||
decoration = "mcl_mushroom:warped_roots",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_mushroom:crimson_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.052,
|
|
||||||
biomes = {"WarpedForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_mushroom:nether_sprouts",
|
|
||||||
})
|
|
||||||
-- CRIMSON FOREST
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_mushroom:crimson_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.02,
|
|
||||||
biomes = {"CrimsonForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.lava_max - 10,
|
|
||||||
flags = "all_floors",
|
|
||||||
decoration = "mcl_mushroom:crimson_fungus",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
name = "mcl_biomes:crimson_tree",
|
|
||||||
place_on = {"mcl_mushroom:crimson_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.008,
|
|
||||||
biomes = {"CrimsonForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 10,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_mushroom.."/schematics/crimson_fungus_1.mts",
|
|
||||||
size = {x = 5, y = 8, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
name = "mcl_biomes:crimson_tree2",
|
|
||||||
place_on = {"mcl_mushroom:crimson_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.006,
|
|
||||||
biomes = {"CrimsonForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 15,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_mushroom.."/schematics/crimson_fungus_2.mts",
|
|
||||||
size = {x = 5, y = 12, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
name = "mcl_biomes:crimson_tree3",
|
|
||||||
place_on = {"mcl_mushroom:crimson_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.004,
|
|
||||||
biomes = {"CrimsonForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 20,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_mushroom.."/schematics/crimson_fungus_3.mts",
|
|
||||||
size = {x = 7, y = 13, z = 7},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_mushroom:crimson_nylium"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.082,
|
|
||||||
biomes = {"CrimsonForest"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
max_height = 5,
|
|
||||||
decoration = "mcl_mushroom:crimson_roots",
|
|
||||||
})
|
|
||||||
|
|
||||||
--SOULSAND VALLEY
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soul_sand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.062,
|
|
||||||
biomes = {"SoulsandValley"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors",
|
|
||||||
max_height = 5,
|
|
||||||
decoration = "mcl_blackstone:soul_fire",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.000212,
|
|
||||||
biomes = {"SoulsandValley"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_1.mts",
|
|
||||||
size = {x = 5, y = 8, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.0002233,
|
|
||||||
biomes = {"SoulsandValley"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_2.mts",
|
|
||||||
size = {x = 5, y = 8, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.000225,
|
|
||||||
biomes = {"SoulsandValley"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_3.mts",
|
|
||||||
size = {x = 5, y = 8, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "schematic",
|
|
||||||
place_on = {"mcl_blackstone:soul_soil","mcl_nether:soulsand"},
|
|
||||||
sidelen = 16,
|
|
||||||
fill_ratio = 0.00022323,
|
|
||||||
biomes = {"SoulsandValley"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, place_center_x, place_center_z",
|
|
||||||
schematic = mod_mcl_blackstone.."/schematics/mcl_blackstone_nether_fossil_4.mts",
|
|
||||||
size = {x = 5, y = 8, z = 5},
|
|
||||||
rotation = "random",
|
|
||||||
})
|
|
||||||
--BASALT DELTA
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
decoration = "mcl_blackstone:basalt",
|
|
||||||
place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"},
|
|
||||||
sidelen = 80,
|
|
||||||
height_max = 55,
|
|
||||||
noise_params={
|
|
||||||
offset = -0.0085,
|
|
||||||
scale = 0.002,
|
|
||||||
spread = {x = 25, y = 120, z = 25},
|
|
||||||
seed = 2325,
|
|
||||||
octaves = 5,
|
|
||||||
persist = 2,
|
|
||||||
lacunarity = 3.5,
|
|
||||||
flags = "absvalue"
|
|
||||||
},
|
|
||||||
biomes = {"BasaltDelta"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, all ceilings",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
decoration = "mcl_blackstone:basalt",
|
|
||||||
place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"},
|
|
||||||
sidelen = 80,
|
|
||||||
height_max = 15,
|
|
||||||
noise_params={
|
|
||||||
offset = -0.0085,
|
|
||||||
scale = 0.004,
|
|
||||||
spread = {x = 25, y = 120, z = 25},
|
|
||||||
seed = 235,
|
|
||||||
octaves = 5,
|
|
||||||
persist = 2.5,
|
|
||||||
lacunarity = 3.5,
|
|
||||||
flags = "absvalue"
|
|
||||||
},
|
|
||||||
biomes = {"BasaltDelta"},
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, all ceilings",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
decoration = "mcl_nether:magma",
|
|
||||||
place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"},
|
|
||||||
sidelen = 80,
|
|
||||||
fill_ratio = 0.082323,
|
|
||||||
biomes = {"BasaltDelta"},
|
|
||||||
place_offset_y = -1,
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
flags = "all_floors, all ceilings",
|
|
||||||
})
|
|
||||||
minetest.register_decoration({
|
|
||||||
deco_type = "simple",
|
|
||||||
decoration = "mcl_nether:nether_lava_source",
|
|
||||||
place_on = {"mcl_blackstone:basalt","mcl_nether:netherrack","mcl_blackstone:blackstone"},
|
|
||||||
spawn_by = {"mcl_blackstone:basalt","mcl_blackstone:blackstone"},
|
|
||||||
num_spawn_by = 14,
|
|
||||||
sidelen = 80,
|
|
||||||
fill_ratio = 4,
|
|
||||||
biomes = {"BasaltDelta"},
|
|
||||||
place_offset_y = -1,
|
|
||||||
y_min = mcl_mapgen.nether.lava_max + 1,
|
|
||||||
y_max = mcl_mapgen.nether.max - 5,
|
|
||||||
flags = "all_floors, force_placement",
|
|
||||||
})
|
|
||||||
|
|
||||||
--[[ THE END ]]
|
--[[ THE END ]]
|
||||||
|
|
||||||
|
|
|
@ -32,16 +32,9 @@ local math_ceil = math.ceil
|
||||||
--custom mcl_vars
|
--custom mcl_vars
|
||||||
local get_node = mcl_mapgen.get_far_node
|
local get_node = mcl_mapgen.get_far_node
|
||||||
|
|
||||||
local min_y
|
|
||||||
local max_y
|
|
||||||
|
|
||||||
local get_local_settings = function()
|
|
||||||
min_y = math_max(mcl_mapgen.overworld.min, mcl_mapgen.overworld.bedrock_max) + 1
|
|
||||||
max_y = mcl_mapgen.overworld.max - 1
|
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
|
local min_y = math_max(mcl_mapgen.overworld.min, mcl_mapgen.overworld.bedrock_max) + 1
|
||||||
|
local max_y = mcl_mapgen.overworld.max - 1
|
||||||
-- Calculate the number of dungeon spawn attempts
|
-- Calculate the number of dungeon spawn attempts
|
||||||
-- In Minecraft, there 8 dungeon spawn attempts Minecraft chunk (16*256*16 = 65536 blocks).
|
-- In Minecraft, there 8 dungeon spawn attempts Minecraft chunk (16*256*16 = 65536 blocks).
|
||||||
-- Minetest chunks don't have this size, so scale the number accordingly.
|
-- Minetest chunks don't have this size, so scale the number accordingly.
|
||||||
|
|
|
@ -1101,7 +1101,7 @@ local function register_mgv6_decorations()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local mg_flags = minetest.settings:get_flags("mg_flags")
|
local mg_flags = minetest.settings.get_flags and minetest.settings:get_flags("mg_flags") or {}
|
||||||
|
|
||||||
-- Inform other mods of dungeon setting for MCL2-style dungeons
|
-- Inform other mods of dungeon setting for MCL2-style dungeons
|
||||||
mcl_vars.mg_dungeons = mcl_mapgen.dungeons
|
mcl_vars.mg_dungeons = mcl_mapgen.dungeons
|
||||||
|
@ -1214,24 +1214,18 @@ if flat then
|
||||||
air_layers[#air_layers + 1] = {mcl_mapgen.nether.flat_floor, mcl_mapgen.nether.flat_ceiling} -- Flat Nether
|
air_layers[#air_layers + 1] = {mcl_mapgen.nether.flat_floor, mcl_mapgen.nether.flat_ceiling} -- Flat Nether
|
||||||
end
|
end
|
||||||
|
|
||||||
local barrier_min
|
|
||||||
local barrier_max
|
|
||||||
local void_layers
|
|
||||||
local bedrock_layers
|
|
||||||
|
|
||||||
local get_local_settings = function()
|
|
||||||
-- Realm barrier between the Overworld void and the End
|
-- Realm barrier between the Overworld void and the End
|
||||||
barrier_min = mcl_mapgen.realm_barrier_overworld_end_min
|
local barrier_min = mcl_mapgen.realm_barrier_overworld_end_min
|
||||||
barrier_max = mcl_mapgen.realm_barrier_overworld_end_max
|
local barrier_max = mcl_mapgen.realm_barrier_overworld_end_max
|
||||||
|
|
||||||
void_layers = {
|
local void_layers = {
|
||||||
{mcl_mapgen.EDGE_MIN , mcl_mapgen.nether.min - 1 }, -- below Nether
|
{mcl_mapgen.EDGE_MIN , mcl_mapgen.nether.min - 1 }, -- below Nether
|
||||||
{mcl_mapgen.nether.max + 129, mcl_mapgen.end_.min - 1 }, -- below End (above Nether)
|
{mcl_mapgen.nether.max + 129, mcl_mapgen.end_.min - 1 }, -- below End (above Nether)
|
||||||
{mcl_mapgen.end_.max + 1 , barrier_min - 1 }, -- below Realm Barrier, above End
|
{mcl_mapgen.end_.max + 1 , barrier_min - 1 }, -- below Realm Barrier, above End
|
||||||
{barrier_max + 1 , mcl_mapgen.overworld.min - 1}, -- below Overworld, above Realm Barrier
|
{barrier_max + 1 , mcl_mapgen.overworld.min - 1}, -- below Overworld, above Realm Barrier
|
||||||
}
|
}
|
||||||
|
|
||||||
bedrock_layers = {}
|
local bedrock_layers = {}
|
||||||
if not singlenode then
|
if not singlenode then
|
||||||
bedrock_layers = {
|
bedrock_layers = {
|
||||||
{mcl_mapgen.overworld.bedrock_min , mcl_mapgen.overworld.bedrock_max },
|
{mcl_mapgen.overworld.bedrock_min , mcl_mapgen.overworld.bedrock_max },
|
||||||
|
@ -1239,9 +1233,6 @@ local get_local_settings = function()
|
||||||
{mcl_mapgen.nether.bedrock_top_min , mcl_mapgen.nether.bedrock_top_max },
|
{mcl_mapgen.nether.bedrock_top_min , mcl_mapgen.nether.bedrock_top_max },
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
mcl_mapgen.register_mapgen_block_lvm(function(vm_context)
|
mcl_mapgen.register_mapgen_block_lvm(function(vm_context)
|
||||||
local vm, data, area, minp, maxp, chunkseed, blockseed = vm_context.vm, vm_context.data, vm_context.area, vm_context.minp, vm_context.maxp, vm_context.chunkseed, vm_context.blockseed
|
local vm, data, area, minp, maxp, chunkseed, blockseed = vm_context.vm, vm_context.data, vm_context.area, vm_context.minp, vm_context.maxp, vm_context.chunkseed, vm_context.blockseed
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
-- moved into mcl_structures
|
|
@ -0,0 +1,3 @@
|
||||||
|
name = mcl_strongholds
|
||||||
|
author = Wuzzy
|
||||||
|
description = Mod has been moved into mcl_structures. This is a dummy thing to overwrite the old thing, kay27 01/25/22
|
|
@ -108,6 +108,7 @@ end
|
||||||
|
|
||||||
function process_mapgen_block_lvm(vm_context)
|
function process_mapgen_block_lvm(vm_context)
|
||||||
local nodes = minetest.find_nodes_in_area(vm_context.minp, vm_context.maxp, {"group:struct"}, true)
|
local nodes = minetest.find_nodes_in_area(vm_context.minp, vm_context.maxp, {"group:struct"}, true)
|
||||||
|
nodes = mcl_compatibility.sort_nodes(nodes)
|
||||||
for node_name, pos_list in pairs(nodes) do
|
for node_name, pos_list in pairs(nodes) do
|
||||||
local lvm_callback = on_finished_block_callbacks[node_name]
|
local lvm_callback = on_finished_block_callbacks[node_name]
|
||||||
if lvm_callback then
|
if lvm_callback then
|
||||||
|
@ -118,6 +119,7 @@ end
|
||||||
|
|
||||||
function process_mapgen_chunk(minp, maxp, seed, vm_context)
|
function process_mapgen_chunk(minp, maxp, seed, vm_context)
|
||||||
local nodes = minetest.find_nodes_in_area(minp, maxp, {"group:struct"}, true)
|
local nodes = minetest.find_nodes_in_area(minp, maxp, {"group:struct"}, true)
|
||||||
|
nodes = mcl_compatibility.sort_nodes(nodes)
|
||||||
for node_name, pos_list in pairs(nodes) do
|
for node_name, pos_list in pairs(nodes) do
|
||||||
local chunk_callback = on_finished_chunk_callbacks[node_name]
|
local chunk_callback = on_finished_chunk_callbacks[node_name]
|
||||||
if chunk_callback then
|
if chunk_callback then
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
name = mcl_structures
|
name = mcl_structures
|
||||||
author = Wuzzy, kay27, cora
|
author = Wuzzy, kay27, cora
|
||||||
description = Structures for MineClone 2/5
|
description = Structures for MineClone 2/5
|
||||||
depends = mcl_loot, mcl_mapgen, mcl_worlds
|
depends = mcl_init, mcl_loot, mcl_mapgen, mcl_worlds
|
||||||
|
|
|
@ -94,21 +94,13 @@ if setting then
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Max. and min. heights between rail corridors are generated
|
-- Max. and min. heights between rail corridors are generated
|
||||||
local height_min, height_max
|
local height_min
|
||||||
local get_local_settings = function()
|
|
||||||
if mcl_mapgen.lava then
|
if mcl_mapgen.lava then
|
||||||
height_min = mcl_mapgen.overworld.lava_max + 2
|
height_min = mcl_mapgen.overworld.lava_max + 2
|
||||||
else
|
else
|
||||||
height_min = mcl_mapgen.overworld.bedrock_max + 2
|
height_min = mcl_mapgen.overworld.bedrock_max + 2
|
||||||
end
|
end
|
||||||
height_max = mcl_worlds.layer_to_y(60)
|
local height_max = mcl_worlds.layer_to_y(60)
|
||||||
|
|
||||||
-- Allow mods to separately override this
|
|
||||||
height_min = mcl_mapgen.overworld.railcorridors_height_min or height_min
|
|
||||||
height_max = mcl_mapgen.overworld.railcorridors_height_max or height_max
|
|
||||||
end
|
|
||||||
get_local_settings()
|
|
||||||
mcl_mapgen.register_on_settings_changed(get_local_settings)
|
|
||||||
|
|
||||||
-- Chaos Mode: If enabled, rail corridors don't stop generating when hitting obstacles
|
-- Chaos Mode: If enabled, rail corridors don't stop generating when hitting obstacles
|
||||||
local chaos_mode = minetest.settings:get_bool("tsm_railcorridors_chaos") or false
|
local chaos_mode = minetest.settings:get_bool("tsm_railcorridors_chaos") or false
|
||||||
|
|
|
@ -20,6 +20,7 @@ minetest.register_on_shutdown(function()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local core_is_creative_enabled = minetest.is_creative_enabled
|
local core_is_creative_enabled = minetest.is_creative_enabled
|
||||||
|
or function() return false end
|
||||||
|
|
||||||
minetest.is_creative_enabled = function(name)
|
minetest.is_creative_enabled = function(name)
|
||||||
local id = player_to_gamemode_id[name]
|
local id = player_to_gamemode_id[name]
|
||||||
|
|
|
@ -66,7 +66,7 @@ local function update_player(player_object)
|
||||||
|
|
||||||
local noclip = #find_nodes_in_area({x = x, y = head_y, z = z}, {x = x + 1, y = head_y + 1, z = z + 1}, "group:opaque") == 8
|
local noclip = #find_nodes_in_area({x = x, y = head_y, z = z}, {x = x + 1, y = head_y + 1, z = z + 1}, "group:opaque") == 8
|
||||||
|
|
||||||
local velocity = player_object:get_velocity()
|
local velocity = player_object:get_velocity() or player_object:get_player_velocity()
|
||||||
if vector_length(velocity) < 0.00000001 then
|
if vector_length(velocity) < 0.00000001 then
|
||||||
player_doesnt_move[name] = (player_doesnt_move[name] or 0) + 1
|
player_doesnt_move[name] = (player_doesnt_move[name] or 0) + 1
|
||||||
else
|
else
|
||||||
|
@ -125,7 +125,7 @@ local function check_player(name)
|
||||||
if not obj_player then
|
if not obj_player then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local velocity = obj_player:get_velocity()
|
local velocity = obj_player:get_velocity() or obj_player:get_player_velocity()
|
||||||
local pos = obj_player:get_pos()
|
local pos = obj_player:get_pos()
|
||||||
local x, y, z = floor(pos.x), floor(pos.y), floor(pos.z)
|
local x, y, z = floor(pos.x), floor(pos.y), floor(pos.z)
|
||||||
while #find_nodes_in_area({x = x, y = y, z = z}, {x = x + 1, y = y, z = z + 1}, "air") == 4 do
|
while #find_nodes_in_area({x = x, y = y, z = z}, {x = x + 1, y = y, z = z + 1}, "air") == 4 do
|
||||||
|
|
|
@ -2,3 +2,4 @@ name = mcl_meshhand
|
||||||
author = jordan4ibanez
|
author = jordan4ibanez
|
||||||
description = Applies the player skin texture to the hand.
|
description = Applies the player skin texture to the hand.
|
||||||
depends = mcl_tools, mcl_skins
|
depends = mcl_tools, mcl_skins
|
||||||
|
optional_depends = mcl_compatibility
|
||||||
|
|
|
@ -90,7 +90,11 @@ function mcl_player.player_set_model(player, model_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function set_texture(player, index, texture)
|
local function set_texture(player, index, texture)
|
||||||
local textures = player_textures[player:get_player_name()] or {}
|
local textures = player_textures[player:get_player_name()]
|
||||||
|
if not textures then
|
||||||
|
player_textures[player:get_player_name()] = {"blank.png", "blank.png", "blank.png"}
|
||||||
|
textures = player_textures[player:get_player_name()]
|
||||||
|
end
|
||||||
textures[index] = texture
|
textures[index] = texture
|
||||||
player:set_properties({textures = textures})
|
player:set_properties({textures = textures})
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
name = mcl_player
|
name = mcl_player
|
||||||
author = celeron55
|
author = celeron55
|
||||||
description = Adds the 3D player model, taken from Minetest Game 0.4.16.
|
description = Adds the 3D player model, taken from Minetest Game 0.4.16.
|
||||||
|
depends = mcl_playerinfo
|
||||||
|
|
|
@ -63,6 +63,10 @@ minetest.register_globalstep(function(dtime)
|
||||||
|
|
||||||
-- what is around me?
|
-- what is around me?
|
||||||
local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos)
|
local node_stand, node_stand_below, node_head, node_feet = get_player_nodes(pos)
|
||||||
|
|
||||||
|
if not mcl_playerinfo[name] then
|
||||||
|
mcl_playerinfo[name] = {}
|
||||||
|
end
|
||||||
mcl_playerinfo[name].node_stand = node_stand
|
mcl_playerinfo[name].node_stand = node_stand
|
||||||
mcl_playerinfo[name].node_stand_below = node_stand_below
|
mcl_playerinfo[name].node_stand_below = node_stand_below
|
||||||
mcl_playerinfo[name].node_head = node_head
|
mcl_playerinfo[name].node_head = node_head
|
||||||
|
|
|
@ -277,6 +277,12 @@ minetest.register_globalstep(function(dtime)
|
||||||
local fly_pos = player:get_pos()
|
local fly_pos = player:get_pos()
|
||||||
local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.5, z = fly_pos.z}).name
|
local fly_node = minetest.get_node({x = fly_pos.x, y = fly_pos.y - 0.5, z = fly_pos.z}).name
|
||||||
local elytra = mcl_playerplus.elytra[name]
|
local elytra = mcl_playerplus.elytra[name]
|
||||||
|
|
||||||
|
if not elytra then
|
||||||
|
mcl_playerplus.elytra[player] = {}
|
||||||
|
elytra = mcl_playerplus.elytra[player]
|
||||||
|
end
|
||||||
|
|
||||||
elytra.inv = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra"
|
elytra.inv = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra"
|
||||||
elytra.enchanted = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra_enchanted"
|
elytra.enchanted = player:get_inventory():get_stack("armor", 3):get_name() == "mcl_armor:elytra_enchanted"
|
||||||
if not elytra.active then
|
if not elytra.active then
|
||||||
|
@ -412,7 +418,8 @@ minetest.register_globalstep(function(dtime)
|
||||||
-- Update jump status immediately since we need this info in real time.
|
-- Update jump status immediately since we need this info in real time.
|
||||||
-- WARNING: This section is HACKY as hell since it is all just based on heuristics.
|
-- WARNING: This section is HACKY as hell since it is all just based on heuristics.
|
||||||
|
|
||||||
if mcl_playerplus_internal[name].jump_cooldown > 0 then
|
local mcl_playerplus_internal_name = mcl_playerplus_internal[name]
|
||||||
|
if mcl_playerplus_internal_name and mcl_playerplus_internal_name.jump_cooldown > 0 then
|
||||||
mcl_playerplus_internal[name].jump_cooldown = mcl_playerplus_internal[name].jump_cooldown - dtime
|
mcl_playerplus_internal[name].jump_cooldown = mcl_playerplus_internal[name].jump_cooldown - dtime
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -736,6 +743,9 @@ minetest.register_globalstep(function(dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Update internal values
|
-- Update internal values
|
||||||
|
if not mcl_playerplus_internal[name] then
|
||||||
|
mcl_playerplus_internal[name] = {}
|
||||||
|
end
|
||||||
mcl_playerplus_internal[name].lastPos = pos
|
mcl_playerplus_internal[name].lastPos = pos
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -185,4 +185,3 @@ revoke_shout_for_spammers (Revoke shout priv for spammers) bool true
|
||||||
mcl_item_id_debug (Item ID Debug) bool false
|
mcl_item_id_debug (Item ID Debug) bool false
|
||||||
mcl_debug_struct_noise (Show Structures Perlin Noise) bool false
|
mcl_debug_struct_noise (Show Structures Perlin Noise) bool false
|
||||||
mcl_debug_chunk_borders (Show Chunk Borders) bool false
|
mcl_debug_chunk_borders (Show Chunk Borders) bool false
|
||||||
mcl_debug_head_code (Spawn dirt particles at mob head position) bool false
|
|
||||||
|
|