67 lines
2.8 KiB
Lua
67 lines
2.8 KiB
Lua
|
return
|
||
|
{
|
||
|
HOOK_CHUNK_GENERATED =
|
||
|
{
|
||
|
CalledWhen = "After a chunk was generated. Notification only.",
|
||
|
DefaultFnName = "OnChunkGenerated", -- also used as pagename
|
||
|
Desc = [[
|
||
|
This hook is called when world generator finished its work on a chunk. The chunk data has already
|
||
|
been generated and is about to be stored in the {{cWorld|world}}. A plugin may provide some
|
||
|
last-minute finishing touches to the generated data. Note that the chunk is not yet stored in the
|
||
|
world, so regular {{cWorld}} block API will not work! Instead, use the {{cChunkDesc}} object
|
||
|
received as the parameter.</p>
|
||
|
<p>
|
||
|
See also the {{OnChunkGenerating|HOOK_CHUNK_GENERATING}} hook.
|
||
|
]],
|
||
|
Params =
|
||
|
{
|
||
|
{ Name = "World", Type = "{{cWorld}}", Notes = "The world to which the chunk will be added" },
|
||
|
{ Name = "ChunkX", Type = "number", Notes = "X-coord of the chunk" },
|
||
|
{ Name = "ChunkZ", Type = "number", Notes = "Z-coord of the chunk" },
|
||
|
{ Name = "ChunkDesc", Type = "{{cChunkDesc}}", Notes = "Generated chunk data. Plugins may still modify the chunk data contained." },
|
||
|
},
|
||
|
Returns = [[
|
||
|
If the plugin returns false or no value, MCServer will call other plugins' callbacks for this event.
|
||
|
If a plugin returns true, no other callback is called for this event.</p>
|
||
|
<p>
|
||
|
In either case, MCServer will then store the data from ChunkDesc as the chunk's contents in the world.
|
||
|
]],
|
||
|
CodeExamples =
|
||
|
{
|
||
|
{
|
||
|
Title = "Generate emerald ore",
|
||
|
Desc = "This example callback function generates one block of emerald ore in each chunk, under the condition that the randomly chosen location is in an ExtremeHills biome.",
|
||
|
Code = [[
|
||
|
function OnChunkGenerated(a_World, a_ChunkX, a_ChunkZ, a_ChunkDesc)
|
||
|
-- Generate a psaudorandom value that is always the same for the same X/Z pair, but is otherwise random enough:
|
||
|
-- This is actually similar to how MCServer does its noise functions
|
||
|
local PseudoRandom = (a_ChunkX * 57 + a_ChunkZ) * 57 + 19785486
|
||
|
PseudoRandom = PseudoRandom * 8192 + PseudoRandom;
|
||
|
PseudoRandom = ((PseudoRandom * (PseudoRandom * PseudoRandom * 15731 + 789221) + 1376312589) % 0x7fffffff;
|
||
|
PseudoRandom = PseudoRandom / 7;
|
||
|
|
||
|
-- Based on the PseudoRandom value, choose a location for the ore:
|
||
|
local OreX = PseudoRandom % 16;
|
||
|
local OreY = 2 + ((PseudoRandom / 16) % 20);
|
||
|
local OreZ = (PseudoRandom / 320) % 16;
|
||
|
|
||
|
-- Check if the location is in ExtremeHills:
|
||
|
if (a_ChunkDesc:GetBiome(OreX, OreZ) ~= biExtremeHills) then
|
||
|
return false;
|
||
|
end
|
||
|
|
||
|
-- Only replace allowed blocks with the ore:
|
||
|
local CurrBlock = a_ChunDesc:GetBlockType(OreX, OreY, OreZ);
|
||
|
if (
|
||
|
(CurrBlock == E_BLOCK_STONE) or
|
||
|
(CurrBlock == E_BLOCK_DIRT) or
|
||
|
(CurrBlock == E_BLOCK_GRAVEL)
|
||
|
) then
|
||
|
a_ChunkDesc:SetBlockTypeMeta(OreX, OreY, OreZ, E_BLOCK_EMERALD_ORE, 0);
|
||
|
end
|
||
|
end;
|
||
|
]],
|
||
|
},
|
||
|
} , -- CodeExamples
|
||
|
}, -- HOOK_CHUNK_GENERATED
|
||
|
}
|