#include "stdafx.h" #include "net.minecraft.network.packet.h" #include "net.minecraft.world.item.h" #include "net.minecraft.world.item.enchantment.h" #include "..\Minecraft.Client\ServerPlayer.h" #include "EnchantItemCommand.h" EGameCommand EnchantItemCommand::getId() { return eGameCommand_EnchantItem; } int EnchantItemCommand::getPermissionLevel() { return 0; //aLEVEL_GAMEMASTERS; } void EnchantItemCommand::execute(shared_ptr source, byteArray commandData) { ByteArrayInputStream bais(commandData); DataInputStream dis(&bais); PlayerUID uid = dis.readPlayerUID(); int enchantmentId = dis.readInt(); int enchantmentLevel = dis.readInt(); bais.reset(); shared_ptr player = getPlayer(uid); if(player == NULL) return; shared_ptr selectedItem = player->getSelectedItem(); if(selectedItem == NULL) return; Enchantment *e = Enchantment::enchantments[enchantmentId]; if(e == NULL) return; if(!e->canEnchant(selectedItem)) return; if(enchantmentLevel < e->getMinLevel()) enchantmentLevel = e->getMinLevel(); if(enchantmentLevel > e->getMaxLevel()) enchantmentLevel = e->getMaxLevel(); if (selectedItem->hasTag()) { ListTag *enchantmentTags = selectedItem->getEnchantmentTags(); if (enchantmentTags != NULL) { for (int i = 0; i < enchantmentTags->size(); i++) { int type = enchantmentTags->get(i)->getShort((wchar_t *)ItemInstance::TAG_ENCH_ID); if (Enchantment::enchantments[type] != NULL) { Enchantment *other = Enchantment::enchantments[type]; if (!other->isCompatibleWith(e)) { return; //throw new CommandException("commands.enchant.cantCombine", e.getFullname(level), other.getFullname(enchantmentTags.get(i).getShort(ItemInstance.TAG_ENCH_LEVEL))); } } } } } selectedItem->enchant(e, enchantmentLevel); //logAdminAction(source, "commands.enchant.success"); logAdminAction(source, ChatPacket::e_ChatCustom, L"commands.enchant.success"); } shared_ptr EnchantItemCommand::preparePacket(shared_ptr player, int enchantmentId, int enchantmentLevel) { if(player == NULL) return nullptr; ByteArrayOutputStream baos; DataOutputStream dos(&baos); dos.writePlayerUID(player->getXuid()); dos.writeInt(enchantmentId); dos.writeInt(enchantmentLevel); return shared_ptr( new GameCommandPacket(eGameCommand_EnchantItem, baos.toByteArray() )); }