1
0
Fork 0

Merge branch 'biomes'

objects
Wuzzy 2017-08-21 03:43:07 +02:00
commit 4f03f1c516
85 changed files with 4562 additions and 703 deletions

View File

@ -12,15 +12,25 @@ mcl_vars.inventory_header = mcl_vars.gui_slots .. mcl_vars.gui_bg
local mg_name = minetest.get_mapgen_setting("mg_name") local mg_name = minetest.get_mapgen_setting("mg_name")
local minecraft_height_limit = 256 local minecraft_height_limit = 256
if mg_name ~= "flat" then if mg_name ~= "flat" then
mcl_vars.mg_overworld_min = -62 --[[ Realm stacking (h is for height)
mcl_vars.mg_overworld_max = mcl_vars.mg_overworld_min + minecraft_height_limit - Overworld (h>=256)
- Void (h>=1000)
- Realm Barrier (h=11), to allow escaping the End
- End (h>=256)
- Void (h>=1000)
- Nether (h=128)
- Void (h>=1000)
]]
-- 1 flat bedrock layer with 4 rough layers above -- Overworld
mcl_vars.mg_overworld_min = -62
mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min + 4 mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min + 4
mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min + 10 mcl_vars.mg_lava_overworld_max = mcl_vars.mg_overworld_min + 10
mcl_vars.mg_lava = true mcl_vars.mg_lava = true
mcl_vars.mg_bedrock_is_rough = true mcl_vars.mg_bedrock_is_rough = true
else else
local ground = minetest.get_mapgen_setting("mgflat_ground_level") local ground = minetest.get_mapgen_setting("mgflat_ground_level")
ground = tonumber(ground) ground = tonumber(ground)
@ -33,13 +43,32 @@ else
else else
mcl_vars.mg_overworld_min = ground - 3 mcl_vars.mg_overworld_min = ground - 3
end end
mcl_vars.mg_overworld_max = mcl_vars.mg_overworld_min + minecraft_height_limit mcl_vars.mg_overworld_max_official = mcl_vars.mg_overworld_min + minecraft_height_limit
mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min mcl_vars.mg_bedrock_overworld_min = mcl_vars.mg_overworld_min
mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min mcl_vars.mg_bedrock_overworld_max = mcl_vars.mg_bedrock_overworld_min
mcl_vars.mg_lava = false mcl_vars.mg_lava = false
mcl_vars.mg_bedrock_is_rough = false mcl_vars.mg_bedrock_is_rough = false
end end
mcl_vars.mg_overworld_max = 31000
-- The Nether
mcl_vars.mg_nether_min = -29000
mcl_vars.mg_nether_max = mcl_vars.mg_nether_min + 128
mcl_vars.mg_bedrock_nether_bottom_min = mcl_vars.mg_nether_min
mcl_vars.mg_bedrock_nether_bottom_max = mcl_vars.mg_bedrock_nether_bottom_min + 4
mcl_vars.mg_bedrock_nether_top_max = mcl_vars.mg_nether_max
mcl_vars.mg_bedrock_nether_top_min = mcl_vars.mg_bedrock_nether_top_max - 4
mcl_vars.mg_lava_nether_max = mcl_vars.mg_nether_min + 31
-- The End
mcl_vars.mg_end_min = mcl_vars.mg_nether_max + 2000
mcl_vars.mg_end_max_official = mcl_vars.mg_end_min + minecraft_height_limit
mcl_vars.mg_end_max = mcl_vars.mg_overworld_min - 2000
-- Realm barrier used to safely separate the End from the void below the Overworld
mcl_vars.mg_realm_barrier_overworld_end_max = mcl_vars.mg_end_max
mcl_vars.mg_realm_barrier_overworld_end_min = mcl_vars.mg_end_max - 11
-- Set default stack sizes -- Set default stack sizes
minetest.nodedef_default.stack_max = 64 minetest.nodedef_default.stack_max = 64
minetest.craftitemdef_default.stack_max = 64 minetest.craftitemdef_default.stack_max = 64

View File

@ -335,9 +335,23 @@ end
-- 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
function mcl_util.is_in_void(pos) function mcl_util.is_in_void(pos)
local void, void_deadly local void =
void = pos.y < mcl_vars.mg_overworld_min not ((pos.y < mcl_vars.mg_overworld_max and pos.y > mcl_vars.mg_overworld_min) or
void_deadly = pos.y < mcl_vars.mg_overworld_min - 64 (pos.y < mcl_vars.mg_nether_max and pos.y > mcl_vars.mg_nether_min) or
(pos.y < mcl_vars.mg_end_max and pos.y > mcl_vars.mg_end_min))
local void_deadly = false
local deadly_tolerance = 64 -- the player must be this many nodes “deep” into the void to be damaged
if void then
-- Overworld → Void → End → Void → Nether → Void
if pos.y < mcl_vars.mg_overworld_min and pos.y > mcl_vars.mg_end_max then
void_deadly = pos.y < mcl_vars.mg_overworld_min - deadly_tolerance
elseif pos.y < mcl_vars.mg_end_min and pos.y > mcl_vars.mg_nether_max then
void_deadly = pos.y < mcl_vars.mg_end_min - deadly_tolerance
elseif pos.y < mcl_vars.mg_nether_min then
void_deadly = pos.y < mcl_vars.mg_nether_min - deadly_tolerance
end
end
return void, void_deadly return void, void_deadly
end end
@ -351,6 +365,10 @@ end
function mcl_util.y_to_layer(y) function mcl_util.y_to_layer(y)
if y >= mcl_vars.mg_overworld_min then if y >= mcl_vars.mg_overworld_min then
return y - mcl_vars.mg_overworld_min, "overworld" return y - mcl_vars.mg_overworld_min, "overworld"
elseif y >= mcl_vars.mg_nether_min and y <= mcl_vars.mg_nether_max then
return y - mcl_vars.mg_nether_min, "nether"
elseif y >= mcl_vars.mg_end_min and y <= mcl_vars.mg_end_max then
return y - mcl_vars.mg_end_min, "end"
else else
return nil, "void" return nil, "void"
end end
@ -359,10 +377,15 @@ end
-- Takes a Minecraft layer and a “dimension” name -- Takes a Minecraft layer and a “dimension” name
-- and returns the corresponding Y coordinate for -- and returns the corresponding Y coordinate for
-- MineClone 2. -- MineClone 2.
-- minecraft_dimension parameter is ignored at the moment -- mc_dimension is one of "overworld", "nether", "end" (default: "overworld").
-- TODO: Implement dimensions function mcl_util.layer_to_y(layer, mc_dimension)
function mcl_util.layer_to_y(layer, minecraft_dimension) if mc_dimension == "overworld" or mc_dimension == nil then
return layer + mcl_vars.mg_overworld_min return layer + mcl_vars.mg_overworld_min
elseif mc_dimension == "nether" then
return layer + mcl_vars.mg_nether_min
elseif mc_dimension == "end" then
return layer + mcl_vars.mg_end_min
end
end end
-- Returns a on_place function for plants -- Returns a on_place function for plants

View File

@ -249,8 +249,9 @@ mobs_mc.spawn = {
desert = { "default:desert_sand", "group:sand" }, desert = { "default:desert_sand", "group:sand" },
jungle = { "default:dirt_with_rainforest_litter", "default:jungleleaves", "default:junglewood", "mcl_core:jungleleaves", "mcl_core:junglewood" }, jungle = { "default:dirt_with_rainforest_litter", "default:jungleleaves", "default:junglewood", "mcl_core:jungleleaves", "mcl_core:junglewood" },
snow = { "default:snow", "default:snowblock", "default:dirt_with_snow" }, snow = { "default:snow", "default:snowblock", "default:dirt_with_snow" },
end_city = { "default:cobble", "mcl_end:purpur_block", "mcl_end:end_stone", "mcl_portals:void"}, end_city = { "default:sandstonebrick", "mcl_end:purpur_block", "mcl_end:end_stone" },
wolf = { mobs_mc.items.grass_block, "default:dirt_with_rainforest_litter", "default:dirt", "default:dirt_with_snow", "default:snow", "default:snowblock" }, wolf = { mobs_mc.items.grass_block, "default:dirt_with_rainforest_litter", "default:dirt", "default:dirt_with_snow", "default:snow", "default:snowblock" },
village = { "mg_villages:road" },
-- These probably don't need overrides -- These probably don't need overrides
mushroom_island = { mobs_mc.items.mycelium, "mcl_core:mycelium" }, mushroom_island = { mobs_mc.items.mycelium, "mcl_core:mycelium" },
@ -260,13 +261,31 @@ mobs_mc.spawn = {
water = { mobs_mc.items.water_source, "mcl_core:water_source", "default:water_source" }, water = { mobs_mc.items.water_source, "mcl_core:water_source", "default:water_source" },
} }
-- This table contains important spawn height references for the mob spawn height.
-- Please base your mob spawn height on these numbers to keep things clean.
mobs_mc.spawn_height = {
water = tonumber(minetest.setting_get("water_level")) or 0, -- Water level in the Overworld
-- Overworld boundaries (inclusive)
overworld_min = -2999,
overworld_max = 31000,
-- Nether boundaries (inclusive)
nether_min = -3369,
nether_max = -3000,
-- End boundaries (inclusive)
end_min = -6200,
end_max = -6000,
}
mobs_mc.misc = { mobs_mc.misc = {
shears_wear = 276, -- Wear to add per shears usage (238 uses) shears_wear = 276, -- Wear to add per shears usage (238 uses)
} }
-- Item name overrides from mobs_mc_gameconfig (if present) -- Item name overrides from mobs_mc_gameconfig (if present)
if minetest.get_modpath("mobs_mc_gameconfig") and mobs_mc.override then if minetest.get_modpath("mobs_mc_gameconfig") and mobs_mc.override then
local tables = {"items", "follow", "replace", "spawn", "misc"} local tables = {"items", "follow", "replace", "spawn", "spawn_height", "misc"}
for t=1, #tables do for t=1, #tables do
local tbl = tables[t] local tbl = tables[t]
if mobs_mc.override[tbl] then if mobs_mc.override[tbl] then

View File

@ -54,7 +54,7 @@ else
end end
-- Spawn on solid blocks at or below Sea level and the selected light level -- Spawn on solid blocks at or below Sea level and the selected light level
mobs:spawn_specific("mobs_mc:bat", mobs_mc.spawn.solid,{"air"},0, maxlight, 20, 5000, 2, -500, 0) mobs:spawn_specific("mobs_mc:bat", mobs_mc.spawn.solid, {"air"}, 0, maxlight, 20, 5000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-1)
-- spawn eggs -- spawn eggs

View File

