22
33import com .google .common .collect .Multimap ;
44import com .simibubi .create .content .equipment .armor .BaseArmorItem ;
5+ import com .simibubi .create .foundation .ICapabilityProvider ;
56import net .minecraft .core .Direction ;
67import net .minecraft .nbt .CompoundTag ;
78import net .minecraft .network .chat .Component ;
1819import net .minecraft .world .item .ArmorMaterial ;
1920import net .minecraft .world .item .ItemStack ;
2021import net .minecraft .world .item .TooltipFlag ;
22+ import net .minecraft .world .item .component .ItemAttributeModifiers ;
2123import net .minecraft .world .item .context .UseOnContext ;
2224import net .minecraft .world .level .Level ;
23- import net .minecraftforge .common .capabilities .Capability ;
24- import net .minecraftforge .common .capabilities .ForgeCapabilities ;
25- import net .minecraftforge .common .capabilities .ICapabilityProvider ;
26- import net .minecraftforge .common .util .LazyOptional ;
27- import net .minecraftforge .items .ItemStackHandler ;
28- import net .minecraftforge .network .NetworkHooks ;
25+
26+ import net .neoforged .neoforge .capabilities .Capabilities ;
27+ import net .neoforged .neoforge .capabilities .RegisterCapabilitiesEvent ;
28+ import net .neoforged .neoforge .items .ItemStackHandler ;
2929import org .jetbrains .annotations .NotNull ;
3030import org .jetbrains .annotations .Nullable ;
3131
@@ -36,10 +36,11 @@ public UpgradableEquipment(ArmorMaterial armorMaterial, Type slot, Properties pr
3636 super (armorMaterial , slot , properties , textureLoc );
3737 }
3838
39- //that's better, way better -> the upgrade item will be an armor item of the same slot
40- @ Override
41- public ICapabilityProvider initCapabilities (ItemStack stack , @ Nullable CompoundTag nbt ) {
42- return new UpgradeInventory (stack );
39+ public static void registerCapabilities (RegisterCapabilitiesEvent event ) {
40+ event .registerItem (
41+ Capabilities .ItemHandler .ITEM ,
42+ (itemStack , unused ) -> new ItemStackHandler (1 )
43+ );
4344 }
4445 @ Override
4546 public InteractionResultHolder <ItemStack > use (Level level , Player player , InteractionHand interactionHand ) {
@@ -74,62 +75,38 @@ public InteractionResult useOn(UseOnContext context) {
7475 }
7576
7677 @ Override
77- public Multimap < Attribute , AttributeModifier > getAttributeModifiers ( EquipmentSlot slot , ItemStack stack ) {
78+ public @ NotNull ItemAttributeModifiers getDefaultAttributeModifiers ( ItemStack stack ) {
7879 ItemStack newStack = getUpgrade (stack );
79- return newStack .isEmpty () ? super .getAttributeModifiers ( slot , stack ) :
80- newStack .getItem ().getAttributeModifiers ( slot , newStack );
80+ return newStack .isEmpty () ? super .getDefaultAttributeModifiers ( stack ) :
81+ newStack .getItem ().getDefaultAttributeModifiers ( newStack );
8182 }
8283
8384 @ Override
84- public void appendHoverText (@ NotNull ItemStack itemStack , @ Nullable Level level , List <Component > components , TooltipFlag flag ) {
85- ItemStack upgrade = getUpgrade (itemStack );
85+ public void appendHoverText (ItemStack stack , TooltipContext context , List <Component > tooltipComponents , TooltipFlag tooltipFlag ) {
86+ ItemStack upgrade = getUpgrade (stack );
8687 if (!upgrade .isEmpty ()) {
87- components .add (
88+ tooltipComponents .add (
8889 Component .translatable ("container.upgrade" )
8990 .append (" : " )
9091 .append (upgrade .getItem ().getDescription ()));
9192 }
92- super .appendHoverText (itemStack , level , components , flag );
93+ super .appendHoverText (stack , context , tooltipComponents , tooltipFlag );
9394 }
9495
9596 @ NotNull
9697 private static ItemStack getUpgrade (ItemStack stack ) {
97- CompoundTag tag = stack .getOrCreateTagElement ("upgradeElement" );
98- return ItemStack .of (tag );
98+ ItemStackHandler handler = (ItemStackHandler ) stack .getCapability (Capabilities .ItemHandler .ITEM );
99+ if (handler !=null )
100+ return handler .getStackInSlot (0 );
101+ return ItemStack .EMPTY ;
99102 }
100103
101104 private static ItemStack setUpgrade (ItemStack stack , ItemStack upgrade ) {
102- CompoundTag tag = stack .getOrCreateTag ();
103- tag .put ("upgradeElement" , upgrade .serializeNBT ());
104105 ItemStack newStack = stack .copy ();
105- newStack .setTag (tag );
106- return newStack ;
107- }
108-
109- //for the menu
110- public static class UpgradeInventory implements ICapabilityProvider {
111-
112- private final ItemStackHandler itemStackHandler = new ItemStackHandler (1 );
113- private final LazyOptional <ItemStackHandler > handler = LazyOptional .of (() -> itemStackHandler );
114-
115- public UpgradeInventory (ItemStack stack ) {
116- // Load the inventory from the item's NBT data
117- CompoundTag nbt = stack .getOrCreateTag ();
118- itemStackHandler .deserializeNBT (nbt .getCompound ("upgradeElement" ));
119- }
120-
121- @ Override
122- public <T > LazyOptional <T > getCapability (Capability <T > cap , @ Nullable Direction side ) {
123- if (cap == ForgeCapabilities .ITEM_HANDLER ) {
124- return handler .cast ();
125- }
126- return LazyOptional .empty ();
127- }
128-
129- public void saveInventory (ItemStack stack ) {
130- CompoundTag nbt = stack .getOrCreateTag ();
131- nbt .put ("upgradeElement" , itemStackHandler .serializeNBT ());
132- stack .setTag (nbt );
106+ ItemStackHandler handler = (ItemStackHandler ) stack .getCapability (Capabilities .ItemHandler .ITEM );
107+ if (handler !=null ) {
108+ handler .setStackInSlot (0 ,upgrade );
133109 }
110+ return newStack ;
134111 }
135112}
0 commit comments