summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/Blocks/BlockEnderchest.h28
-rw-r--r--source/Blocks/BlockHandler.cpp2
-rw-r--r--source/Blocks/BlockMycelium.h2
-rw-r--r--source/Defines.h7
-rw-r--r--source/Player.cpp8
-rw-r--r--source/Player.h1
6 files changed, 41 insertions, 7 deletions
diff --git a/source/Blocks/BlockEnderchest.h b/source/Blocks/BlockEnderchest.h
new file mode 100644
index 000000000..b40deb1f7
--- /dev/null
+++ b/source/Blocks/BlockEnderchest.h
@@ -0,0 +1,28 @@
+
+#pragma once
+
+#include "BlockHandler.h"
+
+
+
+
+
+class cBlockEnderchestHandler :
+ public cBlockHandler
+{
+public:
+ cBlockEnderchestHandler(BLOCKTYPE a_BlockType)
+ : cBlockHandler(a_BlockType)
+ {
+ }
+
+ virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
+ {
+ //todo: Drop Ender Chest if using silk touch pickaxe
+ a_Pickups.push_back(cItem(E_BLOCK_OBSIDIAN, 8, 0));
+ }
+} ;
+
+
+
+
diff --git a/source/Blocks/BlockHandler.cpp b/source/Blocks/BlockHandler.cpp
index 3f63de89f..3fb96f6a0 100644
--- a/source/Blocks/BlockHandler.cpp
+++ b/source/Blocks/BlockHandler.cpp
@@ -47,6 +47,7 @@
#include "BlockMycelium.h"
#include "BlockRail.h"
#include "BlockGlass.h"
+#include "BlockEnderchest.h"
@@ -100,6 +101,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType)
case E_BLOCK_DOUBLE_STONE_SLAB: return new cBlockSlabHandler (a_BlockType);
case E_BLOCK_DOUBLE_WOODEN_SLAB: return new cBlockSlabHandler (a_BlockType);
case E_BLOCK_EMERALD_ORE: return new cBlockOreHandler (a_BlockType);
+ case E_BLOCK_ENDER_CHEST: return new cBlockEnderchestHandler (a_BlockType);
case E_BLOCK_FARMLAND: return new cBlockFarmlandHandler;
case E_BLOCK_FIRE: return new cBlockFireHandler (a_BlockType);
case E_BLOCK_FURNACE: return new cBlockFurnaceHandler (a_BlockType);
diff --git a/source/Blocks/BlockMycelium.h b/source/Blocks/BlockMycelium.h
index 57b45dfe1..8e1f577e1 100644
--- a/source/Blocks/BlockMycelium.h
+++ b/source/Blocks/BlockMycelium.h
@@ -2,8 +2,6 @@
#pragma once
#include "BlockHandler.h"
-#include "../MersenneTwister.h"
-#include "../World.h"
diff --git a/source/Defines.h b/source/Defines.h
index 18d495a53..4f3bb46eb 100644
--- a/source/Defines.h
+++ b/source/Defines.h
@@ -354,9 +354,10 @@ inline bool BlockRequiresSpecialTool(BLOCKTYPE a_BlockType)
//tolua_begin
enum eGameMode
{
- eGameMode_NotSet = -1,
- eGameMode_Survival = 0,
- eGameMode_Creative = 1
+ eGameMode_NotSet = -1,
+ eGameMode_Survival = 0,
+ eGameMode_Creative = 1,
+ eGameMode_Adventure = 2
};
diff --git a/source/Player.cpp b/source/Player.cpp
index cd4c6d11c..fea438146 100644
--- a/source/Player.cpp
+++ b/source/Player.cpp
@@ -96,6 +96,7 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName)
a_PlayerName.c_str(), m_Pos.x, m_Pos.y, m_Pos.z
);
}
+ m_LastJumpHeight = (float)(m_Pos.y);
m_LastGroundHeight = (float)(m_Pos.y);
m_Stance = m_Pos.y + 1.62;
}
@@ -273,6 +274,7 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
if (!m_bTouchGround)
{
+ if(m_Pos.y > m_LastJumpHeight) m_LastJumpHeight = m_Pos.y;
cWorld* World = GetWorld();
char BlockID = World->GetBlock( float2int(m_Pos.x), float2int(m_Pos.y), float2int(m_Pos.z) );
if( BlockID != E_BLOCK_AIR )
@@ -280,7 +282,7 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
// LOGD("TouchGround set to true by server");
m_bTouchGround = true;
}
- if( BlockID == E_BLOCK_WATER || BlockID == E_BLOCK_STATIONARY_WATER || BlockID == E_BLOCK_LADDER || BlockID == E_BLOCK_TORCH )
+ if( BlockID == E_BLOCK_WATER || BlockID == E_BLOCK_STATIONARY_WATER || BlockID == E_BLOCK_LADDER || BlockID == E_BLOCK_VINES )
{
// LOGD("Water / Ladder / Torch");
m_LastGroundHeight = (float)m_Pos.y;
@@ -291,6 +293,8 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
{
float Dist = (float)(m_LastGroundHeight - m_Pos.y);
int Damage = (int)(Dist - 3.f);
+ if(m_LastJumpHeight > m_LastGroundHeight) Damage++;
+ m_LastJumpHeight = m_Pos.y;
if (Damage > 0)
{
TakeDamage(Damage, 0);
@@ -493,7 +497,7 @@ void cPlayer::SetLastBlockActionCnt( int a_LastBlockActionCnt )
void cPlayer::SetGameMode(eGameMode a_GameMode)
{
- if ((a_GameMode >= 2) || (a_GameMode < 0))
+ if ((a_GameMode >= 3) || (a_GameMode < 0))
{
LOGWARNING("%s: Setting invalid gamemode: %d", GetName().c_str(), a_GameMode);
return;
diff --git a/source/Player.h b/source/Player.h
index 4800ed759..d24850a19 100644
--- a/source/Player.h
+++ b/source/Player.h
@@ -145,6 +145,7 @@ protected:
float m_FoodExhaustionLevel;
char m_FoodTickTimer;
+ float m_LastJumpHeight;
float m_LastGroundHeight;
bool m_bTouchGround;
double m_Stance;