77 */
88package net .wurstclient .hacks ;
99
10+ import com .mojang .blaze3d .vertex .PoseStack ;
1011import java .util .ArrayList ;
12+ import java .util .List ;
1113import java .util .stream .Collectors ;
1214import java .util .stream .Stream ;
1315import net .minecraft .world .InteractionHand ;
1416import net .minecraft .world .entity .Entity ;
1517import net .wurstclient .Category ;
1618import net .wurstclient .SearchTags ;
19+ import net .wurstclient .events .RenderListener ;
1720import net .wurstclient .events .UpdateListener ;
1821import net .wurstclient .hack .Hack ;
1922import net .wurstclient .settings .AttackSpeedSliderSetting ;
23+ import net .wurstclient .settings .CheckboxSetting ;
2024import net .wurstclient .settings .PauseAttackOnContainersSetting ;
2125import net .wurstclient .settings .SliderSetting ;
2226import net .wurstclient .settings .SliderSetting .ValueDisplay ;
2327import net .wurstclient .settings .SwingHandSetting ;
2428import net .wurstclient .settings .SwingHandSetting .SwingHand ;
2529import net .wurstclient .settings .filterlists .EntityFilterList ;
2630import net .wurstclient .util .EntityUtils ;
31+ import net .wurstclient .util .NpcUtils ;
32+ import net .wurstclient .util .RenderUtils ;
2733import net .wurstclient .util .RotationUtils ;
2834
2935@ SearchTags ({"multi aura" , "ForceField" , "force field" })
30- public final class MultiAuraHack extends Hack implements UpdateListener
36+ public final class MultiAuraHack extends Hack
37+ implements UpdateListener , RenderListener
3138{
3239 private final SliderSetting range =
3340 new SliderSetting ("Range" , 5 , 1 , 6 , 0.05 , ValueDisplay .DECIMAL );
@@ -47,6 +54,16 @@ public final class MultiAuraHack extends Hack implements UpdateListener
4754 private final EntityFilterList entityFilters =
4855 EntityFilterList .genericCombat ();
4956
57+ private final CheckboxSetting ignoreNpcs = new CheckboxSetting (
58+ "Ignore NPCs" , "Skips likely server-side NPC players." , true );
59+
60+ private final CheckboxSetting showAttackTracers =
61+ new CheckboxSetting ("Show attack tracers" ,
62+ "Draw tracer lines to entities MultiAura is currently targeting." ,
63+ false );
64+
65+ private final List <Entity > currentTargets = new ArrayList <>();
66+
5067 public MultiAuraHack ()
5168 {
5269 super ("MultiAura" );
@@ -57,6 +74,8 @@ public MultiAuraHack()
5774 addSetting (fov );
5875 addSetting (swingHand );
5976 addSetting (pauseOnContainers );
77+ addSetting (ignoreNpcs );
78+ addSetting (showAttackTracers );
6079
6180 entityFilters .forEach (this ::addSetting );
6281 }
@@ -77,17 +96,21 @@ protected void onEnable()
7796
7897 speed .resetTimer ();
7998 EVENTS .add (UpdateListener .class , this );
99+ EVENTS .add (RenderListener .class , this );
80100 }
81101
82102 @ Override
83103 protected void onDisable ()
84104 {
85105 EVENTS .remove (UpdateListener .class , this );
106+ EVENTS .remove (RenderListener .class , this );
107+ currentTargets .clear ();
86108 }
87109
88110 @ Override
89111 public void onUpdate ()
90112 {
113+ currentTargets .clear ();
91114 speed .updateTimer ();
92115 if (!speed .isTimeToAttack ())
93116 return ;
@@ -107,10 +130,16 @@ public void onUpdate()
107130
108131 stream = entityFilters .applyTo (stream );
109132
133+ if (ignoreNpcs .isChecked ())
134+ stream = stream .filter (
135+ e -> !(e instanceof net .minecraft .world .entity .player .Player p )
136+ || !NpcUtils .isLikelyNpcPlayer (p ));
137+
110138 ArrayList <Entity > entities =
111139 stream .collect (Collectors .toCollection (ArrayList ::new ));
112140 if (entities .isEmpty ())
113141 return ;
142+ currentTargets .addAll (entities );
114143
115144 WURST .getHax ().autoSwordHack .setSlot (entities .get (0 ));
116145
@@ -127,4 +156,26 @@ public void onUpdate()
127156 swingHand .swing (InteractionHand .MAIN_HAND );
128157 speed .resetTimer ();
129158 }
159+
160+ @ Override
161+ public void onRender (PoseStack matrixStack , float partialTicks )
162+ {
163+ if (!showAttackTracers .isChecked () || currentTargets .isEmpty ())
164+ return ;
165+
166+ ArrayList <RenderUtils .ColoredPoint > points = new ArrayList <>();
167+ for (Entity e : currentTargets )
168+ {
169+ if (e == null || e .isRemoved ())
170+ continue ;
171+ points .add (new RenderUtils .ColoredPoint (
172+ e .getBoundingBox ().getCenter (), 0xFFFF4444 ));
173+ }
174+
175+ if (points .isEmpty ())
176+ return ;
177+
178+ RenderUtils .drawTracers ("multiaura_debug" , matrixStack , partialTicks ,
179+ points , false , 2.0 );
180+ }
130181}
0 commit comments