aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/FireworksItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/FireworksItem.cpp')
-rw-r--r--Minecraft.World/FireworksItem.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/Minecraft.World/FireworksItem.cpp b/Minecraft.World/FireworksItem.cpp
new file mode 100644
index 00000000..045ea130
--- /dev/null
+++ b/Minecraft.World/FireworksItem.cpp
@@ -0,0 +1,81 @@
+#include "stdafx.h"
+#include "net.minecraft.world.entity.player.h"
+#include "net.minecraft.world.entity.projectile.h"
+#include "net.minecraft.world.item.h"
+#include "net.minecraft.world.level.h"
+#include "FireworksItem.h"
+
+const wstring FireworksItem::TAG_FIREWORKS = L"Fireworks";
+const wstring FireworksItem::TAG_EXPLOSION = L"Explosion";
+const wstring FireworksItem::TAG_EXPLOSIONS = L"Explosions";
+const wstring FireworksItem::TAG_FLIGHT = L"Flight";
+const wstring FireworksItem::TAG_E_TYPE = L"Type";
+const wstring FireworksItem::TAG_E_TRAIL = L"Trail";
+const wstring FireworksItem::TAG_E_FLICKER = L"Flicker";
+const wstring FireworksItem::TAG_E_COLORS = L"Colors";
+const wstring FireworksItem::TAG_E_FADECOLORS = L"FadeColors";
+
+FireworksItem::FireworksItem(int id) : Item(id)
+{
+}
+
+bool FireworksItem::useOn(shared_ptr<ItemInstance> instance, shared_ptr<Player> player, Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly)
+{
+ // 4J-JEV: Fix for xb1 #173493 - CU7: Content: UI: Missing tooltip for Firework Rocket.
+ if (bTestUseOnOnly) return true;
+
+ if (!level->isClientSide)
+ {
+ shared_ptr<FireworksRocketEntity> f = shared_ptr<FireworksRocketEntity>( new FireworksRocketEntity(level, x + clickX, y + clickY, z + clickZ, instance) );
+ level->addEntity(f);
+
+ if (!player->abilities.instabuild)
+ {
+ instance->count--;
+ }
+ return true;
+ }
+
+ return false;
+}
+
+void FireworksItem::appendHoverText(shared_ptr<ItemInstance> itemInstance, shared_ptr<Player> player, vector<HtmlString> *lines, bool advanced)
+{
+ if (!itemInstance->hasTag())
+ {
+ return;
+ }
+ CompoundTag *fireTag = itemInstance->getTag()->getCompound(TAG_FIREWORKS);
+ if (fireTag == NULL)
+ {
+ return;
+ }
+ if (fireTag->contains(TAG_FLIGHT))
+ {
+ lines->push_back(wstring(app.GetString(IDS_ITEM_FIREWORKS_FLIGHT)) + L" " + _toString<int>((fireTag->getByte(TAG_FLIGHT))));
+ }
+
+ ListTag<CompoundTag> *explosions = (ListTag<CompoundTag> *) fireTag->getList(TAG_EXPLOSIONS);
+ if (explosions != NULL && explosions->size() > 0)
+ {
+
+ for (int i = 0; i < explosions->size(); i++)
+ {
+ CompoundTag *expTag = explosions->get(i);
+
+ vector<HtmlString> eLines;
+ FireworksChargeItem::appendHoverText(expTag, &eLines);
+
+ if (eLines.size() > 0)
+ {
+ // Indent lines after first line
+ for (int i = 1; i < eLines.size(); i++)
+ {
+ eLines[i].indent = true;
+ }
+
+ lines->insert(lines->end(), eLines.begin(), eLines.end());
+ }
+ }
+ }
+} \ No newline at end of file