default @NotNull ModCommand andThen(@NotNull ModCommand next) {
    if (isEmpty()) return next;
    if (next.isEmpty()) return this;
    List<ModCommand> commands = new ArrayList<>(unpack());
    commands.addAll(next.unpack());
    return commands.size() == 1 ? commands.get(0) : new ModCompositeCommand(commands); 
  }
default @NotNull ModCommand andThen(@NotNull ModCommand next)