summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHowaner <franzi.moos@googlemail.com>2014-05-01 01:25:04 +0200
committerHowaner <franzi.moos@googlemail.com>2014-05-05 17:34:24 +0200
commit6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3 (patch)
tree06e89343c2e64b757b47862f4eb2e5f4bf37dde9
parentAdd anvil window and slot area. (diff)
downloadcuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.tar
cuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.tar.gz
cuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.tar.bz2
cuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.tar.lz
cuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.tar.xz
cuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.tar.zst
cuberite-6ac332cd0662f49e30f60ae0b5a3b7f85df8cfb3.zip
-rw-r--r--src/ClientHandle.cpp32
-rw-r--r--src/ClientHandle.h3
-rw-r--r--src/UI/SlotArea.cpp10
-rw-r--r--src/UI/SlotArea.h2
-rw-r--r--src/UI/Window.cpp3
-rw-r--r--src/UI/Window.h9
6 files changed, 51 insertions, 8 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index d414c3178..c0ddd1770 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -633,6 +633,10 @@ void cClientHandle::HandlePluginMessage(const AString & a_Channel, const AString
// Client <-> Server branding exchange
SendPluginMessage("MC|Brand", "MCServer");
}
+ else if (a_Channel == "MC|ItemName")
+ {
+ HandleAnvilItemName(a_Message.c_str(), a_Message.size());
+ }
else if (a_Channel == "REGISTER")
{
if (HasPluginChannel(a_Channel))
@@ -774,6 +778,34 @@ void cClientHandle::HandleCommandBlockMessage(const char * a_Data, size_t a_Leng
+void cClientHandle::HandleAnvilItemName(const char * a_Data, unsigned int a_Length)
+{
+ if (a_Length < 1)
+ {
+ return;
+ }
+
+ if ((m_Player->GetWindow() == NULL) || (m_Player->GetWindow()->GetWindowType() != cWindow::wtAnvil))
+ {
+ return;
+ }
+
+ cByteBuffer Buffer(a_Length);
+ Buffer.Write(a_Data, a_Length);
+
+ AString Name;
+ Buffer.ReadAll(Name);
+
+ if (Name.length() <= 30)
+ {
+ ((cAnvilWindow&)*m_Player->GetWindow()).SetRepairedItemName(Name);
+ }
+}
+
+
+
+
+
void cClientHandle::HandleLeftClick(int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, char a_Status)
{
LOGD("HandleLeftClick: {%i, %i, %i}; Face: %i; Stat: %i",
diff --git a/src/ClientHandle.h b/src/ClientHandle.h
index 9fd17ac00..4dc6ab074 100644
--- a/src/ClientHandle.h
+++ b/src/ClientHandle.h
@@ -385,6 +385,9 @@ private:
/** Handles the "MC|AdvCdm" plugin message */
void HandleCommandBlockMessage(const char * a_Data, size_t a_Length);
+
+ /** Handles the "MC|ItemName" plugin message */
+ void HandleAnvilItemName(const char * a_Data, size_t a_Length);
// cSocketThreads::cCallback overrides:
virtual void DataReceived (const char * a_Data, size_t a_Size) override; // Data is received from the client
diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp
index eac8257ec..2941982a7 100644
--- a/src/UI/SlotArea.cpp
+++ b/src/UI/SlotArea.cpp
@@ -600,8 +600,7 @@ cCraftingRecipe & cSlotAreaCrafting::GetRecipeForPlayer(cPlayer & a_Player)
cSlotAreaAnvil::cSlotAreaAnvil(cAnvilWindow & a_ParentWindow) :
cSlotAreaTemporary(3, a_ParentWindow),
- m_MaximumCost(0),
- m_RepairedItemName("")
+ m_MaximumCost(0)
{
}
@@ -705,7 +704,8 @@ void cSlotAreaAnvil::UpdateResult(cPlayer & a_Player)
}
int NameChangeExp = 0;
- if (m_RepairedItemName.empty())
+ const AString & RepairedItemName = ((cAnvilWindow*)&m_ParentWindow)->GetRepairedItemName();
+ if (RepairedItemName.empty())
{
// Remove custom name
if (!Input.m_CustomName.empty())
@@ -715,7 +715,7 @@ void cSlotAreaAnvil::UpdateResult(cPlayer & a_Player)
Input.m_CustomName = "";
}
}
- else if (m_RepairedItemName != Input.m_CustomName)
+ else if (RepairedItemName != Input.m_CustomName)
{
// Change custom name
NameChangeExp = (Input.IsDamageable()) ? 4 : (Input.m_ItemCount * 5);
@@ -726,7 +726,7 @@ void cSlotAreaAnvil::UpdateResult(cPlayer & a_Player)
RepairCost += NameChangeExp / 2;
}
- Input.m_CustomName = m_RepairedItemName;
+ Input.m_CustomName = RepairedItemName;
}
// TODO: Add enchantment exp cost.
diff --git a/src/UI/SlotArea.h b/src/UI/SlotArea.h
index a316480c6..01dcb88ab 100644
--- a/src/UI/SlotArea.h
+++ b/src/UI/SlotArea.h
@@ -280,8 +280,6 @@ protected:
/** The maximum cost of repairing/renaming in the anvil. */
int m_MaximumCost;
-
- AString m_RepairedItemName;
} ;
diff --git a/src/UI/Window.cpp b/src/UI/Window.cpp
index eb105f8ab..d6adbef8f 100644
--- a/src/UI/Window.cpp
+++ b/src/UI/Window.cpp
@@ -808,7 +808,8 @@ cCraftingWindow::cCraftingWindow(int a_BlockX, int a_BlockY, int a_BlockZ) :
// cAnvilWindow:
cAnvilWindow::cAnvilWindow() :
- cWindow(wtAnvil, "Repair")
+ cWindow(wtAnvil, "Repair"),
+ m_RepairedItemName("")
{
m_SlotAreas.push_back(new cSlotAreaAnvil(*this));
m_SlotAreas.push_back(new cSlotAreaInventory(*this));
diff --git a/src/UI/Window.h b/src/UI/Window.h
index c08b36f9b..8f6f80a41 100644
--- a/src/UI/Window.h
+++ b/src/UI/Window.h
@@ -237,6 +237,15 @@ class cAnvilWindow :
typedef cWindow super;
public:
cAnvilWindow();
+
+ /** Gets the repaired item name. */
+ AString GetRepairedItemName(void) const { return m_RepairedItemName; }
+
+ /** Set the repaired item name. */
+ void SetRepairedItemName(const AString & a_Name) { m_RepairedItemName = a_Name; }
+
+protected:
+ AString m_RepairedItemName;
} ;