@ -71,8 +71,8 @@ mobs:register_mob("mobs_mc:blaze", {
blood_amount = 0, blood_amount = 0,
}) })
mobs:register_spawn("mobs_mc:blaze", mobs_mc.spawn.nether_fortress, minetest.LIGHT_MAX+1, 0, 5000, 1, -1000, true) mobs:spawn_specific("mobs_mc:blaze", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 5000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
-- Blaze fireball -- Blaze fireball
mobs:register_arrow("mobs_mc:blaze_fireball", { mobs:register_arrow("mobs_mc:blaze_fireball", {
visual = "sprite", visual = "sprite",

View File

@ -95,7 +95,7 @@ mobs:register_mob("mobs_mc:chicken", {
}) })
--spawn --spawn
mobs:register_spawn("mobs_mc:chicken", mobs_mc.spawn.grassland, minetest.LIGHT_MAX+1, 9, 17000, 3, 31000) mobs:spawn_specific("mobs_mc:chicken", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0) mobs:register_egg("mobs_mc:chicken", S("Chicken"), "mobs_mc_spawn_icon_chicken.png", 0)

View File

@ -134,9 +134,8 @@ mobs:register_mob("mobs_mc:mooshroom", mooshroom_def)
-- Spawning -- Spawning
mobs:register_spawn("mobs_mc:cow", mobs_mc.spawn.grassland, minetest.LIGHT_MAX+1, 9, 17000, 20, 31000) mobs:spawn_specific("mobs_mc:cow", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 20, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
mobs:register_spawn("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, minetest.LIGHT_MAX+1, 9, 17000, 10, 31000) mobs:spawn_specific("mobs_mc:mooshroom", mobs_mc.spawn.mushroom_island, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 17000, 10, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility -- compatibility
mobs:alias_mob("mobs_animal:cow", "mobs_mc:cow") mobs:alias_mob("mobs_animal:cow", "mobs_mc:cow")

View File

@ -122,7 +122,7 @@ mobs:register_mob("mobs_mc:creeper", {
}) })
mobs:spawn_specific("mobs_mc:creeper", mobs_mc.spawn.solid, {"air"},0, 7, 20, 16500, 1, -310, 31000) mobs:spawn_specific("mobs_mc:creeper", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 16500, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility -- compatibility
mobs:alias_mob("mobs:creeper", "mobs_mc:creeper") mobs:alias_mob("mobs:creeper", "mobs_mc:creeper")

View File

@ -146,12 +146,13 @@ mobs:register_mob("mobs_mc:enderman", {
}) })
-- End spawn
mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 3000, 18, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max)
-- Overworld spawn
mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 9000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- Nether spawn (rare)
mobs:spawn_specific("mobs_mc:enderman", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 27500, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
--spawn on solid blocks
mobs:register_spawn("mobs_mc:enderman", mobs_mc.spawn.desert, 7, 0, 9000, -31000, 31000)
--mobs:register_spawn("mobs_mc:enderman", mobs_mc.end_city, minetest.LIGHT_MAX+1, 0, 9000, -31000, -5000)
mobs:spawn_specific("mobs_mc:enderman", "mcl_end:end_stone", {"air"}, 0, minetest.LIGHT_MAX+1, 5, 20, 2, -31000, -5000)
mobs:spawn_specific("mobs_mc:enderman", "mcl_end:end_stone", {"mcl_portals:void"}, 0, minetest.LIGHT_MAX+1, 5, 20, 2, -31000, -5000)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0) mobs:register_egg("mobs_mc:enderman", S("Enderman"), "mobs_mc_spawn_icon_enderman.png", 0)

View File

@ -77,8 +77,8 @@ mobs:register_mob("mobs_mc:ghast", {
}) })
--mobs:register_spawn("mobs_mc:ghast", {"default:flowing_lava", "nether:rack","air"}, 17, -1, 5000, 1, -2000) mobs:spawn_specific("mobs_mc:ghast", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 18000, 2, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
mobs:spawn_specific("mobs_mc:ghast", mobs_mc.spawn.nether, {"air"},0, minetest.LIGHT_MAX+1, 0, 18000, 2, -3610, -2100)
-- fireball (weapon) -- fireball (weapon)
mobs:register_arrow(":mobs_monster:fireball", { mobs:register_arrow(":mobs_monster:fireball", {
visual = "sprite", visual = "sprite",

View File

@ -81,7 +81,7 @@ mobs:register_mob("mobs_mc:guardian", {
blood_amount = 0, blood_amount = 0,
}) })
mobs:register_spawn("mobs_mc:guardian", mobs_mc.spawn.water, minetest.LIGHT_MAX+1, 0, 5000, 2, -1000, true) mobs:spawn_specific("mobs_mc:guardian", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 25000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water - 10)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:guardian", S("Guardian"), "mobs_mc_spawn_icon_guardian.png", 0) mobs:register_egg("mobs_mc:guardian", S("Guardian"), "mobs_mc_spawn_icon_guardian.png", 0)

View File

@ -86,7 +86,7 @@ mobs:register_mob("mobs_mc:guardian_elder", {
blood_amount = 0, blood_amount = 0,
}) })
mobs:register_spawn("mobs_mc:guardian_elder", mobs_mc.spawn.water, minetest.LIGHT_MAX+1, 0, 5000, 2, -1000, true) mobs:spawn_specific("mobs_mc:guardian_elder", mobs_mc.spawn.water, mobs_mc.spawn_water, 0, minetest.LIGHT_MAX+1, 30, 40000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.water-18)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:guardian_elder", S("Elder Guardian"), "mobs_mc_spawn_icon_guardian_elder.png", 0) mobs:register_egg("mobs_mc:guardian_elder", S("Elder Guardian"), "mobs_mc_spawn_icon_guardian_elder.png", 0)

View File

@ -330,9 +330,8 @@ mobs:register_mob("mobs_mc:mule", mule)
--=========================== --===========================
--Spawn Function --Spawn Function
mobs:register_spawn("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, minetest.LIGHT_MAX+1, 0, 15000, 12, 31000) mobs:spawn_specific("mobs_mc:horse", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 12, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
mobs:register_spawn("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, minetest.LIGHT_MAX+1, 0, 15000, 12, 31000) mobs:spawn_specific("mobs_mc:donkey", mobs_mc.spawn.grassland_savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 12, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
-- compatibility -- compatibility
mobs:alias_mob("mobs:horse", "mobs_mc:horse") mobs:alias_mob("mobs:horse", "mobs_mc:horse")

View File

@ -139,7 +139,7 @@ mobs:register_mob("mobs_mc:llama", {
}) })
--spawn --spawn
mobs:register_spawn("mobs_mc:llama", mobs_mc.spawn.savanna, minetest.LIGHT_MAX+1, 0, 15000, 1, 40) mobs:spawn_specific("mobs_mc:llama", mobs_mc.spawn.savanna, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 5, mobs_mc.spawn_height.water+15, mobs_mc.spawn_height.overworld_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0) mobs:register_egg("mobs_mc:llama", S("Llama"), "mobs_mc_spawn_icon_llama.png", 0)

View File

@ -140,12 +140,13 @@ local base_spawn_chance = 5000
mobs:spawn({ mobs:spawn({
name = "mobs_mc:ocelot", name = "mobs_mc:ocelot",
nodes = mobs_mc.spawn.jungle, nodes = mobs_mc.spawn.jungle,
neighbors = {"air"},
light_max = minetest.LIGHT_MAX+1, light_max = minetest.LIGHT_MAX+1,
light_min = 0, light_min = 0,
chance = math.ceil(base_spawn_chance * 1.5), -- emulates 1/3 spawn failure rate chance = math.ceil(base_spawn_chance * 1.5), -- emulates 1/3 spawn failure rate
active_object_count = 12, active_object_count = 12,
min_height = 1, -- Right above ocean level min_height = mobs_mc.spawn_height.water+1, -- Right above ocean level
max_height = 31000, max_height = mobs_mc.spawn_height.overworld_max,
on_spawn = function(self, pos) on_spawn = function(self, pos)
--[[ Note: Minecraft has a 1/3 spawn failure rate. --[[ Note: Minecraft has a 1/3 spawn failure rate.
In this mod it is emulated by reducing the spawn rate accordingly (see above). ]] In this mod it is emulated by reducing the spawn rate accordingly (see above). ]]

View File

@ -89,7 +89,7 @@ mobs:register_mob("mobs_mc:parrot", {
--spawn --spawn
-- TODO: Increase spawn chance if polished -- TODO: Increase spawn chance if polished
mobs:spawn_specific("mobs_mc:parrot", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX+1, 20, 20000, 2, 15, 20) --mobs:spawn_specific("mobs_mc:parrot", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 30000, 1, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0) mobs:register_egg("mobs_mc:parrot", S("Parrot"), "mobs_mc_spawn_icon_parrot.png", 0)

View File

@ -168,7 +168,7 @@ mobs:register_mob("mobs_mc:pig", {
end, end,
}) })
mobs:register_spawn("mobs_mc:pig", mobs_mc.spawn.grassland, minetest.LIGHT_MAX+1, 9, 15000, 30, 31000) mobs:spawn_specific("mobs_mc:pig", mobs_mc.spawn.grassland, {"air"}, 9, minetest.LIGHT_MAX+1, 30, 15000, 30, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility -- compatibility
mobs:alias_mob("mobs:pig", "mobs_mc:pig") mobs:alias_mob("mobs:pig", "mobs_mc:pig")

View File

@ -69,13 +69,9 @@ mobs:register_mob("mobs_mc:polar_bear", {
mobs:alias_mob("mobs_mc:polarbear", "mobs_mc:polar_bear") mobs:alias_mob("mobs_mc:polarbear", "mobs_mc:polar_bear")
mobs:register_spawn("mobs_mc:polar_bear", mobs_mc.spawn.snow, minetest.LIGHT_MAX+1, 0, 7000, 3, 31000) mobs:spawn_specific("mobs_mc:polar_bear", mobs_mc.spawn.snow, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 7000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- spawn egg -- spawn egg
mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0) mobs:register_egg("mobs_mc:polar_bear", S("Polar Bear"), "mobs_mc_spawn_icon_polarbear.png", 0)

View File

@ -104,10 +104,13 @@ mobs:register_mob("mobs_mc:killer_bunny", killer_bunny)
local spawn = { local spawn = {
name = "mobs_mc:rabbit", name = "mobs_mc:rabbit",
neighbors = {"air"},
chance = 15000, chance = 15000,
active_object_count = 99, active_object_count = 99,
min_light = 0, min_light = 0,
max_light = minetest.LIGHT_MAX+1, max_light = minetest.LIGHT_MAX+1,
min_height = mobs_mc.spawn_height.overworld_min,
max_height = mobs_mc.spawn_height.overworld_max,
} }
local spawn_desert = table.copy(spawn) local spawn_desert = table.copy(spawn)

View File

@ -202,7 +202,7 @@ mobs:register_mob("mobs_mc:sheep", {
if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end if mobs:capture_mob(self, clicker, 0, 5, 70, false, nil) then return end
end, end,
}) })
mobs:register_spawn("mobs_mc:sheep", mobs_mc.spawn.grassland, minetest.LIGHT_MAX+1, 0, 15000, 3, 31000) mobs:spawn_specific("mobs_mc:sheep", mobs_mc.spawn.grassland, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 3, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility -- compatibility
mobs:alias_mob("mobs_animal:sheep", "mobs_mc:sheep") mobs:alias_mob("mobs_animal:sheep", "mobs_mc:sheep")

View File

@ -83,12 +83,7 @@ mobs:register_arrow("mobs_mc:shulkerbullet", {
mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0) mobs:register_egg("mobs_mc:shulker", S("Shulker"), "mobs_mc_spawn_icon_shulker.png", 0)
--mobs:spawn_specific("mobs_mc:shulker", mobs_mc.spawn.end_city, 0, minetest.LIGHT_MAX+1, 5, 3, 1, -31000, -5000) mobs:spawn_specific("mobs_mc:shulker", mobs_mc.spawn.end_city, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 2, mobs_mc.spawn_height.end_min, mobs_mc.spawn_height.end_max)
mobs:spawn_specific("mobs_mc:shulker", "mcl_end:purpur_block", {"air"}, 0, minetest.LIGHT_MAX+1, 5, 20, 2, -31000, -5000)
mobs:spawn_specific("mobs_mc:shulker", "mcl_end:purpur_block", {"mcl_portals:void"}, 0, minetest.LIGHT_MAX+1, 5, 20, 2, -31000, -5000)
if minetest.settings:get_bool("log_mods") then if minetest.settings:get_bool("log_mods") then
minetest.log("action", "MC Shulkers loaded") minetest.log("action", "MC Shulkers loaded")

View File

@ -122,10 +122,15 @@ mobs:register_mob("mobs_mc:stray", stray)
-- compatibility -- compatibility
mobs:alias_mob("mobs:skeleton", "mobs_mc:skeleton") mobs:alias_mob("mobs:skeleton", "mobs_mc:skeleton")
--spawn -- Overworld spawn
mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.solid,{"air"}, 0, 7, 20, 17000, 2, -110, 31000) mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.solid, {"air"}, 0, 7, 20, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- Nether spawn
mobs:spawn_specific("mobs_mc:skeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 10000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
-- Stray spawn
-- TODO: Spawn directly under the sky -- TODO: Spawn directly under the sky
mobs:spawn_specific("mobs_mc:stray", mobs_mc.spawn.snow, {"air"}, 0, 7, 20, 19000, 2, -110, 31000) mobs:spawn_specific("mobs_mc:stray", mobs_mc.spawn.snow, {"air"}, 0, 7, 20, 19000, 2, mobs_mc.spawn_height.water, mobs_mc.spawn_height.overworld_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:skeleton", S("Skeleton"), "mobs_mc_spawn_icon_skeleton.png", 0) mobs:register_egg("mobs_mc:skeleton", S("Skeleton"), "mobs_mc_spawn_icon_skeleton.png", 0)

View File

@ -94,7 +94,8 @@ mobs:register_mob("mobs_mc:witherskeleton", {
}) })
--spawn --spawn
mobs:register_spawn("mobs_mc:witherskeleton", mobs_mc.spawn.nether_fortress, 7, 0, 5000, 3, -3000, true) mobs:spawn_specific("mobs_mc:witherskeleton", mobs_mc.spawn.nether_fortress, {"air"}, 0, 7, 30, 5000, 5, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0) mobs:register_egg("mobs_mc:witherskeleton", S("Wither Skeleton"), "mobs_mc_spawn_icon_witherskeleton.png", 0)

View File

@ -118,11 +118,12 @@ slime_tiny.on_die = nil
mobs:register_mob("mobs_mc:slime_tiny", slime_tiny) mobs:register_mob("mobs_mc:slime_tiny", slime_tiny)
local smin = mobs_mc.spawn_height.overworld_min
local smax = mobs_mc.spawn_height.water - 23
mobs:register_spawn("mobs_mc:slime_tiny", mobs_mc.spawn.solid, minetest.LIGHT_MAX+1, 0, 35000, 4, -12) mobs:spawn_specific("mobs_mc:slime_tiny", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 12000, 4, smin, smax)
mobs:register_spawn("mobs_mc:slime_small", mobs_mc.spawn.solid, minetest.LIGHT_MAX+1, 0, 35000, 4, -12) mobs:spawn_specific("mobs_mc:slime_small", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 8500, 4, smin, smax)
mobs:register_spawn("mobs_mc:slime_big", mobs_mc.spawn.solid, minetest.LIGHT_MAX+1, 0, 35000, 4, -12) mobs:spawn_specific("mobs_mc:slime_big", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 10000, 4, smin, smax)
-- Magma cube -- Magma cube
local magma_cube_big = { local magma_cube_big = {
@ -240,14 +241,17 @@ magma_cube_tiny.on_die = nil
mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny) mobs:register_mob("mobs_mc:magma_cube_tiny", magma_cube_tiny)
local mmin = mobs_mc.spawn_height.nether_min
local mmax = mobs_mc.spawn_height.nether_max
mobs:register_spawn("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether, minetest.LIGHT_MAX+1, 0, 15000, 4, -1000) mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15000, 4, mmin, mmax)
mobs:register_spawn("mobs_mc:magma_cube_small", mobs_mc.spawn.nether, minetest.LIGHT_MAX+1, 0, 15500, 4, -1000) mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 15500, 4, mmin, mmax)
mobs:register_spawn("mobs_mc:magma_cube_big", mobs_mc.spawn.nether, minetest.LIGHT_MAX+1, 0, 16000, 4, -1000) mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 16000, 4, mmin, mmax)
mobs:spawn_specific("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11000, 4, mmin, mmax)
mobs:spawn_specific("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11100, 4, mmin, mmax)
mobs:spawn_specific("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 11200, 4, mmin, mmax)
mobs:register_spawn("mobs_mc:magma_cube_tiny", mobs_mc.spawn.nether_fortress, minetest.LIGHT_MAX+1, 0, 11000, 4, -1000)
mobs:register_spawn("mobs_mc:magma_cube_small", mobs_mc.spawn.nether_fortress, minetest.LIGHT_MAX+1, 0, 11100, 4, -1000)
mobs:register_spawn("mobs_mc:magma_cube_big", mobs_mc.spawn.nether_fortress, minetest.LIGHT_MAX+1, 0, 11200, 4, -1000)
-- Compability -- Compability
mobs:alias_mob("mobs_mc:greensmall", "mobs_mc:slime_tiny") mobs:alias_mob("mobs_mc:greensmall", "mobs_mc:slime_tiny")

View File

@ -77,8 +77,7 @@ cave_spider.walk_velocity = 4.1
mobs:register_mob("mobs_mc:cave_spider", cave_spider) mobs:register_mob("mobs_mc:cave_spider", cave_spider)
mobs:register_spawn("mobs_mc:spider", mobs_mc.spawn.solid, 7, 0, 19500, 2, 3000) mobs:spawn_specific("mobs_mc:spider", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 17000, 2, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- compatibility -- compatibility
mobs:alias_mob("mobs:spider", "mobs_mc:spider") mobs:alias_mob("mobs:spider", "mobs_mc:spider")

View File

@ -60,7 +60,7 @@ mobs:register_mob("mobs_mc:squid", {
-- Spawn near the water surface -- Spawn near the water surface
local water = tonumber(minetest.settings:get("water_level")) or 0 local water = mobs_mc.spawn_height.water
--name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height --name, nodes, neighbours, minlight, maxlight, interval, chance, active_object_count, min_height, max_height
mobs:spawn_specific("mobs_mc:squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 5500, 3, water-16, water) mobs:spawn_specific("mobs_mc:squid", mobs_mc.spawn.water, {mobs_mc.items.water_source}, 0, minetest.LIGHT_MAX+1, 30, 5500, 3, water-16, water)

View File

@ -168,8 +168,7 @@ mobs:register_mob("mobs_mc:villager", {
]] ]]
}) })
--mobs:register_spawn("mobs_mc:villager", {"default:gravel"}, 7, -1, 4090, 4, 31000) mobs:spawn_specific("mobs_mc:villager", mobs_mc.spawn.village, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 8000, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max)
mobs:register_spawn("mobs_mc:villager", {"mg_villages:road"}, minetest.LIGHT_MAX+1, -1,8000, 4, 31000)
-- compatibility -- compatibility
mobs:alias_mob("mobs:villager", "mobs_mc:villager") mobs:alias_mob("mobs:villager", "mobs_mc:villager")

View File

@ -83,11 +83,8 @@ mobs:register_mob("mobs_mc:villager_zombie", {
fear_height = 5, fear_height = 5,
}) })
--mobs:register_spawn("mobs_mc:villager", {"default:gravel"}, 7, -1, 4090, 4, 31000)
mobs:register_spawn("mobs_mc:villager_zombie", {"mg_villages:road"}, 7, -1, 4090, 4, 31000)
mobs:spawn_specific("mobs_mc:villager_zombie", mobs_mc.spawn.village, {"air"}, 0, 7, 30, 4090, 4, mobs_mc.spawn_height.water+1, mobs_mc.spawn_height.overworld_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0) mobs:register_egg("mobs_mc:villager_zombie", S("Zombie Villager"), "mobs_mc_spawn_icon_zombie_villager.png", 0)

View File

@ -110,7 +110,7 @@ mobs:register_arrow(":mobs:potion_arrow", {
}) })
-- TODO: Spawn when witch works properly -- TODO: Spawn when witch works properly
--mobs:spawn_specific("mobs_mc:witch", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, 1, 30) --mobs:spawn_specific("mobs_mc:witch", mobs_mc.spawn.jungle, {"air"}, 0, minetest.LIGHT_MAX-6, 12, 20000, 2, mobs_mc.spawn_height.water-6, mobs_mc.spawn_height.overworld_max)
-- spawn eggs -- spawn eggs
mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0) mobs:register_egg("mobs_mc:witch", S("Witch"), "mobs_mc_spawn_icon_witch.png", 0)

View File

@ -207,7 +207,7 @@ end
mobs:register_mob("mobs_mc:dog", dog) mobs:register_mob("mobs_mc:dog", dog)
-- Spawn -- Spawn
mobs:register_spawn("mobs_mc:wolf", mobs_mc.spawn.wolf, minetest.LIGHT_MAX+1, 0, 9000, 20, 31000) mobs:spawn_specific("mobs_mc:wolf", mobs_mc.spawn.wolf, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 9000, 20, mobs_mc.spawn_height.water+3, mobs_mc.spawn_height.overworld_max)
-- Compatibility -- Compatibility
mobs:alias_mob("mobs:wolf", "mobs_mc:wolf") mobs:alias_mob("mobs:wolf", "mobs_mc:wolf")

View File

@ -122,12 +122,11 @@ mobs:register_mob("mobs_mc:baby_husk", baby_husk)
-- Spawning -- Spawning
mobs:register_spawn("mobs_mc:zombie", mobs_mc.spawn.solid, 7, 0, 6000, 4, 31000) mobs:spawn_specific("mobs_mc:zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 6000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- Baby zombie is 20 times less likely than regular zombies -- Baby zombie is 20 times less likely than regular zombies
mobs:register_spawn("mobs_mc:baby_zombie", mobs_mc.spawn.solid, 7, 0, 60000, 4, 31000) mobs:spawn_specific("mobs_mc:baby_zombie", mobs_mc.spawn.solid, {"air"}, 0, 7, 30, 60000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
mobs:register_spawn("mobs_mc:husk", mobs_mc.spawn.desert, 7, 0, 6500, 4, 31000) mobs:spawn_specific("mobs_mc:husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 6500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
mobs:register_spawn("mobs_mc:baby_husk", mobs_mc.spawn.desert, 7, 0, 65000, 4, 31000) mobs:spawn_specific("mobs_mc:baby_husk", mobs_mc.spawn.desert, {"air"}, 0, 7, 30, 65000, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
-- Compatibility -- Compatibility
mobs:alias_mob("mobs:zombie", "mobs_mc:zombie") mobs:alias_mob("mobs:zombie", "mobs_mc:zombie")

View File

@ -80,7 +80,7 @@ mobs:register_mob("mobs_mc:pigman", pigman)
local baby_pigman = table.copy(pigman) local baby_pigman = table.copy(pigman)
baby_pigman.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25} baby_pigman.collisionbox = {-0.25, -0.01, -0.25, 0.25, 0.94, 0.25}
baby_pigman.visual_size = {x=0.5, y=0.5} baby_pigman.visual_size = {x=pigman.visual_size.x/2, y=pigman.visual_size.y/2}
baby_pigman.textures = {{"mobs_mc_zombie_pigman.png"}} baby_pigman.textures = {{"mobs_mc_zombie_pigman.png"}}
baby_pigman.walk_velocity = 1.2 baby_pigman.walk_velocity = 1.2
baby_pigman.run_velocity = 2.4 baby_pigman.run_velocity = 2.4
@ -88,13 +88,13 @@ baby_pigman.light_damage = 0
mobs:register_mob("mobs_mc:baby_pigman", baby_pigman) mobs:register_mob("mobs_mc:baby_pigman", baby_pigman)
-- Regular spawning in the Nether
mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 6000, 3, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
-- Baby zombie is 20 times less likely than regular zombies -- Baby zombie is 20 times less likely than regular zombies
mobs:register_spawn("mobs_mc:baby_pigman", mobs_mc.spawn.nether, minetest.LIGHT_MAX+1, 0, 100000, 4, 31000) mobs:spawn_specific("mobs_mc:baby_pigman", mobs_mc.spawn.solid, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 100000, 4, mobs_mc.spawn_height.nether_min, mobs_mc.spawn_height.nether_max)
--mobs:register_spawn("mobs_mc:pigman", {"nether:rack"}, 17, -1, 5000, 3, -2000) -- Spawning in Nether portals in the Overworld
mobs:register_spawn("mobs_mc:pigman", mobs_mc.spawn.nether, minetest.LIGHT_MAX+1, 0, 6000, 3, -2000) mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air"}, 0, minetest.LIGHT_MAX+1, 30, 500, 4, mobs_mc.spawn_height.overworld_min, mobs_mc.spawn_height.overworld_max)
mobs:register_spawn("mobs_mc:pigman", mobs_mc.spawn.nether_portal, minetest.LIGHT_MAX+1, 0, 500, 4, 31000)
mobs:spawn_specific("mobs_mc:pigman", mobs_mc.spawn.nether_portal, {"air", "mcl_portals:nether_air"},0, minetest.LIGHT_MAX+1, 7, 9000, 2, -31000, 31000)
-- compatibility -- compatibility
mobs:alias_mob("mobs:pigman", "mobs_mc:pigman") mobs:alias_mob("mobs:pigman", "mobs_mc:pigman")

View File

@ -0,0 +1 @@
mcl_init

View File

@ -178,7 +178,28 @@ mobs_mc.override.spawn = {
desert = { "group:sand" }, desert = { "group:sand" },
jungle = { "mcl_core:podzol", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern" }, jungle = { "mcl_core:podzol", "mcl_core:jungletree", "mcl_core:jungleleaves", "mcl_flowers:fern" },
snow = { "mcl_core:snow", "mcl_core:snowblock", "mcl_core:dirt_with_grass_snow" }, snow = { "mcl_core:snow", "mcl_core:snowblock", "mcl_core:dirt_with_grass_snow" },
end_city = { "mcl_end:purpur_block" }, -- End stone added for shulkers because End cities don't generate yet
end_city = { "mcl_end:end_stone", "mcl_end:purpur_block" },
nether = { "mcl_nether:netherrack", "mcl_nether:quartz_ore" },
-- Netherrack added because there are no Nether fortresses yet. TODO: Remove netherrac from list as soon they're available
nether_fortress = { "mcl_nether:nether_brick", "mcl_nether:netherrack" },
wolf = { mobs_mc.override.items.grass_block, "mcl_core:dirt", "mcl_core:dirt_with_grass_snow", "mcl_core:snow", "mcl_core:snowblock", "mcl_core:podzol" }, wolf = { mobs_mc.override.items.grass_block, "mcl_core:dirt", "mcl_core:dirt_with_grass_snow", "mcl_core:snow", "mcl_core:snowblock", "mcl_core:podzol" },
} }
-- This table contains important spawn height references for the mob spawn height.
mobs_mc.override.spawn_height = {
water = tonumber(minetest.setting_get("water_level")) or 0, -- Water level in the Overworld
-- Overworld boundaries (inclusive)
overworld_min = mcl_vars.mg_overworld_min,
overworld_max = mcl_vars.mg_overworld_max,
-- Nether boundaries (inclusive)
nether_min = mcl_vars.mg_nether_min,
nether_max = mcl_vars.mg_nether_max,
-- End boundaries (inclusive)
end_min = mcl_vars.mg_end_min,
end_max = mcl_vars.mg_end_max,
}

View File

@ -74,7 +74,8 @@ skycolor = {
players = skycolor.utils.get_players(players) players = skycolor.utils.get_players(players)
for _, player in ipairs(players) do for _, player in ipairs(players) do
local pos = player:getpos() local pos = player:getpos()
if pos.y >= mcl_vars.mg_bedrock_overworld_max then local _, dim = mcl_util.y_to_layer(pos.y)
if dim == "overworld" then
player:set_sky(color, "plain", nil, true) player:set_sky(color, "plain", nil, true)
end end
end end
@ -112,7 +113,8 @@ skycolor = {
local players = skycolor.utils.get_players(nil) local players = skycolor.utils.get_players(nil)
for _, player in ipairs(players) do for _, player in ipairs(players) do
local pos = player:getpos() local pos = player:getpos()
if pos.y >= mcl_vars.mg_bedrock_overworld_max then local _, dim = mcl_util.y_to_layer(pos.y)
if dim == "overworld" then
player:set_sky(color, "plain", nil, true) player:set_sky(color, "plain", nil, true)
end end
end end
@ -125,7 +127,8 @@ skycolor = {
local players = skycolor.utils.get_players(players) local players = skycolor.utils.get_players(players)
for _, player in ipairs(players) do for _, player in ipairs(players) do
local pos = player:getpos() local pos = player:getpos()
if pos.y >= mcl_vars.mg_bedrock_overworld_max then local _, dim = mcl_util.y_to_layer(pos.y)
if dim == "overworld" then
player:set_sky(nil, "regular", nil, true) player:set_sky(nil, "regular", nil, true)
end end
end end

View File

@ -203,3 +203,5 @@ mesecon:register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
mesecon:register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on") mesecon:register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on")
mesecon:register_mvps_stopper("mesecons_noteblock:noteblock") mesecon:register_mvps_stopper("mesecons_noteblock:noteblock")
mesecon:register_mvps_stopper("3d_armor_stand:armor_stand") mesecon:register_mvps_stopper("3d_armor_stand:armor_stand")
mesecon:register_mvps_stopper("mcl_portals:portal")
mesecon:register_mvps_stopper("mcl_portals:portal_end")

View File

@ -1,3 +1,5 @@
mcl_sounds? mcl_sounds?
mcl_util?
mcl_wool? mcl_wool?
mcl_dye? mcl_dye?
mcl_tnt?

View File

@ -136,6 +136,17 @@ function mcl_beds.skip_night()
end end
function mcl_beds.on_rightclick(pos, player) function mcl_beds.on_rightclick(pos, player)
if minetest.get_modpath("mcl_init") then
local _, dim = mcl_util.y_to_layer(pos.y)
if dim == "nether" or dim == "end" then
-- Bed goes BOOM in the Nether or End.
minetest.remove_node(pos)
if minetest.get_modpath("mcl_tnt") then
tnt.boom(pos, {radius = 4, damage_radius = 4})
end
return
end
end
local name = player:get_player_name() local name = player:get_player_name()
local ppos = player:getpos() local ppos = player:getpos()
local tod = minetest.get_timeofday() * 24000 local tod = minetest.get_timeofday() * 24000

View File

@ -1,8 +1,6 @@
-- Minetest 0.4 mod: bucket -- Minetest 0.4 mod: bucket
-- See README.txt for licensing and other information. -- See README.txt for licensing and other information.
local LIQUID_MAX = 8 --The number of water levels when liquid_finite is enabled
minetest.register_alias("bucket:bucket_empty", "mcl_buckets:bucket_empty") minetest.register_alias("bucket:bucket_empty", "mcl_buckets:bucket_empty")
minetest.register_alias("bucket:bucket_water", "mcl_buckets:bucket_water") minetest.register_alias("bucket:bucket_water", "mcl_buckets:bucket_water")
minetest.register_alias("bucket:bucket_lava", "mcl_buckets:bucket_lava") minetest.register_alias("bucket:bucket_lava", "mcl_buckets:bucket_lava")
@ -39,18 +37,29 @@ local sound_take = function(itemname, pos)
end end
-- Register a new liquid -- Register a new liquid
-- source = name of the source node -- source_place = a string or function.
-- flowing = name of the flowing node -- * string: name of the node to place
-- itemname = name of the new bucket item (or nil if liquid is not takeable) -- * function(pos): will returns name of the node to place with pos being the placement position
-- source_take = table of liquid source node names to take
-- itemname = itemstring of the new bucket item (or nil if liquid is not takeable)
-- inventory_image = texture of the new bucket item (ignored if itemname == nil) -- inventory_image = texture of the new bucket item (ignored if itemname == nil)
-- This function can be called from any mod (that depends on bucket). -- name = user-visible bucket description
function mcl_buckets.register_liquid(source, flowing, itemname, inventory_image, name, longdesc, usagehelp) -- longdesc = long explanatory description (for help)
mcl_buckets.liquids[source] = { -- usagehelp = short usage explanation (for help)
source = source, -- extra_check = optional function(pos) which can returns false to avoid placing the liquid
flowing = flowing, --
itemname = itemname, -- This function can be called from any mod (which depends on this one)
} function mcl_buckets.register_liquid(source_place, source_take, itemname, inventory_image, name, longdesc, usagehelp, extra_check)
mcl_buckets.liquids[flowing] = mcl_buckets.liquids[source] for i=1, #source_take do
mcl_buckets.liquids[source_take[i]] = {
source_place = source_place,
source_take = source_take[i],
itemname = itemname,
}
if type(source_place) == "string" then
mcl_buckets.liquids[source_place] = mcl_buckets.liquids[source_take[i]]
end
end
if itemname ~= nil then if itemname ~= nil then
minetest.register_craftitem(itemname, { minetest.register_craftitem(itemname, {
@ -67,43 +76,38 @@ function mcl_buckets.register_liquid(source, flowing, itemname, inventory_image,
end end
local node = minetest.get_node(pointed_thing.under) local node = minetest.get_node(pointed_thing.under)
local place_pos = pointed_thing.under
local nn = node.name local nn = node.name
-- Call on_rightclick if the pointed node defines it -- Call on_rightclick if the pointed node defines it
if user and not user:get_player_control().sneak then if user and not user:get_player_control().sneak then
if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then if minetest.registered_nodes[nn] and minetest.registered_nodes[nn].on_rightclick then
return minetest.registered_nodes[nn].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack return minetest.registered_nodes[nn].on_rightclick(place_pos, node, user, itemstack) or itemstack
end end
end end
local place_liquid = function(pos, node, source, flowing, fullness) local place_liquid = function(pos, itemstring)
sound_place(source, pos) local fullness = minetest.registered_nodes[itemstring].liquid_range
if math.floor(fullness/128) == 1 or (not minetest.settings:get_bool("liquid_finite")) then sound_place(itemstring, pos)
minetest.add_node(pos, {name=source, param2=fullness}) minetest.add_node(pos, {name=itemstring, param2=fullness})
return
elseif node.name == flowing then
fullness = fullness + node.param2
elseif node.name == source then
fullness = LIQUID_MAX
end
if fullness >= LIQUID_MAX then
minetest.add_node(pos, {name=source, param2=LIQUID_MAX})
else
minetest.add_node(pos, {name=flowing, param2=fullness})
end
end end
local node_place
if type(source_place) == "function" then
node_place = source_place(place_pos)
else
node_place = source_place
end
-- Check if pointing to a buildable node -- Check if pointing to a buildable node
local fullness = tonumber(itemstack:get_metadata())
if not fullness then fullness = LIQUID_MAX end
local item = itemstack:get_name() local item = itemstack:get_name()
if item == "mcl_buckets:bucket_water" and if extra_check and extra_check(place_pos) == false then
-- Fail placement of liquid
elseif item == "mcl_buckets:bucket_water" and
(nn == "mcl_cauldrons:cauldron" or (nn == "mcl_cauldrons:cauldron" or
nn == "mcl_cauldrons:cauldron_1" or nn == "mcl_cauldrons:cauldron_1" or
nn == "mcl_cauldrons:cauldron_2") then nn == "mcl_cauldrons:cauldron_2") then
-- Put water into cauldron -- Put water into cauldron
minetest.set_node(pointed_thing.under, {name="mcl_cauldrons:cauldron_3"}) minetest.set_node(place_pos, {name="mcl_cauldrons:cauldron_3"})
sound_place("mcl_core:water_source", pos) sound_place("mcl_core:water_source", pos)
elseif item == "mcl_buckets:bucket_water" and nn == "mcl_cauldrons:cauldron_3" then elseif item == "mcl_buckets:bucket_water" and nn == "mcl_cauldrons:cauldron_3" then
@ -111,12 +115,12 @@ function mcl_buckets.register_liquid(source, flowing, itemname, inventory_image,
elseif minetest.registered_nodes[nn] and minetest.registered_nodes[nn].buildable_to then elseif minetest.registered_nodes[nn] and minetest.registered_nodes[nn].buildable_to then
-- buildable; replace the node -- buildable; replace the node
local pns = user:get_player_name() local pns = user:get_player_name()
if minetest.is_protected(pointed_thing.under, pns) then if minetest.is_protected(place_pos, pns) then
return itemstack return itemstack
end end
place_liquid(pointed_thing.under, node, source, flowing, fullness) place_liquid(place_pos, node_place)
if mod_doc and doc.entry_exists("nodes", source) then if mod_doc and doc.entry_exists("nodes", node_place) then
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", source) doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place)
end end
else else
-- not buildable to; place the liquid above -- not buildable to; place the liquid above
@ -127,9 +131,9 @@ function mcl_buckets.register_liquid(source, flowing, itemname, inventory_image,
if minetest.is_protected(pointed_thing.above, pn) then if minetest.is_protected(pointed_thing.above, pn) then
return itemstack return itemstack
end end
place_liquid(pointed_thing.above, node, source, flowing, fullness) place_liquid(pointed_thing.above, node_place)
if mod_doc and doc.entry_exists("nodes", source) then if mod_doc and doc.entry_exists("nodes", node_place) then
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", source) doc.mark_entry_as_revealed(user:get_player_name(), "nodes", node_place)
end end
else else
-- do not remove the bucket with the liquid -- do not remove the bucket with the liquid
@ -188,8 +192,7 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", {
-- Check if pointing to a liquid source -- Check if pointing to a liquid source
liquiddef = mcl_buckets.liquids[nn] liquiddef = mcl_buckets.liquids[nn]
local new_bucket local new_bucket
if liquiddef ~= nil and liquiddef.itemname ~= nil and (nn == liquiddef.source or if liquiddef ~= nil and liquiddef.itemname ~= nil and (nn == liquiddef.source_take) then
(nn == liquiddef.flowing and minetest.settings:get_bool("liquid_finite"))) then
-- Fill bucket, but not in Creative Mode -- Fill bucket, but not in Creative Mode
if not minetest.settings:get_bool("creative_mode") then if not minetest.settings:get_bool("creative_mode") then
@ -234,19 +237,37 @@ minetest.register_craftitem("mcl_buckets:bucket_empty", {
}) })
if mod_mcl_core then if mod_mcl_core then
-- Water bucket
mcl_buckets.register_liquid( mcl_buckets.register_liquid(
"mcl_core:water_source", "mcl_core:water_source",
"mcl_core:water_flowing", {"mcl_core:water_source"},
"mcl_buckets:bucket_water", "mcl_buckets:bucket_water",
"bucket_water.png", "bucket_water.png",
"Water Bucket", "Water Bucket",
"A bucket can be used to collect and release liquids. This one is filled with water.", "A bucket can be used to collect and release liquids. This one is filled with water.",
"Right-click on any block to empty the bucket and put a water source on this spot." "Right-click on any block to empty the bucket and put a water source on this spot.",
function(pos)
local _, dim = mcl_util.y_to_layer(pos.y)
if dim == "nether" then
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16})
return false
else
return true
end
end
) )
-- Lava bucket
mcl_buckets.register_liquid( mcl_buckets.register_liquid(
"mcl_core:lava_source", function(pos)
"mcl_core:lava_flowing", local _, dim = mcl_util.y_to_layer(pos.y)
if dim == "nether" then
return "mcl_nether:nether_lava_source"
else
return "mcl_core:lava_source"
end
end,
{"mcl_core:lava_source", "mcl_nether:nether_lava_source"},
"mcl_buckets:bucket_lava", "mcl_buckets:bucket_lava",
"bucket_lava.png", "bucket_lava.png",
"Lava Bucket", "Lava Bucket",

View File

@ -1,3 +1,4 @@
mcl_core mcl_init
mcl_util
mesecons mesecons
doc? doc?

View File

@ -12,10 +12,17 @@ mcl_clock.stereotype = "mcl_clock:clock"
local watch = {} local watch = {}
watch.old_time = -1 watch.old_time = -1
-- Image of all 64 possible faces local clock_frames = 64
-- Timer for random clock spinning
local random_timer = 0.0
local random_timer_trigger = 1.0 -- random clock spinning tick in seconds. Increase if there are performance problems
local random_frame = math.random(0, clock_frames-1)
-- Image of all possible faces
watch.images = {} watch.images = {}
for frame=0,63 do for frame=0, clock_frames-1 do
table.insert(watch.images, "mcl_clock_clock.png^[verticalframe:64:"..frame) table.insert(watch.images, "mcl_clock_clock.png^[verticalframe:"..clock_frames..":"..frame)
end end
local function round(num) local function round(num)
@ -23,9 +30,9 @@ local function round(num)
end end
function watch.get_clock_frame() function watch.get_clock_frame()
local t = 64 * minetest.get_timeofday() local t = clock_frames * minetest.get_timeofday()
t = round(t) t = round(t)
if t == 64 then t = 0 end if t == clock_frames then t = 0 end
return tostring(t) return tostring(t)
end end
@ -65,6 +72,12 @@ local force_clock_update_timer = 0
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
local now = watch.get_clock_frame() local now = watch.get_clock_frame()
force_clock_update_timer = force_clock_update_timer + dtime force_clock_update_timer = force_clock_update_timer + dtime
random_timer = random_timer + dtime
-- This causes the random spinning of the clock
if random_timer >= random_timer_trigger then
random_frame = (random_frame + math.random(-4, 4)) % clock_frames
random_timer = 0
end
if watch.old_time == now and force_clock_update_timer < 60 then if watch.old_time == now and force_clock_update_timer < 60 then
return return
@ -76,11 +89,19 @@ minetest.register_globalstep(function(dtime)
local players = minetest.get_connected_players() local players = minetest.get_connected_players()
for p, player in ipairs(players) do for p, player in ipairs(players) do
for s, stack in ipairs(player:get_inventory():get_list("main")) do for s, stack in ipairs(player:get_inventory():get_list("main")) do
local _, dim = mcl_util.y_to_layer(player:getpos().y)
local frame
-- Clocks do not work in the End, Nether or the Void
if dim == "end" or dim == "nether" or dim == "void" then
frame = random_frame
else
frame = now
end
local count = stack:get_count() local count = stack:get_count()
if stack:get_name() == mcl_clock.stereotype then if stack:get_name() == mcl_clock.stereotype then
player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..now.." "..count) player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count)
elseif string.sub(stack:get_name(), 1, 16) == "mcl_clock:clock_" then elseif minetest.get_item_group(stack:get_name(), "clock") ~= 0 then
player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..now.." "..count) player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count)
end end
end end
end end
@ -107,7 +128,7 @@ minetest.register_craft({
watch.register_item(mcl_clock.stereotype, watch.images[1], true, 1) watch.register_item(mcl_clock.stereotype, watch.images[1], true, 1)
-- Faces -- Faces
for a=0,63,1 do for a=0,clock_frames-1,1 do
local b = a local b = a
if b > 31 then if b > 31 then
b = b - 32 b = b - 32

View File

@ -1,3 +1,4 @@
mcl_core mcl_core
mcl_util
mesecons mesecons
doc? doc?

View File

@ -1,9 +1,23 @@
mcl_compass = {} mcl_compass = {}
local compass_frames = 32
local default_spawn_settings = minetest.settings:get("static_spawnpoint") local default_spawn_settings = minetest.settings:get("static_spawnpoint")
-- Timer for random compass spinning
local random_timer = 0
local random_timer_trigger = 0.5 -- random compass spinning tick in seconds. Increase if there are performance problems
local random_frame = math.random(0, compass_frames-1)
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
random_timer = random_timer + dtime
local players = minetest.get_connected_players() local players = minetest.get_connected_players()
if random_timer >= random_timer_trigger then
random_frame = (random_frame + math.random(-1, 1)) % compass_frames
random_timer = 0
end
for i,player in ipairs(players) do for i,player in ipairs(players) do
local function has_compass(player) local function has_compass(player)
for _,stack in ipairs(player:get_inventory():get_list("main")) do for _,stack in ipairs(player:get_inventory():get_list("main")) do
@ -14,24 +28,31 @@ minetest.register_globalstep(function(dtime)
return false return false
end end
if has_compass(player) then if has_compass(player) then
local spawn = {x=0,y=0,z=0}
local s = minetest.settings:get("static_spawnpoint")
if s then
local numbers = string.split(s, ",")
spawn.x = tonumber(numbers[1])
spawn.y = tonumber(numbers[2])
spawn.z = tonumber(numbers[3])
if type(spawn.x) ~= "number" and type(spawn.y) ~= "number" and type(spawn.z) ~= "number" then
spawn = {x=0,y=0,z=0}
end
end
local pos = player:getpos() local pos = player:getpos()
local dir = player:get_look_horizontal() local _, dim = mcl_util.y_to_layer(pos.y)
local angle_north = math.deg(math.atan2(spawn.x - pos.x, spawn.z - pos.z)) local compass_image
if angle_north < 0 then angle_north = angle_north + 360 end -- Compasses do not work in the End, Nether or the Void
local angle_dir = -math.deg(dir) if dim == "end" or dim == "nether" or dim == "void" then
local angle_relative = (angle_north - angle_dir + 180) % 360 compass_image = random_frame
local compass_image = math.floor((angle_relative/11.25) + 0.5)%32 else
local spawn = {x=0,y=0,z=0}
local s = minetest.settings:get("static_spawnpoint")
if s then
local numbers = string.split(s, ",")
spawn.x = tonumber(numbers[1])
spawn.y = tonumber(numbers[2])
spawn.z = tonumber(numbers[3])
if type(spawn.x) ~= "number" and type(spawn.y) ~= "number" and type(spawn.z) ~= "number" then
spawn = {x=0,y=0,z=0}
end
end
local dir = player:get_look_horizontal()
local angle_north = math.deg(math.atan2(spawn.x - pos.x, spawn.z - pos.z))
if angle_north < 0 then angle_north = angle_north + 360 end
local angle_dir = -math.deg(dir)
local angle_relative = (angle_north - angle_dir + 180) % 360
compass_image = math.floor((angle_relative/11.25) + 0.5) % compass_frames
end
for j,stack in ipairs(player:get_inventory():get_list("main")) do for j,stack in ipairs(player:get_inventory():get_list("main")) do
if minetest.get_item_group(stack:get_name(), "compass") ~= 0 and if minetest.get_item_group(stack:get_name(), "compass") ~= 0 and
@ -45,7 +66,7 @@ minetest.register_globalstep(function(dtime)
end) end)
local images = {} local images = {}
for frame=0,31 do for frame = 0, compass_frames-1 do
local s = string.format("%02d", frame) local s = string.format("%02d", frame)
table.insert(images, "mcl_compass_compass_"..s..".png") table.insert(images, "mcl_compass_compass_"..s..".png")
end end

View File

@ -642,7 +642,7 @@ end
local grass_spread_randomizer = PseudoRandom(minetest.get_mapgen_params().seed) local grass_spread_randomizer = PseudoRandom(minetest.get_mapgen_setting("seed"))
------------------------------ ------------------------------
-- Spread grass blocks and mycelium on neighbor dirt -- Spread grass blocks and mycelium on neighbor dirt

View File

@ -153,6 +153,8 @@ minetest.register_node("mcl_core:realm_barrier", {
wield_image = "mcl_core_barrier.png^[colorize:#FF00FF:127^[transformFX", wield_image = "mcl_core_barrier.png^[colorize:#FF00FF:127^[transformFX",
tiles = { "blank.png" }, tiles = { "blank.png" },
stack_max = 64, stack_max = 64,
-- To avoid players getting stuck forever between realms
damage_per_second = 8,
sunlight_propagates = true, sunlight_propagates = true,
is_ground_content = false, is_ground_content = false,
pointable = false, pointable = false,

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -15,17 +15,16 @@ minetest.register_craftitem("mcl_fire:fire_charge", {
end end
end end
-- Ignite/light fire
if pointed_thing.type == "node" then if pointed_thing.type == "node" then
if minetest.get_node(pointed_thing.under).name == "mcl_tnt:tnt" then local nodedef = minetest.registered_nodes[node.name]
tnt.ignite(pointed_thing.under) if nodedef and nodedef._on_ignite then
if not minetest.settings:get_bool("creative_mode") then nodedef._on_ignite(user, pointed_thing)
itemstack:take_item()
end
else else
mcl_fire.set_fire(pointed_thing) mcl_fire.set_fire(pointed_thing)
if not minetest.settings:get_bool("creative_mode") then end
itemstack:take_item() if not minetest.settings:get_bool("creative_mode") then
end itemstack:take_item()
end end
end end
return itemstack return itemstack

View File

@ -2,7 +2,7 @@
minetest.register_tool("mcl_fire:flint_and_steel", { minetest.register_tool("mcl_fire:flint_and_steel", {
description = "Flint and Steel", description = "Flint and Steel",
_doc_items_longdesc = "Flint and steel is a tool to start fires and ignite blocks.", _doc_items_longdesc = "Flint and steel is a tool to start fires and ignite blocks.",
_doc_items_usagehelp = "Rightclick the surface of a block to attempt to light a fire in front of it. On netherrack and magma blocks it will start an eternal fire. Using it on TNT will ignite it.", _doc_items_usagehelp = "Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited.",
inventory_image = "mcl_fire_flint_and_steel.png", inventory_image = "mcl_fire_flint_and_steel.png",
liquids_pointable = false, liquids_pointable = false,
stack_max = 1, stack_max = 1,
@ -25,7 +25,7 @@ minetest.register_tool("mcl_fire:flint_and_steel", {
if pointed_thing.type == "node" then if pointed_thing.type == "node" then
local nodedef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] local nodedef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
if nodedef and nodedef._on_ignite then if nodedef and nodedef._on_ignite then
nodedef._on_ignite(pointed_thing.under, user) nodedef._on_ignite(user, pointed_thing)
else else
mcl_fire.set_fire(pointed_thing) mcl_fire.set_fire(pointed_thing)
end end

View File

@ -376,10 +376,14 @@ local eternal_override = {
minetest.remove_node(pos) minetest.remove_node(pos)
end end
end, end,
_on_ignite = function(pos, player) _on_ignite = function(player, pointed_thing)
local pos = pointed_thing.under
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z} local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
if minetest.get_node(flame_pos).name == "air" then local fn = minetest.get_node(flame_pos)
if fn.name == "air" and not minetest.is_protected(flame_pos, "fire") and pointed_thing.under.y < pointed_thing.above.y then
minetest.set_node(flame_pos, {name = "mcl_fire:eternal_fire"}) minetest.set_node(flame_pos, {name = "mcl_fire:eternal_fire"})
else
mcl_fire.set_fire(pointed_thing)
end end
end, end,
} }
@ -392,7 +396,7 @@ end
-- Set pointed_thing on (normal) fire -- Set pointed_thing on (normal) fire
mcl_fire.set_fire = function(pointed_thing) mcl_fire.set_fire = function(pointed_thing)
local n = minetest.get_node(pointed_thing.above) local n = minetest.get_node(pointed_thing.above)
if n.name ~= "" and n.name == "air" and not minetest.is_protected(pointed_thing.above, "fire") then if n.name == "air" and not minetest.is_protected(pointed_thing.above, "fire") then
minetest.add_node(pointed_thing.above, {name="mcl_fire:fire"}) minetest.add_node(pointed_thing.above, {name="mcl_fire:fire"})
end end
end end

View File

@ -0,0 +1,7 @@
The MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,15 @@
# Portals mod for MineClone 2
## How to create portals
Nether portal: Build an upright frame of obsidian, 4 blocks wide and 5 blocks high, and use a flint and steel inside it.
End portal: Build an upright frame of red nether brick blocks, 4 blocks wide and 5 blocks high, and use an eye of ender inside it.
## Credits
Created by maikerumine and Wuzzy.
Code license: MIT License (see `LICENSE`).
Texture license: See main MineClone 2 directory.
License of sound: [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/)
Authors: [FreqMan](https://freesound.org/people/FreqMan/) and Wuzzy
Source: <https://freesound.org/people/FreqMan/sounds/32541/>

View File

@ -0,0 +1,7 @@
mcl_init
mcl_util
mcl_core
mcl_fire
mcl_nether
mcl_end
doc?

View File

@ -0,0 +1 @@
Adds buildable portals to the Nether and End dimensions.

View File

@ -0,0 +1,10 @@
-- Load files
-- Nether portal:
-- Obsidian frame, activated by flint and steel
dofile(minetest.get_modpath("mcl_portals").."/portal_nether.lua")
-- End portal (W.I.P):
-- Red nether brick block frame, activated by an eye of ender
dofile(minetest.get_modpath("mcl_portals").."/portal_end.lua")

View File

@ -0,0 +1 @@
name = mcl_portals

View File

@ -0,0 +1,448 @@
-- Parameters
local TCAVE = 0.6
local nobj_cave = nil
local SPAWN_MIN = mcl_vars.mg_end_min+70
local SPAWN_MAX = mcl_vars.mg_end_min+98
-- 3D noise
local np_cave = {
offset = 0,
scale = 1,
spread = {x = 384, y = 128, z = 384}, -- squashed 3:1
seed = 59033,
octaves = 5,
persist = 0.7
}
-- Portal frame material
local portal_frame = "mcl_nether:quartz_block"
-- Table of objects (including players) which recently teleported by a
-- End portal. Those objects have a brief cooloff period before they
-- can teleport again. This prevents annoying back-and-forth teleportation.
local portal_cooloff = {}
-- Destroy portal if pos (portal frame or portal node) got destroyed
local destroy_portal = function(pos)
-- Deactivate Nether portal
local meta = minetest.get_meta(pos)
local p1 = minetest.string_to_pos(meta:get_string("portal_frame1"))
local p2 = minetest.string_to_pos(meta:get_string("portal_frame2"))
if not p1 or not p2 then
return
end
local first = true
-- p1 metadata of first node
local mp1
for x = p1.x, p2.x do
for y = p1.y, p2.y do
for z = p1.z, p2.z do
local p = vector.new(x, y, z)
local m = minetest.get_meta(p)
if first then
--[[ Only proceed if the first node still has metadata.
If it doesn't have metadata, another node propably triggred the delection
routine earlier, so we bail out earlier to avoid an infinite cascade
of on_destroy events. ]]
mp1 = minetest.string_to_pos(m:get_string("portal_frame1"))
if not mp1 then
return
end
end
local nn = minetest.get_node(p).name
if nn == portal_frame or nn == "mcl_portals:portal_end" then
-- Remove portal nodes, but not myself
if nn == "mcl_portals:portal_end" and not vector.equals(p, pos) then
minetest.remove_node(p)
end
-- Clear metadata of portal nodes and the frame
m:set_string("portal_frame1", "")
m:set_string("portal_frame2", "")
m:set_string("portal_target", "")
end
first = false
end
end
end
end
-- Nodes
minetest.register_node("mcl_portals:portal_end", {
description = "End Portal",
_doc_items_longdesc = "An End portal teleports creatures and objects to the mysterious End dimension (and back!).",
_doc_items_usagehelp = "Stand in the portal for a moment to activate the teleportation. Entering such a portal for the first time will create a new portal in your destination. End portal which were built in the End will lead back to the Overworld. An End portal is destroyed if any of its surrounding frame blocks is destroyed.",
tiles = {
"blank.png",
"blank.png",
"blank.png",
"blank.png",
{
name = "mcl_portals_end_portal.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0,
},
},
{
name = "mcl_portals_end_portal.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 2.0,
},
},
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
use_texture_alpha = true,
walkable = false,
diggable = false,
pointable = false,
buildable_to = false,
is_ground_content = false,
drop = "",
-- This is 15 in MC.
light_source = 14,
post_effect_color = {a = 192, r = 0, g = 0, b = 0},
alpha = 192,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.1, 0.5, 0.5, 0.1},
},
},
groups = {not_in_creative_inventory = 1},
on_destruct = destroy_portal,
_mcl_hardness = -1,
_mcl_blast_resistance = 18000000,
})
local function build_end_portal(pos, target3)
local p = {x = pos.x - 1, y = pos.y - 1, z = pos.z}
local p1 = {x = pos.x - 1, y = pos.y - 1, z = pos.z}
local p2 = {x = p1.x + 3, y = p1.y + 4, z = p1.z}
for i = 1, 4 do
minetest.set_node(p, {name = portal_frame})
p.y = p.y + 1
end
for i = 1, 3 do
minetest.set_node(p, {name = portal_frame})
p.x = p.x + 1
end
for i = 1, 4 do
minetest.set_node(p, {name = portal_frame})
p.y = p.y - 1
end
for i = 1, 3 do
minetest.set_node(p, {name = portal_frame})
p.x = p.x - 1
end
for x = p1.x, p2.x do
for y = p1.y, p2.y do
p = {x = x, y = y, z = p1.z}
if not (x == p1.x or x == p2.x or y == p1.y or y == p2.y) then
minetest.set_node(p, {name = "mcl_portals:portal_end", param2 = 0})
end
local meta = minetest.get_meta(p)
meta:set_string("portal_frame1", minetest.pos_to_string(p1))
meta:set_string("portal_frame2", minetest.pos_to_string(p2))
meta:set_string("portal_target", minetest.pos_to_string(target3))
for z = -2, 2 do
if z ~= 0 then
local newp = {x=p.x, y=p.y, z=p.z+z}
if y ~= p1.y then
if minetest.registered_nodes[
minetest.get_node(newp).name].is_ground_content then
minetest.remove_node(newp)
end
else
if minetest.get_node(newp).name == "air" then
minetest.set_node(newp, {name="mcl_core:obsidian"})
end
end
end
end
end
end
end
local function find_end_target3_y2(target3_x, target3_z)
local start_y = math.random(SPAWN_MIN, SPAWN_MAX) -- Search start
if not nobj_cave then
nobj_cave = minetest.get_perlin(np_cave)
end
local air = 0 -- Consecutive air nodes found
for y = start_y, SPAWN_MIN, -1 do
local nval_cave = nobj_cave:get3d({x = target3_x, y = y, z = target3_z})
if nval_cave > TCAVE then -- Cavern
air = air + 1
else -- Not cavern, check if 4 nodes of space above
if air >= 4 then
return y + 2
else -- Not enough space, reset air to zero
air = 0
end
end
end
return start_y -- Fallback
end
local function move_check2(p1, max, dir)
local p = {x = p1.x, y = p1.y, z = p1.z}
local d = math.abs(max - p1[dir]) / (max - p1[dir])
while p[dir] ~= max do
p[dir] = p[dir] + d
if minetest.get_node(p).name ~= portal_frame then
return false
end
-- Abort if any of the portal frame blocks already has metadata.
-- This mod does not yet portals which neighbor each other directly.
-- TODO: Reorganize the way how portal frame coordinates are stored.
local meta = minetest.get_meta(p)
local p1 = meta:get_string("portal_frame1")
if minetest.string_to_pos(p1) ~= nil then
return false
end
end
return true
end
local function check_end_portal(p1, p2)
if p1.x ~= p2.x then
if not move_check2(p1, p2.x, "x") then
return false
end
if not move_check2(p2, p1.x, "x") then
return false
end
elseif p1.z ~= p2.z then
if not move_check2(p1, p2.z, "z") then
return false
end
if not move_check2(p2, p1.z, "z") then
return false
end
else
return false
end
if not move_check2(p1, p2.y, "y") then
return false
end
if not move_check2(p2, p1.y, "y") then
return false
end
return true
end
local function is_end_portal(pos)
for d = -3, 3 do
for y = -4, 4 do
local px = {x = pos.x + d, y = pos.y + y, z = pos.z}
local pz = {x = pos.x, y = pos.y + y, z = pos.z + d}
if check_end_portal(px, {x = px.x + 3, y = px.y + 4, z = px.z}) then
return px, {x = px.x + 3, y = px.y + 4, z = px.z}
end
if check_end_portal(pz, {x = pz.x, y = pz.y + 4, z = pz.z + 3}) then
return pz, {x = pz.x, y = pz.y + 4, z = pz.z + 3}
end
end
end
end
local function make_end_portal(pos)
local p1, p2 = is_end_portal(pos)
if not p1 or not p2 then
return false
end
for d = 1, 2 do
for y = p1.y + 1, p2.y - 1 do
local p
if p1.z == p2.z then
p = {x = p1.x + d, y = y, z = p1.z}
else
p = {x = p1.x, y = y, z = p1.z + d}
end
if minetest.get_node(p).name ~= "air" then
return false
end
end
end
local param2
if p1.z == p2.z then
param2 = 0
else
param2 = 1
end
local target3 = {x = p1.x, y = p1.y, z = p1.z}
target3.x = target3.x + 1
if target3.y < mcl_vars.mg_end_max and target3.y > mcl_vars.mg_end_min then
target3.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96)
else
target3.y = find_end_target3_y2(target3.x, target3.z)
end
for d = 0, 3 do
for y = p1.y, p2.y do
local p = {}
if param2 == 0 then
p = {x = p1.x + d, y = y, z = p1.z}
else
p = {x = p1.x, y = y, z = p1.z + d}
end
if minetest.get_node(p).name == "air" then
minetest.set_node(p, {name = "mcl_portals:portal_end", param2 = param2})
end
local meta = minetest.get_meta(p)
-- Portal frame corners
meta:set_string("portal_frame1", minetest.pos_to_string(p1))
meta:set_string("portal_frame2", minetest.pos_to_string(p2))
-- Portal target coordinates
meta:set_string("portal_target", minetest.pos_to_string(target3))
end
end
return true
end
minetest.register_abm({
label = "End portal teleportation",
nodenames = {"mcl_portals:portal_end"},
interval = 1,
chance = 2,
action = function(pos, node)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos,1)) do --maikerumine added for objects to travel
local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel
if obj:is_player() or lua_entity then
-- No rapid back-and-forth teleportatio
if portal_cooloff[obj] then
return
end
local meta = minetest.get_meta(pos)
local target3 = minetest.string_to_pos(meta:get_string("portal_target"))
if target3 then
-- force emerge of target3 area
minetest.get_voxel_manip():read_from_map(target3, target3)
if not minetest.get_node_or_nil(target3) then
minetest.emerge_area(
vector.subtract(target3, 4), vector.add(target3, 4))
end
-- teleport the object
minetest.after(3, function(obj, pos, target3)
-- No rapid back-and-forth teleportatio
if portal_cooloff[obj] then
return
end
local objpos = obj:getpos()
if objpos == nil then
return
end
-- If player stands, player is at ca. something+0.5
-- which might cause precision problems, so we used ceil.
objpos.y = math.ceil(objpos.y)
if minetest.get_node(objpos).name ~= "mcl_portals:portal_end" then
return
end
-- Build destination
local function check_and_build_end_portal(pos, target3)
local n = minetest.get_node_or_nil(target3)
if n and n.name ~= "mcl_portals:portal_end" then
build_end_portal(target3, pos)
minetest.after(2, check_and_build_end_portal, pos, target3)
elseif not n then
minetest.after(1, check_and_build_end_portal, pos, target3)
end
end
check_and_build_end_portal(pos, target3)
-- Teleport
obj:setpos(target3)
minetest.sound_play("mcl_portals_teleport", {pos=target3, gain=0.5, max_hear_distance = 16})
-- Enable teleportation cooloff to prevent frequent back-and-forth teleportation
portal_cooloff[obj] = true
minetest.after(3, function(o)
portal_cooloff[o] = false
end, obj)
end, obj, pos, target3)
end
end
end
end,
})
--[[ ITEM OVERRIDES ]]
local portal_open_help = "To open an End portal, place an upright frame of quartz blocks with a length of 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, use an eye of ender on the frame. The eye of ender is destroyed in the process."
-- Frame material
minetest.override_item(portal_frame, {
_doc_items_longdesc = "A block of quartz can be used to create End portals.",
_doc_items_usagehelp = portal_open_help,
on_destruct = destroy_portal,
})
-- Portal opener
minetest.override_item("mcl_end:ender_eye", {
_doc_items_longdesc = "An eye of ender can be used to open End portals.",
_doc_items_usagehelp = portal_open_help,
on_place = function(itemstack, user, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if user and not user:get_player_control().sneak then
if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then
return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, user, itemstack) or itemstack
end
end
-- If used on portal frame, open a portal
if pointed_thing.under and node.name == portal_frame then
local opened = make_end_portal(pointed_thing.under)
if opened then
if minetest.get_modpath("doc") then
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal_end")
end
minetest.sound_play(
"fire_flint_and_steel",
{pos = pointed_thing.above, gain = 0.5, max_hear_distance = 16})
if not minetest.settings:get_bool("creative_mode") then
itemstack:take_item() -- 1 use
end
end
end
return itemstack
end,
})

View File

@ -0,0 +1,453 @@
-- Parameters
local TCAVE = 0.6
local nobj_cave = nil
-- Portal frame sizes
local FRAME_SIZE_X_MIN = 4
local FRAME_SIZE_Y_MIN = 5
local FRAME_SIZE_X_MAX = 23
local FRAME_SIZE_Y_MAX = 23
-- 3D noise
local np_cave = {
offset = 0,
scale = 1,
spread = {x = 384, y = 128, z = 384},
seed = 59033,
octaves = 5,
persist = 0.7
}
-- Table of objects (including players) which recently teleported by a
-- Nether portal. Those objects have a brief cooloff period before they
-- can teleport again. This prevents annoying back-and-forth teleportation.
local portal_cooloff = {}
-- Destroy portal if pos (portal frame or portal node) got destroyed
local destroy_portal = function(pos)
-- Deactivate Nether portal
local meta = minetest.get_meta(pos)
local p1 = minetest.string_to_pos(meta:get_string("portal_frame1"))
local p2 = minetest.string_to_pos(meta:get_string("portal_frame2"))
if not p1 or not p2 then
return
end
local counter = 1
local mp1
for x = p1.x, p2.x do
for y = p1.y, p2.y do
for z = p1.z, p2.z do
local p = vector.new(x, y, z)
local m = minetest.get_meta(p)
if counter == 2 then
--[[ Only proceed if the second node still has metadata.
(first node is a corner and not needed for the portal)
If it doesn't have metadata, another node propably triggred the delection
routine earlier, so we bail out earlier to avoid an infinite cascade
of on_destroy events. ]]
mp1 = minetest.string_to_pos(m:get_string("portal_frame1"))
if not mp1 then
return
end
end
local nn = minetest.get_node(p).name
if nn == "mcl_core:obsidian" or nn == "mcl_portals:portal" then
-- Remove portal nodes, but not myself
if nn == "mcl_portals:portal" and not vector.equals(p, pos) then
minetest.remove_node(p)
end
-- Clear metadata of portal nodes and the frame
m:set_string("portal_frame1", "")
m:set_string("portal_frame2", "")
m:set_string("portal_target", "")
end
counter = counter + 1
end
end
end
end
minetest.register_node("mcl_portals:portal", {
description = "Nether Portal",
_doc_items_longdesc = "A Nether portal teleports creatures and objects to the hot and dangerous Nether dimension (and back!). Enter at your own risk!",
_doc_items_usagehelp = "Stand in the portal for a moment to activate the teleportation. Entering a Nether portal for the first time will also create a new portal in the other dimension. If a Nether portal has been built in the Nether, it will lead to the Overworld. A Nether portal is destroyed if the any of the obsidian which surrounds it is destroyed, or if it was caught in an explosion.",
tiles = {
"blank.png",
"blank.png",
"blank.png",
"blank.png",
{
name = "mcl_portals_portal.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.5,
},
},
{
name = "mcl_portals_portal.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 0.5,
},
},
},
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
use_texture_alpha = true,
walkable = false,
diggable = false,
pointable = false,
buildable_to = false,
is_ground_content = false,
drop = "",
light_source = 11,
post_effect_color = {a = 180, r = 128, g = 23, b = 23},
alpha = 192,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.1, 0.5, 0.5, 0.1},
},
},
groups = {not_in_creative_inventory = 1},
on_destruct = destroy_portal,
_mcl_hardness = -1,
_mcl_blast_resistance = 0,
})
-- Functions
--Build arrival portal
local function build_portal(pos, target)
local p = {x = pos.x - 1, y = pos.y - 1, z = pos.z}
local p1 = {x = pos.x - 1, y = pos.y - 1, z = pos.z}
local p2 = {x = p1.x + 3, y = p1.y + 4, z = p1.z}
for i = 1, FRAME_SIZE_Y_MIN - 1 do
minetest.set_node(p, {name = "mcl_core:obsidian"})
p.y = p.y + 1
end
for i = 1, FRAME_SIZE_X_MIN - 1 do
minetest.set_node(p, {name = "mcl_core:obsidian"})
p.x = p.x + 1
end
for i = 1, FRAME_SIZE_Y_MIN - 1 do
minetest.set_node(p, {name = "mcl_core:obsidian"})
p.y = p.y - 1
end
for i = 1, FRAME_SIZE_X_MIN - 1 do
minetest.set_node(p, {name = "mcl_core:obsidian"})
p.x = p.x - 1
end
for x = p1.x, p2.x do
for y = p1.y, p2.y do
p = {x = x, y = y, z = p1.z}
if not ((x == p1.x or x == p2.x) and (y == p1.y or y == p2.y)) then
if not (x == p1.x or x == p2.x or y == p1.y or y == p2.y) then
minetest.set_node(p, {name = "mcl_portals:portal", param2 = 0})
end
local meta = minetest.get_meta(p)
meta:set_string("portal_frame1", minetest.pos_to_string(p1))
meta:set_string("portal_frame2", minetest.pos_to_string(p2))
meta:set_string("portal_target", minetest.pos_to_string(target))
end
if y ~= p1.y then
for z = -2, 2 do
if z ~= 0 then
p.z = p.z + z
if minetest.registered_nodes[
minetest.get_node(p).name].is_ground_content then
minetest.remove_node(p)
end
p.z = p.z - z
end
end
end
end
end
end
local function find_nether_target_y(target_x, target_z)
local start_y = mcl_vars.mg_nether_min + math.random(38, 117) -- Search start
if not nobj_cave then
nobj_cave = minetest.get_perlin(np_cave)
end
local air = 4
for y = start_y, start_y -117, -1 do
local nval_cave = nobj_cave:get3d({x = target_x, y = y, z = target_z})
if nval_cave > TCAVE then -- Cavern
air = air + 1
else -- Not cavern, check if 4 nodes of space above
if air >= 4 then
return y + 2
else -- Not enough space, reset air to zero
air = 0
end
end
end
return start_y -- Fallback
end
local function move_check(p1, max, dir)
local p = {x = p1.x, y = p1.y, z = p1.z}
local d = math.sign(max - p1[dir])
local min = p[dir]
for k = min, max, d do
p[dir] = k
local node = minetest.get_node(p)
-- Check for obsidian (except at corners)
if k ~= min and k ~= max and node.name ~= "mcl_core:obsidian" then
return false
end
-- Abort if any of the portal frame blocks already has metadata.
-- This mod does not yet portals which neighbor each other directly.
-- TODO: Reorganize the way how portal frame coordinates are stored.
if node.name == "mcl_core:obsidian" then
local meta = minetest.get_meta(p)
local pframe1 = meta:get_string("portal_frame1")
if minetest.string_to_pos(pframe1) ~= nil then
return false
end
end
end
return true
end
local function check_portal(p1, p2)
if p1.x ~= p2.x then
if not move_check(p1, p2.x, "x") then
return false
end
if not move_check(p2, p1.x, "x") then
return false
end
elseif p1.z ~= p2.z then
if not move_check(p1, p2.z, "z") then
return false
end
if not move_check(p2, p1.z, "z") then
return false
end
else
return false
end
if not move_check(p1, p2.y, "y") then
return false
end
if not move_check(p2, p1.y, "y") then
return false
end
return true
end
local function is_portal(pos)
local xsize, ysize = FRAME_SIZE_X_MIN-1, FRAME_SIZE_Y_MIN-1
for d = -xsize, xsize do
for y = -ysize, ysize do
local px = {x = pos.x + d, y = pos.y + y, z = pos.z}
local pz = {x = pos.x, y = pos.y + y, z = pos.z + d}
if check_portal(px, {x = px.x + xsize, y = px.y + ysize, z = px.z}) then
return px, {x = px.x + xsize, y = px.y + ysize, z = px.z}
end
if check_portal(pz, {x = pz.x, y = pz.y + ysize, z = pz.z + xsize}) then
return pz, {x = pz.x, y = pz.y + ysize, z = pz.z + xsize}
end
end
end
end
local function make_portal(pos)
local p1, p2 = is_portal(pos)
if not p1 or not p2 then
return false
end
for d = 1, 2 do
for y = p1.y + 1, p2.y - 1 do
local p
if p1.z == p2.z then
p = {x = p1.x + d, y = y, z = p1.z}
else
p = {x = p1.x, y = y, z = p1.z + d}
end
if minetest.get_node(p).name ~= "air" then
return false
end
end
end
local param2
if p1.z == p2.z then
param2 = 0
else
param2 = 1
end
local target = {x = p1.x, y = p1.y, z = p1.z}
target.x = target.x + 1
if target.y < mcl_vars.mg_nether_max and target.y > mcl_vars.mg_nether_min then
target.y = math.random(mcl_vars.mg_overworld_min + 40, mcl_vars.mg_overworld_min + 96)
else
target.y = find_nether_target_y(target.x, target.z)
end
local dmin, dmax, ymin, ymax = 0, FRAME_SIZE_X_MIN - 1, p1.y, p2.y
for d = dmin, dmax do
for y = ymin, ymax do
if not ((d == dmin or d == dmax) and (y == ymin or y == ymax)) then
local p
if param2 == 0 then
p = {x = p1.x + d, y = y, z = p1.z}
else
p = {x = p1.x, y = y, z = p1.z + d}
end
if minetest.get_node(p).name == "air" then
minetest.set_node(p, {name = "mcl_portals:portal", param2 = param2})
end
local meta = minetest.get_meta(p)
-- Portal frame corners
meta:set_string("portal_frame1", minetest.pos_to_string(p1))
meta:set_string("portal_frame2", minetest.pos_to_string(p2))
-- Portal target coordinates
meta:set_string("portal_target", minetest.pos_to_string(target))
end
end
end
return true
end
minetest.register_abm({
label = "Nether portal teleportation and particles",
nodenames = {"mcl_portals:portal"},
interval = 1,
chance = 2,
action = function(pos, node)
minetest.add_particlespawner(
32, --amount
4, --time
{x = pos.x - 0.25, y = pos.y - 0.25, z = pos.z - 0.25}, --minpos
{x = pos.x + 0.25, y = pos.y + 0.25, z = pos.z + 0.25}, --maxpos
{x = -0.8, y = -0.8, z = -0.8}, --minvel
{x = 0.8, y = 0.8, z = 0.8}, --maxvel
{x = 0, y = 0, z = 0}, --minacc
{x = 0, y = 0, z = 0}, --maxacc
0.5, --minexptime
1, --maxexptime
1, --minsize
2, --maxsize
false, --collisiondetection
"mcl_portals_particle.png" --texture
)
for _,obj in ipairs(minetest.get_objects_inside_radius(pos,1)) do --maikerumine added for objects to travel
local lua_entity = obj:get_luaentity() --maikerumine added for objects to travel
if obj:is_player() or lua_entity then
-- Prevent quick back-and-forth teleportation
if portal_cooloff[obj] then
return
end
local meta = minetest.get_meta(pos)
local target = minetest.string_to_pos(meta:get_string("portal_target"))
if target then
-- force emerge of target area
minetest.get_voxel_manip():read_from_map(target, target)
if not minetest.get_node_or_nil(target) then
minetest.emerge_area(
vector.subtract(target, 4), vector.add(target, 4))
end
-- teleport the object
minetest.after(3, function(obj, pos, target)
-- Prevent quick back-and-forth teleportation
if portal_cooloff[obj] then
return
end
local objpos = obj:getpos()
if objpos == nil then
return
end
-- If player stands, player is at ca. something+0.5
-- which might cause precision problems, so we used ceil.
objpos.y = math.ceil(objpos.y)
if minetest.get_node(objpos).name ~= "mcl_portals:portal" then
return
end
-- Build target portal
local function check_and_build_portal(pos, target)
local n = minetest.get_node_or_nil(target)
if n and n.name ~= "mcl_portals:portal" then
build_portal(target, pos)
minetest.after(2, check_and_build_portal, pos, target)
elseif not n then
minetest.after(1, check_and_build_portal, pos, target)
end
end
check_and_build_portal(pos, target)
-- Teleport
obj:setpos(target)
minetest.sound_play("mcl_portals_teleport", {pos=target, gain=0.5, max_hear_distance = 16})
-- Enable teleportation cooloff for 4 seconds, to prevent back-and-forth teleportation
portal_cooloff[obj] = true
minetest.after(4, function(o)
portal_cooloff[o] = false
end, obj)
end, obj, pos, target)
end
end
end
end,
})
--[[ ITEM OVERRIDES ]]
local longdesc = minetest.registered_nodes["mcl_core:obsidian"]._doc_items_longdesc
longdesc = longdesc .. "\n" .. "Obsidian is also used as the frame of Nether portals."
local usagehelp = "To open a Nether portal, place an upright frame of obsidian with a width of 4 blocks and a height of 5 blocks, leaving only air in the center. After placing this frame, ignite the obsidian with an appropriate tool, such as flint of steel."
minetest.override_item("mcl_core:obsidian", {
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usagehelp,
on_destruct = destroy_portal,
_on_ignite = function(user, pointed_thing)
local pos = pointed_thing.under
local portal_placed = make_portal(pos)
if portal_placed and minetest.get_modpath("doc") then
doc.mark_entry_as_revealed(user:get_player_name(), "nodes", "mcl_portals:portal")
else
local node = minetest.get_node(pointed_thing.above)
if node.name ~= "mcl_portals:portal" then
mcl_fire.set_fire(pointed_thing)
end
end
end,
})

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -71,8 +71,8 @@ minetest.register_node("mcl_tnt:tnt", {
mesecons = {effector = { mesecons = {effector = {
action_on = tnt.ignite action_on = tnt.ignite
}}, }},
_on_ignite = function(pos, player) _on_ignite = function(player, pointed_thing)
tnt.ignite(pos) tnt.ignite(pointed_thing.under)
end, end,
sounds = sounds, sounds = sounds,
}) })

View File

@ -0,0 +1,5 @@
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1 @@
Biomes mod. By Wuzzy and maikerumine.

View File

@ -1,3 +1,4 @@
mcl_init
mcl_core mcl_core
mcl_farming mcl_farming
mcl_flowers mcl_flowers

View File

@ -0,0 +1 @@
Adds the various biomes and biome-related things for non-v6 map generators.

File diff suppressed because it is too large Load Diff

View File

@ -594,120 +594,14 @@ minetest.register_ore({
clust_scarcity = monster_egg_scarcity, clust_scarcity = monster_egg_scarcity,
clust_num_ores = 3, clust_num_ores = 3,
clust_size = 2, clust_size = 2,
y_min = -31000, y_min = mcl_vars.mg_overworld_min,
y_max = 31000, y_max = mcl_vars.mg_overworld_max,
-- TODO: Limit by biome -- TODO: Limit by biome
}) })
local function register_mgv6_decorations() local function register_mgv6_decorations()
-- Sugar canes
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = -0.3,
scale = 0.7,
spread = {x = 100, y = 100, z = 100},
seed = 2,
octaves = 3,
persist = 0.7
},
y_min = 1,
y_max = 1,
decoration = "mcl_core:reeds",
height = 2,
height_max = 4,
spawn_by = "mcl_core:water_source",
num_spawn_by = 1,
})
-- Cacti
minetest.register_decoration({
deco_type = "simple",
place_on = {"group:sand"},
sidelen = 16,
noise_params = {
offset = -0.012,
scale = 0.024,
spread = {x = 100, y = 100, z = 100},
seed = 257,
octaves = 3,
persist = 0.6
},
y_min = 4,
y_max = 30,
decoration = "mcl_core:cactus",
height = 1,
height_max = 3,
})
-- Doubletall grass
minetest.register_decoration({
deco_type = "schematic",
schematic = {
size = { x=1, y=3, z=1 },
data = {
{ name = "air", prob = 0 },
{ name = "mcl_flowers:double_grass", param1=255, },
{ name = "mcl_flowers:double_grass_top", param1=255, },
},
},
replacements = {
["mcl_flowers:tallgrass"] = "mcl_flowers:double_grass"
},
place_on = {"mcl_core:dirt_with_grass"},
sidelen = 8,
noise_params = {
offset = -0.01,
scale = 0.03,
spread = {x = 500, y = 500, z = 500},
seed = 420,
octaves = 2,
persist = 0.6,
},
y_min = 1,
y_max = 40,
flags = "",
})
-- Large ferns
minetest.register_decoration({
deco_type = "schematic",
schematic = {
size = { x=1, y=3, z=1 },
data = {
{ name = "air", prob = 0 },
{ name = "mcl_flowers:double_fern", param1=255, },
{ name = "mcl_flowers:double_fern_top", param1=255, },
},
},
replacements = {
["mcl_flowers:fern"] = "mcl_flowers:double_fern"
},
-- This makes sure large ferns only appear in jungles
spawn_by = { "mcl_core:jungletree", "mcl_flowers:fern" },
num_spawn_by = 1,
place_on = {"mcl_core:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.01,
spread = {x = 250, y = 250, z = 250},
seed = 333,
octaves = 2,
persist = 0.66,
},
y_min = 1,
y_max = 30,
flags = "",
})
-- Large flowers -- Large flowers
local register_large_flower = function(name, seed, offset) local register_large_flower = function(name, seed, offset)
minetest.register_decoration({ minetest.register_decoration({
@ -771,35 +665,10 @@ local function register_mgv6_decorations()
decoration = "mcl_flowers:tallgrass", decoration = "mcl_flowers:tallgrass",
}) })
local mushrooms = {"mcl_mushrooms:mushroom_red", "mcl_mushrooms:mushroom_brown"}
local mseeds = { 7133, 8244 }
for m=1, #mushrooms do
-- Mushrooms next to trees
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt_with_grass", "mcl_core:dirt", "mcl_core:podzol", "mcl_core:mycelium", "mcl_core:stone", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite"},
sidelen = 16,
noise_params = {
offset = 0,
scale = 0.04,
spread = {x = 100, y = 100, z = 100},
seed = mseeds[m],
octaves = 3,
persist = 0.6
},
y_min = 1,
y_max = 128,
decoration = mushrooms[m],
spawn_by = { "mcl_core:tree", "mcl_core:sprucetree", "mcl_core:darktree", "mcl_core:birchtree", "mcl_core:jungletree", "mcl_core:acaciatree" },
num_spawn_by = 1,
})
end
-- Dead bushes -- Dead bushes
minetest.register_decoration({ minetest.register_decoration({
deco_type = "simple", deco_type = "simple",
place_on = {"group:sand", "mcl_core:podzol", "mcl_core:coarse_dirt", "mcl_colorblocks:hardened_clay"}, place_on = {"group:sand", "mcl_core:podzol", "mcl_core:podzol_snow", "mcl_core:dirt", "mcl_core:coarse_dirt", "group:hardened_clay"},
sidelen = 16, sidelen = 16,
noise_params = { noise_params = {
offset = 0, offset = 0,
@ -849,60 +718,12 @@ local function register_mgv6_decorations()
register_mgv6_flower("oxeye_daisy", 3490) register_mgv6_flower("oxeye_daisy", 3490)
register_mgv6_flower("poppy", 9439) register_mgv6_flower("poppy", 9439)
-- Pumpkin
minetest.register_decoration({
deco_type = "schematic",
schematic = {
size = { x=1, y=2, z=1 },
data = {
{ name = "air", prob = 0 },
{ name = "mcl_farming:pumpkin_face", param1=255, },
},
},
place_on = {"mcl_core:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = -0.008,
scale = 0.00666,
spread = {x = 250, y = 250, z = 250},
seed = 666,
octaves = 6,
persist = 0.666
},
y_min = 3,
y_max = 29,
rotation = "random",
})
-- Melon
minetest.register_decoration({
deco_type = "simple",
place_on = {"mcl_core:dirt_with_grass"},
sidelen = 16,
noise_params = {
offset = 0.003,
scale = 0.006,
spread = {x = 250, y = 250, z = 250},
seed = 333,
octaves = 3,
persist = 0.6
},
-- Small trick to make sure melon spawn in jungles
spawn_by = { "mcl_core:jungletree", "mcl_flowers:fern" },
num_spawn_by = 1,
y_min = 1,
y_max = 40,
decoration = "mcl_farming:melon",
})
end end
-- Apply mapgen-specific mapgen code -- Apply mapgen-specific mapgen code
if mg_name == "v6" then if mg_name == "v6" then
register_mgv6_decorations() register_mgv6_decorations()
end elseif mg_name == "flat" then
if mg_name == "flat" then
local classic = minetest.get_mapgen_setting("mcl_superflat_classic") local classic = minetest.get_mapgen_setting("mcl_superflat_classic")
if classic == nil then if classic == nil then
classic = minetest.settings:get_bool("mcl_superflat_classic") classic = minetest.settings:get_bool("mcl_superflat_classic")
@ -953,7 +774,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
num_water_around = num_water_around + 1 end num_water_around = num_water_around + 1 end
if num_water_around >= 2 then if num_water_around >= 2 then
is_shallow = false is_shallow = false
end end
if is_shallow then if is_shallow then
for x1=-divlen,divlen do for x1=-divlen,divlen do
for z1=-divlen,divlen do for z1=-divlen,divlen do
@ -994,7 +815,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
break break
end end
end end
if ground_y then if ground_y then
local p = {x=x,y=ground_y+1,z=z} local p = {x=x,y=ground_y+1,z=z}
local nn = minetest.get_node(p).name local nn = minetest.get_node(p).name
@ -1041,7 +862,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
end end
end end
end end
end end
end end
end end
@ -1050,25 +871,178 @@ end)
-- Generate bedrock layer or layers -- Generate bedrock layer or layers
local BEDROCK_MIN = mcl_vars.mg_bedrock_overworld_min local GEN_MAX = mcl_vars.mg_lava_overworld_max or mcl_vars.mg_bedrock_overworld_max
local BEDROCK_MAX = mcl_vars.mg_bedrock_overworld_max
local GEN_MAX = mcl_vars.mg_lava_overworld_max or BEDROCK_MAX
-- Buffer for LuaVoxelManip -- Buffer for LuaVoxelManip
local lvm_buffer = {} local lvm_buffer = {}
-- Generate cocoas and vines at jungle trees within the bounding box
local function generate_jungle_tree_decorations(minp, maxp)
if maxp.y < 0 then
return
end
local pos, treepos, dir
local jungletree = minetest.find_nodes_in_area(minp, maxp, "mcl_core:jungletree")
local jungleleaves = minetest.find_nodes_in_area(minp, maxp, "mcl_core:jungleleaves")
-- Pass 1: Generate cocoas
for n = 1, #jungletree do
pos = jungletree[n]
treepos = table.copy(pos)
if minetest.find_node_near(pos, 1, {"mcl_core:jungleleaves"}) then
dir = math.random(1, 40)
if dir == 1 then
pos.z = pos.z + 1
elseif dir == 2 then
pos.z = pos.z - 1
elseif dir == 3 then
pos.x = pos.x + 1
elseif dir == 4 then
pos.x = pos.x -1
end
local nn = minetest.get_node(pos).name
if dir < 5
and nn == "air"
and minetest.get_node_light(pos) > 12 then
minetest.swap_node(pos, {
name = "mcl_cocoas:cocoa_" .. tostring(math.random(1, 3)),
param2 = minetest.dir_to_facedir(vector.subtract(treepos, pos))
})
end
end
end
-- Pass 2: Generate vines at jungle wood and jungle leaves
perlin_vines = perlin_vines or minetest.get_perlin(555, 4, 0.6, 500)
perlin_vines_fine = perlin_vines_fine or minetest.get_perlin(43000, 3, 0.6, 1)
perlin_vines_length = perlin_vines_length or minetest.get_perlin(435, 4, 0.6, 75)
perlin_vines_upwards = perlin_vines_upwards or minetest.get_perlin(436, 3, 0.6, 10)
perlin_vines_density = perlin_vines_density or minetest.get_perlin(436, 3, 0.6, 500)
local junglething
for i=1, 2 do
if i==1 then junglething = jungletree
else junglething = jungleleaves end
for n = 1, #junglething do
pos = junglething[n]
treepos = table.copy(pos)
local dirs = {
{x=1,y=0,z=0},
{x=-1,y=0,z=0},
{x=0,y=0,z=1},
{x=0,y=0,z=-1},
}
for d = 1, #dirs do
local pos = vector.add(pos, dirs[d])
local nn = minetest.get_node(pos).name
if perlin_vines:get2d(pos) > 0.1 and perlin_vines_fine:get3d(pos) > math.max(0.3333, perlin_vines_density:get2d(pos)) and nn == "air" then
local newnode = {
name = "mcl_core:vine",
param2 = minetest.dir_to_wallmounted(vector.subtract(treepos, pos))
}
-- Determine growth direction
local grow_upwards = false
-- Only possible on the wood, not on the leaves
if i == 1 then
grow_upwards = perlin_vines_upwards:get3d(pos) > 0.8
end
if grow_upwards then
-- Grow vines up 1-4 nodes, even through jungleleaves.
-- This may give climbing access all the way to the top of the tree :-)
-- But this will be fairly rare.
local length = math.ceil(math.abs(perlin_vines_length:get3d(pos)) * 4)
for l=0, length-1 do
local tnn = minetest.get_node(treepos).name
local nn = minetest.get_node(pos).name
if (nn == "air" or nn == "mcl_core:jungleleaves") and mcl_core.supports_vines(tnn) then
minetest.set_node(pos, newnode)
else
break
end
pos.y = pos.y + 1
treepos.y = treepos.y + 1
end
else
-- Grow vines down 1-7 nodes
local length = math.ceil(math.abs(perlin_vines_length:get3d(pos)) * 7)
for l=0, length-1 do
if minetest.get_node(pos).name == "air" then
minetest.set_node(pos, newnode)
else
break
end
pos.y = pos.y - 1
end
end
end
end
end
end
end
-- Generate mushrooms in caves
local generate_underground_mushrooms = function(minp, maxp)
-- Generate rare underground mushrooms
-- TODO: Make them appear in groups, use Perlin noise
if minp.y > 0 or maxp.y < -32 then
return
end
local bpos
local stone = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_core:stone", "mcl_core:dirt", "mcl_core:mycelium", "mcl_core:podzol", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite", "mcl_core:stone_with_coal", "mcl_core:stone_with_iron", "mcl_core:stone_with_gold"})
for n = 1, #stone do
bpos = {x = stone[n].x, y = stone[n].y + 1, z = stone[n].z }
if math.random(1,1000) < 4 and minetest.get_node_light(bpos, 0.5) <= 12 then
if math.random(1,2) == 1 then
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"})
else
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"})
end
end
end
end
-- Below the bedrock, generate air/void -- Below the bedrock, generate air/void
minetest.register_on_generated(function(minp, maxp) minetest.register_on_generated(function(minp, maxp)
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local data = vm:get_data(lvm_buffer) local data = vm:get_data(lvm_buffer)
local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax}) local area = VoxelArea:new({MinEdge=emin, MaxEdge=emax})
local lvm_used = false local lvm_used = false
local liquids_used = false
-- Generate bedrock and lava layers -- Generate bedrock and lava layers
if minp.y <= GEN_MAX then if minp.y <= GEN_MAX then
local c_bedrock = minetest.get_content_id("mcl_core:bedrock") local c_bedrock = minetest.get_content_id("mcl_core:bedrock")
local c_stone = minetest.get_content_id("mcl_core:stone")
local c_dirt = minetest.get_content_id("mcl_core:dirt")
local c_sand = minetest.get_content_id("mcl_core:sand")
local c_void = minetest.get_content_id("mcl_core:void") local c_void = minetest.get_content_id("mcl_core:void")
local c_lava = minetest.get_content_id("mcl_core:lava_source") local c_lava = minetest.get_content_id("mcl_core:lava_source")
local c_water = minetest.get_content_id("mcl_core:water_source")
local c_soul_sand = minetest.get_content_id("mcl_nether:soul_sand")
local c_netherrack = minetest.get_content_id("mcl_nether:netherrack")
local c_nether_lava = minetest.get_content_id("mcl_nether:nether_lava_source")
local c_end_stone = minetest.get_content_id("mcl_end:end_stone")
local c_realm_barrier = minetest.get_content_id("mcl_core:realm_barrier")
local c_air = minetest.get_content_id("air") local c_air = minetest.get_content_id("air")
local max_y = math.min(maxp.y, GEN_MAX) local max_y = math.min(maxp.y, GEN_MAX)
@ -1079,43 +1053,99 @@ minetest.register_on_generated(function(minp, maxp)
local p_pos = area:index(x, y, z) local p_pos = area:index(x, y, z)
local setdata = nil local setdata = nil
if mcl_vars.mg_bedrock_is_rough then if mcl_vars.mg_bedrock_is_rough then
-- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer local is_bedrock = function(y)
-- This code assumes a bedrock height of 5 layers. -- Bedrock layers with increasing levels of roughness, until a perfecly flat bedrock later at the bottom layer
if y == BEDROCK_MAX then -- This code assumes a bedrock height of 5 layers.
-- 50% bedrock chance
if math.random(1,2) == 1 then setdata = c_bedrock end local diff = mcl_vars.mg_bedrock_overworld_max - y -- Overworld bedrock
elseif y == BEDROCK_MAX -1 then local ndiff1 = mcl_vars.mg_bedrock_nether_bottom_max - y -- Nether bedrock, bottom
-- 66.666...% local ndiff2 = mcl_vars.mg_bedrock_nether_top_max - y -- Nether bedrock, ceiling
if math.random(1,3) <= 2 then setdata = c_bedrock end
elseif y == BEDROCK_MAX -2 then local top
-- 75% if diff == 0 or ndiff1 == 0 or ndiff2 == 4 then
if math.random(1,4) <= 3 then setdata = c_bedrock end -- 50% bedrock chance
elseif y == BEDROCK_MAX -3 then top = 2
-- 90% elseif diff == 1 or ndiff1 == 1 or ndiff2 == 3 then
if math.random(1,10) <= 9 then setdata = c_bedrock end -- 66.666...%
elseif y == BEDROCK_MAX -4 then top = 3
-- 100% elseif diff == 2 or ndiff1 == 2 or ndiff2 == 2 then
-- 75%
top = 4
elseif diff == 3 or ndiff1 == 3 or ndiff2 == 1 then
-- 90%
top = 10
elseif diff == 4 or ndiff1 == 4 or ndiff2 == 0 then
-- 100%
return true
else
-- Not in bedrock layer
return false
end
return math.random(1, top) <= top-1
end
if is_bedrock(y) then
setdata = c_bedrock setdata = c_bedrock
elseif y < BEDROCK_MIN then
setdata = c_void
end end
else else
-- Perfectly flat bedrock layer(s) -- Perfectly flat bedrock layer(s)
if y >= BEDROCK_MIN and y <= BEDROCK_MAX then if (y >= mcl_vars.mg_bedrock_overworld_min and y <= mcl_vars.mg_bedrock_overworld_max) or
(y >= mcl_vars.mg_bedrock_nether_bottom_min and y <= mcl_vars.mg_bedrock_nether_bottom_max) or
(y >= mcl_vars.mg_bedrock_nether_top_min and y <= mcl_vars.mg_bedrock_nether_top_max) then
setdata = c_bedrock setdata = c_bedrock
elseif y < BEDROCK_MIN then
setdata = c_void
end end
end end
if setdata then if setdata then
data[p_pos] = setdata data[p_pos] = setdata
lvm_used = true lvm_used = true
elseif mcl_vars.mg_lava and y <= mcl_vars.mg_lava_overworld_max then elseif mcl_util.is_in_void({x=x,y=y,z=z}) then
if data[p_pos] == c_air then data[p_pos] = c_void
data[p_pos] = c_lava
end
lvm_used = true lvm_used = true
-- Big lava seas by replacing air below a certain height
elseif mcl_vars.mg_lava and data[p_pos] == c_air then
if y <= mcl_vars.mg_lava_overworld_max and y >= mcl_vars.mg_overworld_min then
data[p_pos] = c_lava
lvm_used = true
liquids_used = true
elseif y <= mcl_vars.mg_lava_nether_max and y >= mcl_vars.mg_nether_min then
data[p_pos] = c_nether_lava
lvm_used = true
liquids_used = true
end
-- Water in the Nether or End? No way!
elseif data[p_pos] == c_water then
if y <= mcl_vars.mg_nether_max and y >= mcl_vars.mg_nether_min then
data[p_pos] = c_nether_lava
lvm_used = true
liquids_used = true
elseif y <= mcl_vars.mg_end_min + 104 and y >= mcl_vars.mg_end_min + 40 then
data[p_pos] = c_end_stone
lvm_used = true
elseif y <= mcl_vars.mg_end_max and y >= mcl_vars.mg_end_min then
data[p_pos] = c_air
lvm_used = true
end
-- Realm barrier between the Overworld void and the End
elseif y >= mcl_vars.mg_realm_barrier_overworld_end_min and y <= mcl_vars.mg_realm_barrier_overworld_end_max then
data[p_pos] = c_realm_barrier
lvm_used = true
-- Nether and End support for v6 because v6 does not support the biomes API
elseif mg_name == "v6" then
if y <= mcl_vars.mg_nether_max and y >= mcl_vars.mg_nether_min then
if data[p_pos] == c_stone then
data[p_pos] = c_netherrack
lvm_used = true
elseif data[p_pos] == c_sand or data[p_pos] == c_dirt then
data[p_pos] = c_soul_sand
lvm_used = true
end
elseif y <= mcl_vars.mg_end_max and y >= mcl_vars.mg_end_min then
if data[p_pos] == c_stone or data[p_pos] == c_dirt or data[p_pos] == c_sand then
data[p_pos] = c_air
lvm_used = true
end
end
end end
end end
end end
@ -1139,154 +1169,23 @@ minetest.register_on_generated(function(minp, maxp)
end end
end end
-- Set high light level in the End. This is very hacky and messes up the shadows below the End islands.
-- FIXME: Find a better way to do light.
if minp.y >= mcl_vars.mg_end_min and maxp.y <= mcl_vars.mg_end_max then
vm:set_lighting({day=14, night=14})
lvm_used = true
end
if lvm_used then if lvm_used then
vm:set_data(data) vm:set_data(data)
vm:calc_lighting() vm:calc_lighting()
vm:update_liquids() if liquids_used then
vm:update_liquids()
end
vm:write_to_map() vm:write_to_map()
end end
-- Generate rare underground mushrooms generate_underground_mushrooms(minp, maxp)
-- TODO: Make them appear in groups, use Perlin noise generate_jungle_tree_decorations(minp, maxp)
if minp.y > 0 or maxp.y < -32 then
return
end
local bpos
local stone = minetest.find_nodes_in_area_under_air(minp, maxp, {"mcl_core:stone", "mcl_core:dirt", "mcl_core:mycelium", "mcl_core:podzol", "mcl_core:andesite", "mcl_core:diorite", "mcl_core:granite", "mcl_core:stone_with_coal", "mcl_core:stone_with_iron", "mcl_core:stone_with_gold"})
for n = 1, #stone do
bpos = {x = stone[n].x, y = stone[n].y + 1, z = stone[n].z }
if math.random(1,1000) < 4 and minetest.get_node_light(bpos, 0.5) <= 12 then
if math.random(1,2) == 1 then
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_brown"})
else
minetest.set_node(bpos, {name = "mcl_mushrooms:mushroom_red"})
end
end
end
-- Generate cocoas and vines at jungle trees (v6 only)
if minetest.get_mapgen_setting("mg_name") == "v6" then
if maxp.y < 0 then
return
end
local pos, treepos, dir
local jungletree = minetest.find_nodes_in_area(minp, maxp, "mcl_core:jungletree")
local jungleleaves = minetest.find_nodes_in_area(minp, maxp, "mcl_core:jungleleaves")
-- Pass 1: Generate cocoas
for n = 1, #jungletree do
pos = jungletree[n]
treepos = table.copy(pos)
if minetest.find_node_near(pos, 1, {"mcl_core:jungleleaves"}) then
dir = math.random(1, 40)
if dir == 1 then
pos.z = pos.z + 1
elseif dir == 2 then
pos.z = pos.z - 1
elseif dir == 3 then
pos.x = pos.x + 1
elseif dir == 4 then
pos.x = pos.x -1
end
local nn = minetest.get_node(pos).name
if dir < 5
and nn == "air"
and minetest.get_node_light(pos) > 12 then
minetest.swap_node(pos, {
name = "mcl_cocoas:cocoa_" .. tostring(math.random(1, 3)),
param2 = minetest.dir_to_facedir(vector.subtract(treepos, pos))
})
end
end
end
-- Pass 2: Generate vines at jungle wood and jungle leaves
perlin_vines = perlin_vines or minetest.get_perlin(555, 4, 0.6, 500)
perlin_vines_fine = perlin_vines_fine or minetest.get_perlin(43000, 3, 0.6, 1)
perlin_vines_length = perlin_vines_length or minetest.get_perlin(435, 4, 0.6, 75)
perlin_vines_upwards = perlin_vines_upwards or minetest.get_perlin(436, 3, 0.6, 10)
perlin_vines_density = perlin_vines_density or minetest.get_perlin(436, 3, 0.6, 500)
local junglething
for i=1, 2 do
if i==1 then junglething = jungletree
else junglething = jungleleaves end
for n = 1, #junglething do
pos = junglething[n]
treepos = table.copy(pos)
local dirs = {
{x=1,y=0,z=0},
{x=-1,y=0,z=0},
{x=0,y=0,z=1},
{x=0,y=0,z=-1},
}
for d = 1, #dirs do
local pos = vector.add(pos, dirs[d])
local nn = minetest.get_node(pos).name
if perlin_vines:get2d(pos) > 0.1 and perlin_vines_fine:get3d(pos) > math.max(0.3333, perlin_vines_density:get2d(pos)) and nn == "air" then
local newnode = {
name = "mcl_core:vine",
param2 = minetest.dir_to_wallmounted(vector.subtract(treepos, pos))
}
-- Determine growth direction
local grow_upwards = false
-- Only possible on the wood, not on the leaves
if i == 1 then
grow_upwards = perlin_vines_upwards:get3d(pos) > 0.8
end
if grow_upwards then
-- Grow vines up 1-4 nodes, even through jungleleaves.
-- This may give climbing access all the way to the top of the tree :-)
-- But this will be fairly rare.
local length = math.ceil(math.abs(perlin_vines_length:get3d(pos)) * 4)
for l=0, length-1 do
local tnn = minetest.get_node(treepos).name
local nn = minetest.get_node(pos).name
if (nn == "air" or nn == "mcl_core:jungleleaves") and mcl_core.supports_vines(tnn) then
minetest.set_node(pos, newnode)
else
break
end
pos.y = pos.y + 1
treepos.y = treepos.y + 1
end
else
-- Grow vines down 1-7 nodes
local length = math.ceil(math.abs(perlin_vines_length:get3d(pos)) * 7)
for l=0, length-1 do
if minetest.get_node(pos).name == "air" then
minetest.set_node(pos, newnode)
else
break
end
pos.y = pos.y - 1
end
end
end
end
end
end
end
end) end)

21
mods/MISC/gt2mc2/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,317 @@
-- mods/gt2mc/craftitems.lua
--======================
--default to mcl_core
--======================
--tools
minetest.register_alias("default:stick", "mcl_core:stick")
minetest.register_alias("default:pick_wood", "mcl_tools:pick_wood")
minetest.register_alias("default:pick_stone", "mcl_tools:pick_stone")
minetest.register_alias("default:pick_steel", "mcl_tools:pick_iron")
minetest.register_alias("default:pick_gold", "mcl_tools:pick_gold")
minetest.register_alias("default:pick_mese", "mcl_tools:pick_gold")
minetest.register_alias("default:pick_diamond", "mcl_tools:pick_diamond")
minetest.register_alias("default:shovel_wood", "mcl_tools:shovel_wood")
minetest.register_alias("default:shovel_stone", "mcl_tools:shovel_stone")
minetest.register_alias("default:shovel_steel", "mcl_tools:shovel_iron")
minetest.register_alias("default:shovel_gold", "mcl_tools:shovel_gold")
minetest.register_alias("default:shovel_mese", "mcl_tools:shovel_gold")
minetest.register_alias("default:shovel_diamond", "mcl_tools:shovel_diamond")
minetest.register_alias("default:axe_wood", "mcl_tools:axe_wood")
minetest.register_alias("default:axe_stone", "mcl_tools:axe_stone")
minetest.register_alias("default:axe_steel", "mcl_tools:axe_iron")
minetest.register_alias("default:axe_gold", "mcl_tools:axe_gold")
minetest.register_alias("default:axe_diamond", "mcl_tools:axe_diamond")
minetest.register_alias("default:sword_wood", "mcl_tools:sword_wood")
minetest.register_alias("default:sword_stone", "mcl_tools:sword_stone")
minetest.register_alias("default:sword_steel", "mcl_tools:sword_iron")
minetest.register_alias("default:sword_gold", "mcl_tools:sword_gold")
minetest.register_alias("default:sword_mese", "mcl_tools:sword_gold")
minetest.register_alias("default:sword_diamond", "mcl_tools:sword_diamond")
minetest.register_alias("default:shears", "mcl_tools:shears")
minetest.register_alias("mobs:shears", "mcl_tools:shears")
--farming tools
minetest.register_alias("farming:hoe_stone", "mcl_farming:hoe_stone")
minetest.register_alias("farming:hoe_iron", "mcl_farming:hoe_iron")
minetest.register_alias("farming:hoe_steel", "mcl_farming:hoe_iron")
minetest.register_alias("farming:hoe_diamond", "mcl_farming:hoe_diamond")
minetest.register_alias("farming:hoe_gold", "mcl_farming:hoe_gold")
minetest.register_alias("farming:hoe_mese", "mcl_farming:hoe_gold")
--moredefault misc
minetest.register_alias("default:paper", "mcl_core:paper")
minetest.register_alias("mcl_books:paper", "mcl_core:paper")
minetest.register_alias("default:book", "mcl_books:book")
minetest.register_alias("default:book_written", "mcl_books:written_book")
minetest.register_alias("mcl_books:book_written", "mcl_books:written_book")
minetest.register_alias("default:bowl", "mcl_core:bowl")
minetest.register_alias("mobs:bowl", "mcl_core:bowl")
--default ores, ingots
minetest.register_alias("default:coal_lump", "mcl_core:coal_lump")
minetest.register_alias("default:charcoal", "mcl_core:charcoal")
minetest.register_alias("default:iron_lump", "mcl_core:stone_with_iron")
minetest.register_alias("default:steel_lump", "mcl_core:stone_with_iron")
minetest.register_alias("default:gold_lump", "mcl_core:stone_with_gold")
minetest.register_alias("default:steel_ingot", "mcl_core:iron_ingot")
minetest.register_alias("default:gold_ingot", "mcl_core:gold_ingot")
minetest.register_alias("mcl_core:steel_ingot", "mcl_core:iron_ingot")
minetest.register_alias("default:clay_lump", "mcl_core:clay_lump")
minetest.register_alias("default:mese_crystal_fragment", "mcl_core:iron_ingot")
minetest.register_alias("default:obsidian_shard", "mcl_core:iron_ingot")
minetest.register_alias("default:stone_with_coal", "mcl_core:stone_with_coal")
minetest.register_alias("default:iron_nugget", "mcl_core:ironnugget")
minetest.register_alias("default:gold_nugget", "mcl_core:goldnugget")
minetest.register_alias("default:mese_crystal", "mcl_core:redstone")
minetest.register_alias("mcl_core:redstone", "mesecons:redstone")
minetest.register_alias("default:emerald_crystal", "mcl_core:emerald")
minetest.register_alias("mcl_nether:quartz_crystal", "mcl_nether:quartz")
minetest.register_alias("default:quartz_crystal_piece", "mcl_nether:quartz")
minetest.register_alias("default:diamond", "mcl_core:diamond")
minetest.register_alias("default:clay_brick", "mcl_core:brick")
--======================
--bonemeal
--======================
minetest.register_alias("bonemeal:bonemeal", "mcl_dye:white")
minetest.register_alias("bonemeal:bone", "mcl_mobitems:bone")
--======================
--armor
--======================
minetest.register_alias("3d_armor:helmet_wood", "3d_armor:helmet_leather")
minetest.register_alias("3d_armor:chestplate_wood", "3d_armor:chestplate_leather")
minetest.register_alias("3d_armor:leggings_wood", "3d_armor:leggings_leather")
minetest.register_alias("3d_armor:boots_wood", "3d_armor:boots_leather")
minetest.register_alias("3d_armor:helmet_bronze", "3d_armor:helmet_gold")
minetest.register_alias("3d_armor:chestplate_bronze", "3d_armor:chestplate_gold")
minetest.register_alias("3d_armor:leggings_bronze", "3d_armor:leggings_gold")
minetest.register_alias("3d_armor:boots_bronze", "3d_armor:boots_gold")
--======================
--Cake
--======================
minetest.register_alias("cake:cake", "mcl_cake:cake")
--======================
--carts
--======================
minetest.register_alias("carts:cart", "mcl_minecarts:minecart")
--======================
--clock and compass
--======================
minetest.register_alias("clock:clock", "mcl_clock:clock")
minetest.register_alias("compass:compass", "mcl_compass:compass")
--clocks compass
minetest.register_alias("clock:1", "mcl_clock:clock_1")
minetest.register_alias("clock:2", "mcl_clock:clock_2")
minetest.register_alias("clock:3", "mcl_clock:clock_3")
minetest.register_alias("clock:4", "mcl_clock:clock_4")
minetest.register_alias("clock:5", "mcl_clock:clock_5")
minetest.register_alias("clock:6", "mcl_clock:clock_6")
minetest.register_alias("clock:7", "mcl_clock:clock_7")
minetest.register_alias("clock:8", "mcl_clock:clock_8")
minetest.register_alias("clock:9", "mcl_clock:clock_9")
minetest.register_alias("clock:10", "mcl_clock:clock_10")
minetest.register_alias("clock:11", "mcl_clock:clock_11")
minetest.register_alias("clock:12", "mcl_clock:clock_12")
minetest.register_alias("clock:13", "mcl_clock:clock_13")
minetest.register_alias("clock:14", "mcl_clock:clock_14")
minetest.register_alias("clock:15", "mcl_clock:clock_15")
minetest.register_alias("clock:16", "mcl_clock:clock_16")
minetest.register_alias("clock:17", "mcl_clock:clock_17")
minetest.register_alias("clock:18", "mcl_clock:clock_18")
minetest.register_alias("clock:19", "mcl_clock:clock_19")
minetest.register_alias("clock:20", "mcl_clock:clock_20")
minetest.register_alias("clock:21", "mcl_clock:clock_21")
minetest.register_alias("clock:22", "mcl_clock:clock_22")
minetest.register_alias("clock:23", "mcl_clock:clock_23")
minetest.register_alias("clock:24", "mcl_clock:clock_24")
minetest.register_alias("clock:25", "mcl_clock:clock_25")
minetest.register_alias("clock:26", "mcl_clock:clock_26")
minetest.register_alias("clock:27", "mcl_clock:clock_27")
minetest.register_alias("clock:28", "mcl_clock:clock_28")
minetest.register_alias("clock:29", "mcl_clock:clock_29")
minetest.register_alias("clock:30", "mcl_clock:clock_30")
minetest.register_alias("clock:31", "mcl_clock:clock_31")
minetest.register_alias("clock:32", "mcl_clock:clock_32")
minetest.register_alias("clock:33", "mcl_clock:clock_33")
minetest.register_alias("mcl_clock:33", "mcl_clock:clock_33")
minetest.register_alias("clock:34", "mcl_clock:clock_34")
minetest.register_alias("clock:35", "mcl_clock:clock_35")
minetest.register_alias("clock:36", "mcl_clock:clock_36")
minetest.register_alias("clock:37", "mcl_clock:clock_37")
minetest.register_alias("clock:38", "mcl_clock:clock_38")
minetest.register_alias("clock:39", "mcl_clock:clock_39")
minetest.register_alias("clock:40", "mcl_clock:clock_40")
--this is template
--minetest.register_alias("clock:57", "mcl_clock:clock_57")
--
--minetest.register_alias("compass:0", "mcl_compass:0")
--
minetest.register_alias("compass:compass", "mcl_compass:compass")
minetest.register_alias("compass:0", "mcl_compass:0")
minetest.register_alias("compass:1", "mcl_compass:1")
minetest.register_alias("compass:2", "mcl_compass:2")
minetest.register_alias("compass:3", "mcl_compass:3")
minetest.register_alias("compass:4", "mcl_compass:4")
minetest.register_alias("compass:5", "mcl_compass:5")
minetest.register_alias("compass:6", "mcl_compass:6")
minetest.register_alias("compass:7", "mcl_compass:7")
minetest.register_alias("compass:8", "mcl_compass:8")
minetest.register_alias("compass:9", "mcl_compass:9")
minetest.register_alias("compass:10", "mcl_compass:10")
minetest.register_alias("compass:11", "mcl_compass:11")
minetest.register_alias("compass:12", "mcl_compass:12")
minetest.register_alias("compass:13", "mcl_compass:13")
minetest.register_alias("compass:14", "mcl_compass:14")
minetest.register_alias("compass:15", "mcl_compass:15")
minetest.register_alias("compass:16", "mcl_compass:16")
minetest.register_alias("compass:17", "mcl_compass:17")
minetest.register_alias("compass:18", "mcl_compass:18")
minetest.register_alias("compass:19", "mcl_compass:19")
minetest.register_alias("compass:20", "mcl_compass:20")
minetest.register_alias("compass:21", "mcl_compass:17")
minetest.register_alias("compass:22", "mcl_compass:17")
minetest.register_alias("compass:23", "mcl_compass:17")
minetest.register_alias("compass:24", "mcl_compass:17")
minetest.register_alias("compass:25", "mcl_compass:17")
minetest.register_alias("compass:26", "mcl_compass:17")
minetest.register_alias("compass:27", "mcl_compass:17")
minetest.register_alias("compass:28", "mcl_compass:17")
minetest.register_alias("compass:29", "mcl_compass:29")
minetest.register_alias("compass:30", "mcl_compass:30")
minetest.register_alias("compass:31", "mcl_compass:31")
minetest.register_alias("compass:32", "mcl_compass:32")
minetest.register_alias("compass:33", "mcl_compass:33")
--======================
--dye
--======================
minetest.register_alias("dye:white", "mcl_dye:white")
minetest.register_alias("dye:brown", "mcl_dye:brown")
minetest.register_alias("dye:dark_grey", "mcl_dye:dark_grey")
minetest.register_alias("dye:lightblue", "mcl_dye:lightblue")
minetest.register_alias("dye:grey", "mcl_dye:grey")
minetest.register_alias("dye:green", "mcl_dye:green")
minetest.register_alias("dye:magenta", "mcl_dye:magenta")
minetest.register_alias("dye:pink", "mcl_dye:pink")
minetest.register_alias("dye:cyan", "mcl_dye:cyan")
minetest.register_alias("dye:violet", "mcl_dye:violet")
minetest.register_alias("dye:orange", "mcl_dye:orange")
minetest.register_alias("dye:yellow", "mcl_dye:yellow")
minetest.register_alias("dye:red", "mcl_dye:red")
minetest.register_alias("dye:black", "mcl_dye:black")
minetest.register_alias("dye:blue", "mcl_dye:blue")
minetest.register_alias("dye:dark_green", "mcl_dye:dark_green")
--======================
--farorb
--======================
minetest.register_alias("farorb:farorb", "mcl_end:ender_eye")
--======================
--flintsteel
--======================
minetest.register_alias("default:flint_and_steel", "mcl_fire:flint_and_steel")
minetest.register_alias("default:flint", "mcl_fire:flint")
minetest.register_alias("mcl_fire:flint", "mcl_core:flint")
--======================
--fishing
--======================
minetest.register_alias("fishing:fish_raw", "mcl_fishing:fish_raw")
minetest.register_alias("fishing:fish_cooked", "mcl_fishing:fish_raw")
minetest.register_alias("fishing:sushi", "mcl_fishing:fish_raw")
minetest.register_alias("fishing:salmon_raw", "mcl_fishing:salmon_raw")
minetest.register_alias("fishing:salmon_cooked", "mcl_fishing:salmon_cooked")
minetest.register_alias("fishing:clownfish_raw", "mcl_fishing:clownfish_raw")
minetest.register_alias("fishing:bluewhite_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:exoticfish_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:carp_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:perch_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:carp_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:catfish_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:shark_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:pike_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:pike_cooked", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:shark_cooked", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:shark_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:shark_raw", "mcl_fishing:pufferfish_raw")
minetest.register_alias("fishing:pole_wood", "mcl_fishing:fishing_rod")
minetest.register_alias("fishing:pole_perfect", "mcl_fishing:fishing_rod")
minetest.register_alias("fishing:bait_worm", "mcl_fishing:fishing_rod")
minetest.register_alias("fishing:bait_corn", "mcl_fishing:fishing_rod")
minetest.register_alias("fishing:bait_bread", "mcl_fishing:fishing_rod")
minetest.register_alias("fishing:baitball", "mcl_fishing:fishing_rod")
minetest.register_alias("fishing:baitball_shark", "mcl_fishing:fishing_rod")
--======================
--GoldenApple
--======================
minetest.register_alias("golden_apple:golden_apple", "mcl_core:apple_gold")
minetest.register_alias("default:golden_apple", "mcl_core:apple_gold")
--======================
--MC2 jukebox
--======================
minetest.register_alias("jdukebox:box", "mcl_jukebox:jukebox")
minetest.register_alias("jdukebox:disc_1", "mcl_jukebox:record_1")
minetest.register_alias("jdukebox:disc_2", "mcl_jukebox:record_2")
minetest.register_alias("jdukebox:disc_3", "mcl_jukebox:record_3")
minetest.register_alias("jdukebox:disc_4", "mcl_jukebox:record_4")
minetest.register_alias("jdukebox:disc_5", "mcl_jukebox:record_5")
minetest.register_alias("jdukebox:disc_6", "mcl_jukebox:record_6")
minetest.register_alias("jdukebox:disc_7", "mcl_jukebox:record_7")
minetest.register_alias("jdukebox:disc_8", "mcl_jukebox:record_8")
--======================
--hoppers
--======================
minetest.register_alias("hoppers:hopper", "mcl_hoppers:hopper")
minetest.register_alias("hoppers:hopper_side", "mcl_hoppers:hopper_side")
--======================
--MC2 boats
--======================
minetest.register_alias("boats:boat", "mcl_boats:boat_spruce")
minetest.register_alias("boats:boat_oak", "mcl_boats:boat_oak")
minetest.register_alias("boats:boat_spruce", "mcl_boats:boat_spruce")
minetest.register_alias("boats:boat_birch", "mcl_boats:boat_birch")
minetest.register_alias("boats:boat_jungle", "mcl_boats:boat_jungle")
minetest.register_alias("boats:boat_acacia", "mcl_boats:boat_acacia")
minetest.register_alias("boats:boat_dark_oak", "mcl_boats:boat_dark_oak")
--======================
--screwdriver
--======================
minetest.register_alias("screwdriver:screwdriver", "mcl_core:bowl")
--======================
--tnt
--======================
minetest.register_alias("tnt:tnt", "mcl_tnt:tnt")
minetest.register_alias("tnt:gunpowder", "mcl_tnt:tnt")
--======================
--vessels
--======================
minetest.register_alias("vessels:shelf", "mcl_core:bowl")
minetest.register_alias("vessels:glass_bottle", "bucket:bucket_empty")
minetest.register_alias("vessels:drinking_glass", "bucket:bucket_empty")
minetest.register_alias("vessels:steel_bottle", "bucket:bucket_empty")
minetest.register_alias("vessels:glass_fragments", "bucket:bucket_empty")
--======================
--xdecor
--======================
minetest.register_alias("xdecor:hammer", "bucket:bucket_empty")

View File

@ -0,0 +1,2 @@
mobs?

View File

@ -0,0 +1,55 @@
minetest.register_alias("xdecor:enchantment_table", "mcl_enchanting:enchantment_table")
minetest.register_alias("xdecor:book_open", "mcl_enchanting:book_open")
mobs:alias_mob("xdecor:book_open", "mcl_enchanting:book_open")
-- mods/gt2mc/init.lua
-- axe = {enchants = "durable, fast"},
-- pick = {enchants = "durable, fast"},
-- shovel = {enchants = "durable, fast"},
-- sword = {enchants = "sharp"}
minetest.register_alias("default:pick_stone", "mcl_tools:pick_stone")
minetest.register_alias("default:pick_steel", "mcl_tools:pick_iron")
minetest.register_alias("default:pick_gold", "mcl_tools:pick_gold")
minetest.register_alias("default:pick_mese", "mcl_tools:pick_gold")
minetest.register_alias("default:enchanted_pick_diamond_durable", "mcl_tools:enchanted_pick_diamond_durable")
minetest.register_alias("default:enchanted_pick_diamond_fast", "mcl_tools:enchanted_pick_diamond_fast")
minetest.register_alias("default:shovel_stone", "mcl_tools:shovel_stone")
minetest.register_alias("default:shovel_steel", "mcl_tools:shovel_iron")
minetest.register_alias("default:shovel_gold", "mcl_tools:shovel_gold")
minetest.register_alias("default:shovel_mese", "mcl_tools:shovel_gold")
minetest.register_alias("default:enchanted_shovel_diamond_durable", "mcl_tools:enchanted_shovel_diamond_durable")
minetest.register_alias("default:enchanted_shovel_diamond_fast", "mcl_tools:enchanted_shovel_diamond_fast")
minetest.register_alias("default:axe_stone", "mcl_tools:axe_stone")
minetest.register_alias("default:axe_steel", "mcl_tools:axe_iron")
minetest.register_alias("default:axe_gold", "mcl_tools:axe_gold")
minetest.register_alias("default:enchanted_axe_diamond_durable", "mcl_tools:enchanted_axe_diamond_durable")
minetest.register_alias("default:enchanted_axe_diamond_fast", "mcl_tools:enchanted_axe_diamond_fast")
minetest.register_alias("default:sword_stone", "mcl_tools:sword_stone")
minetest.register_alias("default:sword_steel", "mcl_tools:sword_iron")
minetest.register_alias("default:sword_gold", "mcl_tools:sword_gold")
minetest.register_alias("default:sword_mese", "mcl_tools:sword_gold")
minetest.register_alias("default:enchanted_sword_diamond_sharp", "mcl_tools:enchanted_sword_diamond_sharp")

792
mods/MISC/gt2mc2/init.lua Normal file
View File

@ -0,0 +1,792 @@
-- mods/gt2mc/init.lua
dofile(minetest.get_modpath("gt2mc2").."/craftitems.lua")
dofile(minetest.get_modpath("gt2mc2").."/enchanted.lua")
dofile(minetest.get_modpath("gt2mc2").."/mob_items.lua")
--======================
--MC2 beds
--======================
minetest.register_alias("beds:fancy_bed", "beds:bed")
minetest.register_alias("beds:simple_bed", "beds:bed")
--======================
--MC2 colorblocks
--======================
minetest.register_alias("hardenedclay:hardened_clay_red", "mcl_colorblocks:hardened_clay_red")
minetest.register_alias("hardenedclay:hardened_clay_yellow", "mcl_colorblocks:hardened_clay_yellow")
minetest.register_alias("hardenedclay:hardened_clay_orange", "mcl_colorblocks:hardened_clay_orange")
minetest.register_alias("hardenedclay:hardened_clay_brown", "mcl_colorblocks:hardened_clay_brown")
minetest.register_alias("hardenedclay:hardened_clay_blue", "mcl_colorblocks:hardened_clay_blue")
minetest.register_alias("hardenedclay:hardened_clay_light_blue", "mcl_colorblocks:hardened_clay_light_blue")
minetest.register_alias("hardenedclay:hardened_clay_cyan", "mcl_colorblocks:hardened_clay_cyan")
minetest.register_alias("hardenedclay:hardened_clay_pink", "mcl_colorblocks:hardened_clay_pink")
minetest.register_alias("hardenedclay:hardened_clay_magenta", "mcl_colorblocks:hardened_clay_magenta")
minetest.register_alias("hardenedclay:hardened_clay_purple", "mcl_colorblocks:hardened_clay_purple")
minetest.register_alias("hardenedclay:hardened_clay_green", "mcl_colorblocks:hardened_clay_green")
minetest.register_alias("hardenedclay:hardened_clay_dark_green", "mcl_colorblocks:hardened_clay_dark_green")
minetest.register_alias("hardenedclay:hardened_clay_white", "mcl_colorblocks:hardened_clay_white")
minetest.register_alias("hardenedclay:hardened_clay_gray", "mcl_colorblocks:hardened_clay_grey")
minetest.register_alias("hardenedclay:hardened_clay_light_gray", "mcl_colorblocks:hardened_clay_grey")
minetest.register_alias("hardenedclay:hardened_clay_dark_gray", "mcl_colorblocks:hardened_clay_dark_grey")
minetest.register_alias("hardenedclay:hardened_clay_black", "mcl_colorblocks:hardened_clay_black")
--======================
--carpet3d
--======================
minetest.register_alias("carpet3d:white", "mcl_wool:white_carpet")
minetest.register_alias("carpet3d:grey", "mcl_wool:grey_carpet")
minetest.register_alias("carpet3d:silver", "mcl_wool:silver_carpet")
minetest.register_alias("carpet3d:black", "mcl_wool:black_carpet")
minetest.register_alias("carpet3d:red", "mcl_wool:red_carpet")
minetest.register_alias("carpet3d:yellow", "mcl_wool:yellow_carpet")
minetest.register_alias("carpet3d:green", "mcl_wool:green_carpet")
minetest.register_alias("carpet3d:cyan", "mcl_wool:cyan_carpet")
minetest.register_alias("carpet3d:blue", "mcl_wool:blue_carpet")
minetest.register_alias("carpet3d:magenta", "mcl_wool:magenta_carpet")
minetest.register_alias("carpet3d:orange", "mcl_wool:orange_carpet")
minetest.register_alias("carpet3d:purple", "mcl_wool:purple_carpet")
minetest.register_alias("carpet3d:brown", "mcl_wool:brown_carpet")
minetest.register_alias("carpet3d:pink", "mcl_wool:pink_carpet")
minetest.register_alias("carpet3d:lime", "mcl_wool:lime_carpet")
minetest.register_alias("carpet3d:light_blue", "mcl_wool:light_blue_carpet")
minetest.register_alias("carpet3d:dark_grey", "mcl_wool:dark_grey_carpet")
minetest.register_alias("carpet3d:dark_green", "mcl_wool:dark_green_carpet")
--======================
--carts
--======================
minetest.register_alias("carts:rail", "mcl_minecarts:rail")
minetest.register_alias("carts:powerrail", "mcl_minecarts:golden_rail")
minetest.register_alias("carts:brakerail", "mcl_minecarts:rail")
--======================
--default to mcl_core
--======================
minetest.register_alias("default:stone", "mcl_core:stone")
minetest.register_alias("default:savannastone", "mcl_core:stone")
minetest.register_alias("default:desert_stone", "mcl_core:redsandstone")
minetest.register_alias("default:granite", "mcl_core:granite")
minetest.register_alias("default:granite_smooth", "mcl_core:granite_smooth")
minetest.register_alias("default:diorite", "mcl_core:diorite")
minetest.register_alias("default:diorite_smooth", "mcl_core:diorite_smooth")
minetest.register_alias("default:andesite", "mcl_core:andesite")
minetest.register_alias("default:andesite_smooth", "mcl_core:andesite_smooth")
minetest.register_alias("default:stone_with_coal", "mcl_core:stone_with_coal")
minetest.register_alias("default:desert_stone_with_coal", "mcl_core:stone_with_coal")
minetest.register_alias("default:stone_with_iron", "mcl_core:stone_with_iron")
minetest.register_alias("default:desert_stone_with_iron", "mcl_core:stone_with_iron")
minetest.register_alias("default:stone_with_gold", "mcl_core:stone_with_gold")
minetest.register_alias("default:desert_stone_with_gold", "mcl_core:stone_with_gold")
minetest.register_alias("default:stone_with_diamond", "mcl_core:stone_with_diamond")
minetest.register_alias("default:stone_with_emerald", "mcl_core:stone_with_emerald")
minetest.register_alias("default:sand_with_diamond", "mcl_core:stone_with_diamond")
minetest.register_alias("default:rack_with_diamond", "mcl_core:stone_with_diamond")
minetest.register_alias("default:stone_with_mese", "mcl_core:stone_with_redstone")
minetest.register_alias("mcl_core:stone_with_mese", "mcl_core:stone_with_redstone")
minetest.register_alias("default:dirt_with_grass", "mcl_core:dirt_with_grass")
minetest.register_alias("default:dirt_with_dry_grass", "mcl_core:coarse_dirt")
minetest.register_alias("default:grass_path", "mcl_core:grass_path")
minetest.register_alias("default:dirt_with_snow", "mcl_core:dirt_with_grass_snow")
minetest.register_alias("default:dirt_with_grass_footsteps", "mcl_core:dirt_with_grass_footsteps")
minetest.register_alias("default:podzol", "mcl_core:podzol")
minetest.register_alias("default:dirt_with_rainforest_litter", "mcl_core:podzol")
minetest.register_alias("default:mycelium", "mcl_core:mycelium")
minetest.register_alias("default:mycelium_snow", "mcl_core:mycelium_snow")
minetest.register_alias("default:dirt", "mcl_core:dirt")
minetest.register_alias("default:coarse_dirt", "mcl_core:coarse_dirt")
minetest.register_alias("default:sand", "mcl_core:sand")
minetest.register_alias("default:sandstone", "mcl_core:sandstone")
minetest.register_alias("default:sandstone_block", "mcl_core:sandstonesmooth")
minetest.register_alias("default:sandstonebrick", "mcl_core:sandstonecarved")
minetest.register_alias("default:desert_sand", "mcl_core:redsand")
minetest.register_alias("default:desertsandstone", "mcl_core:redsandstone")
minetest.register_alias("default:desert_stone_block", "mcl_core:redsandstonesmooth")
minetest.register_alias("default:desert_stonebrick", "mcl_core:redsandstonecarved")
minetest.register_alias("default:gravel", "mcl_core:gravel")
minetest.register_alias("default:clay", "mcl_core:clay")
minetest.register_alias("default:brick", "mcl_core:brick_block")
minetest.register_alias("default:fossil", "mcl_core:bone_block")
minetest.register_alias("default:coalblock", "mcl_core:coalblock")
minetest.register_alias("default:stonebrick", "mcl_core:stonebrick")
minetest.register_alias("default:stone_block", "mcl_core:stonebrickcarved")
minetest.register_alias("default:stonebrickcarved", "mcl_core:stonebrickcarved")
minetest.register_alias("default:stonebrickcracked", "mcl_core:stonebrickcracked")
minetest.register_alias("default:obsidian", "mcl_core:obsidian")
minetest.register_alias("default:obsidianbrick", "mcl_nether:nether_brick")
minetest.register_alias("default:obsidianblock", "mcl_nether:nether_brick")
minetest.register_alias("default:bush_leaves", "mcl_core:leaves")
minetest.register_alias("default:bush_stem", "mcl_core:tree")
minetest.register_alias("default:bush_sapling", "mcl_core:sapling")
minetest.register_alias("default:bush_acacia_leaves", "mcl_core:acacialeaves")
minetest.register_alias("default:acacia_bush_leaves", "mcl_core:acacialeaves")
minetest.register_alias("default:bush_acacia_stem", "mcl_core:acaciatree")
minetest.register_alias("default:acacia_bush_stem", "mcl_core:acaciatree")
minetest.register_alias("default:bush_acacia_sapling", "mcl_core:acaciasapling")
minetest.register_alias("default:tree", "mcl_core:tree")
minetest.register_alias("default:jungletree", "mcl_core:jungletree")
minetest.register_alias("default:aspen_tree", "mcl_core:birchtree")
--minetest.register_alias("default:acacia_tree", "mcl_core:acaciatree")
minetest.register_alias("default:pine_tree", "mcl_core:sprucetree")
minetest.register_alias("default:wood", "mcl_core:wood")
minetest.register_alias("default:junglewood", "mcl_core:junglewood")
minetest.register_alias("default:aspen_wood", "mcl_core:birchwood")
minetest.register_alias("default:acacia_wood", "mcl_core:acaciawood")
minetest.register_alias("default:pine_wood", "mcl_core:sprucewood")
minetest.register_alias("default:leaves", "mcl_core:leaves")
minetest.register_alias("default:jungleleaves", "mcl_core:jungleleaves")
minetest.register_alias("default:aspen_leaves", "mcl_core:birchleaves")
--minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves")
minetest.register_alias("default:pine_needles", "mcl_core:spruceleaves")
minetest.register_alias("default:sapling", "mcl_core:sapling")
minetest.register_alias("default:junglesapling", "mcl_core:junglesapling")
minetest.register_alias("default:aspen_sapling", "mcl_core:birchsapling")
minetest.register_alias("default:acacia_sapling", "mcl_core:acaciasapling")
minetest.register_alias("default:pine_sapling", "mcl_core:sprucesapling")
minetest.register_alias("default:junglegrass", "mcl_flowers:fern")
minetest.register_alias("default:grass", "mcl_flowers:tallgrass")
minetest.register_alias("default:grass_1", "mcl_flowers:tallgrass")
minetest.register_alias("default:grass_2", "mcl_flowers:tallgrass")
minetest.register_alias("default:grass_3", "mcl_flowers:tallgrass")
minetest.register_alias("default:grass_4", "mcl_flowers:tallgrass")
minetest.register_alias("default:grass_5", "mcl_flowers:tallgrass")
minetest.register_alias("default:dry_grass", "mcl_flowers:tallgrass")
minetest.register_alias("default:dry_grass_1", "mcl_flowers:tallgrass")
minetest.register_alias("default:dry_grass_2", "mcl_flowers:tallgrass")
minetest.register_alias("default:dry_grass_3", "mcl_flowers:tallgrass")
minetest.register_alias("default:dry_grass_4", "mcl_flowers:tallgrass")
minetest.register_alias("default:dry_grass_5", "mcl_flowers:tallgrass")
minetest.register_alias("default:cactus", "mcl_core:cactus")
minetest.register_alias("default:dry_shrub", "mcl_core:deadbush")
minetest.register_alias("default:papyrus", "mcl_core:reeds")
minetest.register_alias("default:bookshelf", "mcl_books:bookshelf")
minetest.register_alias("default:glass", "mcl_core:glass")
minetest.register_alias("default:obsidian_glass", "mcl_core:glass")
minetest.register_alias("default:ladder_wood", "mcl_core:ladder")
minetest.register_alias("default:ladder", "mcl_core:ladder")
minetest.register_alias("default:wood", "mcl_core:wood")
minetest.register_alias("default:mese", "mcl_core:redstone_block")
minetest.register_alias("default:cloud", "mcl_core:cloud")
minetest.register_alias("default:void", "mcl_core:void")
minetest.register_alias("default:dummy", "mcl_core:void")
minetest.register_alias("default:bedrock", "mcl_core:bedrock")
minetest.register_alias("default:water_flowing", "mcl_core:water_flowing")
minetest.register_alias("default:water_source", "mcl_core:water_source")
minetest.register_alias("default:river_water_flowing", "mcl_core:water_flowing")
minetest.register_alias("default:river_water_source", "mcl_core:water_source")
minetest.register_alias("default:lava_flowing", "mcl_core:lava_flowing")
minetest.register_alias("default:lava_source", "mcl_core:lava_source")
minetest.register_alias("default:torch", "mcl_core:torch")
minetest.register_alias("default:sign_wall", "mcl_signs:wall_sign")
minetest.register_alias("default:sign_wall_wood", "mcl_signs:wall_sign")
minetest.register_alias("default:furnace", "mcl_core:furnace")
minetest.register_alias("bones:bones", "mcl_chests:chest")
minetest.register_alias("default:chest", "mcl_chests:chest")
minetest.register_alias("default:locked_chest", "mcl_chests:chest")
minetest.register_alias("default:cobble", "mcl_core:cobble")
minetest.register_alias("default:mossycobble", "mcl_core:mossycobble")
minetest.register_alias("default:stonebrickmossy", "mcl_core:stonebrickmossy")
minetest.register_alias("default:desert_cobble", "mcl_core:mossycobble")
minetest.register_alias("default:steelblock", "mcl_core:ironblock")
minetest.register_alias("default:goldblock", "mcl_core:goldblock")
minetest.register_alias("default:diamondblock", "mcl_core:diamondblock")
minetest.register_alias("default:emeraldblock", "mcl_core:emeraldblock")
minetest.register_alias("default:meselamp", "mcl_nether:glowstone")
minetest.register_alias("default:meselamp", "mcl_nether:glowstone")
minetest.register_alias("default:mese", "mesecons_torch:redstoneblock")
minetest.register_alias("default:coral_brown", "mcl_core:coalblock")
minetest.register_alias("default:coral_orange", "mcl_core:coalblock")
minetest.register_alias("default:coral_skeleton", "mcl_core:coalblock")
minetest.register_alias("default:nyancat", "mcl_core:nyancat")
minetest.register_alias("default:nyancat_rainbow", "mcl_core:nyancat_rainbow")
minetest.register_alias("default:apple", "mcl_flowers:tallgrass") --did this to fix map
minetest.register_alias("default:torch", "mcl_torches:torch")
minetest.register_alias("torches:torch", "mcl_torches:torch")
minetest.register_alias("default:torch_wall", "mcl_torches:torch_wall")
minetest.register_alias("torches:wall", "mcl_torches:torch")
minetest.register_alias("default:torch_floor", "mcl_torches:torch_floor")
minetest.register_alias("torches:floor", "mcl_torches:torch")
minetest.register_alias("default:torch_ceiling", "mcl_torches:torch")
minetest.register_alias("torches:ceiling", "mcl_torches:torch")
minetest.register_alias("default:furnace", "mcl_furnaces:furnace")
minetest.register_alias("default:furnace_active", "mcl_furnaces:furnace_active")
minetest.register_alias("default:snow", "mcl_core:snow")
minetest.register_alias("default:snowblock", "mcl_core:snowblock")
minetest.register_alias("default:ice", "mcl_core:ice")
-- Aliases for corrected pine node names
minetest.register_alias("default:pinetree", "mcl_core:sprucetree")
minetest.register_alias("default:pinewood", "mcl_core:sprucewood")
minetest.register_alias("default:sign_wall", "mcl_core:sign_wall_wood")
minetest.register_alias("default:fence_wood", "mcl_fences:fence")
minetest.register_alias("default:fence_oak_wood", "mcl_fences:dark_oak_fence")
minetest.register_alias("default:fence_pine_wood", "mcl_fences:spruce_fence")
minetest.register_alias("default:fence_aspen_wood", "mcl_fences:birch_fence")
minetest.register_alias("default:fence_acacia_wood", "mcl_fences:acacia_fence")
minetest.register_alias("default:fence_junglewood", "mcl_fences:jungle_fence")
--======================
--door
--======================
minetest.register_alias("doors:door_wood", "mcl_doors:dark_oak_door")
minetest.register_alias("doors:trapdoor_wood", "mcl_doors:dark_oak_door")
minetest.register_alias("doors:trapdoor_steel", "mcl_doors:dark_oak_door")
minetest.register_alias("doors:hidden", "air")
--minetest.register_alias("doors:hidden", "mcl_doors:dark_oak_door_t_1")
minetest.register_alias("doors:door_wood_a", "mcl_doors:dark_oak_door_b_1")
minetest.register_alias("doors:door_wood_a_2", "mcl_doors:dark_oak_door_b_1")
minetest.register_alias("doors:door_wood_b", "mcl_doors:dark_oak_door_b_2")
--old style
minetest.register_alias("doors:door_wood_b_1", "mcl_doors:dark_oak_door_b_1")
minetest.register_alias("doors:door_wood_b_2", "mcl_doors:dark_oak_door_b_2")
minetest.register_alias("doors:door_wood_t_1", "mcl_doors:dark_oak_door_t_1")
minetest.register_alias("doors:door_wood_t_2", "mcl_doors:dark_oak_door_t_2")
minetest.register_alias("doors:door_steel_b", "mcl_doors:iron_door_b_1")
minetest.register_alias("doors:door_steel_b_1", "mcl_doors:iron_door_b_1")
minetest.register_alias("doors:door_steel_b_2", "mcl_doors:iron_door_b_2")
minetest.register_alias("doors:door_steel_a", "mcl_doors:iron_door_t_1")
minetest.register_alias("doors:door_steel_t_1", "mcl_doors:iron_door_t_1")
minetest.register_alias("doors:door_steel_t_2", "mcl_doors:iron_door_t_2")
--======================
--farming oh boy...
--======================
--tomato
minetest.register_alias("farming:tomato", "farming:carrot")
minetest.register_alias("farming:tomato_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_4", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_5", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_6", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_7", "mcl_flowers:tallgrass")
minetest.register_alias("farming:tomato_8", "mcl_farming:melon")
--cucumber
minetest.register_alias("farming:cucumber", "farming:carrot")
minetest.register_alias("farming:cucumber_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:cucumber_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:cucumber_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:cucumber_4", "mcl_flowers:tallgrass")
--raspberry
minetest.register_alias("farming:raspberries", "farming:carrot")
minetest.register_alias("farming:smoothie_raspberry", "mcl_flowers:tallgrass")
minetest.register_alias("farming:raspberry_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:raspberry_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:raspberry_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:raspberry_4", "mcl_flowers:tallgrass")
--blueberry
minetest.register_alias("farming:blueberries", "farming:carrot")
minetest.register_alias("farming:muffin_blueberry", "farming:bread")
minetest.register_alias("farming:blueberry_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:blueberry_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:blueberry_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:blueberry_4", "mcl_flowers:tallgrass")
--rhubarb
minetest.register_alias("farming:rhubarb", "mcl_flowers:tallgrass")
minetest.register_alias("farming:rhubarb_pie", "mcl_flowers:tallgrass")
minetest.register_alias("farming:rhubarb_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:rhubarb_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:rhubarb_3", "mcl_flowers:tallgrass")
--beans
minetest.register_alias("farming:beanpole", "mcl_flowers:tallgrass")
minetest.register_alias("farming:beans", "farming:carrot")
minetest.register_alias("farming:beanbush", "mcl_flowers:tallgrass")
minetest.register_alias("farming:beanpole_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:beanpole_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:beanpole_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:beanpole_4", "mcl_flowers:tallgrass")
minetest.register_alias("farming:beanpole_5", "mcl_flowers:tallgrass")
--grapes
minetest.register_alias("farming:grapes", "mcl_farming:carrot")
minetest.register_alias("farming:trellis", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapebush", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_4", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_5", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_6", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_7", "mcl_flowers:tallgrass")
minetest.register_alias("farming:grapes_8", "mcl_flowers:tallgrass")
--barley
minetest.register_alias("farming:barley", "mcl_flowers:tallgrass")
minetest.register_alias("farming:barley_1", "mcl_farming:hay_block")
minetest.register_alias("farming:barley_2", "mcl_farming:hay_block")
minetest.register_alias("farming:barley_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:barley_4", "mcl_flowers:tallgrass")
minetest.register_alias("farming:barley_5", "mcl_flowers:tallgrass")
minetest.register_alias("farming:barley_6", "mcl_flowers:tallgrass")
minetest.register_alias("farming:barley_7", "mcl_flowers:tallgrass")
minetest.register_alias("farming:seed_barley", "mcl_farming:hay_block")
--coffee
minetest.register_alias("farming:coffee", "mcl_farming:carrot")
minetest.register_alias("farming:coffee_cup_hot", "mcl_farming:carrot")
minetest.register_alias("farming:coffee_cup", "mcl_farming:carrot")
minetest.register_alias("farming:drinking_cup", "mcl_farming:carrot")
minetest.register_alias("farming:coffee_beans", "mcl_farming:carrot")
minetest.register_alias("farming:coffee_1", "mcl_flowers:tallgrass")
minetest.register_alias("farming:coffee_2", "mcl_flowers:tallgrass")
minetest.register_alias("farming:coffee_3", "mcl_flowers:tallgrass")
minetest.register_alias("farming:coffee_4", "mcl_flowers:tallgrass")
minetest.register_alias("farming:coffee_5", "mcl_flowers:tallgrass")
--FARMING EXISTING
minetest.register_alias("farming:soil", "mcl_farming:soil")
minetest.register_alias("farming:soil_wet", "mcl_farming:soil_wet")
minetest.register_alias("farming:pumpkin", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_slice", "mcl_farming:melon_slice")
minetest.register_alias("farming:pumpkin_1", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_2", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_3", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_4", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_5", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_6", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_7", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:pumpkin_8", "mcl_farming:pumpkin_7")
minetest.register_alias("farming:cocoa", "mcl_cocoas:cocoa")
minetest.register_alias("mcl_cocoas:cocoa", "mcl_dye:brown")
minetest.register_alias("farming:cocoa_beans", "mcl_dye:brown")
minetest.register_alias("farming:cocoa_1", "mcl_cocoas:cocoa_1")
minetest.register_alias("farming:cocoa_2", "mcl_cocoas:cocoa_2")
minetest.register_alias("farming:cocoa_3", "mcl_cocoas:cocoa_3")
minetest.register_alias("farming:cookie", "mcl_farming:carrot")
minetest.register_alias("farming:melon", "mcl_farming:melon")
minetest.register_alias("farming:melon_slice", "mcl_farming:melon_slice")
minetest.register_alias("mcl_farming:melon_slice", "mcl_farming:melon")
minetest.register_alias("farming:melon_1", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_2", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_3", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_4", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_5", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_6", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_7", "mcl_farming:melontige_7")
minetest.register_alias("farming:melon_8", "mcl_farming:melontige_7")
minetest.register_alias("farming:potato", "mcl_farming:potato")
minetest.register_alias("farming:potato_1", "mcl_farming:potato")
minetest.register_alias("farming:potato_2", "mcl_farming:potato")
minetest.register_alias("farming:potato_3", "mcl_farming:potato")
minetest.register_alias("farming:potato_4", "mcl_farming:potato")
minetest.register_alias("farming:potato_5", "mcl_farming:potato")
minetest.register_alias("farming:potato_6", "mcl_farming:potato")
minetest.register_alias("farming:potato_7", "mcl_farming:potato")
minetest.register_alias("farming:potato_8", "mcl_farming:potato")
minetest.register_alias("farming:carrot_gold", "mcl_farming:carrot_item_gold")
minetest.register_alias("farming:carrot", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_1", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_2", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_3", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_4", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_5", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_6", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_7", "mcl_farming:carrot")
minetest.register_alias("farming:carrot_8", "mcl_farming:carrot")
minetest.register_alias("farming:corn", "mcl_farming:carrot")
minetest.register_alias("farming:corn_1", "mcl_farming:carrot")
minetest.register_alias("farming:corn_2", "mcl_farming:carrot")
minetest.register_alias("farming:corn_3", "mcl_farming:carrot")
minetest.register_alias("farming:corn_4", "mcl_farming:carrot")
minetest.register_alias("farming:corn_5", "mcl_farming:carrot")
minetest.register_alias("farming:corn_6", "mcl_farming:carrot")
minetest.register_alias("farming:corn_7", "mcl_farming:carrot")
minetest.register_alias("farming:corn_8", "mcl_farming:carrot")
minetest.register_alias("farming:wheat", "mcl_farming:wheat")
minetest.register_alias("farming:straw", "mcl_farming:wheat")
minetest.register_alias("farming:bread", "mcl_core:snow")
minetest.register_alias("farming:flour", "mcl_farming:bread")
minetest.register_alias("farming:seed_wheat", "mcl_farming:hay_block")
minetest.register_alias("mcl_farming:seed_wheat", "mcl_farming:hay_block")
minetest.register_alias("farming:wheat_1", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_2", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_3", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_4", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_5", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_6", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_7", "mcl_farming:wheat_5")
minetest.register_alias("farming:wheat_8", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton", "mcl_farming:wheat")
minetest.register_alias("farming:seed_cotton", "mcl_farming:wheat")
minetest.register_alias("farming:cotton_1", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_2", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_3", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_4", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_5", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_6", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_7", "mcl_farming:wheat_5")
minetest.register_alias("farming:cotton_8", "mcl_farming:wheat_5")
--======================
--Fire
--======================
minetest.register_alias("default:underground_fire", "mcl_fire:eternal_fire")
minetest.register_alias("nether:permanent_flame", "mcl_fire:eternal_fire")
minetest.register_alias("default:permanent_flame", "mcl_fire:eternal_fire")
minetest.register_alias("fire:permanent_flame", "mcl_fire:eternal_fire")
minetest.register_alias("default:basic_flame", "mcl_fire:fire")
minetest.register_alias("fire:basic_flame", "mcl_fire:fire")
--======================
--flowers
--======================
minetest.register_alias("flowers:rose", "mcl_flowers:poppy")
minetest.register_alias("flowers:tulip", "mcl_flowers:blue_orchid")
minetest.register_alias("flowers:dandelion_yellow", "mcl_flowers:dandelion")
minetest.register_alias("flowers:geranium", "mcl_flowers:tulip_orange")
minetest.register_alias("flowers:viola", "mcl_flowers:tulip_pink")
minetest.register_alias("flowers:dandelion_white", "mcl_flowers:oxeye_daisy")
minetest.register_alias("flowers:waterlily", "mcl_flowers:waterlily")
minetest.register_alias("flowers:mushroom_brown", "mcl_mushrooms:mushroom_brown")
minetest.register_alias("flowers:mushroom_red", "mcl_mushrooms:mushroom_red")
--======================
--hoppers
--======================
minetest.register_alias("hopper:hopper_item", "mcl_hoppers:hopper")
minetest.register_alias("hopper:hopper", "mcl_hoppers:hopper")
minetest.register_alias("hopper:hopper_side", "mcl_hoppers:hopper_side")
--======================
--mesecons
--======================
minetest.register_alias("dispenser:dispenser", "mcl_dispensers:dispenser")
minetest.register_alias("dropper:dropper", "mcl_droppers:dropper")
minetest.register_alias("dropper:dropper", "mcl_droppers:dropper")
minetest.register_alias("mesecons_button:button_off", "mesecons_button:button_stone_off")
minetest.register_alias("mesecons_button:button_on", "mesecons_button:button_stone_on")
minetest.register_alias("mesecons_luacontroller:luacontroller0000", "mesecons_delayer:delayer_off_1")
minetest.register_alias("mesecons_random:ghoststone", "mesecons_delayer:delayer_off_1")
--======================
--MC2 Andisite,granite,diorite
--======================
minetest.register_alias("default:marble", "mcl_core:andesite")
minetest.register_alias("default:marble_bricks", "mcl_core:andesite_smooth")
minetest.register_alias("default:granite_bricks", "mcl_core:granite_smooth")
--======================
--Enderchest
--======================
minetest.register_alias("enderchest:enderchest", "mcl_chests:ender_chest")
minetest.register_alias("mcl_core:enderchest", "mcl_chests:ender_chest")
--======================
--End
--======================
minetest.register_alias("default:end_stone", "mcl_end:end_stone")
minetest.register_alias("default:end_bricks", "mcl_end:end_bricks")
minetest.register_alias("default:purpur_block", "mcl_end:purpur_block")
minetest.register_alias("default:purpur_pillar", "mcl_end:purpur_pillar")
minetest.register_alias("default:chorus_flower_dead", "mcl_end:chorus_flower_dead")
minetest.register_alias("default:chorus_plant", "mcl_end:chorus_plant")
minetest.register_alias("default:chorus_fruit", "mcl_end:chorus_fruit")
minetest.register_alias("default:chorus_fruit_popped", "mcl_end:chorus_fruit_popped")
--======================
--MC2 chests
--======================
minetest.register_alias("mcl_core:chest", "mcl_chests:chest")
minetest.register_alias("default:chest", "mcl_chests:chest")
minetest.register_alias("default:chest_locked", "mcl_chests:chest")
--======================
--nssm
--======================
minetest.register_alias("nssm:ant_dirt", "mcl_core:coarse_dirt")
--======================
--Nyancat
--======================
minetest.register_alias("nyancat:nyancat", "mcl_core:diamondblock")
minetest.register_alias("nyancat:rainbow", "mcl_core:emeraldblock")
minetest.register_alias("nyancat:nyancat_rainbow", "mcl_core:emeraldblock")
--======================
--alias to remove old quartz from maps
--======================
--minetest.register_alias("default:quartz_crystal", "mcl_nether:quartz")
minetest.register_alias("default:quartz_ore", "mcl_nether:quartz_ore")
minetest.register_alias("default:block", "mcl_nether:quartz_block")
minetest.register_alias("default:chiseled", "mcl_nether:quartz_chiseled")
minetest.register_alias("default:pillar", "mcl_nether:quartz_pillar")
minetest.register_alias("default:pillar_horizontal", "mcl_nether:quartz_pillar_horizontal")
--======================
--alias to merge default-nether to mcl_core
--======================
minetest.register_alias("default:rack", "mcl_nether:netherrack")
minetest.register_alias("default:quartz_ore", "mcl_nether:quartz_ore")
minetest.register_alias("default:quartz_crystal", "mcl_nether:quartz_crystal")
minetest.register_alias("default:nitherbrick", "mcl_nether:nether_brick")
minetest.register_alias("default:obsidiannitherbrick", "mcl_nether:nether_brick")
minetest.register_alias("default:glowstone", "mcl_nether:glowstone")
minetest.register_alias("default:glowstone_dust", "mcl_nether:glowstone_dust")
minetest.register_alias("default:rack_with_diamond", "mcl_core:stone_with_diamond")
minetest.register_alias("default:slowsand", "mcl_nether:soul_sand")
minetest.register_alias("default:fence_nither", "mcl_fences:nether_brick_fence")
--======================
--alias to merge nether to mcl_core
--======================
minetest.register_alias("nether:rack", "mcl_nether:netherrack")
minetest.register_alias("nether:quartz_ore", "mcl_nether:quartz_ore")
minetest.register_alias("nether:quartz_crystal", "mcl_nether:quartz_crystal")
minetest.register_alias("nether:nitherbrick", "mcl_nether:nether_brick")
minetest.register_alias("nether:obsidiannitherbrick", "mcl_nether:nether_brick")
minetest.register_alias("nether:glowstone", "mcl_nether:glowstone")
minetest.register_alias("nether:glowstone_dust", "mcl_nether:glowstone_dust")
minetest.register_alias("nether:rack_with_diamond", "mcl_core:stone_with_diamond")
minetest.register_alias("nether:sand", "mcl_nether:soul_sand")
minetest.register_alias("nether:portal", "mcl_portals:portal")
minetest.register_alias("nether:fence_nither", "mcl_fences:nether_brick_fence")
--======================
--stairs
--======================
minetest.register_alias("stairs:slab_marble", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_marble", "mcl_stairs:stair_stone")
minetest.register_alias("stairs:slab_marble_bricks", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_marble_bricks", "mcl_stairs:stair_stone")
minetest.register_alias("stairs:slab_granite", "mcl_stairs:slab_sandstone")
minetest.register_alias("stairs:stair_granite", "mcl_stairs:stair_sandstone")
minetest.register_alias("stairs:slab_granite_bricks", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_granite_bricks", "mcl_stairs:stair_stone")
minetest.register_alias("stairs:stair_andesite", "mcl_stairs:stair_sandstone")
minetest.register_alias("stairs:slab_andesite", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_diorite", "mcl_stairs:stair_sandstone")
minetest.register_alias("stairs:slab_diorite", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_mossycobble", "mcl_stairs:stair_cobble")
minetest.register_alias("stairs:slab_mossycobble", "mcl_stairs:slab_cobble")
minetest.register_alias("stairs:stair_desert_cobble", "mcl_stairs:stair_sandstone")
minetest.register_alias("stairs:slab_desert_cobble", "mcl_stairs:slab_sandstone")
minetest.register_alias("stairs:stair_desert_stone", "mcl_stairs:stair_redsandstone")
minetest.register_alias("stairs:slab_desert_stone", "mcl_stairs:slab_redsandstone")
minetest.register_alias("stairs:stair_desert_stonebrick", "mcl_stairs:stair_redsandstone")
minetest.register_alias("stairs:slab_desert_stonebrick", "mcl_stairs:slab_redsandstone")
minetest.register_alias("stairs:stair_stone", "mcl_stairs:stair_stonebrick")
minetest.register_alias("stairs:stair_obsidianbrick", "mcl_stairs:stair_cobble")
minetest.register_alias("stairs:slab_obsidianbrick", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_obsidian", "mcl_stairs:stair_cobble")
minetest.register_alias("stairs:slab_obsidian", "mcl_stairs:slab_stone")
minetest.register_alias("stairs:stair_sandstonebrick", "mcl_stairs:stair_sandstone")
minetest.register_alias("stairs:slab_sandstonebrick", "mcl_stairs:slab_sandstone")
minetest.register_alias("stairs:stair_nitherbrick", "mcl_stairs:stair_nether_brick")
minetest.register_alias("stairs:slab_nitherbrick", "mcl_stairs:slab_nether_brick")
minetest.register_alias("stairs:stair_netherbrick", "mcl_stairs:stair_nether_brick")
minetest.register_alias("stairs:slab_netherbrick", "mcl_stairs:slab_nether_brick")
minetest.register_alias("stairs:stair_brick", "mcl_stairs:slab_brick_block")
minetest.register_alias("stairs:slab_brick", "mcl_stairs:slab_brick_block")
minetest.register_alias("stairs:stair_steelblock", "mcl_stairs:stair_cobble")
minetest.register_alias("stairs:slab_steelblock", "mcl_stairs:slab_cobble")
minetest.register_alias("stairs:stair_goldblock", "mcl_stairs:stair_cobble")
minetest.register_alias("stairs:slab_goldblock", "mcl_stairs:slab_cobble")
minetest.register_alias("stairs:stair_pine_wood", "mcl_stairs:stair_sprucewood")
minetest.register_alias("stairs:slab_pine_wood", "mcl_stairs:slab_sprucewood")
minetest.register_alias("stairs:stair_acacia_wood", "mcl_stairs:stair_acaciawood")
minetest.register_alias("stairs:slab_acacia_wood", "mcl_stairs:slab_acaciawood")
minetest.register_alias("stairs:stair_aspen_wood", "mcl_stairs:stair_birchwood")
minetest.register_alias("stairs:slab_aspen_wood", "mcl_stairs:slab_birchwood")
--corners
minetest.register_alias("default:cobble_innerstair", "mcl_stairs:slab_cobble")
minetest.register_alias("default:cobble_outerstair", "mcl_stairs:slab_cobble")
--======================
--alias for es stuff and misc
--======================
minetest.register_alias("esmobs:bones", "mcl_core:chest")
minetest.register_alias("es:emerald_crystal", "mcl_core:emerald_crystal")
minetest.register_alias("vines:rope_block", "mcl_tools:pick_gold")
minetest.register_alias("vines:shears", "mcl_tools:pick_gold")
minetest.register_alias("vines:vine", "mcl_core:vine")
minetest.register_alias("vines:vine_middle", "mcl_core:vine")
minetest.register_alias("vines:vine_end", "mcl_core:vine")
minetest.register_alias("vines:root", "mcl_core:vine")
minetest.register_alias("vines:root_middle", "mcl_core:vine")
minetest.register_alias("vines:root_end", "mcl_core:vine")
minetest.register_alias("vines:side", "mcl_core:vine")
minetest.register_alias("vines:side_middle", "mcl_core:vine")
minetest.register_alias("vines:side_end", "mcl_core:vine")
minetest.register_alias("vines:jungle", "mcl_core:vine")
minetest.register_alias("vines:jungle_middle", "mcl_core:vine")
minetest.register_alias("vines:jungle_end", "mcl_core:vine")
--======================
--woodsoils
--======================
minetest.register_alias("woodsoils:dirt_with_leaves_1", "mcl_core:podzol")
minetest.register_alias("woodsoils:dirt_with_leaves_2", "mcl_core:podzol")
minetest.register_alias("woodsoils:grass_with_leaves_1", "mcl_core:podzol")
minetest.register_alias("woodsoils:grass_with_leaves_2", "mcl_core:podzol")
--======================
--walls
--======================
minetest.register_alias("walls:cobble", "mcl_walls:cobble")
minetest.register_alias("walls:desertcobble", "mcl_walls:cobble")
minetest.register_alias("walls:mossycobble", "mcl_walls:cobble")
--======================
--wool
--======================
minetest.register_alias("wool:white", "mcl_wool:white")
minetest.register_alias("wool:grey", "mcl_wool:grey")
minetest.register_alias("wool:black", "mcl_wool:black")
minetest.register_alias("wool:red", "mcl_wool:red")
minetest.register_alias("wool:yellow", "mcl_wool:yellow")
minetest.register_alias("wool:green", "mcl_wool:green")
minetest.register_alias("wool:cyan", "mcl_wool:cyan")
minetest.register_alias("wool:blue", "mcl_wool:blue")
minetest.register_alias("wool:magenta", "mcl_wool:magenta")
minetest.register_alias("wool:orange", "mcl_wool:orange")
minetest.register_alias("wool:violet", "mcl_wool:purple")
minetest.register_alias("mcl_wool:violet", "mcl_wool:purple")
minetest.register_alias("wool:brown", "mcl_wool:brown")
minetest.register_alias("wool:pink", "mcl_wool:pink")
minetest.register_alias("wool:dark_grey", "mcl_wool:dark_grey")
minetest.register_alias("wool:dark_green", "mcl_wool:dark_green")
--======================
--willages
--======================
minetest.register_alias("mg_villages:plotmarker", "mcl_stairs:slab_stone")
minetest.register_alias("mg_villages:road", "mcl_stairs:slab_stone")
minetest.register_alias("mg_villages:road", "mcl_stairs:slab_stone")
minetest.register_alias("mg_villages:soil", "mcl_farming:soil")
minetest.register_alias("handle_schematics:support", "mcl_farming:soil")
--======================
--xdecor itemframes etc
--======================
minetest.register_alias("xdecor:itemframe", "itemframes:frame")
minetest.register_alias("xdecor:f_item", "itemframes:item")
minetest.register_alias("xdecor:workbench", "mcl_anvils:anvil")
--minetest.register_alias("xdecor:enchantment_table", "mcl_crafting_table:crafting_table")
minetest.register_alias("xdecor:hammer", "mcl_anvils:anvil")
--[[
-- Nodeboxes definitions.
workbench.defs = {
-- Name Yield X Y Z W H L
{"nanoslab", 16, { 0, 0, 0, 8, 1, 8 }},
{"micropanel", 16, { 0, 0, 0, 16, 1, 8 }},
{"microslab", 8, { 0, 0, 0, 16, 1, 16 }},
{"thinstair", 8, { 0, 7, 0, 16, 1, 8 },
{ 0, 15, 8, 16, 1, 8 }},
{"cube", 4, { 0, 0, 0, 8, 8, 8 }},
{"panel", 4, { 0, 0, 0, 16, 8, 8 }},
{"slab", 2, nil },
{"doublepanel", 2, { 0, 0, 0, 16, 8, 8 },
{ 0, 8, 8, 16, 8, 8 }},
{"halfstair", 2, { 0, 0, 0, 8, 8, 16 },
{ 0, 8, 8, 8, 8, 8 }},
{"outerstair", 1, { 0, 0, 0, 16, 8, 16 },
{ 0, 8, 8, 8, 8, 8 }},
{"stair", 1, nil },
{"innerstair", 1, { 0, 0, 0, 16, 8, 16 },
{ 0, 8, 8, 16, 8, 8 },
{ 0, 8, 0, 8, 8, 8 }}
}]]
--micropanels
minetest.register_alias("default:wood_micropanel", "mcl_fences:fence")
minetest.register_alias("default:wood_nanoslab", "mcl_fences:fence")
--======================
--xpanes
--======================
minetest.register_alias("xpanes:pane_flat", "xpanes:pane_natural_flat")
minetest.register_alias("xpanes:pane", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_0", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_1", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_2", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_3", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_4", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_5", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_6", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_7", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_8", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_9", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_10", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_11", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_12", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_13", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_14", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_15", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_16", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_17", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_18", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_19", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_20", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_21", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_22", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_23", "xpanes:pane_natural")
minetest.register_alias("xpanes:pane_24", "xpanes:pane_natural")

View File

@ -0,0 +1,161 @@
--======================
--mob items and end items
--======================
minetest.register_alias("default:end_rod", "mcl_end:end_rod")
minetest.register_alias("default:dragon_egg", "mcl_end:dragon_egg")
minetest.register_alias("mobs_mc:dragon_egg", "mcl_end:dragon_egg")
minetest.register_alias("mobs_mc:ender_eye", "mcl_end:ender_eye")
minetest.register_alias("mobs_mc:rotten_flesh", "mcl_mobitems:rotten_flesh")
minetest.register_alias("mobs_mc:mutton", "mcl_mobitems:mutton")
minetest.register_alias("mobs_mc:mutton_raw", "mcl_mobitems:mutton")
minetest.register_alias("mobs_mc:cooked_mutton", "mcl_mobitems:cooked_mutton")
minetest.register_alias("mobs_mc:beef", "mcl_mobitems:beef")
minetest.register_alias("mobs_mc:beef_raw", "mcl_mobitems:beef")
minetest.register_alias("mobs_mc:cooked_beef", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs_mc:chicken", "mcl_mobitems:chicken")
minetest.register_alias("mobs_mc:chicken_raw", "mcl_mobitems:chicken")
minetest.register_alias("mobs_mc:cooked_chicken", "mcl_mobitems:cooked_chicken")
--minetest.register_alias("mobs_mc:egg", "mcl_mobitems:egg")
--minetest.register_alias("mcl_mobitems:egg", "mobs_mc:egg")
minetest.register_alias("mcl_mobitems:egg", "mobs_mc:chicken")
minetest.register_alias("mobs_mc:porkchop", "mcl_mobitems:porkchop")
minetest.register_alias("mobs_mc:porkchop_raw", "mcl_mobitems:porkchop")
minetest.register_alias("mobs_mc:cooked_porkchop", "mcl_mobitems:cooked_porkchop")
minetest.register_alias("mobs_mc:rabbit", "mcl_mobitems:rabbit")
minetest.register_alias("mcl_mobitems:rabbit_raw", "mcl_mobitems:rabbit")
minetest.register_alias("mobs_mc:rabbit_raw", "mcl_mobitems:rabbit")
minetest.register_alias("mobs_mc:milk_bucket", "mcl_mobitems:milk_bucket")
minetest.register_alias("mobs_mc:spider_eye", "mcl_mobitems:spider_eye")
minetest.register_alias("farming:string", "mcl_mobitems:string")
minetest.register_alias("mobs_mc:bow_wood", "mcl_throwing:bow")
minetest.register_alias("mobs_mc:blaze_powder", "mcl_mobitems:blaze_powder")
minetest.register_alias("mobs_mc:magma_cream", "mcl_mobitems:magma_cream")
minetest.register_alias("mobs_mc:ghast_tear", "mcl_mobitems:ghast_tear")
minetest.register_alias("mobs_mc:horsepegh1", "mobs_mc:horse")
minetest.register_alias("mobs_mc:nether_star", "mcl_mobitems:nether_star")
minetest.register_alias("mobs_mc:leather", "mcl_mobitems:leather")
minetest.register_alias("mobs_mc:feather", "mcl_mobitems:feather")
minetest.register_alias("mobs_mc:rabbit_hide", "mcl_mobitems:rabbit_hide")
minetest.register_alias("mobs_mc:rabbit_foot", "mcl_mobitems:rabbit_foot")
minetest.register_alias("mobs_mc:rabbit_stew", "mcl_mobitems:rabbit_stew")
minetest.register_alias("mobs_mc:saddle", "mcl_mobitems:saddle")
minetest.register_alias("mobs_mc:shulker_shell", "mcl_mobitems:shulker_shell")
minetest.register_alias("mobs_mc:slimeball", "mcl_mobitems:slimeball")
minetest.register_alias("mobs_mc:carrot_on_a_stick", "mcl_mobitems:carrot_on_a_stick")
--heads
minetest.register_alias("mobs_mc:zombie_head", "mcl_heads:zombie")
minetest.register_alias("mobs_mc:creeper_head", "mcl_heads:creeper")
minetest.register_alias("mobs_mc:enderman_head", "mcl_heads:steve")
minetest.register_alias("mobs_mc:ghast_head", "mcl_heads:steve")
minetest.register_alias("mobs_mc:skeleton_head", "mcl_heads:skeleton")
minetest.register_alias("mobs_mc:skeleton2_head", "mcl_heads:wither_skeleton")
minetest.register_alias("mobs_mc:spider_head", "mcl_heads:steve")
minetest.register_alias("mobs_mc:zombiepig_head", "mcl_heads:zombie_head")
--Mobs Redo
minetest.register_alias("default:end_rod", "mcl_end:end_rod")
minetest.register_alias("default:dragon_egg", "mcl_end:dragon_egg")
minetest.register_alias("mobs:dragon_egg", "mcl_end:dragon_egg")
minetest.register_alias("mobs:ender_eye", "mcl_end:ender_eye")
minetest.register_alias("mobs:rotten_flesh", "mcl_mobitems:rotten_flesh")
minetest.register_alias("mobs:mutton", "mcl_mobitems:mutton")
minetest.register_alias("mobs:mutton_raw", "mcl_mobitems:mutton")
minetest.register_alias("mobs:cooked_mutton", "mcl_mobitems:cooked_mutton")
minetest.register_alias("mobs:mutton_cooked", "mcl_mobitems:cooked_mutton")
minetest.register_alias("mobs:beef", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs:beef_raw", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs:meat_raw", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs:meat", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs:cooked_beef", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs:beef_cooked", "mcl_mobitems:cooked_beef")
minetest.register_alias("mobs:chicken", "mcl_mobitems:chicken")
minetest.register_alias("mobs_animal:chicken", "mobs_mc:chicken")
minetest.register_alias("mobs:chicken_egg_fried", "mcl_mobitems:chicken")
minetest.register_alias("mobs:chicken_raw", "mcl_mobitems:chicken")
minetest.register_alias("mobs:cooked_chicken", "mcl_mobitems:cooked_chicken")
minetest.register_alias("mobs:pork_cooked", "mcl_mobitems:porkchop")
minetest.register_alias("mobs:porkchop", "mcl_mobitems:porkchop")
minetest.register_alias("mobs:pork_raw", "mcl_mobitems:porkchop")
minetest.register_alias("mobs:cooked_porkchop", "mcl_mobitems:cooked_porkchop")
minetest.register_alias("mobs:rabbit", "mcl_mobitems:rabbit")
minetest.register_alias("mobs:milk_bucket", "mcl_mobitems:milk_bucket")
minetest.register_alias("mobs:spider_eye", "mcl_mobitems:spider_eye")
minetest.register_alias("mobs:bone", "mcl_mobitems:bone")
minetest.register_alias("mobs:bow_wood", "mcl_throwing:bow")
minetest.register_alias("mobs:string", "mcl_mobitems:string")
minetest.register_alias("mobs:blaze_powder", "mcl_mobitems:blaze_powder")
minetest.register_alias("mobs:magma_cream", "mcl_mobitems:magma_cream")
minetest.register_alias("mobs:ghast_tear", "mcl_mobitems:ghast_tear")
minetest.register_alias("mobs:nether_star", "mcl_mobitems:nether_star")
minetest.register_alias("mobs:leather", "mcl_mobitems:leather")
minetest.register_alias("mobs:feather", "mcl_mobitems:feather")
minetest.register_alias("mobs:rabbit_hide", "mcl_mobitems:rabbit_hide")
minetest.register_alias("mobs:rabbit_foot", "mcl_mobitems:rabbit_foot")
minetest.register_alias("mobs:rabbit_stew", "mcl_mobitems:rabbit_stew")
minetest.register_alias("mobs_animal:rat", "mcl_mobitems:rabbit_stew")
minetest.register_alias("mobs:saddle", "mcl_mobitems:saddle")
minetest.register_alias("mobs:shulker_shell", "mcl_mobitems:shulker_shell")
minetest.register_alias("mobs:slimeball", "mcl_mobitems:slimeball")
minetest.register_alias("mobs:carrot_on_a_stick", "mcl_mobitems:carrot_on_a_stick")
minetest.register_alias("mobs:arrow", "mcl_throwing:arrow")
minetest.register_alias("mobs:magic_lasso", "mcl_throwing:arrow")
minetest.register_alias("mobs:net", "mcl_throwing:arrow")
minetest.register_alias("mobs:egg", "mcl_throwing:egg")
minetest.register_alias("mobs:cobweb", "mcl_core:cobweb") --funky
--minetest.register_alias("mcl_mobitems:egg", "mcl_mobitems:egg")
minetest.register_alias("mobs:protector", "mcl_throwing:arrow")
--esmobs
minetest.register_alias("esmobs:end_rod", "mcl_end:end_rod")
minetest.register_alias("esmobs:dragon_egg", "mcl_end:dragon_egg")
minetest.register_alias("esmobs:dragon_egg", "mcl_end:dragon_egg")
minetest.register_alias("esmobs:ender_eye", "mcl_end:ender_eye")
minetest.register_alias("esmobs:rotten_flesh", "mcl_mobitems:rotten_flesh")
minetest.register_alias("esmobs:mutton", "mcl_mobitems:mutton")
minetest.register_alias("esmobs:mutton_raw", "mcl_mobitems:mutton")
minetest.register_alias("esmobs:cooked_mutton", "mcl_mobitems:cooked_mutton")
minetest.register_alias("esmobs:mutton_cooked", "mcl_mobitems:cooked_mutton")
minetest.register_alias("esmobs:beef", "mcl_mobitems:cooked_beef")
minetest.register_alias("esmobs:beef_raw", "mcl_mobitems:cooked_beef")
minetest.register_alias("esmobs:meat_raw", "mcl_mobitems:cooked_beef")
minetest.register_alias("esmobs:meat", "mcl_mobitems:cooked_beef")
minetest.register_alias("esmobs:cooked_beef", "mcl_mobitems:cooked_beef")
minetest.register_alias("esmobs:beef_cooked", "mcl_mobitems:cooked_beef")
minetest.register_alias("esmobs:chicken", "mcl_mobitems:chicken")
minetest.register_alias("esmobs:chicken_egg_fried", "mcl_mobitems:chicken")
minetest.register_alias("esmobs:chicken_raw", "mcl_mobitems:chicken")
minetest.register_alias("esmobs:cooked_chicken", "mcl_mobitems:cooked_chicken")
minetest.register_alias("esmobs:pork_cooked", "mcl_mobitems:porkchop")
minetest.register_alias("esmobs:porkchop", "mcl_mobitems:porkchop")
minetest.register_alias("esmobs:pork_raw", "mcl_mobitems:porkchop")
minetest.register_alias("esmobs:cooked_porkchop", "mcl_mobitems:cooked_porkchop")
minetest.register_alias("esmobs:rabbit", "mcl_mobitems:rabbit")
minetest.register_alias("esmobs:milk_bucket", "mcl_mobitems:milk_bucket")
minetest.register_alias("esmobs:spider_eye", "mcl_mobitems:spider_eye")
minetest.register_alias("esmobs:bone", "mcl_mobitems:bone")
minetest.register_alias("esmobs:bow_wood", "mcl_throwing:bow")
minetest.register_alias("esmobs:string", "mcl_mobitems:string")
minetest.register_alias("esmobs:blaze_powder", "mcl_mobitems:blaze_powder")
minetest.register_alias("esmobs:magma_cream", "mcl_mobitems:magma_cream")
minetest.register_alias("esmobs:ghast_tear", "mcl_mobitems:ghast_tear")
minetest.register_alias("esmobs:nether_star", "mcl_mobitems:nether_star")
minetest.register_alias("esmobs:leather", "mcl_mobitems:leather")
minetest.register_alias("esmobs:feather", "mcl_mobitems:feather")
minetest.register_alias("esmobs:rabbit_hide", "mcl_mobitems:rabbit_hide")
minetest.register_alias("esmobs:rabbit_foot", "mcl_mobitems:rabbit_foot")
minetest.register_alias("esmobs:rabbit_stew", "mcl_mobitems:rabbit_stew")
minetest.register_alias("esmobs:rat", "mcl_mobitems:rabbit_stew")
minetest.register_alias("esmobs:saddle", "mcl_mobitems:saddle")
minetest.register_alias("esmobs:shulker_shell", "mcl_mobitems:shulker_shell")
minetest.register_alias("esmobs:slimeball", "mcl_mobitems:slimeball")
minetest.register_alias("esmobs:carrot_on_a_stick", "mcl_mobitems:carrot_on_a_stick")
minetest.register_alias("esmobs:arrow", "mcl_throwing:arrow")
minetest.register_alias("esmobs:magic_lasso", "mcl_throwing:arrow")
minetest.register_alias("esmobs:net", "mcl_throwing:arrow")
minetest.register_alias("esmobs:egg", "mcl_throwing:egg")
minetest.register_alias("esmobs:cobweb", "mcl_core:cobweb") --funky
minetest.register_alias("esmobs:protector", "mcl_throwing:arrow")
minetest.register_alias("esmobs:bones", "mcl_chests:chest")

View File

@ -138,7 +138,7 @@ minetest.register_chatcommand("seed", {
params = "", params = "",
privs = {}, privs = {},
func = function(name) func = function(name)
minetest.chat_send_player(name, string.format("%d", minetest.get_mapgen_params().seed)) minetest.chat_send_player(name, string.format("%d", minetest.get_mapgen_setting("seed")))
end end
}) })

View File

@ -1,4 +1,6 @@
mcl_core mcl_core
mcl_mobitems mcl_mobitems
mcl_dye
mcl_end mcl_end
mcl_nether
mcl_ocean
xpanes

View File

@ -18,12 +18,12 @@ minetest.register_craft({
}) })
minetest.register_craft({ minetest.register_craft({
output = "mcl_core:redsand 8", output = "mcl_end:end_stone",
recipe = { recipe = {
{ "mcl_core:sand", "mcl_core:sand", "mcl_core:sand" }, { "mcl_core:sandstone", "mcl_core:stone", "mcl_core:sandstone" },
{ "mcl_core:sand", "mcl_dye:red", "mcl_core:sand" }, { "mcl_core:stone", "mcl_core:sandstone", "mcl_core:stone" },
{ "mcl_core:sand", "mcl_core:sand", "mcl_core:sand" }, { "mcl_core:sandstone", "mcl_core:stone", "mcl_core:sandstone" },
} },
}) })
minetest.register_craft({ minetest.register_craft({
@ -48,23 +48,6 @@ minetest.register_craft({
}, },
}) })
minetest.register_craft({
output = "mcl_end:end_stone",
recipe = {
{ "mcl_core:sandstone", "mcl_core:stone", "mcl_core:sandstone" },
{ "mcl_core:stone", "mcl_core:sandstone", "mcl_core:stone" },
{ "mcl_core:sandstone", "mcl_core:stone", "mcl_core:sandstone" },
},
})
minetest.register_craft({
output = "mcl_mobitems:blaze_rod",
recipe = {
{ "mcl_fire:flint_and_steel", "mcl_fire:flint_and_steel", "mcl_fire:flint_and_steel"},
{ "mcl_fire:flint_and_steel", "mcl_core:stick", "mcl_fire:flint_and_steel" },
{ "mcl_fire:flint_and_steel", "mcl_fire:flint_and_steel", "mcl_fire:flint_and_steel"},
}
})
minetest.register_craft({ minetest.register_craft({
output = "mcl_mobitems:shulker_shell", output = "mcl_mobitems:shulker_shell",
recipe = { recipe = {
@ -74,15 +57,6 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = "mcl_nether:quartz",
recipe = {
{"group:sand", "group:sand", "group:sand"},
{"group:sand", "group:sand", "group:sand"},
{"group:sand", "group:sand", "group:sand"},
}
})
minetest.register_craft({ minetest.register_craft({
output = "mcl_nether:nether_wart_item", output = "mcl_nether:nether_wart_item",
recipe = { recipe = {
@ -92,30 +66,6 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
type = "shapeless",
output = "mcl_nether:netherrack",
recipe = {"mcl_core:stone", "group:redsandstone"},
})
minetest.register_craft({
output = "mcl_nether:glowstone_dust",
recipe = {
{"mcl_torches:torch", "mcl_torches:torch", "mcl_torches:torch",},
{"mcl_torches:torch", "mcl_core:coalblock", "mcl_torches:torch",},
{"mcl_torches:torch", "mcl_torches:torch", "mcl_torches:torch",},
},
})
minetest.register_craft({
output = "mcl_nether:soul_sand",
recipe = {
{"mcl_core:redsand","mcl_nether:netherrack","mcl_core:redsand"},
{"mcl_nether:netherrack","mcl_core:redsand","mcl_nether:netherrack"},
{"mcl_core:redsand","mcl_nether:netherrack","mcl_core:redsand"},
},
})
minetest.register_craft({ minetest.register_craft({
output = "3d_armor:helmet_chain", output = "3d_armor:helmet_chain",
recipe = { recipe = {

View File

@ -4,7 +4,6 @@ local wip_items = {
"mcl_anvils:anvil_damage_2", "mcl_anvils:anvil_damage_2",
"mcl_core:darksapling", "mcl_core:darksapling",
"mcl_core:apple_gold", "mcl_core:apple_gold",
"mcl_end:ender_eye",
"mcl_end:chorus_fruit", "mcl_end:chorus_fruit",
"mcl_end:chorus_flower", "mcl_end:chorus_flower",
"mcl_end:chorus_flower_dead", "mcl_end:chorus_flower_dead",
@ -15,7 +14,6 @@ local wip_items = {
"gemalde:node_1", "gemalde:node_1",
"mcl_observers:observer", "mcl_observers:observer",
"mcl_chests:trapped_chest", "mcl_chests:trapped_chest",
"mobs_mc:llama",
"mobs_mc:totem", "mobs_mc:totem",
"mcl_paintings:painting", "mcl_paintings:painting",
} }

View File

@ -6,3 +6,4 @@ mcl_hunger
mcl_death_messages mcl_death_messages
mcl_playerinfo mcl_playerinfo
3d_armor? 3d_armor?
weather_pack

View File

@ -152,14 +152,22 @@ minetest.register_globalstep(function(dtime)
end end
-- Apply black sky in the Void and deal Void damage -- Apply black sky in the Void and deal Void damage
if pos.y < mcl_vars.mg_bedrock_overworld_max then
-- Player reached the void, set black sky box
player:set_sky("#000000", "plain", nil, false)
-- FIXME: Sky handling in MCL2 is held together with lots of duct tape.
-- This only works beause weather_pack currently does not touch the sky for players below the height used for this check.
-- There should be a real skybox API.
end
local void, void_deadly = mcl_util.is_in_void(pos) local void, void_deadly = mcl_util.is_in_void(pos)
local _, dim = mcl_util.y_to_layer(pos.y)
-- Set dimension skies.
-- FIXME: Sky handling in MCL2 is held together with lots of duct tape.
-- This only works beause weather_pack currently does not touch the sky for players below the height used for this check.
-- There should be a real skybox API.
if dim == "void" then
player:set_sky("#000000", "plain", nil, false)
elseif dim == "end" then
local t = "mcl_playerplus_end_sky.png"
player:set_sky("#000000", "skybox", {t,t,t,t,t,t}, false)
elseif dim == "nether" then
player:set_sky("#300808", "plain", nil, false)
else
skycolor.update_sky_color({player})
end
if void_deadly then if void_deadly then
-- Player is deep into the void, deal void damage -- Player is deep into the void, deal void damage
if player:get_hp() > 0 then if player:get_hp() > 0 then

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -843,3 +843,6 @@ Source path,Source file,Target path,Target file,xs,ys,xl,yl,xt,yt
/assets/minecraft/textures/entity/banner,base.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_base.png,,,,,, /assets/minecraft/textures/entity/banner,base.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_base.png,,,,,,
/assets/minecraft/textures/items,banner_base.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_item_base.png,,,,,, /assets/minecraft/textures/items,banner_base.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_item_base.png,,,,,,
/assets/minecraft/textures/items,banner_overlay.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_item_overlay.png,,,,,, /assets/minecraft/textures/items,banner_overlay.png,/mods/ITEMS/mcl_banners/textures,mcl_banners_item_overlay.png,,,,,,
/assets/minecraft/textures/blocks,portal.png,/mods/ITEMS/mcl_portals/textures,mcl_portals_portal.png,,,,,,
/assets/minecraft/textures/entity,end_portal.png,/mods/ITEMS/mcl_portals/textures,mcl_portals_end_portal.png,,,,,,
/assets/minecraft/textures/environment,end_sky.png,/mods/PLAYER/mcl_playerplus/textures,mcl_playerplus_end_sky.png,,,,,,

1 Source path Source file Target path Target file xs ys xl yl xt yt
843 /assets/minecraft/textures/entity/banner base.png /mods/ITEMS/mcl_banners/textures mcl_banners_base.png
844 /assets/minecraft/textures/items banner_base.png /mods/ITEMS/mcl_banners/textures mcl_banners_item_base.png
845 /assets/minecraft/textures/items banner_overlay.png /mods/ITEMS/mcl_banners/textures mcl_banners_item_overlay.png
846 /assets/minecraft/textures/blocks portal.png /mods/ITEMS/mcl_portals/textures mcl_portals_portal.png
847 /assets/minecraft/textures/entity end_portal.png /mods/ITEMS/mcl_portals/textures mcl_portals_end_portal.png
848 /assets/minecraft/textures/environment end_sky.png /mods/PLAYER/mcl_playerplus/textures mcl_playerplus_end_sky.png