aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp
diff options
context:
space:
mode:
authorLoki Rautio <lokirautio@gmail.com>2026-03-04 03:56:03 -0600
committerLoki Rautio <lokirautio@gmail.com>2026-03-04 03:56:03 -0600
commit42aec6dac53dffa6afe072560a7e1d4986112538 (patch)
tree0836426857391df1b6a83f6368a183f83ec9b104 /Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp
parentc9d58eeac7c72f0b3038e084667b4d89a6249fce (diff)
parentef9b6fd500dfabd9463267b0dd9e29577eea8a2b (diff)
Merge branch 'main' into pr/win64-world-saves
# Conflicts: # Minecraft.Client/MinecraftServer.cpp # README.md
Diffstat (limited to 'Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp')
-rw-r--r--Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp542
1 files changed, 443 insertions, 99 deletions
diff --git a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp
index 7ce33234..973020db 100644
--- a/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp
+++ b/Minecraft.Client/Common/UI/IUIScene_CreativeMenu.cpp
@@ -8,6 +8,9 @@
#include "..\..\..\Minecraft.World\net.minecraft.world.level.tile.entity.h"
#include "..\..\..\Minecraft.World\net.minecraft.world.item.h"
#include "..\..\..\Minecraft.World\net.minecraft.world.item.enchantment.h"
+#include "..\..\..\Minecraft.World\net.minecraft.world.entity.h"
+#include "..\..\..\Minecraft.World\net.minecraft.world.entity.animal.h"
+#include "..\..\..\Minecraft.World\JavaMath.h"
// 4J JEV - Images for each tab.
IUIScene_CreativeMenu::TabSpec **IUIScene_CreativeMenu::specs = NULL;
@@ -26,14 +29,15 @@ void IUIScene_CreativeMenu::staticCtor()
// Building Blocks
DEF(eCreativeInventory_BuildingBlocks)
- ITEM(Tile::rock_Id)
+ ITEM(Tile::stone_Id)
ITEM(Tile::grass_Id)
ITEM(Tile::dirt_Id)
- ITEM(Tile::stoneBrick_Id)
+ ITEM(Tile::cobblestone_Id)
ITEM(Tile::sand_Id)
ITEM(Tile::sandStone_Id)
ITEM_AUX(Tile::sandStone_Id, SandStoneTile::TYPE_SMOOTHSIDE)
ITEM_AUX(Tile::sandStone_Id, SandStoneTile::TYPE_HEIROGLYPHS)
+ ITEM(Tile::coalBlock_Id)
ITEM(Tile::goldBlock_Id)
ITEM(Tile::ironBlock_Id)
ITEM(Tile::lapisBlock_Id)
@@ -59,24 +63,29 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM_AUX(Tile::treeTrunk_Id, TreeTile::JUNGLE_TRUNK)
ITEM(Tile::gravel_Id)
ITEM(Tile::redBrick_Id)
- ITEM(Tile::mossStone_Id)
+ ITEM(Tile::mossyCobblestone_Id)
ITEM(Tile::obsidian_Id)
ITEM(Tile::clay)
ITEM(Tile::ice_Id)
ITEM(Tile::snow_Id)
- ITEM(Tile::hellRock_Id)
- ITEM(Tile::hellSand_Id)
- ITEM(Tile::lightGem_Id)
- ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_DEFAULT)
- ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_MOSSY)
- ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_CRACKED)
- ITEM_AUX(Tile::stoneBrickSmooth_Id,SmoothStoneBrickTile::TYPE_DETAIL)
+ ITEM(Tile::netherRack_Id)
+ ITEM(Tile::soulsand_Id)
+ ITEM(Tile::glowstone_Id)
+ ITEM(Tile::fence_Id)
+ ITEM(Tile::netherFence_Id)
+ ITEM(Tile::ironFence_Id)
+ ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_NORMAL)
+ ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_MOSSY)
+ ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_DEFAULT)
+ ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_MOSSY)
+ ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_CRACKED)
+ ITEM_AUX(Tile::stoneBrick_Id,SmoothStoneBrickTile::TYPE_DETAIL)
ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_ROCK)
ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_COBBLE)
ITEM_AUX(Tile::monsterStoneEgg_Id,StoneMonsterTile::HOST_STONEBRICK)
ITEM(Tile::mycel_Id)
ITEM(Tile::netherBrick_Id)
- ITEM(Tile::whiteStone_Id)
+ ITEM(Tile::endStone_Id)
ITEM_AUX(Tile::quartzBlock_Id,QuartzBlockTile::TYPE_CHISELED)
ITEM_AUX(Tile::quartzBlock_Id,QuartzBlockTile::TYPE_LINES_Y)
ITEM(Tile::trapdoor_Id)
@@ -102,11 +111,28 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Tile::stairs_junglewood_Id)
ITEM(Tile::stairs_stone_Id)
ITEM(Tile::stairs_bricks_Id)
- ITEM(Tile::stairs_stoneBrickSmooth_Id)
+ ITEM(Tile::stairs_stoneBrick_Id)
ITEM(Tile::stairs_netherBricks_Id)
ITEM(Tile::stairs_sandstone_Id)
ITEM(Tile::stairs_quartz_Id)
+ ITEM(Tile::clayHardened_Id)
+ ITEM_AUX(Tile::clayHardened_colored_Id,14) // Red
+ ITEM_AUX(Tile::clayHardened_colored_Id,1) // Orange
+ ITEM_AUX(Tile::clayHardened_colored_Id,4) // Yellow
+ ITEM_AUX(Tile::clayHardened_colored_Id,5) // Lime
+ ITEM_AUX(Tile::clayHardened_colored_Id,3) // Light Blue
+ ITEM_AUX(Tile::clayHardened_colored_Id,9) // Cyan
+ ITEM_AUX(Tile::clayHardened_colored_Id,11) // Blue
+ ITEM_AUX(Tile::clayHardened_colored_Id,10) // Purple
+ ITEM_AUX(Tile::clayHardened_colored_Id,2) // Magenta
+ ITEM_AUX(Tile::clayHardened_colored_Id,6) // Pink
+ ITEM_AUX(Tile::clayHardened_colored_Id,0) // White
+ ITEM_AUX(Tile::clayHardened_colored_Id,8) // Light Gray
+ ITEM_AUX(Tile::clayHardened_colored_Id,7) // Gray
+ ITEM_AUX(Tile::clayHardened_colored_Id,15) // Black
+ ITEM_AUX(Tile::clayHardened_colored_Id,13) // Green
+ ITEM_AUX(Tile::clayHardened_colored_Id,12) // Brown
// Decoration
DEF(eCreativeInventory_Decoration)
@@ -136,8 +162,8 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Tile::deadBush_Id)
ITEM(Tile::flower_Id)
ITEM(Tile::rose_Id)
- ITEM(Tile::mushroom1_Id)
- ITEM(Tile::mushroom2_Id)
+ ITEM(Tile::mushroom_brown_Id)
+ ITEM(Tile::mushroom_red_Id)
ITEM(Tile::cactus_Id)
ITEM(Tile::topSnow_Id)
// 4J-PB - Already got sugar cane in Materials ITEM_11(Tile::reeds_Id)
@@ -149,22 +175,23 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Item::sign_Id)
ITEM(Tile::bookshelf_Id)
ITEM(Item::flowerPot_Id)
- ITEM_AUX(Tile::cloth_Id,14) // Red
- ITEM_AUX(Tile::cloth_Id,1) // Orange
- ITEM_AUX(Tile::cloth_Id,4) // Yellow
- ITEM_AUX(Tile::cloth_Id,5) // Lime
- ITEM_AUX(Tile::cloth_Id,3) // Light Blue
- ITEM_AUX(Tile::cloth_Id,9) // Cyan
- ITEM_AUX(Tile::cloth_Id,11) // Blue
- ITEM_AUX(Tile::cloth_Id,10) // Purple
- ITEM_AUX(Tile::cloth_Id,2) // Magenta
- ITEM_AUX(Tile::cloth_Id,6) // Pink
- ITEM_AUX(Tile::cloth_Id,0) // White
- ITEM_AUX(Tile::cloth_Id,8) // Light Gray
- ITEM_AUX(Tile::cloth_Id,7) // Gray
- ITEM_AUX(Tile::cloth_Id,15) // Black
- ITEM_AUX(Tile::cloth_Id,13) // Green
- ITEM_AUX(Tile::cloth_Id,12) // Brown
+ ITEM(Tile::hayBlock_Id)
+ ITEM_AUX(Tile::wool_Id,14) // Red
+ ITEM_AUX(Tile::wool_Id,1) // Orange
+ ITEM_AUX(Tile::wool_Id,4) // Yellow
+ ITEM_AUX(Tile::wool_Id,5) // Lime
+ ITEM_AUX(Tile::wool_Id,3) // Light Blue
+ ITEM_AUX(Tile::wool_Id,9) // Cyan
+ ITEM_AUX(Tile::wool_Id,11) // Blue
+ ITEM_AUX(Tile::wool_Id,10) // Purple
+ ITEM_AUX(Tile::wool_Id,2) // Magenta
+ ITEM_AUX(Tile::wool_Id,6) // Pink
+ ITEM_AUX(Tile::wool_Id,0) // White
+ ITEM_AUX(Tile::wool_Id,8) // Light Gray
+ ITEM_AUX(Tile::wool_Id,7) // Gray
+ ITEM_AUX(Tile::wool_Id,15) // Black
+ ITEM_AUX(Tile::wool_Id,13) // Green
+ ITEM_AUX(Tile::wool_Id,12) // Brown
ITEM_AUX(Tile::woolCarpet_Id,14) // Red
ITEM_AUX(Tile::woolCarpet_Id,1) // Orange
@@ -183,11 +210,102 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM_AUX(Tile::woolCarpet_Id,13) // Green
ITEM_AUX(Tile::woolCarpet_Id,12) // Brown
+#if 0
+ ITEM_AUX(Tile::stained_glass_Id,14) // Red
+ ITEM_AUX(Tile::stained_glass_Id,1) // Orange
+ ITEM_AUX(Tile::stained_glass_Id,4) // Yellow
+ ITEM_AUX(Tile::stained_glass_Id,5) // Lime
+ ITEM_AUX(Tile::stained_glass_Id,3) // Light Blue
+ ITEM_AUX(Tile::stained_glass_Id,9) // Cyan
+ ITEM_AUX(Tile::stained_glass_Id,11) // Blue
+ ITEM_AUX(Tile::stained_glass_Id,10) // Purple
+ ITEM_AUX(Tile::stained_glass_Id,2) // Magenta
+ ITEM_AUX(Tile::stained_glass_Id,6) // Pink
+ ITEM_AUX(Tile::stained_glass_Id,0) // White
+ ITEM_AUX(Tile::stained_glass_Id,8) // Light Gray
+ ITEM_AUX(Tile::stained_glass_Id,7) // Gray
+ ITEM_AUX(Tile::stained_glass_Id,15) // Black
+ ITEM_AUX(Tile::stained_glass_Id,13) // Green
+ ITEM_AUX(Tile::stained_glass_Id,12) // Brown
+
+ ITEM_AUX(Tile::stained_glass_pane_Id,14) // Red
+ ITEM_AUX(Tile::stained_glass_pane_Id,1) // Orange
+ ITEM_AUX(Tile::stained_glass_pane_Id,4) // Yellow
+ ITEM_AUX(Tile::stained_glass_pane_Id,5) // Lime
+ ITEM_AUX(Tile::stained_glass_pane_Id,3) // Light Blue
+ ITEM_AUX(Tile::stained_glass_pane_Id,9) // Cyan
+ ITEM_AUX(Tile::stained_glass_pane_Id,11) // Blue
+ ITEM_AUX(Tile::stained_glass_pane_Id,10) // Purple
+ ITEM_AUX(Tile::stained_glass_pane_Id,2) // Magenta
+ ITEM_AUX(Tile::stained_glass_pane_Id,6) // Pink
+ ITEM_AUX(Tile::stained_glass_pane_Id,0) // White
+ ITEM_AUX(Tile::stained_glass_pane_Id,8) // Light Gray
+ ITEM_AUX(Tile::stained_glass_pane_Id,7) // Gray
+ ITEM_AUX(Tile::stained_glass_pane_Id,15) // Black
+ ITEM_AUX(Tile::stained_glass_pane_Id,13) // Green
+ ITEM_AUX(Tile::stained_glass_pane_Id,12) // Brown
+#endif
+
+#ifndef _CONTENT_PACKAGE
+ DEF(eCreativeInventory_ArtToolsDecorations)
+ if(app.DebugSettingsOn())
+ {
+ for(unsigned int i = 0; i < Painting::LAST_VALUE; ++i)
+ {
+ ITEM_AUX(Item::painting_Id, i + 1)
+ }
+
+ BuildFirework(list, FireworksItem::TYPE_BIG, DyePowderItem::PURPLE, 1, false, false);
+
+ BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::RED, 1, false, false);
+ BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::RED, 2, false, false);
+ BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::RED, 3, false, false);
+
+ BuildFirework(list, FireworksItem::TYPE_BURST, DyePowderItem::GREEN, 1, false, true);
+ BuildFirework(list, FireworksItem::TYPE_CREEPER, DyePowderItem::BLUE, 1, true, false);
+ BuildFirework(list, FireworksItem::TYPE_STAR, DyePowderItem::YELLOW, 1, false, false);
+ BuildFirework(list, FireworksItem::TYPE_BIG, DyePowderItem::WHITE, 1, true, true);
+
+ ITEM_AUX(Tile::stained_glass_Id,14) // Red
+ ITEM_AUX(Tile::stained_glass_Id,1) // Orange
+ ITEM_AUX(Tile::stained_glass_Id,4) // Yellow
+ ITEM_AUX(Tile::stained_glass_Id,5) // Lime
+ ITEM_AUX(Tile::stained_glass_Id,3) // Light Blue
+ ITEM_AUX(Tile::stained_glass_Id,9) // Cyan
+ ITEM_AUX(Tile::stained_glass_Id,11) // Blue
+ ITEM_AUX(Tile::stained_glass_Id,10) // Purple
+ ITEM_AUX(Tile::stained_glass_Id,2) // Magenta
+ ITEM_AUX(Tile::stained_glass_Id,6) // Pink
+ ITEM_AUX(Tile::stained_glass_Id,0) // White
+ ITEM_AUX(Tile::stained_glass_Id,8) // Light Gray
+ ITEM_AUX(Tile::stained_glass_Id,7) // Gray
+ ITEM_AUX(Tile::stained_glass_Id,15) // Black
+ ITEM_AUX(Tile::stained_glass_Id,13) // Green
+ ITEM_AUX(Tile::stained_glass_Id,12) // Brown
+
+ ITEM_AUX(Tile::stained_glass_pane_Id,14) // Red
+ ITEM_AUX(Tile::stained_glass_pane_Id,1) // Orange
+ ITEM_AUX(Tile::stained_glass_pane_Id,4) // Yellow
+ ITEM_AUX(Tile::stained_glass_pane_Id,5) // Lime
+ ITEM_AUX(Tile::stained_glass_pane_Id,3) // Light Blue
+ ITEM_AUX(Tile::stained_glass_pane_Id,9) // Cyan
+ ITEM_AUX(Tile::stained_glass_pane_Id,11) // Blue
+ ITEM_AUX(Tile::stained_glass_pane_Id,10) // Purple
+ ITEM_AUX(Tile::stained_glass_pane_Id,2) // Magenta
+ ITEM_AUX(Tile::stained_glass_pane_Id,6) // Pink
+ ITEM_AUX(Tile::stained_glass_pane_Id,0) // White
+ ITEM_AUX(Tile::stained_glass_pane_Id,8) // Light Gray
+ ITEM_AUX(Tile::stained_glass_pane_Id,7) // Gray
+ ITEM_AUX(Tile::stained_glass_pane_Id,15) // Black
+ ITEM_AUX(Tile::stained_glass_pane_Id,13) // Green
+ ITEM_AUX(Tile::stained_glass_pane_Id,12) // Brown
+ }
+#endif
// Redstone
DEF(eCreativeInventory_Redstone)
ITEM(Tile::dispenser_Id)
- ITEM(Tile::musicBlock_Id)
+ ITEM(Tile::noteblock_Id)
ITEM(Tile::pistonBase_Id)
ITEM(Tile::pistonStickyBase_Id)
ITEM(Tile::tnt_Id)
@@ -197,20 +315,31 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Tile::pressurePlate_stone_Id)
ITEM(Tile::pressurePlate_wood_Id)
ITEM(Item::redStone_Id)
- ITEM(Tile::notGate_on_Id)
- ITEM(Item::diode_Id)
+ ITEM(Tile::redstoneBlock_Id)
+ ITEM(Tile::redstoneTorch_on_Id)
+ ITEM(Item::repeater_Id)
ITEM(Tile::redstoneLight_Id)
ITEM(Tile::tripWireSource_Id)
+ ITEM(Tile::daylightDetector_Id)
+ ITEM(Tile::dropper_Id)
+ ITEM(Tile::hopper_Id)
+ ITEM(Item::comparator_Id)
+ ITEM(Tile::chest_trap_Id)
+ ITEM(Tile::weightedPlate_heavy_Id)
+ ITEM(Tile::weightedPlate_light_Id)
// Transport
DEF(eCreativeInventory_Transport)
ITEM(Tile::rail_Id)
ITEM(Tile::goldenRail_Id)
ITEM(Tile::detectorRail_Id)
+ ITEM(Tile::activatorRail_Id)
ITEM(Tile::ladder_Id)
ITEM(Item::minecart_Id)
ITEM(Item::minecart_chest_Id)
ITEM(Item::minecart_furnace_Id)
+ ITEM(Item::minecart_hopper_Id)
+ ITEM(Item::minecart_tnt_Id)
ITEM(Item::saddle_Id)
ITEM(Item::boat_Id)
@@ -222,25 +351,49 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Tile::furnace_Id)
ITEM(Item::brewingStand_Id)
ITEM(Tile::enchantTable_Id)
+ ITEM(Tile::beacon_Id)
ITEM(Tile::endPortalFrameTile_Id)
- ITEM(Tile::recordPlayer_Id)
+ ITEM(Tile::jukebox_Id)
ITEM(Tile::anvil_Id);
- ITEM(Tile::fence_Id)
- ITEM(Tile::netherFence_Id)
- ITEM(Tile::ironFence_Id)
- ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_NORMAL)
- ITEM_AUX(Tile::cobbleWall_Id, WallTile::TYPE_MOSSY)
ITEM(Item::bed_Id)
ITEM(Item::bucket_empty_Id)
ITEM(Item::bucket_lava_Id)
ITEM(Item::bucket_water_Id)
- ITEM(Item::milk_Id)
+ ITEM(Item::bucket_milk_Id)
ITEM(Item::cauldron_Id)
ITEM(Item::snowBall_Id)
ITEM(Item::paper_Id)
ITEM(Item::book_Id)
ITEM(Item::enderPearl_Id)
ITEM(Item::eyeOfEnder_Id)
+ ITEM(Item::nameTag_Id)
+ ITEM(Item::netherStar_Id)
+ ITEM_AUX(Item::spawnEgg_Id, 50); // Creeper
+ ITEM_AUX(Item::spawnEgg_Id, 51); // Skeleton
+ ITEM_AUX(Item::spawnEgg_Id, 52); // Spider
+ ITEM_AUX(Item::spawnEgg_Id, 54); // Zombie
+ ITEM_AUX(Item::spawnEgg_Id, 55); // Slime
+ ITEM_AUX(Item::spawnEgg_Id, 56); // Ghast
+ ITEM_AUX(Item::spawnEgg_Id, 57); // Zombie Pigman
+ ITEM_AUX(Item::spawnEgg_Id, 58); // Enderman
+ ITEM_AUX(Item::spawnEgg_Id, 59); // Cave Spider
+ ITEM_AUX(Item::spawnEgg_Id, 60); // Silverfish
+ ITEM_AUX(Item::spawnEgg_Id, 61); // Blaze
+ ITEM_AUX(Item::spawnEgg_Id, 62); // Magma Cube
+ ITEM_AUX(Item::spawnEgg_Id, 65); // Bat
+ ITEM_AUX(Item::spawnEgg_Id, 66); // Witch
+ ITEM_AUX(Item::spawnEgg_Id, 90); // Pig
+ ITEM_AUX(Item::spawnEgg_Id, 91); // Sheep
+ ITEM_AUX(Item::spawnEgg_Id, 92); // Cow
+ ITEM_AUX(Item::spawnEgg_Id, 93); // Chicken
+ ITEM_AUX(Item::spawnEgg_Id, 94); // Squid
+ ITEM_AUX(Item::spawnEgg_Id, 95); // Wolf
+ ITEM_AUX(Item::spawnEgg_Id, 96); // Mooshroom
+ ITEM_AUX(Item::spawnEgg_Id, 98); // Ozelot
+ ITEM_AUX(Item::spawnEgg_Id, 100); // Horse
+ ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_DONKEY + 1) << 12) ); // Donkey
+ ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_MULE + 1) << 12)); // Mule
+ ITEM_AUX(Item::spawnEgg_Id, 120); // Villager
ITEM(Item::record_01_Id)
ITEM(Item::record_02_Id)
ITEM(Item::record_03_Id)
@@ -253,27 +406,26 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Item::record_10_Id)
ITEM(Item::record_11_Id)
ITEM(Item::record_12_Id)
- ITEM_AUX(Item::monsterPlacer_Id, 50); // Creeper
- ITEM_AUX(Item::monsterPlacer_Id, 51); // Skeleton
- ITEM_AUX(Item::monsterPlacer_Id, 52); // Spider
- ITEM_AUX(Item::monsterPlacer_Id, 54); // Zombie
- ITEM_AUX(Item::monsterPlacer_Id, 55); // Slime
- ITEM_AUX(Item::monsterPlacer_Id, 56); // Ghast
- ITEM_AUX(Item::monsterPlacer_Id, 57); // Zombie Pigman
- ITEM_AUX(Item::monsterPlacer_Id, 58); // Enderman
- ITEM_AUX(Item::monsterPlacer_Id, 59); // Cave Spider
- ITEM_AUX(Item::monsterPlacer_Id, 60); // Silverfish
- ITEM_AUX(Item::monsterPlacer_Id, 61); // Blaze
- ITEM_AUX(Item::monsterPlacer_Id, 62); // Magma Cube
- ITEM_AUX(Item::monsterPlacer_Id, 90); // Pig
- ITEM_AUX(Item::monsterPlacer_Id, 91); // Sheep
- ITEM_AUX(Item::monsterPlacer_Id, 92); // Cow
- ITEM_AUX(Item::monsterPlacer_Id, 93); // Chicken
- ITEM_AUX(Item::monsterPlacer_Id, 94); // Squid
- ITEM_AUX(Item::monsterPlacer_Id, 95); // Wolf
- ITEM_AUX(Item::monsterPlacer_Id, 96); // Mooshroom
- ITEM_AUX(Item::monsterPlacer_Id, 98); // Ozelot
- ITEM_AUX(Item::monsterPlacer_Id, 120); // Villager
+
+ BuildFirework(list, FireworksItem::TYPE_SMALL, DyePowderItem::LIGHT_BLUE, 1, true, false);
+ BuildFirework(list, FireworksItem::TYPE_CREEPER, DyePowderItem::GREEN, 2, false, false);
+ BuildFirework(list, FireworksItem::TYPE_MAX, DyePowderItem::RED, 2, false, false, DyePowderItem::ORANGE);
+ BuildFirework(list, FireworksItem::TYPE_BURST, DyePowderItem::MAGENTA, 3, true, false, DyePowderItem::BLUE);
+ BuildFirework(list, FireworksItem::TYPE_STAR, DyePowderItem::YELLOW, 2, false, true, DyePowderItem::ORANGE);
+
+#ifndef _CONTENT_PACKAGE
+ DEF(eCreativeInventory_ArtToolsMisc)
+ if(app.DebugSettingsOn())
+ {
+ ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_SKELETON + 1) << 12)); // Skeleton
+ ITEM_AUX(Item::spawnEgg_Id, 100 | ((EntityHorse::TYPE_UNDEAD + 1) << 12)); // Zombie
+ ITEM_AUX(Item::spawnEgg_Id, 98 | ((Ocelot::TYPE_BLACK + 1) << 12));
+ ITEM_AUX(Item::spawnEgg_Id, 98 | ((Ocelot::TYPE_RED + 1) << 12));
+ ITEM_AUX(Item::spawnEgg_Id, 98 | ((Ocelot::TYPE_SIAMESE + 1) << 12));
+ ITEM_AUX(Item::spawnEgg_Id, 52 | (2 << 12)); // Spider-Jockey
+ ITEM_AUX(Item::spawnEgg_Id, 63); // Enderdragon
+ }
+#endif
// Food
DEF(eCreativeInventory_Food)
@@ -305,17 +457,17 @@ void IUIScene_CreativeMenu::staticCtor()
// Tools, Armour and Weapons (Complete)
DEF(eCreativeInventory_ToolsArmourWeapons)
ITEM(Item::compass_Id)
- ITEM(Item::helmet_cloth_Id)
- ITEM(Item::chestplate_cloth_Id)
- ITEM(Item::leggings_cloth_Id)
- ITEM(Item::boots_cloth_Id)
+ ITEM(Item::helmet_leather_Id)
+ ITEM(Item::chestplate_leather_Id)
+ ITEM(Item::leggings_leather_Id)
+ ITEM(Item::boots_leather_Id)
ITEM(Item::sword_wood_Id)
ITEM(Item::shovel_wood_Id)
ITEM(Item::pickAxe_wood_Id)
ITEM(Item::hatchet_wood_Id)
ITEM(Item::hoe_wood_Id)
- ITEM(Item::map_Id)
+ ITEM(Item::emptyMap_Id)
ITEM(Item::helmet_chain_Id)
ITEM(Item::chestplate_chain_Id)
ITEM(Item::leggings_chain_Id)
@@ -364,6 +516,10 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Item::shears_Id)
ITEM(Item::fishingRod_Id)
ITEM(Item::carrotOnAStick_Id)
+ ITEM(Item::lead_Id)
+ ITEM(Item::horseArmorDiamond_Id)
+ ITEM(Item::horseArmorGold_Id)
+ ITEM(Item::horseArmorMetal_Id)
for(unsigned int i = 0; i < Enchantment::enchantments.length; ++i)
{
@@ -372,6 +528,16 @@ void IUIScene_CreativeMenu::staticCtor()
list->push_back(Item::enchantedBook->createForEnchantment(new EnchantmentInstance(enchantment, enchantment->getMaxLevel())));
}
+#ifndef _CONTENT_PACKAGE
+ if(app.DebugSettingsOn())
+ {
+ shared_ptr<ItemInstance> debugSword = shared_ptr<ItemInstance>(new ItemInstance(Item::sword_diamond_Id, 1, 0));
+ debugSword->enchant( Enchantment::damageBonus, 50 );
+ debugSword->setHoverName(L"Sword of Debug");
+ list->push_back(debugSword);
+ }
+#endif
+
// Materials
DEF(eCreativeInventory_Materials)
ITEM(Item::coal_Id)
@@ -390,7 +556,7 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Item::feather_Id)
ITEM(Item::flint_Id)
ITEM(Item::leather_Id)
- ITEM(Item::sulphur_Id)
+ ITEM(Item::gunpowder_Id)
ITEM(Item::clay_Id)
ITEM(Item::yellowDust_Id)
ITEM(Item::seeds_wheat_Id)
@@ -403,7 +569,7 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Item::slimeBall_Id)
ITEM(Item::blazeRod_Id)
ITEM(Item::goldNugget_Id)
- ITEM(Item::netherStalkSeeds_Id)
+ ITEM(Item::netherwart_seeds_Id)
ITEM_AUX(Item::dye_powder_Id,1) // Red
ITEM_AUX(Item::dye_powder_Id,14) // Orange
ITEM_AUX(Item::dye_powder_Id,11) // Yellow
@@ -538,22 +704,28 @@ void IUIScene_CreativeMenu::staticCtor()
// Top Row
ECreative_Inventory_Groups blocksGroup[] = {eCreativeInventory_BuildingBlocks};
- specs[eCreativeInventoryTab_BuildingBlocks] = new TabSpec(L"Structures", IDS_GROUPNAME_BUILDING_BLOCKS, 1, blocksGroup, 0, NULL);
-
+ specs[eCreativeInventoryTab_BuildingBlocks] = new TabSpec(L"Structures", IDS_GROUPNAME_BUILDING_BLOCKS, 1, blocksGroup);
+
+#ifndef _CONTENT_PACKAGE
+ ECreative_Inventory_Groups decorationsGroup[] = {eCreativeInventory_Decoration};
+ ECreative_Inventory_Groups debugDecorationsGroup[] = {eCreativeInventory_ArtToolsDecorations};
+ specs[eCreativeInventoryTab_Decorations] = new TabSpec(L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup, 0, NULL, 1, debugDecorationsGroup);
+#else
ECreative_Inventory_Groups decorationsGroup[] = {eCreativeInventory_Decoration};
- specs[eCreativeInventoryTab_Decorations] = new TabSpec(L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup, 0, NULL);
+ specs[eCreativeInventoryTab_Decorations] = new TabSpec(L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup);
+#endif
ECreative_Inventory_Groups redAndTranGroup[] = {eCreativeInventory_Transport, eCreativeInventory_Redstone};
- specs[eCreativeInventoryTab_RedstoneAndTransport] = new TabSpec(L"RedstoneAndTransport", IDS_GROUPNAME_REDSTONE_AND_TRANSPORT, 2, redAndTranGroup, 0, NULL);
+ specs[eCreativeInventoryTab_RedstoneAndTransport] = new TabSpec(L"RedstoneAndTransport", IDS_GROUPNAME_REDSTONE_AND_TRANSPORT, 2, redAndTranGroup);
ECreative_Inventory_Groups materialsGroup[] = {eCreativeInventory_Materials};
- specs[eCreativeInventoryTab_Materials] = new TabSpec(L"Materials", IDS_GROUPNAME_MATERIALS, 1, materialsGroup, 0, NULL);
+ specs[eCreativeInventoryTab_Materials] = new TabSpec(L"Materials", IDS_GROUPNAME_MATERIALS, 1, materialsGroup);
ECreative_Inventory_Groups foodGroup[] = {eCreativeInventory_Food};
- specs[eCreativeInventoryTab_Food] = new TabSpec(L"Food", IDS_GROUPNAME_FOOD, 1, foodGroup, 0, NULL);
+ specs[eCreativeInventoryTab_Food] = new TabSpec(L"Food", IDS_GROUPNAME_FOOD, 1, foodGroup);
ECreative_Inventory_Groups toolsGroup[] = {eCreativeInventory_ToolsArmourWeapons};
- specs[eCreativeInventoryTab_ToolsWeaponsArmor] = new TabSpec(L"Tools", IDS_GROUPNAME_TOOLS_WEAPONS_ARMOR, 1, toolsGroup, 0, NULL);
+ specs[eCreativeInventoryTab_ToolsWeaponsArmor] = new TabSpec(L"Tools", IDS_GROUPNAME_TOOLS_WEAPONS_ARMOR, 1, toolsGroup);
ECreative_Inventory_Groups brewingGroup[] = {eCreativeInventory_Brewing, eCreativeInventory_Potions_Level2_Extended, eCreativeInventory_Potions_Extended, eCreativeInventory_Potions_Level2, eCreativeInventory_Potions_Basic};
@@ -561,16 +733,21 @@ void IUIScene_CreativeMenu::staticCtor()
// In 480p there's not enough room for the LT button, so use text instead
//if(!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())
{
- specs[eCreativeInventoryTab_Brewing] = new TabSpec(L"Brewing", IDS_GROUPNAME_POTIONS_480, 5, brewingGroup, 0, NULL);
+ specs[eCreativeInventoryTab_Brewing] = new TabSpec(L"Brewing", IDS_GROUPNAME_POTIONS_480, 5, brewingGroup);
}
// else
// {
// specs[eCreativeInventoryTab_Brewing] = new TabSpec(L"icon_brewing.png", IDS_GROUPNAME_POTIONS, 1, brewingGroup, 4, potionsGroup);
// }
+#ifndef _CONTENT_PACKAGE
ECreative_Inventory_Groups miscGroup[] = {eCreativeInventory_Misc};
- specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup, 0, NULL);
-
+ ECreative_Inventory_Groups debugMiscGroup[] = {eCreativeInventory_ArtToolsMisc};
+ specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup, 0, NULL, 1, debugMiscGroup);
+#else
+ ECreative_Inventory_Groups miscGroup[] = {eCreativeInventory_Misc};
+ specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup);
+#endif
}
IUIScene_CreativeMenu::IUIScene_CreativeMenu()
@@ -600,10 +777,33 @@ void IUIScene_CreativeMenu::switchTab(ECreativeInventoryTabs tab)
specs[tab]->populateMenu(itemPickerMenu,m_tabDynamicPos[m_curTab], m_tabPage[m_curTab]);
}
+void IUIScene_CreativeMenu::ScrollBar(UIVec2D pointerPos)
+{
+ UIVec2D pos;
+ UIVec2D size;
+ GetItemScreenData(eSectionInventoryCreativeSlider, 0, &pos, &size);
+ float fPosition = ((float)pointerPos.y - pos.y) / size.y;
+
+ // clamp
+ if(fPosition > 1)
+ fPosition = 1.0f;
+ else if(fPosition < 0)
+ fPosition = 0.0f;
+
+ // calculate page position according to page count
+ int iCurrentPage = Math::round(fPosition * (specs[m_curTab]->getPageCount() - 1));
+
+ // set tab page
+ m_tabPage[m_curTab] = iCurrentPage;
+
+ // update tab
+ switchTab(m_curTab);
+}
+
// 4J JEV - Tab Spec Struct
-IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int staticGroupsCount, ECreative_Inventory_Groups *staticGroups, int dynamicGroupsCount, ECreative_Inventory_Groups *dynamicGroups)
- : m_icon(icon), m_descriptionId(descriptionId), m_staticGroupsCount(staticGroupsCount), m_dynamicGroupsCount(dynamicGroupsCount)
+IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int staticGroupsCount, ECreative_Inventory_Groups *staticGroups, int dynamicGroupsCount, ECreative_Inventory_Groups *dynamicGroups, int debugGroupsCount /*= 0*/, ECreative_Inventory_Groups *debugGroups /*= NULL*/)
+ : m_icon(icon), m_descriptionId(descriptionId), m_staticGroupsCount(staticGroupsCount), m_dynamicGroupsCount(dynamicGroupsCount), m_debugGroupsCount(debugGroupsCount)
{
m_pages = 0;
@@ -622,8 +822,20 @@ IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int sta
}
}
+ m_debugGroupsA = NULL;
+ m_debugItems = 0;
+ if(debugGroupsCount > 0)
+ {
+ m_debugGroupsA = new ECreative_Inventory_Groups[debugGroupsCount];
+ for(int i = 0; i < debugGroupsCount; ++i)
+ {
+ m_debugGroupsA[i] = debugGroups[i];
+ m_debugItems += categoryGroups[m_debugGroupsA[i]].size();
+ }
+ }
+
m_dynamicGroupsA = NULL;
- if(dynamicGroupsCount > 0)
+ if(dynamicGroupsCount > 0 && dynamicGroups != NULL)
{
m_dynamicGroupsA = new ECreative_Inventory_Groups[dynamicGroupsCount];
for(int i = 0; i < dynamicGroupsCount; ++i)
@@ -633,14 +845,16 @@ IUIScene_CreativeMenu::TabSpec::TabSpec(LPCWSTR icon, int descriptionId, int sta
}
}
- m_staticPerPage = MAX_SIZE - dynamicItems;
- m_pages = (int)ceil((float)m_staticItems / m_staticPerPage);
+ m_staticPerPage = columns;
+ const int totalRows = (m_staticItems + columns - 1) / columns;
+ m_pages = std::max<int>(1, totalRows - 5 + 1);
}
IUIScene_CreativeMenu::TabSpec::~TabSpec()
{
if(m_staticGroupsA != NULL) delete [] m_staticGroupsA;
if(m_dynamicGroupsA != NULL) delete [] m_dynamicGroupsA;
+ if(m_debugGroupsA != NULL) delete [] m_debugGroupsA;
}
void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, int dynamicIndex, unsigned int page)
@@ -659,12 +873,12 @@ void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, i
// Fill from the static groups
unsigned int startIndex = page * m_staticPerPage;
- int remainingItems = m_staticItems - startIndex;
// Work out the first group with an item the want to display, and which item in that group
unsigned int currentIndex = 0;
unsigned int currentGroup = 0;
unsigned int currentItem = 0;
+ bool displayStatic = false;
for(; currentGroup < m_staticGroupsCount; ++currentGroup)
{
int size = categoryGroups[m_staticGroupsA[currentGroup]].size();
@@ -673,26 +887,79 @@ void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, i
currentIndex += size;
continue;
}
+ displayStatic = true;
currentItem = size - ((currentIndex + size) - startIndex);
break;
}
- for(; lastSlotIndex < MAX_SIZE;)
+ int lastStaticPageCount = currentIndex;
+ while(lastStaticPageCount > m_staticPerPage) lastStaticPageCount -= m_staticPerPage;
+
+ if(displayStatic)
{
- Slot *slot = menu->getSlot(lastSlotIndex++);
- slot->set(categoryGroups[m_staticGroupsA[currentGroup]][currentItem]);
+ for(; lastSlotIndex < MAX_SIZE;)
+ {
+ Slot *slot = menu->getSlot(lastSlotIndex++);
+ slot->set(categoryGroups[m_staticGroupsA[currentGroup]][currentItem]);
+
+ ++currentItem;
+ if(currentItem >= categoryGroups[m_staticGroupsA[currentGroup]].size())
+ {
+ currentItem = 0;
+ ++currentGroup;
+ if(currentGroup >= m_staticGroupsCount)
+ {
+ break;
+ }
+ }
+ }
+ }
- ++currentItem;
- if(currentItem >= categoryGroups[m_staticGroupsA[currentGroup]].size())
+#ifndef _CONTENT_PACKAGE
+ if(app.DebugArtToolsOn())
+ {
+ if(m_debugGroupsCount > 0)
{
+ startIndex = 0;
+ if(lastStaticPageCount != 0)
+ {
+ startIndex = m_staticPerPage - lastStaticPageCount;
+ }
+ currentIndex = 0;
+ currentGroup = 0;
currentItem = 0;
- ++currentGroup;
- if(currentGroup >= m_staticGroupsCount)
+ bool showDebug = false;
+ for(; currentGroup < m_debugGroupsCount; ++currentGroup)
{
+ int size = categoryGroups[m_debugGroupsA[currentGroup]].size();
+ if( currentIndex + size < startIndex)
+ {
+ currentIndex += size;
+ continue;
+ }
+ currentItem = size - ((currentIndex + size) - startIndex);
break;
}
+
+ for(; lastSlotIndex < MAX_SIZE;)
+ {
+ Slot *slot = menu->getSlot(lastSlotIndex++);
+ slot->set(categoryGroups[m_debugGroupsA[currentGroup]][currentItem]);
+
+ ++currentItem;
+ if(currentItem >= categoryGroups[m_debugGroupsA[currentGroup]].size())
+ {
+ currentItem = 0;
+ ++currentGroup;
+ if(currentGroup >= m_debugGroupsCount)
+ {
+ break;
+ }
+ }
+ }
}
}
+#endif
for(; lastSlotIndex < MAX_SIZE; ++lastSlotIndex)
{
@@ -703,7 +970,16 @@ void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu *menu, i
unsigned int IUIScene_CreativeMenu::TabSpec::getPageCount()
{
- return m_pages;
+#ifndef _CONTENT_PACKAGE
+ if(app.DebugArtToolsOn())
+ {
+ return (int)ceil((float)(m_staticItems + m_debugItems) / m_staticPerPage);
+ }
+ else
+#endif
+ {
+ return m_pages;
+ }
}
@@ -763,7 +1039,6 @@ IUIScene_AbstractContainerMenu::ESceneSection IUIScene_CreativeMenu::GetSectionA
newSection = eSectionInventoryCreativeSelector;
}
break;
-#ifndef _XBOX
case eSectionInventoryCreativeTab_0:
case eSectionInventoryCreativeTab_1:
case eSectionInventoryCreativeTab_2:
@@ -775,7 +1050,6 @@ IUIScene_AbstractContainerMenu::ESceneSection IUIScene_CreativeMenu::GetSectionA
case eSectionInventoryCreativeSlider:
/* do nothing */
break;
-#endif
default:
assert( false );
break;
@@ -800,7 +1074,7 @@ bool IUIScene_CreativeMenu::handleValidKeyPress(int iPad, int buttonNum, BOOL qu
{
m_menu->getSlot(i)->set(nullptr);
// call this function to synchronize multiplayer item bar
- pMinecraft->localgameModes[iPad]->handleCreativeModeItemAdd(nullptr, i - (int)m_menu->slots->size() + 9 + InventoryMenu::USE_ROW_SLOT_START);
+ pMinecraft->localgameModes[iPad]->handleCreativeModeItemAdd(nullptr, i - (int)m_menu->slots.size() + 9 + InventoryMenu::USE_ROW_SLOT_START);
}
}
return true;
@@ -930,7 +1204,7 @@ void IUIScene_CreativeMenu::handleSlotListClicked(ESceneSection eSection, int bu
m_menu->clicked(currentIndex, buttonNum, quickKeyHeld?AbstractContainerMenu::CLICK_QUICK_MOVE:AbstractContainerMenu::CLICK_PICKUP, pMinecraft->localplayers[getPad()]);
shared_ptr<ItemInstance> newItem = m_menu->getSlot(currentIndex)->getItem();
// call this function to synchronize multiplayer item bar
- pMinecraft->localgameModes[getPad()]->handleCreativeModeItemAdd(newItem, currentIndex - (int)m_menu->slots->size() + 9 + InventoryMenu::USE_ROW_SLOT_START);
+ pMinecraft->localgameModes[getPad()]->handleCreativeModeItemAdd(newItem, currentIndex - (int)m_menu->slots.size() + 9 + InventoryMenu::USE_ROW_SLOT_START);
if(m_bCarryingCreativeItem)
{
@@ -978,7 +1252,7 @@ bool IUIScene_CreativeMenu::getEmptyInventorySlot(shared_ptr<ItemInstance> item,
for(unsigned int i = TabSpec::MAX_SIZE; i < TabSpec::MAX_SIZE + 9; ++i)
{
shared_ptr<ItemInstance> slotItem = m_menu->getSlot(i)->getItem();
- if( slotItem != NULL && slotItem->sameItem(item) && (slotItem->GetCount() + item->GetCount() <= item->getMaxStackSize() ))
+ if( slotItem != NULL && slotItem->sameItemWithTags(item) && (slotItem->GetCount() + item->GetCount() <= item->getMaxStackSize() ))
{
sameItemFound = true;
slotX = i - TabSpec::MAX_SIZE;
@@ -1021,7 +1295,7 @@ int IUIScene_CreativeMenu::getSectionStartOffset(ESceneSection eSection)
}
bool IUIScene_CreativeMenu::overrideTooltips(ESceneSection sectionUnderPointer, shared_ptr<ItemInstance> itemUnderPointer, bool bIsItemCarried, bool bSlotHasItem, bool bCarriedIsSameAsSlot, int iSlotStackSizeRemaining,
- EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT)
+ EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT, EToolTipItem &buttonBack)
{
bool _override = false;
@@ -1030,7 +1304,6 @@ bool IUIScene_CreativeMenu::overrideTooltips(ESceneSection sectionUnderPointer,
if(bSlotHasItem)
{
buttonA = eToolTipPickUpGeneric;
- buttonRT = eToolTipWhatIsThis;
if(itemUnderPointer->isStackable())
{
@@ -1051,3 +1324,74 @@ bool IUIScene_CreativeMenu::overrideTooltips(ESceneSection sectionUnderPointer,
return _override;
}
+
+void IUIScene_CreativeMenu::BuildFirework(vector<shared_ptr<ItemInstance> > *list, byte type, int color, int sulphur, bool flicker, bool trail, int fadeColor/*= -1*/)
+{
+ /////////////////////////////////
+ // Create firecharge
+ /////////////////////////////////
+
+
+ CompoundTag *expTag = new CompoundTag(FireworksItem::TAG_EXPLOSION);
+
+ vector<int> colors;
+
+ colors.push_back(DyePowderItem::COLOR_RGB[color]);
+
+ // glowstone dust gives flickering
+ if (flicker) expTag->putBoolean(FireworksItem::TAG_E_FLICKER, true);
+
+ // diamonds give trails
+ if (trail) expTag->putBoolean(FireworksItem::TAG_E_TRAIL, true);
+
+ intArray colorArray(colors.size());
+ for (int i = 0; i < colorArray.length; i++)
+ {
+ colorArray[i] = colors.at(i);
+ }
+ expTag->putIntArray(FireworksItem::TAG_E_COLORS, colorArray);
+ // delete colorArray.data;
+
+ expTag->putByte(FireworksItem::TAG_E_TYPE, type);
+
+ if (fadeColor != -1)
+ {
+ ////////////////////////////////////
+ // Apply fade colors to firecharge
+ ////////////////////////////////////
+
+ vector<int> colors;
+ colors.push_back(DyePowderItem::COLOR_RGB[fadeColor]);
+
+ intArray colorArray(colors.size());
+ for (int i = 0; i < colorArray.length; i++)
+ {
+ colorArray[i] = colors.at(i);
+ }
+ expTag->putIntArray(FireworksItem::TAG_E_FADECOLORS, colorArray);
+ }
+
+ /////////////////////////////////
+ // Create fireworks
+ /////////////////////////////////
+
+ shared_ptr<ItemInstance> firework;
+
+ {
+ firework = shared_ptr<ItemInstance>( new ItemInstance(Item::fireworks) );
+ CompoundTag *itemTag = new CompoundTag();
+ CompoundTag *fireTag = new CompoundTag(FireworksItem::TAG_FIREWORKS);
+ ListTag<CompoundTag> *expTags = new ListTag<CompoundTag>(FireworksItem::TAG_EXPLOSIONS);
+
+ expTags->add(expTag);
+
+ fireTag->put(FireworksItem::TAG_EXPLOSIONS, expTags);
+ fireTag->putByte(FireworksItem::TAG_FLIGHT, (byte) sulphur);
+
+ itemTag->put(FireworksItem::TAG_FIREWORKS, fireTag);
+
+ firework->setTag(itemTag);
+ }
+
+ list->push_back(firework);
+}