@@ -120,8 +120,8 @@ public interface ItemComponentFunctions extends ComponentFunctions {
120120 }
121121
122122 default boolean kjs$hasAttributeModifier (Holder <Attribute > attribute , ResourceLocation id ) {
123- for (var modifier : kjs$getAttributeModifiers ().modifiers ()) {
124- if (modifier .matches (attribute , id )) {
123+ for (var entry : kjs$getAttributeModifiers ().modifiers ()) {
124+ if (entry .matches (attribute , id )) {
125125 return true ;
126126 }
127127 }
@@ -130,9 +130,9 @@ public interface ItemComponentFunctions extends ComponentFunctions {
130130
131131 @ Nullable
132132 default AttributeModifier kjs$getAttributeModifier (Holder <Attribute > attribute , ResourceLocation id ) {
133- for (var modifier : kjs$getAttributeModifiers ().modifiers ()) {
134- if (modifier .matches (attribute , id )) {
135- return modifier .modifier ();
133+ for (var entry : kjs$getAttributeModifiers ().modifiers ()) {
134+ if (entry .matches (attribute , id )) {
135+ return entry .modifier ();
136136 }
137137 }
138138 return null ;
@@ -150,12 +150,12 @@ public interface ItemComponentFunctions extends ComponentFunctions {
150150 var oldMods = kjs$getAttributeModifiers ();
151151
152152 var list = new ArrayList <ItemAttributeModifiers .Entry >(oldMods .modifiers ().size ());
153- for (var modifier : oldMods .modifiers ()) {
154- if (modifier .attribute ().equals (Attributes .ATTACK_SPEED )) {
153+ for (var entry : oldMods .modifiers ()) {
154+ if (entry .attribute ().equals (Attributes .ATTACK_SPEED )) {
155155 continue ;
156156 }
157157
158- list .add (modifier );
158+ list .add (entry );
159159 }
160160 list .add (new ItemAttributeModifiers .Entry (Attributes .ATTACK_SPEED ,
161161 new AttributeModifier (BASE_ATTACK_SPEED_ID , speed , Operation .ADD_VALUE ),
@@ -168,12 +168,12 @@ public interface ItemComponentFunctions extends ComponentFunctions {
168168 var oldMods = kjs$getAttributeModifiers ();
169169
170170 var list = new ArrayList <ItemAttributeModifiers .Entry >(oldMods .modifiers ().size ());
171- for (var modifier : oldMods .modifiers ()) {
172- if (modifier .attribute ().equals (Attributes .ATTACK_DAMAGE )) {
171+ for (var entry : oldMods .modifiers ()) {
172+ if (entry .attribute ().equals (Attributes .ATTACK_DAMAGE )) {
173173 continue ;
174174 }
175175
176- list .add (modifier );
176+ list .add (entry );
177177 }
178178 list .add (new ItemAttributeModifiers .Entry (Attributes .ATTACK_DAMAGE ,
179179 new AttributeModifier (BASE_ATTACK_DAMAGE_ID , dmg , Operation .ADD_VALUE ),
@@ -182,6 +182,48 @@ public interface ItemComponentFunctions extends ComponentFunctions {
182182 kjs$override (DataComponents .ATTRIBUTE_MODIFIERS , new ItemAttributeModifiers (list , oldMods .showInTooltip ()));
183183 }
184184
185+ default double kjs$getAttackDamage () {
186+ var base = kjs$getBaseAttackDamage ();
187+ var sum = 0.0 ;
188+
189+ for (var entry : kjs$getAttributeModifiers ().modifiers ()) {
190+ if (entry .matches (Attributes .ATTACK_DAMAGE , BASE_ATTACK_DAMAGE_ID )) {
191+ continue ;
192+ }
193+
194+ var mod = entry .modifier ();
195+ double d1 = mod .amount ();
196+
197+ sum += switch (mod .operation ()) {
198+ case ADD_VALUE -> d1 ;
199+ case ADD_MULTIPLIED_BASE -> d1 * base ;
200+ case ADD_MULTIPLIED_TOTAL -> d1 * sum ;
201+ };
202+ }
203+ return sum ;
204+ }
205+
206+ default double kjs$getAttackSpeed () {
207+ var base = kjs$getBaseAttackSpeed ();
208+ var sum = 0.0 ;
209+
210+ for (var entry : kjs$getAttributeModifiers ().modifiers ()) {
211+ if (entry .matches (Attributes .ATTACK_SPEED , BASE_ATTACK_SPEED_ID )) {
212+ continue ;
213+ }
214+
215+ var mod = entry .modifier ();
216+ double d1 = mod .amount ();
217+
218+ sum += switch (mod .operation ()) {
219+ case ADD_VALUE -> d1 ;
220+ case ADD_MULTIPLIED_BASE -> d1 * base ;
221+ case ADD_MULTIPLIED_TOTAL -> d1 * sum ;
222+ };
223+ }
224+ return sum ;
225+ }
226+
185227 default void kjs$setBaseAttackSpeed (double speed ) {
186228 kjs$override (DataComponents .ATTRIBUTE_MODIFIERS , kjs$getAttributeModifiers ()
187229 .withModifierAdded (Attributes .ATTACK_SPEED ,
@@ -196,4 +238,22 @@ public interface ItemComponentFunctions extends ComponentFunctions {
196238 EquipmentSlotGroup .MAINHAND ));
197239 }
198240
241+ default double kjs$getBaseAttackDamage () {
242+ for (var modifier : kjs$getAttributeModifiers ().modifiers ()) {
243+ if (modifier .matches (Attributes .ATTACK_DAMAGE , BASE_ATTACK_DAMAGE_ID )) {
244+ return modifier .modifier ().amount ();
245+ }
246+ }
247+ return 0.0 ;
248+ }
249+
250+ default double kjs$getBaseAttackSpeed () {
251+ for (var modifier : kjs$getAttributeModifiers ().modifiers ()) {
252+ if (modifier .matches (Attributes .ATTACK_SPEED , BASE_ATTACK_SPEED_ID )) {
253+ return modifier .modifier ().amount ();
254+ }
255+ }
256+ return 0.0 ;
257+ }
258+
199259}
0 commit comments