66package meteordevelopment .meteorclient .systems .modules .combat ;
77
88import meteordevelopment .meteorclient .events .entity .player .AttackEntityEvent ;
9+ import meteordevelopment .meteorclient .events .entity .player .DoAttackEvent ;
910import meteordevelopment .meteorclient .events .world .TickEvent ;
1011import meteordevelopment .meteorclient .settings .*;
1112import meteordevelopment .meteorclient .systems .modules .Categories ;
2728import net .minecraft .item .TridentItem ;
2829import net .minecraft .registry .tag .EntityTypeTags ;
2930import net .minecraft .registry .tag .ItemTags ;
31+ import net .minecraft .util .hit .HitResult ;
3032
3133public class AttributeSwap extends Module {
3234 private final SettingGroup sgGeneral = settings .getDefaultGroup ();
@@ -47,8 +49,15 @@ public class AttributeSwap extends Module {
4749 .name ("target-slot" )
4850 .description ("Hotbar slot to swap to (1-9)." )
4951 .defaultValue (1 )
50- .min (1 )
51- .sliderRange (1 , 9 )
52+ .range (1 , 9 )
53+ .visible (() -> mode .get () == Mode .Simple )
54+ .build ()
55+ );
56+
57+ private final Setting <Boolean > swapOnMiss = sgGeneral .add (new BoolSetting .Builder ()
58+ .name ("swap-on-miss" )
59+ .description ("Whether to swap on a missed attack. Useful for quickly lunging with spears." )
60+ .defaultValue (false )
5261 .visible (() -> mode .get () == Mode .Simple )
5362 .build ()
5463 );
@@ -276,21 +285,31 @@ public void onDeactivate() {
276285 }
277286
278287 @ EventHandler
279- private void onAttack (AttackEntityEvent event ) {
280- if (!canSwapByWeapon ()) return ;
288+ private void onAttack (DoAttackEvent event ) {
289+ if (!canSwapByWeapon () || mode .get () == Mode .Smart || !swapOnMiss .get ()) return ;
290+ if (mc .crosshairTarget .getType () == HitResult .Type .BLOCK ) return ;
291+
292+ doSwap (targetSlot .get () - 1 );
293+ }
294+
295+ @ EventHandler
296+ private void onAttackEntity (AttackEntityEvent event ) {
297+ if (!canSwapByWeapon () || (mode .get () == Mode .Simple && swapOnMiss .get ())) return ;
281298 performSwap (event .entity );
282299 }
283300
284301 private void performSwap (Entity target ) {
285302 if (awaitingBack ) return ;
286303
287- int slotIndex ;
288-
289304 if (mode .get () == Mode .Simple ) {
290- slotIndex = targetSlot .get () - 1 ;
305+ doSwap ( targetSlot .get () - 1 ) ;
291306 } else {
292- slotIndex = getSmartSlot (target );
307+ doSwap ( getSmartSlot (target ) );
293308 }
309+ }
310+
311+ private void doSwap (int slotIndex ) {
312+ if (awaitingBack ) return ;
294313
295314 if (slotIndex < 0 || slotIndex > 8 ) return ;
296315 if (slotIndex == mc .player .getInventory ().getSelectedSlot ()) return ;
0 commit comments