mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-27 17:54:03 +00:00
1164 lines
45 KiB
C++
1164 lines
45 KiB
C++
#include "../../Minecraft.World/Platform/stdafx.h"
|
|
#include "IUIScene_CreativeMenu.h"
|
|
|
|
#include "../../Minecraft.Client/Minecraft.h"
|
|
#include "../../Minecraft.Client/Player/MultiPlayerLocalPlayer.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.inventory.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.level.tile.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.level.tile.entity.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.item.h"
|
|
#include "../../Minecraft.World/Headers/net.minecraft.world.item.enchantment.h"
|
|
|
|
// 4J JEV - Images for each tab.
|
|
IUIScene_CreativeMenu::TabSpec** IUIScene_CreativeMenu::specs = NULL;
|
|
|
|
std::vector<std::shared_ptr<ItemInstance> >
|
|
IUIScene_CreativeMenu::categoryGroups[eCreativeInventoryGroupsCount];
|
|
|
|
#define ITEM(id) \
|
|
list->push_back(std::shared_ptr<ItemInstance>(new ItemInstance(id, 1, 0)));
|
|
#define ITEM_AUX(id, aux) \
|
|
list->push_back( \
|
|
std::shared_ptr<ItemInstance>(new ItemInstance(id, 1, aux)));
|
|
#define DEF(index) list = &categoryGroups[index];
|
|
|
|
void IUIScene_CreativeMenu::staticCtor() {
|
|
std::vector<std::shared_ptr<ItemInstance> >* list;
|
|
|
|
// Building Blocks
|
|
DEF(eCreativeInventory_BuildingBlocks)
|
|
ITEM(Tile::rock_Id)
|
|
ITEM(Tile::grass_Id)
|
|
ITEM(Tile::dirt_Id)
|
|
ITEM(Tile::stoneBrick_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::goldBlock_Id)
|
|
ITEM(Tile::ironBlock_Id)
|
|
ITEM(Tile::lapisBlock_Id)
|
|
ITEM(Tile::diamondBlock_Id)
|
|
ITEM(Tile::emeraldBlock_Id)
|
|
ITEM_AUX(Tile::quartzBlock_Id, QuartzBlockTile::TYPE_DEFAULT)
|
|
ITEM(Tile::coalOre_Id)
|
|
ITEM(Tile::lapisOre_Id)
|
|
ITEM(Tile::diamondOre_Id)
|
|
ITEM(Tile::redStoneOre_Id)
|
|
ITEM(Tile::ironOre_Id)
|
|
ITEM(Tile::goldOre_Id)
|
|
ITEM(Tile::emeraldOre_Id)
|
|
ITEM(Tile::netherQuartz_Id)
|
|
ITEM(Tile::unbreakable_Id)
|
|
ITEM_AUX(Tile::wood_Id, 0)
|
|
ITEM_AUX(Tile::wood_Id, TreeTile::DARK_TRUNK)
|
|
ITEM_AUX(Tile::wood_Id, TreeTile::BIRCH_TRUNK)
|
|
ITEM_AUX(Tile::wood_Id, TreeTile::JUNGLE_TRUNK)
|
|
ITEM_AUX(Tile::treeTrunk_Id, 0)
|
|
ITEM_AUX(Tile::treeTrunk_Id, TreeTile::DARK_TRUNK)
|
|
ITEM_AUX(Tile::treeTrunk_Id, TreeTile::BIRCH_TRUNK)
|
|
ITEM_AUX(Tile::treeTrunk_Id, TreeTile::JUNGLE_TRUNK)
|
|
ITEM(Tile::gravel_Id)
|
|
ITEM(Tile::redBrick_Id)
|
|
ITEM(Tile::mossStone_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_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_AUX(Tile::quartzBlock_Id, QuartzBlockTile::TYPE_CHISELED)
|
|
ITEM_AUX(Tile::quartzBlock_Id, QuartzBlockTile::TYPE_LINES_Y)
|
|
ITEM(Tile::trapdoor_Id)
|
|
ITEM(Tile::fenceGate_Id)
|
|
ITEM(Item::door_wood_Id)
|
|
ITEM(Item::door_iron_Id)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::STONE_SLAB)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::SAND_SLAB)
|
|
// AP - changed oak slab to be wood because it wouldn't burn
|
|
// ITEM_AUX(Tile::stoneSlabHalf_Id,StoneSlabTile::WOOD_SLAB)
|
|
ITEM_AUX(Tile::woodSlabHalf_Id, 0)
|
|
ITEM_AUX(Tile::woodSlabHalf_Id, TreeTile::DARK_TRUNK)
|
|
ITEM_AUX(Tile::woodSlabHalf_Id, TreeTile::BIRCH_TRUNK)
|
|
ITEM_AUX(Tile::woodSlabHalf_Id, TreeTile::JUNGLE_TRUNK)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::COBBLESTONE_SLAB)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::BRICK_SLAB)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::SMOOTHBRICK_SLAB)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::NETHERBRICK_SLAB)
|
|
ITEM_AUX(Tile::stoneSlabHalf_Id, StoneSlabTile::QUARTZ_SLAB)
|
|
ITEM(Tile::stairs_wood_Id)
|
|
ITEM(Tile::stairs_birchwood_Id)
|
|
ITEM(Tile::stairs_sprucewood_Id)
|
|
ITEM(Tile::stairs_junglewood_Id)
|
|
ITEM(Tile::stairs_stone_Id)
|
|
ITEM(Tile::stairs_bricks_Id)
|
|
ITEM(Tile::stairs_stoneBrickSmooth_Id)
|
|
ITEM(Tile::stairs_netherBricks_Id)
|
|
ITEM(Tile::stairs_sandstone_Id)
|
|
ITEM(Tile::stairs_quartz_Id)
|
|
|
|
// Decoration
|
|
DEF(eCreativeInventory_Decoration)
|
|
ITEM_AUX(Item::skull_Id, SkullTileEntity::TYPE_SKELETON)
|
|
ITEM_AUX(Item::skull_Id, SkullTileEntity::TYPE_WITHER)
|
|
ITEM_AUX(Item::skull_Id, SkullTileEntity::TYPE_ZOMBIE)
|
|
ITEM_AUX(Item::skull_Id, SkullTileEntity::TYPE_CHAR)
|
|
ITEM_AUX(Item::skull_Id, SkullTileEntity::TYPE_CREEPER)
|
|
ITEM(Tile::sponge_Id)
|
|
ITEM(Tile::melon_Id)
|
|
ITEM(Tile::pumpkin_Id)
|
|
ITEM(Tile::litPumpkin_Id)
|
|
ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_DEFAULT)
|
|
ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_EVERGREEN)
|
|
ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_BIRCH)
|
|
ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_JUNGLE)
|
|
ITEM_AUX(Tile::leaves_Id, LeafTile::NORMAL_LEAF)
|
|
ITEM_AUX(Tile::leaves_Id, LeafTile::EVERGREEN_LEAF)
|
|
ITEM_AUX(Tile::leaves_Id, LeafTile::BIRCH_LEAF)
|
|
ITEM_AUX(Tile::leaves_Id, LeafTile::JUNGLE_LEAF)
|
|
ITEM(Tile::vine)
|
|
ITEM(Tile::waterLily_Id)
|
|
ITEM(Tile::torch_Id)
|
|
ITEM_AUX(Tile::tallgrass_Id, TallGrass::DEAD_SHRUB)
|
|
ITEM_AUX(Tile::tallgrass_Id, TallGrass::TALL_GRASS)
|
|
ITEM_AUX(Tile::tallgrass_Id, TallGrass::FERN)
|
|
ITEM(Tile::deadBush_Id)
|
|
ITEM(Tile::flower_Id)
|
|
ITEM(Tile::rose_Id)
|
|
ITEM(Tile::mushroom1_Id)
|
|
ITEM(Tile::mushroom2_Id)
|
|
ITEM(Tile::cactus_Id)
|
|
ITEM(Tile::topSnow_Id)
|
|
// 4J-PB - Already got sugar cane in Materials ITEM_11(Tile::reeds_Id)
|
|
ITEM(Tile::web_Id)
|
|
ITEM(Tile::thinGlass_Id)
|
|
ITEM(Tile::glass_Id)
|
|
ITEM(Item::painting_Id)
|
|
ITEM(Item::itemFrame_Id)
|
|
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_AUX(Tile::woolCarpet_Id, 14) // Red
|
|
ITEM_AUX(Tile::woolCarpet_Id, 1) // Orange
|
|
ITEM_AUX(Tile::woolCarpet_Id, 4) // Yellow
|
|
ITEM_AUX(Tile::woolCarpet_Id, 5) // Lime
|
|
ITEM_AUX(Tile::woolCarpet_Id, 3) // Light Blue
|
|
ITEM_AUX(Tile::woolCarpet_Id, 9) // Cyan
|
|
ITEM_AUX(Tile::woolCarpet_Id, 11) // Blue
|
|
ITEM_AUX(Tile::woolCarpet_Id, 10) // Purple
|
|
ITEM_AUX(Tile::woolCarpet_Id, 2) // Magenta
|
|
ITEM_AUX(Tile::woolCarpet_Id, 6) // Pink
|
|
ITEM_AUX(Tile::woolCarpet_Id, 0) // White
|
|
ITEM_AUX(Tile::woolCarpet_Id, 8) // Light Gray
|
|
ITEM_AUX(Tile::woolCarpet_Id, 7) // Gray
|
|
ITEM_AUX(Tile::woolCarpet_Id, 15) // Black
|
|
ITEM_AUX(Tile::woolCarpet_Id, 13) // Green
|
|
ITEM_AUX(Tile::woolCarpet_Id, 12) // Brown
|
|
|
|
// Redstone
|
|
DEF(eCreativeInventory_Redstone)
|
|
ITEM(Tile::dispenser_Id)
|
|
ITEM(Tile::musicBlock_Id)
|
|
ITEM(Tile::pistonBase_Id)
|
|
ITEM(Tile::pistonStickyBase_Id)
|
|
ITEM(Tile::tnt_Id)
|
|
ITEM(Tile::lever_Id)
|
|
ITEM(Tile::button_stone_Id)
|
|
ITEM(Tile::button_wood_Id)
|
|
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::redstoneLight_Id)
|
|
ITEM(Tile::tripWireSource_Id)
|
|
|
|
// Transport
|
|
DEF(eCreativeInventory_Transport)
|
|
ITEM(Tile::rail_Id)
|
|
ITEM(Tile::goldenRail_Id)
|
|
ITEM(Tile::detectorRail_Id)
|
|
ITEM(Tile::ladder_Id)
|
|
ITEM(Item::minecart_Id)
|
|
ITEM(Item::minecart_chest_Id)
|
|
ITEM(Item::minecart_furnace_Id)
|
|
ITEM(Item::saddle_Id)
|
|
ITEM(Item::boat_Id)
|
|
|
|
// Miscellaneous
|
|
DEF(eCreativeInventory_Misc)
|
|
ITEM(Tile::chest_Id)
|
|
ITEM(Tile::enderChest_Id)
|
|
ITEM(Tile::workBench_Id)
|
|
ITEM(Tile::furnace_Id)
|
|
ITEM(Item::brewingStand_Id)
|
|
ITEM(Tile::enchantTable_Id)
|
|
ITEM(Tile::endPortalFrameTile_Id)
|
|
ITEM(Tile::recordPlayer_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::cauldron_Id)
|
|
ITEM(Item::snowBall_Id)
|
|
ITEM(Item::paper_Id)
|
|
ITEM(Item::book_Id)
|
|
ITEM(Item::enderPearl_Id)
|
|
ITEM(Item::eyeOfEnder_Id)
|
|
ITEM(Item::record_01_Id)
|
|
ITEM(Item::record_02_Id)
|
|
ITEM(Item::record_03_Id)
|
|
ITEM(Item::record_04_Id)
|
|
ITEM(Item::record_05_Id)
|
|
ITEM(Item::record_06_Id)
|
|
ITEM(Item::record_07_Id)
|
|
ITEM(Item::record_08_Id)
|
|
ITEM(Item::record_09_Id)
|
|
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
|
|
|
|
// Food
|
|
DEF(eCreativeInventory_Food)
|
|
ITEM(Item::apple_Id)
|
|
ITEM(Item::apple_gold_Id)
|
|
ITEM_AUX(Item::apple_gold_Id, 1) // Enchanted
|
|
ITEM(Item::melon_Id)
|
|
ITEM(Item::mushroomStew_Id)
|
|
ITEM(Item::bread_Id)
|
|
ITEM(Item::cake_Id)
|
|
ITEM(Item::cookie_Id)
|
|
ITEM(Item::fish_cooked_Id)
|
|
ITEM(Item::fish_raw_Id)
|
|
ITEM(Item::porkChop_cooked_Id)
|
|
ITEM(Item::porkChop_raw_Id)
|
|
ITEM(Item::beef_cooked_Id)
|
|
ITEM(Item::beef_raw_Id)
|
|
ITEM(Item::chicken_raw_Id)
|
|
ITEM(Item::chicken_cooked_Id)
|
|
ITEM(Item::rotten_flesh_Id)
|
|
ITEM(Item::spiderEye_Id)
|
|
ITEM(Item::potato_Id)
|
|
ITEM(Item::potatoBaked_Id)
|
|
ITEM(Item::potatoPoisonous_Id)
|
|
ITEM(Item::carrots_Id)
|
|
ITEM(Item::carrotGolden_Id)
|
|
ITEM(Item::pumpkinPie_Id)
|
|
|
|
// 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::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::helmet_chain_Id)
|
|
ITEM(Item::chestplate_chain_Id)
|
|
ITEM(Item::leggings_chain_Id)
|
|
ITEM(Item::boots_chain_Id)
|
|
ITEM(Item::sword_stone_Id)
|
|
ITEM(Item::shovel_stone_Id)
|
|
ITEM(Item::pickAxe_stone_Id)
|
|
ITEM(Item::hatchet_stone_Id)
|
|
ITEM(Item::hoe_stone_Id)
|
|
|
|
ITEM(Item::bow_Id)
|
|
ITEM(Item::helmet_iron_Id)
|
|
ITEM(Item::chestplate_iron_Id)
|
|
ITEM(Item::leggings_iron_Id)
|
|
ITEM(Item::boots_iron_Id)
|
|
ITEM(Item::sword_iron_Id)
|
|
ITEM(Item::shovel_iron_Id)
|
|
ITEM(Item::pickAxe_iron_Id)
|
|
ITEM(Item::hatchet_iron_Id)
|
|
ITEM(Item::hoe_iron_Id)
|
|
|
|
ITEM(Item::arrow_Id)
|
|
ITEM(Item::helmet_gold_Id)
|
|
ITEM(Item::chestplate_gold_Id)
|
|
ITEM(Item::leggings_gold_Id)
|
|
ITEM(Item::boots_gold_Id)
|
|
ITEM(Item::sword_gold_Id)
|
|
ITEM(Item::shovel_gold_Id)
|
|
ITEM(Item::pickAxe_gold_Id)
|
|
ITEM(Item::hatchet_gold_Id)
|
|
ITEM(Item::hoe_gold_Id)
|
|
|
|
ITEM(Item::flintAndSteel_Id)
|
|
ITEM(Item::helmet_diamond_Id)
|
|
ITEM(Item::chestplate_diamond_Id)
|
|
ITEM(Item::leggings_diamond_Id)
|
|
ITEM(Item::boots_diamond_Id)
|
|
ITEM(Item::sword_diamond_Id)
|
|
ITEM(Item::shovel_diamond_Id)
|
|
ITEM(Item::pickAxe_diamond_Id)
|
|
ITEM(Item::hatchet_diamond_Id)
|
|
ITEM(Item::hoe_diamond_Id)
|
|
|
|
ITEM(Item::fireball_Id)
|
|
ITEM(Item::clock_Id)
|
|
ITEM(Item::shears_Id)
|
|
ITEM(Item::fishingRod_Id)
|
|
ITEM(Item::carrotOnAStick_Id)
|
|
|
|
for (unsigned int i = 0; i < Enchantment::enchantments.length; ++i) {
|
|
Enchantment* enchantment = Enchantment::enchantments[i];
|
|
if (enchantment == NULL || enchantment->category == NULL) continue;
|
|
list->push_back(Item::enchantedBook->createForEnchantment(
|
|
new EnchantmentInstance(enchantment, enchantment->getMaxLevel())));
|
|
}
|
|
|
|
// Materials
|
|
DEF(eCreativeInventory_Materials)
|
|
ITEM(Item::coal_Id)
|
|
ITEM_AUX(Item::coal_Id, 1)
|
|
ITEM(Item::diamond_Id)
|
|
ITEM(Item::emerald_Id)
|
|
ITEM(Item::ironIngot_Id)
|
|
ITEM(Item::goldIngot_Id)
|
|
ITEM(Item::netherQuartz_Id)
|
|
ITEM(Item::brick_Id)
|
|
ITEM(Item::netherbrick_Id)
|
|
ITEM(Item::stick_Id)
|
|
ITEM(Item::bowl_Id)
|
|
ITEM(Item::bone_Id)
|
|
ITEM(Item::string_Id)
|
|
ITEM(Item::feather_Id)
|
|
ITEM(Item::flint_Id)
|
|
ITEM(Item::leather_Id)
|
|
ITEM(Item::sulphur_Id)
|
|
ITEM(Item::clay_Id)
|
|
ITEM(Item::yellowDust_Id)
|
|
ITEM(Item::seeds_wheat_Id)
|
|
ITEM(Item::seeds_melon_Id)
|
|
ITEM(Item::seeds_pumpkin_Id)
|
|
ITEM(Item::wheat_Id)
|
|
ITEM(Item::reeds_Id)
|
|
ITEM(Item::egg_Id)
|
|
ITEM(Item::sugar_Id)
|
|
ITEM(Item::slimeBall_Id)
|
|
ITEM(Item::blazeRod_Id)
|
|
ITEM(Item::goldNugget_Id)
|
|
ITEM(Item::netherStalkSeeds_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
|
|
ITEM_AUX(Item::dye_powder_Id, 10) // Lime
|
|
ITEM_AUX(Item::dye_powder_Id, 12) // Light Blue
|
|
ITEM_AUX(Item::dye_powder_Id, 6) // Cyan
|
|
ITEM_AUX(Item::dye_powder_Id, 4) // Blue
|
|
ITEM_AUX(Item::dye_powder_Id, 5) // Purple
|
|
ITEM_AUX(Item::dye_powder_Id, 13) // Magenta
|
|
ITEM_AUX(Item::dye_powder_Id, 9) // Pink
|
|
ITEM_AUX(Item::dye_powder_Id, 15) // Bone Meal
|
|
ITEM_AUX(Item::dye_powder_Id, 7) // Light gray
|
|
ITEM_AUX(Item::dye_powder_Id, 8) // Gray
|
|
ITEM_AUX(Item::dye_powder_Id, 0) // black (ink sac)
|
|
ITEM_AUX(Item::dye_powder_Id, 2) // Green
|
|
ITEM_AUX(Item::dye_powder_Id, 3) // Brown
|
|
|
|
// Brewing (TODO)
|
|
DEF(eCreativeInventory_Brewing)
|
|
ITEM(Item::expBottle_Id)
|
|
|
|
// 4J Stu - Anything else added here also needs to be added to the key
|
|
// handler below
|
|
ITEM(Item::ghastTear_Id)
|
|
ITEM(Item::fermentedSpiderEye_Id)
|
|
ITEM(Item::blazePowder_Id)
|
|
ITEM(Item::magmaCream_Id)
|
|
ITEM(Item::speckledMelon_Id)
|
|
ITEM(Item::glassBottle_Id)
|
|
ITEM_AUX(Item::potion_Id, 0) // Water bottle
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, 0,
|
|
// MASK_TYPE_AWKWARD)) // Awkward Potion
|
|
|
|
DEF(eCreativeInventory_Potions_Basic)
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_SPEED))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, 0,
|
|
// MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_POISON))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_INSTANTHEALTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_STRENGTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_SLOWNESS))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_INSTANTDAMAGE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_SPEED))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0,
|
|
// MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_POISON))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_INSTANTHEALTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0,
|
|
// MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_STRENGTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0,
|
|
// MASK_SLOWNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_INSTANTDAMAGE))
|
|
|
|
DEF(eCreativeInventory_Potions_Level2)
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_SPEED))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_POISON))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2,
|
|
// MASK_INSTANTHEALTH)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0,
|
|
// MASK_LEVEL2, MASK_NIGHTVISION))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2,
|
|
// MASK_INVISIBILITY))
|
|
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_STRENGTH))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_SLOWNESS))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2,
|
|
// MASK_INSTANTDAMAGE))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2,
|
|
MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2, MASK_SPEED))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2, MASK_POISON))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2, MASK_INSTANTHEALTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2, MASK_NIGHTVISION))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2, MASK_INVISIBILITY))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2, MASK_STRENGTH))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_SLOWNESS))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2, MASK_INSTANTDAMAGE))
|
|
|
|
DEF(eCreativeInventory_Potions_Extended)
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_SPEED))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED,
|
|
// MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_POISON))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2,
|
|
// MASK_INSTANTHEALTH))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
0, 0, MASK_NIGHTVISION)) // 4J- Moved here as there isn't a
|
|
// weak variant of this potion.
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
0, 0, MASK_INVISIBILITY)) // 4J- Moved here as there isn't a
|
|
// weak variant of this potion.
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED,
|
|
// MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_STRENGTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED,
|
|
// MASK_SLOWNESS)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0,
|
|
// MASK_LEVEL2, MASK_INSTANTDAMAGE))
|
|
ITEM_AUX(
|
|
Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_SPEED))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_EXTENDED, MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_POISON))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2, MASK_INSTANTHEALTH))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
MASK_SPLASH, 0,
|
|
MASK_NIGHTVISION)) // 4J- Moved here as there isn't a weak
|
|
// variant of this potion.
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
MASK_SPLASH, 0,
|
|
MASK_INVISIBILITY)) // 4J- Moved here as there isn't a weak
|
|
// variant of this potion.
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_EXTENDED, MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_STRENGTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_EXTENDED, MASK_SLOWNESS))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2, MASK_INSTANTDAMAGE))
|
|
|
|
DEF(eCreativeInventory_Potions_Level2_Extended)
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED, MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED, MASK_SPEED))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED, MASK_POISON))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_INSTANTHEALTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED,
|
|
// MASK_NIGHTVISION)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0,
|
|
// MASK_LEVEL2EXTENDED, MASK_INVISIBILITY))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
0, MASK_EXTENDED,
|
|
MASK_NIGHTVISION)) // 4J- Moved here as there isn't a weak
|
|
// variant of this potion.
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
0, MASK_EXTENDED,
|
|
MASK_INVISIBILITY)) // 4J- Moved here as there isn't a weak
|
|
// variant of this potion.
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED, MASK_STRENGTH))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_SLOWNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_INSTANTDAMAGE))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2EXTENDED,
|
|
MASK_REGENERATION))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(
|
|
MASK_SPLASH, MASK_LEVEL2EXTENDED, MASK_SPEED))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED,
|
|
MASK_FIRE_RESISTANCE))
|
|
ITEM_AUX(
|
|
Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2EXTENDED, MASK_POISON))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2,
|
|
MASK_INSTANTHEALTH))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2EXTENDED, MASK_NIGHTVISION))
|
|
// ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH,
|
|
// MASK_LEVEL2EXTENDED, MASK_INVISIBILITY))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
MASK_SPLASH, MASK_EXTENDED,
|
|
MASK_NIGHTVISION)) // 4J- Moved here as there isn't a weak
|
|
// variant of this potion.
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(
|
|
MASK_SPLASH, MASK_EXTENDED,
|
|
MASK_INVISIBILITY)) // 4J- Moved here as there isn't a weak
|
|
// variant of this potion.
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_WEAKNESS))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2EXTENDED,
|
|
MASK_STRENGTH))
|
|
ITEM_AUX(Item::potion_Id,
|
|
MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_SLOWNESS))
|
|
ITEM_AUX(Item::potion_Id, MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2,
|
|
MASK_INSTANTDAMAGE))
|
|
|
|
specs = new TabSpec*[eCreativeInventoryTab_COUNT];
|
|
|
|
// Top Row
|
|
ECreative_Inventory_Groups blocksGroup[] = {
|
|
eCreativeInventory_BuildingBlocks};
|
|
specs[eCreativeInventoryTab_BuildingBlocks] = new TabSpec(
|
|
L"Structures", IDS_GROUPNAME_BUILDING_BLOCKS, 1, blocksGroup, 0, NULL);
|
|
|
|
ECreative_Inventory_Groups decorationsGroup[] = {
|
|
eCreativeInventory_Decoration};
|
|
specs[eCreativeInventoryTab_Decorations] = new TabSpec(
|
|
L"Decoration", IDS_GROUPNAME_DECORATIONS, 1, decorationsGroup, 0, NULL);
|
|
|
|
ECreative_Inventory_Groups redAndTranGroup[] = {
|
|
eCreativeInventory_Transport, eCreativeInventory_Redstone};
|
|
specs[eCreativeInventoryTab_RedstoneAndTransport] = new TabSpec(
|
|
L"RedstoneAndTransport", IDS_GROUPNAME_REDSTONE_AND_TRANSPORT, 2,
|
|
redAndTranGroup, 0, NULL);
|
|
|
|
ECreative_Inventory_Groups materialsGroup[] = {
|
|
eCreativeInventory_Materials};
|
|
specs[eCreativeInventoryTab_Materials] = new TabSpec(
|
|
L"Materials", IDS_GROUPNAME_MATERIALS, 1, materialsGroup, 0, NULL);
|
|
|
|
ECreative_Inventory_Groups foodGroup[] = {eCreativeInventory_Food};
|
|
specs[eCreativeInventoryTab_Food] =
|
|
new TabSpec(L"Food", IDS_GROUPNAME_FOOD, 1, foodGroup, 0, NULL);
|
|
|
|
ECreative_Inventory_Groups toolsGroup[] = {
|
|
eCreativeInventory_ToolsArmourWeapons};
|
|
specs[eCreativeInventoryTab_ToolsWeaponsArmor] = new TabSpec(
|
|
L"Tools", IDS_GROUPNAME_TOOLS_WEAPONS_ARMOR, 1, toolsGroup, 0, NULL);
|
|
|
|
ECreative_Inventory_Groups brewingGroup[] = {
|
|
eCreativeInventory_Brewing, eCreativeInventory_Potions_Level2_Extended,
|
|
eCreativeInventory_Potions_Extended, eCreativeInventory_Potions_Level2,
|
|
eCreativeInventory_Potions_Basic};
|
|
|
|
// Just use the text LT - the graphic doesn't fit in splitscreen either
|
|
// 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);
|
|
}
|
|
// else
|
|
// {
|
|
// specs[eCreativeInventoryTab_Brewing] = new
|
|
// TabSpec(L"icon_brewing.png", IDS_GROUPNAME_POTIONS, 1, brewingGroup, 4,
|
|
// potionsGroup);
|
|
// }
|
|
|
|
ECreative_Inventory_Groups miscGroup[] = {eCreativeInventory_Misc};
|
|
specs[eCreativeInventoryTab_Misc] = new TabSpec(
|
|
L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup, 0, NULL);
|
|
}
|
|
|
|
IUIScene_CreativeMenu::IUIScene_CreativeMenu() {
|
|
m_bCarryingCreativeItem = false;
|
|
m_creativeSlotX = m_creativeSlotY = m_inventorySlotX = m_inventorySlotY = 0;
|
|
|
|
// 4J JEV - Settup Tabs
|
|
for (int i = 0; i < eCreativeInventoryTab_COUNT; i++) {
|
|
m_tabDynamicPos[i] = 0;
|
|
m_tabPage[i] = 0;
|
|
}
|
|
}
|
|
|
|
/* 4J JEV - Switches between tabs.
|
|
*/
|
|
void IUIScene_CreativeMenu::switchTab(ECreativeInventoryTabs tab) {
|
|
// Could just be changing page on the current tab
|
|
if (tab != m_curTab) updateTabHighlightAndText(tab);
|
|
|
|
m_curTab = tab;
|
|
|
|
updateScrollCurrentPage(m_tabPage[m_curTab] + 1,
|
|
specs[m_curTab]->getPageCount());
|
|
|
|
specs[tab]->populateMenu(itemPickerMenu, m_tabDynamicPos[m_curTab],
|
|
m_tabPage[m_curTab]);
|
|
}
|
|
|
|
// 4J JEV - Tab Spec Struct
|
|
|
|
IUIScene_CreativeMenu::TabSpec::TabSpec(
|
|
const wchar_t* 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) {
|
|
m_pages = 0;
|
|
m_staticGroupsA = NULL;
|
|
|
|
unsigned int dynamicItems = 0;
|
|
m_staticItems = 0;
|
|
|
|
if (staticGroupsCount > 0) {
|
|
m_staticGroupsA = new ECreative_Inventory_Groups[staticGroupsCount];
|
|
for (int i = 0; i < staticGroupsCount; ++i) {
|
|
m_staticGroupsA[i] = staticGroups[i];
|
|
m_staticItems += categoryGroups[m_staticGroupsA[i]].size();
|
|
}
|
|
}
|
|
|
|
m_dynamicGroupsA = NULL;
|
|
if (dynamicGroupsCount > 0) {
|
|
m_dynamicGroupsA = new ECreative_Inventory_Groups[dynamicGroupsCount];
|
|
for (int i = 0; i < dynamicGroupsCount; ++i) {
|
|
m_dynamicGroupsA[i] = dynamicGroups[i];
|
|
dynamicItems += categoryGroups[m_dynamicGroupsA[i]].size();
|
|
}
|
|
}
|
|
|
|
m_staticPerPage = MAX_SIZE - dynamicItems;
|
|
m_pages = (int)ceil((float)m_staticItems / m_staticPerPage);
|
|
}
|
|
|
|
IUIScene_CreativeMenu::TabSpec::~TabSpec() {
|
|
if (m_staticGroupsA != NULL) delete[] m_staticGroupsA;
|
|
if (m_dynamicGroupsA != NULL) delete[] m_dynamicGroupsA;
|
|
}
|
|
|
|
void IUIScene_CreativeMenu::TabSpec::populateMenu(AbstractContainerMenu* menu,
|
|
int dynamicIndex,
|
|
unsigned int page) {
|
|
int lastSlotIndex = 0;
|
|
|
|
// Fill the dynamic group
|
|
if (m_dynamicGroupsCount > 0 && m_dynamicGroupsA != NULL) {
|
|
for (AUTO_VAR(it,
|
|
categoryGroups[m_dynamicGroupsA[dynamicIndex]].rbegin());
|
|
it != categoryGroups[m_dynamicGroupsA[dynamicIndex]].rend() &&
|
|
lastSlotIndex < MAX_SIZE;
|
|
++it) {
|
|
Slot* slot = menu->getSlot(++lastSlotIndex);
|
|
slot->set(*it);
|
|
}
|
|
}
|
|
|
|
// 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;
|
|
for (; currentGroup < m_staticGroupsCount; ++currentGroup) {
|
|
int size = categoryGroups[m_staticGroupsA[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_staticGroupsA[currentGroup]][currentItem]);
|
|
|
|
++currentItem;
|
|
if (currentItem >=
|
|
categoryGroups[m_staticGroupsA[currentGroup]].size()) {
|
|
currentItem = 0;
|
|
++currentGroup;
|
|
if (currentGroup >= m_staticGroupsCount) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (; lastSlotIndex < MAX_SIZE; ++lastSlotIndex) {
|
|
Slot* slot = menu->getSlot(lastSlotIndex);
|
|
slot->remove(1);
|
|
}
|
|
}
|
|
|
|
unsigned int IUIScene_CreativeMenu::TabSpec::getPageCount() { return m_pages; }
|
|
|
|
// 4J JEV - Item Picker Menu
|
|
IUIScene_CreativeMenu::ItemPickerMenu::ItemPickerMenu(
|
|
std::shared_ptr<SimpleContainer> smp, std::shared_ptr<Inventory> inv)
|
|
: AbstractContainerMenu() {
|
|
inventory = inv;
|
|
creativeContainer = smp;
|
|
|
|
// int startLength = slots->size();
|
|
|
|
Slot* slot = NULL;
|
|
for (int i = 0; i < TabSpec::MAX_SIZE; i++) {
|
|
// 4J JEV - These values get set by addSlot anyway.
|
|
slot = new Slot(creativeContainer, i, -1, -1);
|
|
|
|
ItemPickerMenu::addSlot(slot);
|
|
}
|
|
|
|
for (int i = 0; i < 9; i++) {
|
|
slot = new Slot(inventory, i, -1, -1);
|
|
ItemPickerMenu::addSlot(slot);
|
|
}
|
|
|
|
// 4J Stu - Give the creative menu a unique container id
|
|
containerId = CONTAINER_ID_CREATIVE;
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::ItemPickerMenu::stillValid(
|
|
std::shared_ptr<Player> player) {
|
|
return true;
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::ItemPickerMenu::isOverrideResultClick(
|
|
int slotNum, int buttonNum) {
|
|
return slotNum >= 0 && slotNum < 9 && buttonNum == 0;
|
|
}
|
|
|
|
IUIScene_AbstractContainerMenu::ESceneSection
|
|
IUIScene_CreativeMenu::GetSectionAndSlotInDirection(ESceneSection eSection,
|
|
ETapState eTapDirection,
|
|
int* piTargetX,
|
|
int* piTargetY) {
|
|
ESceneSection newSection = eSection;
|
|
|
|
// Find the new section if there is one
|
|
switch (eSection) {
|
|
case eSectionInventoryCreativeSelector:
|
|
if (eTapDirection == eTapStateDown ||
|
|
eTapDirection == eTapStateUp) {
|
|
newSection = eSectionInventoryCreativeUsing;
|
|
}
|
|
break;
|
|
case eSectionInventoryCreativeUsing:
|
|
if (eTapDirection == eTapStateDown ||
|
|
eTapDirection == eTapStateUp) {
|
|
newSection = eSectionInventoryCreativeSelector;
|
|
}
|
|
break;
|
|
#ifndef _XBOX
|
|
case eSectionInventoryCreativeTab_0:
|
|
case eSectionInventoryCreativeTab_1:
|
|
case eSectionInventoryCreativeTab_2:
|
|
case eSectionInventoryCreativeTab_3:
|
|
case eSectionInventoryCreativeTab_4:
|
|
case eSectionInventoryCreativeTab_5:
|
|
case eSectionInventoryCreativeTab_6:
|
|
case eSectionInventoryCreativeTab_7:
|
|
case eSectionInventoryCreativeSlider:
|
|
/* do nothing */
|
|
break;
|
|
#endif
|
|
default:
|
|
assert(false);
|
|
break;
|
|
}
|
|
|
|
updateSlotPosition(eSection, newSection, eTapDirection, piTargetX,
|
|
piTargetY, 0);
|
|
|
|
return newSection;
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::handleValidKeyPress(int iPad, int buttonNum,
|
|
bool quickKeyHeld) {
|
|
// 4J Added - Make pressing the X button clear the hotbar
|
|
if (buttonNum == 1) {
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
for (unsigned int i = TabSpec::MAX_SIZE; i < TabSpec::MAX_SIZE + 9;
|
|
++i) {
|
|
std::shared_ptr<ItemInstance> newItem =
|
|
m_menu->getSlot(i)->getItem();
|
|
|
|
if (newItem != NULL) {
|
|
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);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void IUIScene_CreativeMenu::handleOutsideClicked(int iPad, int buttonNum,
|
|
bool quickKeyHeld) {
|
|
// Drop items.
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
|
|
std::shared_ptr<Inventory> playerInventory =
|
|
pMinecraft->localplayers[iPad]->inventory;
|
|
if (playerInventory->getCarried() != NULL) {
|
|
if (buttonNum == 0) {
|
|
pMinecraft->localgameModes[iPad]->handleCreativeModeItemDrop(
|
|
playerInventory->getCarried());
|
|
playerInventory->setCarried(nullptr);
|
|
}
|
|
if (buttonNum == 1) {
|
|
std::shared_ptr<ItemInstance> removedItem =
|
|
playerInventory->getCarried()->remove(1);
|
|
pMinecraft->localgameModes[iPad]->handleCreativeModeItemDrop(
|
|
removedItem);
|
|
if (playerInventory->getCarried()->count == 0)
|
|
playerInventory->setCarried(nullptr);
|
|
}
|
|
}
|
|
|
|
// pMinecraft->localgameModes[m_iPad]->handleInventoryMouseClick(menu->containerId,
|
|
// AbstractContainerMenu::CLICKED_OUTSIDE, buttonNum,
|
|
// quickKeyHeld?true:false, pMinecraft->localplayers[m_iPad] );
|
|
}
|
|
|
|
void IUIScene_CreativeMenu::handleAdditionalKeyPress(int iAction) {
|
|
int dir = 1;
|
|
switch (iAction) {
|
|
case ACTION_MENU_LEFT_SCROLL:
|
|
dir = -1;
|
|
// Fall through intentional
|
|
case ACTION_MENU_RIGHT_SCROLL: {
|
|
ECreativeInventoryTabs tab =
|
|
(ECreativeInventoryTabs)(m_curTab + dir);
|
|
if (tab < 0)
|
|
tab = (ECreativeInventoryTabs)(eCreativeInventoryTab_COUNT - 1);
|
|
if (tab >= eCreativeInventoryTab_COUNT)
|
|
tab = eCreativeInventoryTab_BuildingBlocks;
|
|
switchTab(tab);
|
|
ui.PlayUISFX(eSFX_Focus);
|
|
} break;
|
|
case ACTION_MENU_PAGEUP:
|
|
// change the potion strength
|
|
{
|
|
++m_tabDynamicPos[m_curTab];
|
|
if (m_tabDynamicPos[m_curTab] >=
|
|
specs[m_curTab]->m_dynamicGroupsCount)
|
|
m_tabDynamicPos[m_curTab] = 0;
|
|
switchTab(m_curTab);
|
|
}
|
|
break;
|
|
case ACTION_MENU_OTHER_STICK_DOWN:
|
|
++m_tabPage[m_curTab];
|
|
if (m_tabPage[m_curTab] >= specs[m_curTab]->getPageCount()) {
|
|
m_tabPage[m_curTab] = specs[m_curTab]->getPageCount() - 1;
|
|
} else {
|
|
switchTab(m_curTab);
|
|
}
|
|
break;
|
|
case ACTION_MENU_OTHER_STICK_UP:
|
|
--m_tabPage[m_curTab];
|
|
if (m_tabPage[m_curTab] < 0) {
|
|
m_tabPage[m_curTab] = 0;
|
|
} else {
|
|
switchTab(m_curTab);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void IUIScene_CreativeMenu::handleSlotListClicked(ESceneSection eSection,
|
|
int buttonNum,
|
|
bool quickKeyHeld) {
|
|
int currentIndex = getCurrentIndex(eSection);
|
|
|
|
Minecraft* pMinecraft = Minecraft::GetInstance();
|
|
|
|
bool instantPlace = false;
|
|
if (eSection == eSectionInventoryCreativeSelector) {
|
|
if (buttonNum == 0) {
|
|
std::shared_ptr<Inventory> playerInventory =
|
|
pMinecraft->localplayers[getPad()]->inventory;
|
|
std::shared_ptr<ItemInstance> carried =
|
|
playerInventory->getCarried();
|
|
std::shared_ptr<ItemInstance> clicked =
|
|
m_menu->getSlot(currentIndex)->getItem();
|
|
if (clicked != NULL) {
|
|
playerInventory->setCarried(ItemInstance::clone(clicked));
|
|
carried = playerInventory->getCarried();
|
|
if (quickKeyHeld) {
|
|
carried->count = carried->getMaxStackSize();
|
|
}
|
|
m_creativeSlotX = m_iCurrSlotX;
|
|
m_creativeSlotY = m_iCurrSlotY;
|
|
m_eCurrSection = eSectionInventoryCreativeUsing;
|
|
m_eCurrTapState = eTapStateJump;
|
|
|
|
instantPlace = getEmptyInventorySlot(carried, m_inventorySlotX);
|
|
m_iCurrSlotX = m_inventorySlotX;
|
|
m_iCurrSlotY = m_inventorySlotY;
|
|
|
|
m_bCarryingCreativeItem = true;
|
|
}
|
|
}
|
|
}
|
|
if (instantPlace || eSection == eSectionInventoryCreativeUsing) {
|
|
if (instantPlace) {
|
|
setSectionSelectedSlot(eSectionInventoryCreativeUsing, m_iCurrSlotX,
|
|
m_iCurrSlotY);
|
|
currentIndex = getCurrentIndex(eSectionInventoryCreativeUsing);
|
|
buttonNum = 0;
|
|
quickKeyHeld = false;
|
|
}
|
|
m_menu->clicked(currentIndex, buttonNum,
|
|
quickKeyHeld ? AbstractContainerMenu::CLICK_QUICK_MOVE
|
|
: AbstractContainerMenu::CLICK_PICKUP,
|
|
pMinecraft->localplayers[getPad()]);
|
|
std::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);
|
|
|
|
if (m_bCarryingCreativeItem) {
|
|
m_inventorySlotX = m_iCurrSlotX;
|
|
m_inventorySlotY = m_iCurrSlotY;
|
|
m_eCurrSection = eSectionInventoryCreativeSelector;
|
|
m_eCurrTapState = eTapStateJump;
|
|
m_iCurrSlotX = m_creativeSlotX;
|
|
m_iCurrSlotY = m_creativeSlotY;
|
|
|
|
std::shared_ptr<Inventory> playerInventory =
|
|
pMinecraft->localplayers[getPad()]->inventory;
|
|
playerInventory->setCarried(nullptr);
|
|
m_bCarryingCreativeItem = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::IsSectionSlotList(ESceneSection eSection) {
|
|
switch (eSection) {
|
|
case eSectionInventoryCreativeUsing:
|
|
case eSectionInventoryCreativeSelector:
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::CanHaveFocus(ESceneSection eSection) {
|
|
switch (eSection) {
|
|
case eSectionInventoryCreativeUsing:
|
|
case eSectionInventoryCreativeSelector:
|
|
return true;
|
|
default:
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::getEmptyInventorySlot(
|
|
std::shared_ptr<ItemInstance> item, int& slotX) {
|
|
bool sameItemFound = false;
|
|
bool emptySlotFound = false;
|
|
// Jump to the slot with this item already on it, if we can stack more
|
|
for (unsigned int i = TabSpec::MAX_SIZE; i < TabSpec::MAX_SIZE + 9; ++i) {
|
|
std::shared_ptr<ItemInstance> slotItem = m_menu->getSlot(i)->getItem();
|
|
if (slotItem != NULL && slotItem->sameItem(item) &&
|
|
(slotItem->GetCount() + item->GetCount() <=
|
|
item->getMaxStackSize())) {
|
|
sameItemFound = true;
|
|
slotX = i - TabSpec::MAX_SIZE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!sameItemFound) {
|
|
// Find an empty slot
|
|
for (unsigned int i = TabSpec::MAX_SIZE; i < TabSpec::MAX_SIZE + 9;
|
|
++i) {
|
|
if (m_menu->getSlot(i)->getItem() == NULL) {
|
|
slotX = i - TabSpec::MAX_SIZE;
|
|
emptySlotFound = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return sameItemFound || emptySlotFound;
|
|
}
|
|
|
|
int IUIScene_CreativeMenu::getSectionStartOffset(ESceneSection eSection) {
|
|
int offset = 0;
|
|
switch (eSection) {
|
|
case eSectionInventoryCreativeSelector:
|
|
offset = 0;
|
|
break;
|
|
case eSectionInventoryCreativeUsing:
|
|
offset = TabSpec::MAX_SIZE;
|
|
break;
|
|
default:
|
|
assert(false);
|
|
break;
|
|
}
|
|
return offset;
|
|
}
|
|
|
|
bool IUIScene_CreativeMenu::overrideTooltips(
|
|
ESceneSection sectionUnderPointer,
|
|
std::shared_ptr<ItemInstance> itemUnderPointer, bool bIsItemCarried,
|
|
bool bSlotHasItem, bool bCarriedIsSameAsSlot, int iSlotStackSizeRemaining,
|
|
EToolTipItem& buttonA, EToolTipItem& buttonX, EToolTipItem& buttonY,
|
|
EToolTipItem& buttonRT) {
|
|
bool _override = false;
|
|
|
|
if (sectionUnderPointer == eSectionInventoryCreativeSelector) {
|
|
if (bSlotHasItem) {
|
|
buttonA = eToolTipPickUpGeneric;
|
|
buttonRT = eToolTipWhatIsThis;
|
|
|
|
if (itemUnderPointer->isStackable()) {
|
|
buttonY = eToolTipPickUpAll;
|
|
} else {
|
|
buttonY = eToolTipNone; // eToolTipPickUpGeneric;
|
|
}
|
|
}
|
|
} else if (sectionUnderPointer == eSectionInventoryCreativeUsing) {
|
|
buttonY = eToolTipNone;
|
|
}
|
|
buttonX = eToolTipClearQuickSelect;
|
|
_override = true;
|
|
|
|
return _override;
|
|
}
|