the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 143 lines 4.4 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.item.enchantment.h" 3#include "net.minecraft.world.item.h" 4#include "WeighedTreasure.h" 5#include "EnchantedBookItem.h" 6 7const wstring EnchantedBookItem::TAG_STORED_ENCHANTMENTS = L"StoredEnchantments"; 8 9EnchantedBookItem::EnchantedBookItem(int id) : Item(id) 10{ 11} 12 13bool EnchantedBookItem::isFoil(shared_ptr<ItemInstance> itemInstance) 14{ 15 return true; 16} 17 18bool EnchantedBookItem::isEnchantable(shared_ptr<ItemInstance> itemInstance) 19{ 20 return false; 21} 22 23const Rarity *EnchantedBookItem::getRarity(shared_ptr<ItemInstance> itemInstance) 24{ 25 ListTag<CompoundTag> *enchantments = getEnchantments(itemInstance); 26 if (enchantments && enchantments->size() > 0) 27 { 28 return Rarity::uncommon; 29 } 30 else 31 { 32 return Item::getRarity(itemInstance); 33 } 34} 35 36ListTag<CompoundTag> *EnchantedBookItem::getEnchantments(shared_ptr<ItemInstance> item) 37{ 38 if (item->tag == NULL || !item->tag->contains((wchar_t *)TAG_STORED_ENCHANTMENTS.c_str())) 39 { 40 return new ListTag<CompoundTag>(); 41 } 42 43 return (ListTag<CompoundTag> *) item->tag->get((wchar_t *)TAG_STORED_ENCHANTMENTS.c_str()); 44} 45 46void EnchantedBookItem::appendHoverText(shared_ptr<ItemInstance> itemInstance, shared_ptr<Player> player, vector<HtmlString> *lines, bool advanced) 47{ 48 Item::appendHoverText(itemInstance, player, lines, advanced); 49 50 ListTag<CompoundTag> *list = getEnchantments(itemInstance); 51 52 if (list != NULL) 53 { 54 wstring unformatted = L""; 55 for (int i = 0; i < list->size(); i++) 56 { 57 int type = list->get(i)->getShort((wchar_t *)ItemInstance::TAG_ENCH_ID); 58 int level = list->get(i)->getShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL); 59 60 if (Enchantment::enchantments[type] != NULL) 61 { 62 lines->push_back(Enchantment::enchantments[type]->getFullname(level)); 63 } 64 } 65 } 66} 67 68void EnchantedBookItem::addEnchantment(shared_ptr<ItemInstance> item, EnchantmentInstance *enchantment) 69{ 70 ListTag<CompoundTag> *enchantments = getEnchantments(item); 71 bool add = true; 72 73 for (int i = 0; i < enchantments->size(); i++) 74 { 75 CompoundTag *tag = enchantments->get(i); 76 77 if (tag->getShort((wchar_t *)ItemInstance::TAG_ENCH_ID) == enchantment->enchantment->id) 78 { 79 if (tag->getShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL) < enchantment->level) 80 { 81 tag->putShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL, (short) enchantment->level); 82 } 83 84 add = false; 85 break; 86 } 87 } 88 89 if (add) 90 { 91 CompoundTag *tag = new CompoundTag(); 92 93 tag->putShort((wchar_t *)ItemInstance::TAG_ENCH_ID, (short) enchantment->enchantment->id); 94 tag->putShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL, (short) enchantment->level); 95 96 enchantments->add(tag); 97 } 98 99 if (!item->hasTag()) item->setTag(new CompoundTag()); 100 item->getTag()->put((wchar_t *)TAG_STORED_ENCHANTMENTS.c_str(), enchantments); 101} 102 103shared_ptr<ItemInstance> EnchantedBookItem::createForEnchantment(EnchantmentInstance *enchant) 104{ 105 shared_ptr<ItemInstance> item = shared_ptr<ItemInstance>(new ItemInstance(this)); 106 addEnchantment(item, enchant); 107 return item; 108} 109 110void EnchantedBookItem::createForEnchantment(Enchantment *enchant, vector<shared_ptr<ItemInstance> > *items) 111{ 112 for (int i = enchant->getMinLevel(); i <= enchant->getMaxLevel(); i++) 113 { 114 items->push_back(createForEnchantment(new EnchantmentInstance(enchant, i))); 115 } 116} 117 118shared_ptr<ItemInstance> EnchantedBookItem::createForRandomLoot(Random *random) 119{ 120 Enchantment *enchantment = Enchantment::validEnchantments[random->nextInt(Enchantment::validEnchantments.size())]; 121 shared_ptr<ItemInstance> book = shared_ptr<ItemInstance>(new ItemInstance(id, 1, 0)); 122 int level = Mth::nextInt(random, enchantment->getMinLevel(), enchantment->getMaxLevel()); 123 124 addEnchantment(book, new EnchantmentInstance(enchantment, level)); 125 126 return book; 127} 128 129WeighedTreasure *EnchantedBookItem::createForRandomTreasure(Random *random) 130{ 131 return createForRandomTreasure(random, 1, 1, 1); 132} 133 134WeighedTreasure *EnchantedBookItem::createForRandomTreasure(Random *random, int minCount, int maxCount, int weight) 135{ 136 Enchantment *enchantment = Enchantment::validEnchantments[random->nextInt(Enchantment::validEnchantments.size())]; 137 shared_ptr<ItemInstance> book = shared_ptr<ItemInstance>(new ItemInstance(id, 1, 0)); 138 int level = Mth::nextInt(random, enchantment->getMinLevel(), enchantment->getMaxLevel()); 139 140 addEnchantment(book, new EnchantmentInstance(enchantment, level)); 141 142 return new WeighedTreasure(book, minCount, maxCount, weight); 143}