#include "IUIScene_CreativeMenu.h" #include "stdafx.h" #include "IUIScene_CreativeMenu.h" #include "UI.h" #include "../../Minecraft.h" #include "../../MultiPlayerLocalPlayer.h" #include "../../../Minecraft.World/net.minecraft.world.inventory.h" #include "../../../Minecraft.World/net.minecraft.world.level.tile.h" #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 = nullptr; vector< shared_ptr > IUIScene_CreativeMenu::categoryGroups[eCreativeInventoryGroupsCount]; #define ITEM(id) list->push_back( shared_ptr(new ItemInstance(id, 1, 0)) ); #define ITEM_AUX(id, aux) list->push_back( shared_ptr(new ItemInstance(id, 1, aux)) ); #define DEF(index) list = &categoryGroups[index]; void IUIScene_CreativeMenu::_wipeCreativeItems() { for (int i = 0; i < eCreativeInventoryGroupsCount; i++) { IUIScene_CreativeMenu::categoryGroups[i].clear(); } } void IUIScene_CreativeMenu::loadFromLocal() { IUIScene_CreativeMenu::_wipeCreativeItems(); IUIScene_CreativeMenu::staticCtor(); } void IUIScene_CreativeMenu::loadFromPacket(byteArray packetData) { ByteArrayInputStream bais(packetData); DataInputStream input(&bais); IUIScene_CreativeMenu::_wipeCreativeItems(); for (int i = 0; i < eCreativeInventoryGroupsCount; i++) { int itemCount = input.readShort(); for (int j = 0; j < itemCount; j++) { int itemId = input.readShort(); int itemAux = input.readShort(); shared_ptr item = std::make_shared(itemId, 1, 0); item->setRawAuxValue(itemAux); item->tag = Packet::readNbt(&input); IUIScene_CreativeMenu::categoryGroups[i].emplace_back(item); } } } std::shared_ptr IUIScene_CreativeMenu::createUpdatePacket() { ByteArrayOutputStream baos; DataOutputStream dos(&baos); for (int i = 0; i < eCreativeInventoryGroupsCount; i++) { dos.writeShort(IUIScene_CreativeMenu::categoryGroups[i].size()); for (shared_ptr& item : IUIScene_CreativeMenu::categoryGroups[i]) { dos.writeShort(item->id); dos.writeShort(item->getAuxValue()); Packet::writeNbt(item->tag, &dos); } } return std::make_shared(CustomPayloadPacket::UPDATE_CREATIVE_REGISTRY, baos.toByteArray()); } void IUIScene_CreativeMenu::staticCtor() { vector< shared_ptr > *list; // Building Blocks DEF(eCreativeInventory_BuildingBlocks) ITEM(Tile::stone_Id) ITEM(Tile::grass_Id) ITEM_AUX(Tile::dirt_Id, 0) 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_AUX(Tile::sand_Id, SandTile::RED_SAND) ITEM(Tile::red_sandstone_Id) ITEM_AUX(Tile::red_sandstone_Id, RedSandStoneTile::TYPE_SMOOTHSIDE) ITEM_AUX(Tile::red_sandstone_Id, RedSandStoneTile::TYPE_HEIROGLYPHS) ITEM_AUX(Tile::stone_Id, StoneTile::GRANITE) ITEM_AUX(Tile::stone_Id, StoneTile::POLISHED_GRANITE) ITEM_AUX(Tile::stone_Id, StoneTile::ANDESITE) ITEM_AUX(Tile::stone_Id, StoneTile::POLISHED_ANDESITE) ITEM_AUX(Tile::stone_Id, StoneTile::DIORITE) ITEM_AUX(Tile::stone_Id, StoneTile::POLISHED_DIORITE) ITEM(Tile::coal_block_Id) ITEM(Tile::gold_block_Id) ITEM(Tile::iron_block_Id) ITEM(Tile::lapis_block_Id) ITEM(Tile::diamond_block_Id) ITEM(Tile::emerald_block_Id) ITEM_AUX(Tile::quartz_block_Id,QuartzBlockTile::TYPE_DEFAULT) ITEM(Tile::coal_ore_Id) ITEM(Tile::lapis_ore_Id) ITEM(Tile::diamond_ore_Id) ITEM(Tile::redstone_ore_Id) ITEM(Tile::iron_ore_Id) ITEM(Tile::gold_ore_Id) ITEM(Tile::emerald_ore_Id) ITEM(Tile::quartz_ore_Id) ITEM(Tile::bedrock_Id) ITEM_AUX(Tile::planks_Id,0) ITEM_AUX(Tile::planks_Id,TreeTile::SPRUCE_TRUNK) ITEM_AUX(Tile::planks_Id,TreeTile::BIRCH_TRUNK) ITEM_AUX(Tile::planks_Id,TreeTile::JUNGLE_TRUNK) ITEM_AUX(Tile::planks_Id, TreeTile::ACACIA_TRUNK) ITEM_AUX(Tile::planks_Id, TreeTile::DARK_TRUNK) ITEM_AUX(Tile::log_Id, 0) ITEM_AUX(Tile::log_Id, TreeTile::SPRUCE_TRUNK) ITEM_AUX(Tile::log_Id, TreeTile::BIRCH_TRUNK) ITEM_AUX(Tile::log_Id, TreeTile::JUNGLE_TRUNK) ITEM_AUX(Tile::log2_Id, TreeTile2::ACACIA_TRUNK) ITEM_AUX(Tile::log2_Id, TreeTile2::DARK_TRUNK) ITEM(Tile::gravel_Id) ITEM(Tile::brick_block_Id) ITEM(Tile::mossy_cobblestone_Id) ITEM(Tile::obsidian_Id) ITEM(Tile::clay) ITEM(Tile::ice_Id) ITEM(Tile::packed_ice_Id) ITEM(Tile::snow_Id) ITEM(Tile::netherrack_Id) ITEM(Tile::soul_sand_Id) ITEM(Tile::glowstone_Id) ITEM(Tile::sea_lantern_Id) ITEM_AUX(Tile::prismarine_Id, PrismarineTile::TYPE_DEFAULT) ITEM_AUX(Tile::prismarine_Id, PrismarineTile::TYPE_BRICKS) ITEM_AUX(Tile::prismarine_Id, PrismarineTile::TYPE_DARK) ITEM(Tile::slime_Id) ITEM(Tile::fence_Id) // TU25 ITEM(Tile::spruce_fence_Id) ITEM(Tile::birch_fence_Id) ITEM(Tile::jungle_fence_Id) ITEM(Tile::acacia_fence_Id) ITEM(Tile::dark_oak_fence_Id) ITEM(Tile::nether_brick_fence_Id) ITEM(Tile::iron_bars_Id) ITEM_AUX(Tile::cobblestone_wall_Id, WallTile::TYPE_NORMAL) ITEM_AUX(Tile::cobblestone_wall_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::monster_egg_Id,StoneMonsterTile::HOST_ROCK) ITEM_AUX(Tile::monster_egg_Id,StoneMonsterTile::HOST_COBBLE) ITEM_AUX(Tile::monster_egg_Id,StoneMonsterTile::HOST_STONEBRICK) ITEM(Tile::mycelium_Id) ITEM_AUX(Tile::dirt_Id, DirtTile::COARSE_DIRT) ITEM_AUX(Tile::dirt_Id, DirtTile::PODZOL) ITEM(Tile::nether_brick_Id) ITEM(Tile::end_stone_Id) ITEM_AUX(Tile::quartz_block_Id,QuartzBlockTile::TYPE_CHISELED) ITEM_AUX(Tile::quartz_block_Id,QuartzBlockTile::TYPE_LINES_Y) ITEM(Tile::trapdoor_Id) ITEM(Tile::iron_trapdoor_Id) ITEM(Tile::fence_gate_Id) // TU25 ITEM(Tile::spruce_fence_gate_Id) ITEM(Tile::birch_fence_gate_Id) ITEM(Tile::jungle_fence_gate_Id) ITEM(Tile::acacia_fence_gate_Id) ITEM(Tile::dark_oak_fence_gate_Id) ITEM(Item::wooden_door_Id) ITEM(Item::iron_door_Id) // TU25 ITEM(Item::spruce_door_Id) ITEM(Item::birch_door_Id) ITEM(Item::jungle_door_Id) ITEM(Item::acacia_door_Id) ITEM(Item::dark_oak_door_Id) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::STONE_SLAB) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::SAND_SLAB) // AP - changed oak slab to be wood because it wouldn't burn // ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::WOOD_SLAB) ITEM_AUX(Tile::wooden_slab_Id,0) ITEM_AUX(Tile::wooden_slab_Id, TreeTile::SPRUCE_TRUNK) ITEM_AUX(Tile::wooden_slab_Id,TreeTile::BIRCH_TRUNK) ITEM_AUX(Tile::wooden_slab_Id,TreeTile::JUNGLE_TRUNK) // TU25 -- added acacia and dark oak ITEM_AUX(Tile::wooden_slab_Id, TreeTile::ACACIA_TRUNK) ITEM_AUX(Tile::wooden_slab_Id, TreeTile::DARK_TRUNK) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::COBBLESTONE_SLAB) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::BRICK_SLAB) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::SMOOTHBRICK_SLAB) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::NETHERBRICK_SLAB) ITEM_AUX(Tile::stone_slab_Id,StoneSlabTile::QUARTZ_SLAB) ITEM_AUX(Tile::stone_slab2_Id ,StoneSlabTile2::RED_SANDSTONE_SLAB) ITEM(Tile::oak_stairs_Id) ITEM(Tile::birch_stairs_Id) ITEM(Tile::spruce_stairs_Id) ITEM(Tile::jungle_stairs_Id) ITEM(Tile::acacia_stairs_Id) ITEM(Tile::dark_oak_stairs_Id) ITEM(Tile::stone_stairs_Id) ITEM(Tile::brick_stairs_Id) ITEM(Tile::stone_brick_stairs_Id) ITEM(Tile::nether_brick_stairs_Id) ITEM(Tile::sandstone_stairs_Id) ITEM(Tile::stairs_red_sandstone) ITEM(Tile::quartz_stairs_Id) ITEM(Tile::hardened_clay_Id) ITEM_AUX(Tile::stained_hardened_clay_Id,14) // Red ITEM_AUX(Tile::stained_hardened_clay_Id,1) // Orange ITEM_AUX(Tile::stained_hardened_clay_Id,4) // Yellow ITEM_AUX(Tile::stained_hardened_clay_Id,5) // Lime ITEM_AUX(Tile::stained_hardened_clay_Id,3) // Light Blue ITEM_AUX(Tile::stained_hardened_clay_Id,9) // Cyan ITEM_AUX(Tile::stained_hardened_clay_Id,11) // Blue ITEM_AUX(Tile::stained_hardened_clay_Id,10) // Purple ITEM_AUX(Tile::stained_hardened_clay_Id,2) // Magenta ITEM_AUX(Tile::stained_hardened_clay_Id,6) // Pink ITEM_AUX(Tile::stained_hardened_clay_Id,0) // White ITEM_AUX(Tile::stained_hardened_clay_Id,8) // Light Gray ITEM_AUX(Tile::stained_hardened_clay_Id,7) // Gray ITEM_AUX(Tile::stained_hardened_clay_Id,15) // Black ITEM_AUX(Tile::stained_hardened_clay_Id,13) // Green ITEM_AUX(Tile::stained_hardened_clay_Id,12) // Brown // 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_AUX(Tile::sponge_Id, 0) // dry sponge ITEM_AUX(Tile::sponge_Id, 1) // wet sponge ITEM(Tile::melon_block_Id) ITEM(Tile::pumpkin_Id) ITEM(Tile::lit_pumpkin_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::sapling_Id, Sapling::TYPE_ACACIA) ITEM_AUX(Tile::sapling_Id, Sapling::TYPE_DARK_OAK) 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_AUX(Tile::leaves2_Id, LeafTile2::ACACIA_LEAF) ITEM_AUX(Tile::leaves2_Id, LeafTile2::DARK_OAK_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::yellow_flower_Id) ITEM(Tile::red_flower_Id) ITEM_AUX(Tile::red_flower_Id, Rose::BLUE_ORCHID) ITEM_AUX(Tile::red_flower_Id, Rose::ALLIUM) ITEM_AUX(Tile::red_flower_Id, Rose::AZURE_BLUET) ITEM_AUX(Tile::red_flower_Id, Rose::RED_TULIP) ITEM_AUX(Tile::red_flower_Id, Rose::ORANGE_TULIP) ITEM_AUX(Tile::red_flower_Id, Rose::WHITE_TULIP) ITEM_AUX(Tile::red_flower_Id, Rose::PINK_TULIP) ITEM_AUX(Tile::red_flower_Id, Rose::OXEYE_DAISY) ITEM(Tile::double_plant_Id) ITEM_AUX(Tile::double_plant_Id, TallGrass2::LILAC) ITEM_AUX(Tile::double_plant_Id, TallGrass2::TALL_GRASS) ITEM_AUX(Tile::double_plant_Id, TallGrass2::LARGE_FERN) ITEM_AUX(Tile::double_plant_Id, TallGrass2::ROSE_BUSH) ITEM_AUX(Tile::double_plant_Id, TallGrass2::PEONY) ITEM(Tile::mushroom_brown_Id) ITEM(Tile::mushroom_red_Id) ITEM(Tile::cactus_Id) ITEM(Tile::snow_layer_Id) // 4J-PB - Already got sugar cane in Materials ITEM_11(Tile::reeds_Id) ITEM(Tile::web_Id) ITEM(Tile::glass_pane_Id) ITEM(Tile::glass_Id) ITEM(Item::painting_Id) ITEM(Item::item_frame_Id) ITEM(Item::standing_sign_Id) ITEM(Tile::bookshelf_Id) ITEM(Item::flower_pot_Id) ITEM(Tile::hay_block_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::carpet_Id,14) // Red ITEM_AUX(Tile::carpet_Id,1) // Orange ITEM_AUX(Tile::carpet_Id,4) // Yellow ITEM_AUX(Tile::carpet_Id,5) // Lime ITEM_AUX(Tile::carpet_Id,3) // Light Blue ITEM_AUX(Tile::carpet_Id,9) // Cyan ITEM_AUX(Tile::carpet_Id,11) // Blue ITEM_AUX(Tile::carpet_Id,10) // Purple ITEM_AUX(Tile::carpet_Id,2) // Magenta ITEM_AUX(Tile::carpet_Id,6) // Pink ITEM_AUX(Tile::carpet_Id,0) // White ITEM_AUX(Tile::carpet_Id,8) // Light Gray ITEM_AUX(Tile::carpet_Id,7) // Gray ITEM_AUX(Tile::carpet_Id,15) // Black ITEM_AUX(Tile::carpet_Id,13) // Green ITEM_AUX(Tile::carpet_Id,12) // Brown 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 #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); } #endif // Redstone DEF(eCreativeInventory_Redstone) ITEM(Tile::dispenser_Id) ITEM(Tile::noteblock_Id) ITEM(Tile::piston_Id) ITEM(Tile::sticky_piston_Id) ITEM(Tile::tnt_Id) ITEM(Tile::lever_Id) ITEM(Tile::stone_button_Id) ITEM(Tile::wooden_button_Id) ITEM(Tile::stone_pressure_plate_Id) ITEM(Tile::wooden_pressure_plate_Id) ITEM(Item::redstone_Id) ITEM(Tile::redstone_block_Id) ITEM(Tile::redstone_torch_Id) ITEM(Item::repeater_Id) ITEM(Tile::redstone_lamp_Id) ITEM(Tile::tripwire_hook_Id) ITEM(Tile::daylight_detector_Id) ITEM(Tile::dropper_Id) ITEM(Tile::hopper_Id) ITEM(Item::comparator_Id) ITEM(Tile::chest_trap_Id) ITEM(Tile::heavy_weighted_pressure_plate_Id) ITEM(Tile::light_weighted_pressure_plate_Id) // Transport DEF(eCreativeInventory_Transport) ITEM(Tile::rail_Id) ITEM(Tile::golden_rail_Id) ITEM(Tile::detector_rail_Id) ITEM(Tile::activator_rail_Id) ITEM(Tile::ladder_Id) ITEM(Item::minecart_Id) ITEM(Item::chest_minecart_Id) ITEM(Item::furnace_minecart_Id) ITEM(Item::hopper_minecart_Id) ITEM(Item::tnt_minecart_Id) ITEM(Item::saddle_Id) ITEM(Item::boat_Id) ITEM(Item::elytra_Id) // Miscellaneous DEF(eCreativeInventory_Misc) ITEM(Tile::chest_Id) ITEM(Tile::ender_chest_Id) ITEM(Tile::crafting_table_Id) ITEM(Tile::furnace_Id) ITEM(Item::brewing_stand_Id) ITEM(Tile::enchanting_table_Id) ITEM(Tile::beacon_Id) ITEM(Tile::end_portal_frame_Id) ITEM(Tile::jukebox_Id) ITEM(Tile::anvil_Id); ITEM(Item::bed_Id) ITEM(Item::bucket_Id) ITEM(Item::lava_bucket_Id) ITEM(Item::water_bucket_Id) ITEM(Item::milk_bucket_Id) ITEM(Item::cauldron_Id) ITEM(Item::snowball_Id) ITEM(Item::paper_Id) ITEM(Item::book_Id) //TU25 ITEM(Item::writable_book_Id) ITEM(Item::ender_pearl_Id) ITEM(Item::eye_of_ender_Id) ITEM(Item::name_tag_Id) ITEM(Item::nether_star_Id) ITEM_AUX(Item::spawn_egg_Id, 50); // Creeper ITEM_AUX(Item::spawn_egg_Id, 51); // Skeleton ITEM_AUX(Item::spawn_egg_Id, 52); // Spider ITEM_AUX(Item::spawn_egg_Id, 54); // Zombie ITEM_AUX(Item::spawn_egg_Id, 55); // Slime ITEM_AUX(Item::spawn_egg_Id, 56); // Ghast ITEM_AUX(Item::spawn_egg_Id, 57); // Zombie Pigman ITEM_AUX(Item::spawn_egg_Id, 58); // Enderman ITEM_AUX(Item::spawn_egg_Id, 59); // Cave Spider ITEM_AUX(Item::spawn_egg_Id, 60); // Silverfish ITEM_AUX(Item::spawn_egg_Id, 61); // Blaze ITEM_AUX(Item::spawn_egg_Id, 62); // Magma Cube ITEM_AUX(Item::spawn_egg_Id, 65); // Bat ITEM_AUX(Item::spawn_egg_Id, 66); // Witch ITEM_AUX(Item::spawn_egg_Id, 67); // Endermite ITEM_AUX(Item::spawn_egg_Id, 68); // Guardian ITEM_AUX(Item::spawn_egg_Id, 4); // Elder Guardian ITEM_AUX(Item::spawn_egg_Id, 90); // Pig ITEM_AUX(Item::spawn_egg_Id, 91); // Sheep ITEM_AUX(Item::spawn_egg_Id, 92); // Cow ITEM_AUX(Item::spawn_egg_Id, 93); // Chicken ITEM_AUX(Item::spawn_egg_Id, 94); // Squid ITEM_AUX(Item::spawn_egg_Id, 95); // Wolf ITEM_AUX(Item::spawn_egg_Id, 96); // Mooshroom ITEM_AUX(Item::spawn_egg_Id, 98); // Ozelot ITEM_AUX(Item::spawn_egg_Id, 100); // Horse ITEM_AUX(Item::spawn_egg_Id, 100 | ((EntityHorse::TYPE_DONKEY + 1) << 12) ); // Donkey ITEM_AUX(Item::spawn_egg_Id, 100 | ((EntityHorse::TYPE_MULE + 1) << 12)); // Mule ITEM_AUX(Item::spawn_egg_Id, 120); // Villager ITEM_AUX(Item::spawn_egg_Id, 101); // Rabbit Brown ITEM(Item::record_13_Id) ITEM(Item::record_cat_Id) ITEM(Item::record_blocks_Id) ITEM(Item::record_chirp_Id) ITEM(Item::record_far_Id) ITEM(Item::record_mall_Id) ITEM(Item::record_mellohi_Id) ITEM(Item::record_stal_Id) ITEM(Item::record_strad_Id) ITEM(Item::record_ward_Id) ITEM(Item::record_11_Id) ITEM(Item::record_wait_Id) 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); DEF(eCreativeInventory_ArtToolsMisc) if(app.DebugSettingsOn()) { ITEM_AUX(Item::spawn_egg_Id, 100 | ((EntityHorse::TYPE_SKELETON + 1) << 12)); // Skeleton ITEM_AUX(Item::spawn_egg_Id, 100 | ((EntityHorse::TYPE_UNDEAD + 1) << 12)); // Zombie ITEM_AUX(Item::spawn_egg_Id, 98 | ((Ocelot::TYPE_BLACK + 1) << 12)); ITEM_AUX(Item::spawn_egg_Id, 98 | ((Ocelot::TYPE_RED + 1) << 12)); ITEM_AUX(Item::spawn_egg_Id, 98 | ((Ocelot::TYPE_SIAMESE + 1) << 12)); ITEM_AUX(Item::spawn_egg_Id, 52 | (2 << 12)); // Spider-Jockey ITEM_AUX(Item::spawn_egg_Id, 63); // Enderdragon } // Food DEF(eCreativeInventory_Food) ITEM(Item::apple_Id) ITEM(Item::golden_apple_Id) ITEM_AUX(Item::golden_apple_Id,1) // Enchanted ITEM(Item::melon_block_Id) ITEM(Item::mushroom_stew_Id) ITEM(Item::rabbit_stew_Id) ITEM(Item::bread_Id) ITEM(Item::cake_Id) ITEM(Item::cookie_Id) ITEM(Item::cooked_fish_Id) ITEM(Item::fish_Id) ITEM_AUX(Item::cooked_fish_Id, 1) ITEM_AUX(Item::fish_Id, 1) ITEM_AUX(Item::fish_Id, 2) ITEM_AUX(Item::fish_Id, 3) ITEM(Item::cooked_porkchop_Id) ITEM(Item::porkchop_Id) ITEM(Item::cooked_beef_Id) ITEM(Item::beef_Id) ITEM(Item::chicken_Id) ITEM(Item::cooked_chicken_Id) ITEM(Item::mutton_Id) ITEM(Item::cooked_mutton_Id) ITEM(Item::rabbit_Id) ITEM(Item::cooked_rabbit_Id) ITEM(Item::rotten_flesh_Id) ITEM(Item::spider_eye_Id) ITEM(Item::potato_Id) ITEM(Item::baked_potato_Id) ITEM(Item::poisonous_potato_Id) ITEM(Item::carrot_Id) ITEM(Item::golden_carrot_Id) ITEM(Item::pumpkin_pie_Id) // Tools, Armour and Weapons (Complete) DEF(eCreativeInventory_ToolsArmourWeapons) ITEM(Item::compass_Id) ITEM(Item::leather_helmet_Id) ITEM(Item::leather_chestplate_Id) ITEM(Item::leather_leggings_Id) ITEM(Item::leather_boots_Id) ITEM(Item::wooden_sword_Id) ITEM(Item::wooden_shovel_Id) ITEM(Item::wooden_pickaxe_Id) ITEM(Item::wooden_axe_Id) ITEM(Item::wooden_hoe_Id) ITEM(Item::map_Id) ITEM(Item::chainmail_helmet_Id) ITEM(Item::chainmail_chestplate_Id) ITEM(Item::chainmail_leggings_Id) ITEM(Item::chainmail_boots_Id) ITEM(Item::stone_sword_Id) ITEM(Item::stone_shovel_Id) ITEM(Item::stone_pickaxe_Id) ITEM(Item::stone_axe_Id) ITEM(Item::stone_hoe_Id) ITEM(Item::bow_Id) ITEM(Item::iron_helmet_Id) ITEM(Item::iron_chestplate_Id) ITEM(Item::iron_leggings_Id) ITEM(Item::iron_boots_Id) ITEM(Item::iron_sword_Id) ITEM(Item::iron_shovel_Id) ITEM(Item::iron_pickaxe_Id) ITEM(Item::iron_axe_Id) ITEM(Item::iron_hoe_Id) ITEM(Item::arrow_Id) ITEM(Item::golden_helmet_Id) ITEM(Item::golden_chestplate_Id) ITEM(Item::golden_leggings_Id) ITEM(Item::golden_boots_Id) ITEM(Item::golden_sword_Id) ITEM(Item::golden_shovel_Id) ITEM(Item::golden_pickaxe_Id) ITEM(Item::golden_axe_Id) ITEM(Item::golden_hoe_Id) ITEM(Item::flint_and_steel_Id) ITEM(Item::diamond_helmet_Id) ITEM(Item::diamond_chestplate_Id) ITEM(Item::diamond_leggings_Id) ITEM(Item::diamond_boots_Id) ITEM(Item::diamond_sword_Id) ITEM(Item::diamond_shovel_Id) ITEM(Item::diamond_pickaxe_Id) ITEM(Item::diamond_axe_Id) ITEM(Item::diamond_hoe_Id) ITEM(Item::fire_charge_Id) ITEM(Item::clock_Id) ITEM(Item::shears_Id) ITEM(Item::fishing_rod_Id) ITEM(Item::carrot_on_a_stick_Id) ITEM(Item::lead_Id) ITEM(Item::diamond_horse_armor_Id) ITEM(Item::golden_horse_armor_Id) ITEM(Item::iron_horse_armor_Id) ITEM(Item::armor_stand_Id) for(unsigned int i = 0; i < Enchantment::enchantments.length; ++i) { Enchantment *enchantment = Enchantment::enchantments[i]; if (enchantment == nullptr || enchantment->category == nullptr) continue; list->push_back(Item::enchanted_book->createForEnchantment(new EnchantmentInstance(enchantment, enchantment->getMaxLevel()))); } #ifndef _CONTENT_PACKAGE if(app.DebugSettingsOn()) { shared_ptr debugSword = std::make_shared(Item::diamond_sword_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) ITEM_AUX(Item::coal_Id,1) ITEM(Item::diamond_Id) ITEM(Item::emerald_Id) ITEM(Item::iron_ingot_Id) ITEM(Item::gold_ingot_Id) ITEM(Item::quartz_Id) ITEM(Item::brick_Id) ITEM(Item::nether_brick_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::rabbit_hide_Id) ITEM(Item::gunpowder_Id) ITEM(Item::clay_Id) ITEM(Item::glowstone_dust_Id) ITEM(Item::prismarine_crystals_Id) ITEM(Item::prismarine_shard_Id) ITEM(Item::wheat_seeds_Id) ITEM(Item::melon_seeds_Id) ITEM(Item::pumpkin_seeds_Id) ITEM(Item::wheat_Id) ITEM(Item::reeds_Id) ITEM(Item::egg_Id) ITEM(Item::sugar_Id) ITEM(Item::slime_ball_Id) ITEM(Item::blaze_rod_Id) ITEM(Item::gold_nugget_Id) ITEM(Item::netherwart_seeds_Id) ITEM_AUX(Item::dye_Id,1) // Red ITEM_AUX(Item::dye_Id,14) // Orange ITEM_AUX(Item::dye_Id,11) // Yellow ITEM_AUX(Item::dye_Id,10) // Lime ITEM_AUX(Item::dye_Id,12) // Light Blue ITEM_AUX(Item::dye_Id,6) // Cyan ITEM_AUX(Item::dye_Id,4) // Blue ITEM_AUX(Item::dye_Id,5) // Purple ITEM_AUX(Item::dye_Id,13) // Magenta ITEM_AUX(Item::dye_Id,9) // Pink ITEM_AUX(Item::dye_Id,15) // Bone Meal ITEM_AUX(Item::dye_Id,7) // Light gray ITEM_AUX(Item::dye_Id,8) // Gray ITEM_AUX(Item::dye_Id,0) // black (ink sac) ITEM_AUX(Item::dye_Id,2) // Green ITEM_AUX(Item::dye_Id,3) // Brown // Brewing (TODO) DEF(eCreativeInventory_Brewing) ITEM(Item::experience_bottle_Id) // 4J Stu - Anything else added here also needs to be added to the key handler below ITEM(Item::ghast_tear_Id) ITEM(Item::fermented_spider_eye_Id) ITEM(Item::blaze_powder_Id) ITEM(Item::magma_cream_Id) ITEM(Item::speckled_melon_block_Id) ITEM(Item::rabbit_foot_Id) ITEM(Item::glass_bottle_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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_WATERBREATHING)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, 0, MASK_JUMPBOOST)) // end of tu31 potions 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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_WATERBREATHING)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, 0, MASK_JUMPBOOST)) // end of tu31 potions 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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_WATERBREATHING)) // i have no idea why water breathing had a level 2 version in the creative menu ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2, MASK_JUMPBOOST)) // end of tu31 potions //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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2, MASK_WATERBREATHING)) // i have no idea why water breathing had a level 2 version in the creative menu ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2, MASK_JUMPBOOST)) // end of tu31 potions //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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_WATERBREATHING)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_EXTENDED, MASK_JUMPBOOST)) // end of tu31 potions //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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_WATERBREATHING)) ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_EXTENDED, MASK_JUMPBOOST)) // end of tu31 potions //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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED, MASK_WATERBREATHING)) // i have ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(0, MASK_LEVEL2EXTENDED, MASK_JUMPBOOST)) // end of tu31 potions 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)) // tu31 potions ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2EXTENDED, MASK_WATERBREATHING)) // i have no idea why water breathing had a level 2 version in the creative menu ITEM_AUX(Item::potion_Id,MACRO_MAKEPOTION_AUXVAL(MASK_SPLASH, MASK_LEVEL2EXTENDED, MASK_JUMPBOOST)) // end of tu31 potions if (specs == nullptr) { 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); #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, nullptr, 1, debugDecorationsGroup); #else ECreative_Inventory_Groups decorationsGroup[] = { eCreativeInventory_Decoration }; 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); ECreative_Inventory_Groups materialsGroup[] = { eCreativeInventory_Materials }; 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); ECreative_Inventory_Groups toolsGroup[] = { eCreativeInventory_ToolsArmourWeapons }; 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 }; // 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); } // 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 }; ECreative_Inventory_Groups debugMiscGroup[] = { eCreativeInventory_ArtToolsMisc }; specs[eCreativeInventoryTab_Misc] = new TabSpec(L"Misc", IDS_GROUPNAME_MISCELLANEOUS, 1, miscGroup, 0, nullptr, 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() { 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]); } 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, int debugGroupsCount /*= 0*/, ECreative_Inventory_Groups *debugGroups /*= nullptr*/) : m_icon(icon), m_descriptionId(descriptionId), m_staticGroupsCount(staticGroupsCount), m_dynamicGroupsCount(dynamicGroupsCount), m_debugGroupsCount(debugGroupsCount) { m_pages = 0; m_staticGroupsA = nullptr; 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_debugGroupsA = nullptr; 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 = nullptr; if(dynamicGroupsCount > 0 && dynamicGroups != nullptr) { 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 = columns; const int totalRows = (m_staticItems + columns - 1) / columns; m_pages = std::max(1, totalRows - 5 + 1); } IUIScene_CreativeMenu::TabSpec::~TabSpec() { if(m_staticGroupsA != nullptr) delete [] m_staticGroupsA; if(m_dynamicGroupsA != nullptr) delete [] m_dynamicGroupsA; if(m_debugGroupsA != nullptr) delete [] m_debugGroupsA; } 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 != nullptr) { for (auto 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; // 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(); if( currentIndex + size <= startIndex) { currentIndex += size; continue; } displayStatic = true; currentItem = size - ((currentIndex + size) - startIndex); break; } int lastStaticPageCount = currentIndex; while(lastStaticPageCount > m_staticPerPage) lastStaticPageCount -= m_staticPerPage; if(displayStatic) { 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; } } } } #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; 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) { Slot *slot = menu->getSlot(lastSlotIndex); slot->remove(1); } } unsigned int IUIScene_CreativeMenu::TabSpec::getPageCount() { #ifndef _CONTENT_PACKAGE if(app.DebugArtToolsOn()) { int totalItems = m_staticItems + m_debugItems; const int totalRows = (totalItems + columns - 1) / columns; return std::max(1, totalRows - rows + 1); } else #endif { return m_pages; } } // 4J JEV - Item Picker Menu IUIScene_CreativeMenu::ItemPickerMenu::ItemPickerMenu( shared_ptr smp, shared_ptr inv ) : AbstractContainerMenu() { inventory = inv; creativeContainer = smp; //int startLength = slots->size(); Slot *slot = nullptr; 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(shared_ptr 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; 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; 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) { shared_ptr newItem = m_menu->getSlot(i)->getItem(); if(newItem != nullptr) { m_menu->getSlot(i)->set(nullptr); // call this function to synchronize multiplayer item bar pMinecraft->localgameModes[iPad]->handleCreativeModeItemAdd(nullptr, i - static_cast(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(); shared_ptr playerInventory = pMinecraft->localplayers[iPad]->inventory; if (playerInventory->getCarried() != nullptr) { if (buttonNum == 0) { pMinecraft->localgameModes[iPad]->handleCreativeModeItemDrop(playerInventory->getCarried()); playerInventory->setCarried(nullptr); } if (buttonNum == 1) { shared_ptr 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 = static_cast(m_curTab + dir); if (tab < 0) tab = static_cast(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: { int pageStep = 1; m_tabPage[m_curTab] += pageStep; 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: { int pageStep = 1; m_tabPage[m_curTab] -= pageStep; 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) { shared_ptr playerInventory = pMinecraft->localplayers[getPad()]->inventory; shared_ptr carried = playerInventory->getCarried(); shared_ptr clicked = m_menu->getSlot(currentIndex)->getItem(); if (clicked != nullptr) { playerInventory->setCarried(ItemInstance::clone(clicked)); carried = playerInventory->getCarried(); if (quickKeyHeld == TRUE) { 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()]); shared_ptr newItem = m_menu->getSlot(currentIndex)->getItem(); // call this function to synchronize multiplayer item bar pMinecraft->localgameModes[getPad()]->handleCreativeModeItemAdd(newItem, currentIndex - static_cast(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; shared_ptr 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; } return false; } bool IUIScene_CreativeMenu::CanHaveFocus( ESceneSection eSection ) { switch( eSection ) { case eSectionInventoryCreativeUsing: case eSectionInventoryCreativeSelector: return true; } return false; } bool IUIScene_CreativeMenu::getEmptyInventorySlot(shared_ptr 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) { shared_ptr slotItem = m_menu->getSlot(i)->getItem(); if( slotItem != nullptr && slotItem->sameItemWithTags(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() == nullptr ) { 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, shared_ptr itemUnderPointer, bool bIsItemCarried, bool bSlotHasItem, bool bCarriedIsSameAsSlot, int iSlotStackSizeRemaining, EToolTipItem &buttonA, EToolTipItem &buttonX, EToolTipItem &buttonY, EToolTipItem &buttonRT, EToolTipItem &buttonBack) { bool _override = false; if(sectionUnderPointer == eSectionInventoryCreativeSelector) { if(bSlotHasItem) { buttonA = eToolTipPickUpGeneric; if(itemUnderPointer->isStackable()) { buttonY = eToolTipPickUpAll; } else { buttonY = eToolTipNone; //eToolTipPickUpGeneric; } } } else if(sectionUnderPointer == eSectionInventoryCreativeUsing) { buttonY = eToolTipNone; } buttonX = eToolTipClearQuickSelect; _override = true; return _override; } void IUIScene_CreativeMenu::BuildFirework(vector > *list, byte type, int color, int sulphur, bool flicker, bool trail, int fadeColor/*= -1*/) { ///////////////////////////////// // Create firecharge ///////////////////////////////// CompoundTag *expTag = new CompoundTag(FireworksItem::TAG_EXPLOSION); vector 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(static_cast(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 colors; colors.push_back(DyePowderItem::COLOR_RGB[fadeColor]); intArray colorArray(static_cast(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 firework; { firework = std::make_shared(Item::fireworks); CompoundTag *itemTag = new CompoundTag(); CompoundTag *fireTag = new CompoundTag(FireworksItem::TAG_FIREWORKS); ListTag *expTags = new ListTag(FireworksItem::TAG_EXPLOSIONS); expTags->add(expTag); fireTag->put(FireworksItem::TAG_EXPLOSIONS, expTags); fireTag->putByte(FireworksItem::TAG_FLIGHT, static_cast(sulphur)); itemTag->put(FireworksItem::TAG_FIREWORKS, fireTag); firework->setTag(itemTag); } list->push_back(firework); }