Im trying to transfer all the enchantments from one item to an new sword which I give the player I currently can’t get the code but will when I wake up again what I already did is get the enchantments.enchantments from the item which is an enchantment list thingy. then I created an new ItemStack which then got the enchantments component from and tried to enchant but I failed somewhere
#How to give an enchanted book with an enchant list thingy
1 messages · Page 1 of 1 (latest)
Please someone help
If you got the enchantment component from the item you just need to do something like js const itemStack = new ItemStack(‘item’,1) const enchants = item.getComponent(“enchantment”).enchantments for (const enchant of enchants) { const typeId = enchant.type const level = enchant.level itemStack.getComponent(“enchantment”).enchantments.addEnchantment(new Enchantment(type, level)) } I am writing this on mobile so I may have made a few mistakes
Also make sure to import Enchantment from Minecraft/server
alright
so now my problem is that the item isn't enchanted when giving to the Player
for (const ench of enchantments) {
itemEnchantComponent.addEnchantment(new Enchantment(ench.type, ench.level));
}
player.getComponent("inventory").container.addItem(item);
Have you imported MinecraftEnchantmentTypes?
well you are just getting all the enchants and adding it to the component
but you have to first save them in a list
so you would do
const list = item.getComponent("enchantments").enchantments
list.addEnchantment(new Enchantment(typeId, level));
```and then you are gonna set the component to the list like so ```js
item.getComponent("enchantments").enchantments = list```
i have mine like this
const enchants = auctionItem.enchants
for (let i = 0; i < enchants.length; i++) {
const typeId = enchants[i].type
const level = enchants[i].level
const list = newItem.getComponent("enchantments").enchantments
list.addEnchantment(new Enchantment(typeId, level));
newItem.getComponent("enchantments").enchantments = list
}```
const enchants = itemStack.getComponent("enchantments").enchantments;
const newItem = new ItemStack(MinecraftItemTypes.woodenSword, 1);
for (let i = 0; i < enchants.length; i++) {
const type = enchants[i].type;
const level = enchants[i].level;
const list = newItem.getComponent("enchantments").enchantments;
list.addEnchantment(new Enchantment(type, level));
newItem.getComponent("enchantments").enchantments = list;
}
player.getComponent("inventory").container.addItem(newItem);
this technically should work but Im maybe stupid
bcs it doesnt
Debug Result
There are 4 errors in this [code](#1135355390922588210 message):
[36m<repl>.js[0m:[33m1[0m:[33m30[0m - [31merror[0m[30m TS2552: [0mCannot find name 'itemStack'. Did you mean 'ItemStack'?
[7m1[0m const enchants = itemStack.getComponent("enchantments").enchantments;
[7m [0m [31m ~~~~~~~~~[0m
[36m@minecraft/server.d.ts[0m:[33m5805[0m:[33m15[0m
[7m5805[0m class ItemStack {
[7m [0m [36m ~~~~~~~~~[0m
'ItemStack' is declared here.
``````ansi
[36m<repl>.js[0m:[33m6[0m:[33m30[0m - [31merror[0m[30m TS2532: [0mObject is possibly 'undefined'.
[7m6[0m const list = newItem.getComponent("enchantments").enchantments;
[7m [0m [31m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[0m
``````ansi
[36m<repl>.js[0m:[33m8[0m:[33m17[0m - [31merror[0m[30m TS2532: [0mObject is possibly 'undefined'.
[7m8[0m newItem.getComponent("enchantments").enchantments = list;
[7m [0m [31m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[0m
``````ansi
[36m<repl>.js[0m:[33m10[0m:[33m13[0m - [31merror[0m[30m TS2552: [0mCannot find name 'player'. Did you mean 'Player'?
[7m10[0m player.getComponent("inventory").container.addItem(newItem);
[7m [0m [31m ~~~~~~[0m
[36m@minecraft/server.d.ts[0m:[33m8036[0m:[33m15[0m
[7m8036[0m class Player extends Entity {
[7m [0m [36m ~~~~~~[0m
'Player' is declared here.
Debug (Stable)
const enchants = ItemStack.getComponent("enchantments").enchantments;
const newItem = new ItemStack(MinecraftItemTypes.woodenSword, 1);
for (let i = 0; i < enchants.length; i++) {
const type = enchants[i].type;
const level = enchants[i].level;
const list = newItem.getComponent("enchantments").enchantments;
list.addEnchantment(new Enchantment(type, level));
newItem.getComponent("enchantments").enchantments = list;
}
player.getComponent("inventory").container.addItem(newItem);
what did you change?
btw its not bcs of the itemstack not being defined
world.beforeEvents.itemUseOn.subscribe(({ block, source: player, itemStack}) => {
does it work now?
itemStack.getComponent -> ItemStack.getComponent