From 4de232bdae7efc3430e37c4fc95c681a909f0b41 Mon Sep 17 00:00:00 2001 From: Bond-009 Date: Sun, 11 Aug 2019 01:11:57 +0200 Subject: Wake up redstone simulator on slot changes for blockentities (#4348) Fix #1898 Fix #2194 Fix #3063 --- src/BlockEntities/BlockEntityWithItems.cpp | 8 ++++++++ src/BlockEntities/ChestEntity.h | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/BlockEntities/BlockEntityWithItems.cpp b/src/BlockEntities/BlockEntityWithItems.cpp index 01d217a16..924882820 100644 --- a/src/BlockEntities/BlockEntityWithItems.cpp +++ b/src/BlockEntities/BlockEntityWithItems.cpp @@ -8,6 +8,7 @@ #include "Globals.h" #include "BlockEntityWithItems.h" +#include "../Simulator/RedstoneSimulator.h" @@ -68,5 +69,12 @@ void cBlockEntityWithItems::OnSlotChanged(cItemGrid * a_Grid, int a_SlotNum) } m_World->MarkChunkDirty(GetChunkX(), GetChunkZ()); + auto Pos = Vector3i(m_PosX, m_PosY, m_PosZ); + m_World->DoWithChunkAt(Pos, [&](cChunk & a_Chunk) + { + m_World->GetRedstoneSimulator()->WakeUp(Pos, &a_Chunk); + return true; + } + ); } } diff --git a/src/BlockEntities/ChestEntity.h b/src/BlockEntities/ChestEntity.h index dc26e0895..de4c1cce6 100644 --- a/src/BlockEntities/ChestEntity.h +++ b/src/BlockEntities/ChestEntity.h @@ -2,6 +2,7 @@ #pragma once #include "BlockEntityWithItems.h" +#include "../Simulator/RedstoneSimulator.h" @@ -89,6 +90,13 @@ private: } m_World->MarkChunkDirty(GetChunkX(), GetChunkZ()); + auto Pos = Vector3i(m_PosX, m_PosY, m_PosZ); + m_World->DoWithChunkAt(Pos, [&](cChunk & a_Chunk) + { + m_World->GetRedstoneSimulator()->WakeUp(Pos, &a_Chunk); + return true; + } + ); } } -- cgit v1.2.3