Merge pull request #910 from EsPaKira/fix-base-pack

Fix core and base pack
This commit is contained in:
MihailRis 2026-08-02 21:13:29 +03:00 • committed by GitHub
commit 6d9694dfc3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 40 deletions

View file

@ -12,7 +12,7 @@ function util.drop(ppos, itemid, count, data, pickup_delay)
}}) }})
end end
local function calc_loot(loot_table) function util.calc_loot(loot_table)
local results = {} local results = {}
for _, loot in ipairs(loot_table) do for _, loot in ipairs(loot_table) do
local chance = loot.chance or 1 local chance = loot.chance or 1
@ -37,7 +37,7 @@ end
function util.block_loot(blockid) function util.block_loot(blockid)
local lootscheme = block.properties[blockid]["base:loot"] local lootscheme = block.properties[blockid]["base:loot"]
if lootscheme then if lootscheme then
return calc_loot(lootscheme) return util.calc_loot(lootscheme)
end end
return {{item=block.get_picking_item(blockid), count=1}} return {{item=block.get_picking_item(blockid), count=1}}
end end

View file

@ -1,3 +1,6 @@
local dirtid = block.index("base:dirt")
local grass_blockid = block.index("base:grass_block")
local offsets = {} local offsets = {}
for lx=-1,1 do for lx=-1,1 do
for ly=-1,1 do for ly=-1,1 do
@ -8,18 +11,17 @@ for lx=-1,1 do
end end
function on_random_update(x, y, z) function on_random_update(x, y, z)
local dirtid = block.index('base:dirt');
if block.is_solid_at(x, y+1, z) then if block.is_solid_at(x, y+1, z) then
block.set(x, y, z, dirtid, 0) block.set(x, y, z, dirtid, 0)
return return
end end
local grassblockid = block.index('base:grass_block')
for _, offset in ipairs(offsets) do for _, offset in ipairs(offsets) do
local nx, ny, nz = x + offset[1], y + offset[2], z + offset[3] local nx, ny, nz = x + offset[1], y + offset[2], z + offset[3]
if block.get(nx, ny, nz) == dirtid and if block.get(nx, ny, nz) == dirtid and
not block.is_solid_at(nx, ny + 1, nz) then not block.is_solid_at(nx, ny + 1, nz) then
block.set(nx, ny, nz, grassblockid, 0) block.set(nx, ny, nz, grass_blockid, 0)
return return
end end
end end

View file

@ -179,40 +179,40 @@ function place_pack(panel, packinfo, callback, position_func)
end end
end end
local Version = {}; local Version = {}
function Version.matches_pattern(version) function Version.matches_pattern(version)
for _, letter in string.gmatch(version, "%.+") do local t = string.split(version, ".")
if type(letter) ~= "number" or letter ~= "." then if #t ~= 2 and #t ~= 3 then return false end
return false;
for i = 1, #t do
local matched = string.match(t[i], "^%d+$")
if not matched then return false end
end end
local t = string.split(version, "."); return true
return #t == 2 or #t == 3;
end
end end
function Version.__equal(ver1, ver2) function Version.__equal(ver1, ver2)
return ver1[1] == ver2[1] and ver1[2] == ver2[2] and ver1[3] == ver2[3]; return ver1[1] == ver2[1] and ver1[2] == ver2[2] and ver1[3] == ver2[3]
end end
function Version.__greater(ver1, ver2) function Version.__greater(ver1, ver2)
if ver1[1] ~= ver2[1] then return ver1[1] > ver2[1] end; if ver1[1] ~= ver2[1] then return ver1[1] > ver2[1] end
if ver1[2] ~= ver2[2] then return ver1[2] > ver2[2] end; if ver1[2] ~= ver2[2] then return ver1[2] > ver2[2] end
return ver1[3] > ver2[3]; return ver1[3] > ver2[3]
end end
function Version.__less(ver1, ver2) function Version.__less(ver1, ver2)
return Version.__greater(ver2, ver1); return Version.__greater(ver2, ver1)
end end
function Version.__greater_or_equal(ver1, ver2) function Version.__greater_or_equal(ver1, ver2)
return not Version.__less(ver1, ver2); return not Version.__less(ver2, ver1)
end end
function Version.__less_or_equal(ver1, ver2) function Version.__less_or_equal(ver1, ver2)
return not Version.__greater(ver1, ver2); return not Version.__greater(ver1, ver2)
end end
Version.operators = { Version.operators = {
@ -224,40 +224,39 @@ Version.operators = {
} }
function Version.compare(op, ver1, ver2) function Version.compare(op, ver1, ver2)
ver1 = string.split(ver1, "."); ver1 = string.split(ver1, ".")
ver2 = string.split(ver2, "."); ver2 = string.split(ver2, ".")
local comparison_func = Version.operators[op]; local comparison_func = Version.operators[op];
if comparison_func then if comparison_func then
return comparison_func(ver1, ver2); return comparison_func(ver1, ver2)
else else
return false; return false
end end
end end
function Version.parse(version) function Version.parse(version)
local op = string.sub(version, 1, 2); local op = string.sub(version, 1, 2)
if op == ">=" or op == "<=" then if op == ">=" or op == "<=" then
return op, string.sub(version, #op + 1); return op, string.sub(version, #op + 1)
end end
op = string.sub(version, 1, 1); op = string.sub(version, 1, 1);
if op == ">" or op == "<" then if op == ">" or op == "<" then
return op, string.sub(version, #op + 1); return op, string.sub(version, #op + 1)
end end
return "=", version; return "=", version
end end
local function compare_version(dependent_version, actual_version) local function compare_version(op, dependent_version, actual_version)
if Version.matches_pattern(dependent_version) and Version.matches_pattern(actual_version) then if Version.matches_pattern(dependent_version) and Version.matches_pattern(actual_version) then
local op, dep_ver = Version.parse_version(dependent_version); return Version.compare(op, dep_ver, actual_version)
Version.compare(op, dep_ver, actual_version);
elseif dependent_version == "*" or dependent_version == actual_version then elseif dependent_version == "*" or dependent_version == actual_version then
return true; return true
else else
return false; return false
end end
end end
@ -277,15 +276,15 @@ function check_dependencies(packinfo)
) )
end end
local dep_pack = pack.get_info(depid); local dep_pack = pack.get_info(depid)
if not compare_version(depver, dep_pack.version) then
local op, ver = Version.parse(depver) local op, ver = Version.parse(depver)
if not compare_version(op, ver, dep_pack.version) then
return string.format( return string.format(
"%s: %s != %s (%s)", "%s: %s != %s (%s)",
gui.str("error.dependency-version-not-met"), gui.str("error.dependency-version-not-met"),
dep_pack.version, ver, depid dep_pack.version, ver, depid
); )
end end
if table.has(packs_installed, packinfo.id) then if table.has(packs_installed, packinfo.id) then