summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMat <mail@mathias.is>2020-03-23 14:45:09 +0100
committerGitHub <noreply@github.com>2020-03-23 14:45:09 +0100
commitf5d24746d662f12b0446d82b0e49f7dec495c748 (patch)
tree7bed8eab2c49f2985ef5e3e0ceaea7dbd3d2df13
parentUpdate .gitignore; new files added to APIDump are no longer ignored (diff)
downloadcuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.tar
cuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.tar.gz
cuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.tar.bz2
cuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.tar.lz
cuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.tar.xz
cuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.tar.zst
cuberite-f5d24746d662f12b0446d82b0e49f7dec495c748.zip
-rw-r--r--src/BlockEntities/JukeboxEntity.cpp26
-rw-r--r--src/BlockEntities/JukeboxEntity.h1
-rw-r--r--src/Blocks/BlockHandler.cpp3
-rw-r--r--src/Blocks/BlockJukebox.h36
4 files changed, 61 insertions, 5 deletions
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<short>(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 {}
diff --git a/src/Blocks/BlockHandler.cpp b/src/Blocks/BlockHandler.cpp
index a865bce63..60241b0ae 100644
--- a/src/Blocks/BlockHandler.cpp
+++ b/src/Blocks/BlockHandler.cpp
@@ -45,6 +45,7 @@
#include "BlockMobHead.h"
#include "BlockHopper.h"
#include "BlockIce.h"
+#include "BlockJukebox.h"
#include "BlockLadder.h"
#include "BlockLeaves.h"
#include "BlockLilypad.h"
@@ -259,7 +260,7 @@ static cBlockHandler * CreateBlockHandler(BLOCKTYPE a_BlockType)
case E_BLOCK_IRON_ORE: return new cBlockOreHandler (a_BlockType);
case E_BLOCK_IRON_TRAPDOOR: return new cBlockTrapdoorHandler (a_BlockType);
case E_BLOCK_JACK_O_LANTERN: return new cBlockPumpkinHandler (a_BlockType);
- case E_BLOCK_JUKEBOX: return new cBlockEntityHandler (a_BlockType);
+ case E_BLOCK_JUKEBOX: return new cBlockJukeboxHandler (a_BlockType);
case E_BLOCK_JUNGLE_DOOR: return new cBlockDoorHandler (a_BlockType);
case E_BLOCK_JUNGLE_FENCE: return new cBlockFenceHandler (a_BlockType);
case E_BLOCK_JUNGLE_FENCE_GATE: return new cBlockFenceGateHandler (a_BlockType);
diff --git a/src/Blocks/BlockJukebox.h b/src/Blocks/BlockJukebox.h
new file mode 100644
index 000000000..22b02a2c7
--- /dev/null
+++ b/src/Blocks/BlockJukebox.h
@@ -0,0 +1,36 @@
+
+#pragma once
+
+#include "BlockEntity.h"
+#include "Mixins.h"
+
+
+
+
+
+class cBlockJukeboxHandler :
+ public cClearMetaOnDrop<cBlockEntityHandler>
+{
+ using super = cClearMetaOnDrop<cBlockEntityHandler>;
+
+public:
+
+ cBlockJukeboxHandler(BLOCKTYPE a_BlockType):
+ super(a_BlockType)
+ {
+ }
+
+
+
+
+
+ virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
+ {
+ UNUSED(a_Meta);
+ return 6;
+ }
+} ;
+
+
+
+