use of org.spongepowered.api.item.enchantment.EnchantmentType in project SpongeCommon by SpongePowered.
the class NbtDataUtil method getItemEnchantments.
public static List<Enchantment> getItemEnchantments(ItemStack itemStack) {
if (!itemStack.isItemEnchanted()) {
return Collections.emptyList();
}
final List<Enchantment> enchantments = Lists.newArrayList();
final NBTTagList list = itemStack.getEnchantmentTagList();
for (int i = 0; i < list.tagCount(); i++) {
final NBTTagCompound compound = list.getCompoundTagAt(i);
final short enchantmentId = compound.getShort(NbtDataUtil.ITEM_ENCHANTMENT_ID);
final short level = compound.getShort(NbtDataUtil.ITEM_ENCHANTMENT_LEVEL);
final EnchantmentType enchantmentType = (EnchantmentType) net.minecraft.enchantment.Enchantment.getEnchantmentByID(enchantmentId);
if (enchantmentType == null) {
continue;
}
enchantments.add(new SpongeEnchantment(enchantmentType, level));
}
return enchantments;
}
use of org.spongepowered.api.item.enchantment.EnchantmentType in project SpongeCommon by SpongePowered.
the class StoredEnchantmentDataProcessor method getVal.
@Override
protected Optional<List<Enchantment>> getVal(ItemStack entity) {
if (!entity.hasTagCompound() || !entity.getTagCompound().hasKey(NbtDataUtil.ITEM_STORED_ENCHANTMENTS_LIST, NbtDataUtil.TAG_LIST)) {
return Optional.empty();
}
List<Enchantment> list = Lists.newArrayList();
NBTTagList tags = entity.getTagCompound().getTagList(NbtDataUtil.ITEM_STORED_ENCHANTMENTS_LIST, NbtDataUtil.TAG_COMPOUND);
for (int i = 0; i < tags.tagCount(); i++) {
NBTTagCompound tag = tags.getCompoundTagAt(i);
list.add(new SpongeEnchantment((EnchantmentType) net.minecraft.enchantment.Enchantment.getEnchantmentByID(tag.getShort(NbtDataUtil.ITEM_ENCHANTMENT_ID)), tag.getShort(NbtDataUtil.ITEM_ENCHANTMENT_LEVEL)));
}
return Optional.of(list);
}
use of org.spongepowered.api.item.enchantment.EnchantmentType in project core by CubeEngine.
the class EnchantmentParser method parse.
@Override
public EnchantmentType parse(Class type, CommandInvocation invocation) throws ParserException {
String token = invocation.consume(1);
EnchantmentType enchantment = enchantMatcher.enchantment(token);
if (enchantment == null) {
CommandSource sender = (CommandSource) invocation.getCommandSource();
Text possibleEnchs = getPossibleEnchantments(sender instanceof Player ? ((Player) sender).getItemInHand(HandTypes.MAIN_HAND).orElse(null) : null);
i18n.send(sender, NEGATIVE, "Enchantment {input#enchantment} not found!", token);
if (possibleEnchs != null) {
i18n.send(sender, NEUTRAL, "Try one of those instead:");
sender.sendMessage(possibleEnchs);
} else {
i18n.send(sender, NEGATIVE, "You can not enchant this item!");
}
throw new SilentException();
}
return enchantment;
}
use of org.spongepowered.api.item.enchantment.EnchantmentType in project core by CubeEngine.
the class EnchantMatcher method applyMatchedEnchantment.
public boolean applyMatchedEnchantment(ItemStack item, String enchName, int enchStrength, boolean force) {
EnchantmentType ench = this.enchantment(enchName);
if (ench == null)
return false;
if (enchStrength == 0) {
enchStrength = ench.getMaximumLevel();
}
Enchantment enchantment = Enchantment.builder().type(ench).level(enchStrength).build();
if (force) {
EnchantmentData data = item.getOrCreate(ENCHANTMENT_DATA).get();
data.enchantments().add(enchantment);
item.offer(data);
return true;
}
try {
EnchantmentData data = item.getOrCreate(EnchantmentData.class).get();
data.enchantments().add(enchantment);
item.offer(data);
return true;
} catch (IllegalArgumentException ignored) {
return false;
}
}
use of org.spongepowered.api.item.enchantment.EnchantmentType in project Nucleus by NucleusPowered.
the class EnchantCommand method executeCommand.
@Override
public CommandResult executeCommand(Player src, CommandContext args) throws Exception {
// Check for item in hand
if (!src.getItemInHand(HandTypes.MAIN_HAND).isPresent()) {
src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.enchant.noitem"));
return CommandResult.empty();
}
// Get the arguments
ItemStack itemInHand = src.getItemInHand(HandTypes.MAIN_HAND).get();
EnchantmentType enchantment = args.<EnchantmentType>getOne(enchantmentKey).get();
int level = args.<Integer>getOne(levelKey).get();
boolean allowUnsafe = args.hasAny("u");
boolean allowOverwrite = args.hasAny("o");
// Can we apply the enchantment?
if (!allowUnsafe) {
if (!enchantment.canBeAppliedToStack(itemInHand)) {
src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.enchant.nounsafe.enchant", itemInHand.getTranslation().get()));
return CommandResult.empty();
}
if (level > enchantment.getMaximumLevel()) {
src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.enchant.nounsafe.level", itemInHand.getTranslation().get()));
return CommandResult.empty();
}
}
// We know this should exist.
EnchantmentData ed = itemInHand.getOrCreate(EnchantmentData.class).get();
// Get all the enchantments.
List<Enchantment> currentEnchants = ed.getListValue().get();
List<Enchantment> enchantmentsToRemove = currentEnchants.stream().filter(x -> !x.getType().isCompatibleWith(enchantment) || x.getType().equals(enchantment)).collect(Collectors.toList());
if (!allowOverwrite && !enchantmentsToRemove.isEmpty()) {
// Build the list of the enchantment names, and send it.
final StringBuilder sb = new StringBuilder();
enchantmentsToRemove.forEach(x -> {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(Util.getTranslatableIfPresent(x.getType()));
});
src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.enchant.overwrite", sb.toString()));
return CommandResult.empty();
}
// Remove all enchants that cannot co-exist.
currentEnchants.removeIf(enchantmentsToRemove::contains);
// Create the enchantment
currentEnchants.add(Enchantment.of(enchantment, level));
ed.setElements(currentEnchants);
// Offer it to the item.
DataTransactionResult dtr = itemInHand.offer(ed);
if (dtr.isSuccessful()) {
// If successful, we need to put the item in the player's hand for it to actually take effect.
src.setItemInHand(HandTypes.MAIN_HAND, itemInHand);
src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.enchant.success", Util.getTranslatableIfPresent(enchantment), String.valueOf(level)));
return CommandResult.success();
}
src.sendMessage(plugin.getMessageProvider().getTextMessageWithFormat("command.enchant.error", Util.getTranslatableIfPresent(enchantment), String.valueOf(level)));
return CommandResult.empty();
}
Aggregations