diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/Item.h | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/Item.h')
| -rw-r--r-- | Minecraft.World/Item.h | 718 |
1 files changed, 718 insertions, 0 deletions
diff --git a/Minecraft.World/Item.h b/Minecraft.World/Item.h new file mode 100644 index 00000000..727fc661 --- /dev/null +++ b/Minecraft.World/Item.h @@ -0,0 +1,718 @@ +#pragma once + +using namespace std; + +#include "Container.h" +#include "UseAnim.h" +#include "Rarity.h" + +class MapItem; +class Mob; +class Player; +class Random; +class Level; +class ShearsItem; +class PotionItem; +class HitResult; +class IconRegister; +class Icon; +class ArmorItem; +class BowItem; +class FishingRodItem; +class EnchantedBookItem; + +#define ITEM_ICON_COLUMNS 16 + + +class Item : public enable_shared_from_this<Item> +{ +public: + static const int ITEM_NUM_COUNT = 32000; + + static void staticCtor(); + static void staticInit(); + + // 4J-PB - added for new crafting menu + enum + { + eMaterial_undefined=0, + eMaterial_wood, + eMaterial_stone, + eMaterial_iron, + eMaterial_gold, + eMaterial_diamond, + eMaterial_cloth, + eMaterial_chain, // 4J Stu - It's available in creative in 1.8 + eMaterial_detector, + eMaterial_lapis, + eMaterial_music, + eMaterial_dye, + eMaterial_sand, + eMaterial_brick, + eMaterial_clay, + eMaterial_snow, + eMaterial_bow, + eMaterial_arrow, + eMaterial_compass, + eMaterial_clock, + eMaterial_map, + eMaterial_pumpkin, + eMaterial_glowstone, + eMaterial_water, + eMaterial_trap, + eMaterial_flintandsteel, + eMaterial_shears, + eMaterial_piston, + eMaterial_stickypiston, + eMaterial_gate, + eMaterial_stoneSmooth, + eMaterial_netherbrick, + eMaterial_ender, + eMaterial_glass, + eMaterial_blaze, + eMaterial_magic, + eMaterial_melon, + eMaterial_setfire, + eMaterial_sprucewood, + eMaterial_birchwood, + eMaterial_junglewood, + eMaterial_emerald, + eMaterial_quartz, + eMaterial_apple, + eMaterial_carrot + } + eMaterial; + + enum + { + eBaseItemType_undefined=0, + eBaseItemType_sword, + eBaseItemType_shovel, + eBaseItemType_pickaxe, + eBaseItemType_hatchet, + eBaseItemType_hoe, + eBaseItemType_door, + eBaseItemType_helmet, + eBaseItemType_chestplate, + eBaseItemType_leggings, + eBaseItemType_boots, + eBaseItemType_ingot, + eBaseItemType_rail, + eBaseItemType_block, + eBaseItemType_pressureplate, + eBaseItemType_stairs, + eBaseItemType_cloth, + eBaseItemType_dyepowder, + eBaseItemType_structwoodstuff, + eBaseItemType_structblock, + eBaseItemType_slab, + eBaseItemType_halfslab, + eBaseItemType_torch, + eBaseItemType_bow, + eBaseItemType_pockettool, + eBaseItemType_utensil, + eBaseItemType_piston, + eBaseItemType_devicetool, + eBaseItemType_fence, + eBaseItemType_device, + eBaseItemType_treasure, + eBaseItemType_seed, + eBaseItemType_HangingItem, + eBaseItemType_button, + eBaseItemType_chest, + eBaseItemType_rod, + eBaseItemType_giltFruit, + eBaseItemType_carpet, + eBaseItemType_MAXTYPES, + } + eBaseItemType; + +protected: + static const int ICON_COLUMNS = ITEM_ICON_COLUMNS; + static wstring ICON_DESCRIPTION_PREFIX; // 4J Stu - Was const but we have to static initialise it outside of this class + +public: + + class Tier + { + public: + static const Tier *WOOD; // + static const Tier *STONE; // + static const Tier *IRON; // + static const Tier *DIAMOND; // + static const Tier *GOLD; + + private: + const int level; + const int uses; + const float speed; + const int damage; + const int enchantmentValue; + + // 4J Stu - Had to make this public but was protected + // We shouldn't be creating these except the static initialisation + public: + Tier(int level, int uses, float speed, int damage, int enchantmentValue); + + public: + int getUses() const; + + float getSpeed() const; + + int getAttackDamageBonus() const; + + int getLevel() const; + + int getEnchantmentValue() const; + + int getTierItemId() const; + }; + +protected: + static Random *random; + +private: + static const int MAX_STACK_SIZE = Container::LARGE_MAX_STACK_SIZE; + +public: + static ItemArray items; + + static Item *shovel_iron; + static Item *pickAxe_iron; + static Item *hatchet_iron; + static Item *flintAndSteel; + static Item *apple; + static BowItem *bow; + static Item *arrow; + static Item *coal; + static Item *diamond; + static Item *ironIngot; + static Item *goldIngot; + static Item *sword_iron; + + static Item *sword_wood; + static Item *shovel_wood; + static Item *pickAxe_wood; + static Item *hatchet_wood; + + static Item *sword_stone; + static Item *shovel_stone; + static Item *pickAxe_stone; + static Item *hatchet_stone; + + static Item *sword_diamond; + static Item *shovel_diamond; + static Item *pickAxe_diamond; + static Item *hatchet_diamond; + + static Item *stick; + static Item *bowl; + static Item *mushroomStew; + + static Item *sword_gold; + static Item *shovel_gold; + static Item *pickAxe_gold; + static Item *hatchet_gold; + + static Item *string; + static Item *feather; + static Item *sulphur; + + static Item *hoe_wood; + static Item *hoe_stone; + static Item *hoe_iron; + static Item *hoe_diamond; + static Item *hoe_gold; + + static Item *seeds_wheat; + static Item *wheat; + static Item *bread; + + static ArmorItem *helmet_cloth; + static ArmorItem *chestplate_cloth; + static ArmorItem *leggings_cloth; + static ArmorItem *boots_cloth; + + static ArmorItem *helmet_chain; + static ArmorItem *chestplate_chain; + static ArmorItem *leggings_chain; + static ArmorItem *boots_chain; + + static ArmorItem *helmet_iron; + static ArmorItem *chestplate_iron; + static ArmorItem *leggings_iron; + static ArmorItem *boots_iron; + + static ArmorItem *helmet_diamond; + static ArmorItem *chestplate_diamond; + static ArmorItem *leggings_diamond; + static ArmorItem *boots_diamond; + + static ArmorItem *helmet_gold; + static ArmorItem *chestplate_gold; + static ArmorItem *leggings_gold; + static ArmorItem *boots_gold; + + static Item *flint; + static Item *porkChop_raw; + static Item *porkChop_cooked; + static Item *painting; + + static Item *apple_gold; + + static Item *sign; + static Item *door_wood; + + static Item *bucket_empty; + static Item *bucket_water; + static Item *bucket_lava; + + static Item *minecart; + static Item *saddle; + static Item *door_iron; + static Item *redStone; + static Item *snowBall; + + static Item *boat; + + static Item *leather; + static Item *milk; + static Item *brick; + static Item *clay; + static Item *reeds; + static Item *paper; + static Item *book; + static Item *slimeBall; + static Item *minecart_chest; + static Item *minecart_furnace; + static Item *egg; + static Item *compass; + static FishingRodItem *fishingRod; + static Item *clock; + static Item *yellowDust; + static Item *fish_raw; + static Item *fish_cooked; + + static Item *dye_powder; + static Item *bone; + static Item *sugar; + static Item *cake; + + static Item *bed; + + static Item *diode; + static Item *cookie; + + static MapItem *map; + + static ShearsItem *shears; + + static Item *melon; + + static Item *seeds_pumpkin; + static Item *seeds_melon; + + static Item *beef_raw; + static Item *beef_cooked; + static Item *chicken_raw; + static Item *chicken_cooked; + static Item *rotten_flesh; + + static Item *enderPearl; + + static Item *blazeRod; + static Item *ghastTear; + static Item *goldNugget; + + static Item *netherStalkSeeds; + + static PotionItem *potion; + static Item *glassBottle; + + static Item *spiderEye; + static Item *fermentedSpiderEye; + + static Item *blazePowder; + static Item *magmaCream; + + static Item *brewingStand; + static Item *cauldron; + static Item *eyeOfEnder; + static Item *speckledMelon; + + static Item *monsterPlacer; + + static Item *expBottle; + + static Item *skull; + + static Item *record_01; + static Item *record_02; + static Item *record_03; + static Item *record_04; + static Item *record_05; + static Item *record_06; + static Item *record_07; + static Item *record_08; + static Item *record_09; + static Item *record_10; + static Item *record_11; + static Item *record_12; + + // TU9 + static Item *fireball; + static Item *frame; + static Item *netherbrick; + + // TU14 + //static Item writingBook; + //static Item writtenBook; + + static Item *emerald; + + static Item *flowerPot; + + static Item *carrots; + static Item *potato; + static Item *potatoBaked; + static Item *potatoPoisonous; + + static Item *carrotGolden; + + static Item *carrotOnAStick; + static Item *pumpkinPie; + static Item *netherQuartz; + + static EnchantedBookItem *enchantedBook; + + + static const int shovel_iron_Id = 256; + static const int pickAxe_iron_Id = 257; + static const int hatchet_iron_Id = 258; + static const int flintAndSteel_Id = 259; + static const int apple_Id = 260; + static const int bow_Id = 261; + static const int arrow_Id = 262; + static const int coal_Id = 263; + static const int diamond_Id = 264; + static const int ironIngot_Id = 265; + static const int goldIngot_Id = 266; + static const int sword_iron_Id = 267; + static const int sword_wood_Id = 268; + static const int shovel_wood_Id = 269; + static const int pickAxe_wood_Id = 270; + static const int hatchet_wood_Id = 271; + static const int sword_stone_Id = 272; + static const int shovel_stone_Id = 273; + static const int pickAxe_stone_Id = 274; + static const int hatchet_stone_Id = 275; + static const int sword_diamond_Id = 276; + static const int shovel_diamond_Id = 277; + static const int pickAxe_diamond_Id = 278; + static const int hatchet_diamond_Id = 279; + static const int stick_Id = 280; + static const int bowl_Id = 281; + static const int mushroomStew_Id = 282; + static const int sword_gold_Id = 283; + static const int shovel_gold_Id = 284; + static const int pickAxe_gold_Id = 285; + static const int hatchet_gold_Id = 286; + static const int string_Id = 287; + static const int feather_Id = 288; + static const int sulphur_Id = 289; + static const int hoe_wood_Id = 290; + static const int hoe_stone_Id = 291; + static const int hoe_iron_Id = 292; + static const int hoe_diamond_Id = 293; + static const int hoe_gold_Id = 294; + static const int seeds_wheat_Id = 295; + static const int wheat_Id = 296; + static const int bread_Id = 297; + + static const int helmet_cloth_Id = 298; + static const int chestplate_cloth_Id = 299; + static const int leggings_cloth_Id = 300; + static const int boots_cloth_Id = 301; + + static const int helmet_chain_Id = 302; + static const int chestplate_chain_Id = 303; + static const int leggings_chain_Id = 304; + static const int boots_chain_Id = 305; + + static const int helmet_iron_Id = 306; + static const int chestplate_iron_Id = 307; + static const int leggings_iron_Id = 308; + static const int boots_iron_Id = 309; + + static const int helmet_diamond_Id = 310; + static const int chestplate_diamond_Id = 311; + static const int leggings_diamond_Id = 312; + static const int boots_diamond_Id = 313; + + static const int helmet_gold_Id = 314; + static const int chestplate_gold_Id = 315; + static const int leggings_gold_Id = 316; + static const int boots_gold_Id = 317; + + static const int flint_Id = 318; + static const int porkChop_raw_Id = 319; + static const int porkChop_cooked_Id = 320; + static const int painting_Id = 321; + static const int apple_gold_Id = 322; + static const int sign_Id = 323; + static const int door_wood_Id = 324; + static const int bucket_empty_Id = 325; + static const int bucket_water_Id = 326; + static const int bucket_lava_Id = 327; + static const int minecart_Id = 328; + static const int saddle_Id = 329; + static const int door_iron_Id = 330; + static const int redStone_Id = 331; + static const int snowBall_Id = 332; + static const int boat_Id = 333; + static const int leather_Id = 334; + static const int milk_Id = 335; + static const int brick_Id = 336; + static const int clay_Id = 337; + static const int reeds_Id = 338; + static const int paper_Id = 339; + static const int book_Id = 340; + static const int slimeBall_Id = 341; + static const int minecart_chest_Id = 342; + static const int minecart_furnace_Id = 343; + static const int egg_Id = 344; + static const int compass_Id = 345; + static const int fishingRod_Id = 346; + static const int clock_Id = 347; + static const int yellowDust_Id = 348; + static const int fish_raw_Id = 349; + static const int fish_cooked_Id = 350; + static const int dye_powder_Id = 351; + static const int bone_Id = 352; + static const int sugar_Id = 353; + static const int cake_Id = 354; + static const int bed_Id = 355; + static const int diode_Id = 356; + static const int cookie_Id = 357; + static const int map_Id = 358; + + // 1.7.3 + static const int shears_Id = 359; + + // 1.8.2 + static const int melon_Id = 360; + static const int seeds_pumpkin_Id = 361; + static const int seeds_melon_Id = 362; + static const int beef_raw_Id = 363; + static const int beef_cooked_Id = 364; + static const int chicken_raw_Id = 365; + static const int chicken_cooked_Id = 366; + static const int rotten_flesh_Id = 367; + static const int enderPearl_Id = 368; + + // 1.0.1 + static const int blazeRod_Id = 369; + static const int ghastTear_Id = 370; + static const int goldNugget_Id = 371; + static const int netherStalkSeeds_Id = 372; + static const int potion_Id = 373; + static const int glassBottle_Id = 374; + static const int spiderEye_Id = 375; + static const int fermentedSpiderEye_Id = 376; + static const int blazePowder_Id = 377; + static const int magmaCream_Id = 378; + static const int brewingStand_Id = 379; + static const int cauldron_Id = 380; + static const int eyeOfEnder_Id = 381; + static const int speckledMelon_Id = 382; + + // 1.1 + static const int monsterPlacer_Id = 383; + + static const int expBottle_Id = 384; + + // TU 12 + static const int skull_Id = 397; + + static const int record_01_Id = 2256; + static const int record_02_Id = 2257; + static const int record_03_Id = 2258; + static const int record_04_Id = 2259; + static const int record_05_Id = 2260; + static const int record_06_Id = 2261; + static const int record_07_Id = 2262; + static const int record_09_Id = 2263; + static const int record_10_Id = 2264; + static const int record_11_Id = 2265; + static const int record_12_Id = 2266; + + // 4J-PB - this one isn't playable in the PC game, but is fine in ours + static const int record_08_Id = 2267; + + // TU9 + static const int fireball_Id = 385; + static const int itemFrame_Id = 389; + static const int netherbrick_Id = 405; + + // TU14 + //static const int writingBook_Id = 130; + //static const int writtenBook_Id = 131; + + static const int emerald_Id = 388; + + static const int flowerPot_Id = 390; + + static const int carrots_Id = 391; + static const int potato_Id = 392; + static const int potatoBaked_Id = 393; + static const int potatoPoisonous_Id = 394; + + + static const int carrotGolden_Id = 396; + + static const int carrotOnAStick_Id = 398; + static const int pumpkinPie_Id = 400; + + static const int enchantedBook_Id = 403; + static const int netherQuartz_Id = 406; + +public: + const int id; + +protected: + int maxStackSize; + +private: + int maxDamage; + +protected: + Icon *icon; + // 4J-PB - added for new crafting menu + int m_iBaseItemType; + int m_iMaterial; + bool m_handEquipped; + bool m_isStackedByData; + +private: + Item *craftingRemainingItem; + wstring potionBrewingFormula; + + // 4J Stu - A value from strings.h, that is the name of the item + unsigned int descriptionId; + + // 4J Stu - A value from strings.h that says what this does + unsigned int useDescriptionId; + + wstring m_textureName; + +protected: + Item(int id); + +public: + // 4J Using per-item textures now + Item *setTextureName(const wstring &name); + Item *setMaxStackSize(int max); + Item *setBaseItemTypeAndMaterial(int iType,int iMaterial); + int getBaseItemType(); + int getMaterial(); + + virtual int getIconType(); + virtual Icon *getIcon(int auxValue); + Icon *getIcon(shared_ptr<ItemInstance> itemInstance); + + const bool useOn(shared_ptr<ItemInstance> itemInstance, Level *level, int x, int y, int z, int face, bool bTestUseOnOnly=false); + + virtual bool useOn(shared_ptr<ItemInstance> itemInstance, shared_ptr<Player> player, Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly=false); + virtual float getDestroySpeed(shared_ptr<ItemInstance> itemInstance, Tile *tile); + virtual bool TestUse(Level *level, shared_ptr<Player> player); + virtual shared_ptr<ItemInstance> use(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player); + virtual shared_ptr<ItemInstance> useTimeDepleted(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player); + virtual int getMaxStackSize(); + virtual int getLevelDataForAuxValue(int auxValue); + bool isStackedByData(); + +protected: + Item *setStackedByData(bool isStackedByData); + +public: + int getMaxDamage(); + +protected: + Item *setMaxDamage(int maxDamage); + +public: + bool canBeDepleted(); + + /** + * Returns true when the item was used to deal more than default damage + * + * @param itemInstance + * @param mob + * @param attacker + * @return + */ + virtual bool hurtEnemy(shared_ptr<ItemInstance> itemInstance, shared_ptr<Mob> mob, shared_ptr<Mob> attacker); + + /** + * Returns true when the item was used to mine more efficiently + * + * @param itemInstance + * @param tile + * @param x + * @param yf + * @param z + * @param owner + * @return + */ + virtual bool mineBlock(shared_ptr<ItemInstance> itemInstance, Level *level, int tile, int x, int y, int z, shared_ptr<Mob> owner); + virtual int getAttackDamage(shared_ptr<Entity> entity); + virtual bool canDestroySpecial(Tile *tile); + virtual bool interactEnemy(shared_ptr<ItemInstance> itemInstance, shared_ptr<Mob> mob); + Item *handEquipped(); + virtual bool isHandEquipped(); + virtual bool isMirroredArt(); + Item *setDescriptionId(unsigned int id); + LPCWSTR getDescription(); + LPCWSTR getDescription(shared_ptr<ItemInstance> instance); + virtual unsigned int getDescriptionId(int iData = -1); + virtual unsigned int getDescriptionId(shared_ptr<ItemInstance> instance); + Item *setUseDescriptionId(unsigned int id); + virtual unsigned int getUseDescriptionId(); + virtual unsigned int getUseDescriptionId(shared_ptr<ItemInstance> instance); + Item *setCraftingRemainingItem(Item *craftingRemainingItem); + virtual bool shouldMoveCraftingResultToInventory(shared_ptr<ItemInstance> instance); + virtual bool shouldOverrideMultiplayerNBT(); + Item *getCraftingRemainingItem(); + bool hasCraftingRemainingItem(); + std::wstring getName(); + virtual int getColor(shared_ptr<ItemInstance> item, int spriteLayer); + virtual void inventoryTick(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Entity> owner, int slot, bool selected); + virtual void onCraftedBy(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player); + virtual bool isComplex(); + + virtual UseAnim getUseAnimation(shared_ptr<ItemInstance> itemInstance); + virtual int getUseDuration(shared_ptr<ItemInstance> itemInstance); + virtual void releaseUsing(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player, int durationLeft); + +protected: + virtual Item *setPotionBrewingFormula(const wstring &potionBrewingFormula); + +public: + virtual wstring getPotionBrewingFormula(); + virtual bool hasPotionBrewingFormula(); + virtual void appendHoverText(shared_ptr<ItemInstance> itemInstance, shared_ptr<Player> player, vector<wstring> *lines, bool advanced, vector<wstring> &unformattedStrings); // 4J Added unformattedStrings + virtual wstring getHoverName(shared_ptr<ItemInstance> itemInstance); + virtual bool isFoil(shared_ptr<ItemInstance> itemInstance); + virtual const Rarity *getRarity(shared_ptr<ItemInstance> itemInstance); + virtual bool isEnchantable(shared_ptr<ItemInstance> itemInstance); + +protected: + HitResult *getPlayerPOVHitResult(Level *level, shared_ptr<Player> player, bool alsoPickLiquid); + +public: + virtual int getEnchantmentValue(); + virtual bool hasMultipleSpriteLayers(); + virtual Icon *getLayerIcon(int auxValue, int spriteLayer); + virtual bool isValidRepairItem(shared_ptr<ItemInstance> source, shared_ptr<ItemInstance> repairItem); + virtual void registerIcons(IconRegister *iconRegister); +}; |
