1313import com .minecrafttas .tasmod .registries .TASmodConfig ;
1414import com .minecrafttas .tasmod .registries .TASmodPackets ;
1515import com .minecrafttas .tasmod .savestates .SavestateHandlerServer .SavestateCallback ;
16+ import com .minecrafttas .tasmod .savestates .SavestateIndexer .ErrorRunnable ;
1617import com .minecrafttas .tasmod .savestates .SavestateIndexer .FailedSavestate ;
1718import com .minecrafttas .tasmod .savestates .SavestateIndexer .Savestate ;
1819import com .minecrafttas .tasmod .savestates .exceptions .LoadstateException ;
2425import com .minecrafttas .tasmod .util .I18n ;
2526import com .minecrafttas .tasmod .util .LoggerMarkers ;
2627
28+ import net .minecraft .client .Minecraft ;
2729import net .minecraft .command .CommandBase ;
2830import net .minecraft .command .CommandException ;
2931import net .minecraft .command .ICommandSender ;
@@ -416,15 +418,15 @@ private void saveNew(ICommandSender sender) {
416418 try {
417419 TASmod .server .sendToAll (new TASmodBufferBuilder (TASmodPackets .SAVESTATE_RENAME_SCREEN ).writeInt (paths .getSavestate ().getIndex ()).writeString (sender .getName ()));
418420 } catch (Exception e ) {
419- TASmod . LOGGER . catching ( e );
421+ onFailure ( sender , e );
420422 }
421423 }
422424 });
423425
424426 try {
425427 TASmod .savestateHandlerServer .saveState (doneSavingCallback );
426428 } catch (SavestateException e ) {
427- TASmod . LOGGER . catching ( e );
429+ onFailure ( sender , e );
428430 }
429431 }
430432
@@ -433,7 +435,7 @@ private void saveIndex(ICommandSender sender, int index) {
433435 try {
434436 TASmod .savestateHandlerServer .saveState (index , null );
435437 } catch (SavestateException e ) {
436- TASmod . LOGGER . catching ( e );
438+ onFailure ( sender , e );
437439 }
438440 }
439441
@@ -442,7 +444,7 @@ private void saveIndexName(ICommandSender sender, int index, String name) {
442444 try {
443445 TASmod .savestateHandlerServer .saveState (index , name , null );
444446 } catch (SavestateException e ) {
445- TASmod . LOGGER . catching ( e );
447+ onFailure ( sender , e );
446448 }
447449 }
448450
@@ -451,7 +453,7 @@ private void saveName(ICommandSender sender, String name) {
451453 try {
452454 TASmod .savestateHandlerServer .saveState (name , null );
453455 } catch (SavestateException e ) {
454- TASmod . LOGGER . catching ( e );
456+ onFailure ( sender , e );
455457 }
456458 }
457459
@@ -460,7 +462,7 @@ private void loadRecent(ICommandSender sender) {
460462 try {
461463 TASmod .savestateHandlerServer .loadState (null );
462464 } catch (LoadstateException e ) {
463- TASmod . LOGGER . catching ( e );
465+ onFailure ( sender , e );
464466 }
465467 }
466468
@@ -469,30 +471,69 @@ private void loadIndex(ICommandSender sender, int index) {
469471 try {
470472 TASmod .savestateHandlerServer .loadState (index , null );
471473 } catch (LoadstateException e ) {
472- TASmod . LOGGER . catching ( e );
474+ onFailure ( sender , e );
473475 }
474476 }
475477
476478 private void delete (ICommandSender sender , int index ) {
477479 TASmod .LOGGER .trace (LoggerMarkers .Savestate , "Command Delete {}" , index );
480+
481+ SavestateCallback cb = (paths ) -> {
482+ sender .sendMessage (Component .translatable ("msg.lotaslight.savestate.delete" , paths .getSavestate ().getIndex ()).withStyle (TextFormatting .GREEN ).build ());
483+ };
484+
478485 try {
479- TASmod .savestateHandlerServer .deleteSavestate (index );
486+ TASmod .savestateHandlerServer .deleteSavestate (index , cb );
480487 } catch (SavestateDeleteException e ) {
481- e . printStackTrace ( );
488+ onFailure ( sender , e );
482489 }
483490 }
484491
485492 private void deleteMore (ICommandSender sender , int indexFrom , int indexTo ) {
486493 TASmod .LOGGER .trace (LoggerMarkers .Savestate , "Command DeleteMore {}|{}" , indexFrom , indexTo );
487- deleteDis (sender , indexFrom , indexTo );
494+ int count = (indexTo + 1 ) - indexFrom ;
495+
496+ if (count < 0 ) {
497+ onFailure (sender , new SavestateDeleteException ("msg.tasmod.savestate.deleteMore.error.negative" , count ));
498+ }
499+
500+ String translationKey = "msg.tasmod.savestate.deleteMore" + (count == 1 ? ".singular" : ".plural" );
501+
502+ //@formatter:off
503+ Component countComponent = Component .literal (Integer .toString (count )).withStyle (TextFormatting .RED );
504+
505+ Component confirmationComponent = Component .wrap (Component .translatable ("msg.tasmod.savestate.deleteMore.clickable" , true )
506+ .withStyle (
507+ style -> style
508+ .setClickEvent (
509+ CClickEvent .create (ClickEvent .Action .RUN_COMMAND , String .format ("/savestate delete %s %s force" , indexFrom , indexTo ))
510+ )
511+ .setHoverEvent (
512+ CHoverEvent .create (HoverEvent .Action .SHOW_TEXT , Component .translatable ("msg.tasmod.savestate.deleteMore.hover" ).withStyle (TextFormatting .DARK_RED )))
513+ )).withStyle (TextFormatting .GREEN );
514+
515+
516+ sender .sendMessage (
517+ Component .translatable (translationKey , countComponent , confirmationComponent ).withStyle (TextFormatting .YELLOW ).build ()
518+ );
519+ //@formatter:on
488520 }
489521
490522 private void deleteDis (ICommandSender sender , int indexFrom , int indexTo ) {
491523 TASmod .LOGGER .trace (LoggerMarkers .Savestate , "Command DeleteDis {}|{}" , indexFrom , indexTo );
524+
525+ SavestateCallback cb = (paths ) -> {
526+ sender .sendMessage (Component .translatable ("msg.tasmod.savestate.delete" , paths .getSavestate ().getIndex ()).withStyle (TextFormatting .GREEN ).build ());
527+ };
528+
529+ ErrorRunnable onErr = (exception ) -> {
530+ onFailure (sender , exception );
531+ };
532+
492533 try {
493- TASmod .savestateHandlerServer .deleteSavestate (indexFrom , indexTo , null , null );
534+ TASmod .savestateHandlerServer .deleteSavestate (indexFrom , indexTo , cb , onErr );
494535 } catch (SavestateDeleteException e ) {
495- e . printStackTrace ( );
536+ onFailure ( sender , e );
496537 }
497538 }
498539
@@ -548,4 +589,15 @@ private List<String> getIndexes(String[] args) {
548589 });
549590 return getListOfStringsMatchingLastWord (args , out );
550591 }
592+
593+ private static void onFailure (ICommandSender sender , Throwable e ) {
594+ Minecraft mc = Minecraft .getMinecraft ();
595+ mc .addScheduledTask (() -> {
596+ mc .displayGuiScreen (null );
597+ });
598+
599+ sender .sendMessage (Component .literal (e .getMessage ()).withStyle (TextFormatting .RED ).build ());
600+ TASmod .LOGGER .catching (e );
601+ TASmod .savestateHandlerServer .resetState ();
602+ }
551603}
0 commit comments