the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 109 lines 3.1 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.level.h" 3#include "net.minecraft.world.entity.player.h" 4#include "net.minecraft.world.entity.projectile.h" 5#include "net.minecraft.world.entity.item.h" 6#include "net.minecraft.world.item.enchantment.h" 7#include "net.minecraft.world.h" 8#include "BowItem.h" 9#include "SoundTypes.h" 10 11const wstring BowItem::TEXTURE_PULL[] = {L"bow_pull_0", L"bow_pull_1", L"bow_pull_2"}; 12 13BowItem::BowItem(int id) : Item( id ) 14{ 15 maxStackSize = 1; 16 setMaxDamage(384); 17 18 icons = NULL; 19} 20 21void BowItem::releaseUsing(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player, int durationLeft) 22{ 23 bool infiniteArrows = player->abilities.instabuild || EnchantmentHelper::getEnchantmentLevel(Enchantment::arrowInfinite->id, itemInstance) > 0; 24 25 if (infiniteArrows || player->inventory->hasResource(Item::arrow_Id)) 26 { 27 int timeHeld = getUseDuration(itemInstance) - durationLeft; 28 float pow = timeHeld / (float) MAX_DRAW_DURATION; 29 pow = ((pow * pow) + pow * 2) / 3; 30 if (pow < 0.1) return; 31 if (pow > 1) pow = 1; 32 33 shared_ptr<Arrow> arrow = shared_ptr<Arrow>( new Arrow(level, player, pow * 2.0f) ); 34 if (pow == 1) arrow->setCritArrow(true); 35 int damageBonus = EnchantmentHelper::getEnchantmentLevel(Enchantment::arrowBonus->id, itemInstance); 36 if (damageBonus > 0) 37 { 38 arrow->setBaseDamage(arrow->getBaseDamage() + (double) damageBonus * .5 + .5); 39 } 40 int knockbackBonus = EnchantmentHelper::getEnchantmentLevel(Enchantment::arrowKnockback->id, itemInstance); 41 if (knockbackBonus > 0) 42 { 43 arrow->setKnockback(knockbackBonus); 44 } 45 if (EnchantmentHelper::getEnchantmentLevel(Enchantment::arrowFire->id, itemInstance) > 0) 46 { 47 arrow->setOnFire(100); 48 } 49 itemInstance->hurtAndBreak(1, player); 50 51 level->playEntitySound(player, eSoundType_RANDOM_BOW, 1.0f, 1 / (random->nextFloat() * 0.4f + 1.2f) + pow * 0.5f); 52 53 if (infiniteArrows) 54 { 55 arrow->pickup = Arrow::PICKUP_CREATIVE_ONLY; 56 } 57 else 58 { 59 player->inventory->removeResource(Item::arrow_Id); 60 } 61 if (!level->isClientSide) level->addEntity(arrow); 62 } 63} 64 65shared_ptr<ItemInstance> BowItem::useTimeDepleted(shared_ptr<ItemInstance> instance, Level *level, shared_ptr<Player> player) 66{ 67 return instance; 68} 69 70int BowItem::getUseDuration(shared_ptr<ItemInstance> itemInstance) 71{ 72 return 20 * 60 * 60; 73} 74 75UseAnim BowItem::getUseAnimation(shared_ptr<ItemInstance> itemInstance) 76{ 77 return UseAnim_bow; 78} 79 80shared_ptr<ItemInstance> BowItem::use(shared_ptr<ItemInstance> instance, Level *level, shared_ptr<Player> player) 81{ 82 if (player->abilities.instabuild || player->inventory->hasResource(Item::arrow_Id)) 83 { 84 player->startUsingItem(instance, getUseDuration(instance)); 85 } 86 return instance; 87} 88 89int BowItem::getEnchantmentValue() 90{ 91 return 1; 92} 93 94void BowItem::registerIcons(IconRegister *iconRegister) 95{ 96 Item::registerIcons(iconRegister); 97 98 icons = new Icon *[BOW_ICONS_COUNT]; 99 100 for (int i = 0; i < BOW_ICONS_COUNT; i++) 101 { 102 icons[i] = iconRegister->registerIcon(TEXTURE_PULL[i]); 103 } 104} 105 106Icon *BowItem::getDrawnIcon(int amount) 107{ 108 return icons[amount]; 109}