summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@hotmail.co.uk>2014-09-27 20:19:28 +0200
committerTiger Wang <ziwei.tiger@hotmail.co.uk>2014-09-27 20:19:28 +0200
commit7ce09a9113d693b85fdda13b3c04a8b8eb900153 (patch)
tree49c3c3742cff4c38a33bd5014dd9c57c0dcea71c
parentMerge remote-tracking branch 'origin/master' into chestcarts (diff)
downloadcuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.tar
cuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.tar.gz
cuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.tar.bz2
cuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.tar.lz
cuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.tar.xz
cuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.tar.zst
cuberite-7ce09a9113d693b85fdda13b3c04a8b8eb900153.zip
-rw-r--r--src/BlockEntities/BlockEntityWithItems.h12
-rw-r--r--src/BlockEntities/EnderChestEntity.cpp3
-rw-r--r--src/BlockEntities/EnderChestEntity.h2
-rw-r--r--src/Entities/Minecart.cpp4
-rw-r--r--src/Entities/Minecart.h3
-rw-r--r--src/UI/WindowOwner.h68
6 files changed, 69 insertions, 23 deletions
diff --git a/src/BlockEntities/BlockEntityWithItems.h b/src/BlockEntities/BlockEntityWithItems.h
index ca6758e7a..f26ef07dd 100644
--- a/src/BlockEntities/BlockEntityWithItems.h
+++ b/src/BlockEntities/BlockEntityWithItems.h
@@ -20,12 +20,9 @@
// tolua_begin
class cBlockEntityWithItems :
- public cBlockEntity
- // tolua_end
- // tolua doesn't seem to support multiple inheritance?
- , public cItemGrid::cListener
- , public cWindowOwner
- // tolua_begin
+ public cBlockEntity,
+ public cItemGrid::cListener,
+ public cBlockEntityWindowOwner
{
typedef cBlockEntity super;
@@ -39,7 +36,8 @@ public:
cWorld * a_World // Optional world to assign to the entity
) :
super(a_BlockType, a_BlockX, a_BlockY, a_BlockZ, a_World),
- m_Contents(a_ItemGridWidth, a_ItemGridHeight)
+ m_Contents(a_ItemGridWidth, a_ItemGridHeight),
+ cBlockEntityWindowOwner(this)
{
m_Contents.AddListener(*this);
}
diff --git a/src/BlockEntities/EnderChestEntity.cpp b/src/BlockEntities/EnderChestEntity.cpp
index b870f9e50..0654d97dd 100644
--- a/src/BlockEntities/EnderChestEntity.cpp
+++ b/src/BlockEntities/EnderChestEntity.cpp
@@ -11,7 +11,8 @@
cEnderChestEntity::cEnderChestEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World) :
- super(E_BLOCK_ENDER_CHEST, a_BlockX, a_BlockY, a_BlockZ, a_World)
+ super(E_BLOCK_ENDER_CHEST, a_BlockX, a_BlockY, a_BlockZ, a_World),
+ cBlockEntityWindowOwner(this)
{
}
diff --git a/src/BlockEntities/EnderChestEntity.h b/src/BlockEntities/EnderChestEntity.h
index ccfb2690b..311af8d76 100644
--- a/src/BlockEntities/EnderChestEntity.h
+++ b/src/BlockEntities/EnderChestEntity.h
@@ -11,7 +11,7 @@
// tolua_begin
class cEnderChestEntity :
public cBlockEntity,
- public cWindowOwner
+ public cBlockEntityWindowOwner
{
typedef cBlockEntity super;
diff --git a/src/Entities/Minecart.cpp b/src/Entities/Minecart.cpp
index 42ac57a07..c5e1c07d5 100644
--- a/src/Entities/Minecart.cpp
+++ b/src/Entities/Minecart.cpp
@@ -7,7 +7,6 @@
#include "Globals.h"
#include "Minecart.h"
-#include "../World.h"
#include "../ClientHandle.h"
#include "../Chunk.h"
#include "Player.h"
@@ -1107,7 +1106,8 @@ void cRideableMinecart::OnRightClicked(cPlayer & a_Player)
cMinecartWithChest::cMinecartWithChest(double a_X, double a_Y, double a_Z) :
super(mpChest, a_X, a_Y, a_Z),
- m_Contents(ContentsWidth, ContentsHeight)
+ m_Contents(ContentsWidth, ContentsHeight),
+ cEntityWindowOwner(this)
{
m_Contents.AddListener(*this);
}
diff --git a/src/Entities/Minecart.h b/src/Entities/Minecart.h
index f77a171ba..6b6ad36b5 100644
--- a/src/Entities/Minecart.h
+++ b/src/Entities/Minecart.h
@@ -10,6 +10,7 @@
#pragma once
#include "Entity.h"
+#include "World.h"
#include "../UI/WindowOwner.h"
@@ -111,7 +112,7 @@ protected:
class cMinecartWithChest :
public cMinecart,
public cItemGrid::cListener,
- public cWindowOwner
+ public cEntityWindowOwner
{
typedef cMinecart super;
diff --git a/src/UI/WindowOwner.h b/src/UI/WindowOwner.h
index a8be3e6cb..6845a161b 100644
--- a/src/UI/WindowOwner.h
+++ b/src/UI/WindowOwner.h
@@ -1,4 +1,3 @@
-
#pragma once
#include "../BlockEntities/BlockEntity.h"
@@ -16,12 +15,6 @@ for entities / players in motion to close their windows when they get too far aw
-// class cWindow;
-
-
-
-
-
/**
Base class for the window owning
*/
@@ -32,16 +25,16 @@ public:
m_Window(NULL)
{
}
-
+
virtual ~cWindowOwner()
{
}
-
+
void CloseWindow(void)
{
m_Window = NULL;
}
-
+
void OpenWindow(cWindow * a_Window)
{
m_Window = a_Window;
@@ -52,7 +45,10 @@ public:
{
return m_Window;
}
-
+
+ /// Returns the block position at which the element owning the window is
+ virtual Vector3i GetBlockPos(void) = 0;
+
private:
cWindow * m_Window;
};
@@ -60,3 +56,53 @@ private:
+
+/**
+Window owner that is associated with a block entity (chest, furnace, ...)
+*/
+class cBlockEntityWindowOwner :
+ public cWindowOwner
+{
+public:
+ cBlockEntityWindowOwner(cBlockEntity * a_BlockEntity) :
+ m_BlockEntity(a_BlockEntity)
+ {
+ }
+
+ virtual Vector3i GetBlockPos(void) override
+ {
+ return Vector3i(m_BlockEntity->GetPosX(), m_BlockEntity->GetPosY(), m_BlockEntity->GetPosZ());
+ }
+
+private:
+ cBlockEntity * m_BlockEntity;
+};
+
+
+
+
+
+/**
+Window owner that is associated with an entity (chest minecart)
+*/
+class cEntityWindowOwner :
+ public cWindowOwner
+{
+public:
+ cEntityWindowOwner(cEntity * a_Entity) :
+ m_Entity(a_Entity)
+ {
+ }
+
+ virtual Vector3i GetBlockPos(void) override
+ {
+ return m_Entity->GetPosition().Floor();
+ }
+
+private:
+ cEntity * m_Entity;
+};
+
+
+
+