1
0
cuberite-2a/MCServer/Plugins/ChunkWorx/chunkworx_main.lua

128 lines
3.8 KiB
Lua

-- Global variables
PLUGIN = {} -- Reference to own plugin object
GENERATION_STATE = 0
OPERATION_CODE = 0 -- 0 = generation
CX = 0
CZ = 0
CURRENT = 0
TOTAL = 0
-- AREA Variables
AreaStartX = -10
AreaStartZ = -10
AreaEndX = 10
AreaEndZ = 10
-- RADIAL Variables
RadialX = 0
RadialZ = 0
Radius = 10
-- WORLD
WORK_WORLD = cRoot:Get():GetDefaultWorld():GetName()
WW_instance = cRoot:Get():GetDefaultWorld()
WORLDS = {}
function Initialize(Plugin)
PLUGIN = Plugin
PLUGIN:SetName("ChunkWorx")
PLUGIN:SetVersion(6)
cPluginManager.AddHook(cPluginManager.HOOK_TICK, OnTick)
Plugin:AddWebTab("(Re)Generation", HandleRequest_Generation)
GENERATION_STATE = 0
WW_instance = cRoot:Get():GetWorld(WORK_WORLD)
if (WW_instance == nil) then
LOG("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. ": NO WORLD found :(")
end
-- Read the stored values:
local SettingsIni = cIniFile();
SettingsIni:ReadFile("ChunkWorx.ini"); -- ignore any read errors
AreaStartX = SettingsIni:GetValueSetI("Area data", "StartX", AreaStartX)
AreaStartZ = SettingsIni:GetValueSetI("Area data", "StartZ", AreaStartZ)
AreaEndX = SettingsIni:GetValueSetI("Area data", "EndX", AreaEndX)
AreaEndZ = SettingsIni:GetValueSetI("Area data", "EndZ", AreaEndZ)
RadialX = SettingsIni:GetValueSetI("Radial data", "RadialX", RadialX)
RadialZ = SettingsIni:GetValueSetI("Radial data", "RadialZ", RadialZ)
Radius = SettingsIni:GetValueSetI("Radial data", "Radius", Radius)
SettingsIni:WriteFile("ChunkWorx.ini");
LOG("Initialized " .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion())
return true
end
function OnTick( DeltaTime )
if (GENERATION_STATE == 1 or GENERATION_STATE == 3) then
LOGINFO("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. ": works STARTED!")
LOGINFO("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. ": At world: " .. WORK_WORLD)
WW_instance = cRoot:Get():GetWorld(WORK_WORLD)
if (GENERATION_STATE == 1) then GENERATION_STATE = 2 end
if (GENERATION_STATE == 3) then GENERATION_STATE = 4 end
-- Changing in case coordinates are flipped
local shifter = AreaEndX
if (AreaStartX > AreaEndX) then
AreaEndX = AreaStartX
AreaStartX = shifter
end
shifter = AreaEndZ
if (AreaStartZ > AreaEndZ) then
AreaEndZ = AreaStartZ
AreaStartZ = shifter
end
CX = AreaStartX
CZ = AreaStartZ
CURRENT = 0
if (WW_instance == nil) then
LOGERROR("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. ": works ABORTED")
LOGERROR("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. ": NO WORLD found :(")
GENERATION_STATE = 0
end
end
if (GENERATION_STATE == 2 or GENERATION_STATE == 4) then
if (WW_instance:GetGeneratorQueueLength() < 200
and WW_instance:GetLightingQueueLength() < 200
and (WW_instance:GetStorageSaveQueueLength() + WW_instance:GetStorageLoadQueueLength()) < 80) then
local chunk_sum = (1+ AreaEndX - AreaStartX) * (1+ AreaEndZ - AreaStartZ)
TOTAL = chunk_sum
LOG("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. ": PROCESSING 100 chunks, (" .. CURRENT .. "/" .. chunk_sum .. ")")
for C = 1, 100 do
if (GENERATION_STATE == 2) then WW_instance:GenerateChunk(CX, CZ) end
if (GENERATION_STATE == 4) then WW_instance:RegenerateChunk(CX, CZ) end
CX = CX + 1
CURRENT = CURRENT + 1
if (CX > AreaEndX) then
CX = AreaStartX
CZ = CZ + 1
if (CZ > AreaEndZ) then
if (GENERATION_STATE == 2) then LOGINFO("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. " - generation ENDED!") end
if (GENERATION_STATE == 4) then LOGINFO("" .. PLUGIN:GetName() .. " v" .. PLUGIN:GetVersion() .. " - REgeneration ENDED!") end
GENERATION_STATE = 0
break
end
end
end
WW_instance:QueueSaveAllChunks()
WW_instance:QueueUnloadUnusedChunks()
end
end
end