mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-23 20:53:39 +00:00
195 lines
6.6 KiB
C++
195 lines
6.6 KiB
C++
#include "../Platform/stdafx.h"
|
|
#include "../Headers/net.minecraft.world.item.enchantment.h"
|
|
#include "../Headers/net.minecraft.world.item.h"
|
|
#include "Enchantment.h"
|
|
|
|
// Enchantment *Enchantment::enchantments[256];
|
|
EnchantmentArray Enchantment::enchantments = EnchantmentArray(256);
|
|
std::vector<Enchantment*> Enchantment::validEnchantments;
|
|
|
|
Enchantment* Enchantment::allDamageProtection = NULL;
|
|
Enchantment* Enchantment::fireProtection = NULL;
|
|
Enchantment* Enchantment::fallProtection = NULL;
|
|
Enchantment* Enchantment::explosionProtection = NULL;
|
|
Enchantment* Enchantment::projectileProtection = NULL;
|
|
Enchantment* Enchantment::drownProtection = NULL;
|
|
Enchantment* Enchantment::waterWorker = NULL;
|
|
Enchantment* Enchantment::thorns = NULL;
|
|
|
|
// weapon
|
|
Enchantment* Enchantment::damageBonus = NULL;
|
|
Enchantment* Enchantment::damageBonusUndead = NULL;
|
|
Enchantment* Enchantment::damageBonusArthropods = NULL;
|
|
Enchantment* Enchantment::knockback = NULL;
|
|
Enchantment* Enchantment::fireAspect = NULL;
|
|
Enchantment* Enchantment::lootBonus = NULL;
|
|
|
|
// digger
|
|
Enchantment* Enchantment::diggingBonus = NULL;
|
|
Enchantment* Enchantment::untouching = NULL;
|
|
Enchantment* Enchantment::digDurability = NULL;
|
|
Enchantment* Enchantment::resourceBonus = NULL;
|
|
|
|
// bows
|
|
Enchantment* Enchantment::arrowBonus = NULL;
|
|
Enchantment* Enchantment::arrowKnockback = NULL;
|
|
Enchantment* Enchantment::arrowFire = NULL;
|
|
Enchantment* Enchantment::arrowInfinite = NULL;
|
|
|
|
void Enchantment::staticCtor() {
|
|
allDamageProtection =
|
|
new ProtectionEnchantment(0, FREQ_COMMON, ProtectionEnchantment::ALL);
|
|
fireProtection = new ProtectionEnchantment(1, FREQ_UNCOMMON,
|
|
ProtectionEnchantment::FIRE);
|
|
fallProtection = new ProtectionEnchantment(2, FREQ_UNCOMMON,
|
|
ProtectionEnchantment::FALL);
|
|
explosionProtection = new ProtectionEnchantment(
|
|
3, FREQ_RARE, ProtectionEnchantment::EXPLOSION);
|
|
projectileProtection = new ProtectionEnchantment(
|
|
4, FREQ_UNCOMMON, ProtectionEnchantment::PROJECTILE);
|
|
drownProtection = new OxygenEnchantment(5, FREQ_RARE);
|
|
waterWorker = new WaterWorkerEnchantment(6, FREQ_RARE);
|
|
thorns = new ThornsEnchantment(7, FREQ_VERY_RARE);
|
|
|
|
// weapon
|
|
damageBonus =
|
|
new DamageEnchantment(16, FREQ_COMMON, DamageEnchantment::ALL);
|
|
damageBonusUndead =
|
|
new DamageEnchantment(17, FREQ_UNCOMMON, DamageEnchantment::UNDEAD);
|
|
damageBonusArthropods =
|
|
new DamageEnchantment(18, FREQ_UNCOMMON, DamageEnchantment::ARTHROPODS);
|
|
knockback = new KnockbackEnchantment(19, FREQ_UNCOMMON);
|
|
fireAspect = new FireAspectEnchantment(20, FREQ_RARE);
|
|
lootBonus =
|
|
new LootBonusEnchantment(21, FREQ_RARE, EnchantmentCategory::weapon);
|
|
|
|
// digger
|
|
diggingBonus = new DiggingEnchantment(32, FREQ_COMMON);
|
|
untouching = new UntouchingEnchantment(33, FREQ_VERY_RARE);
|
|
digDurability = new DigDurabilityEnchantment(34, FREQ_UNCOMMON);
|
|
resourceBonus =
|
|
new LootBonusEnchantment(35, FREQ_RARE, EnchantmentCategory::digger);
|
|
|
|
// bows
|
|
arrowBonus = new ArrowDamageEnchantment(48, FREQ_COMMON);
|
|
arrowKnockback = new ArrowKnockbackEnchantment(49, FREQ_RARE);
|
|
arrowFire = new ArrowFireEnchantment(50, FREQ_RARE);
|
|
arrowInfinite = new ArrowInfiniteEnchantment(51, FREQ_VERY_RARE);
|
|
|
|
for (unsigned int i = 0; i < 256; ++i) {
|
|
Enchantment* enchantment = enchantments[i];
|
|
if (enchantment != NULL) {
|
|
validEnchantments.push_back(enchantment);
|
|
}
|
|
}
|
|
}
|
|
|
|
void Enchantment::_init(int id) {
|
|
if (enchantments[id] != NULL) {
|
|
app.DebugPrintf("Duplicate enchantment id!");
|
|
#ifndef _CONTENT_PACKAGE
|
|
__debugbreak();
|
|
#endif
|
|
// throw new IllegalArgumentException("Duplicate enchantment id!");
|
|
}
|
|
enchantments[id] = this;
|
|
}
|
|
|
|
Enchantment::Enchantment(int id, int frequency,
|
|
const EnchantmentCategory* category)
|
|
: id(id), frequency(frequency), category(category) {
|
|
_init(id);
|
|
}
|
|
|
|
Enchantment::Enchantment(int id)
|
|
: id(id), frequency(FREQ_COMMON), category(EnchantmentCategory::all) {
|
|
_init(id);
|
|
}
|
|
|
|
int Enchantment::getFrequency() { return frequency; }
|
|
|
|
int Enchantment::getMinLevel() { return 1; }
|
|
|
|
int Enchantment::getMaxLevel() { return 1; }
|
|
|
|
int Enchantment::getMinCost(int level) { return 1 + level * 10; }
|
|
|
|
int Enchantment::getMaxCost(int level) { return getMinCost(level) + 5; }
|
|
|
|
int Enchantment::getDamageProtection(int level, DamageSource* source) {
|
|
return 0;
|
|
}
|
|
|
|
float Enchantment::getDamageBonus(int level,
|
|
std::shared_ptr<LivingEntity> target) {
|
|
return 0.0f;
|
|
}
|
|
|
|
bool Enchantment::isCompatibleWith(Enchantment* other) const {
|
|
return this != other;
|
|
}
|
|
|
|
Enchantment* Enchantment::setDescriptionId(int id) {
|
|
descriptionId = id;
|
|
return this;
|
|
}
|
|
|
|
int Enchantment::getDescriptionId() { return descriptionId; }
|
|
|
|
// 4jcraft: re-added old TU18 overload for java gui
|
|
std::wstring Enchantment::getFullname(int level, std::wstring& unformatted) {
|
|
wchar_t formatted[256];
|
|
swprintf(formatted, 256, L"%ls %ls", app.GetString(getDescriptionId()),
|
|
getLevelString(level).c_str());
|
|
unformatted = formatted;
|
|
swprintf(formatted, 256, L"<font color=\"#%08x\">%ls</font>",
|
|
app.GetHTMLColour(eHTMLColor_f), unformatted.c_str());
|
|
return formatted;
|
|
}
|
|
|
|
HtmlString Enchantment::getFullname(int level) {
|
|
wchar_t formatted[256];
|
|
swprintf(formatted, 256, L"%ls %ls", app.GetString(getDescriptionId()),
|
|
getLevelString(level).c_str());
|
|
|
|
return HtmlString(formatted, eHTMLColor_f);
|
|
}
|
|
|
|
bool Enchantment::canEnchant(std::shared_ptr<ItemInstance> item) {
|
|
return category->canEnchant(item->getItem());
|
|
}
|
|
|
|
// 4J Added
|
|
std::wstring Enchantment::getLevelString(int level) {
|
|
int stringId = IDS_ENCHANTMENT_LEVEL_1;
|
|
switch (level) {
|
|
case 2:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_2;
|
|
break;
|
|
case 3:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_3;
|
|
break;
|
|
case 4:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_4;
|
|
break;
|
|
case 5:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_5;
|
|
break;
|
|
case 6:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_6;
|
|
break;
|
|
case 7:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_7;
|
|
break;
|
|
case 8:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_8;
|
|
break;
|
|
case 9:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_9;
|
|
break;
|
|
case 10:
|
|
stringId = IDS_ENCHANTMENT_LEVEL_10;
|
|
break;
|
|
};
|
|
return app.GetString(stringId); // I18n.get("enchantment.level." + level);
|
|
} |