the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "net.minecraft.world.item.h"
3#include "net.minecraft.world.item.enchantment.h"
4#include "net.minecraft.world.entity.h"
5#include "net.minecraft.world.damagesource.h"
6#include "ThornsEnchantment.h"
7
8const float ThornsEnchantment::CHANCE_PER_LEVEl = 0.15f;
9
10ThornsEnchantment::ThornsEnchantment(int id, int freq) : Enchantment(id, freq, EnchantmentCategory::armor_torso)
11{
12 setDescriptionId(IDS_ENCHANTMENT_THORNS);
13}
14
15int ThornsEnchantment::getMinCost(int level)
16{
17 return 10 + 20 * (level - 1);
18}
19
20int ThornsEnchantment::getMaxCost(int level)
21{
22 return Enchantment::getMinCost(level) + 50;
23}
24
25int ThornsEnchantment::getMaxLevel()
26{
27 return 3;
28}
29
30bool ThornsEnchantment::canEnchant(shared_ptr<ItemInstance> item)
31{
32 ArmorItem *armor = dynamic_cast<ArmorItem *>(item->getItem());
33 if (armor) return true;
34 return Enchantment::canEnchant(item);
35}
36
37bool ThornsEnchantment::shouldHit(int level, Random *random)
38{
39 if (level <= 0) return false;
40 return random->nextFloat() < CHANCE_PER_LEVEl * level;
41}
42
43int ThornsEnchantment::getDamage(int level, Random *random)
44{
45 if (level > 10)
46 {
47 return level - 10;
48 }
49 else
50 {
51 return 1 + random->nextInt(4);
52 }
53}
54
55void ThornsEnchantment::doThornsAfterAttack(shared_ptr<Entity> source, shared_ptr<LivingEntity> target, Random *random)
56{
57 int level = EnchantmentHelper::getArmorThorns(target);
58 shared_ptr<ItemInstance> item = EnchantmentHelper::getRandomItemWith(Enchantment::thorns, target);
59
60 if (shouldHit(level, random))
61 {
62 source->hurt(DamageSource::thorns(target), getDamage(level, random));
63 source->playSound(eSoundType_DAMAGE_THORNS, .5f, 1.0f);
64
65 if (item != NULL)
66 {
67 item->hurtAndBreak(3, target);
68 }
69 }
70 else
71 {
72 if (item != NULL)
73 {
74 item->hurtAndBreak(1, target);
75 }
76 }
77}