Even More Modifiers  1.0.0.0
A mod for rolling various bonus stats on items
ModifierDelegatorItem.cs
Go to the documentation of this file.
1 using System.Collections.ObjectModel;
2 using Loot.Api.Core;
3 using Loot.Hacks;
4 using Microsoft.Xna.Framework;
5 using Microsoft.Xna.Framework.Graphics;
6 using Terraria;
7 using Terraria.ModLoader;
8 using Terraria.Utilities;
9 
10 namespace Loot.Api.Delegators
11 {
15  internal sealed class ModifierDelegatorItem : GlobalItem
16  {
17  public override bool InstancePerEntity => false;
18  public override bool CloneNewInstances => false;
19  private CheatedItemHackGlobalItem GetActivatedModifierItem(Item item) => CheatedItemHackGlobalItem.GetInfo(item);
20 
21  public override bool AltFunctionUse(Item item, Player player)
22  {
23  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
24  {
25  return base.AltFunctionUse(item, player);
26  }
27 
28  bool b = base.AltFunctionUse(item, player);
29 
30  foreach (Modifier m in LootModItem.GetActivePool(item))
31  {
32  b &= m.AltFunctionUse(item, player);
33  }
34 
35  return b;
36  }
37 
38  public override bool CanEquipAccessory(Item item, Player player, int slot)
39  {
40  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
41  {
42  return base.CanEquipAccessory(item, player, slot);
43  }
44 
45  bool b = base.CanEquipAccessory(item, player, slot);
46 
47  foreach (Modifier m in LootModItem.GetActivePool(item))
48  {
49  b &= m.CanEquipAccessory(item, player, slot);
50  }
51 
52  return b;
53  }
54 
55  public override bool? CanHitNPC(Item item, Player player, NPC target)
56  {
57  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
58  {
59  return base.CanHitNPC(item, player, target);
60  }
61 
62  bool? b = base.CanHitNPC(item, player, target);
63 
64  foreach (Modifier m in LootModItem.GetActivePool(item))
65  {
66  b &= m.CanHitNPC(item, player, target);
67  }
68 
69  return b;
70  }
71 
72  public override bool CanHitPvp(Item item, Player player, Player target)
73  {
74  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
75  {
76  return base.CanHitPvp(item, player, target);
77  }
78 
79  bool b = base.CanHitPvp(item, player, target);
80 
81  foreach (Modifier m in LootModItem.GetActivePool(item))
82  {
83  b &= m.CanHitPvp(item, player, target);
84  }
85 
86  return b;
87  }
88 
89  public override bool CanPickup(Item item, Player player)
90  {
91  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
92  {
93  return base.CanPickup(item, player);
94  }
95 
96  bool b = base.CanPickup(item, player);
97 
98  foreach (Modifier m in LootModItem.GetActivePool(item))
99  {
100  b &= m.CanPickup(item, player);
101  }
102 
103  return b;
104  }
105 
106  public override bool CanRightClick(Item item)
107  {
108  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
109  {
110  return base.CanRightClick(item);
111  }
112 
113  bool b = base.CanRightClick(item);
114 
115  foreach (Modifier m in LootModItem.GetActivePool(item))
116  {
117  b &= m.CanRightClick(item);
118  }
119 
120  return b;
121  }
122 
123  public override bool CanUseItem(Item item, Player player)
124  {
125  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
126  {
127  return base.CanUseItem(item, player);
128  }
129 
130  bool b = base.CanUseItem(item, player);
131 
132  foreach (Modifier m in LootModItem.GetActivePool(item))
133  {
134  b &= m.CanUseItem(item, player);
135  }
136 
137  return b;
138  }
139 
140  public override int ChoosePrefix(Item item, UnifiedRandom rand)
141  {
142  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
143  {
144  return base.ChoosePrefix(item, rand);
145  }
146 
147  int p = base.ChoosePrefix(item, rand);
148  if (p != -1)
149  {
150  return p;
151  }
152 
153  foreach (Modifier m in LootModItem.GetActivePool(item))
154  {
155  p = m.ChoosePrefix(item, rand);
156  // TODO which modifier takes precedence ?
157  if (p != -1)
158  {
159  return p;
160  }
161  }
162 
163  return -1;
164  }
165 
166  public override bool ConsumeAmmo(Item item, Player player)
167  {
168  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
169  {
170  return base.ConsumeAmmo(item, player);
171  }
172 
173  bool b = base.ConsumeAmmo(item, player);
174 
175  foreach (Modifier m in LootModItem.GetActivePool(item))
176  {
177  b &= m.ConsumeAmmo(item, player);
178  }
179 
180  return b;
181  }
182 
183  public override void OnConsumeAmmo(Item item, Player player)
184  {
185  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
186  {
187  return;
188  }
189 
190  base.OnConsumeAmmo(item, player);
191 
192  foreach (Modifier m in LootModItem.GetActivePool(item))
193  {
194  m.OnConsumeAmmo(item, player);
195  }
196  }
197 
198  public override bool ConsumeItem(Item item, Player player)
199  {
200  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
201  {
202  return base.ConsumeItem(item, player);
203  }
204 
205  bool b = base.ConsumeItem(item, player);
206 
207  foreach (Modifier m in LootModItem.GetActivePool(item))
208  {
209  b &= m.ConsumeItem(item, player);
210  }
211 
212  return b;
213  }
214 
215  public override void OnConsumeItem(Item item, Player player)
216  {
217  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
218  {
219  return;
220  }
221 
222  base.OnConsumeItem(item, player);
223 
224  foreach (Modifier m in LootModItem.GetActivePool(item))
225  {
226  m.OnConsumeItem(item, player);
227  }
228  }
229 
230  public override Color? GetAlpha(Item item, Color lightColor)
231  {
232  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
233  {
234  return base.GetAlpha(item, lightColor);
235  }
236 
237  Color? a = base.GetAlpha(item, lightColor);
238  if (a.HasValue)
239  {
240  return a;
241  }
242 
243  foreach (Modifier m in LootModItem.GetActivePool(item))
244  {
245  a = m.GetAlpha(item, lightColor);
246  // TODO which modifier takes precedence ?
247  if (a.HasValue)
248  {
249  return a;
250  }
251  }
252 
253  return null;
254  }
255 
256  public override void GetWeaponCrit(Item item, Player player, ref int crit)
257  {
258  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
259  {
260  return;
261  }
262 
263  base.GetWeaponCrit(item, player, ref crit);
264 
265  foreach (Modifier m in LootModItem.GetActivePool(item))
266  {
267  m.GetWeaponCrit(item, player, ref crit);
268  }
269  }
270 
271  public override void GetHealMana(Item item, Player player, bool quickHeal, ref int healValue)
272  {
273  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
274  {
275  return;
276  }
277 
278  base.GetHealMana(item, player, quickHeal, ref healValue);
279 
280  foreach (Modifier m in LootModItem.GetActivePool(item))
281  {
282  m.GetHealMana(item, player, quickHeal, ref healValue);
283  }
284  }
285 
286  public override void ModifyWeaponDamage(Item item, Player player, ref float add, ref float mult, ref float flat)
287  {
288  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
289  {
290  return;
291  }
292 
293  base.ModifyWeaponDamage(item, player, ref add, ref mult, ref flat);
294 
295  foreach (Modifier m in LootModItem.GetActivePool(item))
296  {
297  m.ModifyWeaponDamage(item, player, ref add, ref mult, ref flat);
298  }
299  }
300 
301  public override void GetWeaponKnockback(Item item, Player player, ref float knockback)
302  {
303  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
304  {
305  return;
306  }
307 
308  base.GetWeaponKnockback(item, player, ref knockback);
309 
310  foreach (Modifier m in LootModItem.GetActivePool(item))
311  {
312  m.GetWeaponKnockback(item, player, ref knockback);
313  }
314  }
315 
316  public override void GrabRange(Item item, Player player, ref int grabRange)
317  {
318  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
319  {
320  return;
321  }
322 
323  base.GrabRange(item, player, ref grabRange);
324 
325  foreach (Modifier m in LootModItem.GetActivePool(item))
326  {
327  m.GrabRange(item, player, ref grabRange);
328  }
329  }
330 
331  public override bool GrabStyle(Item item, Player player)
332  {
333  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
334  {
335  return base.GrabStyle(item, player);
336  }
337 
338  bool b = base.GrabStyle(item, player);
339 
340  foreach (Modifier m in LootModItem.GetActivePool(item))
341  {
342  b &= m.GrabStyle(item, player);
343  }
344 
345  return b;
346  }
347 
348  public override void HoldItem(Item item, Player player)
349  {
350  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
351  {
352  return;
353  }
354 
355  base.HoldItem(item, player);
356 
357  foreach (Modifier m in LootModItem.GetActivePool(item))
358  {
359  m.HoldItem(item, player);
360  }
361  }
362 
363  public override bool HoldItemFrame(Item item, Player player)
364  {
365  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
366  {
367  return base.HoldItemFrame(item, player);
368  }
369 
370  bool b = base.HoldItemFrame(item, player);
371 
372  foreach (Modifier m in LootModItem.GetActivePool(item))
373  {
374  b &= m.HoldItemFrame(item, player);
375  }
376 
377  return b;
378  }
379 
380  public override void HoldStyle(Item item, Player player)
381  {
382  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
383  {
384  return;
385  }
386 
387  base.HoldStyle(item, player);
388 
389  foreach (Modifier m in LootModItem.GetActivePool(item))
390  {
391  m.HoldStyle(item, player);
392  }
393  }
394 
395  public override void HorizontalWingSpeeds(Item item, Player player, ref float speed, ref float acceleration)
396  {
397  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
398  {
399  return;
400  }
401 
402  base.HorizontalWingSpeeds(item, player, ref speed, ref acceleration);
403 
404  foreach (Modifier m in LootModItem.GetActivePool(item))
405  {
406  m.HorizontalWingSpeeds(item, player, ref speed, ref acceleration);
407  }
408  }
409 
410  public override bool ItemSpace(Item item, Player player)
411  {
412  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
413  {
414  return base.ItemSpace(item, player);
415  }
416 
417  bool b = base.ItemSpace(item, player);
418 
419  foreach (Modifier m in LootModItem.GetActivePool(item))
420  {
421  b &= m.ItemSpace(item, player);
422  }
423 
424  return b;
425  }
426 
427  public override void MeleeEffects(Item item, Player player, Rectangle hitbox)
428  {
429  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
430  {
431  return;
432  }
433 
434  base.MeleeEffects(item, player, hitbox);
435 
436  foreach (Modifier m in LootModItem.GetActivePool(item))
437  {
438  m.MeleeEffects(item, player, hitbox);
439  }
440  }
441 
442  public override float MeleeSpeedMultiplier(Item item, Player player)
443  {
444  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
445  {
446  return base.MeleeSpeedMultiplier(item, player);
447  }
448 
449  float mult = base.MeleeSpeedMultiplier(item, player);
450  if (mult != 1f)
451  {
452  return mult;
453  }
454 
455  foreach (Modifier m in LootModItem.GetActivePool(item))
456  {
457  mult = m.MeleeSpeedMultiplier(item, player);
458  // TODO which modifier takes precedence ?
459  if (mult != 1f)
460  {
461  return mult;
462  }
463  }
464 
465  return 1f;
466  }
467 
468  public override void GetHealLife(Item item, Player player, bool quickHeal, ref int healValue)
469  {
470  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
471  {
472  return;
473  }
474 
475  foreach (Modifier m in LootModItem.GetActivePool(item))
476  {
477  m.GetHealLife(item, player, quickHeal, ref healValue);
478  }
479  }
480 
481  public override void ModifyHitNPC(Item item, Player player, NPC target, ref int damage, ref float knockBack, ref bool crit)
482  {
483  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
484  {
485  return;
486  }
487 
488  base.ModifyHitNPC(item, player, target, ref damage, ref knockBack, ref crit);
489 
490  foreach (Modifier m in LootModItem.GetActivePool(item))
491  {
492  m.ModifyHitNPC(item, player, target, ref damage, ref knockBack, ref crit);
493  }
494  }
495 
496  public override void ModifyHitPvp(Item item, Player player, Player target, ref int damage, ref bool crit)
497  {
498  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
499  {
500  return;
501  }
502 
503  base.ModifyHitPvp(item, player, target, ref damage, ref crit);
504 
505  foreach (Modifier m in LootModItem.GetActivePool(item))
506  {
507  m.ModifyHitPvp(item, player, target, ref damage, ref crit);
508  }
509  }
510 
511  public override bool NewPreReforge(Item item)
512  {
513  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
514  {
515  return base.NewPreReforge(item);
516  }
517 
518  bool b = base.NewPreReforge(item);
519 
520  foreach (Modifier m in LootModItem.GetActivePool(item))
521  {
522  b &= m.NewPreReforge(item);
523  }
524 
525  return b;
526  }
527 
528  public override void OnCraft(Item item, Recipe recipe)
529  {
530  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
531  {
532  return;
533  }
534 
535  base.OnCraft(item, recipe);
536 
537  foreach (Modifier m in LootModItem.GetActivePool(item))
538  {
539  m.OnCraft(item, recipe);
540  }
541  }
542 
543  public override void OnHitNPC(Item item, Player player, NPC target, int damage, float knockBack, bool crit)
544  {
545  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
546  {
547  return;
548  }
549 
550  base.OnHitNPC(item, player, target, damage, knockBack, crit);
551 
552  foreach (Modifier m in LootModItem.GetActivePool(item))
553  {
554  m.OnHitNPC(item, player, target, damage, knockBack, crit);
555  }
556  }
557 
558  public override void OnHitPvp(Item item, Player player, Player target, int damage, bool crit)
559  {
560  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
561  {
562  return;
563  }
564 
565  base.OnHitPvp(item, player, target, damage, crit);
566 
567  foreach (Modifier m in LootModItem.GetActivePool(item))
568  {
569  m.OnHitPvp(item, player, target, damage, crit);
570  }
571  }
572 
573  public override bool OnPickup(Item item, Player player)
574  {
575  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
576  {
577  return base.OnPickup(item, player);
578  }
579 
580  bool b = base.OnPickup(item, player);
581 
582  foreach (Modifier m in LootModItem.GetActivePool(item))
583  {
584  b &= m.OnPickup(item, player);
585  }
586 
587  return b;
588  }
589 
590  public override void PickAmmo(Item item, Player player, ref int type, ref float speed, ref int damage, ref float knockback)
591  {
592  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
593  {
594  return;
595  }
596 
597  base.PickAmmo(item, player, ref type, ref speed, ref damage, ref knockback);
598 
599  foreach (Modifier m in LootModItem.GetActivePool(item))
600  {
601  m.PickAmmo(item, player, ref type, ref speed, ref damage, ref knockback);
602  }
603  }
604 
605  public override void PostDrawInInventory(Item item, SpriteBatch spriteBatch, Vector2 position, Rectangle frame, Color drawColor, Color itemColor, Vector2 origin, float scale)
606  {
607  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
608  {
609  return;
610  }
611 
612  base.PostDrawInInventory(item, spriteBatch, position, frame, drawColor, itemColor, origin, scale);
613 
614  foreach (Modifier m in LootModItem.GetActivePool(item))
615  {
616  m.PostDrawInInventory(item, spriteBatch, position, frame, drawColor, itemColor, origin, scale);
617  }
618  }
619 
620  public override void PostDrawInWorld(Item item, SpriteBatch spriteBatch, Color lightColor, Color alphaColor, float rotation, float scale, int whoAmI)
621  {
622  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
623  {
624  return;
625  }
626 
627  base.PostDrawInWorld(item, spriteBatch, lightColor, alphaColor, rotation, scale, whoAmI);
628 
629  foreach (Modifier m in LootModItem.GetActivePool(item))
630  {
631  m.PostDrawInWorld(item, spriteBatch, lightColor, alphaColor, rotation, scale, whoAmI);
632  }
633  }
634 
635  public override void PostDrawTooltip(Item item, ReadOnlyCollection<DrawableTooltipLine> lines)
636  {
637  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
638  {
639  return;
640  }
641 
642  base.PostDrawTooltip(item, lines);
643 
644  foreach (Modifier m in LootModItem.GetActivePool(item))
645  {
646  m.PostDrawTooltip(item, lines);
647  }
648  }
649 
650  public override void PostDrawTooltipLine(Item item, DrawableTooltipLine line)
651  {
652  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
653  {
654  return;
655  }
656 
657  base.PostDrawTooltipLine(item, line);
658 
659  foreach (Modifier m in LootModItem.GetActivePool(item))
660  {
661  m.PostDrawTooltipLine(item, line);
662  }
663  }
664 
665  public override void PostReforge(Item item)
666  {
667  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
668  {
669  return;
670  }
671 
672  base.PostReforge(item);
673 
674  foreach (Modifier m in LootModItem.GetActivePool(item))
675  {
676  m.PostReforge(item);
677  }
678  }
679 
680  public override void PostUpdate(Item item)
681  {
682  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
683  {
684  return;
685  }
686 
687  base.PostUpdate(item);
688 
689  foreach (Modifier m in LootModItem.GetActivePool(item))
690  {
691  m.PostUpdate(item);
692  }
693  }
694 
695  public override bool PreDrawInInventory(Item item, SpriteBatch spriteBatch, Vector2 position, Rectangle frame, Color drawColor, Color itemColor, Vector2 origin, float scale)
696  {
697  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
698  {
699  return base.PreDrawInInventory(item, spriteBatch, position, frame, drawColor, itemColor, origin, scale);
700  }
701 
702  bool b = base.PreDrawInInventory(item, spriteBatch, position, frame, drawColor, itemColor, origin, scale);
703 
704  foreach (Modifier m in LootModItem.GetActivePool(item))
705  {
706  b &= m.PreDrawInInventory(item, spriteBatch, position, frame, drawColor, itemColor, origin, scale);
707  }
708 
709  return b;
710  }
711 
712  public override bool PreDrawInWorld(Item item, SpriteBatch spriteBatch, Color lightColor, Color alphaColor, ref float rotation, ref float scale, int whoAmI)
713  {
714  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
715  {
716  return base.PreDrawInWorld(item, spriteBatch, lightColor, alphaColor, ref rotation, ref scale, whoAmI);
717  }
718 
719  bool b = base.PreDrawInWorld(item, spriteBatch, lightColor, alphaColor, ref rotation, ref scale, whoAmI);
720 
721  foreach (Modifier m in LootModItem.GetActivePool(item))
722  {
723  b &= m.PreDrawInWorld(item, spriteBatch, lightColor, alphaColor, ref rotation, ref scale, whoAmI);
724  }
725 
726  return b;
727  }
728 
729  public override bool PreDrawTooltip(Item item, ReadOnlyCollection<TooltipLine> lines, ref int x, ref int y)
730  {
731  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
732  {
733  return base.PreDrawTooltip(item, lines, ref x, ref y);
734  }
735 
736  bool b = base.PreDrawTooltip(item, lines, ref x, ref y);
737 
738  foreach (Modifier m in LootModItem.GetActivePool(item))
739  {
740  b &= m.PreDrawTooltip(item, lines, ref x, ref y);
741  }
742 
743  return b;
744  }
745 
746  public override bool PreDrawTooltipLine(Item item, DrawableTooltipLine line, ref int yOffset)
747  {
748  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
749  {
750  return base.PreDrawTooltipLine(item, line, ref yOffset);
751  }
752 
753  bool b = base.PreDrawTooltipLine(item, line, ref yOffset);
754 
755  foreach (Modifier m in LootModItem.GetActivePool(item))
756  {
757  b &= m.PreDrawTooltipLine(item, line, ref yOffset);
758  }
759 
760  return b;
761  }
762 
763  public override bool ReforgePrice(Item item, ref int reforgePrice, ref bool canApplyDiscount)
764  {
765  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
766  {
767  return base.ReforgePrice(item, ref reforgePrice, ref canApplyDiscount);
768  }
769 
770  bool b = base.ReforgePrice(item, ref reforgePrice, ref canApplyDiscount);
771 
772  foreach (Modifier m in LootModItem.GetActivePool(item))
773  {
774  b &= m.ReforgePrice(item, ref reforgePrice, ref canApplyDiscount);
775  }
776 
777  return b;
778  }
779 
780  public override void RightClick(Item item, Player player)
781  {
782  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
783  {
784  return;
785  }
786 
787  base.RightClick(item, player);
788 
789  foreach (Modifier m in LootModItem.GetActivePool(item))
790  {
791  m.RightClick(item, player);
792  }
793  }
794 
795  public override void SetDefaults(Item item)
796  {
797  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
798  {
799  return;
800  }
801 
802  base.SetDefaults(item);
803 
804  foreach (Modifier m in LootModItem.GetActivePool(item))
805  {
806  m.SetDefaults(item);
807  }
808  }
809 
810  public override bool Shoot(Item item, Player player, ref Vector2 position, ref float speedX, ref float speedY, ref int type, ref int damage, ref float knockBack)
811  {
812  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
813  {
814  return base.Shoot(item, player, ref position, ref speedX, ref speedY, ref type, ref damage, ref knockBack);
815  }
816 
817  ;
818 
819  bool b = base.Shoot(item, player, ref position, ref speedX, ref speedY, ref type, ref damage, ref knockBack);
820 
821  foreach (Modifier m in LootModItem.GetActivePool(item))
822  {
823  b &= m.Shoot(item, player, ref position, ref speedX, ref speedY, ref type, ref damage, ref knockBack);
824  }
825 
826  return b;
827  }
828 
829  public override void Update(Item item, ref float gravity, ref float maxFallSpeed)
830  {
831  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, Main.LocalPlayer))
832  {
833  return;
834  }
835 
836  base.Update(item, ref gravity, ref maxFallSpeed);
837 
838  foreach (Modifier m in LootModItem.GetActivePool(item))
839  {
840  m.Update(item, ref gravity, ref maxFallSpeed);
841  }
842  }
843 
844  public override void UpdateAccessory(Item item, Player player, bool hideVisual)
845  {
846  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
847  {
848  return;
849  }
850 
851  base.UpdateAccessory(item, player, hideVisual);
852 
853  foreach (Modifier m in LootModItem.GetActivePool(item))
854  {
855  m.UpdateAccessory(item, player, hideVisual);
856  }
857  }
858 
859  public override void UpdateEquip(Item item, Player player)
860  {
861  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
862  {
863  return;
864  }
865 
866  base.UpdateEquip(item, player);
867 
868  foreach (Modifier m in LootModItem.GetActivePool(item))
869  {
870  m.UpdateEquip(item, player);
871  }
872  }
873 
874  public override void UpdateInventory(Item item, Player player)
875  {
876  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
877  {
878  return;
879  }
880 
881  base.UpdateInventory(item, player);
882 
883  foreach (Modifier m in LootModItem.GetActivePool(item))
884  {
885  m.UpdateInventory(item, player);
886  }
887  }
888 
889  public override bool UseItem(Item item, Player player)
890  {
891  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
892  {
893  return base.UseItem(item, player);
894  }
895 
896  bool b = base.UseItem(item, player);
897 
898  foreach (Modifier m in LootModItem.GetActivePool(item))
899  {
900  b &= m.UseItem(item, player);
901  }
902 
903  return b;
904  }
905 
906  public override bool UseItemFrame(Item item, Player player)
907  {
908  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
909  {
910  return base.UseItemFrame(item, player);
911  }
912 
913  bool b = base.UseItemFrame(item, player);
914 
915  foreach (Modifier m in LootModItem.GetActivePool(item))
916  {
917  b &= m.UseItemFrame(item, player);
918  }
919 
920  return b;
921  }
922 
923  public override void UseItemHitbox(Item item, Player player, ref Rectangle hitbox, ref bool noHitbox)
924  {
925  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
926  {
927  return;
928  }
929 
930  base.UseItemHitbox(item, player, ref hitbox, ref noHitbox);
931 
932  foreach (Modifier m in LootModItem.GetActivePool(item))
933  {
934  m.UseItemHitbox(item, player, ref hitbox, ref noHitbox);
935  }
936  }
937 
938  public override void UseStyle(Item item, Player player)
939  {
940  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
941  {
942  return;
943  }
944 
945  base.UseStyle(item, player);
946 
947  foreach (Modifier m in LootModItem.GetActivePool(item))
948  {
949  m.UseStyle(item, player);
950  }
951  }
952 
953  public override float UseTimeMultiplier(Item item, Player player)
954  {
955  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
956  {
957  return base.UseTimeMultiplier(item, player);
958  }
959 
960  float f = base.UseTimeMultiplier(item, player);
961  if (f != 1f)
962  {
963  return f;
964  }
965 
966  foreach (Modifier m in LootModItem.GetActivePool(item))
967  {
968  f = m.UseTimeMultiplier(item, player);
969  // TODO which modifier takes precedence ?
970  if (f != 1f)
971  {
972  return f;
973  }
974  }
975 
976  return f;
977  }
978 
979  public override void VerticalWingSpeeds(Item item, Player player, ref float ascentWhenFalling, ref float ascentWhenRising, ref float maxCanAscendMultiplier, ref float maxAscentMultiplier, ref float constantAscend)
980  {
981  if (GetActivatedModifierItem(item).ShouldBeIgnored(item, player))
982  {
983  return;
984  }
985 
986  base.VerticalWingSpeeds(item, player, ref ascentWhenFalling, ref ascentWhenRising, ref maxCanAscendMultiplier, ref maxAscentMultiplier, ref constantAscend);
987 
988  foreach (Modifier m in LootModItem.GetActivePool(item))
989  {
990  m.VerticalWingSpeeds(item, player, ref ascentWhenFalling, ref ascentWhenRising, ref maxCanAscendMultiplier, ref maxAscentMultiplier, ref constantAscend);
991  }
992  }
993  }
994 }
Defines a modifier, which is an unloaded GlobalItem Making it a GlobalItem gives easy access to all h...
Definition: Modifier.cs:21
Can detect if an item was activated via cheats
Defines an item that may be modified by modifiers from mods
Definition: LootModItem.cs:21
static List< Modifier > GetActivePool(Item item)
sealed override void SetDefaults(Item item)
Definition: Modifier.cs:136
sealed override int ChoosePrefix(Item item, UnifiedRandom rand)
Definition: Modifier.cs:142
static CheatedItemHackGlobalItem GetInfo(Item item)
sealed override void OnCraft(Item item, Recipe recipe)
Definition: Modifier.cs:162