diff options
author | Mattes D <github@xoft.cz> | 2014-02-11 09:07:08 +0100 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2014-02-11 09:07:08 +0100 |
commit | 1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e (patch) | |
tree | 0cacd6ad93e9d02c0228bc314834bd7e8edae1bc /MCServer/Plugins/Debuggers/Debuggers.lua | |
parent | Merge pull request #660 from worktycho/boatsFix (diff) | |
parent | Debuggers: Updated messaging functions (diff) | |
download | cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.tar cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.tar.gz cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.tar.bz2 cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.tar.lz cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.tar.xz cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.tar.zst cuberite-1f96454b9cc35e76bfab2fb5dbea5dc34b0fe28e.zip |
Diffstat (limited to '')
-rw-r--r-- | MCServer/Plugins/Debuggers/Debuggers.lua | 73 |
1 files changed, 72 insertions, 1 deletions
diff --git a/MCServer/Plugins/Debuggers/Debuggers.lua b/MCServer/Plugins/Debuggers/Debuggers.lua index 624261cbf..8345e2169 100644 --- a/MCServer/Plugins/Debuggers/Debuggers.lua +++ b/MCServer/Plugins/Debuggers/Debuggers.lua @@ -53,6 +53,7 @@ function Initialize(Plugin) PM:BindCommand("/fr", "debuggers", HandleFurnaceRecipe, "- Shows the furnace recipe for the currently held item"); PM:BindCommand("/ff", "debuggers", HandleFurnaceFuel, "- Shows how long the currently held item would burn in a furnace"); PM:BindCommand("/sched", "debuggers", HandleSched, "- Schedules a simple countdown using cWorld:ScheduleTask()"); + PM:BindCommand("/cs", "debuggers", HandleChunkStay, "- Tests the ChunkStay Lua integration for the specified chunk coords"); Plugin:AddWebTab("Debuggers", HandleRequest_Debuggers); @@ -64,7 +65,7 @@ function Initialize(Plugin) -- TestBlockAreas(); -- TestSQLiteBindings(); -- TestExpatBindings(); - TestPluginCalls(); + -- TestPluginCalls(); return true end; @@ -1061,3 +1062,73 @@ end + +function HandleChunkStay(a_Split, a_Player) + -- As an example of using ChunkStay, this call will load 3x3 chunks around the specified chunk coords, + -- then build an obsidian pillar in the middle of each one. + -- Once complete, the player will be teleported to the middle pillar + + if (#a_Split ~= 3) then + a_Player:SendMessageInfo("Usage: /cs <ChunkX> <ChunkZ>") + return true + end + + local ChunkX = tonumber(a_Split[2]) + local ChunkZ = tonumber(a_Split[3]) + if ((ChunkX == nil) or (ChunkZ == nil)) then + a_Player:SendMessageFailure("Invalid chunk coords.") + return true + end + + local World = a_Player:GetWorld() + local PlayerID = a_Player:GetUniqueID() + a_Player:SendMessageInfo("Loading chunks, stand by..."); + + -- Set the wanted chunks: + local Chunks = {} + for z = -1, 1 do for x = -1, 1 do + table.insert(Chunks, {ChunkX + x, ChunkZ + z}) + end end + + -- The function that is called when all chunks are available + -- Will perform the actual action with all those chunks + -- Note that the player needs to be referenced using their EntityID - in case they disconnect before the chunks load + local OnAllChunksAvailable = function() + LOGINFO("ChunkStay all chunks now available") + -- Build something on the neighboring chunks, to verify: + for z = -1, 1 do for x = -1, 1 do + local BlockX = (ChunkX + x) * 16 + 8 + local BlockZ = (ChunkZ + z) * 16 + 8 + for y = 20, 80 do + World:SetBlock(BlockX, y, BlockZ, E_BLOCK_OBSIDIAN, 0) + end + end end + + -- Teleport the player there for visual inspection: + World:DoWithEntityByID(PlayerID, + function (a_CallbackPlayer) + a_CallbackPlayer:TeleportToCoords(ChunkX * 16 + 8, 85, ChunkZ * 16 + 8) + a_CallbackPlayer:SendMessageSuccess("ChunkStay fully available") + end + ) + end + + -- This function will be called for each chunk that is made available + -- Note that the player needs to be referenced using their EntityID - in case they disconnect before the chunks load + local OnChunkAvailable = function(a_ChunkX, a_ChunkZ) + LOGINFO("ChunkStay now has chunk [" .. a_ChunkX .. ", " .. a_ChunkZ .. "]") + World:DoWithEntityByID(PlayerID, + function (a_CallbackPlayer) + a_CallbackPlayer:SendMessageInfo("ChunkStay now has chunk [" .. a_ChunkX .. ", " .. a_ChunkZ .. "]") + end + ) + end + + -- Process the ChunkStay: + World:ChunkStay(Chunks, OnChunkAvailable, OnAllChunksAvailable) + return true +end + + + + |