Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
4.4 kB · 143 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143#include "stdafx.h"#include "net.minecraft.world.item.enchantment.h"#include "net.minecraft.world.item.h"#include "WeighedTreasure.h"#include "EnchantedBookItem.h"
const wstring EnchantedBookItem::TAG_STORED_ENCHANTMENTS = L"StoredEnchantments";
EnchantedBookItem::EnchantedBookItem(int id) : Item(id){}
bool EnchantedBookItem::isFoil(shared_ptr<ItemInstance> itemInstance){ return true;}
bool EnchantedBookItem::isEnchantable(shared_ptr<ItemInstance> itemInstance){ return false;}
const Rarity *EnchantedBookItem::getRarity(shared_ptr<ItemInstance> itemInstance){ ListTag<CompoundTag> *enchantments = getEnchantments(itemInstance); if (enchantments && enchantments->size() > 0) { return Rarity::uncommon; } else { return Item::getRarity(itemInstance); }}
ListTag<CompoundTag> *EnchantedBookItem::getEnchantments(shared_ptr<ItemInstance> item){ if (item->tag == NULL || !item->tag->contains((wchar_t *)TAG_STORED_ENCHANTMENTS.c_str())) { return new ListTag<CompoundTag>(); }
return (ListTag<CompoundTag> *) item->tag->get((wchar_t *)TAG_STORED_ENCHANTMENTS.c_str());}
void EnchantedBookItem::appendHoverText(shared_ptr<ItemInstance> itemInstance, shared_ptr<Player> player, vector<HtmlString> *lines, bool advanced){ Item::appendHoverText(itemInstance, player, lines, advanced);
ListTag<CompoundTag> *list = getEnchantments(itemInstance);
if (list != NULL) { wstring unformatted = L""; for (int i = 0; i < list->size(); i++) { int type = list->get(i)->getShort((wchar_t *)ItemInstance::TAG_ENCH_ID); int level = list->get(i)->getShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL);
if (Enchantment::enchantments[type] != NULL) { lines->push_back(Enchantment::enchantments[type]->getFullname(level)); } } }}
void EnchantedBookItem::addEnchantment(shared_ptr<ItemInstance> item, EnchantmentInstance *enchantment){ ListTag<CompoundTag> *enchantments = getEnchantments(item); bool add = true;
for (int i = 0; i < enchantments->size(); i++) { CompoundTag *tag = enchantments->get(i);
if (tag->getShort((wchar_t *)ItemInstance::TAG_ENCH_ID) == enchantment->enchantment->id) { if (tag->getShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL) < enchantment->level) { tag->putShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL, (short) enchantment->level); }
add = false; break; } }
if (add) { CompoundTag *tag = new CompoundTag();
tag->putShort((wchar_t *)ItemInstance::TAG_ENCH_ID, (short) enchantment->enchantment->id); tag->putShort((wchar_t *)ItemInstance::TAG_ENCH_LEVEL, (short) enchantment->level);
enchantments->add(tag); }
if (!item->hasTag()) item->setTag(new CompoundTag()); item->getTag()->put((wchar_t *)TAG_STORED_ENCHANTMENTS.c_str(), enchantments);}
shared_ptr<ItemInstance> EnchantedBookItem::createForEnchantment(EnchantmentInstance *enchant){ shared_ptr<ItemInstance> item = shared_ptr<ItemInstance>(new ItemInstance(this)); addEnchantment(item, enchant); return item;}
void EnchantedBookItem::createForEnchantment(Enchantment *enchant, vector<shared_ptr<ItemInstance> > *items){ for (int i = enchant->getMinLevel(); i <= enchant->getMaxLevel(); i++) { items->push_back(createForEnchantment(new EnchantmentInstance(enchant, i))); }}
shared_ptr<ItemInstance> EnchantedBookItem::createForRandomLoot(Random *random){ Enchantment *enchantment = Enchantment::validEnchantments[random->nextInt(Enchantment::validEnchantments.size())]; shared_ptr<ItemInstance> book = shared_ptr<ItemInstance>(new ItemInstance(id, 1, 0)); int level = Mth::nextInt(random, enchantment->getMinLevel(), enchantment->getMaxLevel());
addEnchantment(book, new EnchantmentInstance(enchantment, level));
return book;}
WeighedTreasure *EnchantedBookItem::createForRandomTreasure(Random *random){ return createForRandomTreasure(random, 1, 1, 1);}
WeighedTreasure *EnchantedBookItem::createForRandomTreasure(Random *random, int minCount, int maxCount, int weight){ Enchantment *enchantment = Enchantment::validEnchantments[random->nextInt(Enchantment::validEnchantments.size())]; shared_ptr<ItemInstance> book = shared_ptr<ItemInstance>(new ItemInstance(id, 1, 0)); int level = Mth::nextInt(random, enchantment->getMinLevel(), enchantment->getMaxLevel());
addEnchantment(book, new EnchantmentInstance(enchantment, level));
return new WeighedTreasure(book, minCount, maxCount, weight);}