summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-14 13:54:54 +0100
committerfaketruth <faketruth@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-02-14 13:54:54 +0100
commitdcce79b24d966ac66042900bd233db17ba1ec5d1 (patch)
treeaf668d4fcb6ff2e2f02bcb4167dd5024316b26d5
parentFixed the same leak in FireSimulator (diff)
downloadcuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.tar
cuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.tar.gz
cuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.tar.bz2
cuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.tar.lz
cuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.tar.xz
cuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.tar.zst
cuberite-dcce79b24d966ac66042900bd233db17ba1ec5d1.zip
-rw-r--r--Plugins/Fire/plugin.lua133
-rw-r--r--source/cFireSimulator.h4
2 files changed, 2 insertions, 135 deletions
diff --git a/Plugins/Fire/plugin.lua b/Plugins/Fire/plugin.lua
deleted file mode 100644
index 5a96c4fdc..000000000
--- a/Plugins/Fire/plugin.lua
+++ /dev/null
@@ -1,133 +0,0 @@
-local FireBlocks = {} -- List of blocks that are currently burning!
-
-function Initialize( Plugin )
-
- Plugin:SetName( "Fire" )
- Plugin:SetVersion( 2 )
-
- PluginManager = cRoot:Get():GetPluginManager()
- PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_TICK )
- PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_BLOCK_PLACE )
- PluginManager:AddHook( Plugin, cPluginManager.E_PLUGIN_BLOCK_DIG )
-
- Log( "Initialized " .. Plugin:GetName() .. " v." .. Plugin:GetVersion() )
-
- return true
-end
-
-function IsForeverBurnable( BlockID )
- if( BlockID == E_BLOCK_BLOODSTONE ) then
- return true
- end
- return false
-end
-
-function IsBurnable( BlockID )
- if( BlockID == E_BLOCK_LEAVES or BlockID == E_BLOCK_LOG ) then
- return true
- end
-
- return false
-end
-
-function FindBurnableAround( X, Y, Z )
- World = cRoot:Get():GetWorld()
-
- ListBurnables = {}
- if( IsBurnable( World:GetBlock(X-1, Y, Z) ) ) then
- table.insert( ListBurnables, { ["x"] = X-1, ["y"] = Y, ["z"] = Z } )
- end
- if( IsBurnable( World:GetBlock(X+1, Y, Z) ) ) then
- table.insert( ListBurnables, { ["x"] = X+1, ["y"] = Y, ["z"] = Z } )
- end
- if( IsBurnable( World:GetBlock(X, Y-1, Z) ) ) then
- table.insert( ListBurnables, { ["x"] = X, ["y"] = Y-1, ["z"] = Z } )
- end
- if( IsBurnable( World:GetBlock(X, Y+1, Z) ) ) then
- table.insert( ListBurnables, { ["x"] = X, ["y"] = Y+1, ["z"] = Z } )
- end
- if( IsBurnable( World:GetBlock(X, Y, Z-1) ) ) then
- table.insert( ListBurnables, { ["x"] = X, ["y"] = Y, ["z"] = Z-1 } )
- end
- if( IsBurnable( World:GetBlock(X, Y, Z+1) ) ) then
- table.insert( ListBurnables, { ["x"] = X, ["y"] = Y, ["z"] = Z+1 } )
- end
-
- return ListBurnables
-end
-
-
-function OnBlockPlace( PacketData, Player )
-
- if( PacketData.m_ItemType == E_BLOCK_FIRE or PacketData.m_ItemType == E_ITEM_FLINT_AND_STEEL ) then
- if( PacketData.m_Direction > -1 ) then
- local X = PacketData.m_PosX
- local Y = PacketData.m_PosY
- local Z = PacketData.m_PosZ
-
- X, Y, Z = AddDirection( X, Y, Z, PacketData.m_Direction )
- local World = cRoot:Get():GetWorld()
-
- --Since flint and steel doesn't do anything on the server side yet
- if( PacketData.m_ItemType == E_ITEM_FLINT_AND_STEEL ) then
- World:SetBlock( X, Y, Z, E_BLOCK_FIRE, 0 )
- end
-
- if( not IsForeverBurnable( World:GetBlock( X, Y-1, Z ) ) ) then
- table.insert( FireBlocks, { ["x"] = X, ["y"] = Y, ["z"] = Z } )
- end
- end
- end
-
- return false -- dont forbid placing the fire
-end
-
--- To put out fires! :D
-function OnBlockDig( PacketData, Player )
- if( PacketData.m_Direction < 0 ) then
- return false
- end
-
- local X = PacketData.m_PosX
- local Y = PacketData.m_PosY
- local Z = PacketData.m_PosZ
-
- X, Y, Z = AddDirection( X, Y, Z, PacketData.m_Direction )
-
- local World = cRoot:Get():GetWorld()
- if( World:GetBlock( X, Y, Z ) == E_BLOCK_FIRE ) then
- World:SetBlock( X, Y, Z, E_BLOCK_AIR, 0 )
- end
-
- return false
-end
-
-local NumTicks = 0
-function Tick( DeltaTime )
- if( NumTicks < 10 ) then -- Only spread every 10 ticks, to make sure it doesnt happen too fast
- NumTicks = NumTicks + 1
- return
- end
- NumTicks = 0
-
- local World = cRoot:Get():GetWorld()
-
- local NewTable = {}
- for key,val in pairs(FireBlocks) do
- X = val["x"]
- Y = val["y"]
- Z = val["z"]
- local Burnables = FindBurnableAround(X, Y, Z)
- if( math.random(10) > 5 ) then
- table.insert( NewTable, val )
- elseif( #Burnables > 0 ) then
- local ToBurn = Burnables[ math.random( #Burnables ) ]
- World:SetBlock( ToBurn["x"], ToBurn["y"], ToBurn["z"], E_BLOCK_FIRE, 0 )
- table.insert( NewTable, ToBurn )
- table.insert( NewTable, val )
- else
- World:SetBlock( X, Y, Z, 0, 0 )
- end
- end
- FireBlocks = NewTable
-end
diff --git a/source/cFireSimulator.h b/source/cFireSimulator.h
index ef2da6756..1a3bbd314 100644
--- a/source/cFireSimulator.h
+++ b/source/cFireSimulator.h
@@ -1,7 +1,7 @@
#pragma once
#include "cSimulator.h"
#include "cBlockEntity.h"
-#include "vector"
+#include <list>
class Vector3i;
class cWorld;
@@ -25,7 +25,7 @@ protected:
virtual bool BurnBlockAround(int a_X, int a_Y, int a_Z);
virtual bool BurnBlock(int a_X, int a_Y, int a_Z);
- typedef std::vector <Vector3i> BlockList;
+ typedef std::list <Vector3i> BlockList;
BlockList *m_Blocks;
BlockList *m_Buffer;