From f5d24746d662f12b0446d82b0e49f7dec495c748 Mon Sep 17 00:00:00 2001 From: Mat Date: Mon, 23 Mar 2020 15:45:09 +0200 Subject: Jukebox improvements (#4537) * Add jukebox block handler Co-authored-by: peterbell10 --- src/BlockEntities/JukeboxEntity.cpp | 26 ++++++++++++++++++++++---- src/BlockEntities/JukeboxEntity.h | 1 + 2 files changed, 23 insertions(+), 4 deletions(-) (limited to 'src/BlockEntities') diff --git a/src/BlockEntities/JukeboxEntity.cpp b/src/BlockEntities/JukeboxEntity.cpp index a4905cab2..9efd4f0ac 100644 --- a/src/BlockEntities/JukeboxEntity.cpp +++ b/src/BlockEntities/JukeboxEntity.cpp @@ -1,6 +1,9 @@ -#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules +// JukeboxEntity.cpp + +// Implements the cJukeboxEntity class representing a single jukebox in the world +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "JukeboxEntity.h" #include "../World.h" #include "../EffectID.h" @@ -23,6 +26,21 @@ cJukeboxEntity::cJukeboxEntity(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, Ve cJukeboxEntity::~cJukeboxEntity() { + if (m_World && IsPlayingRecord()) + { + // Stop playing music when destroyed by any means + m_World->BroadcastSoundParticleEffect(EffectID::SFX_RANDOM_PLAY_MUSIC_DISC, GetPos(), 0); + } +} + + + + + +void cJukeboxEntity::Destroy(void) +{ + ASSERT(m_World != nullptr); + EjectRecord(); } @@ -50,7 +68,7 @@ bool cJukeboxEntity::UsedBy(cPlayer * a_Player) else { const cItem & HeldItem = a_Player->GetEquippedItem(); - if (PlayRecord(HeldItem.m_ItemType)) + if (PlayRecord(HeldItem.m_ItemType) && !a_Player->IsGameModeCreative()) { a_Player->GetInventory().RemoveOneEquippedItem(); return true; @@ -96,9 +114,9 @@ bool cJukeboxEntity::EjectRecord(void) cItems Drops; Drops.push_back(cItem(static_cast(m_Record), 1, 0)); m_Record = 0; - m_World->SpawnItemPickups(Drops, Vector3d(0.5, 1, 0.5) + m_Pos, 8); - m_World->BroadcastSoundParticleEffect(EffectID::SFX_RANDOM_PLAY_MUSIC_DISC, GetPos(), 0); + m_World->SpawnItemPickups(Drops, Vector3d(0.5, 0.5, 0.5) + m_Pos, 10); m_World->SetBlockMeta(m_Pos, E_META_JUKEBOX_OFF); + m_World->BroadcastSoundParticleEffect(EffectID::SFX_RANDOM_PLAY_MUSIC_DISC, GetPos(), 0); return true; } diff --git a/src/BlockEntities/JukeboxEntity.h b/src/BlockEntities/JukeboxEntity.h index 315d1ddda..2fbd916eb 100644 --- a/src/BlockEntities/JukeboxEntity.h +++ b/src/BlockEntities/JukeboxEntity.h @@ -46,6 +46,7 @@ public: // tolua_export // tolua_end // cBlockEntity overrides: + virtual void Destroy(void) override; virtual void CopyFrom(const cBlockEntity & a_Src) override; virtual bool UsedBy(cPlayer * a_Player) override; virtual void SendTo(cClientHandle &) override {} -- cgit v1.2.3