summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@hotmail.co.uk>2013-10-15 22:14:47 +0200
committerTiger Wang <ziwei.tiger@hotmail.co.uk>2013-10-15 22:14:47 +0200
commitcb9ccb36acfb1d80684098759f8f39c7022891dd (patch)
treef65f9ca3c1c70f447c41d9b7190bb5dc8fbb5071 /source
parentMerge submodule changes (diff)
parentAdded HOOK_PLAYER_RIGHT_CLICK (diff)
downloadcuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.tar
cuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.tar.gz
cuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.tar.bz2
cuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.tar.lz
cuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.tar.xz
cuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.tar.zst
cuberite-cb9ccb36acfb1d80684098759f8f39c7022891dd.zip
Diffstat (limited to 'source')
-rw-r--r--source/BlockID.cpp2
-rw-r--r--source/HTTPServer/HTTPFormParser.cpp12
-rw-r--r--source/HTTPServer/HTTPFormParser.h17
-rw-r--r--source/Mobs/Cow.cpp16
-rw-r--r--source/Mobs/Cow.h1
-rw-r--r--source/Mobs/Horse.cpp12
-rw-r--r--source/WebAdmin.cpp23
-rw-r--r--source/WebAdmin.h6
8 files changed, 75 insertions, 14 deletions
diff --git a/source/BlockID.cpp b/source/BlockID.cpp
index 7c3fa0b8e..177652a46 100644
--- a/source/BlockID.cpp
+++ b/source/BlockID.cpp
@@ -1,4 +1,3 @@
-
// BlockID.cpp
// Implements the helper functions for converting Block ID string to int etc.
@@ -930,6 +929,7 @@ public:
g_BlockIsTorchPlaceable[E_BLOCK_STAINED_CLAY] = true;
g_BlockIsTorchPlaceable[E_BLOCK_WOOL] = true;
g_BlockIsTorchPlaceable[E_BLOCK_STONE] = true;
+ g_BlockIsTorchPlaceable[E_BLOCK_STONE_BRICKS] = true;
}
} BlockPropertiesInitializer;
diff --git a/source/HTTPServer/HTTPFormParser.cpp b/source/HTTPServer/HTTPFormParser.cpp
index 7db7b4e6d..596db424e 100644
--- a/source/HTTPServer/HTTPFormParser.cpp
+++ b/source/HTTPServer/HTTPFormParser.cpp
@@ -52,6 +52,18 @@ cHTTPFormParser::cHTTPFormParser(cHTTPRequest & a_Request, cCallbacks & a_Callba
+cHTTPFormParser::cHTTPFormParser(eKind a_Kind, const char * a_Data, int a_Size, cCallbacks & a_Callbacks) :
+ m_Callbacks(a_Callbacks),
+ m_Kind(a_Kind),
+ m_IsValid(true)
+{
+ Parse(a_Data, a_Size);
+}
+
+
+
+
+
void cHTTPFormParser::Parse(const char * a_Data, int a_Size)
{
if (!m_IsValid)
diff --git a/source/HTTPServer/HTTPFormParser.h b/source/HTTPServer/HTTPFormParser.h
index b92ef9d3c..a554ca5a4 100644
--- a/source/HTTPServer/HTTPFormParser.h
+++ b/source/HTTPServer/HTTPFormParser.h
@@ -26,6 +26,13 @@ class cHTTPFormParser :
public cMultipartParser::cCallbacks
{
public:
+ enum eKind
+ {
+ fpkURL, ///< The form has been transmitted as parameters to a GET request
+ fpkFormUrlEncoded, ///< The form has been POSTed or PUT, with Content-Type of "application/x-www-form-urlencoded"
+ fpkMultipart, ///< The form has been POSTed or PUT, with Content-Type of "multipart/form-data"
+ } ;
+
class cCallbacks
{
public:
@@ -40,8 +47,12 @@ public:
} ;
+ /// Creates a parser that is tied to a request and notifies of various events using a callback mechanism
cHTTPFormParser(cHTTPRequest & a_Request, cCallbacks & a_Callbacks);
+ /// Creates a parser with the specified content type that reads data from a string
+ cHTTPFormParser(eKind a_Kind, const char * a_Data, int a_Size, cCallbacks & a_Callbacks);
+
/// Adds more data into the parser, as the request body is received
void Parse(const char * a_Data, int a_Size);
@@ -54,12 +65,6 @@ public:
static bool HasFormData(const cHTTPRequest & a_Request);
protected:
- enum eKind
- {
- fpkURL, ///< The form has been transmitted as parameters to a GET request
- fpkFormUrlEncoded, ///< The form has been POSTed or PUT, with Content-Type of "application/x-www-form-urlencoded"
- fpkMultipart, ///< The form has been POSTed or PUT, with Content-Type of "multipart/form-data"
- };
/// The callbacks to call for incoming file data
cCallbacks & m_Callbacks;
diff --git a/source/Mobs/Cow.cpp b/source/Mobs/Cow.cpp
index 8e9b87d27..431a6916d 100644
--- a/source/Mobs/Cow.cpp
+++ b/source/Mobs/Cow.cpp
@@ -7,10 +7,6 @@
-// TODO: Milk Cow
-
-
-
cCow::cCow(void) :
@@ -28,6 +24,18 @@ void cCow::GetDrops(cItems & a_Drops, cEntity * a_Killer)
AddRandomDropItem(a_Drops, 1, 3, IsOnFire() ? E_ITEM_STEAK : E_ITEM_RAW_BEEF);
}
+void cCow::OnRightClicked(cPlayer & a_Player)
+{
+ if ((a_Player.GetEquippedItem().m_ItemType == E_ITEM_BUCKET))
+ {
+ if (!a_Player.IsGameModeCreative())
+ {
+ a_Player.GetInventory().RemoveOneEquippedItem();
+ a_Player.GetInventory().AddItem(E_ITEM_MILK)
+ }
+
+ }
+}
diff --git a/source/Mobs/Cow.h b/source/Mobs/Cow.h
index b90cb170e..0391d4a31 100644
--- a/source/Mobs/Cow.h
+++ b/source/Mobs/Cow.h
@@ -18,6 +18,7 @@ public:
CLASS_PROTODEF(cCow);
virtual void GetDrops(cItems & a_Drops, cEntity * a_Killer = NULL) override;
+ virtual void OnRightClicked(cPlayer & a_Player) override;
} ;
diff --git a/source/Mobs/Horse.cpp b/source/Mobs/Horse.cpp
index 46e7969cc..c2a8f6ed0 100644
--- a/source/Mobs/Horse.cpp
+++ b/source/Mobs/Horse.cpp
@@ -107,6 +107,18 @@ void cHorse::OnRightClicked(cPlayer & a_Player)
m_TameAttemptTimes++;
a_Player.AttachTo(this);
+
+ if (a_Player.GetEquippedItem().m_ItemType == E_ITEM_SADDLE)
+ {
+ if (!a_Player.IsGameModeCreative())
+ {
+ a_Player.GetInventory().RemoveOneEquippedItem();
+ }
+
+ // Set saddle state & broadcast metadata
+ m_bIsSaddled = true;
+ m_World->BroadcastEntityMetadata(*this);
+ }
}
diff --git a/source/WebAdmin.cpp b/source/WebAdmin.cpp
index 08817139a..316513f11 100644
--- a/source/WebAdmin.cpp
+++ b/source/WebAdmin.cpp
@@ -79,8 +79,14 @@ bool cWebAdmin::Init(void)
return false;
}
- AString PortsIPv4 = m_IniFile.GetValue("WebAdmin", "Port", "8080");
- AString PortsIPv6 = m_IniFile.GetValue("WebAdmin", "PortsIPv6", "");
+ if (!m_IniFile.GetValueSetB("WebAdmin", "Enabled", true))
+ {
+ // WebAdmin is disabled, bail out faking a success
+ return true;
+ }
+
+ AString PortsIPv4 = m_IniFile.GetValueSet("WebAdmin", "Port", "8080");
+ AString PortsIPv6 = m_IniFile.GetValueSet("WebAdmin", "PortsIPv6", "");
if (!m_HTTPServer.Initialize(PortsIPv4, PortsIPv6))
{
@@ -185,8 +191,19 @@ void cWebAdmin::HandleWebadminRequest(cHTTPConnection & a_Connection, cHTTPReque
HTTPfd.Name = itr->first;
TemplateRequest.Request.FormData[itr->first] = HTTPfd;
TemplateRequest.Request.PostParams[itr->first] = itr->second;
- TemplateRequest.Request.Params[itr->first] = itr->second;
} // for itr - Data->m_Form[]
+
+ // Parse the URL into individual params:
+ size_t idxQM = a_Request.GetURL().find('?');
+ if (idxQM != AString::npos)
+ {
+ cHTTPFormParser URLParams(cHTTPFormParser::fpkURL, a_Request.GetURL().c_str() + idxQM + 1, a_Request.GetURL().length() - idxQM - 1, *Data);
+ URLParams.Finish();
+ for (cHTTPFormParser::const_iterator itr = URLParams.begin(), end = URLParams.end(); itr != end; ++itr)
+ {
+ TemplateRequest.Request.Params[itr->first] = itr->second;
+ } // for itr - URLParams[]
+ }
}
// Try to get the template from the Lua template script
diff --git a/source/WebAdmin.h b/source/WebAdmin.h
index 16b5dd4dc..72c77ddfb 100644
--- a/source/WebAdmin.h
+++ b/source/WebAdmin.h
@@ -56,8 +56,14 @@ struct HTTPRequest
AString Path;
AString Username;
// tolua_end
+
+ /// Parameters given in the URL, after the questionmark
StringStringMap Params; // >> EXPORTED IN MANUALBINDINGS <<
+
+ /// Parameters posted as a part of a form - either in the URL (GET method) or in the body (POST method)
StringStringMap PostParams; // >> EXPORTED IN MANUALBINDINGS <<
+
+ /// Same as PostParams
FormDataMap FormData; // >> EXPORTED IN MANUALBINDINGS <<
} ; // tolua_export